From 4317e4c19d98a0f976b0aa5c06842efd711a4eb1 Mon Sep 17 00:00:00 2001 From: Juan RP Date: Mon, 17 May 2010 20:40:34 +0200 Subject: [PATCH] vim: compress the patch with gzip. --- srcpkgs/vim/patches/vim-7.2-fixes-5.patch | 30013 ---------------- srcpkgs/vim/patches/vim-7.2-fixes-5.patch.gz | Bin 0 -> 226431 bytes ...tch.args => vim-7.2-fixes-5.patch.gz.args} | 0 3 files changed, 30013 deletions(-) delete mode 100644 srcpkgs/vim/patches/vim-7.2-fixes-5.patch create mode 100644 srcpkgs/vim/patches/vim-7.2-fixes-5.patch.gz rename srcpkgs/vim/patches/{vim-7.2-fixes-5.patch.args => vim-7.2-fixes-5.patch.gz.args} (100%) diff --git a/srcpkgs/vim/patches/vim-7.2-fixes-5.patch b/srcpkgs/vim/patches/vim-7.2-fixes-5.patch deleted file mode 100644 index 2e8142c188d..00000000000 --- a/srcpkgs/vim/patches/vim-7.2-fixes-5.patch +++ /dev/null @@ -1,30013 +0,0 @@ -Submitted By: Matt Burgess -Date: 2009-07-22 -Initial Package Version: 7.2 -Upstream Status: Already in upstream patch repo -Origin: Upstream -Description: This patch contains upstream patch numbers 1 thru 239. - -diff -Naur vim72.orig/Filelist vim72/Filelist ---- vim72.orig/Filelist 2008-07-06 19:02:23.000000000 +0100 -+++ vim72/Filelist 2009-07-22 22:54:22.000000000 +0100 -@@ -285,6 +285,7 @@ - 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 \ -@@ -682,9 +683,7 @@ - runtime/spell/??/main.aap \ - runtime/spell/yi/README.txt \ - runtime/spell/main.aap \ -- runtime/spell/cleanadd.vim \ - runtime/spell/*.vim \ -- runtime/spell/fixdup \ - - # generic language files, binary - LANG_GEN_BIN = \ -diff -Naur vim72.orig/runtime/doc/autocmd.txt vim72/runtime/doc/autocmd.txt ---- vim72.orig/runtime/doc/autocmd.txt 2008-08-09 15:22:59.000000000 +0100 -+++ vim72/runtime/doc/autocmd.txt 2009-07-22 22:54:23.000000000 +0100 -@@ -335,6 +335,8 @@ - NOTE: When this autocommand is executed, the - current buffer "%" may be different from the - buffer being deleted "" and "". -+ Don't change to another buffer, it will cause -+ problems. - *BufEnter* - BufEnter After entering a buffer. Useful for setting - options for a file type. Also executed when -@@ -397,6 +399,8 @@ - NOTE: When this autocommand is executed, the - current buffer "%" may be different from the - buffer being unloaded "". -+ Don't change to another buffer, it will cause -+ problems. - *BufWinEnter* - BufWinEnter After a buffer is displayed in a window. This - can be when the buffer is loaded (after -@@ -428,6 +432,8 @@ - NOTE: When this autocommand is executed, the - current buffer "%" may be different from the - buffer being deleted "". -+ Don't change to another buffer, it will cause -+ problems. - *BufWrite* *BufWritePre* - BufWrite or BufWritePre Before writing the whole buffer to a file. - *BufWriteCmd* -@@ -748,8 +754,10 @@ - 'a' abort, like hitting CTRL-C - When set to an empty string the user will be - asked, as if there was no SwapExists autocmd. -- Note: Do not try to change the buffer, the -- results are unpredictable. -+ *E812* -+ It is not allowed to change to another buffer, -+ change a buffer name or change directory -+ here. - *Syntax* - Syntax When the 'syntax' option has been set. The - pattern is matched against the syntax name. -diff -Naur vim72.orig/runtime/doc/cmdline.txt vim72/runtime/doc/cmdline.txt ---- vim72.orig/runtime/doc/cmdline.txt 2008-08-09 15:22:59.000000000 +0100 -+++ vim72/runtime/doc/cmdline.txt 2009-07-22 22:54:23.000000000 +0100 -@@ -1,4 +1,4 @@ --*cmdline.txt* For Vim version 7.2. Last change: 2008 Jul 29 -+*cmdline.txt* For Vim version 7.2. Last change: 2008 Sep 18 - - - VIM REFERENCE MANUAL by Bram Moolenaar -@@ -157,6 +157,11 @@ - (doesn't work at the expression prompt; some - things such as changing the buffer or current - window are not allowed to avoid side effects) -+ When the result is a |List| the items are used -+ as lines. They can have line breaks inside -+ too. -+ When the result is a Float it's automatically -+ converted to a String. - See |registers| about registers. {not in Vi} - Implementation detail: When using the |expression| register - and invoking setcmdpos(), this sets the position before -@@ -436,13 +441,20 @@ - those files with an extension that is in the 'suffixes' option are ignored. - The default is ".bak,~,.o,.h,.info,.swp,.obj", which means that files ending - in ".bak", "~", ".o", ".h", ".info", ".swp" and ".obj" are sometimes ignored. --It is impossible to ignore suffixes with two dots. Examples: -+ -+An empty entry, two consecutive commas, match a file name that does not -+contain a ".", thus has no suffix. This is useful to ignore "prog" and prefer -+"prog.c". -+ -+Examples: - - pattern: files: match: ~ - test* test.c test.h test.o test.c - test* test.h test.o test.h and test.o - test* test.i test.h test.c test.i and test.c - -+It is impossible to ignore suffixes with two dots. -+ - If there is more than one matching file (after ignoring the ones matching - the 'suffixes' option) the first file name is inserted. You can see that - there is only one match when you type 'wildchar' twice and the completed -@@ -730,19 +742,29 @@ - In Ex commands, at places where a file name can be used, the following - characters have a special meaning. These can also be used in the expression - function expand() |expand()|. -- % is replaced with the current file name *:_%* -- # is replaced with the alternate file name *:_#* -+ % Is replaced with the current file name. *:_%* *c_%* -+ # Is replaced with the alternate file name. *:_#* *c_#* - #n (where n is a number) is replaced with the file name of -- buffer n. "#0" is the same as "#" -- ## is replaced with all names in the argument list *:_##* -+ buffer n. "#0" is the same as "#". -+ ## Is replaced with all names in the argument list *:_##* *c_##* - concatenated, separated by spaces. Each space in a name - is preceded with a backslash. --Note that these give the file name as it was typed. If an absolute path is --needed (when using the file name from a different directory), you need to add --":p". See |filename-modifiers|. -+ # 0) is replaced with old *:_#<* *c_#<* -+ file name n. See |:oldfiles| or |v:oldfiles| to get the -+ number. *E809* -+ {only when compiled with the +eval and +viminfo features} -+ -+Note that these, except "# -+commands. For those you probably have to use quotes (this fails for files -+that contain a quote and wildcards): > - :!ls "%" - :r !spell "%" - -diff -Naur vim72.orig/runtime/doc/eval.txt vim72/runtime/doc/eval.txt ---- vim72.orig/runtime/doc/eval.txt 2008-08-09 15:22:59.000000000 +0100 -+++ vim72/runtime/doc/eval.txt 2009-07-22 22:54:21.000000000 +0100 -@@ -1,4 +1,4 @@ --*eval.txt* For Vim version 7.2. Last change: 2008 Aug 09 -+*eval.txt* For Vim version 7.2. Last change: 2008 Nov 27 - - - VIM REFERENCE MANUAL by Bram Moolenaar -@@ -1484,6 +1484,17 @@ - This is the screen column number, like with |virtcol()|. The - value is zero when there was no mouse button click. - -+ *v:oldfiles* *oldfiles-variable* -+v:oldfiles List of file names that is loaded from the |viminfo| file on -+ startup. These are the files that Vim remembers marks for. -+ The length of the List is limited by the ' argument of the -+ 'viminfo' option (default is 100). -+ Also see |:oldfiles| and |c_#<|. -+ The List can be modified, but this has no effect on what is -+ stored in the |viminfo| file later. If you use values other -+ than String this will cause trouble. -+ {only when compiled with the +viminfo feature} -+ - *v:operator* *operator-variable* - v:operator The last operator given in Normal mode. This is a single - character except for commands starting with or , -@@ -1695,7 +1706,7 @@ - exists( {expr}) Number TRUE if {expr} exists - extend({expr1}, {expr2} [, {expr3}]) - List/Dict insert items of {expr2} into {expr1} --expand( {expr}) String expand special keywords in {expr} -+expand( {expr} [, {flag}]) String expand special keywords in {expr} - feedkeys( {string} [, {mode}]) Number add key sequence to typeahead buffer - filereadable( {file}) Number TRUE if {file} is a readable file - filewritable( {file}) Number TRUE if {file} is a writable file -@@ -1747,8 +1758,9 @@ - getwinposx() Number X coord in pixels of GUI Vim window - getwinposy() Number Y coord in pixels of GUI Vim window - getwinvar( {nr}, {varname}) any variable {varname} in window {nr} --glob( {expr}) String expand file wildcards in {expr} --globpath( {path}, {expr}) String do glob({expr}) for all dirs in {path} -+glob( {expr} [, {flag}]) String expand file wildcards in {expr} -+globpath( {path}, {expr} [, {flag}]) -+ String do glob({expr}) for all dirs in {path} - has( {feature}) Number TRUE if feature {feature} supported - has_key( {dict}, {key}) Number TRUE if {dict} has entry {key} - haslocaldir() Number TRUE if current window executed |:lcd| -@@ -2402,6 +2414,7 @@ - When 'virtualedit' is used {off} specifies the offset in - screen columns from the start of the character. E.g., a - position within a or after the last character. -+ Returns 0 when the position could be set, -1 otherwise. - - - deepcopy({expr}[, {noref}]) *deepcopy()* *E698* -@@ -3275,14 +3288,16 @@ - :let list_is_on = getwinvar(2, '&list') - :echo "myvar = " . getwinvar(1, 'myvar') - < -- *glob()* --glob({expr}) Expand the file wildcards in {expr}. See |wildcards| for the -+glob({expr} [, {flag}]) *glob()* -+ Expand the file wildcards in {expr}. See |wildcards| for the - use of special characters. - The result is a String. - When there are several matches, they are separated by - characters. -- The 'wildignore' option applies: Names matching one of the -- patterns in 'wildignore' will be skipped. -+ Unless the optional {flag} argument is given and is non-zero, -+ the 'suffixes' and 'wildignore' options apply: Names matching -+ one of the patterns in 'wildignore' will be skipped and -+ 'suffixes' affect the ordering of matches. - If the expansion fails, the result is an empty string. - A name for a non-existing file is not included. - -@@ -3296,20 +3311,22 @@ - See |expand()| for expanding special Vim variables. See - |system()| for getting the raw output of an external command. - --globpath({path}, {expr}) *globpath()* -+globpath({path}, {expr} [, {flag}]) *globpath()* - Perform glob() on all directories in {path} and concatenate - the results. Example: > - :echo globpath(&rtp, "syntax/c.vim") - < {path} is a comma-separated list of directory names. Each - directory name is prepended to {expr} and expanded like with -- glob(). A path separator is inserted when needed. -+ |glob()|. A path separator is inserted when needed. - To add a comma inside a directory name escape it with a - backslash. Note that on MS-Windows a directory may have a - trailing backslash, remove it if you put a comma after it. - If the expansion fails for one of the directories, there is no - error message. -- The 'wildignore' option applies: Names matching one of the -- patterns in 'wildignore' will be skipped. -+ Unless the optional {flag} argument is given and is non-zero, -+ the 'suffixes' and 'wildignore' options apply: Names matching -+ one of the patterns in 'wildignore' will be skipped and -+ 'suffixes' affect the ordering of matches. - - The "**" item can be used to search in a directory tree. - For example, to find all "README.txt" files in the directories -@@ -4500,6 +4517,7 @@ - should also work to move files across file systems. The - result is a Number, which is 0 if the file was renamed - successfully, and non-zero when the renaming failed. -+ NOTE: If {to} exists it is overwritten without warning. - This function is not available in the |sandbox|. - - repeat({expr}, {count}) *repeat()* -@@ -5332,10 +5350,12 @@ - "fg" foreground color (GUI: color name used to set - the color, cterm: color number as a string, - term: empty string) -- "bg" background color (like "fg") -+ "bg" background color (as with "fg") -+ "sp" special color (as with "fg") |highlight-guisp| - "fg#" like "fg", but for the GUI and the GUI is - running the name in "#RRGGBB" form - "bg#" like "fg#" for "bg" -+ "sp#" like "fg#" for "sp" - "bold" "1" if bold - "italic" "1" if italic - "reverse" "1" if reverse -@@ -5823,7 +5843,8 @@ - mouse_pterm Compiled with support for qnx pterm mouse. - mouse_sysmouse Compiled with support for sysmouse (*BSD console mouse) - mouse_xterm Compiled with support for xterm mouse. --multi_byte Compiled with support for editing Korean et al. -+multi_byte Compiled with support for 'encoding' -+multi_byte_encoding 'encoding' is set to a multi-byte encoding. - multi_byte_ime Compiled with support for IME input method. - multi_lang Compiled with support for multiple languages. - mzscheme Compiled with MzScheme interface |mzscheme|. -diff -Naur vim72.orig/runtime/doc/if_cscop.txt vim72/runtime/doc/if_cscop.txt ---- vim72.orig/runtime/doc/if_cscop.txt 2008-08-09 15:22:59.000000000 +0100 -+++ vim72/runtime/doc/if_cscop.txt 2009-07-22 22:54:23.000000000 +0100 -@@ -1,4 +1,4 @@ --*if_cscop.txt* For Vim version 7.2. Last change: 2005 Mar 29 -+*if_cscop.txt* For Vim version 7.2. Last change: 2009 Mar 18 - - - VIM REFERENCE MANUAL by Andy Kahn -@@ -131,11 +131,22 @@ - 7 or f: Find this file - 8 or i: Find files #including this file - -+ For all types, except 4 and 6, leading white space for {name} is -+ removed. For 4 and 6 there is exactly one space between {querytype} -+ and {name}. Further white space is included in {name}. -+ - EXAMPLES > - :cscope find c vim_free -- :cscope find 3 vim_free -+ :cscope find 3 vim_free -+< -+ These two examples perform the same query: functions calling -+ "vim_free". > -+ -+ :cscope find t initOnce -+ :cscope find t initOnce - < -- These two examples perform the same query. > -+ The first one searches for the text "initOnce", the second one for -+ " initOnce". > - - :cscope find 0 DEFAULT_TERM - < -@@ -344,13 +355,8 @@ - The DJGPP-built version from http://cscope.sourceforge.net is known to not - work with Vim. - --There are a couple of hard-coded limitations: -- -- 1. The maximum number of cscope connections allowed is 8. Do you -- really need more? -- -- 2. Doing a |:tjump| when |:cstag| searches the tag files is not -- configurable (e.g., you can't do a tselect instead). -+Hard-coded limitation: doing a |:tjump| when |:cstag| searches the tag files -+is not configurable (e.g., you can't do a tselect instead). - - ============================================================================== - 6. Suggested usage *cscope-suggestions* -diff -Naur vim72.orig/runtime/doc/if_mzsch.txt vim72/runtime/doc/if_mzsch.txt ---- vim72.orig/runtime/doc/if_mzsch.txt 2008-08-09 15:22:59.000000000 +0100 -+++ vim72/runtime/doc/if_mzsch.txt 2009-07-22 22:54:23.000000000 +0100 -@@ -1,4 +1,4 @@ --*if_mzsch.txt* For Vim version 7.2. Last change: 2008 Jun 28 -+*if_mzsch.txt* For Vim version 7.2. Last change: 2009 Jun 24 - - - VIM REFERENCE MANUAL by Sergey Khorev -@@ -42,10 +42,6 @@ - - *:mzfile* *:mzf* - :[range]mzf[ile] {file} Execute the MzScheme script in {file}. {not in Vi} -- All statements are executed in the namespace of the -- buffer that was current during :mzfile start. -- If you want to access other namespaces, use -- 'parameterize'. - - All of these commands do essentially the same thing - they execute a piece of - MzScheme code, with the "current range" set to the given line -@@ -54,8 +50,6 @@ - In the case of :mzscheme, the code to execute is in the command-line. - In the case of :mzfile, the code to execute is the contents of the given file. - --Each buffer has its own MzScheme namespace. Global namespace is bound to --the "global-namespace" value from the 'vimext' module. - MzScheme interface defines exception exn:vim, derived from exn. - It is raised for various Vim errors. - -@@ -79,40 +73,8 @@ - e.g.: > - :mzscheme (require (prefix vim- vimext)) - < --All the examples below assume this naming scheme. Note that you need to do --this again for every buffer. -+All the examples below assume this naming scheme. - --The auto-instantiation can be achieved with autocommands, e.g. you can put --something like this in your .vimrc (EOFs should not have indentation): > -- function s:MzRequire() -- if has("mzscheme") -- :mz << EOF -- (require (prefix vim- vimext)) -- (let ((buf (vim-get-buff-by-name (vim-eval "expand(\"\")")))) -- (when (and buf (not (eq? buf (vim-curr-buff)))) -- (parameterize ((current-namespace (vim-get-buff-namespace buf))) -- (namespace-attach-module vim-global-namespace 'vimext) -- (namespace-require '(prefix vim vimext))))) -- EOF -- endif -- endfunction -- -- function s:MzStartup() -- if has("mzscheme") -- au BufNew,BufNewFile,BufAdd,BufReadPre * :call s:MzRequire() -- :mz << EOF -- (current-library-collection-paths -- (cons -- (build-path (find-system-path 'addon-dir) (version) "collects") -- (current-library-collection-paths))) -- EOF -- endif -- endfunction -- -- call s:MzStartup() --< -- --The global namespace just instantiated this module with the prefix "vimext:". - *mzscheme-sandbox* - When executed in the |sandbox|, access to some filesystem and Vim interface - procedures is restricted. -@@ -121,15 +83,20 @@ - 2. Examples *mzscheme-examples* - > - :mzscheme (display "Hello") -+ :mz (display (string-append "Using MzScheme version " (version))) -+ :mzscheme (require (prefix vim- vimext)) ; for MzScheme < 4.x -+ :mzscheme (require (prefix-in vim- 'vimext)) ; MzScheme 4.x - :mzscheme (vim-set-buff-line 10 "This is line #10") - < - Inline script usage: > - function! SetFirstLine() - :mz << EOF - (display "!!!") -+ (require (prefix vim- vimext)) -+ ; for newer versions (require (prefix-in vim- 'vimext)) - (vim-set-buff-line 1 "This is line #1") - (vim-beep) -- EOF -+ EOF - endfunction - - nmap :call SetFirstLine() -@@ -137,17 +104,33 @@ - File execution: > - :mzfile supascript.scm - < --Accessing the current buffer namespace from an MzScheme program running in --another buffer within |:mzfile|-executed script : > -- ; Move to the window below -- (vim-command "wincmd j") -- ; execute in the context of buffer, to which window belongs -- ; assume that buffer has 'textstring' defined -- (parameterize ((current-namespace -- (vim-get-buff-namespace (vim-curr-buff)))) -- (eval '(vim-set-buff-line 1 textstring))) --< -+Vim exception handling: > -+ :mz << EOF -+ (require (prefix vim- vimext)) -+ ; for newer versions (require (prefix-in vim- 'vimext)) -+ (with-handlers -+ ([exn:vim? (lambda (e) (display (exn-message e)))]) -+ (vim-eval "nonsense-string")) -+ EOF -+< -+Auto-instantiation of vimext module (can be placed in your |vimrc|): > -+ function! MzRequire() -+ :redir => l:mzversion -+ :mz (version) -+ :redir END -+ if strpart(l:mzversion, 1, 1) < "4" -+ " MzScheme versions < 4.x: -+ :mz (require (prefix vim- vimext)) -+ else -+ " newer versions: -+ :mz (require (prefix-in vim- 'vimext)) -+ endif -+ endfunction - -+ if has("mzscheme") -+ silent call MzRequire() -+ endif -+< - ============================================================================== - 3. Threads *mzscheme-threads* - -@@ -168,11 +151,11 @@ - Common - ------ - (command {command-string}) Perform the vim ":Ex" style command. -- (eval {expr-string}) Evaluate the vim expression to a string. -- A |List| is turned into a string by -- joining the items and inserting line -- breaks. -- NOTE clashes with MzScheme eval -+ (eval {expr-string}) Evaluate the vim expression into -+ respective MzScheme object: |Lists| are -+ represented as Scheme lists, -+ |Dictionaries| as hash tables. -+ NOTE the name clashes with MzScheme eval - (range-start) Start/End of the range passed with - (range-end) the Scheme command. - (beep) beep -@@ -186,7 +169,6 @@ - be set. The symbol 'global can be passed - as {buffer-or-window}. Then |:setglobal| - will be used. -- global-namespace The MzScheme main namespace. - - Buffers *mzscheme-buffer* - ------- -@@ -228,7 +210,6 @@ - if there is no such buffer. - (get-buff-by-num {buffernum}) Get a buffer by its number (return #f if - there is no buffer with this number). -- (get-buff-namespace [buffer]) Get buffer namespace. - - Windows *mzscheme-window* - ------ -@@ -250,7 +231,7 @@ - (set-cursor (line . col) [window]) Set cursor position. - - ============================================================================== --5. Dynamic loading *mzscheme-dynamic* -+5. Dynamic loading *mzscheme-dynamic* *E815* - - On MS-Windows the MzScheme libraries can be loaded dynamically. The |:version| - output then includes |+mzscheme/dyn|. -diff -Naur vim72.orig/runtime/doc/netbeans.txt vim72/runtime/doc/netbeans.txt ---- vim72.orig/runtime/doc/netbeans.txt 2008-08-09 15:22:59.000000000 +0100 -+++ vim72/runtime/doc/netbeans.txt 2009-07-22 22:54:19.000000000 +0100 -@@ -1,4 +1,4 @@ --*netbeans.txt* For Vim version 7.2. Last change: 2008 Jun 28 -+*netbeans.txt* For Vim version 7.2. Last change: 2009 Jan 06 - - - VIM REFERENCE MANUAL by Gordon Prieur et al. -@@ -722,8 +722,10 @@ - of the cursor. - New in version 2.1. - --killed A file was closed by the user. Only for files that have been -- assigned a number by the IDE. -+killed A file was deleted or wiped out by the user and the buffer -+ annotations have been removed. The bufID number for this -+ buffer has become invalid. Only for files that have been -+ assigned a bufID number by the IDE. - - newDotAndMark off off - Reports the position of the cursor being at "off" bytes into -diff -Naur vim72.orig/runtime/doc/options.txt vim72/runtime/doc/options.txt ---- vim72.orig/runtime/doc/options.txt 2008-08-09 15:22:59.000000000 +0100 -+++ vim72/runtime/doc/options.txt 2009-07-22 22:54:23.000000000 +0100 -@@ -1,4 +1,4 @@ --*options.txt* For Vim version 7.2. Last change: 2008 Aug 06 -+*options.txt* For Vim version 7.2. Last change: 2008 Nov 25 - - - VIM REFERENCE MANUAL by Bram Moolenaar -@@ -1443,6 +1443,14 @@ - autoselectml Like "autoselect", but for the modeless selection - only. Compare to the 'A' flag in 'guioptions'. - -+ html When the clipboard contains HTML, use this when -+ pasting. When putting text on the clipboard, mark it -+ as HTML. This works to copy rendered HTML from -+ Firefox, paste it as raw HTML in Vim, select the HTML -+ in Vim and paste it in a rich edit box in Firefox. -+ Only supported for GTK version 2 and later. -+ Only available with the |+multi_byte| feature. -+ - exclude:{pattern} - Defines a pattern that is matched against the name of - the terminal 'term'. If there is a match, no -@@ -4175,9 +4183,6 @@ - be able to execute Normal mode commands. - This is the opposite of the 'keymap' option, where characters are - mapped in Insert mode. -- This only works for 8-bit characters. The value of 'langmap' may be -- specified with multi-byte characters (e.g., UTF-8), but only the lower -- 8 bits of each character will be used. - - Example (for Greek, in UTF-8): *greek* > - :set langmap=ΑA,ΒB,ΨC,ΔD,ΕE,ΦF,ΓG,ΗH,ΙI,ΞJ,ΚK,ΛL,ΜM,ΝN,ΟO,ΠP,QQ,ΡR,ΣS,ΤT,ΘU,ΩV,WW,ΧX,ΥY,ΖZ,αa,βb,ψc,δd,εe,φf,γg,ηh,ιi,ξj,κk,λl,μm,νn,οo,πp,qq,ρr,σs,τt,θu,ωv,ςw,χx,υy,ζz -@@ -7472,7 +7477,9 @@ - {not available when compiled without the |+wildignore| - feature} - A list of file patterns. A file that matches with one of these -- patterns is ignored when completing file or directory names. -+ patterns is ignored when completing file or directory names, and -+ influences the result of |expand()|, |glob()| and |globpath()| unless -+ a flag is passed to disable this. - The pattern is used like with |:autocmd|, see |autocmd-patterns|. - Also see 'suffixes'. - Example: > -diff -Naur vim72.orig/runtime/doc/os_vms.txt vim72/runtime/doc/os_vms.txt ---- vim72.orig/runtime/doc/os_vms.txt 2008-08-09 15:23:00.000000000 +0100 -+++ vim72/runtime/doc/os_vms.txt 2009-07-22 22:54:16.000000000 +0100 -@@ -1,4 +1,4 @@ --*os_vms.txt* For Vim version 7.2. Last change: 2006 Nov 18 -+*os_vms.txt* For Vim version 7.2. Last change: 2008 Aug 19 - - - VIM REFERENCE MANUAL -@@ -312,7 +312,7 @@ - - 8. Useful notes *vms-notes* - --8.1 backspace/delete -+8.1 Backspace/delete - 8.2 Filters - 8.3 VMS file version numbers - 8.4 Directory conversion -@@ -326,8 +326,10 @@ - 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 -+8.1 Backspace/delete - - There are backspace/delete key inconsistencies with VMS. - :fixdel doesn't do the trick, but the solution is: > -@@ -663,12 +665,130 @@ - - (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* - --Version 7 -+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,6 +926,7 @@ - - OpenVMS documentation and executables are maintained by: - Zoltan Arpadffy -+OpenVMS Vim page: http://www.polarhome.com/vim/ - - This document uses parts and remarks from earlier authors and contributors - of OS_VMS.TXT: -diff -Naur vim72.orig/runtime/doc/spell.txt vim72/runtime/doc/spell.txt ---- vim72.orig/runtime/doc/spell.txt 2008-08-09 15:23:00.000000000 +0100 -+++ vim72/runtime/doc/spell.txt 2009-07-22 22:54:18.000000000 +0100 -@@ -1,4 +1,4 @@ --*spell.txt* For Vim version 7.2. Last change: 2008 Jun 21 -+*spell.txt* For Vim version 7.2. Last change: 2008 Nov 30 - - - VIM REFERENCE MANUAL by Bram Moolenaar -@@ -831,8 +831,11 @@ - - # comment line ~ - --With some items it's also possible to put a comment after it, but this isn't --supported in general. -+Items with a fixed number of arguments can be followed by a comment. But only -+if none of the arguments can contain white space. The comment must start with -+a "#" character. Example: -+ -+ KEEPCASE = # fix case for words with this flag ~ - - - ENCODING *spell-SET* -@@ -965,6 +968,9 @@ - - Note: When using utf-8 only characters up to 65000 may be used for flags. - -+Note: even when using "num" or "long" the number of flags available to -+compounding and prefixes is limited to about 250. -+ - - AFFIXES - *spell-PFX* *spell-SFX* -@@ -1178,6 +1184,9 @@ - The flag also applies to the word with affixes, thus this can be used to mark - a whole bunch of related words as bad. - -+ *spell-FORBIDDENWORD* -+FORBIDDENWORD can be used just like BAD. For compatibility with Hunspell. -+ - *spell-NEEDAFFIX* - The NEEDAFFIX flag is used to require that a word is used with an affix. The - word itself is not a good word (unless there is an empty affix). Example: -@@ -1268,6 +1277,10 @@ - - NEEDCOMPOUND & ~ - -+ *spell-ONLYINCOMPOUND* -+The ONLYINCOMPOUND does exactly the same as NEEDCOMPOUND. Supported for -+compatiblity with Hunspell. -+ - *spell-COMPOUNDMIN* - The minimal character length of a word used for compounding is specified with - COMPOUNDMIN. Example: -@@ -1328,6 +1341,20 @@ - rules. Can also be used for an affix to count the affix as a compounding - word. - -+ *spell-CHECKCOMPOUNDPATTERN* -+CHECKCOMPOUNDPATTERN is used to define patterns that, when matching at the -+position where two words are compounded together forbids the compound. -+For example: -+ CHECKCOMPOUNDPATTERN o e ~ -+ -+This forbids compounding if the first word ends in "o" and the second word -+starts with "e". -+ -+The arguments must be plain text, no patterns are actually supported, despite -+the item name. Case is always ignored. -+ -+The Hunspell feature to use three arguments and flags is not supported. -+ - *spell-SYLLABLE* - The SYLLABLE item defines characters or character sequences that are used to - count the number of syllables in a word. Example: -@@ -1496,6 +1523,10 @@ - ACCENT (Hunspell) *spell-ACCENT* - Use MAP instead. |spell-MAP| - -+BREAK (Hunspell) *spell-BREAK* -+ Define break points. Unclear how it works exactly. -+ Not supported. -+ - CHECKCOMPOUNDCASE (Hunspell) *spell-CHECKCOMPOUNDCASE* - Disallow uppercase letters at compound word boundaries. - Not supported. -@@ -1512,9 +1543,6 @@ - Forbid three identical characters when compounding. Not - supported. - --CHECKCOMPOUNDPATTERN (Hunspell) *spell-CHECKCOMPOUNDPATTERN* -- Forbid compounding when patterns match. Not supported. -- - COMPLEXPREFIXES (Hunspell) *spell-COMPLEXPREFIXES* - Enables using two prefixes. Not supported. - -@@ -1536,13 +1564,18 @@ - COMPOUNDMIDDLE (Hunspell) *spell-COMPOUNDMIDDLE* - Use COMPOUNDRULE instead. |spell-COMPOUNDRULE| - -+COMPOUNDRULES (Hunspell) *spell-COMPOUNDRULES* -+ Number of COMPOUNDRULE lines following. Ignored, but the -+ argument must be a number. -+ - COMPOUNDSYLLABLE (Hunspell) *spell-COMPOUNDSYLLABLE* - Use SYLLABLE and COMPOUNDSYLMAX instead. |spell-SYLLABLE| - |spell-COMPOUNDSYLMAX| - --FORBIDDENWORD (Hunspell) *spell-FORBIDDENWORD* -- Use BAD instead. |spell-BAD| -- -+KEY (Hunspell) *spell-KEY* -+ Define characters that are close together on the keyboard. -+ Used to give better suggestions. Not supported. -+ - LANG (Hunspell) *spell-LANG* - This specifies language-specific behavior. This actually - moves part of the language knowledge into the program, -@@ -1553,10 +1586,7 @@ - Only needed for morphological analysis. - - MAXNGRAMSUGS (Hunspell) *spell-MAXNGRAMSUGS* -- Not supported. -- --ONLYINCOMPOUND (Hunspell) *spell-ONLYINCOMPOUND* -- Use NEEDCOMPOUND instead. |spell-NEEDCOMPOUND| -+ Set number of n-gram suggestions. Not supported. - - PSEUDOROOT (Hunspell) *spell-PSEUDOROOT* - Use NEEDAFFIX instead. |spell-NEEDAFFIX| -diff -Naur vim72.orig/runtime/doc/starting.txt vim72/runtime/doc/starting.txt ---- vim72.orig/runtime/doc/starting.txt 2008-08-09 15:23:00.000000000 +0100 -+++ vim72/runtime/doc/starting.txt 2009-07-22 22:54:17.000000000 +0100 -@@ -1,4 +1,4 @@ --*starting.txt* For Vim version 7.2. Last change: 2008 Jun 21 -+*starting.txt* For Vim version 7.2. Last change: 2008 Nov 09 - - - VIM REFERENCE MANUAL by Bram Moolenaar -@@ -1337,8 +1337,9 @@ - *viminfo-read* - When Vim is started and the 'viminfo' option is non-empty, the contents of - the viminfo file are read and the info can be used in the appropriate places. --The marks are not read in at startup (but file marks are). See --|initialization| for how to set the 'viminfo' option upon startup. -+The |v:oldfiles| variable is filled. The marks are not read in at startup -+(but file marks are). See |initialization| for how to set the 'viminfo' -+option upon startup. - - *viminfo-write* - When Vim exits and 'viminfo' is non-empty, the info is stored in the viminfo -@@ -1372,6 +1373,8 @@ - that start with any string given with the "r" flag in 'viminfo'. This can be - used to avoid saving marks for files on removable media (for MS-DOS you would - use "ra:,rb:", for Amiga "rdf0:,rdf1:,rdf2:"). -+The |v:oldfiles| variable is filled with the file names that the viminfo file -+has marks for. - - *viminfo-file-marks* - Uppercase marks ('A to 'Z) are stored when writing the viminfo file. The -@@ -1463,8 +1466,8 @@ - *:rv* *:rviminfo* *E195* - :rv[iminfo][!] [file] Read from viminfo file [file] (default: see above). - If [!] is given, then any information that is -- already set (registers, marks, etc.) will be -- overwritten. {not in Vi} -+ already set (registers, marks, |v:oldfiles|, etc.) -+ will be overwritten {not in Vi} - - *:wv* *:wviminfo* *E137* *E138* *E574* - :wv[iminfo][!] [file] Write to viminfo file [file] (default: see above). -@@ -1479,4 +1482,20 @@ - the .viminfo file. - {not in Vi} - -+ *:ol* *:oldfiles* -+:ol[dfiles] List the files that have marks stored in the viminfo -+ file. This list is read on startup and only changes -+ afterwards with ":rviminfo!". Also see |v:oldfiles|. -+ The number can be used with |c_#<|. -+ {not in Vi, only when compiled with the +eval feature} -+ -+:bro[wse] ol[dfiles][!] -+ List file names as with |:oldfiles|, and then prompt -+ for a number. When the number is valid that file from -+ the list is edited. -+ If you get the |press-enter| prompt you can press "q" -+ and still get the prompt to enter a file number. -+ Use ! to abondon a modified buffer. |abandon| -+ {not when compiled with tiny or small features} -+ - vim:tw=78:ts=8:ft=help:norl: -diff -Naur vim72.orig/runtime/doc/usr_21.txt vim72/runtime/doc/usr_21.txt ---- vim72.orig/runtime/doc/usr_21.txt 2008-08-09 15:23:01.000000000 +0100 -+++ vim72/runtime/doc/usr_21.txt 2009-07-22 22:54:17.000000000 +0100 -@@ -1,4 +1,4 @@ --*usr_21.txt* For Vim version 7.2. Last change: 2007 May 01 -+*usr_21.txt* For Vim version 7.2. Last change: 2008 Nov 09 - - VIM USER MANUAL - by Bram Moolenaar - -@@ -153,7 +153,7 @@ - to be lost. Each item can be remembered only once. - - --GETTING BACK TO WHERE YOU WERE -+GETTING BACK TO WHERE YOU STOPPED VIM - - You are halfway editing a file and it's time to leave for holidays. You exit - Vim and go enjoy yourselves, forgetting all about your work. After a couple -@@ -168,6 +168,48 @@ - The |:marks| command is useful to find out where '0 to '9 will take you. - - -+GETTING BACK TO SOME FILE -+ -+If you want to go back to a file that you edited recently, but not when -+exiting Vim, there is a slightly more complicated way. You can see a list of -+files by typing the command: > -+ -+ :oldfiles -+< 1: ~/.viminfo ~ -+ 2: ~/text/resume.txt ~ -+ 3: /tmp/draft ~ -+ -+Now you would like to edit the second file, which is in the list preceded by -+"2:". You type: > -+ -+ :e #<2 -+ -+Instead of ":e" you can use any command that has a file name argument, the -+"#<2" item works in the same place as "%" (current file name) and "#" -+(alternate file name). So you can also split the window to edit the third -+file: > -+ -+ :split #<3 -+ -+That #<123 thing is a bit complicated when you just want to edit a file. -+Fortunately there is a simpler way: > -+ -+ :browse oldfiles -+< 1: ~/.viminfo ~ -+ 2: ~/text/resume.txt ~ -+ 3: /tmp/draft ~ -+ -- More -- -+ -+You get the same list of files as with |:oldfiles|. If you want to edit -+"resume.txt" first press "q" to stop the listing. You will get a prompt: -+ -+ Type number and (empty cancels): ~ -+ -+Type "2" and press to edit the second file. -+ -+More info at |:oldfiles|, |v:oldfiles| and |c_#<|. -+ -+ - MOVE INFO FROM ONE VIM TO ANOTHER - - You can use the ":wviminfo" and ":rviminfo" commands to save and restore the -diff -Naur vim72.orig/runtime/doc/various.txt vim72/runtime/doc/various.txt ---- vim72.orig/runtime/doc/various.txt 2008-08-09 15:23:01.000000000 +0100 -+++ vim72/runtime/doc/various.txt 2009-07-22 22:54:23.000000000 +0100 -@@ -508,6 +508,17 @@ - messages though. Use ":silent" in the command itself - to avoid that: ":silent menu .... :silent command". - -+ *:uns* *:unsilent* -+:uns[ilent] {command} Execute {command} not silently. Only makes a -+ difference when |:silent| was used to get to this -+ command. -+ Use this for giving a message even when |:silent| was -+ used. In this example |:silent| is used to avoid the -+ message about reading the file and |:unsilent| to be -+ able to list the first line of each file. > -+ :silent argdo unsilent echo expand('%') . ": " . getline(1) -+< -+ - *:verb* *:verbose* - :[count]verb[ose] {command} - Execute {command} with 'verbose' set to [count]. If -diff -Naur vim72.orig/runtime/scripts.vim vim72/runtime/scripts.vim ---- vim72.orig/runtime/scripts.vim 2008-08-08 23:27:21.000000000 +0100 -+++ vim72/runtime/scripts.vim 2009-07-22 22:54:16.000000000 +0100 -@@ -234,6 +234,10 @@ - elseif s:line1 =~ '\' -+ set ft=html -+ - " PDF - elseif s:line1 =~ '^%PDF-' - set ft=pdf -diff -Naur vim72.orig/src/auto/configure vim72/src/auto/configure ---- vim72.orig/src/auto/configure 2008-07-24 13:40:36.000000000 +0100 -+++ vim72/src/auto/configure 2009-07-22 22:54:24.000000000 +0100 -@@ -1,6 +1,6 @@ - #! /bin/sh - # Guess values for system-dependent variables and create Makefiles. --# Generated by GNU Autoconf 2.62. -+# Generated by GNU Autoconf 2.63. - # - # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, - # 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. -@@ -635,138 +635,140 @@ - # include - #endif" - --ac_subst_vars='SHELL --PATH_SEPARATOR --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 --SET_MAKE --CC --CFLAGS --LDFLAGS --CPPFLAGS --ac_ct_CC --EXEEXT --OBJEXT --CPP --GREP --EGREP --AWK --STRIP --CPP_MM --OS_EXTRA_SRC --OS_EXTRA_OBJ --VIMNAME --EXNAME --VIEWNAME --line_break --dovimdiff --dogvimdiff --compiledby --vi_cv_path_mzscheme --MZSCHEME_SRC --MZSCHEME_OBJ --MZSCHEME_PRO --MZSCHEME_LIBS --MZSCHEME_CFLAGS --vi_cv_path_perl --vi_cv_perllib --shrpenv --PERL_SRC --PERL_OBJ --PERL_PRO --PERL_CFLAGS --PERL_LIBS --vi_cv_path_python --PYTHON_CONFDIR --PYTHON_LIBS --PYTHON_GETPATH_CFLAGS --PYTHON_CFLAGS --PYTHON_SRC --PYTHON_OBJ --vi_cv_path_tcl --TCL_SRC --TCL_OBJ --TCL_PRO --TCL_CFLAGS --TCL_LIBS --vi_cv_path_ruby --RUBY_SRC --RUBY_OBJ --RUBY_PRO --RUBY_CFLAGS --RUBY_LIBS --WORKSHOP_SRC --WORKSHOP_OBJ --NETBEANS_SRC --NETBEANS_OBJ --SNIFF_SRC --SNIFF_OBJ --xmkmfpath --XMKMF --X_CFLAGS --X_PRE_LIBS --X_LIBS --X_EXTRA_LIBS --X_LIB --GTK_CONFIG --GTK12_CONFIG --PKG_CONFIG --GTK_CFLAGS --GTK_LIBS --GTK_LIBNAME --GNOME_LIBS --GNOME_LIBDIR --GNOME_INCLUDEDIR --GNOME_CONFIG --MOTIF_LIBNAME --NARROW_PROTO --GUI_INC_LOC --GUI_LIB_LOC --GUITYPE --GUI_X_LIBS --HANGULIN_SRC --HANGULIN_OBJ --TAGPRG --INSTALL_LANGS --INSTALL_TOOL_LANGS --MSGFMT --MAKEMO --DEPEND_CFLAGS_FILTER -+ac_subst_vars='LTLIBOBJS - LIBOBJS --LTLIBOBJS' -+DEPEND_CFLAGS_FILTER -+MAKEMO -+MSGFMT -+INSTALL_TOOL_LANGS -+INSTALL_LANGS -+TAGPRG -+HANGULIN_OBJ -+HANGULIN_SRC -+GUI_X_LIBS -+GUITYPE -+GUI_LIB_LOC -+GUI_INC_LOC -+NARROW_PROTO -+MOTIF_LIBNAME -+GNOME_CONFIG -+GNOME_INCLUDEDIR -+GNOME_LIBDIR -+GNOME_LIBS -+GTK_LIBNAME -+GTK_LIBS -+GTK_CFLAGS -+PKG_CONFIG -+GTK12_CONFIG -+GTK_CONFIG -+X_LIB -+X_EXTRA_LIBS -+X_LIBS -+X_PRE_LIBS -+X_CFLAGS -+XMKMF -+xmkmfpath -+SNIFF_OBJ -+SNIFF_SRC -+NETBEANS_OBJ -+NETBEANS_SRC -+WORKSHOP_OBJ -+WORKSHOP_SRC -+RUBY_LIBS -+RUBY_CFLAGS -+RUBY_PRO -+RUBY_OBJ -+RUBY_SRC -+vi_cv_path_ruby -+TCL_LIBS -+TCL_CFLAGS -+TCL_PRO -+TCL_OBJ -+TCL_SRC -+vi_cv_path_tcl -+PYTHON_OBJ -+PYTHON_SRC -+PYTHON_CFLAGS -+PYTHON_GETPATH_CFLAGS -+PYTHON_LIBS -+PYTHON_CONFDIR -+vi_cv_path_python -+PERL_LIBS -+PERL_CFLAGS -+PERL_PRO -+PERL_OBJ -+PERL_SRC -+shrpenv -+vi_cv_perllib -+vi_cv_path_perl -+MZSCHEME_MZC -+MZSCHEME_EXTRA -+MZSCHEME_CFLAGS -+MZSCHEME_LIBS -+MZSCHEME_PRO -+MZSCHEME_OBJ -+MZSCHEME_SRC -+vi_cv_path_mzscheme -+compiledby -+dogvimdiff -+dovimdiff -+line_break -+VIEWNAME -+EXNAME -+VIMNAME -+OS_EXTRA_OBJ -+OS_EXTRA_SRC -+CPP_MM -+STRIP -+AWK -+EGREP -+GREP -+CPP -+OBJEXT -+EXEEXT -+ac_ct_CC -+CPPFLAGS -+LDFLAGS -+CFLAGS -+CC -+SET_MAKE -+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 -+PATH_SEPARATOR -+SHELL' - ac_subst_files='' - ac_user_opts=' - enable_option_checking -@@ -1253,9 +1255,9 @@ - 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 -+ 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 ;; -+ *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; - esac - fi - -@@ -1308,7 +1310,7 @@ - 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 -+ { $as_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 -@@ -1587,7 +1589,7 @@ - if $ac_init_version; then - cat <<\_ACEOF - configure --generated by GNU Autoconf 2.62 -+generated by GNU Autoconf 2.63 - - Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, - 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. -@@ -1601,7 +1603,7 @@ - running configure, to aid debugging if configure makes a mistake. - - It was created by $as_me, which was --generated by GNU Autoconf 2.62. Invocation command line was -+generated by GNU Autoconf 2.63. Invocation command line was - - $ $0 $@ - -@@ -1724,8 +1726,8 @@ - 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_*) { $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;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( -@@ -1928,6 +1930,8 @@ - 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 -@@ -2084,12 +2088,8 @@ - else - case $cross_compiling:$ac_tool_warned in - yes:) --{ $as_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 --$as_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;} -+{ $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;} - ac_tool_warned=yes ;; - esac - CC=$ac_ct_CC -@@ -2288,12 +2288,8 @@ - else - case $cross_compiling:$ac_tool_warned in - yes:) --{ $as_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 --$as_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;} -+{ $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;} - ac_tool_warned=yes ;; - esac - CC=$ac_ct_CC -@@ -2303,11 +2299,13 @@ - fi - - --test -z "$CC" && { { $as_echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH -+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 - See \`config.log' for more details." >&5 - $as_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 -@@ -2437,11 +2435,13 @@ - $as_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 - See \`config.log' for more details." >&5 - $as_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 -@@ -2469,13 +2469,15 @@ - if test "$cross_compiling" = maybe; then - cross_compiling=yes - else -- { { $as_echo "$as_me:$LINENO: error: cannot run C compiled programs. -+ { { $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. - 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. - 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 -@@ -2518,11 +2520,13 @@ - esac - done - else -- { { $as_echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link -+ { { $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 - See \`config.log' for more details." >&5 - $as_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 -@@ -2576,11 +2580,13 @@ - $as_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 - See \`config.log' for more details." >&5 - $as_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 -@@ -3148,11 +3154,13 @@ - if $ac_preproc_ok; then - : - else -- { { $as_echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check -+ { { $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 - See \`config.log' for more details." >&5 - $as_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 -@@ -4016,8 +4024,9 @@ - $as_echo "$as_val"'` - { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 - $as_echo "$ac_res" >&6; } --if test `eval 'as_val=${'$as_ac_Header'} -- $as_echo "$as_val"'` = yes; then -+as_val=`eval 'as_val=${'$as_ac_Header'} -+ $as_echo "$as_val"'` -+ if test "x$as_val" = x""yes; then - cat >>confdefs.h <<_ACEOF - #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 - _ACEOF -@@ -4154,7 +4163,7 @@ - $as_echo "$ac_cv_header_Carbon_Carbon_h" >&6; } - - fi --if test $ac_cv_header_Carbon_Carbon_h = yes; then -+if test "x$ac_cv_header_Carbon_Carbon_h" = x""yes; then - CARBON=yes - fi - -@@ -4484,7 +4493,7 @@ - fi - { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_selinux_is_selinux_enabled" >&5 - $as_echo "$ac_cv_lib_selinux_is_selinux_enabled" >&6; } --if test $ac_cv_lib_selinux_is_selinux_enabled = yes; then -+if test "x$ac_cv_lib_selinux_is_selinux_enabled" = x""yes; then - LIBS="$LIBS -lselinux" - cat >>confdefs.h <<\_ACEOF - #define HAVE_SELINUX 1 -@@ -4634,8 +4643,8 @@ - $as_echo "\"$PLTHOME\"" >&6; } - vi_cv_path_mzscheme_pfx="$PLTHOME" - else -- { $as_echo "$as_me:$LINENO: result: \"not set\"" >&5 --$as_echo "\"not set\"" >&6; } -+ { $as_echo "$as_me:$LINENO: result: not set" >&5 -+$as_echo "not set" >&6; } - # Extract the first word of "mzscheme", so it can be a program name with args. - set dummy mzscheme; ac_word=$2 - { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 -@@ -4690,16 +4699,16 @@ - if test "${vi_cv_path_mzscheme_pfx+set}" = set; then - $as_echo_n "(cached) " >&6 - else -- vi_cv_path_mzscheme_pfx=` -- ${vi_cv_path_mzscheme} -evm \ -- "(display (simplify-path \ -+ echo "(display (simplify-path \ - (build-path (call-with-values \ - (lambda () (split-path (find-system-path (quote exec-file)))) \ -- (lambda (base name must-be-dir?) base)) (quote up))))"` -+ (lambda (base name must-be-dir?) base)) (quote up))))" > mzdirs.scm -+ vi_cv_path_mzscheme_pfx=`${vi_cv_path_mzscheme} -r mzdirs.scm | \ -+ sed -e 's+/$++'` - fi - { $as_echo "$as_me:$LINENO: result: $vi_cv_path_mzscheme_pfx" >&5 - $as_echo "$vi_cv_path_mzscheme_pfx" >&6; } -- vi_cv_path_mzscheme_pfx=`echo "$vi_cv_path_mzscheme_pfx" | sed 's+/$++'` -+ rm -f mzdirs.scm - fi - fi - fi -@@ -4709,21 +4718,32 @@ - { $as_echo "$as_me:$LINENO: checking if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include" >&5 - $as_echo_n "checking if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include... " >&6; } - if test -f $vi_cv_path_mzscheme_pfx/include/scheme.h; then -- { $as_echo "$as_me:$LINENO: result: \"yes\"" >&5 --$as_echo "\"yes\"" >&6; } -+ SCHEME_INC=${vi_cv_path_mzscheme_pfx}/include -+ { $as_echo "$as_me:$LINENO: result: yes" >&5 -+$as_echo "yes" >&6; } - else -- { $as_echo "$as_me:$LINENO: result: \"no\"" >&5 --$as_echo "\"no\"" >&6; } -- { $as_echo "$as_me:$LINENO: checking if scheme.h can be found in $vi_cv_path_mzscheme_pfx/plt/include" >&5 --$as_echo_n "checking if scheme.h can be found in $vi_cv_path_mzscheme_pfx/plt/include... " >&6; } -+ { $as_echo "$as_me:$LINENO: result: no" >&5 -+$as_echo "no" >&6; } -+ { $as_echo "$as_me:$LINENO: checking if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include/plt" >&5 -+$as_echo_n "checking if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include/plt... " >&6; } - if test -f $vi_cv_path_mzscheme_pfx/include/plt/scheme.h; then -- { $as_echo "$as_me:$LINENO: result: \"yes\"" >&5 --$as_echo "\"yes\"" >&6; } -- SCHEME_INC=/plt -+ { $as_echo "$as_me:$LINENO: result: yes" >&5 -+$as_echo "yes" >&6; } -+ SCHEME_INC=${vi_cv_path_mzscheme_pfx}/include/plt - else -- { $as_echo "$as_me:$LINENO: result: \"no\"" >&5 --$as_echo "\"no\"" >&6; } -- vi_cv_path_mzscheme_pfx= -+ { $as_echo "$as_me:$LINENO: result: no" >&5 -+$as_echo "no" >&6; } -+ { $as_echo "$as_me:$LINENO: checking if scheme.h can be found in /usr/include/plt/" >&5 -+$as_echo_n "checking if scheme.h can be found in /usr/include/plt/... " >&6; } -+ if test -f /usr/include/plt/scheme.h; then -+ { $as_echo "$as_me:$LINENO: result: yes" >&5 -+$as_echo "yes" >&6; } -+ SCHEME_INC=/usr/include/plt -+ else -+ { $as_echo "$as_me:$LINENO: result: no" >&5 -+$as_echo "no" >&6; } -+ vi_cv_path_mzscheme_pfx= -+ fi - fi - fi - fi -@@ -4731,21 +4751,34 @@ - if test "X$vi_cv_path_mzscheme_pfx" != "X"; then - if test "x$MACOSX" = "xyes"; then - MZSCHEME_LIBS="-framework PLT_MzScheme" -+ elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzscheme3m.a"; then -+ MZSCHEME_LIBS="${vi_cv_path_mzscheme_pfx}/lib/libmzscheme3m.a" -+ MZSCHEME_CFLAGS="-DMZ_PRECISE_GC" - elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzgc.a"; then - MZSCHEME_LIBS="${vi_cv_path_mzscheme_pfx}/lib/libmzscheme.a ${vi_cv_path_mzscheme_pfx}/lib/libmzgc.a" - else -- MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lmzscheme -lmzgc" -+ if test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzscheme3m.so"; then -+ MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lmzscheme3m" -+ MZSCHEME_CFLAGS="-DMZ_PRECISE_GC" -+ else -+ MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lmzscheme -lmzgc" -+ fi - if test "$GCC" = yes; then -- MZSCHEME_LIBS="$MZSCHEME_LIBS -Wl,-rpath -Wl,${vi_cv_path_mzscheme_pfx}/lib" -+ MZSCHEME_LIBS="${MZSCHEME_LIBS} -Wl,-rpath -Wl,${vi_cv_path_mzscheme_pfx}/lib" - elif test "`(uname) 2>/dev/null`" = SunOS && - uname -r | grep '^5' >/dev/null; then -- MZSCHEME_LIBS="$MZSCHEME_LIBS -R ${vi_cv_path_mzscheme_pfx}/lib" -+ MZSCHEME_LIBS="${MZSCHEME_LIBS} -R ${vi_cv_path_mzscheme_pfx}/lib" - fi - fi - if test -d $vi_cv_path_mzscheme_pfx/lib/plt/collects; then - SCHEME_COLLECTS=lib/plt/ - fi -- MZSCHEME_CFLAGS="-I${vi_cv_path_mzscheme_pfx}/include${SCHEME_INC} \ -+ if test -f "${vi_cv_path_mzscheme_pfx}/${SCHEME_COLLECTS}collects/scheme/base.ss" ; then -+ MZSCHEME_EXTRA="mzscheme_base.c" -+ MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -DINCLUDE_MZSCHEME_BASE" -+ MZSCHEME_MZC="${vi_cv_path_mzscheme_pfx}/bin/mzc" -+ fi -+ MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -I${SCHEME_INC} \ - -DMZSCHEME_COLLECTS='\"${vi_cv_path_mzscheme_pfx}/${SCHEME_COLLECTS}collects\"'" - MZSCHEME_SRC="if_mzsch.c" - MZSCHEME_OBJ="objects/if_mzsch.o" -@@ -4760,6 +4793,8 @@ - - - -+ -+ - fi - - -@@ -5745,7 +5780,10 @@ - fi - rubyldflags=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG["LDFLAGS"]'` - if test "X$rubyldflags" != "X"; then -- LDFLAGS="$rubyldflags $LDFLAGS" -+ rubyldflags=`echo "$rubyldflags" | sed -e 's/-arch\ ppc//' -e 's/-arch\ i386//'` -+ if test "X$rubyldflags" != "X"; then -+ LDFLAGS="$rubyldflags $LDFLAGS" -+ fi - fi - RUBY_SRC="if_ruby.c" - RUBY_OBJ="objects/if_ruby.o" -@@ -5891,7 +5929,7 @@ - fi - { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_socket_socket" >&5 - $as_echo "$ac_cv_lib_socket_socket" >&6; } --if test $ac_cv_lib_socket_socket = yes; then -+if test "x$ac_cv_lib_socket_socket" = x""yes; then - cat >>confdefs.h <<_ACEOF - #define HAVE_LIBSOCKET 1 - _ACEOF -@@ -5966,7 +6004,7 @@ - fi - { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_nsl_gethostbyname" >&5 - $as_echo "$ac_cv_lib_nsl_gethostbyname" >&6; } --if test $ac_cv_lib_nsl_gethostbyname = yes; then -+if test "x$ac_cv_lib_nsl_gethostbyname" = x""yes; then - cat >>confdefs.h <<_ACEOF - #define HAVE_LIBNSL 1 - _ACEOF -@@ -6203,8 +6241,8 @@ - have_x=disabled - else - case $x_includes,$x_libraries in #( -- *\'*) { { $as_echo "$as_me:$LINENO: error: Cannot use X directory names containing '" >&5 --$as_echo "$as_me: error: Cannot use X directory names containing '" >&2;} -+ *\'*) { { $as_echo "$as_me:$LINENO: error: cannot use X directory names containing '" >&5 -+$as_echo "$as_me: error: cannot use X directory names containing '" >&2;} - { (exit 1); exit 1; }; };; #( - *,NONE | NONE,*) if test "${ac_cv_have_x+set}" = set; then - $as_echo_n "(cached) " >&6 -@@ -6242,7 +6280,7 @@ - *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;; - esac - case $ac_im_usrlibdir in -- /usr/lib | /lib) ;; -+ /usr/lib | /usr/lib64 | /lib | /lib64) ;; - *) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;; - esac - fi -@@ -6682,7 +6720,7 @@ - fi - { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dnet_dnet_ntoa" >&5 - $as_echo "$ac_cv_lib_dnet_dnet_ntoa" >&6; } --if test $ac_cv_lib_dnet_dnet_ntoa = yes; then -+if test "x$ac_cv_lib_dnet_dnet_ntoa" = x""yes; then - X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet" - fi - -@@ -6752,7 +6790,7 @@ - fi - { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5 - $as_echo "$ac_cv_lib_dnet_stub_dnet_ntoa" >&6; } --if test $ac_cv_lib_dnet_stub_dnet_ntoa = yes; then -+if test "x$ac_cv_lib_dnet_stub_dnet_ntoa" = x""yes; then - X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub" - fi - -@@ -6924,7 +6962,7 @@ - fi - { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_nsl_gethostbyname" >&5 - $as_echo "$ac_cv_lib_nsl_gethostbyname" >&6; } --if test $ac_cv_lib_nsl_gethostbyname = yes; then -+if test "x$ac_cv_lib_nsl_gethostbyname" = x""yes; then - X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl" - fi - -@@ -6994,7 +7032,7 @@ - fi - { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_bsd_gethostbyname" >&5 - $as_echo "$ac_cv_lib_bsd_gethostbyname" >&6; } --if test $ac_cv_lib_bsd_gethostbyname = yes; then -+if test "x$ac_cv_lib_bsd_gethostbyname" = x""yes; then - X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd" - fi - -@@ -7160,7 +7198,7 @@ - fi - { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_socket_connect" >&5 - $as_echo "$ac_cv_lib_socket_connect" >&6; } --if test $ac_cv_lib_socket_connect = yes; then -+if test "x$ac_cv_lib_socket_connect" = x""yes; then - X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS" - fi - -@@ -7319,7 +7357,7 @@ - fi - { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_posix_remove" >&5 - $as_echo "$ac_cv_lib_posix_remove" >&6; } --if test $ac_cv_lib_posix_remove = yes; then -+if test "x$ac_cv_lib_posix_remove" = x""yes; then - X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix" - fi - -@@ -7478,7 +7516,7 @@ - fi - { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_ipc_shmat" >&5 - $as_echo "$ac_cv_lib_ipc_shmat" >&6; } --if test $ac_cv_lib_ipc_shmat = yes; then -+if test "x$ac_cv_lib_ipc_shmat" = x""yes; then - X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc" - fi - -@@ -7559,7 +7597,7 @@ - fi - { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5 - $as_echo "$ac_cv_lib_ICE_IceConnectionNumber" >&6; } --if test $ac_cv_lib_ICE_IceConnectionNumber = yes; then -+if test "x$ac_cv_lib_ICE_IceConnectionNumber" = x""yes; then - X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE" - fi - -@@ -7727,7 +7765,7 @@ - fi - { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_Xdmcp__XdmcpAuthDoIt" >&5 - $as_echo "$ac_cv_lib_Xdmcp__XdmcpAuthDoIt" >&6; } --if test $ac_cv_lib_Xdmcp__XdmcpAuthDoIt = yes; then -+if test "x$ac_cv_lib_Xdmcp__XdmcpAuthDoIt" = x""yes; then - X_EXTRA_LIBS="$X_EXTRA_LIBS -lXdmcp" - fi - -@@ -7797,7 +7835,7 @@ - fi - { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_ICE_IceOpenConnection" >&5 - $as_echo "$ac_cv_lib_ICE_IceOpenConnection" >&6; } --if test $ac_cv_lib_ICE_IceOpenConnection = yes; then -+if test "x$ac_cv_lib_ICE_IceOpenConnection" = x""yes; then - X_EXTRA_LIBS="$X_EXTRA_LIBS -lSM -lICE" - fi - -@@ -7868,7 +7906,7 @@ - fi - { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_Xpm_XpmCreatePixmapFromData" >&5 - $as_echo "$ac_cv_lib_Xpm_XpmCreatePixmapFromData" >&6; } --if test $ac_cv_lib_Xpm_XpmCreatePixmapFromData = yes; then -+if test "x$ac_cv_lib_Xpm_XpmCreatePixmapFromData" = x""yes; then - X_PRE_LIBS="$X_PRE_LIBS -lXpm" - fi - -@@ -7970,6 +8008,82 @@ - - LDFLAGS="$ac_save_LDFLAGS" - -+ { $as_echo "$as_me:$LINENO: checking size of wchar_t is 2 bytes" >&5 -+$as_echo_n "checking size of wchar_t is 2 bytes... " >&6; } -+ if test "${ac_cv_small_wchar_t+set}" = set; then -+ $as_echo_n "(cached) " >&6 -+else -+ if test "$cross_compiling" = yes; then -+ { { $as_echo "$as_me:$LINENO: error: failed to compile test program" >&5 -+$as_echo "$as_me: error: failed to compile test program" >&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 -+#if STDC_HEADERS -+# include -+# include -+#endif -+ main() -+ { -+ if (sizeof(wchar_t) <= 2) -+ 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 -+ ac_cv_small_wchar_t="no" -+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 ) -+ac_cv_small_wchar_t="yes" -+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_small_wchar_t" >&5 -+$as_echo "$ac_cv_small_wchar_t" >&6; } -+ if test "x$ac_cv_small_wchar_t" = "xyes" ; then -+ cat >>confdefs.h <<\_ACEOF -+#define SMALL_WCHAR_T 1 -+_ACEOF -+ -+ fi -+ - fi - fi - -@@ -9251,7 +9365,7 @@ - fi - { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_Xext_XShapeQueryExtension" >&5 - $as_echo "$ac_cv_lib_Xext_XShapeQueryExtension" >&6; } --if test $ac_cv_lib_Xext_XShapeQueryExtension = yes; then -+if test "x$ac_cv_lib_Xext_XShapeQueryExtension" = x""yes; then - GUI_X_LIBS="-lXext" - fi - -@@ -9320,7 +9434,7 @@ - fi - { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_w_wslen" >&5 - $as_echo "$ac_cv_lib_w_wslen" >&6; } --if test $ac_cv_lib_w_wslen = yes; then -+if test "x$ac_cv_lib_w_wslen" = x""yes; then - X_EXTRA_LIBS="$X_EXTRA_LIBS -lw" - fi - -@@ -9389,7 +9503,7 @@ - fi - { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlsym" >&5 - $as_echo "$ac_cv_lib_dl_dlsym" >&6; } --if test $ac_cv_lib_dl_dlsym = yes; then -+if test "x$ac_cv_lib_dl_dlsym" = x""yes; then - X_EXTRA_LIBS="$X_EXTRA_LIBS -ldl" - fi - -@@ -9458,7 +9572,7 @@ - fi - { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_Xmu_XmuCreateStippledPixmap" >&5 - $as_echo "$ac_cv_lib_Xmu_XmuCreateStippledPixmap" >&6; } --if test $ac_cv_lib_Xmu_XmuCreateStippledPixmap = yes; then -+if test "x$ac_cv_lib_Xmu_XmuCreateStippledPixmap" = x""yes; then - GUI_X_LIBS="-lXmu $GUI_X_LIBS" - fi - -@@ -9528,7 +9642,7 @@ - fi - { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_Xp_XpEndJob" >&5 - $as_echo "$ac_cv_lib_Xp_XpEndJob" >&6; } --if test $ac_cv_lib_Xp_XpEndJob = yes; then -+if test "x$ac_cv_lib_Xp_XpEndJob" = x""yes; then - GUI_X_LIBS="-lXp $GUI_X_LIBS" - fi - -@@ -9699,8 +9813,9 @@ - $as_echo "$ac_res" >&6; } - - fi --if test `eval 'as_val=${'$as_ac_Header'} -- $as_echo "$as_val"'` = yes; then -+as_val=`eval 'as_val=${'$as_ac_Header'} -+ $as_echo "$as_val"'` -+ if test "x$as_val" = x""yes; then - cat >>confdefs.h <<_ACEOF - #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 - _ACEOF -@@ -9852,8 +9967,9 @@ - $as_echo "$ac_res" >&6; } - - fi --if test `eval 'as_val=${'$as_ac_Header'} -- $as_echo "$as_val"'` = yes; then -+as_val=`eval 'as_val=${'$as_ac_Header'} -+ $as_echo "$as_val"'` -+ if test "x$as_val" = x""yes; then - cat >>confdefs.h <<_ACEOF - #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 - _ACEOF -@@ -10098,8 +10214,9 @@ - $as_echo "$ac_res" >&6; } - - fi --if test `eval 'as_val=${'$as_ac_Header'} -- $as_echo "$as_val"'` = yes; then -+as_val=`eval 'as_val=${'$as_ac_Header'} -+ $as_echo "$as_val"'` -+ if test "x$as_val" = x""yes; then - cat >>confdefs.h <<_ACEOF - #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 - _ACEOF -@@ -10362,6 +10479,56 @@ - - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -+{ $as_echo "$as_me:$LINENO: checking whether __attribute__((unused)) is allowed" >&5 -+$as_echo_n "checking whether __attribute__((unused)) is allowed... " >&6; } -+cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+#include -+int -+main () -+{ -+int x __attribute__((unused)); -+ ; -+ 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 -+ { $as_echo "$as_me:$LINENO: result: yes" >&5 -+$as_echo "yes" >&6; }; cat >>confdefs.h <<\_ACEOF -+#define HAVE_ATTRIBUTE_UNUSED 1 -+_ACEOF -+ -+else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+ { $as_echo "$as_me:$LINENO: result: no" >&5 -+$as_echo "no" >&6; } -+fi -+ -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+ - if test "${ac_cv_header_elf_h+set}" = set; then - { $as_echo "$as_me:$LINENO: checking for elf.h" >&5 - $as_echo_n "checking for elf.h... " >&6; } -@@ -10489,7 +10656,7 @@ - $as_echo "$ac_cv_header_elf_h" >&6; } - - fi --if test $ac_cv_header_elf_h = yes; then -+if test "x$ac_cv_header_elf_h" = x""yes; then - HAS_ELF=1 - fi - -@@ -10555,7 +10722,7 @@ - fi - { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_elf_main" >&5 - $as_echo "$ac_cv_lib_elf_main" >&6; } --if test $ac_cv_lib_elf_main = yes; then -+if test "x$ac_cv_lib_elf_main" = x""yes; then - cat >>confdefs.h <<_ACEOF - #define HAVE_LIBELF 1 - _ACEOF -@@ -10629,8 +10796,9 @@ - $as_echo "$as_val"'` - { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 - $as_echo "$ac_res" >&6; } --if test `eval 'as_val=${'$as_ac_Header'} -- $as_echo "$as_val"'` = yes; then -+as_val=`eval 'as_val=${'$as_ac_Header'} -+ $as_echo "$as_val"'` -+ if test "x$as_val" = x""yes; then - cat >>confdefs.h <<_ACEOF - #define `$as_echo "HAVE_$ac_hdr" | $as_tr_cpp` 1 - _ACEOF -@@ -10916,7 +11084,6 @@ - - - -- - for ac_header in stdarg.h stdlib.h string.h sys/select.h sys/utsname.h \ - termcap.h fcntl.h sgtty.h sys/ioctl.h sys/time.h sys/types.h termio.h \ - iconv.h langinfo.h math.h unistd.h stropts.h errno.h \ -@@ -10924,7 +11091,7 @@ - sys/stream.h termios.h libc.h sys/statfs.h \ - poll.h sys/poll.h pwd.h utime.h sys/param.h libintl.h \ - libgen.h util/debug.h util/msg18n.h frame.h \ -- sys/acl.h sys/access.h sys/sysctl.h sys/sysinfo.h wchar.h wctype.h -+ sys/acl.h sys/access.h sys/sysinfo.h wchar.h wctype.h - do - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` - if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then -@@ -11058,8 +11225,9 @@ - $as_echo "$ac_res" >&6; } - - fi --if test `eval 'as_val=${'$as_ac_Header'} -- $as_echo "$as_val"'` = yes; then -+as_val=`eval 'as_val=${'$as_ac_Header'} -+ $as_echo "$as_val"'` -+ if test "x$as_val" = x""yes; then - cat >>confdefs.h <<_ACEOF - #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 - _ACEOF -@@ -11122,8 +11290,74 @@ - $as_echo "$as_val"'` - { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 - $as_echo "$ac_res" >&6; } --if test `eval 'as_val=${'$as_ac_Header'} -- $as_echo "$as_val"'` = yes; then -+as_val=`eval 'as_val=${'$as_ac_Header'} -+ $as_echo "$as_val"'` -+ if test "x$as_val" = x""yes; then -+ cat >>confdefs.h <<_ACEOF -+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -+_ACEOF -+ -+fi -+ -+done -+ -+ -+ -+for ac_header in sys/sysctl.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; } -+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then -+ $as_echo_n "(cached) " >&6 -+else -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+#if defined HAVE_SYS_PARAM_H -+# include -+#endif -+ -+#include <$ac_header> -+_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 -+ eval "$as_ac_Header=yes" -+else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+ eval "$as_ac_Header=no" -+fi -+ -+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 - cat >>confdefs.h <<_ACEOF - #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 - _ACEOF -@@ -11322,8 +11556,9 @@ - $as_echo "$ac_res" >&6; } - - fi --if test `eval 'as_val=${'$as_ac_Header'} -- $as_echo "$as_val"'` = yes; then -+as_val=`eval 'as_val=${'$as_ac_Header'} -+ $as_echo "$as_val"'` -+ if test "x$as_val" = x""yes; then - cat >>confdefs.h <<_ACEOF - #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 - _ACEOF -@@ -11565,6 +11800,67 @@ - - fi - -+{ $as_echo "$as_me:$LINENO: checking for working volatile" >&5 -+$as_echo_n "checking for working volatile... " >&6; } -+if test "${ac_cv_c_volatile+set}" = set; then -+ $as_echo_n "(cached) " >&6 -+else -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+ -+int -+main () -+{ -+ -+volatile int x; -+int * volatile y = (int *) 0; -+return !x && !y; -+ ; -+ 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 -+ ac_cv_c_volatile=yes -+else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+ ac_cv_c_volatile=no -+fi -+ -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+fi -+{ $as_echo "$as_me:$LINENO: result: $ac_cv_c_volatile" >&5 -+$as_echo "$ac_cv_c_volatile" >&6; } -+if test $ac_cv_c_volatile = no; then -+ -+cat >>confdefs.h <<\_ACEOF -+#define volatile /**/ -+_ACEOF -+ -+fi -+ - { $as_echo "$as_me:$LINENO: checking for mode_t" >&5 - $as_echo_n "checking for mode_t... " >&6; } - if test "${ac_cv_type_mode_t+set}" = set; then -@@ -11659,7 +11955,7 @@ - fi - { $as_echo "$as_me:$LINENO: result: $ac_cv_type_mode_t" >&5 - $as_echo "$ac_cv_type_mode_t" >&6; } --if test $ac_cv_type_mode_t = yes; then -+if test "x$ac_cv_type_mode_t" = x""yes; then - : - else - -@@ -11763,7 +12059,7 @@ - fi - { $as_echo "$as_me:$LINENO: result: $ac_cv_type_off_t" >&5 - $as_echo "$ac_cv_type_off_t" >&6; } --if test $ac_cv_type_off_t = yes; then -+if test "x$ac_cv_type_off_t" = x""yes; then - : - else - -@@ -11867,7 +12163,7 @@ - fi - { $as_echo "$as_me:$LINENO: result: $ac_cv_type_pid_t" >&5 - $as_echo "$ac_cv_type_pid_t" >&6; } --if test $ac_cv_type_pid_t = yes; then -+if test "x$ac_cv_type_pid_t" = x""yes; then - : - else - -@@ -11971,7 +12267,7 @@ - fi - { $as_echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5 - $as_echo "$ac_cv_type_size_t" >&6; } --if test $ac_cv_type_size_t = yes; then -+if test "x$ac_cv_type_size_t" = x""yes; then - : - else - -@@ -12175,7 +12471,7 @@ - fi - { $as_echo "$as_me:$LINENO: result: $ac_cv_type_ino_t" >&5 - $as_echo "$ac_cv_type_ino_t" >&6; } --if test $ac_cv_type_ino_t = yes; then -+if test "x$ac_cv_type_ino_t" = x""yes; then - : - else - -@@ -12279,7 +12575,7 @@ - fi - { $as_echo "$as_me:$LINENO: result: $ac_cv_type_dev_t" >&5 - $as_echo "$ac_cv_type_dev_t" >&6; } --if test $ac_cv_type_dev_t = yes; then -+if test "x$ac_cv_type_dev_t" = x""yes; then - : - else - -@@ -12569,8 +12865,9 @@ - $as_echo "$as_val"'` - { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 - $as_echo "$ac_res" >&6; } --if test `eval 'as_val=${'$as_ac_Lib'} -- $as_echo "$as_val"'` = yes; then -+as_val=`eval 'as_val=${'$as_ac_Lib'} -+ $as_echo "$as_val"'` -+ if test "x$as_val" = x""yes; then - cat >>confdefs.h <<_ACEOF - #define `$as_echo "HAVE_LIB${libname}" | $as_tr_cpp` 1 - _ACEOF -@@ -13818,8 +14115,9 @@ - $as_echo "$as_val"'` - { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 - $as_echo "$ac_res" >&6; } --if test `eval 'as_val=${'$as_ac_var'} -- $as_echo "$as_val"'` = yes; then -+as_val=`eval 'as_val=${'$as_ac_var'} -+ $as_echo "$as_val"'` -+ if test "x$as_val" = x""yes; then - cat >>confdefs.h <<_ACEOF - #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 - _ACEOF -@@ -14202,7 +14500,7 @@ - fi - { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_m_strtod" >&5 - $as_echo "$ac_cv_lib_m_strtod" >&6; } --if test $ac_cv_lib_m_strtod = yes; then -+if test "x$ac_cv_lib_m_strtod" = x""yes; then - cat >>confdefs.h <<_ACEOF - #define HAVE_LIBM 1 - _ACEOF -@@ -14362,7 +14660,7 @@ - fi - { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_posix1e_acl_get_file" >&5 - $as_echo "$ac_cv_lib_posix1e_acl_get_file" >&6; } --if test $ac_cv_lib_posix1e_acl_get_file = yes; then -+if test "x$ac_cv_lib_posix1e_acl_get_file" = x""yes; then - LIBS="$LIBS -lposix1e" - else - { $as_echo "$as_me:$LINENO: checking for acl_get_file in -lacl" >&5 -@@ -14430,7 +14728,7 @@ - fi - { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_acl_acl_get_file" >&5 - $as_echo "$ac_cv_lib_acl_acl_get_file" >&6; } --if test $ac_cv_lib_acl_acl_get_file = yes; then -+if test "x$ac_cv_lib_acl_acl_get_file" = x""yes; then - LIBS="$LIBS -lacl" - { $as_echo "$as_me:$LINENO: checking for fgetxattr in -lattr" >&5 - $as_echo_n "checking for fgetxattr in -lattr... " >&6; } -@@ -14497,7 +14795,7 @@ - fi - { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_attr_fgetxattr" >&5 - $as_echo "$ac_cv_lib_attr_fgetxattr" >&6; } --if test $ac_cv_lib_attr_fgetxattr = yes; then -+if test "x$ac_cv_lib_attr_fgetxattr" = x""yes; then - LIBS="$LIBS -lattr" - fi - -@@ -15226,7 +15524,6 @@ - - - -- - bcopy_test_prog=' - #include "confdefs.h" - #ifdef HAVE_STRING_H -@@ -15458,7 +15755,7 @@ - if test "$enable_multibyte" = "yes"; then - cflags_save=$CFLAGS - ldflags_save=$LDFLAGS -- if test -n "$x_includes" ; then -+ if test "x$x_includes" != "xNONE" ; then - CFLAGS="$CFLAGS -I$x_includes" - LDFLAGS="$X_LIBS $LDFLAGS -lX11" - { $as_echo "$as_me:$LINENO: checking whether X_LOCALE needed" >&5 -@@ -15635,7 +15932,7 @@ - fi - { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_xpg4__xpg4_setrunelocale" >&5 - $as_echo "$ac_cv_lib_xpg4__xpg4_setrunelocale" >&6; } --if test $ac_cv_lib_xpg4__xpg4_setrunelocale = yes; then -+if test "x$ac_cv_lib_xpg4__xpg4_setrunelocale" = x""yes; then - LIBS="$LIBS -lxpg4" - fi - -@@ -15646,6 +15943,7 @@ - if (eval ctags --version /dev/null | grep Exuberant) < /dev/null 1>&5 2>&1; then - TAGPRG="ctags -I INIT+ --fields=+S" - else -+ TAGPRG="ctags" - (eval etags /dev/null) < /dev/null 1>&5 2>&1 && TAGPRG="etags" - (eval etags -c /dev/null) < /dev/null 1>&5 2>&1 && TAGPRG="etags -c" - (eval ctags /dev/null) < /dev/null 1>&5 2>&1 && TAGPRG="ctags" -@@ -15933,8 +16231,9 @@ - $as_echo "$as_val"'` - { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 - $as_echo "$ac_res" >&6; } --if test `eval 'as_val=${'$as_ac_var'} -- $as_echo "$as_val"'` = yes; then -+as_val=`eval 'as_val=${'$as_ac_var'} -+ $as_echo "$as_val"'` -+ if test "x$as_val" = x""yes; then - cat >>confdefs.h <<_ACEOF - #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 - _ACEOF -@@ -16134,7 +16433,7 @@ - $as_echo "$ac_cv_header_dlfcn_h" >&6; } - - fi --if test $ac_cv_header_dlfcn_h = yes; then -+if test "x$ac_cv_header_dlfcn_h" = x""yes; then - DLL=dlfcn.h - else - if test "${ac_cv_header_dl_h+set}" = set; then -@@ -16264,7 +16563,7 @@ - $as_echo "$ac_cv_header_dl_h" >&6; } - - fi --if test $ac_cv_header_dl_h = yes; then -+if test "x$ac_cv_header_dl_h" = x""yes; then - DLL=dl.h - fi - -@@ -16783,8 +17082,9 @@ - $as_echo "$ac_res" >&6; } - - fi --if test `eval 'as_val=${'$as_ac_Header'} -- $as_echo "$as_val"'` = yes; then -+as_val=`eval 'as_val=${'$as_ac_Header'} -+ $as_echo "$as_val"'` -+ if test "x$as_val" = x""yes; then - cat >>confdefs.h <<_ACEOF - #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 - _ACEOF -@@ -16819,21 +17119,29 @@ - LDFLAGS="$LDFLAGS -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc" - fi - --{ $as_echo "$as_me:$LINENO: checking for GCC 3 or later" >&5 --$as_echo_n "checking for GCC 3 or later... " >&6; } - DEPEND_CFLAGS_FILTER= - if test "$GCC" = yes; then -+ { $as_echo "$as_me:$LINENO: checking for GCC 3 or later" >&5 -+$as_echo_n "checking for GCC 3 or later... " >&6; } - gccmajor=`echo "$gccversion" | sed -e 's/^\([1-9]\)\..*$/\1/g'` - if test "$gccmajor" -gt "2"; then - DEPEND_CFLAGS_FILTER="| sed 's+-I */+-isystem /+g'" -- fi --fi --if test "$DEPEND_CFLAGS_FILTER" = ""; then -- { $as_echo "$as_me:$LINENO: result: no" >&5 -+ { $as_echo "$as_me:$LINENO: result: yes" >&5 -+$as_echo "yes" >&6; } -+ else -+ { $as_echo "$as_me:$LINENO: result: no" >&5 - $as_echo "no" >&6; } --else -- { $as_echo "$as_me:$LINENO: result: yes" >&5 -+ fi -+ { $as_echo "$as_me:$LINENO: checking whether we need -D_FORTIFY_SOURCE=1" >&5 -+$as_echo_n "checking whether we need -D_FORTIFY_SOURCE=1... " >&6; } -+ if test "$gccmajor" -gt "3"; then -+ CFLAGS="$CFLAGS -D_FORTIFY_SOURCE=1" -+ { $as_echo "$as_me:$LINENO: result: yes" >&5 - $as_echo "yes" >&6; } -+ else -+ { $as_echo "$as_me:$LINENO: result: no" >&5 -+$as_echo "no" >&6; } -+ fi - fi - - -@@ -16866,8 +17174,8 @@ - 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_*) { $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;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( -@@ -17259,7 +17567,7 @@ - # values after options handling. - ac_log=" - This file was extended by $as_me, which was --generated by GNU Autoconf 2.62. Invocation command line was -+generated by GNU Autoconf 2.63. Invocation command line was - - CONFIG_FILES = $CONFIG_FILES - CONFIG_HEADERS = $CONFIG_HEADERS -@@ -17272,6 +17580,15 @@ - - _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 - # Files that config.status was made for. - config_files="$ac_config_files" -@@ -17284,16 +17601,17 @@ - \`$as_me' instantiates files from templates according to the - current configuration. - --Usage: $0 [OPTIONS] [FILE]... -+Usage: $0 [OPTION]... [FILE]... - - -h, --help print this help, then exit - -V, --version print version number and configuration settings, then exit -- -q, --quiet do not print progress messages -+ -q, --quiet, --silent -+ 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] -+ --file=FILE[:TEMPLATE] - instantiate the configuration file FILE -- --header=FILE[:TEMPLATE] -+ --header=FILE[:TEMPLATE] - instantiate the configuration header FILE - - Configuration files: -@@ -17308,7 +17626,7 @@ - cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 - ac_cs_version="\\ - config.status --configured by $0, generated by GNU Autoconf 2.62, -+configured by $0, generated by GNU Autoconf 2.63, - with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" - - Copyright (C) 2008 Free Software Foundation, Inc. -@@ -17505,7 +17823,8 @@ - $as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} - { (exit 1); exit 1; }; } - -- if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` = $ac_delim_num; then -+ 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 - break - elif $ac_last_try; then - { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 -@@ -17710,9 +18029,9 @@ - } - 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 "#". -- prefix = substr(line, 1, index(line, defundef) - 1) - print prefix "define", macro P[macro] D[macro] - next - } else { -@@ -17720,7 +18039,7 @@ - # 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 "/*", line, "*/" -+ print "/*", prefix defundef, macro, "*/" - next - } - } -@@ -17744,8 +18063,8 @@ - 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*:*) { { $as_echo "$as_me:$LINENO: error: invalid tag $ac_tag" >&5 -+$as_echo "$as_me: error: invalid tag $ac_tag" >&2;} - { (exit 1); exit 1; }; };; - :[FH]-) ac_tag=-:-;; - :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; -@@ -18063,8 +18382,8 @@ - $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;} -+ { $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 -Naur vim72.orig/src/buffer.c vim72/src/buffer.c ---- vim72.orig/src/buffer.c 2008-08-06 12:00:48.000000000 +0100 -+++ vim72/src/buffer.c 2009-07-22 22:54:22.000000000 +0100 -@@ -33,7 +33,7 @@ - static char_u *fname_match __ARGS((regprog_T *prog, char_u *name)); - #endif - static void buflist_setfpos __ARGS((buf_T *buf, win_T *win, linenr_T lnum, colnr_T col, int copy_options)); --static wininfo_T *find_wininfo __ARGS((buf_T *buf)); -+static wininfo_T *find_wininfo __ARGS((buf_T *buf, int skip_diff_buffer)); - #ifdef UNIX - static buf_T *buflist_findname_stat __ARGS((char_u *ffname, struct stat *st)); - static int otherfile_buf __ARGS((buf_T *buf, char_u *ffname, struct stat *stp)); -@@ -44,6 +44,7 @@ - #ifdef FEAT_TITLE - static int ti_change __ARGS((char_u *str, char_u **last)); - #endif -+static int append_arg_number __ARGS((win_T *wp, char_u *buf, int buflen, int add_file)); - static void free_buffer __ARGS((buf_T *)); - static void free_buffer_stuff __ARGS((buf_T *buf, int free_options)); - static void clear_wininfo __ARGS((buf_T *buf)); -@@ -437,10 +438,6 @@ - return; - #endif - --#ifdef FEAT_NETBEANS_INTG -- if (usingNetbeans) -- netbeans_file_closed(buf); --#endif - /* Change directories when the 'acd' option is set. */ - DO_AUTOCHDIR - -@@ -515,12 +512,11 @@ - * buf_freeall() - free all things allocated for a buffer that are related to - * the file. - */ --/*ARGSUSED*/ - void - buf_freeall(buf, del_buf, wipe_buf) - buf_T *buf; -- int del_buf; /* buffer is going to be deleted */ -- int wipe_buf; /* buffer is going to be wiped out */ -+ int del_buf UNUSED; /* buffer is going to be deleted */ -+ int wipe_buf UNUSED; /* buffer is going to be wiped out */ - { - #ifdef FEAT_AUTOCMD - int is_curbuf = (buf == curbuf); -@@ -639,6 +635,10 @@ - #ifdef FEAT_SIGNS - buf_delete_signs(buf); /* delete any signs */ - #endif -+#ifdef FEAT_NETBEANS_INTG -+ if (usingNetbeans) -+ netbeans_file_killed(buf); -+#endif - #ifdef FEAT_LOCALMAP - map_clear_int(buf, MAP_ALL_MODES, TRUE, FALSE); /* clear local mappings */ - map_clear_int(buf, MAP_ALL_MODES, TRUE, TRUE); /* clear local abbrevs */ -@@ -647,6 +647,9 @@ - vim_free(buf->b_start_fenc); - buf->b_start_fenc = NULL; - #endif -+#ifdef FEAT_SPELL -+ ga_clear(&buf->b_langp); -+#endif - } - - /* -@@ -812,9 +815,6 @@ - int bnr; /* buffer number */ - char_u *p; - --#ifdef FEAT_NETBEANS_INTG -- netbeansCloseFile = 1; --#endif - if (addr_count == 0) - { - (void)do_buffer(command, DOBUF_CURRENT, FORWARD, 0, forceit); -@@ -909,9 +909,6 @@ - } - } - --#ifdef FEAT_NETBEANS_INTG -- netbeansCloseFile = 0; --#endif - - return errormsg; - } -@@ -1090,7 +1087,7 @@ - #endif - setpcmark(); - retval = do_ecmd(0, NULL, NULL, NULL, ECMD_ONE, -- forceit ? ECMD_FORCEIT : 0); -+ forceit ? ECMD_FORCEIT : 0, curwin); - - /* - * do_ecmd() may create a new buffer, then we have to delete -@@ -1237,7 +1234,7 @@ - * "buf" if one exists */ - if ((swb_flags & SWB_USEOPEN) && buf_jump_open_win(buf)) - return OK; -- /* If 'switchbuf' contians "usetab": jump to first window in any tab -+ /* If 'switchbuf' contains "usetab": jump to first window in any tab - * page containing "buf" if one exists */ - if ((swb_flags & SWB_USETAB) && buf_jump_open_tab(buf)) - return OK; -@@ -1313,7 +1310,7 @@ - setpcmark(); - if (!cmdmod.keepalt) - curwin->w_alt_fnum = curbuf->b_fnum; /* remember alternate file */ -- buflist_altfpos(); /* remember curpos */ -+ buflist_altfpos(curwin); /* remember curpos */ - - #ifdef FEAT_VISUAL - /* Don't restart Select mode after switching to another buffer. */ -@@ -1351,11 +1348,12 @@ - } - } - #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 -- /* An autocommand may have deleted buf or aborted the script processing! */ -- if (buf_valid(buf) && !aborting()) -+ if (buf_valid(buf) && buf != curbuf && !aborting()) - # else -- if (buf_valid(buf)) /* an autocommand may have deleted buf! */ -+ if (buf_valid(buf) && buf != curbuf) - # endif - #endif - enter_buffer(buf); -@@ -1397,6 +1395,9 @@ - curwin->w_cursor.coladd = 0; - #endif - curwin->w_set_curswant = TRUE; -+#ifdef FEAT_AUTOCMD -+ curwin->w_topline_was_set = FALSE; -+#endif - - /* Make sure the buffer is loaded. */ - if (curbuf->b_ml.ml_mfp == NULL) /* need to load the file */ -@@ -1436,7 +1437,8 @@ - maketitle(); - #endif - #ifdef FEAT_AUTOCMD -- if (curwin->w_topline == 1) /* when autocmds didn't change it */ -+ /* when autocmds didn't change it */ -+ if (curwin->w_topline == 1 && !curwin->w_topline_was_set) - #endif - scroll_cursor_halfway(FALSE); /* redisplay at correct position */ - -@@ -1451,13 +1453,13 @@ - - #ifdef FEAT_KEYMAP - if (curbuf->b_kmap_state & KEYMAP_INIT) -- keymap_init(); -+ (void)keymap_init(); - #endif - #ifdef FEAT_SPELL - /* May need to set the spell language. Can only do this after the buffer - * has been properly setup. */ - if (!curbuf->b_help && curwin->w_p_spell && *curbuf->b_p_spl != NUL) -- did_set_spelllang(curbuf); -+ (void)did_set_spelllang(curbuf); - #endif - - redraw_later(NOT_VALID); -@@ -1675,9 +1677,10 @@ - buf->b_fname = buf->b_sfname; - #ifdef UNIX - if (st.st_dev == (dev_T)-1) -- buf->b_dev = -1; -+ buf->b_dev_valid = FALSE; - else - { -+ buf->b_dev_valid = TRUE; - buf->b_dev = st.st_dev; - buf->b_ino = st.st_ino; - } -@@ -2022,13 +2025,12 @@ - * Return fnum of the found buffer. - * Return < 0 for error. - */ --/*ARGSUSED*/ - int - buflist_findpat(pattern, pattern_end, unlisted, diffmode) - char_u *pattern; - char_u *pattern_end; /* pointer to first char after pattern */ - int unlisted; /* find unlisted buffers */ -- int diffmode; /* find diff-mode buffers only */ -+ int diffmode UNUSED; /* find diff-mode buffers only */ - { - buf_T *buf; - regprog_T *prog; -@@ -2400,22 +2402,69 @@ - return; - } - -+#ifdef FEAT_DIFF -+static int wininfo_other_tab_diff __ARGS((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. -+ */ -+ static int -+wininfo_other_tab_diff(wip) -+ wininfo_T *wip; -+{ -+ win_T *wp; -+ -+ if (wip->wi_opt.wo_diff) -+ { -+ for (wp = firstwin; wp != NULL; wp = wp->w_next) -+ /* return FALSE when it's a window in the current tab page, thus -+ * the buffer was in diff mode here */ -+ if (wip->wi_win == wp) -+ return FALSE; -+ return TRUE; -+ } -+ return FALSE; -+} -+#endif -+ - /* - * Find info for the current window in buffer "buf". - * If not found, return the info for the most recently used window. -+ * When "skip_diff_buffer" is TRUE avoid windows with 'diff' set that is in -+ * another tab page. - * Returns NULL when there isn't any info. - */ - static wininfo_T * --find_wininfo(buf) -+find_wininfo(buf, skip_diff_buffer) - buf_T *buf; -+ int skip_diff_buffer UNUSED; - { - wininfo_T *wip; - - for (wip = buf->b_wininfo; wip != NULL; wip = wip->wi_next) -- if (wip->wi_win == curwin) -+ if (wip->wi_win == curwin -+#ifdef FEAT_DIFF -+ && (!skip_diff_buffer || !wininfo_other_tab_diff(wip)) -+#endif -+ ) - break; -- if (wip == NULL) /* if no fpos for curwin, use the first in the list */ -- wip = buf->b_wininfo; -+ -+ /* If no wininfo for curwin, use the first in the list (that doesn't have -+ * 'diff' set and is in another tab page). */ -+ if (wip == NULL) -+ { -+#ifdef FEAT_DIFF -+ if (skip_diff_buffer) -+ { -+ for (wip = buf->b_wininfo; wip != NULL; wip = wip->wi_next) -+ if (!wininfo_other_tab_diff(wip)) -+ break; -+ } -+ else -+#endif -+ wip = buf->b_wininfo; -+ } - return wip; - } - -@@ -2436,7 +2485,7 @@ - clearFolding(curwin); - #endif - -- wip = find_wininfo(buf); -+ wip = find_wininfo(buf, TRUE); - if (wip != NULL && wip->wi_optset) - { - copy_winopt(&wip->wi_opt, &curwin->w_onebuf_opt); -@@ -2466,9 +2515,9 @@ - buf_T *buf; - { - wininfo_T *wip; -- static pos_T no_position = {1, 0}; -+ static pos_T no_position = INIT_POS_T(1, 0, 0); - -- wip = find_wininfo(buf); -+ wip = find_wininfo(buf, FALSE); - if (wip != NULL) - return &(wip->wi_fpos); - else -@@ -2489,7 +2538,6 @@ - /* - * List all know file names (for :files and :buffers command). - */ --/*ARGSUSED*/ - void - buflist_list(eap) - exarg_T *eap; -@@ -2527,8 +2575,8 @@ - { - IObuff[len++] = ' '; - } while (--i > 0 && len < IOSIZE - 18); -- vim_snprintf((char *)IObuff + len, IOSIZE - len, _("line %ld"), -- buf == curbuf ? curwin->w_cursor.lnum -+ vim_snprintf((char *)IObuff + len, (size_t)(IOSIZE - len), -+ _("line %ld"), buf == curbuf ? curwin->w_cursor.lnum - : (long)buflist_findlnum(buf)); - msg_outtrans(IObuff); - out_flush(); /* output one line at a time */ -@@ -2642,9 +2690,10 @@ - buf->b_fname = buf->b_sfname; - #ifdef UNIX - if (st.st_dev == (dev_T)-1) -- buf->b_dev = -1; -+ buf->b_dev_valid = FALSE; - else - { -+ buf->b_dev_valid = TRUE; - buf->b_dev = st.st_dev; - buf->b_ino = st.st_ino; - } -@@ -2789,14 +2838,14 @@ - #endif - - /* -- * Set alternate cursor position for current window. -+ * Set alternate cursor position for the current buffer and window "win". - * Also save the local window option values. - */ - void --buflist_altfpos() -+buflist_altfpos(win) -+ win_T *win; - { -- buflist_setfpos(curbuf, curwin, curwin->w_cursor.lnum, -- curwin->w_cursor.col, TRUE); -+ buflist_setfpos(curbuf, win, win->w_cursor.lnum, win->w_cursor.col, TRUE); - } - - /* -@@ -2838,7 +2887,7 @@ - /* If no struct stat given, get it now */ - if (stp == NULL) - { -- if (buf->b_dev < 0 || mch_stat((char *)ffname, &st) < 0) -+ if (!buf->b_dev_valid || mch_stat((char *)ffname, &st) < 0) - st.st_dev = (dev_T)-1; - stp = &st; - } -@@ -2875,11 +2924,12 @@ - - if (buf->b_fname != NULL && mch_stat((char *)buf->b_fname, &st) >= 0) - { -+ buf->b_dev_valid = TRUE; - buf->b_dev = st.st_dev; - buf->b_ino = st.st_ino; - } - else -- buf->b_dev = -1; -+ buf->b_dev_valid = FALSE; - } - - /* -@@ -2890,7 +2940,7 @@ - buf_T *buf; - struct stat *stp; - { -- return (buf->b_dev >= 0 -+ return (buf->b_dev_valid - && stp->st_dev == buf->b_dev - && stp->st_ino == buf->b_ino); - } -@@ -2917,7 +2967,7 @@ - - if (fullname > 1) /* 2 CTRL-G: include buffer number */ - { -- sprintf((char *)buffer, "buf %d: ", curbuf->b_fnum); -+ vim_snprintf((char *)buffer, IOSIZE, "buf %d: ", curbuf->b_fnum); - p = buffer + STRLEN(buffer); - } - else -@@ -2991,11 +3041,12 @@ - (long)curbuf->b_ml.ml_line_count, - n); - validate_virtcol(); -- col_print(buffer + STRLEN(buffer), -+ len = STRLEN(buffer); -+ col_print(buffer + len, IOSIZE - len, - (int)curwin->w_cursor.col + 1, (int)curwin->w_virtcol + 1); - } - -- (void)append_arg_number(curwin, buffer, !shortmess(SHM_FILE), IOSIZE); -+ (void)append_arg_number(curwin, buffer, IOSIZE, !shortmess(SHM_FILE)); - - if (dont_truncate) - { -@@ -3023,15 +3074,16 @@ - } - - void --col_print(buf, col, vcol) -+col_print(buf, buflen, col, vcol) - char_u *buf; -+ size_t buflen; - int col; - int vcol; - { - if (col == vcol) -- sprintf((char *)buf, "%d", col); -+ vim_snprintf((char *)buf, buflen, "%d", col); - else -- sprintf((char *)buf, "%d-%d", col, vcol); -+ vim_snprintf((char *)buf, buflen, "%d-%d", col, vcol); - } - - #if defined(FEAT_TITLE) || defined(PROTO) -@@ -3144,18 +3196,18 @@ - if (p == buf + off) - /* must be a help buffer */ - vim_strncpy(buf + off, (char_u *)_("help"), -- IOSIZE - off - 1); -+ (size_t)(IOSIZE - off - 1)); - else - *p = NUL; - - /* translate unprintable chars */ - p = transstr(buf + off); -- vim_strncpy(buf + off, p, IOSIZE - off - 1); -+ vim_strncpy(buf + off, p, (size_t)(IOSIZE - off - 1)); - vim_free(p); - STRCAT(buf, ")"); - } - -- append_arg_number(curwin, buf, FALSE, IOSIZE); -+ append_arg_number(curwin, buf, IOSIZE, FALSE); - - #if defined(FEAT_CLIENTSERVER) - if (serverName != NULL) -@@ -3292,14 +3344,13 @@ - * If maxwidth is not zero, the string will be filled at any middle marker - * or truncated if too long, fillchar is used for all whitespace. - */ --/*ARGSUSED*/ - int - build_stl_str_hl(wp, out, outlen, fmt, use_sandbox, fillchar, maxwidth, hltab, tabtab) - win_T *wp; - char_u *out; /* buffer to write into != NameBuff */ - size_t outlen; /* length of out[] */ - char_u *fmt; -- int use_sandbox; /* "fmt" was set insecurely, use sandbox */ -+ int use_sandbox UNUSED; /* "fmt" was set insecurely, use sandbox */ - int fillchar; - int maxwidth; - struct stl_hlrec *hltab; /* return: HL attributes (can be NULL) */ -@@ -3470,7 +3521,7 @@ - n = (long)(p - t) - item[groupitem[groupdepth]].maxwid + 1; - - *t = '<'; -- mch_memmove(t + 1, t + n, p - (t + n)); -+ mch_memmove(t + 1, t + n, (size_t)(p - (t + n))); - p = p - n + 1; - #ifdef FEAT_MBYTE - /* Fill up space left over by half a double-wide char. */ -@@ -3500,7 +3551,7 @@ - else - { - /* fill by inserting characters */ -- mch_memmove(t + n - l, t, p - t); -+ mch_memmove(t + n - l, t, (size_t)(p - t)); - l = n - l; - if (p + l >= out + outlen) - l = (long)((out + outlen) - p - 1); -@@ -3636,7 +3687,7 @@ - p = t; - - #ifdef FEAT_EVAL -- sprintf((char *)tmp, "%d", curbuf->b_fnum); -+ vim_snprintf((char *)tmp, sizeof(tmp), "%d", curbuf->b_fnum); - set_internal_string_var((char_u *)"actual_curbuf", tmp); - - o_curbuf = curbuf; -@@ -3703,13 +3754,13 @@ - - case STL_ALTPERCENT: - str = tmp; -- get_rel_pos(wp, str); -+ get_rel_pos(wp, str, TMPLEN); - break; - - case STL_ARGLISTSTAT: - fillable = FALSE; - tmp[0] = 0; -- if (append_arg_number(wp, tmp, FALSE, (int)sizeof(tmp))) -+ if (append_arg_number(wp, tmp, (int)sizeof(tmp), FALSE)) - str = tmp; - break; - -@@ -3744,7 +3795,7 @@ - case STL_BYTEVAL_X: - base = 'X'; - case STL_BYTEVAL: -- if (wp->w_cursor.col > STRLEN(linecont)) -+ if (wp->w_cursor.col > (colnr_T)STRLEN(linecont)) - num = 0; - else - { -@@ -3917,7 +3968,7 @@ - if (zeropad) - *t++ = '0'; - *t++ = '*'; -- *t++ = nbase == 16 ? base : (nbase == 8 ? 'o' : 'd'); -+ *t++ = nbase == 16 ? base : (char_u)(nbase == 8 ? 'o' : 'd'); - *t = 0; - - for (n = num, l = 1; n >= nbase; n /= nbase) -@@ -3963,7 +4014,7 @@ - width = vim_strsize(out); - if (maxwidth > 0 && width > maxwidth) - { -- /* Result is too long, must trunctate somewhere. */ -+ /* Result is too long, must truncate somewhere. */ - l = 0; - if (itemcnt == 0) - s = out; -@@ -4110,13 +4161,14 @@ - #if defined(FEAT_STL_OPT) || defined(FEAT_CMDL_INFO) \ - || defined(FEAT_GUI_TABLINE) || defined(PROTO) - /* -- * Get relative cursor position in window into "str[]", in the form 99%, using -- * "Top", "Bot" or "All" when appropriate. -+ * Get relative cursor position in window into "buf[buflen]", in the form 99%, -+ * using "Top", "Bot" or "All" when appropriate. - */ - void --get_rel_pos(wp, str) -+get_rel_pos(wp, buf, buflen) - win_T *wp; -- char_u *str; -+ char_u *buf; -+ int buflen; - { - long above; /* number of lines above window */ - long below; /* number of lines below window */ -@@ -4127,34 +4179,35 @@ - #endif - below = wp->w_buffer->b_ml.ml_line_count - wp->w_botline + 1; - if (below <= 0) -- STRCPY(str, above == 0 ? _("All") : _("Bot")); -+ vim_strncpy(buf, (char_u *)(above == 0 ? _("All") : _("Bot")), -+ (size_t)(buflen - 1)); - else if (above <= 0) -- STRCPY(str, _("Top")); -+ vim_strncpy(buf, (char_u *)_("Top"), (size_t)(buflen - 1)); - else -- sprintf((char *)str, "%2d%%", above > 1000000L -+ vim_snprintf((char *)buf, (size_t)buflen, "%2d%%", above > 1000000L - ? (int)(above / ((above + below) / 100L)) - : (int)(above * 100L / (above + below))); - } - #endif - - /* -- * Append (file 2 of 8) to 'buf', if editing more than one file. -+ * Append (file 2 of 8) to "buf[buflen]", if editing more than one file. - * Return TRUE if it was appended. - */ -- int --append_arg_number(wp, buf, add_file, maxlen) -+ static int -+append_arg_number(wp, buf, buflen, add_file) - win_T *wp; - char_u *buf; -+ int buflen; - int add_file; /* Add "file" before the arg number */ -- int maxlen; /* maximum nr of chars in buf or zero*/ - { - char_u *p; - - if (ARGCOUNT <= 1) /* nothing to do */ - return FALSE; - -- p = buf + STRLEN(buf); /* go to the end of the buffer */ -- if (maxlen && p - buf + 35 >= maxlen) /* getting too long */ -+ p = buf + STRLEN(buf); /* go to the end of the buffer */ -+ if (p - buf + 35 >= buflen) /* getting too long */ - return FALSE; - *p++ = ' '; - *p++ = '('; -@@ -4163,7 +4216,8 @@ - STRCPY(p, "file "); - p += 5; - } -- sprintf((char *)p, wp->w_arg_idx_invalid ? "(%d) of %d)" -+ vim_snprintf((char *)p, (size_t)(buflen - (p - buf)), -+ wp->w_arg_idx_invalid ? "(%d) of %d)" - : "%d of %d)", wp->w_arg_idx + 1, ARGCOUNT); - return TRUE; - } -@@ -4219,10 +4273,9 @@ - * Make "ffname" a full file name, set "sfname" to "ffname" if not NULL. - * "ffname" becomes a pointer to allocated memory (or NULL). - */ --/*ARGSUSED*/ - void - fname_expand(buf, ffname, sfname) -- buf_T *buf; -+ buf_T *buf UNUSED; - char_u **ffname; - char_u **sfname; - { -@@ -4488,7 +4541,7 @@ - ECMD_ONE, - ((P_HID(curwin->w_buffer) - || bufIsChanged(curwin->w_buffer)) ? ECMD_HIDE : 0) -- + ECMD_OLDBUF); -+ + ECMD_OLDBUF, curwin); - #ifdef FEAT_AUTOCMD - if (use_firstwin) - ++autocmd_no_leave; -@@ -4946,7 +4999,7 @@ - if (tab != NULL) - { - *tab++ = '\0'; -- col = atoi((char *)tab); -+ col = (colnr_T)atoi((char *)tab); - tab = vim_strrchr(xline, '\t'); - if (tab != NULL) - { -@@ -4984,6 +5037,7 @@ - #endif - char_u *line; - int max_buffers; -+ size_t len; - - if (find_viminfo_parameter('%') == NULL) - return; -@@ -4992,7 +5046,8 @@ - max_buffers = get_viminfo_parameter('%'); - - /* Allocate room for the file name, lnum and col. */ -- line = alloc(MAXPATHL + 40); -+#define LINE_BUF_LEN (MAXPATHL + 40) -+ line = alloc(LINE_BUF_LEN); - if (line == NULL) - return; - -@@ -5018,7 +5073,8 @@ - break; - putc('%', fp); - home_replace(NULL, buf->b_ffname, line, MAXPATHL, TRUE); -- sprintf((char *)line + STRLEN(line), "\t%ld\t%d", -+ len = STRLEN(line); -+ vim_snprintf((char *)line + len, len - LINE_BUF_LEN, "\t%ld\t%d", - (long)buf->b_last_cursor.lnum, - buf->b_last_cursor.col); - viminfo_writestring(fp, line); -@@ -5048,7 +5104,8 @@ - */ - FOR_ALL_TAB_WINDOWS(tp, win) - if (win->w_buffer == buf) -- break; -+ goto win_found; -+win_found: - if (win != NULL && win->w_llist_ref != NULL) - return _("[Location List]"); - else -@@ -5062,7 +5119,7 @@ - { - if (buf->b_sfname != NULL) - return (char *)buf->b_sfname; -- return "[Scratch]"; -+ return _("[Scratch]"); - } - #endif - if (buf->b_fname == NULL) -@@ -5175,7 +5232,7 @@ - return; - } - -- int -+ linenr_T - buf_change_sign_type(buf, markId, typenr) - buf_T *buf; /* buffer to store sign in */ - int markId; /* sign ID */ -@@ -5192,10 +5249,10 @@ - } - } - -- return 0; -+ return (linenr_T)0; - } - -- int_u -+ int - buf_getsigntype(buf, lnum, type) - buf_T *buf; - linenr_T lnum; -@@ -5514,11 +5571,10 @@ - * this buffer. Call this to wipe out a temp buffer that does not contain any - * marks. - */ --/*ARGSUSED*/ - void - wipe_buffer(buf, aucmd) - buf_T *buf; -- int aucmd; /* When TRUE trigger autocommands. */ -+ int aucmd UNUSED; /* When TRUE trigger autocommands. */ - { - if (buf->b_fnum == top_file_num - 1) - --top_file_num; -diff -Naur vim72.orig/src/charset.c vim72/src/charset.c ---- vim72.orig/src/charset.c 2008-07-24 15:59:44.000000000 +0100 -+++ vim72/src/charset.c 2009-07-22 22:54:21.000000000 +0100 -@@ -17,7 +17,7 @@ - static int win_nolbr_chartabsize __ARGS((win_T *wp, char_u *s, colnr_T col, int *headp)); - #endif - --static int nr2hex __ARGS((int c)); -+static unsigned nr2hex __ARGS((unsigned c)); - - static int chartab_initialized = FALSE; - -@@ -664,7 +664,7 @@ - } - #endif - buf[++i] = nr2hex((unsigned)c >> 4); -- buf[++i] = nr2hex(c); -+ buf[++i] = nr2hex((unsigned)c); - buf[++i] = '>'; - buf[++i] = NUL; - } -@@ -674,9 +674,9 @@ - * Lower case letters are used to avoid the confusion of being 0xf1 or - * function key 1. - */ -- static int -+ static unsigned - nr2hex(c) -- int c; -+ unsigned c; - { - if ((c & 0xf) <= 9) - return (c & 0xf) + '0'; -@@ -884,7 +884,7 @@ - if (c >= 0x100) - { - if (enc_dbcs != 0) -- return dbcs_class((unsigned)c >> 8, c & 0xff) >= 2; -+ return dbcs_class((unsigned)c >> 8, (unsigned)(c & 0xff)) >= 2; - if (enc_utf8) - return utf_class(c) >= 2; - } -@@ -1026,13 +1026,12 @@ - * string at start of line. Warning: *headp is only set if it's a non-zero - * value, init to 0 before calling. - */ --/*ARGSUSED*/ - int - win_lbr_chartabsize(wp, s, col, headp) - win_T *wp; - char_u *s; - colnr_T col; -- int *headp; -+ int *headp UNUSED; - { - #ifdef FEAT_LINEBREAK - int c; -@@ -1090,7 +1089,7 @@ - */ - numberextra = win_col_off(wp); - col2 = col; -- colmax = W_WIDTH(wp) - numberextra; -+ colmax = (colnr_T)(W_WIDTH(wp) - numberextra); - if (col >= colmax) - { - n = colmax + win_col_off2(wp); -@@ -1201,17 +1200,17 @@ - win_T *wp; - colnr_T vcol; - { -- colnr_T width1; /* width of first line (after line number) */ -- colnr_T width2; /* width of further lines */ -+ int width1; /* width of first line (after line number) */ -+ int width2; /* width of further lines */ - - #ifdef FEAT_VERTSPLIT - if (wp->w_width == 0) /* there is no border */ - return FALSE; - #endif - width1 = W_WIDTH(wp) - win_col_off(wp); -- if (vcol < width1 - 1) -+ if ((int)vcol < width1 - 1) - return FALSE; -- if (vcol == width1 - 1) -+ if ((int)vcol == width1 - 1) - return TRUE; - width2 = width1 + win_col_off2(wp); - return ((vcol - width1) % width2 == width2 - 1); -@@ -1396,13 +1395,13 @@ - # ifdef FEAT_MBYTE - /* Cannot put the cursor on part of a wide character. */ - ptr = ml_get_buf(wp->w_buffer, pos->lnum, FALSE); -- if (pos->col < STRLEN(ptr)) -+ if (pos->col < (colnr_T)STRLEN(ptr)) - { - int c = (*mb_ptr2char)(ptr + pos->col); - - if (c != TAB && vim_isprintc(c)) - { -- endadd = char2cells(c) - 1; -+ endadd = (colnr_T)(char2cells(c) - 1); - if (coladd > endadd) /* past end of line */ - endadd = 0; - else -diff -Naur vim72.orig/src/config.h.in vim72/src/config.h.in ---- vim72.orig/src/config.h.in 2008-06-21 16:01:41.000000000 +0100 -+++ vim72/src/config.h.in 2009-07-22 22:54:22.000000000 +0100 -@@ -30,12 +30,18 @@ - /* Define when __DATE__ " " __TIME__ can be used */ - #undef HAVE_DATE_TIME - -+/* Define when __attribute__((unused)) can be used */ -+#undef HAVE_ATTRIBUTE_UNUSED -+ - /* defined always when using configure */ - #undef UNIX - - /* Defined to the size of an int */ - #undef SIZEOF_INT - -+/* Define when wchar_t is only 2 bytes. */ -+#undef SMALL_WCHAR_T -+ - /* - * If we cannot trust one of the following from the libraries, we use our - * own safe but probably slower vim_memmove(). -@@ -50,6 +56,9 @@ - /* Define to empty if the keyword does not work. */ - #undef const - -+/* Define to empty if the keyword does not work. */ -+#undef volatile -+ - /* Define to `int' if doesn't define. */ - #undef mode_t - -diff -Naur vim72.orig/src/config.mk.in vim72/src/config.mk.in ---- vim72.orig/src/config.mk.in 2008-06-21 16:56:41.000000000 +0100 -+++ vim72/src/config.mk.in 2009-07-22 22:54:22.000000000 +0100 -@@ -41,6 +41,8 @@ - MZSCHEME_OBJ = @MZSCHEME_OBJ@ - MZSCHEME_CFLAGS = @MZSCHEME_CFLAGS@ - MZSCHEME_PRO = @MZSCHEME_PRO@ -+MZSCHEME_EXTRA = @MZSCHEME_EXTRA@ -+MZSCHEME_MZC = @MZSCHEME_MZC@ - - PERL = @vi_cv_path_perl@ - PERLLIB = @vi_cv_perllib@ -diff -Naur vim72.orig/src/configure.in vim72/src/configure.in ---- vim72.orig/src/configure.in 2008-07-24 13:40:26.000000000 +0100 -+++ vim72/src/configure.in 2009-07-22 22:54:24.000000000 +0100 -@@ -414,7 +414,7 @@ - AC_MSG_RESULT("$PLTHOME") - vi_cv_path_mzscheme_pfx="$PLTHOME" - else -- AC_MSG_RESULT("not set") -+ AC_MSG_RESULT(not set) - dnl -- try to find MzScheme executable - AC_PATH_PROG(vi_cv_path_mzscheme, mzscheme) - -@@ -430,14 +430,16 @@ - if test "X$vi_cv_path_mzscheme" != "X"; then - dnl -- find where MzScheme thinks it was installed - AC_CACHE_CHECK(MzScheme install prefix,vi_cv_path_mzscheme_pfx, -- [ vi_cv_path_mzscheme_pfx=` -- ${vi_cv_path_mzscheme} -evm \ -- "(display (simplify-path \ -+ dnl different versions of MzScheme differ in command line processing -+ dnl use universal approach -+ echo "(display (simplify-path \ - (build-path (call-with-values \ - (lambda () (split-path (find-system-path (quote exec-file)))) \ -- (lambda (base name must-be-dir?) base)) (quote up))))"` ]) -- dnl Remove a trailing slash. -- vi_cv_path_mzscheme_pfx=`echo "$vi_cv_path_mzscheme_pfx" | sed 's+/$++'` -+ (lambda (base name must-be-dir?) base)) (quote up))))" > mzdirs.scm -+ dnl Remove a trailing slash -+ [ vi_cv_path_mzscheme_pfx=`${vi_cv_path_mzscheme} -r mzdirs.scm | \ -+ sed -e 's+/$++'` ]) -+ rm -f mzdirs.scm - fi - fi - fi -@@ -446,16 +448,24 @@ - if test "X$vi_cv_path_mzscheme_pfx" != "X"; then - AC_MSG_CHECKING(if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include) - if test -f $vi_cv_path_mzscheme_pfx/include/scheme.h; then -- AC_MSG_RESULT("yes") -+ SCHEME_INC=${vi_cv_path_mzscheme_pfx}/include -+ AC_MSG_RESULT(yes) - else -- AC_MSG_RESULT("no") -- AC_MSG_CHECKING(if scheme.h can be found in $vi_cv_path_mzscheme_pfx/plt/include) -+ AC_MSG_RESULT(no) -+ AC_MSG_CHECKING(if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include/plt) - if test -f $vi_cv_path_mzscheme_pfx/include/plt/scheme.h; then -- AC_MSG_RESULT("yes") -- SCHEME_INC=/plt -+ AC_MSG_RESULT(yes) -+ SCHEME_INC=${vi_cv_path_mzscheme_pfx}/include/plt - else -- AC_MSG_RESULT("no") -- vi_cv_path_mzscheme_pfx= -+ AC_MSG_RESULT(no) -+ AC_MSG_CHECKING(if scheme.h can be found in /usr/include/plt/) -+ if test -f /usr/include/plt/scheme.h; then -+ AC_MSG_RESULT(yes) -+ SCHEME_INC=/usr/include/plt -+ else -+ AC_MSG_RESULT(no) -+ vi_cv_path_mzscheme_pfx= -+ fi - fi - fi - fi -@@ -463,23 +473,38 @@ - if test "X$vi_cv_path_mzscheme_pfx" != "X"; then - if test "x$MACOSX" = "xyes"; then - MZSCHEME_LIBS="-framework PLT_MzScheme" -+ elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzscheme3m.a"; then -+ MZSCHEME_LIBS="${vi_cv_path_mzscheme_pfx}/lib/libmzscheme3m.a" -+ MZSCHEME_CFLAGS="-DMZ_PRECISE_GC" - elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzgc.a"; then - MZSCHEME_LIBS="${vi_cv_path_mzscheme_pfx}/lib/libmzscheme.a ${vi_cv_path_mzscheme_pfx}/lib/libmzgc.a" - else -- MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lmzscheme -lmzgc" -+ dnl Using shared objects -+ if test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzscheme3m.so"; then -+ MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lmzscheme3m" -+ MZSCHEME_CFLAGS="-DMZ_PRECISE_GC" -+ else -+ MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lmzscheme -lmzgc" -+ fi - if test "$GCC" = yes; then - dnl Make Vim remember the path to the library. For when it's not in - dnl $LD_LIBRARY_PATH. -- MZSCHEME_LIBS="$MZSCHEME_LIBS -Wl,-rpath -Wl,${vi_cv_path_mzscheme_pfx}/lib" -+ MZSCHEME_LIBS="${MZSCHEME_LIBS} -Wl,-rpath -Wl,${vi_cv_path_mzscheme_pfx}/lib" - elif test "`(uname) 2>/dev/null`" = SunOS && - uname -r | grep '^5' >/dev/null; then -- MZSCHEME_LIBS="$MZSCHEME_LIBS -R ${vi_cv_path_mzscheme_pfx}/lib" -+ MZSCHEME_LIBS="${MZSCHEME_LIBS} -R ${vi_cv_path_mzscheme_pfx}/lib" - fi - fi - if test -d $vi_cv_path_mzscheme_pfx/lib/plt/collects; then - SCHEME_COLLECTS=lib/plt/ - fi -- MZSCHEME_CFLAGS="-I${vi_cv_path_mzscheme_pfx}/include${SCHEME_INC} \ -+ if test -f "${vi_cv_path_mzscheme_pfx}/${SCHEME_COLLECTS}collects/scheme/base.ss" ; then -+ dnl need to generate bytecode for MzScheme base -+ MZSCHEME_EXTRA="mzscheme_base.c" -+ MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -DINCLUDE_MZSCHEME_BASE" -+ MZSCHEME_MZC="${vi_cv_path_mzscheme_pfx}/bin/mzc" -+ fi -+ MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -I${SCHEME_INC} \ - -DMZSCHEME_COLLECTS='\"${vi_cv_path_mzscheme_pfx}/${SCHEME_COLLECTS}collects\"'" - MZSCHEME_SRC="if_mzsch.c" - MZSCHEME_OBJ="objects/if_mzsch.o" -@@ -491,6 +516,8 @@ - AC_SUBST(MZSCHEME_PRO) - AC_SUBST(MZSCHEME_LIBS) - AC_SUBST(MZSCHEME_CFLAGS) -+ AC_SUBST(MZSCHEME_EXTRA) -+ AC_SUBST(MZSCHEME_MZC) - fi - - -@@ -957,7 +984,13 @@ - fi - rubyldflags=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG[["LDFLAGS"]]'` - if test "X$rubyldflags" != "X"; then -- LDFLAGS="$rubyldflags $LDFLAGS" -+ dnl Ruby on Mac OS X 10.5 adds "-arch" flags but these should only -+ dnl be included if requested by passing --with-mac-arch to -+ dnl configure, so strip these flags first (if present) -+ rubyldflags=`echo "$rubyldflags" | sed -e 's/-arch\ ppc//' -e 's/-arch\ i386//'` -+ if test "X$rubyldflags" != "X"; then -+ LDFLAGS="$rubyldflags $LDFLAGS" -+ fi - fi - RUBY_SRC="if_ruby.c" - RUBY_OBJ="objects/if_ruby.o" -@@ -1193,6 +1226,28 @@ - - LDFLAGS="$ac_save_LDFLAGS" - -+ AC_MSG_CHECKING(size of wchar_t is 2 bytes) -+ AC_CACHE_VAL(ac_cv_small_wchar_t, -+ [AC_TRY_RUN([ -+#include -+#if STDC_HEADERS -+# include -+# include -+#endif -+ main() -+ { -+ if (sizeof(wchar_t) <= 2) -+ exit(1); -+ exit(0); -+ }], -+ ac_cv_small_wchar_t="no", -+ ac_cv_small_wchar_t="yes", -+ AC_MSG_ERROR(failed to compile test program))]) -+ AC_MSG_RESULT($ac_cv_small_wchar_t) -+ if test "x$ac_cv_small_wchar_t" = "xyes" ; then -+ AC_DEFINE(SMALL_WCHAR_T) -+ fi -+ - fi - fi - -@@ -2067,6 +2122,11 @@ - AC_MSG_RESULT(yes); AC_DEFINE(HAVE_DATE_TIME), - AC_MSG_RESULT(no)) - -+AC_MSG_CHECKING(whether __attribute__((unused)) is allowed) -+AC_TRY_COMPILE([#include ], [int x __attribute__((unused));], -+ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ATTRIBUTE_UNUSED), -+ AC_MSG_RESULT(no)) -+ - dnl Checks for header files. - AC_CHECK_HEADER(elf.h, HAS_ELF=1) - dnl AC_CHECK_HEADER(dwarf.h, SVR4=1) -@@ -2095,7 +2155,7 @@ - sys/stream.h termios.h libc.h sys/statfs.h \ - poll.h sys/poll.h pwd.h utime.h sys/param.h libintl.h \ - libgen.h util/debug.h util/msg18n.h frame.h \ -- sys/acl.h sys/access.h sys/sysctl.h sys/sysinfo.h wchar.h wctype.h) -+ sys/acl.h sys/access.h sys/sysinfo.h wchar.h wctype.h) - - dnl sys/ptem.h depends on sys/stream.h on Solaris - AC_CHECK_HEADERS(sys/ptem.h, [], [], -@@ -2103,6 +2163,12 @@ - # include - #endif]) - -+dnl sys/sysctl.h depends on sys/param.h on OpenBSD -+AC_CHECK_HEADERS(sys/sysctl.h, [], [], -+[#if defined HAVE_SYS_PARAM_H -+# include -+#endif]) -+ - - dnl pthread_np.h may exist but can only be used after including pthread.h - AC_MSG_CHECKING([for pthread_np.h]) -@@ -2148,6 +2214,7 @@ - dnl Checks for typedefs, structures, and compiler characteristics. - AC_PROG_GCC_TRADITIONAL - AC_C_CONST -+AC_C_VOLATILE - AC_TYPE_MODE_T - AC_TYPE_OFF_T - AC_TYPE_PID_T -@@ -2869,7 +2936,6 @@ - AC_MSG_RESULT($ac_cv_sizeof_int) - AC_DEFINE_UNQUOTED(SIZEOF_INT, $ac_cv_sizeof_int) - -- - 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. - -@@ -2951,7 +3017,7 @@ - if test "$enable_multibyte" = "yes"; then - cflags_save=$CFLAGS - ldflags_save=$LDFLAGS -- if test -n "$x_includes" ; then -+ if test "x$x_includes" != "xNONE" ; then - CFLAGS="$CFLAGS -I$x_includes" - LDFLAGS="$X_LIBS $LDFLAGS -lX11" - AC_MSG_CHECKING(whether X_LOCALE needed) -@@ -2967,7 +3033,7 @@ - dnl Link with xpg4, it is said to make Korean locale working - AC_CHECK_LIB(xpg4, _xpg4_setrunelocale, [LIBS="$LIBS -lxpg4"],,) - --dnl Check how we can run ctags -+dnl Check how we can run ctags. Default to "ctags" when nothing works. - dnl --version for Exuberant ctags (preferred) - dnl Add --fields=+S to get function signatures for omni completion. - dnl -t for typedefs (many ctags have this) -@@ -2979,6 +3045,7 @@ - if (eval ctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then - TAGPRG="ctags -I INIT+ --fields=+S" - else -+ TAGPRG="ctags" - (eval etags /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="etags" - (eval etags -c /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="etags -c" - (eval ctags /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="ctags" -@@ -3152,18 +3219,25 @@ - dnl But only when making dependencies, cproto and lint don't take "-isystem". - dnl Mac gcc returns "powerpc-apple-darwin8-gcc-4.0.1 (GCC)...", need to allow - dnl the number before the version number. --AC_MSG_CHECKING(for GCC 3 or later) - DEPEND_CFLAGS_FILTER= - if test "$GCC" = yes; then -+ AC_MSG_CHECKING(for GCC 3 or later) - gccmajor=`echo "$gccversion" | sed -e 's/^\([[1-9]]\)\..*$/\1/g'` - if test "$gccmajor" -gt "2"; then - DEPEND_CFLAGS_FILTER="| sed 's+-I */+-isystem /+g'" -+ AC_MSG_RESULT(yes) -+ else -+ AC_MSG_RESULT(no) -+ fi -+ dnl -D_FORTIFY_SOURCE=2 crashes Vim on strcpy(buf, "000") when buf is -+ dnl declared as char x[1] but actually longer. Introduced in gcc 4.0. -+ AC_MSG_CHECKING(whether we need -D_FORTIFY_SOURCE=1) -+ if test "$gccmajor" -gt "3"; then -+ CFLAGS="$CFLAGS -D_FORTIFY_SOURCE=1" -+ AC_MSG_RESULT(yes) -+ else -+ AC_MSG_RESULT(no) - fi --fi --if test "$DEPEND_CFLAGS_FILTER" = ""; then -- AC_MSG_RESULT(no) --else -- AC_MSG_RESULT(yes) - fi - AC_SUBST(DEPEND_CFLAGS_FILTER) - -diff -Naur vim72.orig/src/diff.c vim72/src/diff.c ---- vim72.orig/src/diff.c 2008-03-05 11:16:56.000000000 +0000 -+++ vim72/src/diff.c 2009-07-22 22:54:24.000000000 +0100 -@@ -8,7 +8,7 @@ - */ - - /* -- * diff.c: code for diff'ing two or three buffers. -+ * diff.c: code for diff'ing two, three or four buffers. - */ - - #include "vim.h" -@@ -73,6 +73,8 @@ - { - tp->tp_diffbuf[i] = NULL; - tp->tp_diff_invalid = TRUE; -+ if (tp == curtab) -+ diff_redraw(TRUE); - } - } - } -@@ -102,6 +104,7 @@ - { - curtab->tp_diffbuf[i] = NULL; - curtab->tp_diff_invalid = TRUE; -+ diff_redraw(TRUE); - } - } - } -@@ -113,7 +116,7 @@ - * Add a buffer to make diffs for. - * Call this when a new buffer is being edited in the current window where - * 'diff' is set. -- * Marks the current buffer as being part of the diff and requireing updating. -+ * Marks the current buffer as being part of the diff and requiring updating. - * This must be done before any autocmd, because a command may use info - * about the screen contents. - */ -@@ -131,6 +134,7 @@ - { - curtab->tp_diffbuf[i] = buf; - curtab->tp_diff_invalid = TRUE; -+ diff_redraw(TRUE); - return; - } - -@@ -648,10 +652,9 @@ - * The buffers are written to a file, also for unmodified buffers (the file - * could have been produced by autocommands, e.g. the netrw plugin). - */ --/*ARGSUSED*/ - void - ex_diffupdate(eap) -- exarg_T *eap; /* can be NULL, it's not used */ -+ exarg_T *eap UNUSED; /* can be NULL */ - { - buf_T *buf; - int idx_orig; -@@ -661,6 +664,7 @@ - char_u *tmp_diff; - FILE *fd; - int ok; -+ int io_error = FALSE; - - /* Delete all diffblocks. */ - diff_clear(curtab); -@@ -697,18 +701,26 @@ - { - ok = FALSE; - fd = mch_fopen((char *)tmp_orig, "w"); -- if (fd != NULL) -+ if (fd == NULL) -+ io_error = TRUE; -+ else - { -- fwrite("line1\n", (size_t)6, (size_t)1, fd); -+ 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) -+ if (fd == NULL) -+ io_error = TRUE; -+ else - { -- fwrite("line2\n", (size_t)6, (size_t)1, fd); -+ 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) -+ if (fd == NULL) -+ io_error = TRUE; -+ else - { - char_u linebuf[LBUFLEN]; - -@@ -761,6 +773,8 @@ - } - if (!ok) - { -+ if (io_error) -+ EMSG(_("E810: Cannot read or write temp files")); - EMSG(_("E97: Cannot create diffs")); - diff_a_works = MAYBE; - #if defined(MSWIN) || defined(MSDOS) -@@ -812,6 +826,7 @@ - char_u *tmp_diff; - { - char_u *cmd; -+ size_t len; - - #ifdef FEAT_EVAL - if (*p_dex != NUL) -@@ -820,8 +835,9 @@ - else - #endif - { -- cmd = alloc((unsigned)(STRLEN(tmp_orig) + STRLEN(tmp_new) -- + STRLEN(tmp_diff) + STRLEN(p_srr) + 27)); -+ 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. */ -@@ -831,7 +847,7 @@ - /* 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. */ -- sprintf((char *)cmd, "diff %s%s%s%s%s %s", -+ vim_snprintf((char *)cmd, len, "diff %s%s%s%s%s %s", - diff_a_works == FALSE ? "" : "-a ", - #if defined(MSWIN) || defined(MSDOS) - diff_bin_works == TRUE ? "--binary " : "", -@@ -841,7 +857,7 @@ - (diff_flags & DIFF_IWHITE) ? "-b " : "", - (diff_flags & DIFF_ICASE) ? "-i " : "", - tmp_orig, tmp_new); -- append_redir(cmd, p_srr, tmp_diff); -+ append_redir(cmd, (int)len, p_srr, tmp_diff); - #ifdef FEAT_AUTOCMD - block_autocmds(); /* Avoid ShellCmdPost stuff */ - #endif -@@ -866,6 +882,7 @@ - char_u *tmp_orig; /* name of original temp file */ - char_u *tmp_new; /* name of patched temp file */ - char_u *buf = NULL; -+ size_t buflen; - win_T *old_curwin = curwin; - char_u *newname = NULL; /* name of patched file buffer */ - #ifdef UNIX -@@ -876,6 +893,7 @@ - char_u *browseFile = NULL; - int browse_flag = cmdmod.browse; - #endif -+ struct stat st; - - #ifdef FEAT_BROWSE - if (cmdmod.browse) -@@ -905,16 +923,17 @@ - /* Get the absolute path of the patchfile, changing directory below. */ - fullname = FullName_save(eap->arg, FALSE); - #endif -- buf = alloc((unsigned)(STRLEN(tmp_orig) + ( -+ buflen = STRLEN(tmp_orig) + ( - # ifdef UNIX - fullname != NULL ? STRLEN(fullname) : - # endif -- STRLEN(eap->arg)) + STRLEN(tmp_new) + 16)); -+ STRLEN(eap->arg)) + STRLEN(tmp_new) + 16; -+ buf = alloc((unsigned)buflen); - if (buf == NULL) - goto theend; - - #ifdef UNIX -- /* Temporaraly chdir to /tmp, to avoid patching files in the current -+ /* Temporarily chdir to /tmp, to avoid patching files in the current - * directory when the patch file contains more than one patch. When we - * have our own temp dir use that instead, it will be cleaned up when we - * exit (any .rej files created). Don't change directory if we can't -@@ -925,10 +944,10 @@ - { - # ifdef TEMPDIRNAMES - if (vim_tempdir != NULL) -- mch_chdir((char *)vim_tempdir); -+ ignored = mch_chdir((char *)vim_tempdir); - else - # endif -- mch_chdir("/tmp"); -+ ignored = mch_chdir("/tmp"); - shorten_fnames(TRUE); - } - #endif -@@ -946,7 +965,8 @@ - { - /* Build the patch command and execute it. Ignore errors. Switch to - * cooked mode to allow the user to respond to prompts. */ -- sprintf((char *)buf, "patch -o %s %s < \"%s\"", tmp_new, tmp_orig, -+ vim_snprintf((char *)buf, buflen, "patch -o %s %s < \"%s\"", -+ tmp_new, tmp_orig, - # ifdef UNIX - fullname != NULL ? fullname : - # endif -@@ -980,44 +1000,51 @@ - STRCAT(buf, ".rej"); - mch_remove(buf); - -- if (curbuf->b_fname != NULL) -+ /* Only continue if the output file was created. */ -+ if (mch_stat((char *)tmp_new, &st) < 0 || st.st_size == 0) -+ EMSG(_("E816: Cannot read patch output")); -+ else - { -- newname = vim_strnsave(curbuf->b_fname, -+ if (curbuf->b_fname != NULL) -+ { -+ newname = vim_strnsave(curbuf->b_fname, - (int)(STRLEN(curbuf->b_fname) + 4)); -- if (newname != NULL) -- STRCAT(newname, ".new"); -- } -+ if (newname != NULL) -+ STRCAT(newname, ".new"); -+ } - - #ifdef FEAT_GUI -- need_mouse_correct = TRUE; -+ need_mouse_correct = TRUE; - #endif -- /* don't use a new tab page, each tab page has its own diffs */ -- cmdmod.tab = 0; -+ /* don't use a new tab page, each tab page has its own diffs */ -+ cmdmod.tab = 0; - -- if (win_split(0, (diff_flags & DIFF_VERTICAL) ? WSP_VERT : 0) != FAIL) -- { -- /* Pretend it was a ":split fname" command */ -- eap->cmdidx = CMD_split; -- eap->arg = tmp_new; -- do_exedit(eap, old_curwin); -- -- if (curwin != old_curwin) /* split must have worked */ -+ if (win_split(0, (diff_flags & DIFF_VERTICAL) ? WSP_VERT : 0) != FAIL) - { -- /* Set 'diff', 'scrollbind' on and 'wrap' off. */ -- diff_win_options(curwin, TRUE); -- diff_win_options(old_curwin, TRUE); -+ /* Pretend it was a ":split fname" command */ -+ eap->cmdidx = CMD_split; -+ eap->arg = tmp_new; -+ do_exedit(eap, old_curwin); - -- if (newname != NULL) -+ /* check that split worked and editing tmp_new */ -+ if (curwin != old_curwin && win_valid(old_curwin)) - { -- /* do a ":file filename.new" on the patched buffer */ -- eap->arg = newname; -- ex_file(eap); -+ /* Set 'diff', 'scrollbind' on and 'wrap' off. */ -+ diff_win_options(curwin, TRUE); -+ diff_win_options(old_curwin, TRUE); -+ -+ if (newname != NULL) -+ { -+ /* do a ":file filename.new" on the patched buffer */ -+ eap->arg = newname; -+ ex_file(eap); - - #ifdef FEAT_AUTOCMD -- /* Do filetype detection with the new name. */ -- if (au_has_group((char_u *)"filetypedetect")) -- do_cmdline_cmd((char_u *)":doau filetypedetect BufRead"); -+ /* Do filetype detection with the new name. */ -+ if (au_has_group((char_u *)"filetypedetect")) -+ do_cmdline_cmd((char_u *)":doau filetypedetect BufRead"); - #endif -+ } - } - } - } -@@ -1074,10 +1101,9 @@ - /* - * Set options to show difs for the current window. - */ --/*ARGSUSED*/ - void - ex_diffthis(eap) -- exarg_T *eap; -+ exarg_T *eap UNUSED; - { - /* Set 'diff', 'scrollbind' on and 'wrap' off. */ - diff_win_options(curwin, TRUE); -@@ -1138,7 +1164,7 @@ - - for (wp = firstwin; wp != NULL; wp = wp->w_next) - { -- if (wp == curwin || eap->forceit) -+ if (wp == curwin || (eap->forceit && wp->w_p_diff)) - { - /* Set 'diff', 'scrollbind' off and 'wrap' on. */ - wp->w_p_diff = FALSE; -@@ -2114,6 +2140,8 @@ - EMSG2(_("E102: Can't find buffer \"%s\""), eap->arg); - return; - } -+ if (buf == curbuf) -+ return; /* nothing to do */ - idx_other = diff_buf_idx(buf); - if (idx_other == DB_COUNT) - { -diff -Naur vim72.orig/src/digraph.c vim72/src/digraph.c ---- vim72.orig/src/digraph.c 2008-06-23 22:12:51.000000000 +0100 -+++ vim72/src/digraph.c 2009-07-22 22:54:21.000000000 +0100 -@@ -32,7 +32,7 @@ - static void printdigraph __ARGS((digr_T *)); - - /* digraphs added by the user */ --static garray_T user_digraphs = {0, 0, sizeof(digr_T), 10, NULL}; -+static garray_T user_digraphs = {0, 0, (int)sizeof(digr_T), 10, NULL}; - - /* - * Note: Characters marked with XX are not included literally, because some -@@ -2371,10 +2371,10 @@ - } - else - #endif -- *p++ = dp->result; -+ *p++ = (char_u)dp->result; - if (char2cells(dp->result) == 1) - *p++ = ' '; -- sprintf((char *)p, " %3d", dp->result); -+ vim_snprintf((char *)p, sizeof(buf) - (p - buf), " %3d", dp->result); - msg_outtrans(buf); - } - } -@@ -2395,7 +2395,10 @@ - static void keymap_unload __ARGS((void)); - - /* -- * Set up key mapping tables for the 'keymap' option -+ * Set up key mapping tables for the 'keymap' option. -+ * Returns NULL if OK, an error message for failure. This only needs to be -+ * used when setting the option, not later when the value has already been -+ * checked. - */ - char_u * - keymap_init() -@@ -2412,25 +2415,29 @@ - else - { - char_u *buf; -+ size_t buflen; - - /* Source the keymap file. It will contain a ":loadkeymap" command - * which will call ex_loadkeymap() below. */ -- buf = alloc((unsigned)(STRLEN(curbuf->b_p_keymap) -+ buflen = STRLEN(curbuf->b_p_keymap) - # ifdef FEAT_MBYTE -- + STRLEN(p_enc) -+ + STRLEN(p_enc) - # endif -- + 14)); -+ + 14; -+ buf = alloc((unsigned)buflen); - if (buf == NULL) - return e_outofmem; - - # ifdef FEAT_MBYTE - /* try finding "keymap/'keymap'_'encoding'.vim" in 'runtimepath' */ -- sprintf((char *)buf, "keymap/%s_%s.vim", curbuf->b_p_keymap, p_enc); -+ vim_snprintf((char *)buf, buflen, "keymap/%s_%s.vim", -+ curbuf->b_p_keymap, p_enc); - if (source_runtime(buf, FALSE) == FAIL) - # endif - { - /* try finding "keymap/'keymap'.vim" in 'runtimepath' */ -- sprintf((char *)buf, "keymap/%s.vim", curbuf->b_p_keymap); -+ vim_snprintf((char *)buf, buflen, "keymap/%s.vim", -+ curbuf->b_p_keymap); - if (source_runtime(buf, FALSE) == FAIL) - { - vim_free(buf); -diff -Naur vim72.orig/src/edit.c vim72/src/edit.c ---- vim72.orig/src/edit.c 2008-08-06 13:51:17.000000000 +0100 -+++ vim72/src/edit.c 2009-07-22 22:54:23.000000000 +0100 -@@ -57,7 +57,7 @@ - N_(" Keyword Local completion (^N^P)"), - }; - --static char_u e_hitend[] = N_("Hit end of paragraph"); -+static char e_hitend[] = N_("Hit end of paragraph"); - - /* - * Structure used to store one match for insert completion. -@@ -114,6 +114,10 @@ - * FALSE the word to be completed must be located. */ - static int compl_started = FALSE; - -+/* Set when doing something for completion that may call edit() recursively, -+ * which is not allowed. */ -+static int compl_busy = FALSE; -+ - static int compl_matches = 0; - static char_u *compl_pattern = NULL; - static int compl_direction = FORWARD; -@@ -147,6 +151,7 @@ - static int ins_compl_bs __ARGS((void)); - static void ins_compl_new_leader __ARGS((void)); - static void ins_compl_addleader __ARGS((int c)); -+static int ins_compl_len __ARGS((void)); - static void ins_compl_restart __ARGS((void)); - static void ins_compl_set_original_text __ARGS((char_u *str)); - static void ins_compl_addfrommatch __ARGS((void)); -@@ -164,7 +169,7 @@ - static int ins_compl_key2count __ARGS((int c)); - static int ins_compl_use_match __ARGS((int c)); - static int ins_complete __ARGS((int c)); --static int quote_meta __ARGS((char_u *dest, char_u *str, int len)); -+static unsigned quote_meta __ARGS((char_u *dest, char_u *str, int len)); - #endif /* FEAT_INS_EXPAND */ - - #define BACKSPACE_CHAR 1 -@@ -197,7 +202,8 @@ - static void mb_replace_pop_ins __ARGS((int cc)); - #endif - static void replace_flush __ARGS((void)); --static void replace_do_bs __ARGS((void)); -+static void replace_do_bs __ARGS((int limit_col)); -+static int del_char_after_col __ARGS((int limit_col)); - #ifdef FEAT_CINDENT - static int cindent_on __ARGS((void)); - #endif -@@ -304,7 +310,7 @@ - int c = 0; - char_u *ptr; - int lastc; -- colnr_T mincol; -+ int mincol; - static linenr_T o_lnum = 0; - int i; - int did_backspace = TRUE; /* previous char was backspace */ -@@ -344,7 +350,7 @@ - - #ifdef FEAT_INS_EXPAND - /* Don't allow recursive insert mode when busy with completion. */ -- if (compl_started || pum_visible()) -+ if (compl_started || compl_busy || pum_visible()) - { - EMSG(_(e_secure)); - return FALSE; -@@ -385,7 +391,7 @@ - if (startln) - Insstart.col = 0; - } -- Insstart_textlen = linetabsize(ml_get_curline()); -+ Insstart_textlen = (colnr_T)linetabsize(ml_get_curline()); - Insstart_blank_vcol = MAXCOL; - if (!did_ai) - ai_col = 0; -@@ -651,7 +657,7 @@ - mincol = curwin->w_wcol; - validate_cursor_col(); - -- if ((int)curwin->w_wcol < (int)mincol - curbuf->b_p_ts -+ 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 -@@ -751,7 +757,7 @@ - * there is nothing to add, CTRL-L works like CTRL-P then. */ - if (c == Ctrl_L - && (ctrl_x_mode != CTRL_X_WHOLE_LINE -- || STRLEN(compl_shown_match->cp_str) -+ || (int)STRLEN(compl_shown_match->cp_str) - > curwin->w_cursor.col - compl_col)) - { - ins_compl_addfrommatch(); -@@ -1338,8 +1344,10 @@ - goto normalchar; - - docomplete: -+ compl_busy = TRUE; - if (ins_complete(c) == FAIL) - compl_cont_status = 0; -+ compl_busy = FALSE; - break; - #endif /* FEAT_INS_EXPAND */ - -@@ -1441,10 +1449,9 @@ - * Only redraw when there are no characters available. This speeds up - * inserting sequences of characters (e.g., for CTRL-R). - */ --/*ARGSUSED*/ - static void - ins_redraw(ready) -- int ready; /* not busy with something */ -+ int ready UNUSED; /* not busy with something */ - { - if (!char_avail()) - { -@@ -1771,7 +1778,7 @@ - * Compute the screen column where the cursor should be. - */ - vcol = get_indent() - vcol; -- curwin->w_virtcol = (vcol < 0) ? 0 : vcol; -+ curwin->w_virtcol = (colnr_T)((vcol < 0) ? 0 : vcol); - - /* - * Advance the cursor until we reach the right screen column. -@@ -1798,9 +1805,9 @@ - */ - if (vcol != (int)curwin->w_virtcol) - { -- curwin->w_cursor.col = new_cursor_col; -+ curwin->w_cursor.col = (colnr_T)new_cursor_col; - i = (int)curwin->w_virtcol - vcol; -- ptr = alloc(i + 1); -+ ptr = alloc((unsigned)(i + 1)); - if (ptr != NULL) - { - new_cursor_col += i; -@@ -1824,7 +1831,7 @@ - if (new_cursor_col <= 0) - curwin->w_cursor.col = 0; - else -- curwin->w_cursor.col = new_cursor_col; -+ curwin->w_cursor.col = (colnr_T)new_cursor_col; - curwin->w_set_curswant = TRUE; - changed_cline_bef_curs(); - -@@ -1933,6 +1940,8 @@ - /* - * Backspace the cursor until the given column. Handles REPLACE and VREPLACE - * modes correctly. May also be used when not in insert mode at all. -+ * Will attempt not to go before "col" even when there is a composing -+ * character. - */ - void - backspace_until_column(col) -@@ -1942,13 +1951,49 @@ - { - curwin->w_cursor.col--; - if (State & REPLACE_FLAG) -- replace_do_bs(); -- else -- (void)del_char(FALSE); -+ replace_do_bs(col); -+ else if (!del_char_after_col(col)) -+ break; - } - } - #endif - -+/* -+ * Like del_char(), but make sure not to go before column "limit_col". -+ * Only matters when there are composing characters. -+ * Return TRUE when something was deleted. -+ */ -+ static int -+del_char_after_col(limit_col) -+ int limit_col UNUSED; -+{ -+#ifdef FEAT_MBYTE -+ if (enc_utf8 && limit_col >= 0) -+ { -+ colnr_T ecol = curwin->w_cursor.col + 1; -+ -+ /* Make sure the cursor is at the start of a character, but -+ * skip forward again when going too far back because of a -+ * composing character. */ -+ mb_adjust_cursor(); -+ while (curwin->w_cursor.col < (colnr_T)limit_col) -+ { -+ int l = utf_ptr2len(ml_get_cursor()); -+ -+ if (l == 0) /* end of line */ -+ break; -+ curwin->w_cursor.col += l; -+ } -+ if (*ml_get_cursor() == NUL || curwin->w_cursor.col == ecol) -+ return FALSE; -+ del_bytes((long)((int)ecol - curwin->w_cursor.col), FALSE, TRUE); -+ } -+ else -+#endif -+ (void)del_char(FALSE); -+ return TRUE; -+} -+ - #if defined(FEAT_INS_EXPAND) || defined(PROTO) - /* - * CTRL-X pressed in Insert mode. -@@ -2160,7 +2205,7 @@ - actual_compl_length = compl_length; - - /* Allocate wide character array for the completion and fill it. */ -- wca = (int *)alloc(actual_len * sizeof(int)); -+ wca = (int *)alloc((unsigned)(actual_len * sizeof(int))); - if (wca != NULL) - { - p = str; -@@ -2418,7 +2463,7 @@ - { - had_match = (curwin->w_cursor.col > compl_col); - ins_compl_delete(); -- ins_bytes(compl_leader + curwin->w_cursor.col - compl_col); -+ ins_bytes(compl_leader + ins_compl_len()); - ins_redraw(FALSE); - - /* When the match isn't there (to avoid matching itself) remove it -@@ -2470,7 +2515,7 @@ - *p = NUL; - had_match = (curwin->w_cursor.col > compl_col); - ins_compl_delete(); -- ins_bytes(compl_leader + curwin->w_cursor.col - compl_col); -+ ins_bytes(compl_leader + ins_compl_len()); - ins_redraw(FALSE); - - /* When the match isn't there (to avoid matching itself) remove it -@@ -2539,7 +2584,7 @@ - */ - void - set_completion(startcol, list) -- int startcol; -+ colnr_T startcol; - list_T *list; - { - /* If already doing completions stop it. */ -@@ -2550,10 +2595,10 @@ - if (stop_arrow() == FAIL) - return; - -- if (startcol > (int)curwin->w_cursor.col) -+ if (startcol > curwin->w_cursor.col) - startcol = curwin->w_cursor.col; - compl_col = startcol; -- compl_length = curwin->w_cursor.col - startcol; -+ compl_length = (int)curwin->w_cursor.col - (int)startcol; - /* compl_pattern doesn't need to be set */ - compl_orig_text = vim_strnsave(ml_get_curline() + compl_col, compl_length); - if (compl_orig_text == NULL || ins_compl_add(compl_orig_text, -@@ -2819,7 +2864,6 @@ - regmatch_T regmatch; - char_u **files; - int count; -- int i; - int save_p_scs; - int dir = compl_direction; - -@@ -2851,17 +2895,18 @@ - if (ctrl_x_mode == CTRL_X_WHOLE_LINE) - { - char_u *pat_esc = vim_strsave_escaped(pat, (char_u *)"\\"); -+ size_t len; - - if (pat_esc == NULL) - goto theend; -- i = (int)STRLEN(pat_esc) + 10; -- ptr = alloc(i); -+ len = STRLEN(pat_esc) + 10; -+ ptr = alloc((unsigned)len); - if (ptr == NULL) - { - vim_free(pat_esc); - goto theend; - } -- vim_snprintf((char *)ptr, i, "^\\s*\\zs\\V%s", pat_esc); -+ vim_snprintf((char *)ptr, len, "^\\s*\\zs\\V%s", pat_esc); - regmatch.regprog = vim_regcomp(ptr, RE_MAGIC); - vim_free(pat_esc); - vim_free(ptr); -@@ -2952,7 +2997,7 @@ - { - vim_snprintf((char *)IObuff, IOSIZE, - _("Scanning dictionary: %s"), (char *)files[i]); -- msg_trunc_attr(IObuff, TRUE, hl_attr(HLF_R)); -+ (void)msg_trunc_attr(IObuff, TRUE, hl_attr(HLF_R)); - } - - if (fp != NULL) -@@ -3133,6 +3178,7 @@ - vim_free(match); - } while (compl_curr_match != NULL && compl_curr_match != compl_first_match); - compl_first_match = compl_curr_match = NULL; -+ compl_shown_match = NULL; - } - - static void -@@ -3209,7 +3255,7 @@ - { - ins_compl_del_pum(); - ins_compl_delete(); -- ins_bytes(compl_leader + curwin->w_cursor.col - compl_col); -+ ins_bytes(compl_leader + ins_compl_len()); - compl_used_match = FALSE; - - if (compl_started) -@@ -3264,6 +3310,20 @@ - } - - /* -+ * Return the length of the completion, from the completion start column to -+ * the cursor column. Making sure it never goes below zero. -+ */ -+ static int -+ins_compl_len() -+{ -+ int off = (int)curwin->w_cursor.col - (int)compl_col; -+ -+ if (off < 0) -+ return 0; -+ return off; -+} -+ -+/* - * Append one character to the match leader. May reduce the number of - * matches. - */ -@@ -3292,7 +3352,7 @@ - - vim_free(compl_leader); - compl_leader = vim_strnsave(ml_get_curline() + compl_col, -- curwin->w_cursor.col - compl_col); -+ (int)(curwin->w_cursor.col - compl_col)); - if (compl_leader != NULL) - ins_compl_new_leader(); - } -@@ -3340,7 +3400,7 @@ - ins_compl_addfrommatch() - { - char_u *p; -- int len = curwin->w_cursor.col - compl_col; -+ int len = (int)curwin->w_cursor.col - (int)compl_col; - int c; - compl_T *cp; - -@@ -3621,10 +3681,9 @@ - { - ins_compl_delete(); - if (compl_leader != NULL) -- ins_bytes(compl_leader + curwin->w_cursor.col - compl_col); -+ ins_bytes(compl_leader + ins_compl_len()); - else if (compl_first_match != NULL) -- ins_bytes(compl_orig_text -- + curwin->w_cursor.col - compl_col); -+ ins_bytes(compl_orig_text + ins_compl_len()); - retval = TRUE; - } - -@@ -3907,7 +3966,7 @@ - : ins_buf->b_sfname == NULL - ? (char *)ins_buf->b_fname - : (char *)ins_buf->b_sfname); -- msg_trunc_attr(IObuff, TRUE, hl_attr(HLF_R)); -+ (void)msg_trunc_attr(IObuff, TRUE, hl_attr(HLF_R)); - } - else if (*e_cpt == NUL) - break; -@@ -3936,8 +3995,8 @@ - else if (*e_cpt == ']' || *e_cpt == 't') - { - type = CTRL_X_TAGS; -- sprintf((char*)IObuff, _("Scanning tags.")); -- msg_trunc_attr(IObuff, TRUE, hl_attr(HLF_R)); -+ vim_snprintf((char *)IObuff, IOSIZE, _("Scanning tags.")); -+ (void)msg_trunc_attr(IObuff, TRUE, hl_attr(HLF_R)); - } - else - type = -1; -@@ -4035,7 +4094,7 @@ - case CTRL_X_SPELL: - #ifdef FEAT_SPELL - num_matches = expand_spelling(first_match_pos.lnum, -- first_match_pos.col, compl_pattern, &matches); -+ compl_pattern, &matches); - if (num_matches > 0) - ins_compl_add_matches(num_matches, matches, p_ic); - #endif -@@ -4187,7 +4246,7 @@ - } - - /* check if compl_curr_match has changed, (e.g. other type of -- * expansion added somenthing) */ -+ * expansion added something) */ - if (type != 0 && compl_curr_match != old_match) - found_new_match = OK; - -@@ -4256,7 +4315,7 @@ - static void - ins_compl_insert() - { -- ins_bytes(compl_shown_match->cp_str + curwin->w_cursor.col - compl_col); -+ ins_bytes(compl_shown_match->cp_str + ins_compl_len()); - if (compl_shown_match->cp_flags & ORIGINAL_TEXT) - compl_used_match = FALSE; - else -@@ -4425,7 +4484,7 @@ - if (!compl_get_longest || compl_used_match) - ins_compl_insert(); - else -- ins_bytes(compl_leader + curwin->w_cursor.col - compl_col); -+ ins_bytes(compl_leader + ins_compl_len()); - } - else - compl_used_match = FALSE; -@@ -4688,7 +4747,7 @@ - } - compl_length = curwin->w_cursor.col - (int)compl_col; - /* IObuff is used to add a "word from the next line" would we -- * have enough space? just being paranoic */ -+ * have enough space? just being paranoid */ - #define MIN_SPACE 75 - if (compl_length > (IOSIZE - MIN_SPACE)) - { -@@ -4745,10 +4804,9 @@ - { - char_u *prefix = (char_u *)"\\<"; - -- /* we need 3 extra chars, 1 for the NUL and -- * 2 >= strlen(prefix) -- Acevedo */ -+ /* we need up to 2 extra chars for the prefix */ - compl_pattern = alloc(quote_meta(NULL, line + compl_col, -- compl_length) + 3); -+ compl_length) + 2); - if (compl_pattern == NULL) - return FAIL; - if (!vim_iswordp(line + compl_col) -@@ -4823,7 +4881,7 @@ - else - { - compl_pattern = alloc(quote_meta(NULL, line + compl_col, -- compl_length) + 3); -+ compl_length) + 2); - if (compl_pattern == NULL) - return FAIL; - STRCPY((char *)compl_pattern, "\\<"); -@@ -4905,7 +4963,7 @@ - if (col < 0) - col = curs_col; - compl_col = col; -- if ((colnr_T)compl_col > curs_col) -+ if (compl_col > curs_col) - compl_col = curs_col; - - /* Setup variables for completion. Need to obtain "line" again, -@@ -5178,15 +5236,15 @@ - * a backslash) the metachars, and dest would be NUL terminated. - * Returns the length (needed) of dest - */ -- static int -+ static unsigned - quote_meta(dest, src, len) - char_u *dest; - char_u *src; - int len; - { -- int m; -+ unsigned m = (unsigned)len + 1; /* one extra for the NUL */ - -- for (m = len; --len >= 0; src++) -+ for ( ; --len >= 0; src++) - { - switch (*src) - { -@@ -6015,7 +6073,7 @@ - * in 'formatoptions' and there is a single character before the cursor. - * Otherwise the line would be broken and when typing another non-white - * next they are not joined back together. */ -- wasatend = (pos.col == STRLEN(old)); -+ wasatend = (pos.col == (colnr_T)STRLEN(old)); - if (*old != NUL && !trailblank && wasatend) - { - dec_cursor(); -@@ -6192,7 +6250,7 @@ - * three digits. */ - if (VIM_ISDIGIT(c)) - { -- sprintf((char *)buf, "%03d", c); -+ vim_snprintf((char *)buf, sizeof(buf), "%03d", c); - AppendToRedobuff(buf); - } - else -@@ -6266,7 +6324,7 @@ - ins_need_undo = FALSE; - } - Insstart = curwin->w_cursor; /* new insertion starts here */ -- Insstart_textlen = linetabsize(ml_get_curline()); -+ Insstart_textlen = (colnr_T)linetabsize(ml_get_curline()); - ai_col = 0; - #ifdef FEAT_VREPLACE - if (State & VREPLACE_FLAG) -@@ -6369,13 +6427,17 @@ - - /* If we just did an auto-indent, remove the white space from the end - * of the line, and put the cursor back. -- * Do this when ESC was used or moving the cursor up/down. */ -+ * Do this when ESC was used or moving the cursor up/down. -+ * Check for the old position still being valid, just in case the text -+ * got changed unexpectedly. */ - if (did_ai && (esc || (vim_strchr(p_cpo, CPO_INDENT) == NULL -- && curwin->w_cursor.lnum != end_insert_pos->lnum))) -+ && curwin->w_cursor.lnum != end_insert_pos->lnum)) -+ && end_insert_pos->lnum <= curbuf->b_ml.ml_line_count) - { - pos_T tpos = curwin->w_cursor; - - curwin->w_cursor = *end_insert_pos; -+ check_cursor_col(); /* make sure it is not past the line */ - for (;;) - { - if (gchar_cursor() == NUL && curwin->w_cursor.col > 0) -@@ -6383,7 +6445,8 @@ - cc = gchar_cursor(); - if (!vim_iswhite(cc)) - break; -- (void)del_char(TRUE); -+ if (del_char(TRUE) == FAIL) -+ break; /* should not happen */ - } - if (curwin->w_cursor.lnum != tpos.lnum) - curwin->w_cursor = tpos; -@@ -6395,10 +6458,11 @@ - * deleted characters. */ - if (VIsual_active && VIsual.lnum == curwin->w_cursor.lnum) - { -- cc = (int)STRLEN(ml_get_curline()); -- if (VIsual.col > (colnr_T)cc) -+ int len = (int)STRLEN(ml_get_curline()); -+ -+ if (VIsual.col > len) - { -- VIsual.col = cc; -+ VIsual.col = len; - # ifdef FEAT_VIRTUALEDIT - VIsual.coladd = 0; - # endif -@@ -7123,9 +7187,12 @@ - * cc == 0: character was inserted, delete it - * cc > 0: character was replaced, put cc (first byte of original char) back - * and check for more characters to be put back -+ * When "limit_col" is >= 0, don't delete before this column. Matters when -+ * using composing characters, use del_char_after_col() instead of del_char(). - */ - static void --replace_do_bs() -+replace_do_bs(limit_col) -+ int limit_col; - { - int cc; - #ifdef FEAT_VREPLACE -@@ -7153,7 +7220,7 @@ - #ifdef FEAT_MBYTE - if (has_mbyte) - { -- del_char(FALSE); -+ (void)del_char_after_col(limit_col); - # ifdef FEAT_VREPLACE - if (State & VREPLACE_FLAG) - orig_len = (int)STRLEN(ml_get_cursor()); -@@ -7203,7 +7270,7 @@ - changed_bytes(curwin->w_cursor.lnum, curwin->w_cursor.col); - } - else if (cc == 0) -- (void)del_char(FALSE); -+ (void)del_char_after_col(limit_col); - } - - #ifdef FEAT_CINDENT -@@ -7646,9 +7713,7 @@ - */ - ++no_mapping; - regname = plain_vgetc(); --#ifdef FEAT_LANGMAP - LANGMAP_ADJUST(regname, TRUE); --#endif - if (regname == Ctrl_R || regname == Ctrl_O || regname == Ctrl_P) - { - /* Get a third key for literal register insertion */ -@@ -7657,9 +7722,7 @@ - add_to_showcmd_c(literally); - #endif - regname = plain_vgetc(); --#ifdef FEAT_LANGMAP - LANGMAP_ADJUST(regname, TRUE); --#endif - } - --no_mapping; - -@@ -8150,7 +8213,7 @@ - /* - * If the cursor is on an indent, ^T/^D insert/delete one - * shiftwidth. Otherwise ^T/^D behave like a "<<" or ">>". -- * Always round the indent to 'shiftwith', this is compatible -+ * Always round the indent to 'shiftwidth', this is compatible - * with vi. But vi only supports ^T and ^D after an - * autoindent, we support it everywhere. - */ -@@ -8239,7 +8302,7 @@ - * Replace mode */ - if (curwin->w_cursor.lnum != Insstart.lnum - || curwin->w_cursor.col >= Insstart.col) -- replace_do_bs(); -+ replace_do_bs(-1); - } - else - (void)del_char(FALSE); -@@ -8258,6 +8321,7 @@ - linenr_T lnum; - int cc; - int temp = 0; /* init for GCC */ -+ colnr_T save_col; - colnr_T mincol; - int did_backspace = FALSE; - int in_indent; -@@ -8415,13 +8479,13 @@ - */ - while (cc > 0) - { -- temp = curwin->w_cursor.col; -+ save_col = curwin->w_cursor.col; - #ifdef FEAT_MBYTE - mb_replace_pop_ins(cc); - #else - ins_char(cc); - #endif -- curwin->w_cursor.col = temp; -+ curwin->w_cursor.col = save_col; - cc = replace_pop(); - } - /* restore the characters that NL replaced */ -@@ -8453,11 +8517,11 @@ - #endif - ) - { -- temp = curwin->w_cursor.col; -+ save_col = curwin->w_cursor.col; - beginline(BL_WHITE); - if (curwin->w_cursor.col < (colnr_T)temp) - mincol = curwin->w_cursor.col; -- curwin->w_cursor.col = temp; -+ curwin->w_cursor.col = save_col; - } - - /* -@@ -8556,7 +8620,7 @@ - break; - } - if (State & REPLACE_FLAG) -- replace_do_bs(); -+ replace_do_bs(-1); - else - { - #ifdef FEAT_MBYTE -@@ -8931,7 +8995,10 @@ - foldOpenCursor(); - #endif - undisplay_dollar(); -- if (gchar_cursor() != NUL || virtual_active() -+ if (gchar_cursor() != NUL -+#ifdef FEAT_VIRTUALEDIT -+ || virtual_active() -+#endif - ) - { - start_arrow(&curwin->w_cursor); -diff -Naur vim72.orig/src/eval.c vim72/src/eval.c ---- vim72.orig/src/eval.c 2008-08-07 20:37:22.000000000 +0100 -+++ vim72/src/eval.c 2009-07-22 22:54:22.000000000 +0100 -@@ -32,6 +32,9 @@ - - #define DICT_MAXNEST 100 /* maximum nesting of lists and dicts */ - -+#define DO_NOT_FREE_CNT 99999 /* refcount for dict or list that should not -+ be freed. */ -+ - /* - * In a hashtab item "hi_key" points to "di_key" in a dictitem. - * This avoids adding a pointer to the hashtab item. -@@ -126,8 +129,11 @@ - /* - * When recursively copying lists and dicts we need to remember which ones we - * have done to avoid endless recursiveness. This unique ID is used for that. -+ * The last bit is used for previous_funccal, ignored when comparing. - */ - static int current_copyID = 0; -+#define COPYID_INC 2 -+#define COPYID_MASK (~0x1) - - /* - * Array to hold the hashtab with variables local to each sourced script. -@@ -280,7 +286,7 @@ - #define VV_RO 2 /* read-only */ - #define VV_RO_SBX 4 /* read-only in the sandbox */ - --#define VV_NAME(s, t) s, {{t}}, {0} -+#define VV_NAME(s, t) s, {{t, 0, {0}}, 0, {0}}, {0} - - static struct vimvar - { -@@ -348,6 +354,7 @@ - {VV_NAME("mouse_col", VAR_NUMBER), 0}, - {VV_NAME("operator", VAR_STRING), VV_RO}, - {VV_NAME("searchforward", VAR_NUMBER), 0}, -+ {VV_NAME("oldfiles", VAR_LIST), 0}, - }; - - /* shorthand */ -@@ -355,6 +362,7 @@ - #define vv_nr vv_di.di_tv.vval.v_number - #define vv_float vv_di.di_tv.vval.v_float - #define vv_str vv_di.di_tv.vval.v_string -+#define vv_list vv_di.di_tv.vval.v_list - #define vv_tv vv_di.di_tv - - /* -@@ -426,7 +434,6 @@ - static long list_idx_of_item __ARGS((list_T *l, listitem_T *item)); - static void list_append __ARGS((list_T *l, listitem_T *item)); - static int list_append_tv __ARGS((list_T *l, typval_T *tv)); --static int list_append_string __ARGS((list_T *l, char_u *str, int len)); - static int list_append_number __ARGS((list_T *l, varnumber_T n)); - static int list_insert_tv __ARGS((list_T *l, typval_T *tv, listitem_T *item)); - static int list_extend __ARGS((list_T *l1, list_T *l2, listitem_T *bef)); -@@ -435,6 +442,7 @@ - static void list_remove __ARGS((list_T *l, listitem_T *item, listitem_T *item2)); - static char_u *list2string __ARGS((typval_T *tv, int copyID)); - static int list_join __ARGS((garray_T *gap, list_T *l, char_u *sep, int echo, int copyID)); -+static int free_unref_items __ARGS((int copyID)); - static void set_ref_in_ht __ARGS((hashtab_T *ht, int copyID)); - static void set_ref_in_list __ARGS((list_T *l, int copyID)); - static void set_ref_in_item __ARGS((typval_T *tv, int copyID)); -@@ -788,6 +796,8 @@ - static void func_unref __ARGS((char_u *name)); - static void func_ref __ARGS((char_u *name)); - static void call_user_func __ARGS((ufunc_T *fp, int argcount, typval_T *argvars, typval_T *rettv, linenr_T firstline, linenr_T lastline, dict_T *selfdict)); -+static int can_free_funccal __ARGS((funccall_T *fc, int copyID)) ; -+static void free_funccal __ARGS((funccall_T *fc, int free_val)); - static void add_nr_var __ARGS((dict_T *dp, dictitem_T *v, char *name, varnumber_T nr)); - static win_T *find_win_by_nr __ARGS((typval_T *vp, tabpage_T *tp)); - static void getwinvar __ARGS((typval_T *argvars, typval_T *rettv, int off)); -@@ -845,11 +855,17 @@ - p = &vimvars[i]; - if (p->vv_di.di_tv.v_type == VAR_STRING) - { -- vim_free(p->vv_di.di_tv.vval.v_string); -- p->vv_di.di_tv.vval.v_string = NULL; -+ vim_free(p->vv_str); -+ p->vv_str = NULL; -+ } -+ else if (p->vv_di.di_tv.v_type == VAR_LIST) -+ { -+ list_unref(p->vv_list); -+ p->vv_list = NULL; - } - } - hash_clear(&vimvarht); -+ hash_init(&vimvarht); /* garbage_collect() will access it */ - hash_clear(&compat_hashtab); - - /* script-local variables */ -@@ -916,6 +932,10 @@ - /* pointer to funccal for currently active function */ - funccall_T *current_funccal = NULL; - -+/* pointer to list of previously used funccal, still around because some -+ * item in it is still being used. */ -+funccall_T *previous_funccal = NULL; -+ - /* - * Return TRUE when a function was ended by a ":return" command. - */ -@@ -1256,23 +1276,28 @@ - - /* - * 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, dolist) -+eval_to_string(arg, nextcmd, convert) - char_u *arg; - char_u **nextcmd; -- int dolist; /* turn List into sequence of lines */ -+ int convert; - { - typval_T tv; - char_u *retval; - garray_T ga; -+#ifdef FEAT_FLOAT -+ char_u numbuf[NUMBUFLEN]; -+#endif - - if (eval0(arg, &tv, nextcmd, TRUE) == FAIL) - retval = NULL; - else - { -- if (dolist && tv.v_type == VAR_LIST) -+ if (convert && tv.v_type == VAR_LIST) - { - ga_init2(&ga, (int)sizeof(char), 80); - if (tv.vval.v_list != NULL) -@@ -1280,6 +1305,13 @@ - 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); -@@ -3277,7 +3309,7 @@ - - if (*startarg != '(') - { -- EMSG2(_("E107: Missing braces: %s"), eap->arg); -+ EMSG2(_("E107: Missing parentheses: %s"), eap->arg); - goto end; - } - -@@ -3657,8 +3689,8 @@ - } - - /* -- * Return TRUE if typeval "tv" is locked: Either tha value is locked itself or -- * it refers to a List or Dictionary that is locked. -+ * 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) -@@ -3744,7 +3776,6 @@ - * Function given to ExpandGeneric() to obtain the list of user defined - * (global/buffer/window/built-in) variable names. - */ --/*ARGSUSED*/ - char_u * - get_user_var_name(xp, idx) - expand_T *xp; -@@ -3902,7 +3933,7 @@ - - /* - * Handle top level expression: -- * expr1 ? expr0 : expr0 -+ * expr2 ? expr1 : expr1 - * - * "arg" must point to the first non-white of the expression. - * "arg" is advanced to the next non-white after the recognized expression. -@@ -5835,7 +5866,7 @@ - return item1 == NULL && item2 == NULL; - } - --#if defined(FEAT_PYTHON) || defined(PROTO) -+#if defined(FEAT_PYTHON) || defined(FEAT_MZSCHEME) || defined(PROTO) - /* - * Return the dictitem that an entry in a hashtable points to. - */ -@@ -6047,6 +6078,25 @@ - } - - /* -+ * Get list item "l[idx - 1]" as a string. Returns NULL for failure. -+ */ -+ char_u * -+list_find_str(l, idx) -+ list_T *l; -+ long idx; -+{ -+ listitem_T *li; -+ -+ li = list_find(l, idx - 1); -+ if (li == NULL) -+ { -+ EMSGN(_(e_listidx), idx); -+ return NULL; -+ } -+ return get_tv_string(&li->li_tv); -+} -+ -+/* - * Locate "item" list "l" and return its index. - * Returns -1 when "item" is not in the list. - */ -@@ -6137,7 +6187,7 @@ - * When "len" >= 0 use "str[len]". - * Returns FAIL when out of memory. - */ -- static int -+ int - list_append_string(l, str, len) - list_T *l; - char_u *str; -@@ -6448,14 +6498,13 @@ - int - garbage_collect() - { -- dict_T *dd; -- list_T *ll; -- int copyID = ++current_copyID; -+ int copyID; - buf_T *buf; - win_T *wp; - int i; -- funccall_T *fc; -- int did_free = FALSE; -+ funccall_T *fc, **pfc; -+ int did_free; -+ int did_free_funccal = FALSE; - #ifdef FEAT_WINDOWS - tabpage_T *tp; - #endif -@@ -6465,10 +6514,25 @@ - may_garbage_collect = FALSE; - garbage_collect_at_exit = FALSE; - -+ /* We advance by two because we add one for items referenced through -+ * previous_funccal. */ -+ current_copyID += COPYID_INC; -+ copyID = current_copyID; -+ - /* - * 1. Go through all accessible variables and mark all lists and dicts - * with copyID. - */ -+ -+ /* Don't free variables in the previous_funccal list unless they are only -+ * referenced through previous_funccal. This must be first, because if -+ * the item is referenced elsewhere the funccal must not be freed. */ -+ for (fc = previous_funccal; fc != NULL; fc = fc->caller) -+ { -+ set_ref_in_ht(&fc->l_vars.dv_hashtab, copyID + 1); -+ set_ref_in_ht(&fc->l_avars.dv_hashtab, copyID + 1); -+ } -+ - /* script-local variables */ - for (i = 1; i <= ga_scripts.ga_len; ++i) - set_ref_in_ht(&SCRIPT_VARS(i), copyID); -@@ -6497,11 +6561,54 @@ - set_ref_in_ht(&fc->l_avars.dv_hashtab, copyID); - } - -+ /* v: vars */ -+ set_ref_in_ht(&vimvarht, copyID); -+ -+ /* -+ * 2. Free lists and dictionaries that are not referenced. -+ */ -+ did_free = free_unref_items(copyID); -+ - /* -- * 2. Go through the list of dicts and free items without the copyID. -+ * 3. Check if any funccal can be freed now. -+ */ -+ for (pfc = &previous_funccal; *pfc != NULL; ) -+ { -+ if (can_free_funccal(*pfc, copyID)) -+ { -+ fc = *pfc; -+ *pfc = fc->caller; -+ free_funccal(fc, TRUE); -+ did_free = TRUE; -+ did_free_funccal = TRUE; -+ } -+ else -+ pfc = &(*pfc)->caller; -+ } -+ if (did_free_funccal) -+ /* When a funccal was freed some more items might be garbage -+ * collected, so run again. */ -+ (void)garbage_collect(); -+ -+ return did_free; -+} -+ -+/* -+ * Free lists and dictionaries that are no longer referenced. -+ */ -+ static int -+free_unref_items(copyID) -+ int copyID; -+{ -+ dict_T *dd; -+ list_T *ll; -+ int did_free = FALSE; -+ -+ /* -+ * Go through the list of dicts and free items without the copyID. - */ - for (dd = first_dict; dd != NULL; ) -- if (dd->dv_copyID != copyID) -+ if ((dd->dv_copyID & COPYID_MASK) != (copyID & COPYID_MASK)) - { - /* Free the Dictionary and ordinary items it contains, but don't - * recurse into Lists and Dictionaries, they will be in the list -@@ -6516,12 +6623,13 @@ - dd = dd->dv_used_next; - - /* -- * 3. Go through the list of lists and free items without the copyID. -- * But don't free a list that has a watcher (used in a for loop), these -- * are not referenced anywhere. -+ * Go through the list of lists and free items without the copyID. -+ * But don't free a list that has a watcher (used in a for loop), these -+ * are not referenced anywhere. - */ - for (ll = first_list; ll != NULL; ) -- if (ll->lv_copyID != copyID && ll->lv_watch == NULL) -+ if ((ll->lv_copyID & COPYID_MASK) != (copyID & COPYID_MASK) -+ && ll->lv_watch == NULL) - { - /* Free the List and ordinary items it contains, but don't recurse - * into Lists and Dictionaries, they will be in the list of dicts -@@ -6587,7 +6695,7 @@ - { - case VAR_DICT: - dd = tv->vval.v_dict; -- if (dd->dv_copyID != copyID) -+ if (dd != NULL && dd->dv_copyID != copyID) - { - /* Didn't see this dict yet. */ - dd->dv_copyID = copyID; -@@ -6597,7 +6705,7 @@ - - case VAR_LIST: - ll = tv->vval.v_list; -- if (ll->lv_copyID != copyID) -+ if (ll != NULL && ll->lv_copyID != copyID) - { - /* Didn't see this list yet. */ - ll->lv_copyID = copyID; -@@ -7525,8 +7633,8 @@ - {"getwinposx", 0, 0, f_getwinposx}, - {"getwinposy", 0, 0, f_getwinposy}, - {"getwinvar", 2, 2, f_getwinvar}, -- {"glob", 1, 1, f_glob}, -- {"globpath", 2, 2, f_globpath}, -+ {"glob", 1, 2, f_glob}, -+ {"globpath", 2, 3, f_globpath}, - {"has", 1, 1, f_has}, - {"has_key", 2, 2, f_has_key}, - {"haslocaldir", 0, 0, f_haslocaldir}, -@@ -7723,7 +7831,6 @@ - * Function given to ExpandGeneric() to obtain the list of internal or - * user defined variable or function names. - */ --/*ARGSUSED*/ - char_u * - get_expr_name(xp, idx) - expand_T *xp; -@@ -7856,9 +7963,9 @@ - else if (!aborting()) - { - if (argcount == MAX_FUNC_ARGS) -- emsg_funcname("E740: Too many arguments for function %s", name); -+ emsg_funcname(N_("E740: Too many arguments for function %s"), name); - else -- emsg_funcname("E116: Invalid arguments for function %s", name); -+ emsg_funcname(N_("E116: Invalid arguments for function %s"), name); - } - - while (--argcount >= 0) -@@ -7956,7 +8063,8 @@ - /* execute the function if no errors detected and executing */ - if (evaluate && error == ERROR_NONE) - { -- rettv->v_type = VAR_NUMBER; /* default is number rettv */ -+ rettv->v_type = VAR_NUMBER; /* default rettv is number zero */ -+ rettv->vval.v_number = 0; - error = ERROR_UNKNOWN; - - if (!builtin_function(fname)) -@@ -8091,6 +8199,7 @@ - - /* - * Give an error message with a function name. Handle things. -+ * "ermsg" is to be passed without translation, use N_() instead of _(). - */ - static void - emsg_funcname(ermsg, name) -@@ -8205,7 +8314,6 @@ - return; - li = l->lv_first; - } -- rettv->vval.v_number = 0; /* Default: Success */ - for (;;) - { - if (l == NULL) -@@ -8238,10 +8346,9 @@ - /* - * "argc()" function - */ --/* ARGSUSED */ - static void - f_argc(argvars, rettv) -- typval_T *argvars; -+ typval_T *argvars UNUSED; - typval_T *rettv; - { - rettv->vval.v_number = ARGCOUNT; -@@ -8250,10 +8357,9 @@ - /* - * "argidx()" function - */ --/* ARGSUSED */ - static void - f_argidx(argvars, rettv) -- typval_T *argvars; -+ typval_T *argvars UNUSED; - typval_T *rettv; - { - rettv->vval.v_number = curwin->w_arg_idx; -@@ -8331,10 +8437,9 @@ - /* - * "browse(save, title, initdir, default)" function - */ --/* ARGSUSED */ - static void - f_browse(argvars, rettv) -- typval_T *argvars; -+ typval_T *argvars UNUSED; - typval_T *rettv; - { - #ifdef FEAT_BROWSE -@@ -8366,10 +8471,9 @@ - /* - * "browsedir(title, initdir)" function - */ --/* ARGSUSED */ - static void - f_browsedir(argvars, rettv) -- typval_T *argvars; -+ typval_T *argvars UNUSED; - typval_T *rettv; - { - #ifdef FEAT_BROWSE -@@ -8594,10 +8698,9 @@ - /* - * "byte2line(byte)" function - */ --/*ARGSUSED*/ - static void - f_byte2line(argvars, rettv) -- typval_T *argvars; -+ typval_T *argvars UNUSED; - typval_T *rettv; - { - #ifndef FEAT_BYTEOFF -@@ -8617,7 +8720,6 @@ - /* - * "byteidx()" function - */ --/*ARGSUSED*/ - static void - f_byteidx(argvars, rettv) - typval_T *argvars; -@@ -8665,7 +8767,6 @@ - int dummy; - dict_T *selfdict = NULL; - -- rettv->vval.v_number = 0; - if (argvars[1].v_type != VAR_LIST) - { - EMSG(_(e_listreq)); -@@ -8737,10 +8838,9 @@ - /* - * "changenr()" function - */ --/*ARGSUSED*/ - static void - f_changenr(argvars, rettv) -- typval_T *argvars; -+ typval_T *argvars UNUSED; - typval_T *rettv; - { - rettv->vval.v_number = curbuf->b_u_seq_cur; -@@ -8790,11 +8890,10 @@ - /* - * "clearmatches()" function - */ --/*ARGSUSED*/ - static void - f_clearmatches(argvars, rettv) -- typval_T *argvars; -- typval_T *rettv; -+ typval_T *argvars UNUSED; -+ typval_T *rettv UNUSED; - { - #ifdef FEAT_SEARCH_EXTRA - clear_matches(curwin); -@@ -8858,11 +8957,10 @@ - /* - * "complete()" function - */ --/*ARGSUSED*/ - static void - f_complete(argvars, rettv) - typval_T *argvars; -- typval_T *rettv; -+ typval_T *rettv UNUSED; - { - int startcol; - -@@ -8893,7 +8991,6 @@ - /* - * "complete_add()" function - */ --/*ARGSUSED*/ - static void - f_complete_add(argvars, rettv) - typval_T *argvars; -@@ -8905,10 +9002,9 @@ - /* - * "complete_check()" function - */ --/*ARGSUSED*/ - static void - f_complete_check(argvars, rettv) -- typval_T *argvars; -+ typval_T *argvars UNUSED; - typval_T *rettv; - { - int saved = RedrawingDisabled; -@@ -8923,11 +9019,10 @@ - /* - * "confirm(message, buttons[, default [, type]])" function - */ --/*ARGSUSED*/ - static void - f_confirm(argvars, rettv) -- typval_T *argvars; -- typval_T *rettv; -+ typval_T *argvars UNUSED; -+ typval_T *rettv UNUSED; - { - #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG) - char_u *message; -@@ -8973,13 +9068,9 @@ - if (buttons == NULL || *buttons == NUL) - buttons = (char_u *)_("&Ok"); - -- if (error) -- rettv->vval.v_number = 0; -- else -+ if (!error) - rettv->vval.v_number = do_dialog(type, NULL, message, buttons, - def, NULL); --#else -- rettv->vval.v_number = 0; - #endif - } - -@@ -9096,11 +9187,10 @@ - * - * Checks the existence of a cscope connection. - */ --/*ARGSUSED*/ - static void - f_cscope_connection(argvars, rettv) -- typval_T *argvars; -- typval_T *rettv; -+ typval_T *argvars UNUSED; -+ typval_T *rettv UNUSED; - { - #ifdef FEAT_CSCOPE - int num = 0; -@@ -9118,17 +9208,15 @@ - } - - rettv->vval.v_number = cs_connection(num, dbpath, prepend); --#else -- rettv->vval.v_number = 0; - #endif - } - - /* - * "cursor(lnum, col)" function - * -- * Moves the cursor to the specified line and column -+ * Moves the cursor to the specified line and column. -+ * Returns 0 when the position could be set, -1 otherwise. - */ --/*ARGSUSED*/ - static void - f_cursor(argvars, rettv) - typval_T *argvars; -@@ -9139,6 +9227,7 @@ - long coladd = 0; - #endif - -+ rettv->vval.v_number = -1; - if (argvars[1].v_type == VAR_UNKNOWN) - { - pos_T pos; -@@ -9183,6 +9272,7 @@ - #endif - - curwin->w_set_curswant = TRUE; -+ rettv->vval.v_number = 0; - } - - /* -@@ -9200,7 +9290,10 @@ - if (noref < 0 || noref > 1) - EMSG(_(e_invarg)); - else -- item_copy(&argvars[0], rettv, TRUE, noref == 0 ? ++current_copyID : 0); -+ { -+ current_copyID += COPYID_INC; -+ item_copy(&argvars[0], rettv, TRUE, noref == 0 ? current_copyID : 0); -+ } - } - - /* -@@ -9220,27 +9313,23 @@ - /* - * "did_filetype()" function - */ --/*ARGSUSED*/ - static void - f_did_filetype(argvars, rettv) -- typval_T *argvars; -- typval_T *rettv; -+ typval_T *argvars UNUSED; -+ typval_T *rettv UNUSED; - { - #ifdef FEAT_AUTOCMD - rettv->vval.v_number = did_filetype; --#else -- rettv->vval.v_number = 0; - #endif - } - - /* - * "diff_filler()" function - */ --/*ARGSUSED*/ - static void - f_diff_filler(argvars, rettv) -- typval_T *argvars; -- typval_T *rettv; -+ typval_T *argvars UNUSED; -+ typval_T *rettv UNUSED; - { - #ifdef FEAT_DIFF - rettv->vval.v_number = diff_check_fill(curwin, get_tv_lnum(argvars)); -@@ -9250,11 +9339,10 @@ - /* - * "diff_hlID()" function - */ --/*ARGSUSED*/ - static void - f_diff_hlID(argvars, rettv) -- typval_T *argvars; -- typval_T *rettv; -+ typval_T *argvars UNUSED; -+ typval_T *rettv UNUSED; - { - #ifdef FEAT_DIFF - linenr_T lnum = get_tv_lnum(argvars); -@@ -9367,7 +9455,6 @@ - /* - * "eval()" function - */ --/*ARGSUSED*/ - static void - f_eval(argvars, rettv) - typval_T *argvars; -@@ -9391,10 +9478,9 @@ - /* - * "eventhandler()" function - */ --/*ARGSUSED*/ - static void - f_eventhandler(argvars, rettv) -- typval_T *argvars; -+ typval_T *argvars UNUSED; - typval_T *rettv; - { - rettv->vval.v_number = vgetc_busy; -@@ -9518,7 +9604,7 @@ - else - { - /* When the optional second argument is non-zero, don't remove matches -- * for 'suffixes' and 'wildignore' */ -+ * for 'wildignore' and don't put matches for 'suffixes' at the end. */ - if (argvars[1].v_type != VAR_UNKNOWN - && get_tv_number_chk(&argvars[1], &error)) - flags |= WILD_KEEP_ALL; -@@ -9542,7 +9628,6 @@ - typval_T *argvars; - typval_T *rettv; - { -- rettv->vval.v_number = 0; - if (argvars[0].v_type == VAR_LIST && argvars[1].v_type == VAR_LIST) - { - list_T *l1, *l2; -@@ -9652,11 +9737,10 @@ - /* - * "feedkeys()" function - */ --/*ARGSUSED*/ - static void - f_feedkeys(argvars, rettv) - typval_T *argvars; -- typval_T *rettv; -+ typval_T *rettv UNUSED; - { - int remap = TRUE; - char_u *keys, *flags; -@@ -9670,7 +9754,6 @@ - if (check_secure()) - return; - -- rettv->vval.v_number = 0; - keys = get_tv_string(&argvars[0]); - if (*keys != NUL) - { -@@ -9838,7 +9921,6 @@ - char_u *ermsg = map ? (char_u *)"map()" : (char_u *)"filter()"; - int save_did_emsg; - -- rettv->vval.v_number = 0; - if (argvars[0].v_type == VAR_LIST) - { - if ((l = argvars[0].vval.v_list) == NULL -@@ -10021,8 +10103,6 @@ - else - rettv->vval.v_number = (varnumber_T)f; - } -- else -- rettv->vval.v_number = 0; - } - - /* -@@ -10156,18 +10236,15 @@ - lnum = get_tv_lnum(argvars); - if (lnum >= 1 && lnum <= curbuf->b_ml.ml_line_count) - rettv->vval.v_number = foldLevel(lnum); -- else - #endif -- rettv->vval.v_number = 0; - } - - /* - * "foldtext()" function - */ --/*ARGSUSED*/ - static void - f_foldtext(argvars, rettv) -- typval_T *argvars; -+ typval_T *argvars UNUSED; - typval_T *rettv; - { - #ifdef FEAT_FOLDING -@@ -10232,10 +10309,9 @@ - /* - * "foldtextresult(lnum)" function - */ --/*ARGSUSED*/ - static void - f_foldtextresult(argvars, rettv) -- typval_T *argvars; -+ typval_T *argvars UNUSED; - typval_T *rettv; - { - #ifdef FEAT_FOLDING -@@ -10268,13 +10344,11 @@ - /* - * "foreground()" function - */ --/*ARGSUSED*/ - static void - f_foreground(argvars, rettv) -- typval_T *argvars; -- typval_T *rettv; -+ typval_T *argvars UNUSED; -+ typval_T *rettv UNUSED; - { -- rettv->vval.v_number = 0; - #ifdef FEAT_GUI - if (gui.in_use) - gui_mch_set_foreground(); -@@ -10288,7 +10362,6 @@ - /* - * "function()" function - */ --/*ARGSUSED*/ - static void - f_function(argvars, rettv) - typval_T *argvars; -@@ -10296,11 +10369,11 @@ - { - char_u *s; - -- rettv->vval.v_number = 0; - s = get_tv_string(&argvars[0]); - if (s == NULL || *s == NUL || VIM_ISDIGIT(*s)) - EMSG2(_(e_invarg2), s); -- else if (!function_exists(s)) -+ /* Don't check an autoload name for existence here. */ -+ else if (vim_strchr(s, AUTOLOAD_CHAR) == NULL && !function_exists(s)) - EMSG2(_("E700: Unknown function: %s"), s); - else - { -@@ -10312,11 +10385,10 @@ - /* - * "garbagecollect()" function - */ --/*ARGSUSED*/ - static void - f_garbagecollect(argvars, rettv) - typval_T *argvars; -- typval_T *rettv; -+ typval_T *rettv UNUSED; - { - /* This is postponed until we are back at the toplevel, because we may be - * using Lists and Dicts internally. E.g.: ":echo [garbagecollect()]". */ -@@ -10365,9 +10437,7 @@ - - if (tv == NULL) - { -- if (argvars[2].v_type == VAR_UNKNOWN) -- rettv->vval.v_number = 0; -- else -+ if (argvars[2].v_type != VAR_UNKNOWN) - copy_tv(&argvars[2], rettv); - } - else -@@ -10392,13 +10462,8 @@ - { - char_u *p; - -- if (retlist) -- { -- if (rettv_list_alloc(rettv) == FAIL) -- return; -- } -- else -- rettv->vval.v_number = 0; -+ if (retlist && rettv_list_alloc(rettv) == FAIL) -+ return; - - if (buf == NULL || buf->b_ml.ml_mfp == NULL || start < 0) - return; -@@ -10602,7 +10667,7 @@ - # ifdef FEAT_WINDOWS - win_T *wp; - # endif -- int n = 1; -+ int winnr = 1; - - if (row >= 0 && col >= 0) - { -@@ -10612,9 +10677,9 @@ - (void)mouse_comp_pos(win, &row, &col, &lnum); - # ifdef FEAT_WINDOWS - for (wp = firstwin; wp != win; wp = wp->w_next) -- ++n; -+ ++winnr; - # endif -- vimvars[VV_MOUSE_WIN].vv_nr = n; -+ vimvars[VV_MOUSE_WIN].vv_nr = winnr; - vimvars[VV_MOUSE_LNUM].vv_nr = lnum; - vimvars[VV_MOUSE_COL].vv_nr = col + 1; - } -@@ -10626,10 +10691,9 @@ - /* - * "getcharmod()" function - */ --/*ARGSUSED*/ - static void - f_getcharmod(argvars, rettv) -- typval_T *argvars; -+ typval_T *argvars UNUSED; - typval_T *rettv; - { - rettv->vval.v_number = mod_mask; -@@ -10638,10 +10702,9 @@ - /* - * "getcmdline()" function - */ --/*ARGSUSED*/ - static void - f_getcmdline(argvars, rettv) -- typval_T *argvars; -+ typval_T *argvars UNUSED; - typval_T *rettv; - { - rettv->v_type = VAR_STRING; -@@ -10651,10 +10714,9 @@ - /* - * "getcmdpos()" function - */ --/*ARGSUSED*/ - static void - f_getcmdpos(argvars, rettv) -- typval_T *argvars; -+ typval_T *argvars UNUSED; - typval_T *rettv; - { - rettv->vval.v_number = get_cmdline_pos() + 1; -@@ -10663,10 +10725,9 @@ - /* - * "getcmdtype()" function - */ --/*ARGSUSED*/ - static void - f_getcmdtype(argvars, rettv) -- typval_T *argvars; -+ typval_T *argvars UNUSED; - typval_T *rettv; - { - rettv->v_type = VAR_STRING; -@@ -10681,10 +10742,9 @@ - /* - * "getcwd()" function - */ --/*ARGSUSED*/ - static void - f_getcwd(argvars, rettv) -- typval_T *argvars; -+ typval_T *argvars UNUSED; - typval_T *rettv; - { - char_u cwd[MAXPATHL]; -@@ -10705,10 +10765,9 @@ - /* - * "getfontname()" function - */ --/*ARGSUSED*/ - static void - f_getfontname(argvars, rettv) -- typval_T *argvars; -+ typval_T *argvars UNUSED; - typval_T *rettv; - { - rettv->v_type = VAR_STRING; -@@ -10935,18 +10994,15 @@ - /* - * "getmatches()" function - */ --/*ARGSUSED*/ - static void - f_getmatches(argvars, rettv) -- typval_T *argvars; -+ typval_T *argvars UNUSED; - typval_T *rettv; - { - #ifdef FEAT_SEARCH_EXTRA - dict_T *dict; - matchitem_T *cur = curwin->w_match_head; - -- rettv->vval.v_number = 0; -- - if (rettv_list_alloc(rettv) == OK) - { - while (cur != NULL) -@@ -10968,10 +11024,9 @@ - /* - * "getpid()" function - */ --/*ARGSUSED*/ - static void - f_getpid(argvars, rettv) -- typval_T *argvars; -+ typval_T *argvars UNUSED; - typval_T *rettv; - { - rettv->vval.v_number = mch_get_pid(); -@@ -11015,17 +11070,15 @@ - /* - * "getqflist()" and "getloclist()" functions - */ --/*ARGSUSED*/ - static void - f_getqflist(argvars, rettv) -- typval_T *argvars; -- typval_T *rettv; -+ typval_T *argvars UNUSED; -+ typval_T *rettv UNUSED; - { - #ifdef FEAT_QUICKFIX - win_T *wp; - #endif - -- rettv->vval.v_number = 0; - #ifdef FEAT_QUICKFIX - if (rettv_list_alloc(rettv) == OK) - { -@@ -11135,10 +11188,9 @@ - /* - * "getwinposx()" function - */ --/*ARGSUSED*/ - static void - f_getwinposx(argvars, rettv) -- typval_T *argvars; -+ typval_T *argvars UNUSED; - typval_T *rettv; - { - rettv->vval.v_number = -1; -@@ -11156,10 +11208,9 @@ - /* - * "getwinposy()" function - */ --/*ARGSUSED*/ - static void - f_getwinposy(argvars, rettv) -- typval_T *argvars; -+ typval_T *argvars UNUSED; - typval_T *rettv; - { - rettv->vval.v_number = -1; -@@ -11284,13 +11335,25 @@ - typval_T *argvars; - typval_T *rettv; - { -+ int flags = WILD_SILENT|WILD_USE_NL; - expand_T xpc; -+ int error = FALSE; - -- ExpandInit(&xpc); -- xpc.xp_context = EXPAND_FILES; -+ /* When the optional second argument is non-zero, don't remove matches -+ * for 'wildignore' and don't put matches for 'suffixes' at the end. */ -+ if (argvars[1].v_type != VAR_UNKNOWN -+ && get_tv_number_chk(&argvars[1], &error)) -+ flags |= WILD_KEEP_ALL; - rettv->v_type = VAR_STRING; -- rettv->vval.v_string = ExpandOne(&xpc, get_tv_string(&argvars[0]), -- NULL, WILD_USE_NL|WILD_SILENT, WILD_ALL); -+ if (!error) -+ { -+ ExpandInit(&xpc); -+ xpc.xp_context = EXPAND_FILES; -+ rettv->vval.v_string = ExpandOne(&xpc, get_tv_string(&argvars[0]), -+ NULL, flags, WILD_ALL); -+ } -+ else -+ rettv->vval.v_string = NULL; - } - - /* -@@ -11301,14 +11364,22 @@ - typval_T *argvars; - typval_T *rettv; - { -+ int flags = 0; - char_u buf1[NUMBUFLEN]; - char_u *file = get_tv_string_buf_chk(&argvars[1], buf1); -+ int error = FALSE; - -+ /* When the optional second argument is non-zero, don't remove matches -+ * for 'wildignore' and don't put matches for 'suffixes' at the end. */ -+ if (argvars[2].v_type != VAR_UNKNOWN -+ && get_tv_number_chk(&argvars[2], &error)) -+ flags |= WILD_KEEP_ALL; - rettv->v_type = VAR_STRING; -- if (file == NULL) -+ if (file == NULL || error) - rettv->vval.v_string = NULL; - else -- rettv->vval.v_string = globpath(get_tv_string(&argvars[0]), file); -+ rettv->vval.v_string = globpath(get_tv_string(&argvars[0]), file, -+ flags); - } - - /* -@@ -11782,6 +11853,10 @@ - n = has_patch(atoi((char *)name + 5)); - else if (STRICMP(name, "vim_starting") == 0) - n = (starting != 0); -+#ifdef FEAT_MBYTE -+ else if (STRICMP(name, "multi_byte_encoding") == 0) -+ n = has_mbyte; -+#endif - #if defined(FEAT_BEVAL) && defined(FEAT_GUI_W32) - else if (STRICMP(name, "balloon_multiline") == 0) - n = multiline_balloon_available(); -@@ -11847,7 +11922,6 @@ - typval_T *argvars; - typval_T *rettv; - { -- rettv->vval.v_number = 0; - if (argvars[0].v_type != VAR_DICT) - { - EMSG(_(e_dictreq)); -@@ -11863,10 +11937,9 @@ - /* - * "haslocaldir()" function - */ --/*ARGSUSED*/ - static void - f_haslocaldir(argvars, rettv) -- typval_T *argvars; -+ typval_T *argvars UNUSED; - typval_T *rettv; - { - rettv->vval.v_number = (curwin->w_localdir != NULL); -@@ -11904,10 +11977,9 @@ - /* - * "histadd()" function - */ --/*ARGSUSED*/ - static void - f_histadd(argvars, rettv) -- typval_T *argvars; -+ typval_T *argvars UNUSED; - typval_T *rettv; - { - #ifdef FEAT_CMDHIST -@@ -11938,11 +12010,10 @@ - /* - * "histdel()" function - */ --/*ARGSUSED*/ - static void - f_histdel(argvars, rettv) -- typval_T *argvars; -- typval_T *rettv; -+ typval_T *argvars UNUSED; -+ typval_T *rettv UNUSED; - { - #ifdef FEAT_CMDHIST - int n; -@@ -11964,18 +12035,15 @@ - n = del_history_entry(get_histtype(str), - get_tv_string_buf(&argvars[1], buf)); - rettv->vval.v_number = n; --#else -- rettv->vval.v_number = 0; - #endif - } - - /* - * "histget()" function - */ --/*ARGSUSED*/ - static void - f_histget(argvars, rettv) -- typval_T *argvars; -+ typval_T *argvars UNUSED; - typval_T *rettv; - { - #ifdef FEAT_CMDHIST -@@ -12005,10 +12073,9 @@ - /* - * "histnr()" function - */ --/*ARGSUSED*/ - static void - f_histnr(argvars, rettv) -- typval_T *argvars; -+ typval_T *argvars UNUSED; - typval_T *rettv; - { - int i; -@@ -12050,10 +12117,9 @@ - /* - * "hostname()" function - */ --/*ARGSUSED*/ - static void - f_hostname(argvars, rettv) -- typval_T *argvars; -+ typval_T *argvars UNUSED; - typval_T *rettv; - { - char_u hostname[256]; -@@ -12066,10 +12132,9 @@ - /* - * iconv() function - */ --/*ARGSUSED*/ - static void - f_iconv(argvars, rettv) -- typval_T *argvars; -+ typval_T *argvars UNUSED; - typval_T *rettv; - { - #ifdef FEAT_MBYTE -@@ -12327,7 +12392,6 @@ - int selected; - int mouse_used; - -- rettv->vval.v_number = 0; - #ifdef NO_CONSOLE_INPUT - /* While starting up, there is no place to enter text. */ - if (no_console_input()) -@@ -12365,10 +12429,9 @@ - /* - * "inputrestore()" function - */ --/*ARGSUSED*/ - static void - f_inputrestore(argvars, rettv) -- typval_T *argvars; -+ typval_T *argvars UNUSED; - typval_T *rettv; - { - if (ga_userinput.ga_len > 0) -@@ -12376,7 +12439,7 @@ - --ga_userinput.ga_len; - restore_typeahead((tasave_T *)(ga_userinput.ga_data) - + ga_userinput.ga_len); -- rettv->vval.v_number = 0; /* OK */ -+ /* default return is zero == OK */ - } - else if (p_verbose > 1) - { -@@ -12388,10 +12451,9 @@ - /* - * "inputsave()" function - */ --/*ARGSUSED*/ - static void - f_inputsave(argvars, rettv) -- typval_T *argvars; -+ typval_T *argvars UNUSED; - typval_T *rettv; - { - /* Add an entry to the stack of typeahead storage. */ -@@ -12400,7 +12462,7 @@ - save_typeahead((tasave_T *)(ga_userinput.ga_data) - + ga_userinput.ga_len); - ++ga_userinput.ga_len; -- rettv->vval.v_number = 0; /* OK */ -+ /* default return is zero == OK */ - } - else - rettv->vval.v_number = 1; /* Failed */ -@@ -12434,7 +12496,6 @@ - list_T *l; - int error = FALSE; - -- rettv->vval.v_number = 0; - if (argvars[0].v_type != VAR_LIST) - EMSG2(_(e_listarg), "insert()"); - else if ((l = argvars[0].vval.v_list) != NULL -@@ -12553,7 +12614,6 @@ - dict_T *d; - int todo; - -- rettv->vval.v_number = 0; - if (argvars[0].v_type != VAR_DICT) - { - EMSG(_(e_dictreq)); -@@ -12641,7 +12701,6 @@ - garray_T ga; - char_u *sep; - -- rettv->vval.v_number = 0; - if (argvars[0].v_type != VAR_LIST) - { - EMSG(_(e_listreq)); -@@ -12681,10 +12740,9 @@ - /* - * "last_buffer_nr()" function. - */ --/*ARGSUSED*/ - static void - f_last_buffer_nr(argvars, rettv) -- typval_T *argvars; -+ typval_T *argvars UNUSED; - typval_T *rettv; - { - int n = 0; -@@ -12739,9 +12797,7 @@ - #endif - - rettv->v_type = type; -- if (type == VAR_NUMBER) -- rettv->vval.v_number = 0; -- else -+ if (type != VAR_NUMBER) - rettv->vval.v_string = NULL; - - if (check_restricted() || check_secure()) -@@ -12813,10 +12869,9 @@ - /* - * "line2byte(lnum)" function - */ --/*ARGSUSED*/ - static void - f_line2byte(argvars, rettv) -- typval_T *argvars; -+ typval_T *argvars UNUSED; - typval_T *rettv; - { - #ifndef FEAT_BYTEOFF -@@ -12862,10 +12917,9 @@ - /* - * "localtime()" function - */ --/*ARGSUSED*/ - static void - f_localtime(argvars, rettv) -- typval_T *argvars; -+ typval_T *argvars UNUSED; - typval_T *rettv; - { - rettv->vval.v_number = (varnumber_T)time(NULL); -@@ -13447,7 +13501,6 @@ - /* - * "mode()" function - */ --/*ARGSUSED*/ - static void - f_mode(argvars, rettv) - typval_T *argvars; -@@ -13676,13 +13729,11 @@ - /* - * "pumvisible()" function - */ --/*ARGSUSED*/ - static void - f_pumvisible(argvars, rettv) -- typval_T *argvars; -- typval_T *rettv; -+ typval_T *argvars UNUSED; -+ typval_T *rettv UNUSED; - { -- rettv->vval.v_number = 0; - #ifdef FEAT_INS_EXPAND - if (pum_visible()) - rettv->vval.v_number = 1; -@@ -13716,7 +13767,6 @@ - stride = get_tv_number_chk(&argvars[2], &error); - } - -- rettv->vval.v_number = 0; - if (error) - return; /* type error; errmsg already given */ - if (stride == 0) -@@ -14083,10 +14133,9 @@ - /* - * "remote_expr()" function - */ --/*ARGSUSED*/ - static void - f_remote_expr(argvars, rettv) -- typval_T *argvars; -+ typval_T *argvars UNUSED; - typval_T *rettv; - { - rettv->v_type = VAR_STRING; -@@ -14099,13 +14148,11 @@ - /* - * "remote_foreground()" function - */ --/*ARGSUSED*/ - static void - f_remote_foreground(argvars, rettv) -- typval_T *argvars; -- typval_T *rettv; -+ typval_T *argvars UNUSED; -+ typval_T *rettv UNUSED; - { -- rettv->vval.v_number = 0; - #ifdef FEAT_CLIENTSERVER - # ifdef WIN32 - /* On Win32 it's done in this application. */ -@@ -14126,10 +14173,9 @@ - #endif - } - --/*ARGSUSED*/ - static void - f_remote_peek(argvars, rettv) -- typval_T *argvars; -+ typval_T *argvars UNUSED; - typval_T *rettv; - { - #ifdef FEAT_CLIENTSERVER -@@ -14161,7 +14207,6 @@ - rettv->vval.v_number = (s != NULL); - } - # else -- rettv->vval.v_number = 0; - if (check_connection() == FAIL) - return; - -@@ -14185,10 +14230,9 @@ - #endif - } - --/*ARGSUSED*/ - static void - f_remote_read(argvars, rettv) -- typval_T *argvars; -+ typval_T *argvars UNUSED; - typval_T *rettv; - { - char_u *r = NULL; -@@ -14220,10 +14264,9 @@ - /* - * "remote_send()" function - */ --/*ARGSUSED*/ - static void - f_remote_send(argvars, rettv) -- typval_T *argvars; -+ typval_T *argvars UNUSED; - typval_T *rettv; - { - rettv->v_type = VAR_STRING; -@@ -14250,7 +14293,6 @@ - dict_T *d; - dictitem_T *di; - -- rettv->vval.v_number = 0; - if (argvars[0].v_type == VAR_DICT) - { - if (argvars[2].v_type != VAR_UNKNOWN) -@@ -14353,7 +14395,6 @@ - /* - * "repeat()" function - */ --/*ARGSUSED*/ - static void - f_repeat(argvars, rettv) - typval_T *argvars; -@@ -14608,7 +14649,6 @@ - list_T *l; - listitem_T *li, *ni; - -- rettv->vval.v_number = 0; - if (argvars[0].v_type != VAR_LIST) - EMSG2(_(e_listarg), "reverse()"); - else if ((l = argvars[0].vval.v_list) != NULL -@@ -14960,8 +15000,6 @@ - int lnum = 0; - int col = 0; - -- rettv->vval.v_number = 0; -- - if (rettv_list_alloc(rettv) == FAIL) - return; - -@@ -15148,8 +15186,6 @@ - int n; - int flags = 0; - -- rettv->vval.v_number = 0; -- - if (rettv_list_alloc(rettv) == FAIL) - return; - -@@ -15167,10 +15203,9 @@ - } - - --/*ARGSUSED*/ - static void - f_server2client(argvars, rettv) -- typval_T *argvars; -+ typval_T *argvars UNUSED; - typval_T *rettv; - { - #ifdef FEAT_CLIENTSERVER -@@ -15199,10 +15234,9 @@ - #endif - } - --/*ARGSUSED*/ - static void - f_serverlist(argvars, rettv) -- typval_T *argvars; -+ typval_T *argvars UNUSED; - typval_T *rettv; - { - char_u *r = NULL; -@@ -15223,11 +15257,10 @@ - /* - * "setbufvar()" function - */ --/*ARGSUSED*/ - static void - f_setbufvar(argvars, rettv) - typval_T *argvars; -- typval_T *rettv; -+ typval_T *rettv UNUSED; - { - buf_T *buf; - aco_save_T aco; -@@ -15235,8 +15268,6 @@ - typval_T *varp; - char_u nbuf[NUMBUFLEN]; - -- rettv->vval.v_number = 0; -- - if (check_restricted() || check_secure()) - return; - (void)get_tv_number(&argvars[0]); /* issue errmsg if type error */ -@@ -15316,7 +15347,7 @@ - else - line = get_tv_string_chk(&argvars[1]); - -- rettv->vval.v_number = 0; /* OK */ -+ /* default result is zero == OK */ - for (;;) - { - if (l != NULL) -@@ -15364,12 +15395,11 @@ - /* - * Used by "setqflist()" and "setloclist()" functions - */ --/*ARGSUSED*/ - static void - set_qf_ll_list(wp, list_arg, action_arg, rettv) -- win_T *wp; -- typval_T *list_arg; -- typval_T *action_arg; -+ win_T *wp UNUSED; -+ typval_T *list_arg UNUSED; -+ typval_T *action_arg UNUSED; - typval_T *rettv; - { - #ifdef FEAT_QUICKFIX -@@ -15404,7 +15434,6 @@ - /* - * "setloclist()" function - */ --/*ARGSUSED*/ - static void - f_setloclist(argvars, rettv) - typval_T *argvars; -@@ -15482,7 +15511,6 @@ - /* - * "setpos()" function - */ --/*ARGSUSED*/ - static void - f_setpos(argvars, rettv) - typval_T *argvars; -@@ -15526,7 +15554,6 @@ - /* - * "setqflist()" function - */ --/*ARGSUSED*/ - static void - f_setqflist(argvars, rettv) - typval_T *argvars; -@@ -15632,7 +15659,7 @@ - static void - setwinvar(argvars, rettv, off) - typval_T *argvars; -- typval_T *rettv; -+ typval_T *rettv UNUSED; - int off; - { - win_T *win; -@@ -15645,8 +15672,6 @@ - char_u nbuf[NUMBUFLEN]; - tabpage_T *tp; - -- rettv->vval.v_number = 0; -- - if (check_restricted() || check_secure()) - return; - -@@ -15838,10 +15863,9 @@ - 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; -+ res = ITEM_COMPARE_FAIL; /* return value has wrong type */ - clear_tv(&rettv); - return res; - } -@@ -15860,7 +15884,6 @@ - long len; - long i; - -- rettv->vval.v_number = 0; - if (argvars[0].v_type != VAR_LIST) - EMSG2(_(e_listarg), "sort()"); - else -@@ -15952,10 +15975,9 @@ - /* - * "spellbadword()" function - */ --/* ARGSUSED */ - static void - f_spellbadword(argvars, rettv) -- typval_T *argvars; -+ typval_T *argvars UNUSED; - typval_T *rettv; - { - char_u *word = (char_u *)""; -@@ -16007,10 +16029,9 @@ - /* - * "spellsuggest()" function - */ --/*ARGSUSED*/ - static void - f_spellsuggest(argvars, rettv) -- typval_T *argvars; -+ typval_T *argvars UNUSED; - typval_T *rettv; - { - #ifdef FEAT_SPELL -@@ -16493,10 +16514,9 @@ - /* - * "synID(lnum, col, trans)" function - */ --/*ARGSUSED*/ - static void - f_synID(argvars, rettv) -- typval_T *argvars; -+ typval_T *argvars UNUSED; - typval_T *rettv; - { - int id = 0; -@@ -16521,10 +16541,9 @@ - /* - * "synIDattr(id, what [, mode])" function - */ --/*ARGSUSED*/ - static void - f_synIDattr(argvars, rettv) -- typval_T *argvars; -+ typval_T *argvars UNUSED; - typval_T *rettv; - { - char_u *p = NULL; -@@ -16590,8 +16609,11 @@ - p = highlight_has_attr(id, HL_INVERSE, modec); - break; - -- case 's': /* standout */ -- p = highlight_has_attr(id, HL_STANDOUT, modec); -+ case 's': -+ if (TOLOWER_ASC(what[1]) == 'p') /* sp[#] */ -+ p = highlight_color(id, what, modec); -+ else /* standout */ -+ p = highlight_has_attr(id, HL_STANDOUT, modec); - break; - - case 'u': -@@ -16614,10 +16636,9 @@ - /* - * "synIDtrans(id)" function - */ --/*ARGSUSED*/ - static void - f_synIDtrans(argvars, rettv) -- typval_T *argvars; -+ typval_T *argvars UNUSED; - typval_T *rettv; - { - int id; -@@ -16637,10 +16658,9 @@ - /* - * "synstack(lnum, col)" function - */ --/*ARGSUSED*/ - static void - f_synstack(argvars, rettv) -- typval_T *argvars; -+ typval_T *argvars UNUSED; - typval_T *rettv; - { - #ifdef FEAT_SYN_HL -@@ -16658,7 +16678,7 @@ - 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)) -+ && 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); -@@ -16774,15 +16794,12 @@ - /* - * "tabpagebuflist()" function - */ --/* ARGSUSED */ - static void - f_tabpagebuflist(argvars, rettv) -- typval_T *argvars; -- typval_T *rettv; -+ typval_T *argvars UNUSED; -+ typval_T *rettv UNUSED; - { --#ifndef FEAT_WINDOWS -- rettv->vval.v_number = 0; --#else -+#ifdef FEAT_WINDOWS - tabpage_T *tp; - win_T *wp = NULL; - -@@ -16794,19 +16811,12 @@ - if (tp != NULL) - wp = (tp == curtab) ? firstwin : tp->tp_firstwin; - } -- if (wp == NULL) -- rettv->vval.v_number = 0; -- else -+ if (wp != NULL && rettv_list_alloc(rettv) != FAIL) - { -- if (rettv_list_alloc(rettv) == FAIL) -- rettv->vval.v_number = 0; -- else -- { -- for (; wp != NULL; wp = wp->w_next) -- if (list_append_number(rettv->vval.v_list, -+ for (; wp != NULL; wp = wp->w_next) -+ if (list_append_number(rettv->vval.v_list, - wp->w_buffer->b_fnum) == FAIL) -- break; -- } -+ break; - } - #endif - } -@@ -16815,10 +16825,9 @@ - /* - * "tabpagenr()" function - */ --/* ARGSUSED */ - static void - f_tabpagenr(argvars, rettv) -- typval_T *argvars; -+ typval_T *argvars UNUSED; - typval_T *rettv; - { - int nr = 1; -@@ -16900,10 +16909,9 @@ - /* - * "tabpagewinnr()" function - */ --/* ARGSUSED */ - static void - f_tabpagewinnr(argvars, rettv) -- typval_T *argvars; -+ typval_T *argvars UNUSED; - typval_T *rettv; - { - int nr = 1; -@@ -16923,10 +16931,9 @@ - /* - * "tagfiles()" function - */ --/*ARGSUSED*/ - static void - f_tagfiles(argvars, rettv) -- typval_T *argvars; -+ typval_T *argvars UNUSED; - typval_T *rettv; - { - char_u fname[MAXPATHL + 1]; -@@ -16934,10 +16941,7 @@ - int first; - - if (rettv_list_alloc(rettv) == FAIL) -- { -- rettv->vval.v_number = 0; - return; -- } - - for (first = TRUE; ; first = FALSE) - if (get_tagfname(&tn, first, fname) == FAIL -@@ -16969,10 +16973,9 @@ - /* - * "tempname()" function - */ --/*ARGSUSED*/ - static void - f_tempname(argvars, rettv) -- typval_T *argvars; -+ typval_T *argvars UNUSED; - typval_T *rettv; - { - static int x = 'A'; -@@ -17005,11 +17008,10 @@ - /* - * "test(list)" function: Just checking the walls... - */ --/*ARGSUSED*/ - static void - f_test(argvars, rettv) -- typval_T *argvars; -- typval_T *rettv; -+ typval_T *argvars UNUSED; -+ typval_T *rettv UNUSED; - { - /* Used for unit testing. Change the code below to your liking. */ - #if 0 -@@ -17294,11 +17296,10 @@ - /* - * "visualmode()" function - */ --/*ARGSUSED*/ - static void - f_visualmode(argvars, rettv) -- typval_T *argvars; -- typval_T *rettv; -+ typval_T *argvars UNUSED; -+ typval_T *rettv UNUSED; - { - #ifdef FEAT_VISUAL - char_u str[2]; -@@ -17311,8 +17312,6 @@ - /* A non-zero number or non-empty string argument: reset mode. */ - if (non_zero_arg(&argvars[0])) - curbuf->b_visual_mode_eval = NUL; --#else -- rettv->vval.v_number = 0; /* return anything, it won't work anyway */ - #endif - } - -@@ -17336,10 +17335,9 @@ - /* - * "wincol()" function - */ --/*ARGSUSED*/ - static void - f_wincol(argvars, rettv) -- typval_T *argvars; -+ typval_T *argvars UNUSED; - typval_T *rettv; - { - validate_cursor(); -@@ -17366,10 +17364,9 @@ - /* - * "winline()" function - */ --/*ARGSUSED*/ - static void - f_winline(argvars, rettv) -- typval_T *argvars; -+ typval_T *argvars UNUSED; - typval_T *rettv; - { - validate_cursor(); -@@ -17379,10 +17376,9 @@ - /* - * "winnr()" function - */ --/* ARGSUSED */ - static void - f_winnr(argvars, rettv) -- typval_T *argvars; -+ typval_T *argvars UNUSED; - typval_T *rettv; - { - int nr = 1; -@@ -17396,10 +17392,9 @@ - /* - * "winrestcmd()" function - */ --/* ARGSUSED */ - static void - f_winrestcmd(argvars, rettv) -- typval_T *argvars; -+ typval_T *argvars UNUSED; - typval_T *rettv; - { - #ifdef FEAT_WINDOWS -@@ -17431,11 +17426,10 @@ - /* - * "winrestview()" function - */ --/* ARGSUSED */ - static void - f_winrestview(argvars, rettv) - typval_T *argvars; -- typval_T *rettv; -+ typval_T *rettv UNUSED; - { - dict_T *dict; - -@@ -17477,10 +17471,9 @@ - /* - * "winsaveview()" function - */ --/* ARGSUSED */ - static void - f_winsaveview(argvars, rettv) -- typval_T *argvars; -+ typval_T *argvars UNUSED; - typval_T *rettv; - { - dict_T *dict; -@@ -18097,14 +18090,28 @@ - } - - /* -- * Set v:count, v:count1 and v:prevcount. -+ * Get List v: variable value. Caller must take care of reference count when -+ * needed. -+ */ -+ list_T * -+get_vim_var_list(idx) -+ int idx; -+{ -+ return vimvars[idx].vv_list; -+} -+ -+/* -+ * Set v:count to "count" and v:count1 to "count1". -+ * When "set_prevcount" is TRUE first set v:prevcount from v:count. - */ - void --set_vcount(count, count1) -+set_vcount(count, count1, set_prevcount) - long count; - long count1; -+ int set_prevcount; - { -- vimvars[VV_PREVCOUNT].vv_nr = vimvars[VV_COUNT].vv_nr; -+ if (set_prevcount) -+ vimvars[VV_PREVCOUNT].vv_nr = vimvars[VV_COUNT].vv_nr; - vimvars[VV_COUNT].vv_nr = count; - vimvars[VV_COUNT1].vv_nr = count1; - } -@@ -18132,6 +18139,20 @@ - } - - /* -+ * Set List v: variable to "val". -+ */ -+ void -+set_vim_var_list(idx, val) -+ int idx; -+ list_T *val; -+{ -+ list_unref(vimvars[idx].vv_list); -+ vimvars[idx].vv_list = val; -+ if (val != NULL) -+ ++val->lv_refcount; -+} -+ -+/* - * Set v:register if needed. - */ - void -@@ -18868,7 +18889,8 @@ - dictitem_T *dict_var; - { - hash_init(&dict->dv_hashtab); -- dict->dv_refcount = 99999; -+ dict->dv_refcount = DO_NOT_FREE_CNT; -+ dict->dv_copyID = 0; - dict_var->di_tv.vval.v_dict = dict; - dict_var->di_tv.v_type = VAR_DICT; - dict_var->di_tv.v_lock = VAR_FIXED; -@@ -18951,7 +18973,8 @@ - char_u *s; - char_u numbuf[NUMBUFLEN]; - -- s = echo_string(&v->di_tv, &tofree, numbuf, ++current_copyID); -+ current_copyID += COPYID_INC; -+ s = echo_string(&v->di_tv, &tofree, numbuf, current_copyID); - list_one_var_a(prefix, v->di_key, v->di_tv.v_type, - s == NULL ? (char_u *)"" : s, first); - vim_free(tofree); -@@ -19205,6 +19228,8 @@ - * Copy the values from typval_T "from" to typval_T "to". - * When needed allocates string or increases reference count. - * Does not make a copy of a list or dict but copies the reference! -+ * It is OK for "from" and "to" to point to the same item. This is used to -+ * make a copy later. - */ - static void - copy_tv(from, to) -@@ -19384,7 +19409,8 @@ - } - else if (eap->cmdidx == CMD_echo) - msg_puts_attr((char_u *)" ", echo_attr); -- p = echo_string(&rettv, &tofree, numbuf, ++current_copyID); -+ current_copyID += COPYID_INC; -+ p = echo_string(&rettv, &tofree, numbuf, current_copyID); - if (p != NULL) - for ( ; *p != NUL && !got_int; ++p) - { -@@ -19660,6 +19686,7 @@ - list_func_head(fp, FALSE); - } - } -+ vim_free(regmatch.regprog); - } - } - if (*p == '/') -@@ -19748,7 +19775,7 @@ - } - } - else -- emsg_funcname("E123: Undefined function: %s", name); -+ emsg_funcname(N_("E123: Undefined function: %s"), name); - } - goto ret_free; - } -@@ -19792,7 +19819,7 @@ - : eval_isnamec(arg[j]))) - ++j; - if (arg[j] != NUL) -- emsg_funcname(_(e_invarg2), arg); -+ emsg_funcname((char *)e_invarg2, arg); - } - } - -@@ -20064,7 +20091,7 @@ - v = find_var(name, &ht); - if (v != NULL && v->di_tv.v_type == VAR_FUNC) - { -- emsg_funcname("E707: Function name conflicts with variable: %s", -+ emsg_funcname(N_("E707: Function name conflicts with variable: %s"), - name); - goto erret; - } -@@ -20079,7 +20106,7 @@ - } - if (fp->uf_calls > 0) - { -- emsg_funcname("E127: Cannot redefine function %s: It is in use", -+ emsg_funcname(N_("E127: Cannot redefine function %s: It is in use"), - name); - goto erret; - } -@@ -20590,6 +20617,9 @@ - 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,6 +20668,8 @@ - prof_self_cmp); - prof_sort_list(fd, sorttab, st_len, "SELF", TRUE); - } -+ -+ vim_free(sorttab); - } - - static void -@@ -21012,7 +21044,7 @@ - char_u *save_sourcing_name; - linenr_T save_sourcing_lnum; - scid_T save_current_SID; -- funccall_T fc; -+ funccall_T *fc; - int save_did_emsg; - static int depth = 0; - dictitem_T *v; -@@ -21038,36 +21070,37 @@ - - line_breakcheck(); /* check for CTRL-C hit */ - -- fc.caller = current_funccal; -- current_funccal = &fc; -- fc.func = fp; -- fc.rettv = rettv; -+ fc = (funccall_T *)alloc(sizeof(funccall_T)); -+ fc->caller = current_funccal; -+ current_funccal = fc; -+ fc->func = fp; -+ fc->rettv = rettv; - rettv->vval.v_number = 0; -- fc.linenr = 0; -- fc.returned = FALSE; -- fc.level = ex_nesting_level; -+ fc->linenr = 0; -+ fc->returned = FALSE; -+ fc->level = ex_nesting_level; - /* Check if this function has a breakpoint. */ -- fc.breakpoint = dbg_find_breakpoint(FALSE, fp->uf_name, (linenr_T)0); -- fc.dbg_tick = debug_tick; -+ fc->breakpoint = dbg_find_breakpoint(FALSE, fp->uf_name, (linenr_T)0); -+ fc->dbg_tick = debug_tick; - - /* -- * Note about using fc.fixvar[]: This is an array of FIXVAR_CNT variables -+ * Note about using fc->fixvar[]: This is an array of FIXVAR_CNT variables - * with names up to VAR_SHORT_LEN long. This avoids having to alloc/free - * each argument variable and saves a lot of time. - */ - /* - * Init l: variables. - */ -- init_var_dict(&fc.l_vars, &fc.l_vars_var); -+ init_var_dict(&fc->l_vars, &fc->l_vars_var); - if (selfdict != NULL) - { - /* Set l:self to "selfdict". Use "name" to avoid a warning from - * some compiler that checks the destination size. */ -- v = &fc.fixvar[fixvar_idx++].var; -+ v = &fc->fixvar[fixvar_idx++].var; - name = v->di_key; - STRCPY(name, "self"); - v->di_flags = DI_FLAGS_RO + DI_FLAGS_FIX; -- hash_add(&fc.l_vars.dv_hashtab, DI2HIKEY(v)); -+ hash_add(&fc->l_vars.dv_hashtab, DI2HIKEY(v)); - v->di_tv.v_type = VAR_DICT; - v->di_tv.v_lock = 0; - v->di_tv.vval.v_dict = selfdict; -@@ -21079,28 +21112,31 @@ - * Set a:0 to "argcount". - * Set a:000 to a list with room for the "..." arguments. - */ -- init_var_dict(&fc.l_avars, &fc.l_avars_var); -- add_nr_var(&fc.l_avars, &fc.fixvar[fixvar_idx++].var, "0", -+ init_var_dict(&fc->l_avars, &fc->l_avars_var); -+ add_nr_var(&fc->l_avars, &fc->fixvar[fixvar_idx++].var, "0", - (varnumber_T)(argcount - fp->uf_args.ga_len)); -- v = &fc.fixvar[fixvar_idx++].var; -- STRCPY(v->di_key, "000"); -+ /* Use "name" to avoid a warning from some compiler that checks the -+ * destination size. */ -+ v = &fc->fixvar[fixvar_idx++].var; -+ name = v->di_key; -+ STRCPY(name, "000"); - v->di_flags = DI_FLAGS_RO | DI_FLAGS_FIX; -- hash_add(&fc.l_avars.dv_hashtab, DI2HIKEY(v)); -+ hash_add(&fc->l_avars.dv_hashtab, DI2HIKEY(v)); - v->di_tv.v_type = VAR_LIST; - v->di_tv.v_lock = VAR_FIXED; -- v->di_tv.vval.v_list = &fc.l_varlist; -- vim_memset(&fc.l_varlist, 0, sizeof(list_T)); -- fc.l_varlist.lv_refcount = 99999; -- fc.l_varlist.lv_lock = VAR_FIXED; -+ v->di_tv.vval.v_list = &fc->l_varlist; -+ vim_memset(&fc->l_varlist, 0, sizeof(list_T)); -+ fc->l_varlist.lv_refcount = DO_NOT_FREE_CNT; -+ fc->l_varlist.lv_lock = VAR_FIXED; - - /* - * Set a:firstline to "firstline" and a:lastline to "lastline". - * Set a:name to named arguments. - * Set a:N to the "..." arguments. - */ -- add_nr_var(&fc.l_avars, &fc.fixvar[fixvar_idx++].var, "firstline", -+ add_nr_var(&fc->l_avars, &fc->fixvar[fixvar_idx++].var, "firstline", - (varnumber_T)firstline); -- add_nr_var(&fc.l_avars, &fc.fixvar[fixvar_idx++].var, "lastline", -+ add_nr_var(&fc->l_avars, &fc->fixvar[fixvar_idx++].var, "lastline", - (varnumber_T)lastline); - for (i = 0; i < argcount; ++i) - { -@@ -21116,7 +21152,7 @@ - } - if (fixvar_idx < FIXVAR_CNT && STRLEN(name) <= VAR_SHORT_LEN) - { -- v = &fc.fixvar[fixvar_idx++].var; -+ v = &fc->fixvar[fixvar_idx++].var; - v->di_flags = DI_FLAGS_RO | DI_FLAGS_FIX; - } - else -@@ -21128,7 +21164,7 @@ - v->di_flags = DI_FLAGS_RO; - } - STRCPY(v->di_key, name); -- hash_add(&fc.l_avars.dv_hashtab, DI2HIKEY(v)); -+ hash_add(&fc->l_avars.dv_hashtab, DI2HIKEY(v)); - - /* Note: the values are copied directly to avoid alloc/free. - * "argvars" must have VAR_FIXED for v_lock. */ -@@ -21137,9 +21173,9 @@ - - if (ai >= 0 && ai < MAX_FUNC_ARGS) - { -- list_append(&fc.l_varlist, &fc.l_listitems[ai]); -- fc.l_listitems[ai].li_tv = argvars[i]; -- fc.l_listitems[ai].li_tv.v_lock = VAR_FIXED; -+ list_append(&fc->l_varlist, &fc->l_listitems[ai]); -+ fc->l_listitems[ai].li_tv = argvars[i]; -+ fc->l_listitems[ai].li_tv.v_lock = VAR_FIXED; - } - } - -@@ -21204,7 +21240,7 @@ - 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)) -+ || (fc->caller != NULL && fc->caller->func->uf_profiling)) - { - ++fp->uf_tm_count; - profile_start(&call_start); -@@ -21220,7 +21256,7 @@ - did_emsg = FALSE; - - /* call do_cmdline() to execute the lines */ -- do_cmdline(NULL, get_func_line, (void *)&fc, -+ do_cmdline(NULL, get_func_line, (void *)fc, - DOCMD_NOWAIT|DOCMD_VERBOSE|DOCMD_REPEAT); - - --RedrawingDisabled; -@@ -21235,16 +21271,16 @@ - - #ifdef FEAT_PROFILE - if (do_profiling == PROF_YES && (fp->uf_profiling -- || (fc.caller != NULL && &fc.caller->func->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) -+ 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); -+ profile_add(&fc->caller->func->uf_tm_children, &call_start); -+ profile_add(&fc->caller->func->uf_tml_children, &call_start); - } - } - #endif -@@ -21257,9 +21293,9 @@ - - if (aborting()) - smsg((char_u *)_("%s aborted"), sourcing_name); -- else if (fc.rettv->v_type == VAR_NUMBER) -+ else if (fc->rettv->v_type == VAR_NUMBER) - smsg((char_u *)_("%s returning #%ld"), sourcing_name, -- (long)fc.rettv->vval.v_number); -+ (long)fc->rettv->vval.v_number); - else - { - char_u buf[MSG_BUF_LEN]; -@@ -21270,7 +21306,7 @@ - /* The value may be very long. Skip the middle part, so that we - * have some idea how it starts and ends. smsg() would always - * truncate it at the end. */ -- s = tv2string(fc.rettv, &tofree, numbuf2, 0); -+ s = tv2string(fc->rettv, &tofree, numbuf2, 0); - if (s != NULL) - { - trunc_string(s, buf, MSG_BUF_CLEN); -@@ -21306,14 +21342,84 @@ - } - - did_emsg |= save_did_emsg; -- current_funccal = fc.caller; -+ current_funccal = fc->caller; -+ --depth; - -- /* The a: variables typevals were not allocated, only free the allocated -- * variables. */ -- vars_clear_ext(&fc.l_avars.dv_hashtab, FALSE); -+ /* If the a:000 list and the l: and a: dicts are not referenced we can -+ * free the funccall_T and what's in it. */ -+ if (fc->l_varlist.lv_refcount == DO_NOT_FREE_CNT -+ && fc->l_vars.dv_refcount == DO_NOT_FREE_CNT -+ && fc->l_avars.dv_refcount == DO_NOT_FREE_CNT) -+ { -+ free_funccal(fc, FALSE); -+ } -+ else -+ { -+ hashitem_T *hi; -+ listitem_T *li; -+ int todo; - -- vars_clear(&fc.l_vars.dv_hashtab); /* free all l: variables */ -- --depth; -+ /* "fc" is still in use. This can happen when returning "a:000" or -+ * assigning "l:" to a global variable. -+ * Link "fc" in the list for garbage collection later. */ -+ fc->caller = previous_funccal; -+ previous_funccal = fc; -+ -+ /* Make a copy of the a: variables, since we didn't do that above. */ -+ todo = (int)fc->l_avars.dv_hashtab.ht_used; -+ for (hi = fc->l_avars.dv_hashtab.ht_array; todo > 0; ++hi) -+ { -+ if (!HASHITEM_EMPTY(hi)) -+ { -+ --todo; -+ v = HI2DI(hi); -+ copy_tv(&v->di_tv, &v->di_tv); -+ } -+ } -+ -+ /* Make a copy of the a:000 items, since we didn't do that above. */ -+ for (li = fc->l_varlist.lv_first; li != NULL; li = li->li_next) -+ copy_tv(&li->li_tv, &li->li_tv); -+ } -+} -+ -+/* -+ * Return TRUE if items in "fc" do not have "copyID". That means they are not -+ * referenced from anywhere that is in use. -+ */ -+ static int -+can_free_funccal(fc, copyID) -+ funccall_T *fc; -+ int copyID; -+{ -+ return (fc->l_varlist.lv_copyID != copyID -+ && fc->l_vars.dv_copyID != copyID -+ && fc->l_avars.dv_copyID != copyID); -+} -+ -+/* -+ * Free "fc" and what it contains. -+ */ -+ static void -+free_funccal(fc, free_val) -+ funccall_T *fc; -+ int free_val; /* a: vars were allocated */ -+{ -+ listitem_T *li; -+ -+ /* The a: variables typevals may not have been allocated, only free the -+ * allocated variables. */ -+ vars_clear_ext(&fc->l_avars.dv_hashtab, free_val); -+ -+ /* free all l: variables */ -+ vars_clear(&fc->l_vars.dv_hashtab); -+ -+ /* Free the a:000 variables if they were allocated. */ -+ if (free_val) -+ for (li = fc->l_varlist.lv_first; li != NULL; li = li->li_next) -+ clear_tv(&li->li_tv); -+ -+ vim_free(fc); - } - - /* -@@ -21512,12 +21618,11 @@ - * Called by do_cmdline() to get the next line. - * Returns allocated string, or NULL for end of function. - */ --/* ARGSUSED */ - char_u * - get_func_line(c, cookie, indent) -- int c; /* not used */ -+ int c UNUSED; - void *cookie; -- int indent; /* not used */ -+ int indent UNUSED; - { - funccall_T *fcp = (funccall_T *)cookie; - ufunc_T *fp = fcp->func; -@@ -21886,6 +21991,61 @@ - } - } - -+/* -+ * List v:oldfiles in a nice way. -+ */ -+ void -+ex_oldfiles(eap) -+ exarg_T *eap UNUSED; -+{ -+ list_T *l = vimvars[VV_OLDFILES].vv_list; -+ listitem_T *li; -+ int nr = 0; -+ -+ if (l == NULL) -+ msg((char_u *)_("No old files")); -+ else -+ { -+ msg_start(); -+ msg_scroll = TRUE; -+ for (li = l->lv_first; li != NULL && !got_int; li = li->li_next) -+ { -+ msg_outnum((long)++nr); -+ MSG_PUTS(": "); -+ msg_outtrans(get_tv_string(&li->li_tv)); -+ msg_putchar('\n'); -+ out_flush(); /* output one line at a time */ -+ ui_breakcheck(); -+ } -+ /* Assume "got_int" was set to truncate the listing. */ -+ got_int = FALSE; -+ -+#ifdef FEAT_BROWSE_CMD -+ if (cmdmod.browse) -+ { -+ quit_more = FALSE; -+ nr = prompt_for_number(FALSE); -+ msg_starthere(); -+ if (nr > 0) -+ { -+ char_u *p = list_find_str(get_vim_var_list(VV_OLDFILES), -+ (long)nr); -+ -+ if (p != NULL) -+ { -+ p = expand_env_save(p); -+ eap->arg = p; -+ eap->cmdidx = CMD_edit; -+ cmdmod.browse = FALSE; -+ do_exedit(eap, NULL); -+ vim_free(p); -+ } -+ } -+ } -+#endif -+ } -+} -+ - #endif /* FEAT_EVAL */ - - -diff -Naur vim72.orig/src/ex_cmds2.c vim72/src/ex_cmds2.c ---- vim72.orig/src/ex_cmds2.c 2008-07-13 17:18:22.000000000 +0100 -+++ vim72/src/ex_cmds2.c 2009-07-22 22:54:22.000000000 +0100 -@@ -28,7 +28,8 @@ - { - char_u *sn_name; - # ifdef UNIX -- int sn_dev; -+ int sn_dev_valid; -+ dev_t sn_dev; - ino_t sn_ino; - # endif - # ifdef FEAT_PROFILE -@@ -680,10 +681,9 @@ - /* - * ":breaklist". - */ --/*ARGSUSED*/ - void - ex_breaklist(eap) -- exarg_T *eap; -+ exarg_T *eap UNUSED; - { - struct debuggy *bp; - int i; -@@ -1342,14 +1342,13 @@ - /* - * return TRUE if buffer was changed and cannot be abandoned. - */ --/*ARGSUSED*/ - int - check_changed(buf, checkaw, mult_win, forceit, allbuf) - buf_T *buf; - int checkaw; /* do autowrite if buffer was changed */ - int mult_win; /* check also when several wins for the buf */ - int forceit; -- int allbuf; /* may write all buffers */ -+ int allbuf UNUSED; /* may write all buffers */ - { - if ( !forceit - && bufIsChanged(buf) -@@ -1759,12 +1758,11 @@ - * - * Return FAIL for failure, OK otherwise. - */ --/*ARGSUSED*/ - static int - do_arglist(str, what, after) - char_u *str; -- int what; -- int after; /* 0 means before first one */ -+ int what UNUSED; -+ int after UNUSED; /* 0 means before first one */ - { - garray_T new_ga; - int exp_count; -@@ -2132,8 +2130,8 @@ - * argument index. */ - if (do_ecmd(0, alist_name(&ARGLIST[curwin->w_arg_idx]), NULL, - eap, ECMD_LAST, -- (P_HID(curwin->w_buffer) ? ECMD_HIDE : 0) + -- (eap->forceit ? ECMD_FORCEIT : 0)) == FAIL) -+ (P_HID(curwin->w_buffer) ? ECMD_HIDE : 0) -+ + (eap->forceit ? ECMD_FORCEIT : 0), curwin) == FAIL) - curwin->w_arg_idx = old_arg_idx; - /* like Vi: set the mark where the cursor is in the file. */ - else if (eap->cmdidx != CMD_argdo) -@@ -2549,11 +2547,10 @@ - - static void source_callback __ARGS((char_u *fname, void *cookie)); - --/*ARGSUSED*/ - static void - source_callback(fname, cookie) - char_u *fname; -- void *cookie; -+ void *cookie UNUSED; - { - (void)do_source(fname, FALSE, DOSO_NONE); - } -@@ -2680,10 +2677,9 @@ - /* - * ":options" - */ --/*ARGSUSED*/ - void - ex_options(eap) -- exarg_T *eap; -+ exarg_T *eap UNUSED; - { - cmd_source((char_u *)SYS_OPTWIN_FILE, NULL); - } -@@ -2842,6 +2838,7 @@ - linenr_T save_sourcing_lnum; - char_u *p; - char_u *fname_exp; -+ char_u *firstline = NULL; - int retval = FAIL; - #ifdef FEAT_EVAL - scid_T save_current_SID; -@@ -2992,23 +2989,6 @@ - - cookie.level = ex_nesting_level; - #endif --#ifdef FEAT_MBYTE -- cookie.conv.vc_type = CONV_NONE; /* no conversion */ -- -- /* Try reading the first few bytes to check for a UTF-8 BOM. */ -- { -- char_u buf[3]; -- -- if (fread((char *)buf, sizeof(char_u), (size_t)3, cookie.fp) -- == (size_t)3 -- && buf[0] == 0xef && buf[1] == 0xbb && buf[2] == 0xbf) -- /* Found BOM, setup conversion and skip over it. */ -- convert_setup(&cookie.conv, (char_u *)"utf-8", p_enc); -- else -- /* No BOM found, rewind. */ -- fseek(cookie.fp, 0L, SEEK_SET); -- } --#endif - - /* - * Keep the sourcing name/lnum, for recursive calls. -@@ -3018,6 +2998,27 @@ - save_sourcing_lnum = sourcing_lnum; - sourcing_lnum = 0; - -+#ifdef FEAT_MBYTE -+ cookie.conv.vc_type = CONV_NONE; /* no conversion */ -+ -+ /* Read the first line so we can check for a UTF-8 BOM. */ -+ firstline = getsourceline(0, (void *)&cookie, 0); -+ if (firstline != NULL && STRLEN(firstline) >= 3 && firstline[0] == 0xef -+ && firstline[1] == 0xbb && firstline[2] == 0xbf) -+ { -+ /* Found BOM; setup conversion, skip over BOM and recode the line. */ -+ convert_setup(&cookie.conv, (char_u *)"utf-8", p_enc); -+ p = string_convert(&cookie.conv, firstline + 3, NULL); -+ if (p == NULL) -+ p = vim_strsave(firstline + 3); -+ if (p != NULL) -+ { -+ vim_free(firstline); -+ firstline = p; -+ } -+ } -+#endif -+ - #ifdef STARTUPTIME - time_push(&tv_rel, &tv_start); - #endif -@@ -3049,7 +3050,7 @@ - /* Compare dev/ino when possible, it catches symbolic - * links. Also compare file names, the inode may change - * when the file was edited. */ -- ((stat_ok && si->sn_dev != -1) -+ ((stat_ok && si->sn_dev_valid) - && (si->sn_dev == st.st_dev - && si->sn_ino == st.st_ino)) || - # endif -@@ -3076,11 +3077,12 @@ - # ifdef UNIX - if (stat_ok) - { -+ si->sn_dev_valid = TRUE; - si->sn_dev = st.st_dev; - si->sn_ino = st.st_ino; - } - else -- si->sn_dev = -1; -+ si->sn_dev_valid = FALSE; - # endif - - /* Allocate the local script variables to use for this script. */ -@@ -3111,9 +3113,8 @@ - /* - * Call do_cmdline, which will call getsourceline() to get the lines. - */ -- do_cmdline(NULL, getsourceline, (void *)&cookie, -+ do_cmdline(firstline, getsourceline, (void *)&cookie, - DOCMD_VERBOSE|DOCMD_NOWAIT|DOCMD_REPEAT); -- - retval = OK; - - #ifdef FEAT_PROFILE -@@ -3145,8 +3146,8 @@ - verbose_leave(); - } - #ifdef STARTUPTIME -- vim_snprintf(IObuff, IOSIZE, "sourcing %s", fname); -- time_msg(IObuff, &tv_start); -+ vim_snprintf((char *)IObuff, IOSIZE, "sourcing %s", fname); -+ time_msg((char *)IObuff, &tv_start); - time_pop(&tv_rel); - #endif - -@@ -3171,6 +3172,7 @@ - #endif - fclose(cookie.fp); - vim_free(cookie.nextline); -+ vim_free(firstline); - #ifdef FEAT_MBYTE - convert_setup(&cookie.conv, NULL, NULL); - #endif -@@ -3185,10 +3187,9 @@ - /* - * ":scriptnames" - */ --/*ARGSUSED*/ - void - ex_scriptnames(eap) -- exarg_T *eap; -+ exarg_T *eap UNUSED; - { - int i; - -@@ -3312,12 +3313,11 @@ - * Return a pointer to the line in allocated memory. - * Return NULL for end-of-file or some error. - */ --/* ARGSUSED */ - char_u * - getsourceline(c, cookie, indent) -- int c; /* not used */ -+ int c UNUSED; - void *cookie; -- int indent; /* not used */ -+ int indent UNUSED; - { - struct source_cookie *sp = (struct source_cookie *)cookie; - char_u *line; -@@ -3368,7 +3368,7 @@ - p = skipwhite(sp->nextline); - if (*p != '\\') - break; -- s = alloc((int)(STRLEN(line) + STRLEN(p))); -+ s = alloc((unsigned)(STRLEN(line) + STRLEN(p))); - if (s == NULL) /* out of memory */ - break; - STRCPY(s, line); -@@ -3644,10 +3644,9 @@ - * ":scriptencoding": Set encoding conversion for a sourced script. - * Without the multi-byte feature it's simply ignored. - */ --/*ARGSUSED*/ - void - ex_scriptencoding(eap) -- exarg_T *eap; -+ exarg_T *eap UNUSED; - { - #ifdef FEAT_MBYTE - struct source_cookie *sp; -@@ -4096,10 +4095,9 @@ - * Function given to ExpandGeneric() to obtain the possible arguments of the - * ":language" command. - */ --/*ARGSUSED*/ - char_u * - get_lang_arg(xp, idx) -- expand_T *xp; -+ expand_T *xp UNUSED; - int idx; - { - if (idx == 0) -diff -Naur vim72.orig/src/ex_cmds.c vim72/src/ex_cmds.c ---- vim72.orig/src/ex_cmds.c 2008-08-04 20:15:00.000000000 +0100 -+++ vim72/src/ex_cmds.c 2009-07-22 22:54:23.000000000 +0100 -@@ -24,7 +24,7 @@ - static void do_filter __ARGS((linenr_T line1, linenr_T line2, exarg_T *eap, char_u *cmd, int do_in, int do_out)); - #ifdef FEAT_VIMINFO - static char_u *viminfo_filename __ARGS((char_u *)); --static void do_viminfo __ARGS((FILE *fp_in, FILE *fp_out, int want_info, int want_marks, int force_read)); -+static void do_viminfo __ARGS((FILE *fp_in, FILE *fp_out, int flags)); - static int viminfo_encoding __ARGS((vir_T *virp)); - static int read_viminfo_up_to_marks __ARGS((vir_T *virp, int forceit, int writing)); - #endif -@@ -43,12 +43,12 @@ - /* - * ":ascii" and "ga". - */ --/*ARGSUSED*/ - void - do_ascii(eap) -- exarg_T *eap; -+ exarg_T *eap UNUSED; - { - int c; -+ int cval; - char buf1[20]; - char buf2[20]; - char_u buf3[7]; -@@ -75,6 +75,10 @@ - { - if (c == NL) /* NUL is stored as NL */ - c = NUL; -+ if (c == CAR && get_fileformat(curbuf) == EOL_MAC) -+ cval = NL; /* NL is stored as CR */ -+ else -+ cval = c; - if (vim_isprintc_strict(c) && (c < ' ' - #ifndef EBCDIC - || c > '~' -@@ -82,19 +86,20 @@ - )) - { - transchar_nonprint(buf3, c); -- sprintf(buf1, " <%s>", (char *)buf3); -+ vim_snprintf(buf1, sizeof(buf1), " <%s>", (char *)buf3); - } - else - buf1[0] = NUL; - #ifndef EBCDIC - if (c >= 0x80) -- sprintf(buf2, " ", transchar(c & 0x7f)); -+ vim_snprintf(buf2, sizeof(buf2), " ", -+ (char *)transchar(c & 0x7f)); - else - #endif - buf2[0] = NUL; - vim_snprintf((char *)IObuff, IOSIZE, - _("<%s>%s%s %d, Hex %02x, Octal %03o"), -- transchar(c), buf1, buf2, c, c, c); -+ transchar(c), buf1, buf2, cval, cval, cval); - #ifdef FEAT_MBYTE - if (enc_utf8) - c = cc[ci++]; -@@ -353,7 +358,7 @@ - linenr_T lnum; - long maxlen = 0; - sorti_T *nrs; -- size_t count = eap->line2 - eap->line1 + 1; -+ size_t count = (size_t)(eap->line2 - eap->line1 + 1); - size_t i; - char_u *p; - char_u *s; -@@ -952,7 +957,7 @@ - } - len += (int)STRLEN(prevcmd); - } -- if ((t = alloc(len)) == NULL) -+ if ((t = alloc((unsigned)len)) == NULL) - { - vim_free(newcmd); - return; -@@ -1543,7 +1548,7 @@ - * redirecting input and/or output. - */ - if (itmp != NULL || otmp != NULL) -- sprintf((char *)buf, "(%s)", (char *)cmd); -+ vim_snprintf((char *)buf, len, "(%s)", (char *)cmd); - else - STRCPY(buf, cmd); - if (itmp != NULL) -@@ -1592,37 +1597,41 @@ - } - #endif - if (otmp != NULL) -- append_redir(buf, p_srr, otmp); -+ append_redir(buf, (int)len, p_srr, otmp); - - return buf; - } - - /* -- * Append output redirection for file "fname" to the end of string buffer "buf" -+ * Append output redirection for file "fname" to the end of string buffer -+ * "buf[buflen]" - * Works with the 'shellredir' and 'shellpipe' options. - * The caller should make sure that there is enough room: - * STRLEN(opt) + STRLEN(fname) + 3 - */ - void --append_redir(buf, opt, fname) -+append_redir(buf, buflen, opt, fname) - char_u *buf; -+ int buflen; - char_u *opt; - char_u *fname; - { - char_u *p; -+ char_u *end; - -- buf += STRLEN(buf); -+ end = buf + STRLEN(buf); - /* find "%s", skipping "%%" */ - for (p = opt; (p = vim_strchr(p, '%')) != NULL; ++p) - if (p[1] == 's') - break; - if (p != NULL) - { -- *buf = ' '; /* not really needed? Not with sh, ksh or bash */ -- sprintf((char *)buf + 1, (char *)opt, (char *)fname); -+ *end = ' '; /* not really needed? Not with sh, ksh or bash */ -+ vim_snprintf((char *)end + 1, (size_t)(buflen - (end + 1 - buf)), -+ (char *)opt, (char *)fname); - } - else -- sprintf((char *)buf, -+ vim_snprintf((char *)end, (size_t)(buflen - (end - buf)), - #ifdef FEAT_QUICKFIX - # ifndef RISCOS - opt != p_sp ? " %s%s" : -@@ -1676,14 +1685,12 @@ - - /* - * read_viminfo() -- Read the viminfo file. Registers etc. which are already -- * set are not over-written unless force is TRUE. -- webb -+ * set are not over-written unless "flags" includes VIF_FORCEIT. -- webb - */ - int --read_viminfo(file, want_info, want_marks, forceit) -- char_u *file; -- int want_info; -- int want_marks; -- int forceit; -+read_viminfo(file, flags) -+ char_u *file; /* file name or NULL to use default name */ -+ int flags; /* VIF_WANT_INFO et al. */ - { - FILE *fp; - char_u *fname; -@@ -1691,7 +1698,7 @@ - if (no_viminfo()) - return FAIL; - -- fname = viminfo_filename(file); /* may set to default if NULL */ -+ fname = viminfo_filename(file); /* get file name in allocated buffer */ - if (fname == NULL) - return FAIL; - fp = mch_fopen((char *)fname, READBIN); -@@ -1701,8 +1708,9 @@ - verbose_enter(); - smsg((char_u *)_("Reading viminfo file \"%s\"%s%s%s"), - fname, -- want_info ? _(" info") : "", -- want_marks ? _(" marks") : "", -+ (flags & VIF_WANT_INFO) ? _(" info") : "", -+ (flags & VIF_WANT_MARKS) ? _(" marks") : "", -+ (flags & VIF_GET_OLDFILES) ? _(" oldfiles") : "", - fp == NULL ? _(" FAILED") : ""); - verbose_leave(); - } -@@ -1712,10 +1720,9 @@ - return FAIL; - - viminfo_errcnt = 0; -- do_viminfo(fp, NULL, want_info, want_marks, forceit); -+ do_viminfo(fp, NULL, flags); - - fclose(fp); -- - return OK; - } - -@@ -1786,7 +1793,7 @@ - * overwrite a user's viminfo file after a "su root", with a - * viminfo file that the user can't read. - */ -- st_old.st_dev = 0; -+ st_old.st_dev = (dev_t)0; - st_old.st_ino = 0; - st_old.st_mode = 0600; - if (mch_stat((char *)fname, &st_old) == 0 -@@ -1943,7 +1950,7 @@ - * root. - */ - if (fp_out != NULL) -- (void)fchown(fileno(fp_out), st_old.st_uid, st_old.st_gid); -+ ignored = fchown(fileno(fp_out), st_old.st_uid, st_old.st_gid); - #endif - } - } -@@ -1968,7 +1975,7 @@ - } - - viminfo_errcnt = 0; -- do_viminfo(fp_in, fp_out, !forceit, !forceit, FALSE); -+ do_viminfo(fp_in, fp_out, forceit ? 0 : (VIF_WANT_INFO | VIF_WANT_MARKS)); - - fclose(fp_out); /* errors are ignored !? */ - if (fp_in != NULL) -@@ -2041,12 +2048,10 @@ - * do_viminfo() -- Should only be called from read_viminfo() & write_viminfo(). - */ - static void --do_viminfo(fp_in, fp_out, want_info, want_marks, force_read) -+do_viminfo(fp_in, fp_out, flags) - FILE *fp_in; - FILE *fp_out; -- int want_info; -- int want_marks; -- int force_read; -+ int flags; - { - int count = 0; - int eof = FALSE; -@@ -2061,8 +2066,9 @@ - - if (fp_in != NULL) - { -- if (want_info) -- eof = read_viminfo_up_to_marks(&vir, force_read, fp_out != NULL); -+ if (flags & VIF_WANT_INFO) -+ eof = read_viminfo_up_to_marks(&vir, -+ flags & VIF_FORCEIT, fp_out != NULL); - else - /* Skip info, find start of marks */ - while (!(eof = viminfo_readline(&vir)) -@@ -2092,8 +2098,9 @@ - write_viminfo_bufferlist(fp_out); - count = write_viminfo_marks(fp_out); - } -- if (fp_in != NULL && want_marks) -- copy_viminfo_marks(&vir, fp_out, count, eof); -+ if (fp_in != NULL -+ && (flags & (VIF_WANT_MARKS | VIF_GET_OLDFILES | VIF_FORCEIT))) -+ copy_viminfo_marks(&vir, fp_out, count, eof, flags); - - vim_free(vir.vir_line); - #ifdef FEAT_MBYTE -@@ -2248,12 +2255,11 @@ - * - * Return the string in allocated memory (NULL when out of memory). - */ --/*ARGSUSED*/ - char_u * - viminfo_readstring(virp, off, convert) - vir_T *virp; - int off; /* offset for virp->vir_line */ -- int convert; /* convert the string */ -+ int convert UNUSED; /* convert the string */ - { - char_u *retval; - char_u *s, *d; -@@ -2365,10 +2371,9 @@ - * ^? ^H - * not ^? ^? - */ --/*ARGSUSED*/ - void - do_fixdel(eap) -- exarg_T *eap; -+ exarg_T *eap UNUSED; - { - char_u *p; - -@@ -2387,7 +2392,8 @@ - - if (curwin->w_p_nu || use_number) - { -- sprintf((char *)numbuf, "%*ld ", number_width(curwin), (long)lnum); -+ vim_snprintf((char *)numbuf, sizeof(numbuf), -+ "%*ld ", number_width(curwin), (long)lnum); - msg_puts_attr(numbuf, hl_attr(HLF_N)); /* Highlight line nrs */ - } - msg_prt_line(ml_get(lnum), list); -@@ -2414,8 +2420,8 @@ - cursor_on(); /* msg_start() switches it off */ - out_flush(); - silent_mode = save_silent; -- info_message = FALSE; - } -+ info_message = FALSE; - } - - /* -@@ -2704,7 +2710,12 @@ - if (eap->cmdidx == CMD_saveas) - { - if (retval == OK) -+ { - curbuf->b_p_ro = FALSE; -+#ifdef FEAT_WINDOWS -+ redraw_tabline = TRUE; -+#endif -+ } - /* Change directories when the 'acd' option is set. */ - DO_AUTOCHDIR - } -@@ -2724,7 +2735,6 @@ - * May set eap->forceit if a dialog says it's OK to overwrite. - * Return OK if it's OK, FAIL if it is not. - */ --/*ARGSUSED*/ - static int - check_overwrite(eap, buf, fname, ffname, other) - exarg_T *eap; -@@ -3054,7 +3064,8 @@ - retval = 0; /* it's in the same file */ - } - else if (do_ecmd(fnum, ffname, sfname, NULL, lnum, -- (P_HID(curbuf) ? ECMD_HIDE : 0) + (forceit ? ECMD_FORCEIT : 0)) == OK) -+ (P_HID(curbuf) ? ECMD_HIDE : 0) + (forceit ? ECMD_FORCEIT : 0), -+ curwin) == OK) - retval = -1; /* opened another file */ - else - retval = 1; /* error encountered */ -@@ -3087,17 +3098,21 @@ - * ECMD_OLDBUF: use existing buffer if it exists - * ECMD_FORCEIT: ! used for Ex command - * ECMD_ADDBUF: don't edit, just add to buffer list -+ * oldwin: Should be "curwin" when editing a new buffer in the current -+ * window, NULL when splitting the window first. When not NULL info -+ * of the previous buffer for "oldwin" is stored. - * - * return FAIL for failure, OK otherwise - */ - int --do_ecmd(fnum, ffname, sfname, eap, newlnum, flags) -+do_ecmd(fnum, ffname, sfname, eap, newlnum, flags, oldwin) - int fnum; - char_u *ffname; - char_u *sfname; - exarg_T *eap; /* can be NULL! */ - linenr_T newlnum; - int flags; -+ win_T *oldwin; - { - int other_file; /* TRUE if editing another file */ - int oldbuf; /* TRUE if using existing buffer */ -@@ -3269,7 +3284,8 @@ - { - if (!cmdmod.keepalt) - curwin->w_alt_fnum = curbuf->b_fnum; -- buflist_altfpos(); -+ if (oldwin != NULL) -+ buflist_altfpos(oldwin); - } - - if (fnum) -@@ -3373,7 +3389,7 @@ - - /* close the link to the current buffer */ - u_sync(FALSE); -- close_buffer(curwin, curbuf, -+ close_buffer(oldwin, curbuf, - (flags & ECMD_HIDE) ? 0 : DOBUF_UNLOAD); - - #ifdef FEAT_AUTOCMD -@@ -3701,7 +3717,7 @@ - /* If the window options were changed may need to set the spell language. - * Can only do this after the buffer has been properly setup. */ - if (did_get_winopts && curwin->w_p_spell && *curbuf->b_p_spl != NUL) -- did_set_spelllang(curbuf); -+ (void)did_set_spelllang(curbuf); - #endif - - if (command == NULL) -@@ -3774,7 +3790,7 @@ - - #ifdef FEAT_KEYMAP - if (curbuf->b_kmap_state & KEYMAP_INIT) -- keymap_init(); -+ (void)keymap_init(); - #endif - - --RedrawingDisabled; -@@ -3997,6 +4013,9 @@ - break; - ml_delete(eap->line1, FALSE); - } -+ -+ /* make sure the cursor is not beyond the end of the file now */ -+ check_cursor_lnum(); - deleted_lines_mark(eap->line1, (long)(eap->line2 - lnum)); - - /* ":append" on the line above the deleted lines. */ -@@ -4022,8 +4041,10 @@ - bigness = curwin->w_height; - else if (firstwin == lastwin) - bigness = curwin->w_p_scr * 2; -+#ifdef FEAT_WINDOWS - else - bigness = curwin->w_height - 3; -+#endif - if (bigness < 1) - bigness = 1; - -@@ -4472,7 +4493,7 @@ - char_u *p1; - int did_sub = FALSE; - int lastone; -- unsigned len, needed_len; -+ int len, copy_len, needed_len; - long nmatch_tl = 0; /* nr of lines matched below lnum */ - int do_again; /* do it again after joining lines */ - int skip_match = FALSE; -@@ -4617,6 +4638,8 @@ - - if (do_ask) - { -+ int typed = 0; -+ - /* change State to CONFIRM, so that the mouse works - * properly */ - save_State = State; -@@ -4655,7 +4678,7 @@ - resp = getexmodeline('?', NULL, 0); - if (resp != NULL) - { -- i = *resp; -+ typed = *resp; - vim_free(resp); - } - } -@@ -4707,7 +4730,7 @@ - #endif - ++no_mapping; /* don't map this key */ - ++allow_keys; /* allow special keys */ -- i = plain_vgetc(); -+ typed = plain_vgetc(); - --allow_keys; - --no_mapping; - -@@ -4718,35 +4741,35 @@ - } - - need_wait_return = FALSE; /* no hit-return prompt */ -- if (i == 'q' || i == ESC || i == Ctrl_C -+ if (typed == 'q' || typed == ESC || typed == Ctrl_C - #ifdef UNIX -- || i == intr_char -+ || typed == intr_char - #endif - ) - { - got_quit = TRUE; - break; - } -- if (i == 'n') -+ if (typed == 'n') - break; -- if (i == 'y') -+ if (typed == 'y') - break; -- if (i == 'l') -+ if (typed == 'l') - { - /* last: replace and then stop */ - do_all = FALSE; - line2 = lnum; - break; - } -- if (i == 'a') -+ if (typed == 'a') - { - do_ask = FALSE; - break; - } - #ifdef FEAT_INS_EXPAND -- if (i == Ctrl_E) -+ if (typed == Ctrl_E) - scrollup_clamp(); -- else if (i == Ctrl_Y) -+ else if (typed == Ctrl_Y) - scrolldown_clamp(); - #endif - } -@@ -4757,7 +4780,7 @@ - if (vim_strchr(p_cpo, CPO_UNDO) != NULL) - --no_u_sync; - -- if (i == 'n') -+ if (typed == 'n') - { - /* For a multi-line match, put matchcol at the NUL at - * the end of the line and set nmatch to one, so that -@@ -4808,9 +4831,9 @@ - p1 = ml_get(sub_firstlnum + nmatch - 1); - nmatch_tl += nmatch - 1; - } -- i = regmatch.startpos[0].col - copycol; -- needed_len = i + ((unsigned)STRLEN(p1) - regmatch.endpos[0].col) -- + sublen + 1; -+ copy_len = regmatch.startpos[0].col - copycol; -+ needed_len = copy_len + ((unsigned)STRLEN(p1) -+ - regmatch.endpos[0].col) + sublen + 1; - if (new_start == NULL) - { - /* -@@ -4833,7 +4856,7 @@ - */ - len = (unsigned)STRLEN(new_start); - needed_len += len; -- if (needed_len > new_start_len) -+ if (needed_len > (int)new_start_len) - { - new_start_len = needed_len + 50; - if ((p1 = alloc_check(new_start_len)) == NULL) -@@ -4851,8 +4874,8 @@ - /* - * copy the text up to the part that matched - */ -- mch_memmove(new_end, sub_firstline + copycol, (size_t)i); -- new_end += i; -+ mch_memmove(new_end, sub_firstline + copycol, (size_t)copy_len); -+ new_end += copy_len; - - (void)vim_regsub_multi(®match, - sub_firstlnum - regmatch.startpos[0].lnum, -@@ -5059,6 +5082,7 @@ - - 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; - } -@@ -5610,7 +5634,13 @@ - */ - alt_fnum = curbuf->b_fnum; - (void)do_ecmd(0, NULL, NULL, NULL, ECMD_LASTL, -- ECMD_HIDE + ECMD_SET_HELP); -+ ECMD_HIDE + ECMD_SET_HELP, -+#ifdef FEAT_WINDOWS -+ NULL /* buffer is still open, don't store info */ -+#else -+ curwin -+#endif -+ ); - if (!cmdmod.keepalt) - curwin->w_alt_fnum = alt_fnum; - empty_fnum = curbuf->b_fnum; -@@ -5769,7 +5799,7 @@ - * Recognize a few exceptions to the rule. Some strings that contain '*' - * with "star". Otherwise '*' is recognized as a wildcard. - */ -- for (i = sizeof(mtable) / sizeof(char *); --i >= 0; ) -+ for (i = (int)(sizeof(mtable) / sizeof(char *)); --i >= 0; ) - if (STRCMP(arg, mtable[i]) == 0) - { - STRCPY(d, rtable[i]); -@@ -6093,10 +6123,9 @@ - /* - * ":exusage" - */ --/*ARGSUSED*/ - void - ex_exusage(eap) -- exarg_T *eap; -+ exarg_T *eap UNUSED; - { - do_cmdline_cmd((char_u *)"help ex-cmd-index"); - } -@@ -6104,10 +6133,9 @@ - /* - * ":viusage" - */ --/*ARGSUSED*/ - void - ex_viusage(eap) -- exarg_T *eap; -+ exarg_T *eap UNUSED; - { - do_cmdline_cmd((char_u *)"help normal-index"); - } -@@ -6519,22 +6547,11 @@ - static sign_T *first_sign = NULL; - static int last_sign_typenr = MAX_TYPENR; /* is decremented */ - -+static int sign_cmd_idx __ARGS((char_u *begin_cmd, char_u *end_cmd)); - static void sign_list_defined __ARGS((sign_T *sp)); -+static void sign_undefine __ARGS((sign_T *sp, sign_T *sp_prev)); - --/* -- * ":sign" command -- */ -- void --ex_sign(eap) -- exarg_T *eap; --{ -- char_u *arg = eap->arg; -- char_u *p; -- int idx; -- sign_T *sp; -- sign_T *sp_prev; -- buf_T *buf; -- static char *cmds[] = { -+static char *cmds[] = { - "define", - #define SIGNCMD_DEFINE 0 - "undefine", -@@ -6547,22 +6564,51 @@ - #define SIGNCMD_UNPLACE 4 - "jump", - #define SIGNCMD_JUMP 5 -+ NULL - #define SIGNCMD_LAST 6 -- }; -+}; -+ -+/* -+ * Find index of a ":sign" subcmd from its name. -+ * "*end_cmd" must be writable. -+ */ -+ static int -+sign_cmd_idx(begin_cmd, end_cmd) -+ char_u *begin_cmd; /* begin of sign subcmd */ -+ char_u *end_cmd; /* just after sign subcmd */ -+{ -+ int idx; -+ char save = *end_cmd; -+ -+ *end_cmd = NUL; -+ for (idx = 0; ; ++idx) -+ if (cmds[idx] == NULL || STRCMP(begin_cmd, cmds[idx]) == 0) -+ break; -+ *end_cmd = save; -+ return idx; -+} -+ -+/* -+ * ":sign" command -+ */ -+ void -+ex_sign(eap) -+ exarg_T *eap; -+{ -+ char_u *arg = eap->arg; -+ char_u *p; -+ int idx; -+ sign_T *sp; -+ sign_T *sp_prev; -+ buf_T *buf; - - /* Parse the subcommand. */ - p = skiptowhite(arg); -- if (*p != NUL) -- *p++ = NUL; -- for (idx = 0; ; ++idx) -+ idx = sign_cmd_idx(arg, p); -+ if (idx == SIGNCMD_LAST) - { -- if (idx == SIGNCMD_LAST) -- { -- EMSG2(_("E160: Unknown sign command: %s"), arg); -- return; -- } -- if (STRCMP(arg, cmds[idx]) == 0) -- break; -+ EMSG2(_("E160: Unknown sign command: %s"), arg); -+ return; - } - arg = skipwhite(p); - -@@ -6728,24 +6774,8 @@ - /* ":sign list {name}" */ - sign_list_defined(sp); - else -- { - /* ":sign undefine {name}" */ -- vim_free(sp->sn_name); -- vim_free(sp->sn_icon); --#ifdef FEAT_SIGN_ICONS -- if (sp->sn_image != NULL) -- { -- out_flush(); -- gui_mch_destroy_sign(sp->sn_image); -- } --#endif -- vim_free(sp->sn_text); -- if (sp_prev == NULL) -- first_sign = sp->sn_next; -- else -- sp_prev->sn_next = sp->sn_next; -- vim_free(sp); -- } -+ sign_undefine(sp, sp_prev); - } - } - else -@@ -6994,6 +7024,31 @@ - } - - /* -+ * Undefine a sign and free its memory. -+ */ -+ static void -+sign_undefine(sp, sp_prev) -+ sign_T *sp; -+ sign_T *sp_prev; -+{ -+ vim_free(sp->sn_name); -+ vim_free(sp->sn_icon); -+#ifdef FEAT_SIGN_ICONS -+ if (sp->sn_image != NULL) -+ { -+ out_flush(); -+ gui_mch_destroy_sign(sp->sn_image); -+ } -+#endif -+ vim_free(sp->sn_text); -+ if (sp_prev == NULL) -+ first_sign = sp->sn_next; -+ else -+ sp_prev->sn_next = sp->sn_next; -+ vim_free(sp); -+} -+ -+/* - * Get highlighting attribute for sign "typenr". - * If "line" is TRUE: line highl, if FALSE: text highl. - */ -@@ -7067,6 +7122,197 @@ - return (char_u *)_("[Deleted]"); - } - -+#if defined(EXITFREE) || defined(PROTO) -+/* -+ * Undefine/free all signs. -+ */ -+ void -+free_signs() -+{ -+ while (first_sign != NULL) -+ sign_undefine(first_sign, NULL); -+} -+#endif -+ -+#if defined(FEAT_CMDL_COMPL) || defined(PROTO) -+static enum -+{ -+ EXP_SUBCMD, /* expand :sign sub-commands */ -+ EXP_DEFINE, /* expand :sign define {name} args */ -+ EXP_PLACE, /* expand :sign place {id} args */ -+ EXP_UNPLACE, /* expand :sign unplace" */ -+ EXP_SIGN_NAMES /* expand with name of placed signs */ -+} expand_what; -+ -+/* -+ * Function given to ExpandGeneric() to obtain the sign command -+ * expansion. -+ */ -+ char_u * -+get_sign_name(xp, idx) -+ expand_T *xp UNUSED; -+ int idx; -+{ -+ sign_T *sp; -+ int current_idx; -+ -+ switch (expand_what) -+ { -+ case EXP_SUBCMD: -+ return (char_u *)cmds[idx]; -+ case EXP_DEFINE: -+ { -+ char *define_arg[] = -+ { -+ "icon=", "linehl=", "text=", "texthl=", NULL -+ }; -+ return (char_u *)define_arg[idx]; -+ } -+ case EXP_PLACE: -+ { -+ char *place_arg[] = -+ { -+ "line=", "name=", "file=", "buffer=", NULL -+ }; -+ return (char_u *)place_arg[idx]; -+ } -+ case EXP_UNPLACE: -+ { -+ char *unplace_arg[] = { "file=", "buffer=", NULL }; -+ return (char_u *)unplace_arg[idx]; -+ } -+ case EXP_SIGN_NAMES: -+ /* Complete with name of signs already defined */ -+ current_idx = 0; -+ for (sp = first_sign; sp != NULL; sp = sp->sn_next) -+ if (current_idx++ == idx) -+ return sp->sn_name; -+ return NULL; -+ default: -+ return NULL; -+ } -+} -+ -+/* -+ * Handle command line completion for :sign command. -+ */ -+ void -+set_context_in_sign_cmd(xp, arg) -+ expand_T *xp; -+ char_u *arg; -+{ -+ char_u *p; -+ char_u *end_subcmd; -+ char_u *last; -+ int cmd_idx; -+ char_u *begin_subcmd_args; -+ -+ /* Default: expand subcommands. */ -+ xp->xp_context = EXPAND_SIGN; -+ expand_what = EXP_SUBCMD; -+ xp->xp_pattern = arg; -+ -+ end_subcmd = skiptowhite(arg); -+ if (*end_subcmd == NUL) -+ /* expand subcmd name -+ * :sign {subcmd}*/ -+ return; -+ -+ cmd_idx = sign_cmd_idx(arg, end_subcmd); -+ -+ /* :sign {subcmd} {subcmd_args} -+ * | -+ * begin_subcmd_args */ -+ begin_subcmd_args = skipwhite(end_subcmd); -+ p = skiptowhite(begin_subcmd_args); -+ if (*p == NUL) -+ { -+ /* -+ * Expand first argument of subcmd when possible. -+ * For ":jump {id}" and ":unplace {id}", we could -+ * possibly expand the ids of all signs already placed. -+ */ -+ xp->xp_pattern = begin_subcmd_args; -+ switch (cmd_idx) -+ { -+ case SIGNCMD_LIST: -+ case SIGNCMD_UNDEFINE: -+ /* :sign list -+ * :sign undefine */ -+ expand_what = EXP_SIGN_NAMES; -+ break; -+ default: -+ xp->xp_context = EXPAND_NOTHING; -+ } -+ return; -+ } -+ -+ /* expand last argument of subcmd */ -+ -+ /* :sign define {name} {args}... -+ * | -+ * p */ -+ -+ /* Loop until reaching last argument. */ -+ do -+ { -+ p = skipwhite(p); -+ last = p; -+ p = skiptowhite(p); -+ } while (*p != NUL); -+ -+ p = vim_strchr(last, '='); -+ -+ /* :sign define {name} {args}... {last}= -+ * | | -+ * last p */ -+ if (p == NUL) -+ { -+ /* Expand last argument name (before equal sign). */ -+ xp->xp_pattern = last; -+ switch (cmd_idx) -+ { -+ case SIGNCMD_DEFINE: -+ expand_what = EXP_DEFINE; -+ break; -+ case SIGNCMD_PLACE: -+ expand_what = EXP_PLACE; -+ break; -+ case SIGNCMD_JUMP: -+ case SIGNCMD_UNPLACE: -+ expand_what = EXP_UNPLACE; -+ break; -+ default: -+ xp->xp_context = EXPAND_NOTHING; -+ } -+ } -+ else -+ { -+ /* Expand last argument value (after equal sign). */ -+ xp->xp_pattern = p + 1; -+ switch (cmd_idx) -+ { -+ case SIGNCMD_DEFINE: -+ if (STRNCMP(last, "texthl", p - last) == 0 || -+ STRNCMP(last, "linehl", p - last) == 0) -+ xp->xp_context = EXPAND_HIGHLIGHT; -+ else if (STRNCMP(last, "icon", p - last) == 0) -+ xp->xp_context = EXPAND_FILES; -+ else -+ xp->xp_context = EXPAND_NOTHING; -+ break; -+ case SIGNCMD_PLACE: -+ if (STRNCMP(last, "name", p - last) == 0) -+ expand_what = EXP_SIGN_NAMES; -+ else -+ xp->xp_context = EXPAND_NOTHING; -+ break; -+ default: -+ xp->xp_context = EXPAND_NOTHING; -+ } -+ } -+} -+#endif - #endif - - #if defined(FEAT_GUI) || defined(FEAT_CLIENTSERVER) || defined(PROTO) -diff -Naur vim72.orig/src/ex_cmds.h vim72/src/ex_cmds.h ---- vim72.orig/src/ex_cmds.h 2008-06-21 19:47:57.000000000 +0100 -+++ vim72/src/ex_cmds.h 2009-07-22 22:54:23.000000000 +0100 -@@ -278,7 +278,7 @@ - EX(CMD_crewind, "crewind", ex_cc, - RANGE|NOTADR|COUNT|TRLBAR|BANG), - EX(CMD_cscope, "cscope", do_cscope, -- EXTRA|NOTRLCOM|SBOXOK|XFILE), -+ EXTRA|NOTRLCOM|XFILE), - EX(CMD_cstag, "cstag", do_cstag, - BANG|TRLBAR|WORD1), - EX(CMD_cunmap, "cunmap", ex_unmap, -@@ -506,7 +506,7 @@ - EX(CMD_lclose, "lclose", ex_cclose, - RANGE|NOTADR|COUNT|TRLBAR), - EX(CMD_lcscope, "lcscope", do_cscope, -- EXTRA|NOTRLCOM|SBOXOK|XFILE), -+ EXTRA|NOTRLCOM|XFILE), - EX(CMD_left, "left", ex_align, - TRLBAR|RANGE|WHOLEFOLD|EXTRA|CMDWIN|MODIFY), - EX(CMD_leftabove, "leftabove", ex_wrongmodifier, -@@ -635,6 +635,8 @@ - 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, -@@ -651,6 +653,8 @@ - EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN), - EX(CMD_open, "open", ex_open, - RANGE|EXTRA), -+EX(CMD_oldfiles, "oldfiles", ex_oldfiles, -+ BANG|TRLBAR|SBOXOK|CMDWIN), - EX(CMD_omap, "omap", ex_map, - EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN), - EX(CMD_omapclear, "omapclear", ex_mapclear, -@@ -802,7 +806,7 @@ - EX(CMD_scriptencoding, "scriptencoding", ex_scriptencoding, - WORD1|TRLBAR|CMDWIN), - EX(CMD_scscope, "scscope", do_scscope, -- EXTRA|NOTRLCOM|SBOXOK), -+ EXTRA|NOTRLCOM), - EX(CMD_set, "set", ex_set, - TRLBAR|EXTRA|CMDWIN|SBOXOK), - EX(CMD_setfiletype, "setfiletype", ex_setfiletype, -@@ -987,6 +991,8 @@ - BANG|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN), - EX(CMD_unmenu, "unmenu", ex_menu, - BANG|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN), -+EX(CMD_unsilent, "unsilent", ex_wrongmodifier, -+ NEEDARG|EXTRA|NOTRLCOM|SBOXOK|CMDWIN), - EX(CMD_update, "update", ex_update, - RANGE|WHOLEFOLD|BANG|FILE1|ARGOPT|DFLALL|TRLBAR), - EX(CMD_vglobal, "vglobal", ex_global, -diff -Naur vim72.orig/src/ex_docmd.c vim72/src/ex_docmd.c ---- vim72.orig/src/ex_docmd.c 2008-07-26 12:51:05.000000000 +0100 -+++ vim72/src/ex_docmd.c 2009-07-22 22:54:23.000000000 +0100 -@@ -364,6 +364,7 @@ - # define ex_function ex_ni - # define ex_delfunction ex_ni - # define ex_return ex_ni -+# define ex_oldfiles ex_ni - #endif - static char_u *arg_all __ARGS((void)); - #ifdef FEAT_SESSION -@@ -1577,11 +1578,10 @@ - * If "fgetline" is get_loop_line(), return TRUE if the getline it uses equals - * "func". * Otherwise return TRUE when "fgetline" equals "func". - */ --/*ARGSUSED*/ - int - getline_equal(fgetline, cookie, func) - char_u *(*fgetline) __ARGS((int, void *, int)); -- void *cookie; /* argument for fgetline() */ -+ void *cookie UNUSED; /* argument for fgetline() */ - char_u *(*func) __ARGS((int, void *, int)); - { - #ifdef FEAT_EVAL -@@ -1609,10 +1609,9 @@ - * If "fgetline" is get_loop_line(), return the cookie used by the original - * getline function. Otherwise return "cookie". - */ --/*ARGSUSED*/ - void * - getline_cookie(fgetline, cookie) -- char_u *(*fgetline) __ARGS((int, void *, int)); -+ char_u *(*fgetline) __ARGS((int, void *, int)) UNUSED; - void *cookie; /* argument for fgetline() */ - { - # ifdef FEAT_EVAL -@@ -1678,8 +1677,8 @@ - char_u *errormsg = NULL; /* error message */ - exarg_T ea; /* Ex command arguments */ - long verbose_save = -1; -- int save_msg_scroll = 0; -- int did_silent = 0; -+ int save_msg_scroll = msg_scroll; -+ int save_msg_silent = -1; - int did_esilent = 0; - #ifdef HAVE_SANDBOX - int did_sandbox = FALSE; -@@ -1770,7 +1769,7 @@ - } - if (checkforcmd(&ea.cmd, "browse", 3)) - { --#ifdef FEAT_BROWSE -+#ifdef FEAT_BROWSE_CMD - cmdmod.browse = TRUE; - #endif - continue; -@@ -1857,9 +1856,9 @@ - } - if (!checkforcmd(&ea.cmd, "silent", 3)) - break; -- ++did_silent; -+ if (save_msg_silent == -1) -+ save_msg_silent = msg_silent; - ++msg_silent; -- save_msg_scroll = msg_scroll; - if (*ea.cmd == '!' && !vim_iswhite(ea.cmd[-1])) - { - /* ":silent!", but not "silent !cmd" */ -@@ -1887,6 +1886,13 @@ - #endif - 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)) - { - #ifdef FEAT_VERTSPLIT -@@ -2685,19 +2691,23 @@ - - cmdmod = save_cmdmod; - -- if (did_silent > 0) -+ if (save_msg_silent != -1) - { - /* messages could be enabled for a serious error, need to check if the - * counters don't become negative */ -- msg_silent -= did_silent; -- if (msg_silent < 0) -- msg_silent = 0; -+ if (!did_emsg) -+ 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 - * message is actually displayed. */ - msg_scroll = save_msg_scroll; -+ -+ /* "silent reg" or "silent echo x" inside "redir" leaves msg_col -+ * somewhere in the line. Put it back in the first column. */ -+ if (redirecting()) -+ msg_col = 0; - } - - #ifdef HAVE_SANDBOX -@@ -2731,7 +2741,7 @@ - int i; - - for (i = 0; cmd[i] != NUL; ++i) -- if (cmd[i] != (*pp)[i]) -+ if (((char_u *)cmd)[i] != (*pp)[i]) - break; - if (i >= len && !isalpha((*pp)[i])) - { -@@ -2748,11 +2758,10 @@ - * "full" is set to TRUE if the whole command name matched. - * Returns NULL for an ambiguous user command. - */ --/*ARGSUSED*/ - static char_u * - find_command(eap, full) - exarg_T *eap; -- int *full; -+ int *full UNUSED; - { - int len; - char_u *p; -@@ -2797,7 +2806,7 @@ - /* Check for ":dl", ":dell", etc. to ":deletel": that's - * :delete with the 'l' flag. Same for 'p'. */ - for (i = 0; i < len; ++i) -- if (eap->cmd[i] != "delete"[i]) -+ if (eap->cmd[i] != ((char_u *)"delete")[i]) - break; - if (i == len - 1) - { -@@ -2978,11 +2987,13 @@ - {"keepmarks", 3, FALSE}, - {"leftabove", 5, FALSE}, - {"lockmarks", 3, FALSE}, -+ {"noautocmd", 3, FALSE}, - {"rightbelow", 6, FALSE}, - {"sandbox", 3, FALSE}, - {"silent", 3, FALSE}, - {"tab", 3, TRUE}, - {"topleft", 2, FALSE}, -+ {"unsilent", 3, FALSE}, - {"verbose", 4, TRUE}, - {"vertical", 4, FALSE}, - }; -@@ -3000,7 +3011,7 @@ - - if (VIM_ISDIGIT(*cmd)) - p = skipwhite(skipdigits(cmd)); -- for (i = 0; i < sizeof(cmdmods) / sizeof(struct cmdmod); ++i) -+ for (i = 0; i < (int)(sizeof(cmdmods) / sizeof(struct cmdmod)); ++i) - { - for (j = 0; p[j] != NUL; ++j) - if (p[j] != cmdmods[i].name[j]) -@@ -3028,7 +3039,7 @@ - char_u *p; - - /* Check command modifiers. */ -- for (i = 0; i < sizeof(cmdmods) / sizeof(struct cmdmod); ++i) -+ for (i = 0; i < (int)(sizeof(cmdmods) / sizeof(struct cmdmod)); ++i) - { - for (j = 0; name[j] != NUL; ++j) - if (name[j] != cmdmods[i].name[j]) -@@ -3608,6 +3619,7 @@ - return set_context_in_autocmd(xp, arg, FALSE); - - case CMD_doautocmd: -+ case CMD_doautoall: - return set_context_in_autocmd(xp, arg, TRUE); - #endif - case CMD_set: -@@ -3680,6 +3692,18 @@ - case CMD_highlight: - set_context_in_highlight_cmd(xp, arg); - break; -+#ifdef FEAT_CSCOPE -+ case CMD_cscope: -+ case CMD_lcscope: -+ case CMD_scscope: -+ set_context_in_cscope_cmd(xp, arg, ea.cmdidx); -+ break; -+#endif -+#ifdef FEAT_SIGNS -+ case CMD_sign: -+ set_context_in_sign_cmd(xp, arg); -+ break; -+#endif - #ifdef FEAT_LISTCMDS - case CMD_bdelete: - case CMD_bwipeout: -@@ -3803,7 +3827,7 @@ - char_u *cmd; - int *ctx; /* pointer to xp_context or NULL */ - { -- int delim; -+ unsigned delim; - - while (vim_strchr((char_u *)" \t0123456789.$%'/?-+,;", *cmd) != NULL) - { -@@ -5033,10 +5057,9 @@ - /* - * Function given to ExpandGeneric() to obtain the list of command names. - */ --/*ARGSUSED*/ - char_u * - get_command_name(xp, idx) -- expand_T *xp; -+ expand_T *xp UNUSED; - int idx; - { - if (idx >= (int)CMD_SIZE) -@@ -5121,7 +5144,11 @@ - } - - vim_free(cmd->uc_rep); -- cmd->uc_rep = 0; -+ cmd->uc_rep = NULL; -+#if defined(FEAT_EVAL) && defined(FEAT_CMDL_COMPL) -+ vim_free(cmd->uc_compl_arg); -+ cmd->uc_compl_arg = NULL; -+#endif - break; - } - -@@ -5180,6 +5207,9 @@ - {EXPAND_AUGROUP, "augroup"}, - {EXPAND_BUFFERS, "buffer"}, - {EXPAND_COMMANDS, "command"}, -+#if defined(FEAT_CSCOPE) -+ {EXPAND_CSCOPE, "cscope"}, -+#endif - #if defined(FEAT_EVAL) && defined(FEAT_CMDL_COMPL) - {EXPAND_USER_DEFINED, "custom"}, - {EXPAND_USER_LIST, "customlist"}, -@@ -5196,6 +5226,9 @@ - {EXPAND_MENUS, "menu"}, - {EXPAND_SETTINGS, "option"}, - {EXPAND_SHELLCMD, "shellcmd"}, -+#if defined(FEAT_SIGNS) -+ {EXPAND_SIGN, "sign"}, -+#endif - {EXPAND_TAGS, "tag"}, - {EXPAND_TAGS_LISTFILES, "tag_listfiles"}, - {EXPAND_USER_VARS, "var"}, -@@ -5479,6 +5512,9 @@ - return OK; - } - -+/* -+ * ":command ..." -+ */ - static void - ex_command(eap) - exarg_T *eap; -@@ -5540,10 +5576,9 @@ - * ":comclear" - * Clear all user commands, global and for current buffer. - */ --/*ARGSUSED*/ - void - ex_comclear(eap) -- exarg_T *eap; -+ exarg_T *eap UNUSED; - { - uc_clear(&ucmds); - uc_clear(&curbuf->b_ucmds); -@@ -5910,7 +5945,8 @@ - char_u *q; - - char_u *start; -- char_u *end; -+ char_u *end = NULL; -+ char_u *ksp; - size_t len, totlen; - - size_t split_len = 0; -@@ -5927,16 +5963,51 @@ - - /* - * Replace <> in the command by the arguments. -+ * First round: "buf" is NULL, compute length, allocate "buf". -+ * Second round: copy result into "buf". - */ - buf = NULL; - for (;;) - { -- p = cmd->uc_rep; -- q = buf; -+ p = cmd->uc_rep; /* source */ -+ q = buf; /* destination */ - totlen = 0; -- while ((start = vim_strchr(p, '<')) != NULL -- && (end = vim_strchr(start + 1, '>')) != NULL) -+ -+ for (;;) - { -+ start = vim_strchr(p, '<'); -+ if (start != NULL) -+ end = vim_strchr(start + 1, '>'); -+ if (buf != NULL) -+ { -+ ksp = vim_strchr(p, K_SPECIAL); -+ if (ksp != NULL && (start == NULL || ksp < start || end == NULL) -+ && ((ksp[1] == KS_SPECIAL && ksp[2] == KE_FILLER) -+# ifdef FEAT_GUI -+ || (ksp[1] == KS_EXTRA && ksp[2] == (int)KE_CSI) -+# endif -+ )) -+ { -+ /* K_SPECIAL han been put in the buffer as K_SPECIAL -+ * KS_SPECIAL KE_FILLER, like for mappings, but -+ * do_cmdline() doesn't handle that, so convert it back. -+ * Also change K_SPECIAL KS_EXTRA KE_CSI into CSI. */ -+ len = ksp - p; -+ if (len > 0) -+ { -+ mch_memmove(q, p, len); -+ q += len; -+ } -+ *q++ = ksp[1] == KS_SPECIAL ? K_SPECIAL : CSI; -+ p = ksp + 3; -+ continue; -+ } -+ } -+ -+ /* break if there no is found */ -+ if (start == NULL || end == NULL) -+ break; -+ - /* Include the '>' */ - ++end; - -@@ -6003,10 +6074,9 @@ - /* - * Function given to ExpandGeneric() to obtain the list of user command names. - */ --/*ARGSUSED*/ - char_u * - get_user_commands(xp, idx) -- expand_T *xp; -+ expand_T *xp UNUSED; - int idx; - { - if (idx < curbuf->b_ucmds.ga_len) -@@ -6021,17 +6091,16 @@ - * Function given to ExpandGeneric() to obtain the list of user command - * attributes. - */ --/*ARGSUSED*/ - char_u * - get_user_cmd_flags(xp, idx) -- expand_T *xp; -+ expand_T *xp UNUSED; - int idx; - { - static char *user_cmd_flags[] = - {"bang", "bar", "buffer", "complete", "count", - "nargs", "range", "register"}; - -- if (idx >= sizeof(user_cmd_flags) / sizeof(user_cmd_flags[0])) -+ if (idx >= (int)(sizeof(user_cmd_flags) / sizeof(user_cmd_flags[0]))) - return NULL; - return (char_u *)user_cmd_flags[idx]; - } -@@ -6039,15 +6108,14 @@ - /* - * Function given to ExpandGeneric() to obtain the list of values for -nargs. - */ --/*ARGSUSED*/ - char_u * - get_user_cmd_nargs(xp, idx) -- expand_T *xp; -+ expand_T *xp UNUSED; - int idx; - { - static char *user_cmd_nargs[] = {"0", "1", "*", "?", "+"}; - -- if (idx >= sizeof(user_cmd_nargs) / sizeof(user_cmd_nargs[0])) -+ if (idx >= (int)(sizeof(user_cmd_nargs) / sizeof(user_cmd_nargs[0]))) - return NULL; - return (char_u *)user_cmd_nargs[idx]; - } -@@ -6055,10 +6123,9 @@ - /* - * Function given to ExpandGeneric() to obtain the list of values for -complete. - */ --/*ARGSUSED*/ - char_u * - get_user_cmd_complete(xp, idx) -- expand_T *xp; -+ expand_T *xp UNUSED; - int idx; - { - return (char_u *)command_complete[idx].name; -@@ -6236,10 +6303,9 @@ - /* - * ":cquit". - */ --/*ARGSUSED*/ - static void - ex_cquit(eap) -- exarg_T *eap; -+ exarg_T *eap UNUSED; - { - getout(1); /* this does not always pass on the exit code to the Manx - compiler. why? */ -@@ -6681,10 +6747,9 @@ - /* - * ":shell". - */ --/*ARGSUSED*/ - static void - ex_shell(eap) -- exarg_T *eap; -+ exarg_T *eap UNUSED; - { - do_shell(NULL, 0); - } -@@ -6988,10 +7053,9 @@ - /* - * ":preserve". - */ --/*ARGSUSED*/ - static void - ex_preserve(eap) -- exarg_T *eap; -+ exarg_T *eap UNUSED; - { - curbuf->b_flags |= BF_PRESERVED; - ml_preserve(curbuf, TRUE); -@@ -7223,10 +7287,9 @@ - /* - * :tabs command: List tabs and their contents. - */ --/*ARGSUSED*/ - static void - ex_tabs(eap) -- exarg_T *eap; -+ exarg_T *eap UNUSED; - { - tabpage_T *tp; - win_T *wp; -@@ -7413,7 +7476,6 @@ - /* - * ":edit " command and alikes. - */ --/*ARGSUSED*/ - void - do_exedit(eap, old_curwin) - exarg_T *eap; -@@ -7485,7 +7547,8 @@ - /* ":new" or ":tabnew" without argument: edit an new empty buffer */ - setpcmark(); - (void)do_ecmd(0, NULL, NULL, eap, ECMD_ONE, -- ECMD_HIDE + (eap->forceit ? ECMD_FORCEIT : 0)); -+ ECMD_HIDE + (eap->forceit ? ECMD_FORCEIT : 0), -+ old_curwin == NULL ? curwin : NULL); - } - else if ((eap->cmdidx != CMD_split - #ifdef FEAT_VERTSPLIT -@@ -7522,7 +7585,7 @@ - #ifdef FEAT_LISTCMDS - + (eap->cmdidx == CMD_badd ? ECMD_ADDBUF : 0 ) - #endif -- ) == FAIL) -+ , old_curwin == NULL ? curwin : NULL) == FAIL) - { - /* Editing the file failed. If the window was split, close it. */ - #ifdef FEAT_WINDOWS -@@ -7624,10 +7687,9 @@ - } - #endif - --/*ARGSUSED*/ - static void - ex_swapname(eap) -- exarg_T *eap; -+ exarg_T *eap UNUSED; - { - if (curbuf->b_ml.ml_mfp == NULL || curbuf->b_ml.ml_mfp->mf_fname == NULL) - MSG(_("No swap file")); -@@ -7640,10 +7702,9 @@ - * offset. - * (1998-11-02 16:21:01 R. Edward Ralston ) - */ --/*ARGSUSED*/ - static void - ex_syncbind(eap) -- exarg_T *eap; -+ exarg_T *eap UNUSED; - { - #ifdef FEAT_SCROLLBIND - win_T *wp; -@@ -7784,10 +7845,10 @@ - if (*ml_get(lnum) == NUL && u_savedel(lnum, 1L) == OK) - { - ml_delete(lnum, FALSE); -- deleted_lines_mark(lnum, 1L); - if (curwin->w_cursor.lnum > 1 - && curwin->w_cursor.lnum >= lnum) - --curwin->w_cursor.lnum; -+ deleted_lines_mark(lnum, 1L); - } - } - redraw_curbuf_later(VALID); -@@ -7803,6 +7864,9 @@ - { - vim_free(prev_dir); - prev_dir = NULL; -+ -+ vim_free(globaldir); -+ globaldir = NULL; - } - #endif - -@@ -7825,6 +7889,10 @@ - else - #endif - { -+#ifdef FEAT_AUTOCMD -+ if (allbuf_locked()) -+ return; -+#endif - if (vim_strchr(p_cpo, CPO_CHDIR) != NULL && curbufIsChanged() - && !eap->forceit) - { -@@ -7896,7 +7964,7 @@ - shorten_fnames(TRUE); - - /* Echo the new current directory if the command was typed. */ -- if (KeyTyped) -+ if (KeyTyped || p_verbose >= 5) - ex_pwd(eap); - } - vim_free(tofree); -@@ -7906,10 +7974,9 @@ - /* - * ":pwd". - */ --/*ARGSUSED*/ - static void - ex_pwd(eap) -- exarg_T *eap; -+ exarg_T *eap UNUSED; - { - if (mch_dirname(NameBuff, MAXPATHL) == OK) - { -@@ -8340,10 +8407,9 @@ - /* - * ":undo". - */ --/*ARGSUSED*/ - static void - ex_undo(eap) -- exarg_T *eap; -+ exarg_T *eap UNUSED; - { - if (eap->addr_count == 1) /* :undo 123 */ - undo_time(eap->line2, FALSE, TRUE); -@@ -8354,10 +8420,9 @@ - /* - * ":redo". - */ --/*ARGSUSED*/ - static void - ex_redo(eap) -- exarg_T *eap; -+ exarg_T *eap UNUSED; - { - u_redo(1); - } -@@ -8365,7 +8430,6 @@ - /* - * ":earlier" and ":later". - */ --/*ARGSUSED*/ - static void - ex_later(eap) - exarg_T *eap; -@@ -8550,10 +8614,9 @@ - /* - * ":redrawstatus": force redraw of status line(s) - */ --/*ARGSUSED*/ - static void - ex_redrawstatus(eap) -- exarg_T *eap; -+ exarg_T *eap UNUSED; - { - #if defined(FEAT_WINDOWS) - int r = RedrawingDisabled; -@@ -8630,6 +8693,8 @@ - } - - #ifdef FEAT_SESSION -+ /* Use the short file name until ":lcd" is used. We also don't use the -+ * short file name when 'acd' is set, that is checked later. */ - did_lcd = FALSE; - - /* ":mkview" or ":mkview 9": generate file name with 'viewdir' */ -@@ -8749,8 +8814,8 @@ - else if (*dirnow != NUL - && (ssop_flags & SSOP_CURDIR) && globaldir != NULL) - { -- (void)mch_chdir((char *)globaldir); -- shorten_fnames(TRUE); -+ if (mch_chdir((char *)globaldir) == 0) -+ shorten_fnames(TRUE); - } - - failed |= (makeopens(fd, dirnow) == FAIL); -@@ -8814,11 +8879,10 @@ - - #if ((defined(FEAT_SESSION) || defined(FEAT_EVAL)) && defined(vim_mkdir)) \ - || defined(PROTO) --/*ARGSUSED*/ - int - vim_mkdir_emsg(name, prot) - char_u *name; -- int prot; -+ int prot UNUSED; - { - if (vim_mkdir(name, prot) != 0) - { -@@ -9089,10 +9153,9 @@ - /* - * ":stopinsert" - */ --/*ARGSUSED*/ - static void - ex_stopinsert(eap) -- exarg_T *eap; -+ exarg_T *eap UNUSED; - { - restart_edit = 0; - stop_insert_mode = TRUE; -@@ -9366,9 +9429,8 @@ - # define SPEC_CLIENT 9 - #endif - }; --#define SPEC_COUNT (sizeof(spec_str) / sizeof(char *)) - -- for (i = 0; i < SPEC_COUNT; ++i) -+ for (i = 0; i < (int)(sizeof(spec_str) / sizeof(char *)); ++i) - { - len = (int)STRLEN(spec_str[i]); - if (STRNCMP(src, spec_str[i], len) == 0) -@@ -9506,24 +9568,50 @@ - break; - } - s = src + 1; -+ if (*s == '<') /* "#<99" uses v:oldfiles */ -+ ++s; - i = (int)getdigits(&s); - *usedlen = (int)(s - src); /* length of what we expand */ - -- buf = buflist_findnr(i); -- if (buf == NULL) -+ if (src[1] == '<') - { -- *errormsg = (char_u *)_("E194: No alternate file name to substitute for '#'"); -+ if (*usedlen < 2) -+ { -+ /* Should we give an error message for #b_fname == NULL) -+ else - { -- result = (char_u *)""; -- valid = 0; /* Must have ":p:h" to be valid */ -+ buf = buflist_findnr(i); -+ if (buf == NULL) -+ { -+ *errormsg = (char_u *)_("E194: No alternate file name to substitute for '#'"); -+ return NULL; -+ } -+ if (lnump != NULL) -+ *lnump = ECMD_LAST; -+ if (buf->b_fname == NULL) -+ { -+ result = (char_u *)""; -+ valid = 0; /* Must have ":p:h" to be valid */ -+ } -+ else -+ result = buf->b_fname; - } -- else -- result = buf->b_fname; - break; - - #ifdef FEAT_SEARCHPATH -@@ -9541,6 +9629,15 @@ - #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 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 \"\""); -@@ -9684,7 +9781,7 @@ - } - - /* allocate memory */ -- retval = alloc(len + 1); -+ retval = alloc((unsigned)len + 1); - if (retval == NULL) - break; - } -@@ -10067,7 +10164,7 @@ - */ - if (put_line(fd, "let s:sx = expand(\":p:r\").\"x.vim\"") == FAIL - || put_line(fd, "if file_readable(s:sx)") == FAIL -- || put_line(fd, " exe \"source \" . s:sx") == FAIL -+ || put_line(fd, " exe \"source \" . fnameescape(s:sx)") == FAIL - || put_line(fd, "endif") == FAIL) - return FAIL; - -@@ -10485,6 +10582,9 @@ - if (buf->b_sfname != NULL - && flagp == &ssop_flags - && (ssop_flags & (SSOP_CURDIR | SSOP_SESDIR)) -+#ifdef FEAT_AUTOCHDIR -+ && !p_acd -+#endif - && !did_lcd) - name = buf->b_sfname; - else -@@ -10689,7 +10789,8 @@ - p_viminfo = (char_u *)"'100"; - if (eap->cmdidx == CMD_rviminfo) - { -- if (read_viminfo(eap->arg, TRUE, TRUE, eap->forceit) == FAIL) -+ if (read_viminfo(eap->arg, VIF_WANT_INFO | VIF_WANT_MARKS -+ | (eap->forceit ? VIF_FORCEIT : 0)) == FAIL) - EMSG(_("E195: Cannot open viminfo file for reading")); - } - else -@@ -10850,10 +10951,9 @@ - } - #endif - --/*ARGSUSED*/ - static void - ex_digraphs(eap) -- exarg_T *eap; -+ exarg_T *eap UNUSED; - { - #ifdef FEAT_DIGRAPHS - if (*eap->arg != NUL) -@@ -10887,10 +10987,9 @@ - /* - * ":nohlsearch" - */ --/*ARGSUSED*/ - static void - ex_nohlsearch(eap) -- exarg_T *eap; -+ exarg_T *eap UNUSED; - { - no_hlsearch = TRUE; - redraw_all_later(SOME_VALID); -@@ -10969,10 +11068,9 @@ - /* - * ":X": Get crypt key - */ --/*ARGSUSED*/ - static void - ex_X(eap) -- exarg_T *eap; -+ exarg_T *eap UNUSED; - { - (void)get_crypt_key(TRUE, TRUE); - } -diff -Naur vim72.orig/src/ex_eval.c vim72/src/ex_eval.c ---- vim72.orig/src/ex_eval.c 2007-11-24 15:34:09.000000000 +0000 -+++ vim72/src/ex_eval.c 2009-07-22 22:54:21.000000000 +0100 -@@ -60,7 +60,9 @@ - #else - /* Values used for the Vim release. */ - # define THROW_ON_ERROR TRUE -+# define THROW_ON_ERROR_TRUE - # define THROW_ON_INTERRUPT TRUE -+# define THROW_ON_INTERRUPT_TRUE - #endif - - static void catch_exception __ARGS((except_T *excp)); -@@ -1320,16 +1322,20 @@ - * and reset the did_emsg or got_int flag, so this won't happen again at - * the next surrounding try conditional. - */ -+#ifndef THROW_ON_ERROR_TRUE - if (did_emsg && !THROW_ON_ERROR) - { - inactivate_try = TRUE; - did_emsg = FALSE; - } -+#endif -+#ifndef THROW_ON_INTERRUPT_TRUE - if (got_int && !THROW_ON_INTERRUPT) - { - inactivate_try = TRUE; - got_int = FALSE; - } -+#endif - idx = cleanup_conditionals(cstack, 0, inactivate_try); - if (idx >= 0) - { -@@ -2254,10 +2260,9 @@ - /* - * ":endfunction" when not after a ":function" - */ --/*ARGSUSED*/ - void - ex_endfunction(eap) -- exarg_T *eap; -+ exarg_T *eap UNUSED; - { - EMSG(_("E193: :endfunction not inside a function")); - } -diff -Naur vim72.orig/src/ex_getln.c vim72/src/ex_getln.c ---- vim72.orig/src/ex_getln.c 2008-08-08 10:31:33.000000000 +0100 -+++ vim72/src/ex_getln.c 2009-07-22 22:54:23.000000000 +0100 -@@ -31,6 +31,8 @@ - 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,7 +40,11 @@ - # endif - }; - --static struct cmdline_info ccline; /* current cmdline_info */ -+/* 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 ? */ - -@@ -134,11 +140,10 @@ - * Return pointer to allocated string if there is a commandline, NULL - * otherwise. - */ --/*ARGSUSED*/ - char_u * - getcmdline(firstc, count, indent) - int firstc; -- long count; /* only used for incremental search */ -+ long count UNUSED; /* only used for incremental search */ - int indent; /* indent for inside conditionals */ - { - int c; -@@ -238,6 +243,7 @@ - } - - ExpandInit(&xpc); -+ ccline.xpc = &xpc; - - #ifdef FEAT_RIGHTLEFT - if (curwin->w_p_rl && *curwin->w_p_rlc == 's' -@@ -318,7 +324,7 @@ - #endif - - #ifdef FEAT_DIGRAPHS -- do_digraph(-1); /* init digraph typahead */ -+ do_digraph(-1); /* init digraph typeahead */ - #endif - - /* -@@ -408,9 +414,10 @@ - #endif - - /* -- * works like CTRL-P (unless 'wc' is ). -+ * When there are matching completions to select works like -+ * CTRL-P (unless 'wc' is ). - */ -- if (c != p_wc && c == K_S_TAB && xpc.xp_numfiles != -1) -+ if (c != p_wc && c == K_S_TAB && xpc.xp_numfiles > 0) - c = Ctrl_P; - - #ifdef FEAT_WILDMENU -@@ -1513,6 +1520,7 @@ - int old_firstc; - - vim_free(ccline.cmdbuff); -+ xpc.xp_context = EXPAND_NOTHING; - if (hiscnt == hislen) - p = lookfor; /* back to the old one */ - else -@@ -1839,6 +1847,7 @@ - #endif - - ExpandCleanup(&xpc); -+ ccline.xpc = NULL; - - #ifdef FEAT_SEARCH_EXTRA - if (did_incsearch) -@@ -1990,8 +1999,8 @@ - - #if defined(FEAT_AUTOCMD) || defined(PROTO) - /* -- * Check if "curbuf_lock" is set and return TRUE when it is and give an error -- * message. -+ * Check if "curbuf_lock" or "allbuf_lock" is set and return TRUE when it is -+ * and give an error message. - */ - int - curbuf_locked() -@@ -2001,6 +2010,21 @@ - EMSG(_("E788: Not allowed to edit another buffer now")); - return TRUE; - } -+ return allbuf_locked(); -+} -+ -+/* -+ * Check if "allbuf_lock" is set and return TRUE when it is and give an error -+ * message. -+ */ -+ int -+allbuf_locked() -+{ -+ if (allbuf_lock > 0) -+ { -+ EMSG(_("E811: Not allowed to change buffer information now")); -+ return TRUE; -+ } - return FALSE; - } - #endif -@@ -2088,11 +2112,10 @@ - /* - * Get an Ex command line for the ":" command. - */ --/* ARGSUSED */ - char_u * --getexline(c, dummy, indent) -+getexline(c, cookie, indent) - int c; /* normally ':', NUL for ":append" */ -- void *dummy; /* cookie not used */ -+ void *cookie UNUSED; - int indent; /* indent for inside conditionals */ - { - /* When executing a register, remove ':' that's in front of each line. */ -@@ -2107,12 +2130,11 @@ - * mappings or abbreviations. - * Returns a string in allocated memory or NULL. - */ --/* ARGSUSED */ - char_u * --getexmodeline(promptc, dummy, indent) -+getexmodeline(promptc, cookie, indent) - int promptc; /* normally ':', NUL for ":append" and '?' for - :s prompt */ -- void *dummy; /* cookie not used */ -+ void *cookie UNUSED; - int indent; /* indent for inside conditionals */ - { - garray_T line_ga; -@@ -2508,6 +2530,20 @@ - } - 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 = (int)(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,6 +2911,7 @@ - prev_ccline = ccline; - ccline.cmdbuff = NULL; - ccline.cmdprompt = NULL; -+ ccline.xpc = NULL; - } - - /* -@@ -3582,6 +3619,7 @@ - ExpandInit(xp) - expand_T *xp; - { -+ xp->xp_pattern = NULL; - xp->xp_backslash = XP_BS_NONE; - #ifndef BACKSLASH_IN_FILENAME - xp->xp_shell = FALSE; -@@ -3791,11 +3829,10 @@ - * Returns EXPAND_NOTHING when the character that triggered expansion should - * be inserted like a normal character. - */ --/*ARGSUSED*/ - static int - showmatches(xp, wildmenu) - expand_T *xp; -- int wildmenu; -+ int wildmenu UNUSED; - { - #define L_SHOWFILE(m) (showtail ? sm_gettail(files_found[m]) : files_found[m]) - int num_files; -@@ -4477,6 +4514,12 @@ - {EXPAND_EVENTS, get_event_name, TRUE}, - {EXPAND_AUGROUP, get_augroup_name, TRUE}, - #endif -+#ifdef FEAT_CSCOPE -+ {EXPAND_CSCOPE, get_cscope_name, TRUE}, -+#endif -+#ifdef FEAT_SIGNS -+ {EXPAND_SIGN, get_sign_name, TRUE}, -+#endif - #if (defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \ - && (defined(FEAT_GETTEXT) || defined(FEAT_MBYTE)) - {EXPAND_LANGUAGE, get_lang_arg, TRUE}, -@@ -4490,7 +4533,7 @@ - * right function to do the expansion. - */ - ret = FAIL; -- for (i = 0; i < sizeof(tab) / sizeof(struct expgen); ++i) -+ for (i = 0; i < (int)(sizeof(tab) / sizeof(struct expgen)); ++i) - if (xp->xp_context == tab[i].context) - { - if (tab[i].ic) -@@ -4831,14 +4874,14 @@ - /* Loop over the items in the list. */ - for (li = retlist->lv_first; li != NULL; li = li->li_next) - { -- if (li->li_tv.v_type != VAR_STRING) -- continue; /* Skip non-string items */ -+ if (li->li_tv.v_type != VAR_STRING || li->li_tv.vval.v_string == NULL) -+ continue; /* Skip non-string items and empty strings */ - - if (ga_grow(&ga, 1) == FAIL) - break; - - ((char_u **)ga.ga_data)[ga.ga_len] = -- vim_strsave(li->li_tv.vval.v_string); -+ vim_strsave(li->li_tv.vval.v_string); - ++ga.ga_len; - } - list_unref(retlist); -@@ -4871,7 +4914,7 @@ - if (s == NULL) - return FAIL; - sprintf((char *)s, "%s/%s*.vim", dirname, pat); -- all = globpath(p_rtp, s); -+ all = globpath(p_rtp, s, 0); - vim_free(s); - if (all == NULL) - return FAIL; -@@ -4912,9 +4955,10 @@ - * newlines. Returns NULL for an error or no matches. - */ - char_u * --globpath(path, file) -+globpath(path, file, expand_options) - char_u *path; - char_u *file; -+ int expand_options; - { - expand_T xpc; - char_u *buf; -@@ -4943,10 +4987,10 @@ - { - add_pathsep(buf); - STRCAT(buf, file); -- if (ExpandFromContext(&xpc, buf, &num_p, &p, WILD_SILENT) != FAIL -- && num_p > 0) -+ if (ExpandFromContext(&xpc, buf, &num_p, &p, -+ WILD_SILENT|expand_options) != FAIL && num_p > 0) - { -- ExpandEscape(&xpc, buf, num_p, p, WILD_SILENT); -+ ExpandEscape(&xpc, buf, num_p, p, WILD_SILENT|expand_options); - for (len = 0, i = 0; i < num_p; ++i) - len += (int)STRLEN(p[i]) + 1; - -@@ -5641,7 +5685,7 @@ - histype1 = get_histtype(arg); - if (histype1 == -1) - { -- if (STRICMP(arg, "all") == 0) -+ if (STRNICMP(arg, "all", STRLEN(arg)) == 0) - { - histype1 = 0; - histype2 = HIST_COUNT-1; -@@ -6020,16 +6064,17 @@ - # endif - return K_IGNORE; - } -- cmdwin_type = ccline.cmdfirstc; -- if (cmdwin_type == NUL) -- cmdwin_type = '-'; -+ cmdwin_type = get_cmdline_type(); - - /* Create the command-line buffer empty. */ -- (void)do_ecmd(0, NULL, NULL, NULL, ECMD_ONE, ECMD_HIDE); -+ (void)do_ecmd(0, NULL, NULL, NULL, ECMD_ONE, ECMD_HIDE, NULL); - (void)setfname(curbuf, (char_u *)"[Command Line]", NULL, TRUE); - set_option_value((char_u *)"bt", 0L, (char_u *)"nofile", OPT_LOCAL); - set_option_value((char_u *)"swf", 0L, NULL, OPT_LOCAL); - curbuf->b_p_ma = TRUE; -+#ifdef FEAT_FOLDING -+ curwin->w_p_fen = FALSE; -+#endif - # ifdef FEAT_RIGHTLEFT - curwin->w_p_rl = cmdmsg_rl; - cmdmsg_rl = FALSE; -@@ -6046,7 +6091,7 @@ - /* Showing the prompt may have set need_wait_return, reset it. */ - need_wait_return = FALSE; - -- histtype = hist_char2type(ccline.cmdfirstc); -+ histtype = hist_char2type(cmdwin_type); - if (histtype == HIST_CMD || histtype == HIST_DEBUG) - { - if (p_wc == TAB) -diff -Naur vim72.orig/src/farsi.c vim72/src/farsi.c ---- vim72.orig/src/farsi.c 2007-12-31 16:28:10.000000000 +0000 -+++ vim72/src/farsi.c 2009-07-22 22:54:22.000000000 +0100 -@@ -103,7 +103,8 @@ - case F_HE: - tempc = _HE; - -- if (p_ri && (curwin->w_cursor.col+1 < STRLEN(ml_get_curline()))) -+ if (p_ri && (curwin->w_cursor.col + 1 -+ < (colnr_T)STRLEN(ml_get_curline()))) - { - inc_cursor(); - -@@ -344,7 +345,7 @@ - if (curwin->w_p_rl && p_ri) - return; - -- if ( (curwin->w_cursor.col < STRLEN(ml_get_curline()))) -+ if ((curwin->w_cursor.col < (colnr_T)STRLEN(ml_get_curline()))) - { - if ((p_ri && curwin->w_cursor.col) || !p_ri) - { -@@ -565,7 +566,7 @@ - - tempc = gchar_cursor(); - -- if (curwin->w_cursor.col+1 < STRLEN(ml_get_curline())) -+ if (curwin->w_cursor.col + 1 < (colnr_T)STRLEN(ml_get_curline())) - { - inc_cursor(); - -@@ -594,8 +595,8 @@ - { - int tempc; - -- if (!curwin->w_cursor.col && -- (curwin->w_cursor.col+1 == STRLEN(ml_get_curline()))) -+ if (curwin->w_cursor.col != 0 && -+ (curwin->w_cursor.col + 1 == (colnr_T)STRLEN(ml_get_curline()))) - return; - - if (!curwin->w_cursor.col && p_ri) -@@ -663,8 +664,8 @@ - { - int tempc; - -- if (!curwin->w_cursor.col && -- (curwin->w_cursor.col+1 == STRLEN(ml_get_curline()))) -+ if (curwin->w_cursor.col != 0 && -+ (curwin->w_cursor.col + 1 == (colnr_T)STRLEN(ml_get_curline()))) - return; - - if (!curwin->w_cursor.col && p_ri) -diff -Naur vim72.orig/src/feature.h vim72/src/feature.h ---- vim72.orig/src/feature.h 2008-08-06 12:00:39.000000000 +0100 -+++ vim72/src/feature.h 2009-07-22 22:54:17.000000000 +0100 -@@ -767,9 +767,13 @@ - - /* - * +browse ":browse" command. -+ * or just the ":browse" command modifier - */ --#if defined(FEAT_NORMAL) && (defined(FEAT_GUI_MSWIN) || defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_ATHENA) || defined(FEAT_GUI_GTK) || defined(FEAT_GUI_PHOTON) || defined(FEAT_GUI_MAC)) --# define FEAT_BROWSE -+#if defined(FEAT_NORMAL) -+# define FEAT_BROWSE_CMD -+# if defined(FEAT_GUI_MSWIN) || defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_ATHENA) || defined(FEAT_GUI_GTK) || defined(FEAT_GUI_PHOTON) || defined(FEAT_GUI_MAC) -+# define FEAT_BROWSE -+# endif - #endif - - /* -diff -Naur vim72.orig/src/fileio.c vim72/src/fileio.c ---- vim72.orig/src/fileio.c 2008-08-06 12:01:03.000000000 +0100 -+++ vim72/src/fileio.c 2009-07-22 22:54:23.000000000 +0100 -@@ -69,7 +69,7 @@ - static int au_find_group __ARGS((char_u *name)); - - # define AUGROUP_DEFAULT -1 /* default autocmd group */ --# define AUGROUP_ERROR -2 /* errornouse autocmd group */ -+# define AUGROUP_ERROR -2 /* erroneous autocmd group */ - # define AUGROUP_ALL -3 /* all autocmd groups */ - #endif - -@@ -144,7 +144,9 @@ - # endif - #endif - static int move_lines __ARGS((buf_T *frombuf, buf_T *tobuf)); -- -+#ifdef FEAT_AUTOCMD -+static char *e_auchangedbuf = N_("E812: Autocommands changed buffer or buffer name"); -+#endif - - void - filemess(buf, name, s, attr) -@@ -295,6 +297,19 @@ - int conv_restlen = 0; /* nr of bytes in conv_rest[] */ - #endif - -+#ifdef FEAT_AUTOCMD -+ /* Remember the initial values of curbuf, curbuf->b_ffname and -+ * curbuf->b_fname to detect whether they are altered as a result of -+ * executing nasty autocommands. Also check if "fname" and "sfname" -+ * point to one of these values. */ -+ buf_T *old_curbuf = curbuf; -+ char_u *old_b_ffname = curbuf->b_ffname; -+ char_u *old_b_fname = curbuf->b_fname; -+ int using_b_ffname = (fname == curbuf->b_ffname) -+ || (sfname == curbuf->b_ffname); -+ int using_b_fname = (fname == curbuf->b_fname) -+ || (sfname == curbuf->b_fname); -+#endif - write_no_eol_lnum = 0; /* in case it was set by the previous read */ - - /* -@@ -589,7 +604,21 @@ - #ifdef FEAT_QUICKFIX - if (!bt_dontwrite(curbuf)) - #endif -+ { - check_need_swap(newfile); -+#ifdef FEAT_AUTOCMD -+ /* SwapExists autocommand may mess things up */ -+ if (curbuf != old_curbuf -+ || (using_b_ffname -+ && (old_b_ffname != curbuf->b_ffname)) -+ || (using_b_fname -+ && (old_b_fname != curbuf->b_fname))) -+ { -+ EMSG(_(e_auchangedbuf)); -+ return FAIL; -+ } -+#endif -+ } - if (dir_of_file_exists(fname)) - filemess(curbuf, sfname, (char_u *)_("[New File]"), 0); - else -@@ -668,9 +697,21 @@ - #endif - { - check_need_swap(newfile); -+#ifdef FEAT_AUTOCMD -+ if (!read_stdin && (curbuf != old_curbuf -+ || (using_b_ffname && (old_b_ffname != curbuf->b_ffname)) -+ || (using_b_fname && (old_b_fname != curbuf->b_fname)))) -+ { -+ EMSG(_(e_auchangedbuf)); -+ if (!read_buffer) -+ close(fd); -+ return FAIL; -+ } -+#endif - #ifdef UNIX - /* Set swap file protection bits after creating it. */ -- if (swap_mode > 0 && curbuf->b_ml.ml_mfp->mf_fname != NULL) -+ if (swap_mode > 0 && curbuf->b_ml.ml_mfp != NULL -+ && curbuf->b_ml.ml_mfp->mf_fname != NULL) - (void)mch_setperm(curbuf->b_ml.ml_mfp->mf_fname, (long)swap_mode); - #endif - } -@@ -698,7 +739,6 @@ - { - int m = msg_scroll; - int n = msg_scrolled; -- buf_T *old_curbuf = curbuf; - - /* - * The file must be closed again, the autocommands may want to change -@@ -740,8 +780,13 @@ - /* - * Don't allow the autocommands to change the current buffer. - * Try to re-open the file. -+ * -+ * Don't allow the autocommands to change the buffer name either -+ * (cd for example) if it invalidates fname or sfname. - */ - if (!read_stdin && (curbuf != old_curbuf -+ || (using_b_ffname && (old_b_ffname != curbuf->b_ffname)) -+ || (using_b_fname && (old_b_fname != curbuf->b_fname)) - || (fd = mch_open((char *)fname, O_RDONLY | O_EXTRA, 0)) < 0)) - { - --no_wait_return; -@@ -932,7 +977,10 @@ - else - { - if (eap != NULL && eap->force_ff != 0) -+ { - fileformat = get_fileformat_force(curbuf, eap); -+ try_unix = try_dos = try_mac = FALSE; -+ } - else if (curbuf->b_p_bin) - fileformat = EOL_UNIX; /* binary: use Unix format */ - else if (*p_ffs == NUL) -@@ -2211,7 +2259,7 @@ - { - /* Use stderr for stdin, makes shell commands work. */ - close(0); -- dup(2); -+ ignored = dup(2); - } - #endif - -@@ -2341,11 +2389,6 @@ - STRCAT(IObuff, _("[CR missing]")); - c = TRUE; - } -- if (ff_error == EOL_MAC) -- { -- STRCAT(IObuff, _("[NL found]")); -- c = TRUE; -- } - if (split) - { - STRCAT(IObuff, _("[long lines split]")); -@@ -2711,7 +2754,7 @@ - { - if (!curbuf->b_marks_read && get_viminfo_parameter('\'') > 0 - && curbuf->b_ffname != NULL) -- read_viminfo(NULL, FALSE, TRUE, FALSE); -+ read_viminfo(NULL, VIF_WANT_MARKS); - - /* Always set b_marks_read; needed when 'viminfo' is changed to include - * the ' parameter after opening a buffer. */ -@@ -3451,12 +3494,12 @@ - { - # ifdef UNIX - # ifdef HAVE_FCHOWN -- fchown(fd, st_old.st_uid, st_old.st_gid); -+ 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 - || st.st_gid != st_old.st_gid -- || st.st_mode != perm) -+ || (long)st.st_mode != perm) - backup_copy = TRUE; - # endif - /* Close the file before removing it, on MS-Windows we -@@ -4367,14 +4410,14 @@ - || st.st_uid != st_old.st_uid - || st.st_gid != st_old.st_gid) - { -- fchown(fd, st_old.st_uid, st_old.st_gid); -+ ignored = fchown(fd, st_old.st_uid, st_old.st_gid); - if (perm >= 0) /* set permission again, may have changed */ - (void)mch_setperm(wfname, perm); - } - # endif - buf_setino(buf); - } -- else if (buf->b_dev < 0) -+ else if (!buf->b_dev_valid) - /* Set the inode when creating a new file. */ - buf_setino(buf); - #endif -@@ -4782,6 +4825,8 @@ - char_u *sfname; - { - #ifdef FEAT_AUTOCMD -+ buf_T *buf = curbuf; -+ - /* It's like the unnamed buffer is deleted.... */ - if (curbuf->b_p_bl) - apply_autocmds(EVENT_BUFDELETE, NULL, NULL, FALSE, curbuf); -@@ -4790,6 +4835,12 @@ - if (aborting()) /* autocmds may abort script processing */ - return FAIL; - # endif -+ if (curbuf != buf) -+ { -+ /* We are in another buffer now, don't do the renaming. */ -+ EMSG(_(e_auchangedbuf)); -+ return FAIL; -+ } - #endif - - if (setfname(curbuf, fname, sfname, FALSE) == OK) -@@ -5246,13 +5297,16 @@ - /* Convert with iconv(). */ - if (ip->bw_restlen > 0) - { -+ char *fp; -+ - /* Need to concatenate the remainder of the previous call and - * the bytes of the current call. Use the end of the - * conversion buffer for this. */ - fromlen = len + ip->bw_restlen; -- from = (char *)ip->bw_conv_buf + ip->bw_conv_buflen - fromlen; -- mch_memmove((void *)from, ip->bw_rest, (size_t)ip->bw_restlen); -- mch_memmove((void *)(from + ip->bw_restlen), buf, (size_t)len); -+ fp = (char *)ip->bw_conv_buf + ip->bw_conv_buflen - fromlen; -+ mch_memmove(fp, ip->bw_rest, (size_t)ip->bw_restlen); -+ mch_memmove(fp + ip->bw_restlen, buf, (size_t)len); -+ from = fp; - tolen = ip->bw_conv_buflen - fromlen; - } - else -@@ -5550,9 +5604,10 @@ - name = "ucs-4le"; /* FF FE 00 00 */ - len = 4; - } -- else if (flags == FIO_ALL || flags == (FIO_UCS2 | FIO_ENDIAN_L)) -+ else if (flags == (FIO_UCS2 | FIO_ENDIAN_L)) - name = "ucs-2le"; /* FF FE */ -- else if (flags == (FIO_UTF16 | FIO_ENDIAN_L)) -+ else if (flags == FIO_ALL || flags == (FIO_UTF16 | FIO_ENDIAN_L)) -+ /* utf-16le is preferred, it also works for ucs-2le text */ - name = "utf-16le"; /* FF FE */ - } - else if (p[0] == 0xfe && p[1] == 0xff -@@ -5917,7 +5972,7 @@ - else if (*ext == '.') - #endif - { -- if (s - ptr > (size_t)8) -+ if ((size_t)(s - ptr) > (size_t)8) - { - s = ptr + 8; - *s = '\0'; -@@ -6031,9 +6086,9 @@ - { - tbuf[FGETS_SIZE - 2] = NUL; - #ifdef USE_CR -- fgets_cr((char *)tbuf, FGETS_SIZE, fp); -+ ignoredp = fgets_cr((char *)tbuf, FGETS_SIZE, fp); - #else -- fgets((char *)tbuf, FGETS_SIZE, fp); -+ ignoredp = fgets((char *)tbuf, FGETS_SIZE, fp); - #endif - } while (tbuf[FGETS_SIZE - 2] != NUL && tbuf[FGETS_SIZE - 2] != '\n'); - } -@@ -6107,12 +6162,24 @@ - #ifdef HAVE_ACL - vim_acl_T acl; /* ACL from original file */ - #endif -+#if defined(UNIX) || defined(CASE_INSENSITIVE_FILENAME) -+ int use_tmp_file = FALSE; -+#endif - - /* -- * When the names are identical, there is nothing to do. -+ * When the names are identical, there is nothing to do. When they refer -+ * to the same file (ignoring case and slash/backslash differences) but -+ * the file name differs we need to go through a temp file. - */ - if (fnamecmp(from, to) == 0) -- return 0; -+ { -+#ifdef CASE_INSENSITIVE_FILENAME -+ if (STRCMP(gettail(from), gettail(to)) != 0) -+ use_tmp_file = TRUE; -+ else -+#endif -+ return 0; -+ } - - /* - * Fail if the "from" file doesn't exist. Avoids that "to" is deleted. -@@ -6120,6 +6187,55 @@ - if (mch_stat((char *)from, &st) < 0) - return -1; - -+#ifdef UNIX -+ { -+ struct stat st_to; -+ -+ /* It's possible for the source and destination to be the same file. -+ * This happens when "from" and "to" differ in case and are on a FAT32 -+ * filesystem. In that case go through a temp file name. */ -+ if (mch_stat((char *)to, &st_to) >= 0 -+ && st.st_dev == st_to.st_dev -+ && st.st_ino == st_to.st_ino) -+ use_tmp_file = TRUE; -+ } -+#endif -+ -+#if defined(UNIX) || defined(CASE_INSENSITIVE_FILENAME) -+ if (use_tmp_file) -+ { -+ char tempname[MAXPATHL + 1]; -+ -+ /* -+ * Find a name that doesn't exist and is in the same directory. -+ * Rename "from" to "tempname" and then rename "tempname" to "to". -+ */ -+ if (STRLEN(from) >= MAXPATHL - 5) -+ return -1; -+ STRCPY(tempname, from); -+ for (n = 123; n < 99999; ++n) -+ { -+ sprintf((char *)gettail((char_u *)tempname), "%d", n); -+ if (mch_stat(tempname, &st) < 0) -+ { -+ if (mch_rename((char *)from, tempname) == 0) -+ { -+ if (mch_rename(tempname, (char *)to) == 0) -+ return 0; -+ /* Strange, the second step failed. Try moving the -+ * file back and return failure. */ -+ mch_rename(tempname, (char *)from); -+ return -1; -+ } -+ /* If it fails for one temp name it will most likely fail -+ * for any temp name, give up. */ -+ return -1; -+ } -+ } -+ return -1; -+ } -+#endif -+ - /* - * Delete the "to" file, this is required on some systems to make the - * mch_rename() work, on other systems it makes sure that we don't have -@@ -6260,7 +6376,7 @@ - - if (!stuff_empty() || global_busy || !typebuf_typed() - #ifdef FEAT_AUTOCMD -- || autocmd_busy || curbuf_lock > 0 -+ || autocmd_busy || curbuf_lock > 0 || allbuf_lock > 0 - #endif - ) - need_check_timestamps = TRUE; /* check later */ -@@ -6353,11 +6469,10 @@ - * return 2 if a message has been displayed. - * return 0 otherwise. - */ --/*ARGSUSED*/ - int - buf_check_timestamp(buf, focus) - buf_T *buf; -- int focus; /* called for GUI focus event */ -+ int focus UNUSED; /* called for GUI focus event */ - { - struct stat st; - int stat_res; -@@ -6462,8 +6577,10 @@ - set_vim_var_string(VV_FCS_REASON, (char_u *)reason, -1); - set_vim_var_string(VV_FCS_CHOICE, (char_u *)"", -1); - # endif -+ ++allbuf_lock; - n = apply_autocmds(EVENT_FILECHANGEDSHELL, - buf->b_fname, buf->b_fname, FALSE, buf); -+ --allbuf_lock; - busy = FALSE; - if (n) - { -@@ -6511,7 +6628,10 @@ - mesg = _("W16: Warning: Mode of file \"%s\" has changed since editing started"); - mesg2 = _("See \":help W16\" for more info."); - } -- /* Else: only timestamp changed, ignored */ -+ else -+ /* Only timestamp changed, store it to avoid a warning -+ * in check_mtime() later. */ -+ buf->b_mtime_read = buf->b_mtime; - } - } - } -@@ -6538,6 +6658,11 @@ - tbuf = alloc((unsigned)(STRLEN(path) + STRLEN(mesg) - + STRLEN(mesg2) + 2)); - sprintf((char *)tbuf, mesg, path); -+#ifdef FEAT_EVAL -+ /* Set warningmsg here, before the unimportant and output-specific -+ * mesg2 has been appended. */ -+ set_vim_var_string(VV_WARNINGMSG, tbuf, -1); -+#endif - #if defined(FEAT_CON_DIALOG) || defined(FEAT_GUI_DIALOG) - if (can_reload) - { -@@ -6732,10 +6857,11 @@ - #endif - #ifdef FEAT_FOLDING - { -- win_T *wp; -+ win_T *wp; -+ tabpage_T *tp; - - /* Update folds unless they are defined manually. */ -- FOR_ALL_WINDOWS(wp) -+ FOR_ALL_TAB_WINDOWS(tp, wp) - if (wp->w_buffer == curwin->w_buffer - && !foldmethodIsManual(wp)) - foldUpdateAll(wp); -@@ -6753,12 +6879,11 @@ - /* Careful: autocommands may have made "buf" invalid! */ - } - --/*ARGSUSED*/ - void - buf_store_time(buf, st, fname) - buf_T *buf; - struct stat *st; -- char_u *fname; -+ char_u *fname UNUSED; - { - buf->b_mtime = (long)st->st_mtime; - buf->b_orig_size = (size_t)st->st_size; -@@ -6821,10 +6946,9 @@ - * The returned pointer is to allocated memory. - * The returned pointer is NULL if no valid name was found. - */ --/*ARGSUSED*/ - char_u * - vim_tempname(extra_char) -- int extra_char; /* character to use in the name instead of '?' */ -+ int extra_char UNUSED; /* char to use in the name instead of '?' */ - { - #ifdef USE_TMPNAM - char_u itmp[L_tmpnam]; /* use tmpnam() */ -@@ -6853,7 +6977,7 @@ - /* - * Try the entries in TEMPDIRNAMES to create the temp directory. - */ -- for (i = 0; i < sizeof(tempdirs) / sizeof(char *); ++i) -+ for (i = 0; i < (int)(sizeof(tempdirs) / sizeof(char *)); ++i) - { - /* expand $TMP, leave room for "/v1100000/999999999" */ - expand_env((char_u *)tempdirs[i], itmp, TEMPNAMELEN - 20); -@@ -8245,7 +8369,7 @@ - - /* Execute the modeline settings, but don't set window-local - * options if we are using the current window for another buffer. */ -- do_modelines(aco.save_curwin == NULL ? OPT_NOWIN : 0); -+ do_modelines(curwin == aucmd_win ? OPT_NOWIN : 0); - - /* restore the current window */ - aucmd_restbuf(&aco); -@@ -8261,8 +8385,8 @@ - - /* - * Prepare for executing autocommands for (hidden) buffer "buf". -- * Search a window for the current buffer. Save the cursor position and -- * screen offset. -+ * Search for a visible window containing the current buffer. If there isn't -+ * one then use "aucmd_win". - * Set "curbuf" and "curwin" to match "buf". - * When FEAT_AUTOCMD is not defined another version is used, see below. - */ -@@ -8272,8 +8396,9 @@ - buf_T *buf; /* new curbuf */ - { - win_T *win; -- -- aco->new_curbuf = buf; -+#ifdef FEAT_WINDOWS -+ int save_ea; -+#endif - - /* Find a window that is for the new buffer */ - if (buf == curbuf) /* be quick when buf is curbuf */ -@@ -8287,42 +8412,51 @@ - win = NULL; - #endif - -- /* -- * Prefer to use an existing window for the buffer, it has the least side -- * effects (esp. if "buf" is curbuf). -- * Otherwise, use curwin for "buf". It might make some items in the -- * window invalid. At least save the cursor and topline. -- */ -+ /* Allocate "aucmd_win" when needed. If this fails (out of memory) fall -+ * back to using the current window. */ -+ if (win == NULL && aucmd_win == NULL) -+ { -+ win_alloc_aucmd_win(); -+ if (aucmd_win == NULL) -+ win = curwin; -+ } -+ -+ aco->save_curwin = curwin; -+ aco->save_curbuf = curbuf; - if (win != NULL) - { -- /* there is a window for "buf", make it the curwin */ -- aco->save_curwin = curwin; -+ /* There is a window for "buf" in the current tab page, make it the -+ * curwin. This is preferred, it has the least side effects (esp. if -+ * "buf" is curbuf). */ - curwin = win; -- aco->save_buf = win->w_buffer; -- aco->new_curwin = win; - } - else - { -- /* there is no window for "buf", use curwin */ -- aco->save_curwin = NULL; -- aco->save_buf = curbuf; -- --curbuf->b_nwindows; -- curwin->w_buffer = buf; -+ /* There is no window for "buf", use "aucmd_win". To minimize the side -+ * effects, insert it in a the current tab page. -+ * Anything related to a window (e.g., setting folds) may have -+ * unexpected results. */ -+ aucmd_win->w_buffer = buf; - ++buf->b_nwindows; -+ win_init_empty(aucmd_win); /* set cursor and topline to safe values */ - -- /* save cursor and topline, set them to safe values */ -- aco->save_cursor = curwin->w_cursor; -- curwin->w_cursor.lnum = 1; -- curwin->w_cursor.col = 0; -- aco->save_topline = curwin->w_topline; -- curwin->w_topline = 1; --#ifdef FEAT_DIFF -- aco->save_topfill = curwin->w_topfill; -- curwin->w_topfill = 0; -+#ifdef FEAT_WINDOWS -+ /* Split the current window, put the aucmd_win in the upper half. -+ * We don't want the BufEnter or WinEnter autocommands. */ -+ block_autocmds(); -+ make_snapshot(SNAP_AUCMD_IDX); -+ save_ea = p_ea; -+ p_ea = FALSE; -+ (void)win_split_ins(0, WSP_TOP, aucmd_win, 0); -+ (void)win_comp_pos(); /* recompute window positions */ -+ p_ea = save_ea; -+ unblock_autocmds(); - #endif -+ curwin = aucmd_win; - } -- - curbuf = buf; -+ aco->new_curwin = curwin; -+ aco->new_curbuf = curbuf; - } - - /* -@@ -8334,21 +8468,88 @@ - aucmd_restbuf(aco) - aco_save_T *aco; /* structure holding saved values */ - { -- if (aco->save_curwin != NULL) -+#ifdef FEAT_WINDOWS -+ int dummy; -+#endif -+ -+ if (aco->new_curwin == aucmd_win) -+ { -+ --curbuf->b_nwindows; -+#ifdef FEAT_WINDOWS -+ /* Find "aucmd_win", it can't be closed, but it may be in another tab -+ * page. Do not trigger autocommands here. */ -+ block_autocmds(); -+ if (curwin != aucmd_win) -+ { -+ tabpage_T *tp; -+ win_T *wp; -+ -+ FOR_ALL_TAB_WINDOWS(tp, wp) -+ { -+ if (wp == aucmd_win) -+ { -+ if (tp != curtab) -+ goto_tabpage_tp(tp); -+ win_goto(aucmd_win); -+ break; -+ } -+ } -+ } -+ -+ /* Remove the window and frame from the tree of frames. */ -+ (void)winframe_remove(curwin, &dummy, NULL); -+ win_remove(curwin, NULL); -+ last_status(FALSE); /* may need to remove last status line */ -+ restore_snapshot(SNAP_AUCMD_IDX, FALSE); -+ (void)win_comp_pos(); /* recompute window positions */ -+ unblock_autocmds(); -+ -+ if (win_valid(aco->save_curwin)) -+ curwin = aco->save_curwin; -+ else -+ /* Hmm, original window disappeared. Just use the first one. */ -+ curwin = firstwin; -+# ifdef FEAT_EVAL -+ vars_clear(&aucmd_win->w_vars.dv_hashtab); /* free all w: variables */ -+# endif -+#else -+ curwin = aco->save_curwin; -+#endif -+ curbuf = curwin->w_buffer; -+ -+ /* the buffer contents may have changed */ -+ check_cursor(); -+ if (curwin->w_topline > curbuf->b_ml.ml_line_count) -+ { -+ curwin->w_topline = curbuf->b_ml.ml_line_count; -+#ifdef FEAT_DIFF -+ curwin->w_topfill = 0; -+#endif -+ } -+#if defined(FEAT_GUI) -+ /* Hide the scrollbars from the aucmd_win and update. */ -+ gui_mch_enable_scrollbar(&aucmd_win->w_scrollbars[SBAR_LEFT], FALSE); -+ gui_mch_enable_scrollbar(&aucmd_win->w_scrollbars[SBAR_RIGHT], FALSE); -+ gui_may_update_scrollbars(); -+#endif -+ } -+ else - { - /* restore curwin */ - #ifdef FEAT_WINDOWS - if (win_valid(aco->save_curwin)) - #endif - { -- /* restore the buffer which was previously edited by curwin, if -- * it's still the same window and it's valid */ -+ /* Restore the buffer which was previously edited by curwin, if -+ * it was chagned, we are still the same window and the buffer is -+ * valid. */ - if (curwin == aco->new_curwin -- && buf_valid(aco->save_buf) -- && aco->save_buf->b_ml.ml_mfp != NULL) -+ && curbuf != aco->new_curbuf -+ && buf_valid(aco->new_curbuf) -+ && aco->new_curbuf->b_ml.ml_mfp != NULL) - { - --curbuf->b_nwindows; -- curbuf = aco->save_buf; -+ curbuf = aco->new_curbuf; - curwin->w_buffer = curbuf; - ++curbuf->b_nwindows; - } -@@ -8357,34 +8558,6 @@ - curbuf = curwin->w_buffer; - } - } -- else -- { -- /* restore buffer for curwin if it still exists and is loaded */ -- if (buf_valid(aco->save_buf) && aco->save_buf->b_ml.ml_mfp != NULL) -- { -- --curbuf->b_nwindows; -- curbuf = aco->save_buf; -- curwin->w_buffer = curbuf; -- ++curbuf->b_nwindows; -- curwin->w_cursor = aco->save_cursor; -- check_cursor(); -- /* check topline < line_count, in case lines got deleted */ -- if (aco->save_topline <= curbuf->b_ml.ml_line_count) -- { -- curwin->w_topline = aco->save_topline; --#ifdef FEAT_DIFF -- curwin->w_topfill = aco->save_topfill; --#endif -- } -- else -- { -- curwin->w_topline = curbuf->b_ml.ml_line_count; --#ifdef FEAT_DIFF -- curwin->w_topfill = 0; --#endif -- } -- } -- } - } - - static int autocmd_nested = FALSE; -@@ -8523,6 +8696,7 @@ - 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,6 +8775,7 @@ - * 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,14 +8793,15 @@ - if (fname != NULL && *fname != NUL) - autocmd_fname = fname; - else if (buf != NULL) -- autocmd_fname = buf->b_fname; -+ autocmd_fname = buf->b_ffname; - else - autocmd_fname = NULL; - } - else - autocmd_fname = fname_io; - if (autocmd_fname != NULL) -- autocmd_fname = FullName_save(autocmd_fname, FALSE); -+ autocmd_fname = vim_strsave(autocmd_fname); -+ autocmd_fname_full = FALSE; /* call FullName_save() later */ - - /* - * Set the buffer number to be used for . -@@ -8667,9 +8843,11 @@ - else - { - sfname = vim_strsave(fname); -- /* Don't try expanding FileType, Syntax, WindowID or QuickFixCmd* */ -+ /* Don't try expanding FileType, Syntax, FuncUndefined, WindowID or -+ * QuickFixCmd* */ - if (event == EVENT_FILETYPE - || event == EVENT_SYNTAX -+ || event == EVENT_FUNCUNDEFINED - || event == EVENT_REMOTEREPLY - || event == EVENT_SPELLFILEMISSING - || event == EVENT_QUICKFIXCMDPRE -@@ -8810,6 +8988,7 @@ - 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,7 +9097,7 @@ - { - apc->curpat = NULL; - -- /* only use a pattern when it has not been removed, has commands and -+ /* 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 -@@ -8967,12 +9146,11 @@ - * Called by do_cmdline() to get the next line for ":if". - * Returns allocated string, or NULL for end of autocommands. - */ --/* ARGSUSED */ - static char_u * - getnextac(c, cookie, indent) -- int c; /* not used */ -+ int c UNUSED; - void *cookie; -- int indent; /* not used */ -+ int indent UNUSED; - { - AutoPatCmd *acp = (AutoPatCmd *)cookie; - char_u *retval; -@@ -9083,10 +9261,9 @@ - * Function given to ExpandGeneric() to obtain the list of autocommand group - * names. - */ --/*ARGSUSED*/ - char_u * - get_augroup_name(xp, idx) -- expand_T *xp; -+ expand_T *xp UNUSED; - int idx; - { - if (idx == augroups.ga_len) /* add "END" add the end */ -@@ -9104,7 +9281,7 @@ - set_context_in_autocmd(xp, arg, doautocmd) - expand_T *xp; - char_u *arg; -- int doautocmd; /* TRUE for :doautocmd, FALSE for :autocmd */ -+ int doautocmd; /* TRUE for :doauto*, FALSE for :autocmd */ - { - char_u *p; - int group; -@@ -9152,10 +9329,9 @@ - /* - * Function given to ExpandGeneric() to obtain the list of event names. - */ --/*ARGSUSED*/ - char_u * - get_event_name(xp, idx) -- expand_T *xp; -+ expand_T *xp UNUSED; - int idx; - { - if (idx < augroups.ga_len) /* First list group names, if wanted */ -@@ -9296,9 +9472,11 @@ - aco_save_T *aco; /* structure to save values in */ - buf_T *buf; /* new curbuf */ - { -- aco->save_buf = curbuf; -+ aco->save_curbuf = curbuf; -+ --curbuf->b_nwindows; - curbuf = buf; - curwin->w_buffer = buf; -+ ++curbuf->b_nwindows; - } - - /* -@@ -9309,8 +9487,10 @@ - aucmd_restbuf(aco) - aco_save_T *aco; /* structure holding saved values */ - { -- curbuf = aco->save_buf; -+ --curbuf->b_nwindows; -+ curbuf = aco->save_curbuf; - curwin->w_buffer = curbuf; -+ ++curbuf->b_nwindows; - } - - #endif /* FEAT_AUTOCMD */ -@@ -9467,13 +9647,12 @@ - * - * Returns NULL when out of memory. - */ --/*ARGSUSED*/ - char_u * - file_pat_to_reg_pat(pat, pat_end, allow_dirs, no_bslash) - char_u *pat; - char_u *pat_end; /* first char after pattern or NULL */ - char *allow_dirs; /* Result passed back out in here */ -- int no_bslash; /* Don't use a backward slash as pathsep */ -+ int no_bslash UNUSED; /* Don't use a backward slash as pathsep */ - { - int size; - char_u *endp; -diff -Naur vim72.orig/src/fold.c vim72/src/fold.c ---- vim72.orig/src/fold.c 2008-08-06 12:01:12.000000000 +0100 -+++ vim72/src/fold.c 2009-07-22 22:54:19.000000000 +0100 -@@ -48,7 +48,7 @@ - static int foldFind __ARGS((garray_T *gap, linenr_T lnum, fold_T **fpp)); - static int foldLevelWin __ARGS((win_T *wp, linenr_T lnum)); - static void checkupdate __ARGS((win_T *wp)); --static void setFoldRepeat __ARGS((linenr_T lnum, long count, int open)); -+static void setFoldRepeat __ARGS((linenr_T lnum, long count, int do_open)); - static linenr_T setManualFold __ARGS((linenr_T lnum, int opening, int recurse, int *donep)); - static linenr_T setManualFoldWin __ARGS((win_T *wp, linenr_T lnum, int opening, int recurse, int *donep)); - static void foldOpenNested __ARGS((fold_T *fpr)); -@@ -740,7 +740,7 @@ - garray_T *found_ga; - fold_T *found_fp = NULL; - linenr_T found_off = 0; -- int use_level = FALSE; -+ int use_level; - int maybe_small = FALSE; - int level = 0; - linenr_T lnum = start; -@@ -757,6 +757,7 @@ - gap = &curwin->w_folds; - found_ga = NULL; - lnum_off = 0; -+ use_level = FALSE; - for (;;) - { - if (!foldFind(gap, lnum - lnum_off, &fp)) -@@ -783,20 +784,21 @@ - else - { - lnum = found_fp->fd_top + found_fp->fd_len + found_off; -- did_one = TRUE; - - if (foldmethodIsManual(curwin)) - deleteFoldEntry(found_ga, - (int)(found_fp - (fold_T *)found_ga->ga_data), recursive); - else - { -- if (found_fp->fd_top + found_off < first_lnum) -- first_lnum = found_fp->fd_top; -- if (lnum > last_lnum) -+ if (first_lnum > found_fp->fd_top + found_off) -+ first_lnum = found_fp->fd_top + found_off; -+ if (last_lnum < lnum) - last_lnum = lnum; -- parseMarker(curwin); -+ if (!did_one) -+ parseMarker(curwin); - deleteFoldMarkers(found_fp, recursive, found_off); - } -+ did_one = TRUE; - - /* redraw window */ - changed_window_setting(); -@@ -811,6 +813,10 @@ - redraw_curbuf_later(INVERTED); - #endif - } -+ else -+ /* Deleting markers may make cursor column invalid. */ -+ check_cursor_col(); -+ - if (last_lnum > 0) - changed_lines(first_lnum, (colnr_T)0, last_lnum, 0L); - } -@@ -1241,10 +1247,10 @@ - * Repeat "count" times. - */ - static void --setFoldRepeat(lnum, count, open) -+setFoldRepeat(lnum, count, do_open) - linenr_T lnum; - long count; -- int open; -+ int do_open; - { - int done; - long n; -@@ -1252,7 +1258,7 @@ - for (n = 0; n < count; ++n) - { - done = DONE_NOTHING; -- (void)setManualFold(lnum, open, FALSE, &done); -+ (void)setManualFold(lnum, do_open, FALSE, &done); - if (!(done & DONE_ACTION)) - { - /* Only give an error message when no fold could be opened. */ -diff -Naur vim72.orig/src/getchar.c vim72/src/getchar.c ---- vim72.orig/src/getchar.c 2008-07-22 17:57:48.000000000 +0100 -+++ vim72/src/getchar.c 2009-07-22 22:54:23.000000000 +0100 -@@ -1309,6 +1309,9 @@ - return OK; - } - -+static int old_char = -1; /* character put back by vungetc() */ -+static int old_mod_mask; /* mod_mask for ungotten character */ -+ - #if defined(FEAT_EVAL) || defined(FEAT_EX_EXTRA) || defined(PROTO) - - /* -@@ -1323,6 +1326,10 @@ - if (!tp->typebuf_valid) - typebuf = tp->save_typebuf; - -+ tp->old_char = old_char; -+ tp->old_mod_mask = old_mod_mask; -+ old_char = -1; -+ - tp->save_stuffbuff = stuffbuff; - stuffbuff.bh_first.b_next = NULL; - # ifdef USE_INPUT_BUF -@@ -1344,6 +1351,9 @@ - typebuf = tp->save_typebuf; - } - -+ old_char = tp->old_char; -+ old_mod_mask = tp->old_mod_mask; -+ - free_buff(&stuffbuff); - stuffbuff = tp->save_stuffbuff; - # ifdef USE_INPUT_BUF -@@ -1499,9 +1509,6 @@ - #define KL_PART_KEY -1 /* keylen value for incomplete key-code */ - #define KL_PART_MAP -2 /* keylen value for incomplete mapping */ - --static int old_char = -1; /* character put back by vungetc() */ --static int old_mod_mask; /* mod_mask for ungotten character */ -- - /* - * Get the next input character. - * Can return a special key or a multi-byte character. -@@ -3701,11 +3708,10 @@ - * Clear all mappings or abbreviations. - * 'abbr' should be FALSE for mappings, TRUE for abbreviations. - */ --/*ARGSUSED*/ - void - map_clear(cmdp, arg, forceit, abbr) - char_u *cmdp; -- char_u *arg; -+ char_u *arg UNUSED; - int forceit; - int abbr; - { -@@ -3734,13 +3740,12 @@ - /* - * Clear all mappings in "mode". - */ --/*ARGSUSED*/ - void - map_clear_int(buf, mode, local, abbr) -- buf_T *buf; /* buffer for local mappings */ -- int mode; /* mode in which to delete */ -- int local; /* TRUE for buffer-local mappings */ -- int abbr; /* TRUE for abbreviations */ -+ buf_T *buf UNUSED; /* buffer for local mappings */ -+ int mode; /* mode in which to delete */ -+ int local UNUSED; /* TRUE for buffer-local mappings */ -+ int abbr; /* TRUE for abbreviations */ - { - mapblock_T *mp, **mpp; - int hash; -@@ -3816,7 +3821,11 @@ - int len = 1; - - if (msg_didout || msg_silent != 0) -+ { - msg_putchar('\n'); -+ if (got_int) /* 'q' typed at MORE prompt */ -+ return; -+ } - if ((mp->m_mode & (INSERT + CMDLINE)) == INSERT + CMDLINE) - msg_putchar('!'); /* :map! */ - else if (mp->m_mode & INSERT) -@@ -4702,7 +4711,7 @@ - return FAIL; - if (mp->m_noremap != REMAP_YES && fprintf(fd, "nore") < 0) - return FAIL; -- if (fprintf(fd, cmd) < 0) -+ if (fputs(cmd, fd) < 0) - return FAIL; - if (buf != NULL && fputs(" ", fd) < 0) - return FAIL; -@@ -4801,7 +4810,7 @@ - } - if (IS_SPECIAL(c) || modifiers) /* special key */ - { -- if (fprintf(fd, (char *)get_special_key_name(c, modifiers)) < 0) -+ if (fputs((char *)get_special_key_name(c, modifiers), fd) < 0) - return FAIL; - continue; - } -diff -Naur vim72.orig/src/globals.h vim72/src/globals.h ---- vim72.orig/src/globals.h 2008-07-26 12:53:29.000000000 +0100 -+++ vim72/src/globals.h 2009-07-22 22:54:23.000000000 +0100 -@@ -482,8 +482,10 @@ - /* - * While executing external commands or in Ex mode, should not insert GUI - * events in the input buffer: Set hold_gui_events to non-zero. -+ * -+ * volatile because it is used in signal handler sig_sysmouse(). - */ --EXTERN int hold_gui_events INIT(= 0); -+EXTERN volatile int hold_gui_events INIT(= 0); - - /* - * When resizing the shell is postponed, remember the new size, and call -@@ -507,6 +509,7 @@ - EXTERN int clip_unnamed INIT(= FALSE); - EXTERN int clip_autoselect INIT(= FALSE); - EXTERN int clip_autoselectml INIT(= FALSE); -+EXTERN int clip_html INIT(= FALSE); - EXTERN regprog_T *clip_exclude_prog INIT(= NULL); - #endif - -@@ -522,7 +525,7 @@ - EXTERN win_T *prevwin INIT(= NULL); /* previous window */ - # define W_NEXT(wp) ((wp)->w_next) - # define FOR_ALL_WINDOWS(wp) for (wp = firstwin; wp != NULL; wp = wp->w_next) --#define FOR_ALL_TAB_WINDOWS(tp, wp) \ -+# define FOR_ALL_TAB_WINDOWS(tp, wp) \ - for ((tp) = first_tabpage; (tp) != NULL; (tp) = (tp)->tp_next) \ - for ((wp) = ((tp) == curtab) \ - ? firstwin : (tp)->tp_firstwin; (wp); (wp) = (wp)->w_next) -@@ -536,6 +539,10 @@ - - EXTERN win_T *curwin; /* currently active window */ - -+#ifdef FEAT_AUTOCMD -+EXTERN win_T *aucmd_win; /* window used in aucmd_prepbuf() */ -+#endif -+ - /* - * The window layout is kept in a tree of frames. topframe points to the top - * of the tree. -@@ -597,7 +604,8 @@ - EXTERN int really_exiting INIT(= FALSE); - /* TRUE when we are sure to exit, e.g., after - * a deadly signal */ --EXTERN int full_screen INIT(= FALSE); -+/* 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 */ - -@@ -616,6 +624,11 @@ - EXTERN int curbuf_lock INIT(= 0); - /* non-zero when the current buffer can't be - * changed. Used for FileChangedRO. */ -+EXTERN int allbuf_lock INIT(= 0); -+ /* non-zero when no buffer name can be -+ * changed, no buffer can be deleted and -+ * current directory can't be changed. -+ * Used for SwapExists et al. */ - #endif - #ifdef FEAT_EVAL - # define HAVE_SANDBOX -@@ -710,7 +723,7 @@ - - EXTERN pos_T saved_cursor /* w_cursor before formatting text. */ - # ifdef DO_INIT -- = INIT_POS_T -+ = INIT_POS_T(0, 0, 0) - # endif - ; - -@@ -739,10 +752,12 @@ - */ - EXTERN JMP_BUF lc_jump_env; /* argument to SETJMP() */ - # ifdef SIGHASARG --EXTERN int lc_signal; /* catched signal number, 0 when no was signal -- catched; used for mch_libcall() */ -+/* 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 --EXTERN int lc_active INIT(= FALSE); /* TRUE when lc_jump_env is valid. */ -+/* 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,11 +815,14 @@ - */ - /* length of char in bytes, including following composing chars */ - EXTERN int (*mb_ptr2len) __ARGS((char_u *p)) INIT(= latin_ptr2len); -+/* idem, with limit on string length */ -+EXTERN int (*mb_ptr2len_len) __ARGS((char_u *p, int size)) INIT(= latin_ptr2len_len); - /* byte length of char */ - EXTERN int (*mb_char2len) __ARGS((int c)) INIT(= latin_char2len); - /* convert char to bytes, return the length */ - EXTERN int (*mb_char2bytes) __ARGS((int c, char_u *buf)) INIT(= latin_char2bytes); - EXTERN int (*mb_ptr2cells) __ARGS((char_u *p)) INIT(= latin_ptr2cells); -+EXTERN int (*mb_ptr2cells_len) __ARGS((char_u *p, int size)) INIT(= latin_ptr2cells_len); - EXTERN int (*mb_char2cells) __ARGS((int c)) INIT(= latin_char2cells); - EXTERN int (*mb_off2cells) __ARGS((unsigned off, unsigned max_off)) INIT(= latin_off2cells); - EXTERN int (*mb_ptr2char) __ARGS((char_u *p)) INIT(= latin_ptr2char); -@@ -950,7 +968,7 @@ - ; - EXTERN typebuf_T typebuf /* typeahead buffer */ - #ifdef DO_INIT -- = {NULL, NULL} -+ = {NULL, NULL, 0, 0, 0, 0, 0, 0, 0} - #endif - ; - #ifdef FEAT_EX_EXTRA -@@ -986,7 +1004,8 @@ - EXTERN FILE *scriptout INIT(= NULL); /* stream to write script to */ - EXTERN int read_cmd_fd INIT(= 0); /* fd to read commands from */ - --EXTERN int got_int INIT(= FALSE); /* set to TRUE when interrupt -+/* 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 */ -@@ -1022,12 +1041,13 @@ - #endif - #ifdef FEAT_AUTOCMD - EXTERN char_u *autocmd_fname INIT(= NULL); /* fname for on cmdline */ -+EXTERN int autocmd_fname_full; /* autocmd_fname is full path */ - EXTERN int autocmd_bufnr INIT(= 0); /* fnum for on cmdline */ - EXTERN char_u *autocmd_match INIT(= NULL); /* name for on cmdline */ - EXTERN int did_cursorhold INIT(= FALSE); /* set when CursorHold t'gerd */ - EXTERN pos_T last_cursormoved /* for CursorMoved event */ - # ifdef DO_INIT -- = INIT_POS_T -+ = INIT_POS_T(0, 0, 0) - # endif - ; - #endif -@@ -1339,7 +1359,6 @@ - - #ifdef FEAT_NETBEANS_INTG - EXTERN char *netbeansArg INIT(= NULL); /* the -nb[:host:port:passwd] arg */ --EXTERN int netbeansCloseFile INIT(= 0); /* send killed if != 0 */ - EXTERN int netbeansFireChanges INIT(= 1); /* send buffer changes if != 0 */ - EXTERN int netbeansForcedQuit INIT(= 0);/* don't write modified files */ - EXTERN int netbeansReadFile INIT(= 1); /* OK to read from disk if != 0 */ -@@ -1548,6 +1567,14 @@ - EXTERN time_t starttime; - - /* -+ * Some compilers warn for not using a return value, but in some situations we -+ * can't do anything useful with the value. Assign to this variable to avoid -+ * the warning. -+ */ -+EXTERN int ignored; -+EXTERN char *ignoredp; -+ -+/* - * Optional Farsi support. Include it here, so EXTERN and INIT are defined. - */ - #ifdef FEAT_FKMAP -diff -Naur vim72.orig/src/gui_at_fs.c vim72/src/gui_at_fs.c ---- vim72.orig/src/gui_at_fs.c 2006-05-12 10:26:24.000000000 +0100 -+++ vim72/src/gui_at_fs.c 2009-07-22 22:54:22.000000000 +0100 -@@ -829,7 +829,7 @@ - text.format = FMT8BIT; - - #ifdef XtNinternational -- if (_XawTextFormat((TextWidget)selFileField) == XawFmtWide) -+ if ((unsigned long)_XawTextFormat((TextWidget)selFileField) == XawFmtWide) - { - XawTextReplace(selFileField, (XawTextPosition)0, - (XawTextPosition)WcsLen((wchar_t *)&SFtextBuffer[0]), &text); -@@ -851,17 +851,15 @@ - #endif - } - --/* ARGSUSED */ - static void - SFbuttonPressList(w, n, event) -- Widget w; -- int n; -- XButtonPressedEvent *event; -+ Widget w UNUSED; -+ int n UNUSED; -+ XButtonPressedEvent *event UNUSED; - { - SFbuttonPressed = 1; - } - --/* ARGSUSED */ - static void - SFbuttonReleaseList(w, n, event) - Widget w; -@@ -989,11 +987,10 @@ - return result; - } - --/* ARGSUSED */ - static void - SFdirModTimer(cl, id) -- XtPointer cl; -- XtIntervalId *id; -+ XtPointer cl UNUSED; -+ XtIntervalId *id UNUSED; - { - static int n = -1; - static int f = 0; -@@ -1596,11 +1593,10 @@ - - static void SFscrollTimer __ARGS((XtPointer p, XtIntervalId *id)); - --/* ARGSUSED */ - static void - SFscrollTimer(p, id) - XtPointer p; -- XtIntervalId *id; -+ XtIntervalId *id UNUSED; - { - SFDir *dir; - int save; -@@ -1695,10 +1691,9 @@ - } - } - --/* ARGSUSED */ - static void - SFenterList(w, n, event) -- Widget w; -+ Widget w UNUSED; - int n; - XEnterWindowEvent *event; - { -@@ -1719,12 +1714,11 @@ - } - } - --/* ARGSUSED */ - static void - SFleaveList(w, n, event) -- Widget w; -+ Widget w UNUSED; - int n; -- XEvent *event; -+ XEvent *event UNUSED; - { - if (SFcurrentInvert[n] != -1) - { -@@ -1733,10 +1727,9 @@ - } - } - --/* ARGSUSED */ - static void - SFmotionList(w, n, event) -- Widget w; -+ Widget w UNUSED; - int n; - XMotionEvent *event; - { -@@ -1754,7 +1747,6 @@ - } - } - --/* ARGSUSED */ - static void - SFvFloatSliderMovedCallback(w, n, fnew) - Widget w; -@@ -1767,10 +1759,9 @@ - SFvSliderMovedCallback(w, (int)(long)n, nw); - } - --/* ARGSUSED */ - static void - SFvSliderMovedCallback(w, n, nw) -- Widget w; -+ Widget w UNUSED; - int n; - int nw; - { -@@ -1853,10 +1844,9 @@ - } - } - --/* ARGSUSED */ - static void - SFvAreaSelectedCallback(w, n, pnew) -- Widget w; -+ Widget w; - XtPointer n; - XtPointer pnew; - { -@@ -1914,10 +1904,9 @@ - SFvSliderMovedCallback(w, (int)(long)n, nw); - } - --/* ARGSUSED */ - static void - SFhSliderMovedCallback(w, n, nw) -- Widget w; -+ Widget w UNUSED; - XtPointer n; - XtPointer nw; - { -@@ -1933,10 +1922,9 @@ - SFdrawList((int)(long)n, SF_DO_NOT_SCROLL); - } - --/* ARGSUSED */ - static void - SFhAreaSelectedCallback(w, n, pnew) -- Widget w; -+ Widget w; - XtPointer n; - XtPointer pnew; - { -@@ -1994,11 +1982,10 @@ - } - } - --/* ARGSUSED */ - static void - SFpathSliderMovedCallback(w, client_data, nw) -- Widget w; -- XtPointer client_data; -+ Widget w UNUSED; -+ XtPointer client_data UNUSED; - XtPointer nw; - { - SFDir *dir; -@@ -2031,11 +2018,10 @@ - XawTextSetInsertionPoint(selFileField, pos); - } - --/* ARGSUSED */ - static void - SFpathAreaSelectedCallback(w, client_data, pnew) - Widget w; -- XtPointer client_data; -+ XtPointer client_data UNUSED; - XtPointer pnew; - { - int nw = (int)(long)pnew; -@@ -2206,13 +2192,12 @@ - - static void SFexposeList __ARGS((Widget w, XtPointer n, XEvent *event, Boolean *cont)); - --/* ARGSUSED */ - static void - SFexposeList(w, n, event, cont) -- Widget w; -+ Widget w UNUSED; - XtPointer n; - XEvent *event; -- Boolean *cont; -+ Boolean *cont UNUSED; - { - if ((event->type == NoExpose) || event->xexpose.count) - return; -@@ -2222,13 +2207,12 @@ - - static void SFmodVerifyCallback __ARGS((Widget w, XtPointer client_data, XEvent *event, Boolean *cont)); - --/* ARGSUSED */ - static void - SFmodVerifyCallback(w, client_data, event, cont) -- Widget w; -- XtPointer client_data; -+ Widget w UNUSED; -+ XtPointer client_data UNUSED; - XEvent *event; -- Boolean *cont; -+ Boolean *cont UNUSED; - { - char buf[2]; - -@@ -2241,11 +2225,11 @@ - - static void SFokCallback __ARGS((Widget w, XtPointer cl, XtPointer cd)); - --/* ARGSUSED */ - static void - SFokCallback(w, cl, cd) -- Widget w; -- XtPointer cl, cd; -+ Widget w UNUSED; -+ XtPointer cl UNUSED; -+ XtPointer cd UNUSED; - { - SFstatus = SEL_FILE_OK; - } -@@ -2258,11 +2242,11 @@ - - static void SFcancelCallback __ARGS((Widget w, XtPointer cl, XtPointer cd)); - --/* ARGSUSED */ - static void - SFcancelCallback(w, cl, cd) -- Widget w; -- XtPointer cl, cd; -+ Widget w UNUSED; -+ XtPointer cl UNUSED; -+ XtPointer cd UNUSED; - { - SFstatus = SEL_FILE_CANCEL; - } -@@ -2275,16 +2259,15 @@ - - static void SFdismissAction __ARGS((Widget w, XEvent *event, String *params, Cardinal *num_params)); - --/* ARGSUSED */ - static void - SFdismissAction(w, event, params, num_params) -- Widget w; -- XEvent *event; -- String *params; -- Cardinal *num_params; -+ Widget w UNUSED; -+ XEvent *event; -+ String *params UNUSED; -+ Cardinal *num_params UNUSED; - { -- if (event->type == ClientMessage && -- event->xclient.data.l[0] != SFwmDeleteWindow) -+ if (event->type == ClientMessage -+ && (Atom)event->xclient.data.l[0] != SFwmDeleteWindow) - return; - - SFstatus = SEL_FILE_CANCEL; -@@ -2703,7 +2686,7 @@ - SFtextChanged() - { - #if defined(FEAT_XFONTSET) && defined(XtNinternational) -- if (_XawTextFormat((TextWidget)selFileField) == XawFmtWide) -+ if ((unsigned long)_XawTextFormat((TextWidget)selFileField) == XawFmtWide) - { - wchar_t *wcbuf=(wchar_t *)SFtextBuffer; - -@@ -2749,7 +2732,7 @@ - #if defined(FEAT_XFONTSET) && defined(XtNinternational) - char *buf; - -- if (_XawTextFormat((TextWidget)selFileField) == XawFmtWide) -+ if ((unsigned long)_XawTextFormat((TextWidget)selFileField) == XawFmtWide) - { - wchar_t *wcbuf; - int mbslength; -diff -Naur vim72.orig/src/gui_athena.c vim72/src/gui_athena.c ---- vim72.orig/src/gui_athena.c 2008-06-21 20:38:58.000000000 +0100 -+++ vim72/src/gui_athena.c 2009-07-22 22:54:22.000000000 +0100 -@@ -86,10 +86,9 @@ - * Scrollbar callback (XtNjumpProc) for when the scrollbar is dragged with the - * left or middle mouse button. - */ --/* ARGSUSED */ - static void - gui_athena_scroll_cb_jump(w, client_data, call_data) -- Widget w; -+ Widget w UNUSED; - XtPointer client_data, call_data; - { - scrollbar_T *sb, *sb_info; -@@ -122,10 +121,9 @@ - * Scrollbar callback (XtNscrollProc) for paging up or down with the left or - * right mouse buttons. - */ --/* ARGSUSED */ - static void - gui_athena_scroll_cb_scroll(w, client_data, call_data) -- Widget w; -+ Widget w UNUSED; - XtPointer client_data, call_data; - { - scrollbar_T *sb, *sb_info; -@@ -492,7 +490,7 @@ - if (menu->icon_builtin || gui_find_bitmap(menu->name, buf, "xpm") == FAIL) - { - if (menu->iconidx >= 0 && menu->iconidx -- < (sizeof(built_in_pixmaps) / sizeof(built_in_pixmaps[0]))) -+ < (int)(sizeof(built_in_pixmaps) / sizeof(built_in_pixmaps[0]))) - xpm = built_in_pixmaps[menu->iconidx]; - else - xpm = tb_blank_xpm; -@@ -763,7 +761,7 @@ - XtGetValues(XtParent(widget), args, n); - - retval = num_children; -- for (i = 0; i < num_children; ++i) -+ for (i = 0; i < (int)num_children; ++i) - { - Widget current = children[i]; - vimmenu_T *menu = NULL; -@@ -780,11 +778,10 @@ - return retval; - } - --/* ARGSUSED */ - void - gui_mch_add_menu(menu, idx) - vimmenu_T *menu; -- int idx; -+ int idx UNUSED; - { - char_u *pullright_name; - Dimension height, space, border; -@@ -869,7 +866,7 @@ - XtVaGetValues(parent->submenu_id, XtNchildren, &children, - XtNnumChildren, &num_children, - NULL); -- for (i = 0; i < num_children; ++i) -+ for (i = 0; i < (int)num_children; ++i) - { - XtVaSetValues(children[i], - XtNrightMargin, puller_width, -@@ -913,7 +910,7 @@ - XtVaGetValues(id, XtNchildren, &children, - XtNnumChildren, &num_children, - NULL); -- for (i = 0; i < num_children; ++i) -+ for (i = 0; i < (int)num_children; ++i) - { - if (children[i] == ignore) - continue; -@@ -1175,11 +1172,10 @@ - return pname; - } - --/* ARGSUSED */ - void - gui_mch_add_menu_item(menu, idx) - vimmenu_T *menu; -- int idx; -+ int idx UNUSED; - { - vimmenu_T *parent = menu->parent; - -@@ -1444,7 +1440,7 @@ - XtNchildren, &children, - XtNnumChildren, &numChildren, - NULL); -- for (i = 0; i < numChildren; i++) -+ for (i = 0; i < (int)numChildren; i++) - { - whgt = 0; - -@@ -1473,10 +1469,9 @@ - #endif - - --/* ARGSUSED */ - void - gui_mch_toggle_tearoffs(enable) -- int enable; -+ int enable UNUSED; - { - /* no tearoff menus */ - } -@@ -1537,7 +1532,7 @@ - else - get_left_margin = True; - -- for (i = 0; i < num_children; ++i) -+ for (i = 0; i < (int)num_children; ++i) - { - if (children[i] == menu->id) - continue; -@@ -1645,11 +1640,10 @@ - } - } - --/*ARGSUSED*/ - static void - gui_athena_menu_timeout(client_data, id) - XtPointer client_data; -- XtIntervalId *id; -+ XtIntervalId *id UNUSED; - { - Widget w = (Widget)client_data; - Widget popup; -@@ -1678,12 +1672,11 @@ - * - * This is called when XtPopup() is called. - */ --/*ARGSUSED*/ - static void - gui_athena_popup_callback(w, client_data, call_data) - Widget w; - XtPointer client_data; -- XtPointer call_data; -+ XtPointer call_data UNUSED; - { - /* Assumption: XtIsSubclass(XtParent(w),simpleMenuWidgetClass) */ - vimmenu_T *menu = (vimmenu_T *)client_data; -@@ -1711,7 +1704,6 @@ - NULL); - } - --/* ARGSUSED */ - static void - gui_athena_popdown_submenus_action(w, event, args, nargs) - Widget w; -@@ -1756,7 +1748,6 @@ - return False; - } - --/* ARGSUSED */ - static void - gui_athena_delayed_arm_action(w, event, args, nargs) - Widget w; -@@ -1837,7 +1828,6 @@ - * (XtIsSubclass(popup,simpleMenuWidgetClass) == True) */ - } - --/* ARGSUSED */ - void - gui_mch_show_popupmenu(menu) - vimmenu_T *menu; -@@ -2046,15 +2036,14 @@ - * Put up a file requester. - * Returns the selected name in allocated memory, or NULL for Cancel. - */ --/* ARGSUSED */ - char_u * - gui_mch_browse(saving, title, dflt, ext, initdir, filter) -- int saving; /* select file to write */ -- char_u *title; /* not used (title for the window) */ -- char_u *dflt; /* not used (default name) */ -- char_u *ext; /* not used (extension added) */ -+ int saving UNUSED; /* select file to write */ -+ char_u *title; /* title for the window */ -+ char_u *dflt; /* default name */ -+ char_u *ext UNUSED; /* extension added */ - char_u *initdir; /* initial directory, NULL for current dir */ -- char_u *filter; /* not used (file name filter) */ -+ char_u *filter UNUSED; /* file name filter */ - { - Position x, y; - char_u dirbuf[MAXPATHL]; -@@ -2100,13 +2089,12 @@ - * Callback function for the textfield. When CR is hit this works like - * hitting the "OK" button, ESC like "Cancel". - */ --/* ARGSUSED */ - static void - keyhit_callback(w, client_data, event, cont) -- Widget w; -- XtPointer client_data; -+ Widget w UNUSED; -+ XtPointer client_data UNUSED; - XEvent *event; -- Boolean *cont; -+ Boolean *cont UNUSED; - { - char buf[2]; - -@@ -2119,12 +2107,11 @@ - } - } - --/* ARGSUSED */ - static void - butproc(w, client_data, call_data) -- Widget w; -+ Widget w UNUSED; - XtPointer client_data; -- XtPointer call_data; -+ XtPointer call_data UNUSED; - { - dialogStatus = (int)(long)client_data + 1; - } -@@ -2132,27 +2119,25 @@ - /* - * Function called when dialog window closed. - */ --/*ARGSUSED*/ - static void - dialog_wm_handler(w, client_data, event, dum) -- Widget w; -- XtPointer client_data; -+ Widget w UNUSED; -+ XtPointer client_data UNUSED; - XEvent *event; -- Boolean *dum; -+ Boolean *dum UNUSED; - { - if (event->type == ClientMessage -- && ((XClientMessageEvent *)event)->data.l[0] == dialogatom) -+ && (Atom)((XClientMessageEvent *)event)->data.l[0] == dialogatom) - dialogStatus = 0; - } - --/* ARGSUSED */ - int - gui_mch_dialog(type, title, message, buttons, dfltbutton, textfield) -- int type; -+ int type UNUSED; - char_u *title; - char_u *message; - char_u *buttons; -- int dfltbutton; -+ int dfltbutton UNUSED; - char_u *textfield; - { - char_u *buts; -diff -Naur vim72.orig/src/gui_at_sb.c vim72/src/gui_at_sb.c ---- vim72.orig/src/gui_at_sb.c 2004-06-07 15:32:25.000000000 +0100 -+++ vim72/src/gui_at_sb.c 2009-07-22 22:54:22.000000000 +0100 -@@ -198,10 +198,13 @@ - /* extension */ NULL - }, - { /* simple fields */ -- /* change_sensitive */ XtInheritChangeSensitive -+ /* change_sensitive */ XtInheritChangeSensitive, -+#ifndef OLDXAW -+ /* extension */ NULL -+#endif - }, - { /* scrollbar fields */ -- /* ignore */ 0 -+ /* empty */ 0 - } - }; - -@@ -241,7 +244,8 @@ - - if (bottom <= 0 || bottom <= top) - return; -- if ((sw = sbw->scrollbar.shadow_width) < 0) -+ sw = sbw->scrollbar.shadow_width; -+ if (sw < 0) - sw = 0; - margin = MARGIN (sbw); - floor = sbw->scrollbar.length - margin + 2; -@@ -516,13 +520,12 @@ - } - } - --/* ARGSUSED */ - static void - Initialize(request, new, args, num_args) -- Widget request; /* what the client asked for */ -+ Widget request UNUSED; /* what the client asked for */ - Widget new; /* what we're going to give him */ -- ArgList args; -- Cardinal *num_args; -+ ArgList args UNUSED; -+ Cardinal *num_args UNUSED; - { - ScrollbarWidget sbw = (ScrollbarWidget) new; - -@@ -556,14 +559,13 @@ - (w, valueMask, attributes); - } - --/* ARGSUSED */ - static Boolean - SetValues(current, request, desired, args, num_args) -- Widget current, /* what I am */ -- request, /* what he wants me to be */ -- desired; /* what I will become */ -- ArgList args; -- Cardinal *num_args; -+ Widget current; /* what I am */ -+ Widget request UNUSED; /* what he wants me to be */ -+ Widget desired; /* what I will become */ -+ ArgList args UNUSED; -+ Cardinal *num_args UNUSED; - { - ScrollbarWidget sbw = (ScrollbarWidget) current; - ScrollbarWidget dsbw = (ScrollbarWidget) desired; -@@ -609,7 +611,6 @@ - } - - --/* ARGSUSED */ - static void - Redisplay(w, event, region) - Widget w; -@@ -789,11 +790,10 @@ - } - } - --/* ARGSUSED */ - static void - RepeatNotify(client_data, idp) - XtPointer client_data; -- XtIntervalId *idp; -+ XtIntervalId *idp UNUSED; - { - ScrollbarWidget sbw = (ScrollbarWidget) client_data; - int call_data; -@@ -839,46 +839,42 @@ - return (num < small) ? small : ((num > big) ? big : num); - } - --/* ARGSUSED */ - static void - ScrollOneLineUp(w, event, params, num_params) - Widget w; - XEvent *event; -- String *params; -- Cardinal *num_params; -+ String *params UNUSED; -+ Cardinal *num_params UNUSED; - { - ScrollSome(w, event, -ONE_LINE_DATA); - } - --/* ARGSUSED */ - static void - ScrollOneLineDown(w, event, params, num_params) - Widget w; - XEvent *event; -- String *params; -- Cardinal *num_params; -+ String *params UNUSED; -+ Cardinal *num_params UNUSED; - { - ScrollSome(w, event, ONE_LINE_DATA); - } - --/* ARGSUSED */ - static void - ScrollPageDown(w, event, params, num_params) - Widget w; - XEvent *event; -- String *params; -- Cardinal *num_params; -+ String *params UNUSED; -+ Cardinal *num_params UNUSED; - { - ScrollSome(w, event, ONE_PAGE_DATA); - } - --/* ARGSUSED */ - static void - ScrollPageUp(w, event, params, num_params) - Widget w; - XEvent *event; -- String *params; -- Cardinal *num_params; -+ String *params UNUSED; -+ Cardinal *num_params UNUSED; - { - ScrollSome(w, event, -ONE_PAGE_DATA); - } -@@ -901,13 +897,12 @@ - XtCallCallbacks(w, XtNscrollProc, (XtPointer)call_data); - } - --/* ARGSUSED */ - static void - NotifyScroll(w, event, params, num_params) - Widget w; - XEvent *event; -- String *params; -- Cardinal *num_params; -+ String *params UNUSED; -+ Cardinal *num_params UNUSED; - { - ScrollbarWidget sbw = (ScrollbarWidget) w; - Position x, y, loc; -@@ -991,13 +986,12 @@ - delay, RepeatNotify, (XtPointer)w); - } - --/* ARGSUSED */ - static void - EndScroll(w, event, params, num_params) - Widget w; -- XEvent *event; /* unused */ -- String *params; /* unused */ -- Cardinal *num_params; /* unused */ -+ XEvent *event UNUSED; -+ String *params UNUSED; -+ Cardinal *num_params UNUSED; - { - ScrollbarWidget sbw = (ScrollbarWidget) w; - -@@ -1023,13 +1017,12 @@ - return PICKLENGTH(sbw, x / width, y / height); - } - --/* ARGSUSED */ - static void - MoveThumb(w, event, params, num_params) - Widget w; - XEvent *event; -- String *params; /* unused */ -- Cardinal *num_params; /* unused */ -+ String *params UNUSED; -+ Cardinal *num_params UNUSED; - { - ScrollbarWidget sbw = (ScrollbarWidget)w; - Position x, y; -@@ -1069,15 +1062,20 @@ - } - - --/* ARGSUSED */ - static void - NotifyThumb(w, event, params, num_params) - Widget w; - XEvent *event; -- String *params; /* unused */ -- Cardinal *num_params; /* unused */ -+ String *params UNUSED; -+ Cardinal *num_params UNUSED; - { - ScrollbarWidget sbw = (ScrollbarWidget)w; -+ /* Use a union to avoid a warning for the weird conversion from float to -+ * XtPointer. Comes from Xaw/Scrollbar.c. */ -+ union { -+ XtPointer xtp; -+ float xtf; -+ } xtpf; - - if (LookAhead(w, event)) - return; -@@ -1085,11 +1083,11 @@ - /* thumbProc is not pretty, but is necessary for backwards - compatibility on those architectures for which it work{s,ed}; - the intent is to pass a (truncated) float by value. */ -- XtCallCallbacks(w, XtNthumbProc, *(XtPointer*)&sbw->scrollbar.top); -+ xtpf.xtf = sbw->scrollbar.top; -+ XtCallCallbacks(w, XtNthumbProc, xtpf.xtp); - XtCallCallbacks(w, XtNjumpProc, (XtPointer)&sbw->scrollbar.top); - } - --/* ARGSUSED */ - static void - AllocTopShadowGC(w) - Widget w; -@@ -1103,7 +1101,6 @@ - sbw->scrollbar.top_shadow_GC = XtGetGC(w, valuemask, &myXGCV); - } - --/* ARGSUSED */ - static void - AllocBotShadowGC(w) - Widget w; -@@ -1117,11 +1114,10 @@ - sbw->scrollbar.bot_shadow_GC = XtGetGC(w, valuemask, &myXGCV); - } - --/* ARGSUSED */ - static void - _Xaw3dDrawShadows(gw, event, region, out) - Widget gw; -- XEvent *event; -+ XEvent *event UNUSED; - Region region; - int out; - { -diff -Naur vim72.orig/src/gui_beval.c vim72/src/gui_beval.c ---- vim72.orig/src/gui_beval.c 2007-05-07 20:33:41.000000000 +0100 -+++ vim72/src/gui_beval.c 2009-07-22 22:54:22.000000000 +0100 -@@ -15,11 +15,10 @@ - /* - * Common code, invoked when the mouse is resting for a moment. - */ --/*ARGSUSED*/ - void - general_beval_cb(beval, state) - BalloonEval *beval; -- int state; -+ int state UNUSED; - { - win_T *wp; - int col; -@@ -551,9 +550,8 @@ - return FALSE; /* continue emission */ - } - --/*ARGSUSED*/ - static gint --mainwin_event_cb(GtkWidget *widget, GdkEvent *event, gpointer data) -+mainwin_event_cb(GtkWidget *widget UNUSED, GdkEvent *event, gpointer data) - { - BalloonEval *beval = (BalloonEval *)data; - -@@ -663,9 +661,10 @@ - return FALSE; /* don't call me again */ - } - --/*ARGSUSED2*/ - static gint --balloon_expose_event_cb(GtkWidget *widget, GdkEventExpose *event, gpointer data) -+balloon_expose_event_cb(GtkWidget *widget, -+ GdkEventExpose *event, -+ gpointer data UNUSED) - { - gtk_paint_flat_box(widget->style, widget->window, - GTK_STATE_NORMAL, GTK_SHADOW_OUT, -@@ -676,7 +675,6 @@ - } - - # ifndef HAVE_GTK2 --/*ARGSUSED2*/ - static void - balloon_draw_cb(GtkWidget *widget, GdkRectangle *area, gpointer data) - { -@@ -726,13 +724,12 @@ - /* - * The X event handler. All it does is call the real event handler. - */ --/*ARGSUSED*/ - static void - pointerEventEH(w, client_data, event, unused) -- Widget w; -+ Widget w UNUSED; - XtPointer client_data; - XEvent *event; -- Boolean *unused; -+ Boolean *unused UNUSED; - { - BalloonEval *beval = (BalloonEval *)client_data; - pointerEvent(beval, event); -@@ -877,11 +874,10 @@ - } - } - --/*ARGSUSED*/ - static void - timerRoutine(dx, id) - XtPointer dx; -- XtIntervalId *id; -+ XtIntervalId *id UNUSED; - { - BalloonEval *beval = (BalloonEval *)dx; - -@@ -1291,6 +1287,23 @@ - XtNy, ty, - NULL); - #endif -+ /* Set tooltip colors */ -+ { -+ Arg args[2]; -+ -+#ifdef FEAT_GUI_MOTIF -+ args[0].name = XmNbackground; -+ args[0].value = gui.tooltip_bg_pixel; -+ args[1].name = XmNforeground; -+ args[1].value = gui.tooltip_fg_pixel; -+#else /* Athena */ -+ args[0].name = XtNbackground; -+ args[0].value = gui.tooltip_bg_pixel; -+ args[1].name = XtNforeground; -+ args[1].value = gui.tooltip_fg_pixel; -+#endif -+ XtSetValues(beval->balloonLabel, &args[0], XtNumber(args)); -+ } - - XtPopup(beval->balloonShell, XtGrabNone); - -diff -Naur vim72.orig/src/gui.c vim72/src/gui.c ---- vim72.orig/src/gui.c 2008-07-27 20:32:14.000000000 +0100 -+++ vim72/src/gui.c 2009-07-22 22:54:23.000000000 +0100 -@@ -139,7 +139,7 @@ - /* The read returns when the child closes the pipe (or when - * the child dies for some reason). */ - close(pipefd[1]); -- (void)read(pipefd[0], &dummy, (size_t)1); -+ ignored = (int)read(pipefd[0], &dummy, (size_t)1); - close(pipefd[0]); - } - -@@ -678,11 +678,10 @@ - * Return OK when able to set the font. When it failed FAIL is returned and - * the fonts are unchanged. - */ --/*ARGSUSED*/ - int - gui_init_font(font_list, fontset) - char_u *font_list; -- int fontset; -+ int fontset UNUSED; - { - #define FONTLEN 320 - char_u font_name[FONTLEN]; -@@ -960,7 +959,7 @@ - guicolor_T fg, bg; - - if ( --# ifdef HAVE_GTK2 -+# if defined(HAVE_GTK2) && !defined(FEAT_HANGULIN) - preedit_get_status() - # else - im_get_status() -@@ -1138,10 +1137,9 @@ - * Position the various GUI components (text area, menu). The vertical - * scrollbars are NOT handled here. See gui_update_scrollbars(). - */ --/*ARGSUSED*/ - static void - gui_position_components(total_width) -- int total_width; -+ int total_width UNUSED; - { - int text_area_x; - int text_area_y; -@@ -1374,10 +1372,9 @@ - * If "fit_to_display" is TRUE then the size may be reduced to fit the window - * on the screen. - */ --/*ARGSUSED*/ - void - gui_set_shellsize(mustset, fit_to_display, direction) -- int mustset; /* set by the user */ -+ int mustset UNUSED; /* set by the user */ - int fit_to_display; - int direction; /* RESIZE_HOR, RESIZE_VER */ - { -@@ -3120,10 +3117,9 @@ - * If "oldval" is not NULL, "oldval" is the previous value, the new value is - * in p_go. - */ --/*ARGSUSED*/ - void - gui_init_which_components(oldval) -- char_u *oldval; -+ char_u *oldval UNUSED; - { - #ifdef FEAT_MENU - static int prev_menu_is_active = -1; -@@ -3241,7 +3237,7 @@ - i = Rows; - gui_update_tabline(); - Rows = i; -- need_set_size = RESIZE_VERT; -+ need_set_size |= RESIZE_VERT; - if (using_tabline) - fix_size = TRUE; - if (!gui_use_tabline()) -@@ -3275,9 +3271,9 @@ - if (gui.which_scrollbars[i] != prev_which_scrollbars[i]) - { - if (i == SBAR_BOTTOM) -- need_set_size = RESIZE_VERT; -+ need_set_size |= RESIZE_VERT; - else -- need_set_size = RESIZE_HOR; -+ need_set_size |= RESIZE_HOR; - if (gui.which_scrollbars[i]) - fix_size = TRUE; - } -@@ -3297,7 +3293,7 @@ - gui_mch_enable_menu(gui.menu_is_active); - Rows = i; - prev_menu_is_active = gui.menu_is_active; -- need_set_size = RESIZE_VERT; -+ need_set_size |= RESIZE_VERT; - if (gui.menu_is_active) - fix_size = TRUE; - } -@@ -3308,7 +3304,7 @@ - { - gui_mch_show_toolbar(using_toolbar); - prev_toolbar = using_toolbar; -- need_set_size = RESIZE_VERT; -+ need_set_size |= RESIZE_VERT; - if (using_toolbar) - fix_size = TRUE; - } -@@ -3318,7 +3314,7 @@ - { - gui_mch_enable_footer(using_footer); - prev_footer = using_footer; -- need_set_size = RESIZE_VERT; -+ need_set_size |= RESIZE_VERT; - if (using_footer) - fix_size = TRUE; - } -@@ -3330,10 +3326,11 @@ - prev_tearoff = using_tearoff; - } - #endif -- if (need_set_size) -+ if (need_set_size != 0) - { - #ifdef FEAT_GUI_GTK -- long c = Columns; -+ long prev_Columns = Columns; -+ long prev_Rows = Rows; - #endif - /* Adjust the size of the window to make the text area keep the - * same size and to avoid that part of our window is off-screen -@@ -3349,11 +3346,14 @@ - * If you remove this, please test this command for resizing - * effects (with optional left scrollbar): ":vsp|q|vsp|q|vsp|q". - * Don't do this while starting up though. -- * And don't change Rows, it may have be reduced intentionally -- * when adding menu/toolbar/tabline. */ -- if (!gui.starting) -+ * Don't change Rows when adding menu/toolbar/tabline. -+ * Don't change Columns when adding vertical toolbar. */ -+ if (!gui.starting && need_set_size != (RESIZE_VERT | RESIZE_HOR)) - (void)char_avail(); -- Columns = c; -+ if ((need_set_size & RESIZE_VERT) == 0) -+ Rows = prev_Rows; -+ if ((need_set_size & RESIZE_HOR) == 0) -+ Columns = prev_Columns; - #endif - } - #ifdef FEAT_WINDOWS -@@ -3879,6 +3879,21 @@ - * Scrollbar stuff: - */ - -+/* -+ * Called when something in the window layout has changed. -+ */ -+ void -+gui_may_update_scrollbars() -+{ -+ if (gui.in_use && starting == 0) -+ { -+ out_flush(); -+ gui_init_which_components(NULL); -+ gui_update_scrollbars(TRUE); -+ } -+ need_mouse_correct = TRUE; -+} -+ - void - gui_update_scrollbars(force) - int force; /* Force all scrollbars to get updated */ -@@ -4407,7 +4422,7 @@ - if (curwin->w_p_wrap) - return FALSE; - -- if (curwin->w_leftcol == scrollbar_value) -+ if ((long_u)curwin->w_leftcol == scrollbar_value) - return FALSE; - - curwin->w_leftcol = (colnr_T)scrollbar_value; -@@ -4420,7 +4435,7 @@ - && longest_lnum < curwin->w_botline - && !virtual_active()) - { -- if (scrollbar_value > scroll_line_len(curwin->w_cursor.lnum)) -+ if (scrollbar_value > (long_u)scroll_line_len(curwin->w_cursor.lnum)) - { - curwin->w_cursor.lnum = longest_lnum; - curwin->w_cursor.col = 0; -@@ -4666,11 +4681,10 @@ - /* - * Find window where the mouse pointer "y" coordinate is in. - */ --/*ARGSUSED*/ - static win_T * - xy2win(x, y) -- int x; -- int y; -+ int x UNUSED; -+ int y UNUSED; - { - #ifdef FEAT_WINDOWS - int row; -@@ -5120,11 +5134,10 @@ - * of dropped files, they will be freed in this function, and caller can't use - * fnames after call this function. - */ --/*ARGSUSED*/ - void - gui_handle_drop(x, y, modifiers, fnames, count) -- int x; -- int y; -+ int x UNUSED; -+ int y UNUSED; - int_u modifiers; - char_u **fnames; - int count; -diff -Naur vim72.orig/src/gui_gtk.c vim72/src/gui_gtk.c ---- vim72.orig/src/gui_gtk.c 2008-07-31 20:48:20.000000000 +0100 -+++ vim72/src/gui_gtk.c 2009-07-22 22:54:22.000000000 +0100 -@@ -285,14 +285,14 @@ - return image; - } - --/*ARGSUSED*/ - static gint --toolbar_button_focus_in_event(GtkWidget *widget, GdkEventFocus *event, gpointer data) --{ -- /* When we're in a GtkPlug, we don't have window focus events, only widget focus. -- * To emulate stand-alone gvim, if a button gets focus (e.g., into GtkPlug) -- * immediately pass it to mainwin. -- */ -+toolbar_button_focus_in_event(GtkWidget *widget UNUSED, -+ GdkEventFocus *event UNUSED, -+ gpointer data UNUSED) -+{ -+ /* When we're in a GtkPlug, we don't have window focus events, only widget -+ * focus. To emulate stand-alone gvim, if a button gets focus (e.g., -+ * into GtkPlug) immediately pass it to mainwin. */ - if (gtk_socket_id != 0) - gtk_widget_grab_focus(gui.drawarea); - -@@ -585,9 +585,8 @@ - gtk_menu_prepend(GTK_MENU(menu->submenu_id), menu->tearoff_handle); - } - --/*ARGSUSED*/ - static void --menu_item_activate(GtkWidget *widget, gpointer data) -+menu_item_activate(GtkWidget *widget UNUSED, gpointer data) - { - gui_menu_cb((vimmenu_T *)data); - -@@ -1202,9 +1201,8 @@ - #endif - - #ifndef USE_FILE_CHOOSER --/*ARGSUSED*/ - static void --browse_ok_cb(GtkWidget *widget, gpointer cbdata) -+browse_ok_cb(GtkWidget *widget UNUSED, gpointer cbdata) - { - gui_T *vw = (gui_T *)cbdata; - -@@ -1218,9 +1216,8 @@ - gtk_main_quit(); - } - --/*ARGSUSED*/ - static void --browse_cancel_cb(GtkWidget *widget, gpointer cbdata) -+browse_cancel_cb(GtkWidget *widget UNUSED, gpointer cbdata) - { - gui_T *vw = (gui_T *)cbdata; - -@@ -1234,9 +1231,8 @@ - gtk_main_quit(); - } - --/*ARGSUSED*/ - static gboolean --browse_destroy_cb(GtkWidget * widget) -+browse_destroy_cb(GtkWidget *widget UNUSED) - { - if (gui.browse_fname != NULL) - { -@@ -1262,14 +1258,13 @@ - * initdir initial directory, NULL for current dir - * filter not used (file name filter) - */ --/*ARGSUSED*/ - char_u * --gui_mch_browse(int saving, -+gui_mch_browse(int saving UNUSED, - char_u *title, - char_u *dflt, -- char_u *ext, -+ char_u *ext UNUSED, - char_u *initdir, -- char_u *filter) -+ char_u *filter UNUSED) - { - #ifdef USE_FILE_CHOOSER - GtkWidget *fc; -@@ -1377,7 +1372,6 @@ - * dflt default name - * initdir initial directory, NULL for current dir - */ --/*ARGSUSED*/ - char_u * - gui_mch_browsedir( - char_u *title, -@@ -1460,7 +1454,6 @@ - } - - # ifdef FEAT_GUI_GNOME --/* ARGSUSED */ - static int - gui_gnome_dialog( int type, - char_u *title, -@@ -1611,7 +1604,6 @@ - GtkWidget *dialog; - } CancelData; - --/* ARGSUSED */ - static void - dlg_button_clicked(GtkWidget * widget, ButtonData *data) - { -@@ -1622,7 +1614,6 @@ - /* - * This makes the Escape key equivalent to the cancel button. - */ --/*ARGSUSED*/ - static int - dlg_key_press_event(GtkWidget *widget, GdkEventKey *event, CancelData *data) - { -@@ -1655,7 +1646,6 @@ - gtk_main_quit(); - } - --/* ARGSUSED */ - int - gui_mch_dialog( int type, /* type of dialog */ - char_u *title, /* title of dialog */ -@@ -2215,7 +2205,6 @@ - GtkDialog *dialog; /* Widget of the dialog */ - } DialogInfo; - --/*ARGSUSED2*/ - static gboolean - dialog_key_press_event_cb(GtkWidget *widget, GdkEventKey *event, gpointer data) - { -@@ -2398,14 +2387,13 @@ - * Note: The push_in output argument seems to affect scrolling of huge - * menus that don't fit on the screen. Leave it at the default for now. - */ --/*ARGSUSED0*/ - static void --popup_menu_position_func(GtkMenu *menu, -+popup_menu_position_func(GtkMenu *menu UNUSED, - gint *x, gint *y, - # ifdef HAVE_GTK2 -- gboolean *push_in, -+ gboolean *push_in UNUSED, - # endif -- gpointer user_data) -+ gpointer user_data UNUSED) - { - gdk_window_get_origin(gui.drawarea->window, x, y); - -@@ -2464,13 +2452,12 @@ - GtkWidget *all; /* 'Replace All' action button */ - } SharedFindReplace; - --static SharedFindReplace find_widgets = { NULL, }; --static SharedFindReplace repl_widgets = { NULL, }; -+static SharedFindReplace find_widgets = {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}; -+static SharedFindReplace repl_widgets = {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}; - --/* ARGSUSED */ - static int - find_key_press_event( -- GtkWidget *widget, -+ GtkWidget *widget UNUSED, - GdkEventKey *event, - SharedFindReplace *frdp) - { -@@ -2962,9 +2949,8 @@ - /* - * Callback for actions of the find and replace dialogs - */ --/*ARGSUSED*/ - static void --find_replace_cb(GtkWidget *widget, gpointer data) -+find_replace_cb(GtkWidget *widget UNUSED, gpointer data) - { - int flags; - char_u *find_text; -@@ -3010,9 +2996,8 @@ - } - - /* our usual callback function */ --/*ARGSUSED*/ - static void --entry_activate_cb(GtkWidget *widget, gpointer data) -+entry_activate_cb(GtkWidget *widget UNUSED, gpointer data) - { - gtk_widget_grab_focus(GTK_WIDGET(data)); - } -@@ -3055,10 +3040,9 @@ - /* - * ":helpfind" - */ --/*ARGSUSED*/ - void - ex_helpfind(eap) -- exarg_T *eap; -+ exarg_T *eap UNUSED; - { - /* This will fail when menus are not loaded. Well, it's only for - * backwards compatibility anyway. */ -diff -Naur vim72.orig/src/gui_gtk_f.c vim72/src/gui_gtk_f.c ---- vim72.orig/src/gui_gtk_f.c 2007-05-07 20:38:02.000000000 +0100 -+++ vim72/src/gui_gtk_f.c 2009-07-22 22:54:22.000000000 +0100 -@@ -227,14 +227,14 @@ - - if (!form_type) - { -- GtkTypeInfo form_info = -- { -- "GtkForm", -- sizeof(GtkForm), -- sizeof(GtkFormClass), -- (GtkClassInitFunc) gtk_form_class_init, -- (GtkObjectInitFunc) gtk_form_init -- }; -+ GtkTypeInfo form_info; -+ -+ vim_memset(&form_info, 0, sizeof(form_info)); -+ form_info.type_name = "GtkForm"; -+ form_info.object_size = sizeof(GtkForm); -+ form_info.class_size = sizeof(GtkFormClass); -+ form_info.class_init_func = (GtkClassInitFunc)gtk_form_class_init; -+ form_info.object_init_func = (GtkObjectInitFunc)gtk_form_init; - - form_type = gtk_type_unique(GTK_TYPE_CONTAINER, &form_info); - } -@@ -611,10 +611,9 @@ - } - } - --/*ARGSUSED1*/ - static void - gtk_form_forall(GtkContainer *container, -- gboolean include_internals, -+ gboolean include_internals UNUSED, - GtkCallback callback, - gpointer callback_data) - { -@@ -786,9 +785,8 @@ - * them or discards them, depending on whether we are obscured - * or not. - */ --/*ARGSUSED1*/ - static GdkFilterReturn --gtk_form_filter(GdkXEvent *gdk_xevent, GdkEvent *event, gpointer data) -+gtk_form_filter(GdkXEvent *gdk_xevent, GdkEvent *event UNUSED, gpointer data) - { - XEvent *xevent; - GtkForm *form; -@@ -821,9 +819,10 @@ - * there is no corresponding event in GTK, so we have - * to get the events from a filter - */ --/*ARGSUSED1*/ - static GdkFilterReturn --gtk_form_main_filter(GdkXEvent *gdk_xevent, GdkEvent *event, gpointer data) -+gtk_form_main_filter(GdkXEvent *gdk_xevent, -+ GdkEvent *event UNUSED, -+ gpointer data) - { - XEvent *xevent; - GtkForm *form; -@@ -911,9 +910,8 @@ - #endif - } - --/*ARGSUSED0*/ - static void --gtk_form_child_map(GtkWidget *widget, gpointer user_data) -+gtk_form_child_map(GtkWidget *widget UNUSED, gpointer user_data) - { - GtkFormChild *child; - -@@ -923,9 +921,8 @@ - gdk_window_show(child->window); - } - --/*ARGSUSED0*/ - static void --gtk_form_child_unmap(GtkWidget *widget, gpointer user_data) -+gtk_form_child_unmap(GtkWidget *widget UNUSED, gpointer user_data) - { - GtkFormChild *child; - -diff -Naur vim72.orig/src/gui_gtk_x11.c vim72/src/gui_gtk_x11.c ---- vim72.orig/src/gui_gtk_x11.c 2008-07-04 11:46:24.000000000 +0100 -+++ vim72/src/gui_gtk_x11.c 2009-07-22 22:54:23.000000000 +0100 -@@ -107,6 +107,7 @@ - TARGET_UTF8_STRING, - TARGET_STRING, - TARGET_COMPOUND_TEXT, -+ TARGET_HTML, - TARGET_TEXT, - TARGET_TEXT_URI_LIST, - TARGET_TEXT_PLAIN, -@@ -123,6 +124,7 @@ - {VIMENC_ATOM_NAME, 0, TARGET_VIMENC}, - {VIM_ATOM_NAME, 0, TARGET_VIM}, - #ifdef FEAT_MBYTE -+ {"text/html", 0, TARGET_HTML}, - {"UTF8_STRING", 0, TARGET_UTF8_STRING}, - #endif - {"COMPOUND_TEXT", 0, TARGET_COMPOUND_TEXT}, -@@ -140,6 +142,7 @@ - { - {"text/uri-list", 0, TARGET_TEXT_URI_LIST}, - # ifdef FEAT_MBYTE -+ {"text/html", 0, TARGET_HTML}, - {"UTF8_STRING", 0, TARGET_UTF8_STRING}, - # endif - {"STRING", 0, TARGET_STRING}, -@@ -178,6 +181,7 @@ - * Atoms used to control/reference X11 selections. - */ - #ifdef FEAT_MBYTE -+static GdkAtom html_atom = GDK_NONE; - static GdkAtom utf8_string_atom = GDK_NONE; - #endif - #ifndef HAVE_GTK2 -@@ -412,6 +416,7 @@ - #endif - #if defined(FEAT_GUI_GNOME) && defined(FEAT_SESSION) - static const char *restart_command = NULL; -+static char *abs_restart_command = NULL; - #endif - static int found_iconic_arg = FALSE; - -@@ -449,8 +454,10 @@ - char_u buf[MAXPATHL]; - - if (mch_FullName((char_u *)argv[0], buf, (int)sizeof(buf), TRUE) == OK) -- /* Tiny leak; doesn't matter, and usually we don't even get here */ -- restart_command = (char *)vim_strsave(buf); -+ { -+ abs_restart_command = (char *)vim_strsave(buf); -+ restart_command = abs_restart_command; -+ } - } - #endif - -@@ -611,6 +618,9 @@ - gui_mch_free_all() - { - vim_free(gui_argv); -+#if defined(FEAT_GUI_GNOME) && defined(FEAT_SESSION) -+ vim_free(abs_restart_command); -+#endif - } - #endif - -@@ -619,9 +629,10 @@ - * Doesn't seem possible, since check_copy_area() relies on - * this information. --danielk - */ --/*ARGSUSED*/ - static gint --visibility_event(GtkWidget *widget, GdkEventVisibility *event, gpointer data) -+visibility_event(GtkWidget *widget UNUSED, -+ GdkEventVisibility *event, -+ gpointer data UNUSED) - { - gui.visibility = event->state; - /* -@@ -638,9 +649,10 @@ - /* - * Redraw the corresponding portions of the screen. - */ --/*ARGSUSED*/ - static gint --expose_event(GtkWidget *widget, GdkEventExpose *event, gpointer data) -+expose_event(GtkWidget *widget UNUSED, -+ GdkEventExpose *event, -+ gpointer data UNUSED) - { - /* Skip this when the GUI isn't set up yet, will redraw later. */ - if (gui.starting) -@@ -668,9 +680,10 @@ - /* - * Handle changes to the "Comm" property - */ --/*ARGSUSED2*/ - static gint --property_event(GtkWidget *widget, GdkEventProperty *event, gpointer data) -+property_event(GtkWidget *widget, -+ GdkEventProperty *event, -+ gpointer data UNUSED) - { - if (event->type == GDK_PROPERTY_NOTIFY - && event->state == (int)GDK_PROPERTY_NEW_VALUE -@@ -740,9 +753,8 @@ - blink_state = BLINK_NONE; - } - --/*ARGSUSED*/ - static gint --blink_cb(gpointer data) -+blink_cb(gpointer data UNUSED) - { - if (blink_state == BLINK_ON) - { -@@ -781,9 +793,10 @@ - } - } - --/*ARGSUSED*/ - static gint --enter_notify_event(GtkWidget *widget, GdkEventCrossing *event, gpointer data) -+enter_notify_event(GtkWidget *widget UNUSED, -+ GdkEventCrossing *event UNUSED, -+ gpointer data UNUSED) - { - if (blink_state == BLINK_NONE) - gui_mch_start_blink(); -@@ -795,9 +808,10 @@ - return FALSE; - } - --/*ARGSUSED*/ - static gint --leave_notify_event(GtkWidget *widget, GdkEventCrossing *event, gpointer data) -+leave_notify_event(GtkWidget *widget UNUSED, -+ GdkEventCrossing *event UNUSED, -+ gpointer data UNUSED) - { - if (blink_state != BLINK_NONE) - gui_mch_stop_blink(); -@@ -805,9 +819,10 @@ - return FALSE; - } - --/*ARGSUSED*/ - static gint --focus_in_event(GtkWidget *widget, GdkEventFocus *event, gpointer data) -+focus_in_event(GtkWidget *widget, -+ GdkEventFocus *event UNUSED, -+ gpointer data UNUSED) - { - gui_focus_change(TRUE); - -@@ -826,9 +841,10 @@ - return TRUE; - } - --/*ARGSUSED*/ - static gint --focus_out_event(GtkWidget *widget, GdkEventFocus *event, gpointer data) -+focus_out_event(GtkWidget *widget UNUSED, -+ GdkEventFocus *event UNUSED, -+ gpointer data UNUSED) - { - gui_focus_change(FALSE); - -@@ -956,9 +972,10 @@ - /* - * Main keyboard handler: - */ --/*ARGSUSED*/ - static gint --key_press_event(GtkWidget *widget, GdkEventKey *event, gpointer data) -+key_press_event(GtkWidget *widget UNUSED, -+ GdkEventKey *event, -+ gpointer data UNUSED) - { - #ifdef HAVE_GTK2 - /* 256 bytes is way over the top, but for safety let's reduce it only -@@ -1225,9 +1242,10 @@ - } - - #if defined(FEAT_XIM) && defined(HAVE_GTK2) --/*ARGSUSED0*/ - static gboolean --key_release_event(GtkWidget *widget, GdkEventKey *event, gpointer data) -+key_release_event(GtkWidget *widget UNUSED, -+ GdkEventKey *event, -+ gpointer data UNUSED) - { - /* - * GTK+ 2 input methods may do fancy stuff on key release events too. -@@ -1243,11 +1261,10 @@ - * Selection handlers: - */ - --/*ARGSUSED*/ - static gint --selection_clear_event(GtkWidget *widget, -+selection_clear_event(GtkWidget *widget UNUSED, - GdkEventSelection *event, -- gpointer user_data) -+ gpointer user_data UNUSED) - { - if (event->selection == clip_plus.gtk_sel_atom) - clip_lose_selection(&clip_plus); -@@ -1265,12 +1282,11 @@ - #define RS_FAIL 2 /* selection_received_cb() called and failed */ - static int received_selection = RS_NONE; - --/*ARGSUSED*/ - static void --selection_received_cb(GtkWidget *widget, -+selection_received_cb(GtkWidget *widget UNUSED, - GtkSelectionData *data, -- guint time_, -- gpointer user_data) -+ guint time_ UNUSED, -+ gpointer user_data UNUSED) - { - VimClipboard *cbd; - char_u *text; -@@ -1352,6 +1368,24 @@ - else - text = tmpbuf_utf8; - } -+ else if (len >= 2 && text[0] == 0xff && text[1] == 0xfe) -+ { -+ vimconv_T conv; -+ -+ /* UTF-16, we get this for HTML */ -+ conv.vc_type = CONV_NONE; -+ convert_setup_ext(&conv, (char_u *)"utf-16le", FALSE, p_enc, TRUE); -+ -+ if (conv.vc_type != CONV_NONE) -+ { -+ text += 2; -+ len -= 2; -+ tmpbuf = string_convert(&conv, text, &len); -+ convert_setup(&conv, NULL, NULL); -+ } -+ if (tmpbuf != NULL) -+ text = tmpbuf; -+ } - } - #else /* !HAVE_GTK2 */ - # ifdef FEAT_MBYTE -@@ -1414,13 +1448,12 @@ - * Prepare our selection data for passing it to the external selection - * client. - */ --/*ARGSUSED*/ - static void --selection_get_cb(GtkWidget *widget, -+selection_get_cb(GtkWidget *widget UNUSED, - GtkSelectionData *selection_data, - guint info, -- guint time_, -- gpointer user_data) -+ guint time_ UNUSED, -+ gpointer user_data UNUSED) - { - char_u *string; - char_u *tmpbuf; -@@ -1440,6 +1473,7 @@ - - if (info != (guint)TARGET_STRING - #ifdef FEAT_MBYTE -+ && (!clip_html || info != (guint)TARGET_HTML) - && info != (guint)TARGET_UTF8_STRING - && info != (guint)TARGET_VIMENC - #endif -@@ -1475,6 +1509,40 @@ - } - - #ifdef FEAT_MBYTE -+ else if (info == (guint)TARGET_HTML) -+ { -+ vimconv_T conv; -+ -+ /* Since we get utf-16, we probably should set it as well. */ -+ conv.vc_type = CONV_NONE; -+ convert_setup_ext(&conv, p_enc, TRUE, (char_u *)"utf-16le", FALSE); -+ if (conv.vc_type != CONV_NONE) -+ { -+ tmpbuf = string_convert(&conv, string, &length); -+ convert_setup(&conv, NULL, NULL); -+ vim_free(string); -+ string = tmpbuf; -+ } -+ -+ /* Prepend the BOM: "fffe" */ -+ if (string != NULL) -+ { -+ tmpbuf = alloc(length + 2); -+ tmpbuf[0] = 0xff; -+ tmpbuf[1] = 0xfe; -+ mch_memmove(tmpbuf + 2, string, (size_t)length); -+ vim_free(string); -+ string = tmpbuf; -+ length += 2; -+ -+ selection_data->type = selection_data->target; -+ selection_data->format = 16; /* 16 bits per char */ -+ gtk_selection_data_set(selection_data, html_atom, 16, -+ string, length); -+ vim_free(string); -+ } -+ return; -+ } - else if (info == (guint)TARGET_VIMENC) - { - int l = STRLEN(p_enc); -@@ -1678,7 +1746,7 @@ - - offshoot = dx > dy ? dx : dy; - -- /* Make a linearly declaying timer delay with a threshold of 5 at a -+ /* Make a linearly decaying timer delay with a threshold of 5 at a - * distance of 127 pixels from the main window. - * - * One could think endlessly about the most ergonomic variant here. -@@ -1707,9 +1775,8 @@ - /* - * Timer used to recognize multiple clicks of the mouse button. - */ --/*ARGSUSED0*/ - static gint --motion_repeat_timer_cb(gpointer data) -+motion_repeat_timer_cb(gpointer data UNUSED) - { - int x; - int y; -@@ -1749,9 +1816,10 @@ - return FALSE; - } - --/*ARGSUSED2*/ - static gint --motion_notify_event(GtkWidget *widget, GdkEventMotion *event, gpointer data) -+motion_notify_event(GtkWidget *widget, -+ GdkEventMotion *event, -+ gpointer data UNUSED) - { - if (event->is_hint) - { -@@ -1777,9 +1845,10 @@ - * by our own timeout mechanism instead of the one provided by GTK+ itself. - * This is due to the way the generic VIM code is recognizing multiple clicks. - */ --/*ARGSUSED2*/ - static gint --button_press_event(GtkWidget *widget, GdkEventButton *event, gpointer data) -+button_press_event(GtkWidget *widget, -+ GdkEventButton *event, -+ gpointer data UNUSED) - { - int button; - int repeated_click = FALSE; -@@ -1855,9 +1924,10 @@ - * GTK+ 2 doesn't handle mouse buttons 4, 5, 6 and 7 the same way as GTK+ 1. - * Instead, it abstracts scrolling via the new GdkEventScroll. - */ --/*ARGSUSED2*/ - static gboolean --scroll_event(GtkWidget *widget, GdkEventScroll *event, gpointer data) -+scroll_event(GtkWidget *widget, -+ GdkEventScroll *event, -+ gpointer data UNUSED) - { - int button; - int_u vim_modifiers; -@@ -1896,9 +1966,10 @@ - #endif /* HAVE_GTK2 */ - - --/*ARGSUSED*/ - static gint --button_release_event(GtkWidget *widget, GdkEventButton *event, gpointer data) -+button_release_event(GtkWidget *widget UNUSED, -+ GdkEventButton *event, -+ gpointer data UNUSED) - { - int x, y; - int_u vim_modifiers; -@@ -2100,7 +2171,6 @@ - /* - * DND receiver. - */ --/*ARGSUSED2*/ - static void - drag_data_received_cb(GtkWidget *widget, - GdkDragContext *context, -@@ -2109,7 +2179,7 @@ - GtkSelectionData *data, - guint info, - guint time_, -- gpointer user_data) -+ gpointer user_data UNUSED) - { - GdkModifierType state; - -@@ -2143,7 +2213,6 @@ - * be abandoned and pop up a dialog asking the user for confirmation if - * necessary. - */ --/*ARGSUSED0*/ - static void - sm_client_check_changed_any(GnomeClient *client, - gint key, -@@ -2251,7 +2320,6 @@ - * for confirmation if necessary. Save the current editing session and tell - * the session manager how to restart Vim. - */ --/*ARGSUSED1*/ - static gboolean - sm_client_save_yourself(GnomeClient *client, - gint phase, -@@ -2339,7 +2407,6 @@ - * here since "save_yourself" has been emitted before (unless serious trouble - * is happening). - */ --/*ARGSUSED0*/ - static void - sm_client_die(GnomeClient *client, gpointer data) - { -@@ -2379,10 +2446,9 @@ - /* - * GTK tells us that XSMP needs attention - */ --/*ARGSUSED*/ - static gboolean - local_xsmp_handle_requests(source, condition, data) -- GIOChannel *source; -+ GIOChannel *source UNUSED; - GIOCondition condition; - gpointer data; - { -@@ -2480,16 +2546,18 @@ - * WM_SAVE_YOURSELF hack it actually stores the session... And yes, - * it should work with KDE as well. - */ --/*ARGSUSED1*/ - static GdkFilterReturn --global_event_filter(GdkXEvent *xev, GdkEvent *event, gpointer data) -+global_event_filter(GdkXEvent *xev, -+ GdkEvent *event UNUSED, -+ gpointer data UNUSED) - { - XEvent *xevent = (XEvent *)xev; - - if (xevent != NULL - && xevent->type == ClientMessage - && xevent->xclient.message_type == GET_X_ATOM(wm_protocols_atom) -- && xevent->xclient.data.l[0] == GET_X_ATOM(save_yourself_atom)) -+ && (long_u)xevent->xclient.data.l[0] -+ == GET_X_ATOM(save_yourself_atom)) - { - out_flush(); - ml_sync_all(FALSE, FALSE); /* preserve all swap files */ -@@ -2512,7 +2580,6 @@ - /* - * GDK handler for X ClientMessage events. - */ --/*ARGSUSED2*/ - static GdkFilterReturn - gdk_wm_protocols_filter(GdkXEvent *xev, GdkEvent *event, gpointer data) - { -@@ -2558,9 +2625,8 @@ - /* - * Setup the window icon & xcmdsrv comm after the main window has been realized. - */ --/*ARGSUSED*/ - static void --mainwin_realize(GtkWidget *widget, gpointer data) -+mainwin_realize(GtkWidget *widget UNUSED, gpointer data UNUSED) - { - /* If you get an error message here, you still need to unpack the runtime - * archive! */ -@@ -2712,11 +2778,10 @@ - } - - #ifdef HAVE_GTK_MULTIHEAD --/*ARGSUSED1*/ - static void - mainwin_screen_changed_cb(GtkWidget *widget, -- GdkScreen *previous_screen, -- gpointer data) -+ GdkScreen *previous_screen UNUSED, -+ gpointer data UNUSED) - { - if (!gtk_widget_has_screen(widget)) - return; -@@ -2757,9 +2822,8 @@ - * Don't try to set any VIM scrollbar sizes anywhere here. I'm relying on the - * fact that the main VIM engine doesn't take them into account anywhere. - */ --/*ARGSUSED1*/ - static void --drawarea_realize_cb(GtkWidget *widget, gpointer data) -+drawarea_realize_cb(GtkWidget *widget, gpointer data UNUSED) - { - GtkWidget *sbar; - -@@ -2789,9 +2853,8 @@ - /* - * Properly clean up on shutdown. - */ --/*ARGSUSED0*/ - static void --drawarea_unrealize_cb(GtkWidget *widget, gpointer data) -+drawarea_unrealize_cb(GtkWidget *widget UNUSED, gpointer data UNUSED) - { - /* Don't write messages to the GUI anymore */ - full_screen = FALSE; -@@ -2827,11 +2890,10 @@ - #endif - } - --/*ARGSUSED0*/ - static void --drawarea_style_set_cb(GtkWidget *widget, -- GtkStyle *previous_style, -- gpointer data) -+drawarea_style_set_cb(GtkWidget *widget UNUSED, -+ GtkStyle *previous_style UNUSED, -+ gpointer data UNUSED) - { - gui_mch_new_colors(); - } -@@ -2840,9 +2902,10 @@ - * Callback routine for the "delete_event" signal on the toplevel window. - * Tries to vim gracefully, or refuses to exit with changed buffers. - */ --/*ARGSUSED*/ - static gint --delete_event_cb(GtkWidget *widget, GdkEventAny *event, gpointer data) -+delete_event_cb(GtkWidget *widget UNUSED, -+ GdkEventAny *event UNUSED, -+ gpointer data UNUSED) - { - gui_shell_closed(); - return TRUE; -@@ -2964,7 +3027,7 @@ - - /* At start-up, don't try to set the hints until the initial - * values have been used (those that dictate our initial size) -- * Let forced (i.e., correct) values thruogh always. -+ * Let forced (i.e., correct) values through always. - */ - if (!(force_width && force_height) && init_window_hints_state > 0) - { -@@ -3142,9 +3205,8 @@ - /* - * Handle selecting an item in the tab line popup menu. - */ --/*ARGSUSED*/ - static void --tabline_menu_handler(GtkMenuItem *item, gpointer user_data) -+tabline_menu_handler(GtkMenuItem *item UNUSED, gpointer user_data) - { - /* Add the string cmd into input buffer */ - send_tabline_menu_event(clicked_page, (int)(long)user_data); -@@ -3244,13 +3306,12 @@ - /* - * Handle selecting one of the tabs. - */ --/*ARGSUSED*/ - static void - on_select_tab( -- GtkNotebook *notebook, -- GtkNotebookPage *page, -+ GtkNotebook *notebook UNUSED, -+ GtkNotebookPage *page UNUSED, - gint idx, -- gpointer data) -+ gpointer data UNUSED) - { - if (!ignore_tabline_evt) - { -@@ -3460,6 +3521,7 @@ - - /* Initialise atoms */ - #ifdef FEAT_MBYTE -+ html_atom = gdk_atom_intern("text/html", FALSE); - utf8_string_atom = gdk_atom_intern("UTF8_STRING", FALSE); - #endif - #ifndef HAVE_GTK2 -@@ -3784,7 +3846,7 @@ - #endif - - if (gtk_socket_id != 0) -- /* make sure keybord input can go to the drawarea */ -+ /* make sure keyboard input can go to the drawarea */ - GTK_WIDGET_SET_FLAGS(gui.drawarea, GTK_CAN_FOCUS); - - /* -@@ -3922,10 +3984,10 @@ - /* - * This signal informs us about the need to rearrange our sub-widgets. - */ --/*ARGSUSED*/ - static gint --form_configure_event(GtkWidget *widget, GdkEventConfigure *event, -- gpointer data) -+form_configure_event(GtkWidget *widget UNUSED, -+ GdkEventConfigure *event, -+ gpointer data UNUSED) - { - int usable_height = event->height; - -@@ -3948,9 +4010,8 @@ - * We can't do much more here than to trying to preserve what had been done, - * since the window is already inevitably going away. - */ --/*ARGSUSED0*/ - static void --mainwin_destroy_cb(GtkObject *object, gpointer data) -+mainwin_destroy_cb(GtkObject *object UNUSED, gpointer data UNUSED) - { - /* Don't write messages to the GUI anymore */ - full_screen = FALSE; -@@ -3980,9 +4041,8 @@ - * scrollbar init.), actually do the standard hinst and stop the timer. - * We'll not let the default hints be set while this timer's active. - */ --/*ARGSUSED*/ - static gboolean --check_startup_plug_hints(gpointer data) -+check_startup_plug_hints(gpointer data UNUSED) - { - if (init_window_hints_state == 1) - { -@@ -4055,7 +4115,7 @@ - Columns = w; - if (mask & HeightValue) - { -- if (p_window > h - 1 || !option_was_set((char_u *)"window")) -+ if (p_window > (long)h - 1 || !option_was_set((char_u *)"window")) - p_window = h - 1; - Rows = h; - } -@@ -4070,14 +4130,14 @@ - - if (mask & (XValue | YValue)) - { -- int w, h; -- gui_mch_get_screen_dimensions(&w, &h); -- h += p_ghr + get_menu_tool_height(); -- w += get_menu_tool_width(); -+ int ww, hh; -+ gui_mch_get_screen_dimensions(&ww, &hh); -+ hh += p_ghr + get_menu_tool_height(); -+ ww += get_menu_tool_width(); - if (mask & XNegative) -- x += w - pixel_width; -+ x += ww - pixel_width; - if (mask & YNegative) -- y += h - pixel_height; -+ y += hh - pixel_height; - #ifdef HAVE_GTK2 - gtk_window_move(GTK_WINDOW(gui.mainwin), x, y); - #else -@@ -4229,9 +4289,8 @@ - } - - --/*ARGSUSED0*/ - void --gui_mch_exit(int rc) -+gui_mch_exit(int rc UNUSED) - { - if (gui.mainwin != NULL) - gtk_widget_destroy(gui.mainwin); -@@ -4286,7 +4345,6 @@ - * report the new size through form_configure_event(). That caused the window - * layout to be messed up. - */ --/*ARGSUSED0*/ - static gboolean - force_shell_resize_idle(gpointer data) - { -@@ -4314,12 +4372,11 @@ - /* - * Set the windows size. - */ --/*ARGSUSED2*/ - void - gui_mch_set_shellsize(int width, int height, -- int min_width, int min_height, -- int base_width, int base_height, -- int direction) -+ int min_width UNUSED, int min_height UNUSED, -+ int base_width UNUSED, int base_height UNUSED, -+ int direction UNUSED) - { - #ifndef HAVE_GTK2 - /* Hack: When the form already is at the desired size, the window might -@@ -4413,9 +4470,8 @@ - } - - #if defined(FEAT_TITLE) || defined(PROTO) --/*ARGSUSED*/ - void --gui_mch_settitle(char_u *title, char_u *icon) -+gui_mch_settitle(char_u *title, char_u *icon UNUSED) - { - # ifdef HAVE_GTK2 - if (title != NULL && output_conv.vc_type != CONV_NONE) -@@ -4493,7 +4549,6 @@ - * Get a font structure for highlighting. - * "cbdata" is a pointer to the global gui structure. - */ --/*ARGSUSED*/ - static void - font_sel_ok(GtkWidget *wgt, gpointer cbdata) - { -@@ -4509,7 +4564,6 @@ - gtk_main_quit(); - } - --/*ARGSUSED*/ - static void - font_sel_cancel(GtkWidget *wgt, gpointer cbdata) - { -@@ -4520,7 +4574,6 @@ - gtk_main_quit(); - } - --/*ARGSUSED*/ - static void - font_sel_destroy(GtkWidget *wgt, gpointer cbdata) - { -@@ -4620,7 +4673,6 @@ - /* - * Try to load the requested fontset. - */ --/*ARGSUSED2*/ - GuiFontset - gui_mch_get_fontset(char_u *name, int report_error, int fixed_width) - { -@@ -4863,7 +4915,7 @@ - styled_font[1] = &gui.ital_font; - styled_font[2] = &gui.boldital_font; - -- /* First free whatever was freviously there. */ -+ /* First free whatever was previously there. */ - for (i = 0; i < 3; ++i) - if (*styled_font[i]) - { -@@ -5012,9 +5064,8 @@ - * Initialize Vim to use the font or fontset with the given name. - * Return FAIL if the font could not be loaded, OK otherwise. - */ --/*ARGSUSED1*/ - int --gui_mch_init_font(char_u *font_name, int fontset) -+gui_mch_init_font(char_u *font_name, int fontset UNUSED) - { - #ifdef HAVE_GTK2 - PangoFontDescription *font_desc; -@@ -5326,9 +5377,8 @@ - /* - * Return the name of font "font" in allocated memory. - */ --/*ARGSUSED*/ - char_u * --gui_mch_get_fontname(GuiFont font, char_u *name) -+gui_mch_get_fontname(GuiFont font, char_u *name UNUSED) - { - # ifdef HAVE_GTK2 - if (font != NOFONT) -@@ -5732,7 +5782,7 @@ - { - int i; - int offset; -- const static int val[8] = {1, 0, 0, 0, 1, 2, 2, 2 }; -+ static const int val[8] = {1, 0, 0, 0, 1, 2, 2, 2 }; - int y = FILL_Y(row + 1) - 1; - - /* Undercurl: draw curl at the bottom of the character cell. */ -@@ -6085,12 +6135,15 @@ - # ifdef FEAT_MBYTE - if (enc_utf8) - { -- c = utf_ptr2char(p); -+ int pcc[MAX_MCO]; -+ -+ /* TODO: use the composing characters */ -+ c = utfc_ptr2char_len(p, &pcc, len - (p - s)); - if (c >= 0x10000) /* show chars > 0xffff as ? */ - c = 0xbf; - buf[textlen].byte1 = c >> 8; - buf[textlen].byte2 = c; -- p += utf_ptr2len(p); -+ p += utfc_ptr2len_len(p, len - (p - s)); - width += utf_char2cells(c); - } - else -@@ -6114,8 +6167,8 @@ - if (has_mbyte) - { - width = 0; -- for (p = s; p < s + len; p += (*mb_ptr2len)(p)) -- width += (*mb_ptr2cells)(p); -+ for (p = s; p < s + len; p += (*mb_ptr2len_len)(p, len - (p - s))) -+ width += (*mb_ptr2cells_len)(p, len - (p - s)); - } - else - # endif -@@ -6402,7 +6455,6 @@ - /* - * Callback function, used when data is available on the SNiFF connection. - */ --/* ARGSUSED */ - static void - sniff_request_cb( - gpointer data, -@@ -6665,12 +6717,14 @@ - { - GdkAtom target; - unsigned i; -- int nbytes; -- char_u *buffer; - time_t start; - - for (i = 0; i < N_SELECTION_TARGETS; ++i) - { -+#ifdef FEAT_MBYTE -+ if (!clip_html && selection_targets[i].info == TARGET_HTML) -+ continue; -+#endif - received_selection = RS_NONE; - target = gdk_atom_intern(selection_targets[i].target, FALSE); - -@@ -6690,30 +6744,14 @@ - } - - /* Final fallback position - use the X CUT_BUFFER0 store */ -- nbytes = 0; -- buffer = (char_u *)XFetchBuffer(GDK_WINDOW_XDISPLAY(gui.mainwin->window), -- &nbytes, 0); -- if (nbytes > 0) -- { -- /* Got something */ -- clip_yank_selection(MCHAR, buffer, (long)nbytes, cbd); -- if (p_verbose > 0) -- { -- verbose_enter(); -- smsg((char_u *)_("Used CUT_BUFFER0 instead of empty selection")); -- verbose_leave(); -- } -- } -- if (buffer != NULL) -- XFree(buffer); -+ yank_cut_buffer0(GDK_WINDOW_XDISPLAY(gui.mainwin->window), cbd); - } - - /* - * Disown the selection. - */ --/*ARGSUSED*/ - void --clip_mch_lose_selection(VimClipboard *cbd) -+clip_mch_lose_selection(VimClipboard *cbd UNUSED) - { - /* WEIRD: when using NULL to actually disown the selection, we lose the - * selection the first time we own it. */ -@@ -6741,9 +6779,8 @@ - * Send the current selection to the clipboard. Do nothing for X because we - * will fill in the selection only when requested by another app. - */ --/*ARGSUSED*/ - void --clip_mch_set_selection(VimClipboard *cbd) -+clip_mch_set_selection(VimClipboard *cbd UNUSED) - { - } - -@@ -6950,7 +6987,7 @@ - else - id &= ~1; /* they are always even (why?) */ - } -- else if (shape < sizeof(mshape_ids) / sizeof(int)) -+ else if (shape < (int)(sizeof(mshape_ids) / sizeof(int))) - id = mshape_ids[shape]; - else - return; -diff -Naur vim72.orig/src/gui_motif.c vim72/src/gui_motif.c ---- vim72.orig/src/gui_motif.c 2008-06-07 14:06:33.000000000 +0100 -+++ vim72/src/gui_motif.c 2009-07-22 22:54:22.000000000 +0100 -@@ -117,10 +117,9 @@ - * Call-back routines. - */ - --/* ARGSUSED */ - static void - scroll_cb(w, client_data, call_data) -- Widget w; -+ Widget w UNUSED; - XtPointer client_data, call_data; - { - scrollbar_T *sb; -@@ -136,11 +135,11 @@ - } - - #ifdef FEAT_GUI_TABLINE --/*ARGSUSED*/ - static void - tabline_cb(w, client_data, call_data) -- Widget w; -- XtPointer client_data, call_data; -+ Widget w UNUSED; -+ XtPointer client_data UNUSED; -+ XtPointer call_data; - { - XmNotebookCallbackStruct *nptr; - -@@ -149,11 +148,11 @@ - send_tabline_event(nptr->page_number); - } - --/*ARGSUSED*/ - static void - tabline_button_cb(w, client_data, call_data) - Widget w; -- XtPointer client_data, call_data; -+ XtPointer client_data UNUSED; -+ XtPointer call_data UNUSED; - { - int cmd, tab_idx; - -@@ -166,11 +165,10 @@ - /* - * Tabline single mouse click timeout handler - */ --/*ARGSUSED*/ - static void - motif_tabline_timer_cb (timed_out, interval_id) - XtPointer timed_out; -- XtIntervalId *interval_id; -+ XtIntervalId *interval_id UNUSED; - { - *((int *)timed_out) = TRUE; - } -@@ -203,13 +201,12 @@ - return FALSE; - } - --/*ARGSUSED*/ - static void - tabline_menu_cb(w, closure, e, continue_dispatch) - Widget w; -- XtPointer closure; -+ XtPointer closure UNUSED; - XEvent *e; -- Boolean *continue_dispatch; -+ Boolean *continue_dispatch UNUSED; - { - Widget tab_w; - XButtonPressedEvent *event; -@@ -277,11 +274,10 @@ - XtManageChild(tabLine_menu); - } - --/*ARGSUSED*/ - static void - tabline_balloon_cb(beval, state) - BalloonEval *beval; -- int state; -+ int state UNUSED; - { - int nr; - tabpage_T *tp; -@@ -642,13 +638,12 @@ - #endif - } - --/*ARGSUSED*/ - void - gui_mch_set_text_area_pos(x, y, w, h) -- int x; -- int y; -- int w; -- int h; -+ int x UNUSED; -+ int y UNUSED; -+ int w UNUSED; -+ int h UNUSED; - { - #ifdef FEAT_TOOLBAR - /* Give keyboard focus to the textArea instead of the toolbar. */ -@@ -1261,7 +1256,7 @@ - if (menu->icon_builtin || gui_find_bitmap(menu->name, buf, "xpm") == FAIL) - { - if (menu->iconidx >= 0 && menu->iconidx -- < (sizeof(built_in_pixmaps) / sizeof(built_in_pixmaps[0]))) -+ < (int)(sizeof(built_in_pixmaps) / sizeof(built_in_pixmaps[0]))) - xpm = built_in_pixmaps[menu->iconidx]; - else - xpm = tb_blank_xpm; -@@ -1716,10 +1711,9 @@ - } - } - --/* ARGSUSED */ - void - gui_mch_show_popupmenu(menu) -- vimmenu_T *menu; -+ vimmenu_T *menu UNUSED; - { - #ifdef MOTIF_POPUP - XmMenuPosition(menu->submenu_id, gui_x11_get_last_mouse_event()); -@@ -2046,9 +2040,8 @@ - /* - * Callback routine for dialog mnemonic processing. - */ --/*ARGSUSED*/ - static void --mnemonic_event(Widget w, XtPointer call_data, XKeyEvent *event) -+mnemonic_event(Widget w, XtPointer call_data UNUSED, XKeyEvent *event) - { - do_mnemonic(w, event->keycode); - } -@@ -2287,13 +2280,12 @@ - * Put up a file requester. - * Returns the selected name in allocated memory, or NULL for Cancel. - */ --/* ARGSUSED */ - char_u * - gui_mch_browse(saving, title, dflt, ext, initdir, filter) -- int saving; /* select file to write */ -+ int saving UNUSED; /* select file to write */ - char_u *title; /* title for the window */ - char_u *dflt; /* default name */ -- char_u *ext; /* not used (extension added) */ -+ char_u *ext UNUSED; /* not used (extension added) */ - char_u *initdir; /* initial directory, NULL for current dir */ - char_u *filter; /* file name filter */ - { -@@ -2413,12 +2405,11 @@ - /* - * Process callback from Dialog cancel actions. - */ --/* ARGSUSED */ - static void - DialogCancelCB(w, client_data, call_data) -- Widget w; /* widget id */ -- XtPointer client_data; /* data from application */ -- XtPointer call_data; /* data from widget class */ -+ Widget w UNUSED; /* widget id */ -+ XtPointer client_data UNUSED; /* data from application */ -+ XtPointer call_data UNUSED; /* data from widget class */ - { - if (browse_fname != NULL) - { -@@ -2431,12 +2422,11 @@ - /* - * Process callback from Dialog actions. - */ --/* ARGSUSED */ - static void - DialogAcceptCB(w, client_data, call_data) -- Widget w; /* widget id */ -- XtPointer client_data; /* data from application */ -- XtPointer call_data; /* data from widget class */ -+ Widget w UNUSED; /* widget id */ -+ XtPointer client_data UNUSED; /* data from application */ -+ XtPointer call_data; /* data from widget class */ - { - XmFileSelectionBoxCallbackStruct *fcb; - -@@ -2467,13 +2457,12 @@ - * Callback function for the textfield. When CR is hit this works like - * hitting the "OK" button, ESC like "Cancel". - */ --/* ARGSUSED */ - static void - keyhit_callback(w, client_data, event, cont) - Widget w; -- XtPointer client_data; -+ XtPointer client_data UNUSED; - XEvent *event; -- Boolean *cont; -+ Boolean *cont UNUSED; - { - char buf[2]; - KeySym key_sym; -@@ -2490,12 +2479,11 @@ - XmTextFieldClearSelection(w, XtLastTimestampProcessed(gui.dpy)); - } - --/* ARGSUSED */ - static void - butproc(w, client_data, call_data) -- Widget w; -+ Widget w UNUSED; - XtPointer client_data; -- XtPointer call_data; -+ XtPointer call_data UNUSED; - { - dialogStatus = (int)(long)client_data + 1; - } -@@ -2567,10 +2555,9 @@ - } - #endif - --/* ARGSUSED */ - int - gui_mch_dialog(type, title, message, button_names, dfltbutton, textfield) -- int type; -+ int type UNUSED; - char_u *title; - char_u *message; - char_u *button_names; -@@ -3197,7 +3184,7 @@ - XmNchildren, &children, - XmNnumChildren, &numChildren, NULL); - borders += tst + tmh; -- for (i = 0; i < numChildren; i++) -+ for (i = 0; i < (int)numChildren; i++) - { - whgt = 0; - XtVaGetValues(children[i], XmNheight, &whgt, NULL); -@@ -3237,13 +3224,12 @@ - * I have to use footer help for backwards compatability. Hopefully both will - * get implemented and the user will have a choice. - */ --/*ARGSUSED*/ - static void - toolbarbutton_enter_cb(w, client_data, event, cont) -- Widget w; -+ Widget w UNUSED; - XtPointer client_data; -- XEvent *event; -- Boolean *cont; -+ XEvent *event UNUSED; -+ Boolean *cont UNUSED; - { - vimmenu_T *menu = (vimmenu_T *) client_data; - -@@ -3254,13 +3240,12 @@ - } - } - --/*ARGSUSED*/ - static void - toolbarbutton_leave_cb(w, client_data, event, cont) -- Widget w; -- XtPointer client_data; -- XEvent *event; -- Boolean *cont; -+ Widget w UNUSED; -+ XtPointer client_data UNUSED; -+ XEvent *event UNUSED; -+ Boolean *cont UNUSED; - { - gui_mch_set_footer((char_u *) ""); - } -@@ -3492,10 +3477,9 @@ - /* - * Set the fontlist for Widget "id" to use gui.menu_fontset or gui.menu_font. - */ --/*ARGSUSED*/ - void - gui_motif_menu_fontlist(id) -- Widget id; -+ Widget id UNUSED; - { - #ifdef FEAT_MENU - #ifdef FONTSET_ALWAYS -@@ -3566,8 +3550,8 @@ - Widget cancel; - } SharedFindReplace; - --static SharedFindReplace find_widgets = { NULL }; --static SharedFindReplace repl_widgets = { NULL }; -+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 __ARGS((Widget w, XtPointer client_data, XtPointer call_data)); - static void find_replace_dismiss_callback __ARGS((Widget w, XtPointer client_data, XtPointer call_data)); -@@ -3576,12 +3560,11 @@ - static void find_replace_keypress __ARGS((Widget w, SharedFindReplace * frdp, XKeyEvent * event)); - static void find_replace_dialog_create __ARGS((char_u *entry_text, int do_replace)); - --/*ARGSUSED*/ - static void - find_replace_destroy_callback(w, client_data, call_data) -- Widget w; -+ Widget w UNUSED; - XtPointer client_data; -- XtPointer call_data; -+ XtPointer call_data UNUSED; - { - SharedFindReplace *cd = (SharedFindReplace *)client_data; - -@@ -3590,12 +3573,11 @@ - cd->dialog = (Widget)0; - } - --/*ARGSUSED*/ - static void - find_replace_dismiss_callback(w, client_data, call_data) -- Widget w; -+ Widget w UNUSED; - XtPointer client_data; -- XtPointer call_data; -+ XtPointer call_data UNUSED; - { - SharedFindReplace *cd = (SharedFindReplace *)client_data; - -@@ -3603,22 +3585,20 @@ - XtUnmanageChild(cd->dialog); - } - --/*ARGSUSED*/ - static void - entry_activate_callback(w, client_data, call_data) -- Widget w; -+ Widget w UNUSED; - XtPointer client_data; -- XtPointer call_data; -+ XtPointer call_data UNUSED; - { - XmProcessTraversal((Widget)client_data, XmTRAVERSE_CURRENT); - } - --/*ARGSUSED*/ - static void - find_replace_callback(w, client_data, call_data) -- Widget w; -+ Widget w UNUSED; - XtPointer client_data; -- XtPointer call_data; -+ XtPointer call_data UNUSED; - { - long_u flags = (long_u)client_data; - char *find_text, *repl_text; -@@ -3668,10 +3648,9 @@ - XtFree(repl_text); - } - --/*ARGSUSED*/ - static void - find_replace_keypress(w, frdp, event) -- Widget w; -+ Widget w UNUSED; - SharedFindReplace *frdp; - XKeyEvent *event; - { -diff -Naur vim72.orig/src/gui_x11.c vim72/src/gui_x11.c ---- vim72.orig/src/gui_x11.c 2008-06-08 16:13:45.000000000 +0100 -+++ vim72/src/gui_x11.c 2009-07-22 22:54:22.000000000 +0100 -@@ -570,22 +570,20 @@ - * Call-back routines. - */ - --/* ARGSUSED */ - static void - gui_x11_timer_cb(timed_out, interval_id) - XtPointer timed_out; -- XtIntervalId *interval_id; -+ XtIntervalId *interval_id UNUSED; - { - *((int *)timed_out) = TRUE; - } - --/* ARGSUSED */ - static void - gui_x11_visibility_cb(w, dud, event, dum) -- Widget w; -- XtPointer dud; -+ Widget w UNUSED; -+ XtPointer dud UNUSED; - XEvent *event; -- Boolean *dum; -+ Boolean *dum UNUSED; - { - if (event->type != VisibilityNotify) - return; -@@ -603,13 +601,12 @@ - gui_mch_update(); - } - --/* ARGSUSED */ - static void - gui_x11_expose_cb(w, dud, event, dum) -- Widget w; -- XtPointer dud; -+ Widget w UNUSED; -+ XtPointer dud UNUSED; - XEvent *event; -- Boolean *dum; -+ Boolean *dum UNUSED; - { - XExposeEvent *gevent; - int new_x; -@@ -680,13 +677,12 @@ - } - #endif - --/* ARGSUSED */ - static void - gui_x11_resize_window_cb(w, dud, event, dum) -- Widget w; -- XtPointer dud; -+ Widget w UNUSED; -+ XtPointer dud UNUSED; - XEvent *event; -- Boolean *dum; -+ Boolean *dum UNUSED; - { - static int lastWidth, lastHeight; - -@@ -727,35 +723,32 @@ - #endif - } - --/* ARGSUSED */ - static void - gui_x11_focus_change_cb(w, data, event, dum) -- Widget w; -- XtPointer data; -+ Widget w UNUSED; -+ XtPointer data UNUSED; - XEvent *event; -- Boolean *dum; -+ Boolean *dum UNUSED; - { - gui_focus_change(event->type == FocusIn); - } - --/* ARGSUSED */ - static void - gui_x11_enter_cb(w, data, event, dum) -- Widget w; -- XtPointer data; -- XEvent *event; -- Boolean *dum; -+ Widget w UNUSED; -+ XtPointer data UNUSED; -+ XEvent *event UNUSED; -+ Boolean *dum UNUSED; - { - gui_focus_change(TRUE); - } - --/* ARGSUSED */ - static void - gui_x11_leave_cb(w, data, event, dum) -- Widget w; -- XtPointer data; -- XEvent *event; -- Boolean *dum; -+ Widget w UNUSED; -+ XtPointer data UNUSED; -+ XEvent *event UNUSED; -+ Boolean *dum UNUSED; - { - gui_focus_change(FALSE); - } -@@ -766,13 +759,12 @@ - # endif - #endif - --/* ARGSUSED */ - void - gui_x11_key_hit_cb(w, dud, event, dum) -- Widget w; -- XtPointer dud; -+ Widget w UNUSED; -+ XtPointer dud UNUSED; - XEvent *event; -- Boolean *dum; -+ Boolean *dum UNUSED; - { - XKeyPressedEvent *ev_press; - #ifdef FEAT_XIM -@@ -1078,13 +1070,12 @@ - #endif - } - --/* ARGSUSED */ - static void - gui_x11_mouse_cb(w, dud, event, dum) -- Widget w; -- XtPointer dud; -+ Widget w UNUSED; -+ XtPointer dud UNUSED; - XEvent *event; -- Boolean *dum; -+ Boolean *dum UNUSED; - { - static XtIntervalId timer = (XtIntervalId)0; - static int timed_out = TRUE; -@@ -1210,11 +1201,11 @@ - while (arg < *argc) - { - /* Look for argv[arg] in cmdline_options[] table */ -- for (i = 0; i < XtNumber(cmdline_options); i++) -+ for (i = 0; i < (int)XtNumber(cmdline_options); i++) - if (strcmp(argv[arg], cmdline_options[i].option) == 0) - break; - -- if (i < XtNumber(cmdline_options)) -+ if (i < (int)XtNumber(cmdline_options)) - { - /* Remember finding "-rv" or "-reverse" */ - if (strcmp("-rv", argv[arg]) == 0 -@@ -1319,12 +1310,11 @@ - - static void local_xsmp_handle_requests __ARGS((XtPointer c, int *s, XtInputId *i)); - --/*ARGSUSED*/ - static void - local_xsmp_handle_requests(c, s, i) -- XtPointer c; -- int *s; -- XtInputId *i; -+ XtPointer c UNUSED; -+ int *s UNUSED; -+ XtInputId *i UNUSED; - { - if (xsmp_handle_requests() == FAIL) - XtRemoveInput(_xsmp_xtinputid); -@@ -1438,7 +1428,7 @@ - Columns = w; - if (mask & HeightValue) - { -- if (p_window > h - 1 || !option_was_set((char_u *)"window")) -+ if (p_window > (long)h - 1 || !option_was_set((char_u *)"window")) - p_window = h - 1; - Rows = h; - } -@@ -1587,6 +1577,8 @@ - XtCloseDisplay(gui.dpy); - gui.dpy = NULL; - vimShell = (Widget)0; -+ vim_free(gui_argv); -+ gui_argv = NULL; - } - - /* -@@ -1751,16 +1743,17 @@ - } - #endif - --/*ARGSUSED*/ - void - gui_mch_exit(rc) -- int rc; -+ int rc UNUSED; - { - #if 0 - /* Lesstif gives an error message here, and so does Solaris. The man page - * says that this isn't needed when exiting, so just skip it. */ - XtCloseDisplay(gui.dpy); - #endif -+ vim_free(gui_argv); -+ gui_argv = NULL; - } - - /* -@@ -1795,7 +1788,6 @@ - NULL); - } - --/*ARGSUSED*/ - void - gui_mch_set_shellsize(width, height, min_width, min_height, - base_width, base_height, direction) -@@ -1805,7 +1797,7 @@ - int min_height; - int base_width; - int base_height; -- int direction; -+ int direction UNUSED; - { - #ifdef FEAT_XIM - height += xim_get_status_area_height(), -@@ -1843,11 +1835,10 @@ - * If "fontset" is TRUE, load the "font_name" as a fontset. - * Return FAIL if the font could not be loaded, OK otherwise. - */ --/*ARGSUSED*/ - int - gui_mch_init_font(font_name, do_fontset) - char_u *font_name; -- int do_fontset; -+ int do_fontset UNUSED; - { - XFontStruct *font = NULL; - -@@ -2025,10 +2016,9 @@ - * Return the name of font "font" in allocated memory. - * Don't know how to get the actual name, thus use the provided name. - */ --/*ARGSUSED*/ - char_u * - gui_mch_get_fontname(font, name) -- GuiFont font; -+ GuiFont font UNUSED; - char_u *name; - { - if (name == NULL) -@@ -2450,7 +2440,7 @@ - *colorPtr = colortable[closest]; - } - -- free(colortable); -+ vim_free(colortable); - return OK; - } - -@@ -2517,7 +2507,7 @@ - { - int i; - int offset; -- const static int val[8] = {1, 0, 0, 0, 1, 2, 2, 2 }; -+ static const int val[8] = {1, 0, 0, 0, 1, 2, 2, 2 }; - - XSetForeground(gui.dpy, gui.text_gc, prev_sp_color); - for (i = FILL_X(col); i < FILL_X(col + cells); ++i) -@@ -2565,8 +2555,10 @@ - # ifdef FEAT_XFONTSET - if (current_fontset != NULL) - { -- if (c >= 0x10000 && sizeof(wchar_t) <= 2) -+# ifdef SMALL_WCHAR_T -+ if (c >= 0x10000) - c = 0xbf; /* show chars > 0xffff as ? */ -+# endif - ((wchar_t *)buf)[wlen] = c; - } - else -@@ -3132,11 +3124,11 @@ - /* Nothing to do in X */ - } - --/* ARGSUSED */ - void - gui_x11_menu_cb(w, client_data, call_data) -- Widget w; -- XtPointer client_data, call_data; -+ Widget w UNUSED; -+ XtPointer client_data; -+ XtPointer call_data UNUSED; - { - gui_menu_cb((vimmenu_T *)client_data); - } -@@ -3149,13 +3141,12 @@ - * Function called when window closed. Works like ":qa". - * Should put up a requester! - */ --/*ARGSUSED*/ - static void - gui_x11_wm_protocol_handler(w, client_data, event, dum) -- Widget w; -- XtPointer client_data; -+ Widget w UNUSED; -+ XtPointer client_data UNUSED; - XEvent *event; -- Boolean *dum; -+ Boolean *dum UNUSED; - { - /* - * Only deal with Client messages. -@@ -3168,7 +3159,7 @@ - * exit. That can be cancelled though, thus Vim shouldn't exit here. - * Just sync our swap files. - */ -- if (((XClientMessageEvent *)event)->data.l[0] == -+ if ((Atom)((XClientMessageEvent *)event)->data.l[0] == - wm_atoms[SAVE_YOURSELF_IDX]) - { - out_flush(); -@@ -3181,7 +3172,7 @@ - return; - } - -- if (((XClientMessageEvent *)event)->data.l[0] != -+ if ((Atom)((XClientMessageEvent *)event)->data.l[0] != - wm_atoms[DELETE_WINDOW_IDX]) - return; - -@@ -3192,13 +3183,12 @@ - /* - * Function called when property changed. Check for incoming commands - */ --/*ARGSUSED*/ - static void - gui_x11_send_event_handler(w, client_data, event, dum) -- Widget w; -- XtPointer client_data; -+ Widget w UNUSED; -+ XtPointer client_data UNUSED; - XEvent *event; -- Boolean *dum; -+ Boolean *dum UNUSED; - { - XPropertyEvent *e = (XPropertyEvent *) event; - -@@ -3273,11 +3263,10 @@ - } - } - --/* ARGSUSED */ - static void - gui_x11_blink_cb(timed_out, interval_id) -- XtPointer timed_out; -- XtIntervalId *interval_id; -+ XtPointer timed_out UNUSED; -+ XtIntervalId *interval_id UNUSED; - { - if (blink_state == BLINK_ON) - { -@@ -3439,47 +3428,37 @@ - char_u *signfile; - { - XpmAttributes attrs; -- XImage *sign; -+ XImage *sign = NULL; - int status; - - /* - * Setup the color substitution table. - */ -- sign = NULL; - if (signfile[0] != NUL && signfile[0] != '-') - { -- sign = (XImage *)alloc(sizeof(XImage)); -- if (sign != NULL) -+ XpmColorSymbol color[5] = - { -- XpmColorSymbol color[5] = -- { -- {"none", NULL, 0}, -- {"iconColor1", NULL, 0}, -- {"bottomShadowColor", NULL, 0}, -- {"topShadowColor", NULL, 0}, -- {"selectColor", NULL, 0} -- }; -- attrs.valuemask = XpmColorSymbols; -- attrs.numsymbols = 2; -- attrs.colorsymbols = color; -- attrs.colorsymbols[0].pixel = gui.back_pixel; -- attrs.colorsymbols[1].pixel = gui.norm_pixel; -- status = XpmReadFileToImage(gui.dpy, (char *)signfile, -+ {"none", NULL, 0}, -+ {"iconColor1", NULL, 0}, -+ {"bottomShadowColor", NULL, 0}, -+ {"topShadowColor", NULL, 0}, -+ {"selectColor", NULL, 0} -+ }; -+ attrs.valuemask = XpmColorSymbols; -+ attrs.numsymbols = 2; -+ attrs.colorsymbols = color; -+ attrs.colorsymbols[0].pixel = gui.back_pixel; -+ attrs.colorsymbols[1].pixel = gui.norm_pixel; -+ status = XpmReadFileToImage(gui.dpy, (char *)signfile, - &sign, NULL, &attrs); -- -- if (status == 0) -- { -- /* Sign width is fixed at two columns now. -- if (sign->width > gui.sign_width) -- gui.sign_width = sign->width + 8; */ -- } -- else -- { -- vim_free(sign); -- sign = NULL; -- EMSG(_(e_signdata)); -- } -+ if (status == 0) -+ { -+ /* Sign width is fixed at two columns now. -+ if (sign->width > gui.sign_width) -+ gui.sign_width = sign->width + 8; */ - } -+ else -+ EMSG(_(e_signdata)); - } - - return (void *)sign; -@@ -3489,8 +3468,7 @@ - gui_mch_destroy_sign(sign) - void *sign; - { -- XFree(((XImage *)sign)->data); -- vim_free(sign); -+ XDestroyImage((XImage*)sign); - } - #endif - -diff -Naur vim72.orig/src/gui_xmdlg.c vim72/src/gui_xmdlg.c ---- vim72.orig/src/gui_xmdlg.c 2008-06-21 17:05:32.000000000 +0100 -+++ vim72/src/gui_xmdlg.c 2009-07-22 22:54:22.000000000 +0100 -@@ -369,10 +369,10 @@ - char buf[TEMP_BUF_SIZE]; - XmString items[MAX_ENTRIES_IN_LIST]; - int i; -- int index; -+ int idx; - -- for (index = (int)ENCODING; index < (int)NONE; ++index) -- count[index] = 0; -+ for (idx = (int)ENCODING; idx < (int)NONE; ++idx) -+ count[idx] = 0; - - /* First we insert the wild char into every single list. */ - if (fix != ENCODING) -@@ -448,7 +448,7 @@ - - items[i] = XmStringCreateLocalized(list[ENCODING][i]); - -- if (i < n_items) -+ if (i < (int)n_items) - { - /* recycle old button */ - XtVaSetValues(children[i], -@@ -481,7 +481,7 @@ - - /* Destroy all the outstanding menu items. - */ -- for (i = count[ENCODING]; i < n_items; ++i) -+ for (i = count[ENCODING]; i < (int)n_items; ++i) - { - XtUnmanageChild(children[i]); - XtDestroyWidget(children[i]); -@@ -503,14 +503,14 @@ - /* - * Now loop trough the remaining lists and set them up. - */ -- for (index = (int)NAME; index < (int)NONE; ++index) -+ for (idx = (int)NAME; idx < (int)NONE; ++idx) - { - Widget w; - -- if (fix == (enum ListSpecifier)index) -+ if (fix == (enum ListSpecifier)idx) - continue; - -- switch ((enum ListSpecifier)index) -+ switch ((enum ListSpecifier)idx) - { - case NAME: - w = data->list[NAME]; -@@ -525,28 +525,27 @@ - w = (Widget)0; /* for lint */ - } - -- for (i = 0; i < count[index]; ++i) -+ for (i = 0; i < count[idx]; ++i) - { -- items[i] = XmStringCreateLocalized(list[index][i]); -- XtFree(list[index][i]); -+ items[i] = XmStringCreateLocalized(list[idx][i]); -+ XtFree(list[idx][i]); - } - XmListDeleteAllItems(w); -- XmListAddItems(w, items, count[index], 1); -- if (data->sel[index]) -+ XmListAddItems(w, items, count[idx], 1); -+ if (data->sel[idx]) - { - XmStringFree(items[0]); -- items[0] = XmStringCreateLocalized(data->sel[index]); -+ items[0] = XmStringCreateLocalized(data->sel[idx]); - XmListSelectItem(w, items[0], False); - XmListSetBottomItem(w, items[0]); - } -- for (i = 0; i < count[index]; ++i) -+ for (i = 0; i < count[idx]; ++i) - XmStringFree(items[i]); - } - } - --/*ARGSUSED*/ - static void --stoggle_callback(Widget w, -+stoggle_callback(Widget w UNUSED, - SharedFontSelData *data, - XmToggleButtonCallbackStruct *call_data) - { -@@ -695,25 +694,24 @@ - int n; - XmString str; - Arg args[4]; -- char *msg = _("no specific match"); -+ char *nomatch_msg = _("no specific match"); - - n = 0; -- str = XmStringCreateLocalized(msg); -+ str = XmStringCreateLocalized(nomatch_msg); - XtSetArg(args[n], XmNlabelString, str); ++n; - XtSetValues(data->sample, args, n); - apply_fontlist(data->sample); -- XmTextSetString(data->name, msg); -+ XmTextSetString(data->name, nomatch_msg); - XmStringFree(str); - - return False; - } - } - --/*ARGSUSED*/ - static void - encoding_callback(Widget w, - SharedFontSelData *data, -- XtPointer dummy) -+ XtPointer dummy UNUSED) - { - XmString str; - XmListCallbackStruct fake_data; -@@ -752,11 +750,10 @@ - do_choice(w, data, call_data, SIZE); - } - --/*ARGSUSED*/ - static void --cancel_callback(Widget w, -+cancel_callback(Widget w UNUSED, - SharedFontSelData *data, -- XmListCallbackStruct *call_data) -+ XmListCallbackStruct *call_data UNUSED) - { - if (data->sel[ENCODING]) - { -@@ -789,11 +786,10 @@ - data->exit = True; - } - --/*ARGSUSED*/ - static void --ok_callback(Widget w, -+ok_callback(Widget w UNUSED, - SharedFontSelData *data, -- XmPushButtonCallbackStruct *call_data) -+ XmPushButtonCallbackStruct *call_data UNUSED) - { - char *pattern; - char **name; -@@ -886,21 +882,21 @@ - { - int i; - int max; -- int index = 0; -+ int idx = 0; - int size; -- char str[128]; -+ char buf[128]; - - for (i = 0, max = 0; i < data->num; i++) - { -- get_part(fn(data, i), 7, str); -- size = atoi(str); -+ get_part(fn(data, i), 7, buf); -+ size = atoi(buf); - if ((size > max) && (size < MAX_DISPLAY_SIZE)) - { -- index = i; -+ idx = i; - max = size; - } - } -- strcpy(big_font, fn(data, index)); -+ strcpy(big_font, fn(data, idx)); - } - data->old = XLoadQueryFont(XtDisplay(parent), big_font); - data->old_list = gui_motif_create_fontlist(data->old); -@@ -1217,28 +1213,28 @@ - - if (i != 0) - { -- char name[TEMP_BUF_SIZE]; -- char style[TEMP_BUF_SIZE]; -- char size[TEMP_BUF_SIZE]; -- char encoding[TEMP_BUF_SIZE]; -+ char namebuf[TEMP_BUF_SIZE]; -+ char stylebuf[TEMP_BUF_SIZE]; -+ char sizebuf[TEMP_BUF_SIZE]; -+ char encodingbuf[TEMP_BUF_SIZE]; - char *found; - - found = names[0]; - -- name_part(found, name); -- style_part(found, style); -- size_part(found, size, data->in_pixels); -- encoding_part(found, encoding); -- -- if (strlen(name) > 0 -- && strlen(style) > 0 -- && strlen(size) > 0 -- && strlen(encoding) > 0) -+ name_part(found, namebuf); -+ style_part(found, stylebuf); -+ size_part(found, sizebuf, data->in_pixels); -+ encoding_part(found, encodingbuf); -+ -+ if (strlen(namebuf) > 0 -+ && strlen(stylebuf) > 0 -+ && strlen(sizebuf) > 0 -+ && strlen(encodingbuf) > 0) - { -- data->sel[NAME] = XtNewString(name); -- data->sel[STYLE] = XtNewString(style); -- data->sel[SIZE] = XtNewString(size); -- data->sel[ENCODING] = XtNewString(encoding); -+ data->sel[NAME] = XtNewString(namebuf); -+ data->sel[STYLE] = XtNewString(stylebuf); -+ data->sel[SIZE] = XtNewString(sizebuf); -+ data->sel[ENCODING] = XtNewString(encodingbuf); - data->font_name = XtNewString(names[0]); - display_sample(data); - XmTextSetString(data->name, data->font_name); -diff -Naur vim72.orig/src/gui_xmebw.c vim72/src/gui_xmebw.c ---- vim72.orig/src/gui_xmebw.c 2007-09-06 11:57:51.000000000 +0100 -+++ vim72/src/gui_xmebw.c 2009-07-22 22:54:22.000000000 +0100 -@@ -235,13 +235,12 @@ - return tmp; - } - --/*ARGSUSED*/ - static int - alloc_color(Display *display, - Colormap colormap, - char *colorname, - XColor *xcolor, -- void *closure) -+ void *closure UNUSED) - { - int status; - -@@ -595,9 +594,10 @@ - XtHeight(eb), eb->primitive.highlight_thickness); - } - --/*ARGSUSED*/ - static void --draw_pixmap(XmEnhancedButtonWidget eb, XEvent *event, Region region) -+draw_pixmap(XmEnhancedButtonWidget eb, -+ XEvent *event UNUSED, -+ Region region UNUSED) - { - Pixmap pix; - GC gc = eb->label.normal_GC; -@@ -641,7 +641,7 @@ - height = eb->core.height - 2 * y; - if (h < height) - height = h; -- if (depth == eb->core.depth) -+ if (depth == (int)eb->core.depth) - XCopyArea(XtDisplay(eb), pix, XtWindow(eb), gc, 0, 0, - width, height, x, y); - else if (depth == 1) -@@ -731,9 +731,11 @@ - eb->label.normal_GC = tmp_gc; - } - --/*ARGSUSED*/ - static void --Enter(Widget wid, XEvent *event, String *params, Cardinal *num_params) -+Enter(Widget wid, -+ XEvent *event, -+ String *params UNUSED, -+ Cardinal *num_params UNUSED) - { - XmEnhancedButtonWidget eb = (XmEnhancedButtonWidget) wid; - XmPushButtonCallbackStruct call_value; -@@ -818,9 +820,11 @@ - } - } - --/*ARGSUSED*/ - static void --Leave(Widget wid, XEvent *event, String *params, Cardinal *num_params) -+Leave(Widget wid, -+ XEvent *event, -+ String *params UNUSED, -+ Cardinal *num_params UNUSED) - { - XmEnhancedButtonWidget eb = (XmEnhancedButtonWidget)wid; - XmPushButtonCallbackStruct call_value; -@@ -976,9 +980,8 @@ - } - } - --/*ARGSUSED*/ - static void --Initialize(Widget rq, Widget ebw, ArgList args, Cardinal *n) -+Initialize(Widget rq, Widget ebw, ArgList args UNUSED, Cardinal *n UNUSED) - { - XmEnhancedButtonWidget request = (XmEnhancedButtonWidget)rq; - XmEnhancedButtonWidget eb = (XmEnhancedButtonWidget)ebw; -@@ -1056,9 +1059,12 @@ - free_pixmaps((XmEnhancedButtonWidget)w); - } - --/*ARGSUSED*/ - static Boolean --SetValues(Widget current, Widget request, Widget new, ArgList args, Cardinal *n) -+SetValues(Widget current, -+ Widget request UNUSED, -+ Widget new, -+ ArgList args UNUSED, -+ Cardinal *n UNUSED) - { - XmEnhancedButtonWidget cur = (XmEnhancedButtonWidget) current; - XmEnhancedButtonWidget eb = (XmEnhancedButtonWidget) new; -@@ -1108,7 +1114,7 @@ - if ((win_x < 0) || (win_y < 0)) - return False; - -- if ((win_x > r_width) || (win_y > r_height)) -+ if ((win_x > (int)r_width) || (win_y > (int)r_height)) - return False; - draw_highlight(eb); - draw_shadows(eb); -@@ -1256,7 +1262,7 @@ - } - else - { -- int adjust = 0; -+ adjust = 0; - - #if !defined(LESSTIF_VERSION) && (XmVersion > 1002) - /* -@@ -1268,12 +1274,11 @@ - { - case XmEXTERNAL_HIGHLIGHT: - adjust = (eb->primitive.highlight_thickness - -- (eb->pushbutton.default_button_shadow_thickness ? -- Xm3D_ENHANCE_PIXEL : 0)); -+ (eb->pushbutton.default_button_shadow_thickness -+ ? Xm3D_ENHANCE_PIXEL : 0)); - break; - - case XmINTERNAL_HIGHLIGHT: -- adjust = 0; - break; - - default: -diff -Naur vim72.orig/src/hardcopy.c vim72/src/hardcopy.c ---- vim72.orig/src/hardcopy.c 2008-01-11 20:46:20.000000000 +0000 -+++ vim72/src/hardcopy.c 2009-07-22 22:54:22.000000000 +0100 -@@ -442,12 +442,11 @@ - /* - * Print the page header. - */ --/*ARGSUSED*/ - static void - prt_header(psettings, pagenum, lnum) - prt_settings_T *psettings; - int pagenum; -- linenr_T lnum; -+ linenr_T lnum UNUSED; - { - int width = psettings->chars_per_line; - int page_line; -@@ -1881,7 +1880,7 @@ - return FALSE; - - /* Find type of DSC comment */ -- for (comment = 0; comment < NUM_ELEMENTS(prt_dsc_table); comment++) -+ for (comment = 0; comment < (int)NUM_ELEMENTS(prt_dsc_table); comment++) - if (prt_resfile_strncmp(0, prt_dsc_table[comment].string, - prt_dsc_table[comment].len) == 0) - break; -@@ -2454,12 +2453,11 @@ - } - #endif - --/*ARGSUSED*/ - int - mch_print_init(psettings, jobname, forceit) - prt_settings_T *psettings; - char_u *jobname; -- int forceit; -+ int forceit UNUSED; - { - int i; - char *paper_name; -@@ -2514,7 +2512,7 @@ - if (!(props & ENC_8BIT) && ((*p_pmcs != NUL) || !(props & ENC_UNICODE))) - { - p_mbenc_first = NULL; -- for (cmap = 0; cmap < NUM_ELEMENTS(prt_ps_mbfonts); cmap++) -+ for (cmap = 0; cmap < (int)NUM_ELEMENTS(prt_ps_mbfonts); cmap++) - if (prt_match_encoding((char *)p_encoding, &prt_ps_mbfonts[cmap], - &p_mbenc)) - { -@@ -2642,7 +2640,7 @@ - paper_name = "A4"; - paper_strlen = 2; - } -- for (i = 0; i < PRT_MEDIASIZE_LEN; ++i) -+ for (i = 0; i < (int)PRT_MEDIASIZE_LEN; ++i) - if (STRLEN(prt_mediasize[i].name) == (unsigned)paper_strlen - && STRNICMP(prt_mediasize[i].name, paper_name, - paper_strlen) == 0) -@@ -3308,10 +3306,9 @@ - return !prt_file_error; - } - --/*ARGSUSED*/ - int - mch_print_begin_page(str) -- char_u *str; -+ char_u *str UNUSED; - { - int page_num[2]; - -@@ -3379,11 +3376,10 @@ - #endif - } - --/*ARGSUSED*/ - int - mch_print_text_out(p, len) - char_u *p; -- int len; -+ int len UNUSED; - { - int need_break; - char_u ch; -diff -Naur vim72.orig/src/if_cscope.c vim72/src/if_cscope.c ---- vim72.orig/src/if_cscope.c 2008-06-24 17:32:34.000000000 +0100 -+++ vim72/src/if_cscope.c 2009-07-22 22:54:23.000000000 +0100 -@@ -46,7 +46,6 @@ - static int cs_find __ARGS((exarg_T *eap)); - static int cs_find_common __ARGS((char *opt, char *pat, int, int, int)); - static int cs_help __ARGS((exarg_T *eap)); --static void cs_init __ARGS((void)); - static void clear_csinfo __ARGS((int i)); - static int cs_insert_filelist __ARGS((char *, char *, char *, - struct stat *)); -@@ -66,7 +65,10 @@ - static int cs_show __ARGS((exarg_T *eap)); - - --static csinfo_T csinfo[CSCOPE_MAX_CONNECTIONS]; -+static csinfo_T * csinfo = NULL; -+static int csinfo_size = 0; /* number of items allocated in -+ csinfo[] */ -+ - static int eap_arg_len; /* length of eap->arg, set in - cs_lookup_cmd() */ - static cscmd_T cs_cmds[] = -@@ -74,7 +76,7 @@ - { "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 }, -+ 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, -@@ -83,7 +85,7 @@ - N_("Reinit all connections"), "reset", 0 }, - { "show", cs_show, - N_("Show connections"), "show", 0 }, -- { NULL } -+ { NULL, NULL, NULL, NULL, 0 } - }; - - static void -@@ -93,12 +95,125 @@ - (void)EMSG2(_("E560: Usage: cs[cope] %s"), cs_cmds[(int)x].usage); - } - -+#if defined(FEAT_CMDL_COMPL) || defined(PROTO) -+ -+static enum -+{ -+ EXP_CSCOPE_SUBCMD, /* expand ":cscope" sub-commands */ -+ EXP_SCSCOPE_SUBCMD, /* expand ":scscope" sub-commands */ -+ EXP_CSCOPE_FIND, /* expand ":cscope find" arguments */ -+ EXP_CSCOPE_KILL /* expand ":cscope kill" arguments */ -+} expand_what; -+ -+/* -+ * Function given to ExpandGeneric() to obtain the cscope command -+ * expansion. -+ */ -+ char_u * -+get_cscope_name(xp, idx) -+ expand_T *xp UNUSED; -+ int idx; -+{ -+ int current_idx; -+ int i; -+ -+ switch (expand_what) -+ { -+ case EXP_CSCOPE_SUBCMD: -+ /* Complete with sub-commands of ":cscope": -+ * add, find, help, kill, reset, show */ -+ return (char_u *)cs_cmds[idx].name; -+ case EXP_SCSCOPE_SUBCMD: -+ /* Complete with sub-commands of ":scscope": same sub-commands as -+ * ":cscope" but skip commands which don't support split windows */ -+ for (i = 0, current_idx = 0; cs_cmds[i].name != NULL; i++) -+ if (cs_cmds[i].cansplit) -+ if (current_idx++ == idx) -+ break; -+ return (char_u *)cs_cmds[i].name; -+ case EXP_CSCOPE_FIND: -+ { -+ const char *query_type[] = -+ { -+ "c", "d", "e", "f", "g", "i", "s", "t", NULL -+ }; -+ -+ /* Complete with query type of ":cscope find {query_type}". -+ * {query_type} can be letters (c, d, ... t) or numbers (0, 1, -+ * ..., 8) but only complete with letters, since numbers are -+ * redundant. */ -+ return (char_u *)query_type[idx]; -+ } -+ case EXP_CSCOPE_KILL: -+ { -+ static char connection[5]; -+ -+ /* ":cscope kill" accepts connection numbers or partial names of -+ * the pathname of the cscope database as argument. Only complete -+ * with connection numbers. -1 can also be used to kill all -+ * connections. */ -+ for (i = 0, current_idx = 0; i < csinfo_size; i++) -+ { -+ if (csinfo[i].fname == NULL) -+ continue; -+ if (current_idx++ == idx) -+ { -+ vim_snprintf(connection, sizeof(connection), "%d", i); -+ return (char_u *)connection; -+ } -+ } -+ return (current_idx == idx && idx > 0) ? (char_u *)"-1" : NULL; -+ } -+ default: -+ return NULL; -+ } -+} -+ -+/* -+ * Handle command line completion for :cscope command. -+ */ -+ void -+set_context_in_cscope_cmd(xp, arg, cmdidx) -+ expand_T *xp; -+ char_u *arg; -+ cmdidx_T cmdidx; -+{ -+ char_u *p; -+ -+ /* Default: expand subcommands */ -+ xp->xp_context = EXPAND_CSCOPE; -+ xp->xp_pattern = arg; -+ expand_what = (cmdidx == CMD_scscope) -+ ? EXP_SCSCOPE_SUBCMD : EXP_CSCOPE_SUBCMD; -+ -+ /* (part of) subcommand already typed */ -+ if (*arg != NUL) -+ { -+ p = skiptowhite(arg); -+ if (*p != NUL) /* past first word */ -+ { -+ xp->xp_pattern = skipwhite(p); -+ if (*skiptowhite(xp->xp_pattern) != NUL) -+ xp->xp_context = EXPAND_NOTHING; -+ else if (STRNICMP(arg, "add", p - arg) == 0) -+ xp->xp_context = EXPAND_FILES; -+ else if (STRNICMP(arg, "kill", p - arg) == 0) -+ expand_what = EXP_CSCOPE_KILL; -+ else if (STRNICMP(arg, "find", p - arg) == 0) -+ expand_what = EXP_CSCOPE_FIND; -+ else -+ xp->xp_context = EXPAND_NOTHING; -+ } -+ } -+} -+ -+#endif /* FEAT_CMDL_COMPL */ -+ - /* - * PRIVATE: do_cscope_general - * -- * find the command, print help if invalid, and the then call the -- * corresponding command function, -- * called from do_cscope and do_scscope -+ * Find the command, print help if invalid, and then call the corresponding -+ * command function. - */ - static void - do_cscope_general(eap, make_split) -@@ -107,7 +222,6 @@ - { - cscmd_T *cmdp; - -- cs_init(); - if ((cmdp = cs_lookup_cmd(eap)) == NULL) - { - cs_help(eap); -@@ -168,8 +282,6 @@ - { - int ret = FALSE; - -- cs_init(); -- - if (*eap->arg == NUL) - { - (void)EMSG(_("E562: Usage: cstag ")); -@@ -325,7 +437,7 @@ - if (num < 0 || num > 4 || (num > 0 && !dbpath)) - return FALSE; - -- for (i = 0; i < CSCOPE_MAX_CONNECTIONS; i++) -+ for (i = 0; i < csinfo_size; i++) - { - if (!csinfo[i].fname) - continue; -@@ -379,10 +491,9 @@ - * - * MAXPATHL 256 - */ --/* ARGSUSED */ - static int - cs_add(eap) -- exarg_T *eap; -+ exarg_T *eap UNUSED; - { - char *fname, *ppath, *flags = NULL; - -@@ -569,7 +680,7 @@ - short i; - short cnt = 0; - -- for (i = 0; i < CSCOPE_MAX_CONNECTIONS; i++) -+ for (i = 0; i < csinfo_size; i++) - { - if (csinfo[i].fname != NULL) - cnt++; -@@ -659,6 +770,7 @@ - { - char *cmd; - short search; -+ char *pat; - - switch (csoption[0]) - { -@@ -692,10 +804,17 @@ - return NULL; - } - -- if ((cmd = (char *)alloc((unsigned)(strlen(pattern) + 2))) == NULL) -+ /* Skip white space before the patter, except for text and pattern search, -+ * they may want to use the leading white space. */ -+ pat = pattern; -+ if (search != 4 && search != 6) -+ while vim_iswhite(*pat) -+ ++pat; -+ -+ if ((cmd = (char *)alloc((unsigned)(strlen(pat) + 2))) == NULL) - return NULL; - -- (void)sprintf(cmd, "%d%s", search, pattern); -+ (void)sprintf(cmd, "%d%s", search, pat); - - return cmd; - } /* cs_create_cmd */ -@@ -869,7 +988,7 @@ - vim_free(ppath); - - #if defined(UNIX) -- if (execl("/bin/sh", "sh", "-c", cmd, NULL) == -1) -+ if (execl("/bin/sh", "sh", "-c", cmd, (char *)NULL) == -1) - PERROR(_("cs_create_connection exec failed")); - - exit(127); -@@ -989,7 +1108,8 @@ - { - int i; - char *cmd; -- int nummatches[CSCOPE_MAX_CONNECTIONS], totmatches; -+ int *nummatches; -+ int totmatches; - #ifdef FEAT_QUICKFIX - char cmdletter; - char *qfpos; -@@ -1000,13 +1120,17 @@ - if (cmd == NULL) - return FALSE; - -+ nummatches = (int *)alloc(sizeof(int)*csinfo_size); -+ if (nummatches == NULL) -+ return FALSE; -+ - /* send query to all open connections, then count the total number - * of matches so we can alloc matchesp all in one swell foop - */ -- for (i = 0; i < CSCOPE_MAX_CONNECTIONS; i++) -+ for (i = 0; i < csinfo_size; i++) - nummatches[i] = 0; - totmatches = 0; -- for (i = 0; i < CSCOPE_MAX_CONNECTIONS; i++) -+ for (i = 0; i < csinfo_size; i++) - { - if (csinfo[i].fname == NULL || csinfo[i].to_fp == NULL) - continue; -@@ -1031,7 +1155,10 @@ - char *buf; - - if (!verbose) -+ { -+ vim_free(nummatches); - return FALSE; -+ } - - buf = (char *)alloc((unsigned)(strlen(opt) + strlen(pat) + strlen(nf))); - if (buf == NULL) -@@ -1042,6 +1169,7 @@ - (void)EMSG(buf); - vim_free(buf); - } -+ vim_free(nummatches); - return FALSE; - } - -@@ -1094,6 +1222,7 @@ - (void)EMSG(buf); - vim_free(buf); - } -+ vim_free(nummatches); - return FALSE; - } - } -@@ -1141,6 +1270,7 @@ - } - mch_remove(tmp); - vim_free(tmp); -+ vim_free(nummatches); - return TRUE; - } - else -@@ -1152,6 +1282,7 @@ - /* read output */ - cs_fill_results((char *)pat, totmatches, nummatches, &matches, - &contexts, &matched); -+ vim_free(nummatches); - if (matches == NULL) - return FALSE; - -@@ -1167,20 +1298,36 @@ - * - * print help - */ --/* ARGSUSED */ - static int - cs_help(eap) -- exarg_T *eap; -+ exarg_T *eap UNUSED; - { - cscmd_T *cmdp = cs_cmds; - - (void)MSG_PUTS(_("cscope commands:\n")); - while (cmdp->name != NULL) - { -- (void)smsg((char_u *)_("%-5s: %-30s (Usage: %s)"), -- cmdp->name, _(cmdp->help), cmdp->usage); -+ char *help = _(cmdp->help); -+ int space_cnt = 30 - vim_strsize((char_u *)help); -+ -+ /* Use %*s rather than %30s to ensure proper alignment in utf-8 */ -+ if (space_cnt < 0) -+ space_cnt = 0; -+ (void)smsg((char_u *)_("%-5s: %s%*s (Usage: %s)"), -+ cmdp->name, -+ help, space_cnt, " ", -+ cmdp->usage); - if (strcmp(cmdp->name, "find") == 0) -- MSG_PUTS(FIND_HELP); -+ 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++; - } - -@@ -1189,26 +1336,6 @@ - } /* cs_help */ - - --/* -- * PRIVATE: cs_init -- * -- * initialize cscope structure if not already -- */ -- static void --cs_init() --{ -- short i; -- static int init_already = FALSE; -- -- if (init_already) -- return; -- -- for (i = 0; i < CSCOPE_MAX_CONNECTIONS; i++) -- clear_csinfo(i); -- -- init_already = TRUE; --} /* cs_init */ -- - static void - clear_csinfo(i) - int i; -@@ -1257,13 +1384,12 @@ - * - * insert a new cscope database filename into the filelist - */ --/*ARGSUSED*/ - static int - cs_insert_filelist(fname, ppath, flags, sb) - char *fname; - char *ppath; - char *flags; -- struct stat *sb; -+ struct stat *sb UNUSED; - { - short i, j; - #ifndef UNIX -@@ -1306,7 +1432,7 @@ - #endif - - i = -1; /* can be set to the index of an empty item in csinfo */ -- for (j = 0; j < CSCOPE_MAX_CONNECTIONS; j++) -+ for (j = 0; j < csinfo_size; j++) - { - if (csinfo[j].fname != NULL - #if defined(UNIX) -@@ -1333,9 +1459,25 @@ - - if (i == -1) - { -- if (p_csverbose) -- (void)EMSG(_("E569: maximum number of cscope connections reached")); -- return -1; -+ i = csinfo_size; -+ if (csinfo_size == 0) -+ { -+ /* First time allocation: allocate only 1 connection. It should -+ * be enough for most users. If more is needed, csinfo will be -+ * reallocated. */ -+ csinfo_size = 1; -+ csinfo = (csinfo_T *)alloc_clear(sizeof(csinfo_T)); -+ } -+ else -+ { -+ /* Reallocate space for more connections. */ -+ csinfo_size *= 2; -+ csinfo = vim_realloc(csinfo, sizeof(csinfo_T)*csinfo_size); -+ } -+ if (csinfo == NULL) -+ return -1; -+ for (j = csinfo_size/2; j < csinfo_size; j++) -+ clear_csinfo(j); - } - - if ((csinfo[i].fname = (char *)alloc((unsigned)strlen(fname)+1)) == NULL) -@@ -1419,10 +1561,9 @@ - * - * nuke em - */ --/* ARGSUSED */ - static int - cs_kill(eap) -- exarg_T *eap; -+ exarg_T *eap UNUSED; - { - char *stok; - short i; -@@ -1443,15 +1584,14 @@ - /* It must be part of a name. We will try to find a match - * within all the names in the csinfo data structure - */ -- for (i = 0; i < CSCOPE_MAX_CONNECTIONS; i++) -+ for (i = 0; i < csinfo_size; i++) - { - if (csinfo[i].fname != NULL && strstr(csinfo[i].fname, stok)) - break; - } - } - -- if ((i >= CSCOPE_MAX_CONNECTIONS || i < -1 || csinfo[i].fname == NULL) -- && i != -1) -+ if ((i != -1) && (i >= csinfo_size || i < -1 || csinfo[i].fname == NULL)) - { - if (p_csverbose) - (void)EMSG2(_("E261: cscope connection %s not found"), stok); -@@ -1460,7 +1600,7 @@ - { - if (i == -1) - { -- for (i = 0; i < CSCOPE_MAX_CONNECTIONS; i++) -+ for (i = 0; i < csinfo_size; i++) - { - if (csinfo[i].fname) - cs_kill_execute(i, csinfo[i].fname); -@@ -1720,7 +1860,7 @@ - if (buf == NULL) - return; - -- for (i = 0; i < CSCOPE_MAX_CONNECTIONS; i++) -+ for (i = 0; i < csinfo_size; i++) - { - if (nummatches_a[i] < 1) - continue; -@@ -1792,7 +1932,7 @@ - if ((cntxts = (char **)alloc(sizeof(char *) * totmatches)) == NULL) - goto parse_out; - -- for (i = 0; i < CSCOPE_MAX_CONNECTIONS; i++) -+ for (i = 0; i < csinfo_size; i++) - { - if (nummatches_a[i] < 1) - continue; -@@ -2099,7 +2239,6 @@ - /* - * Used to catch and ignore SIGALRM below. - */ --/* ARGSUSED */ - static RETSIGTYPE - sig_handler SIGDEFARG(sigarg) - { -@@ -2239,19 +2378,21 @@ - * - * calls cs_kill on all cscope connections then reinits - */ --/* ARGSUSED */ - static int - cs_reset(eap) -- exarg_T *eap; -+ exarg_T *eap UNUSED; - { - char **dblist = NULL, **pplist = NULL, **fllist = NULL; - int i; - char buf[20]; /* for sprintf " (#%d)" */ - -+ if (csinfo_size == 0) -+ return CSCOPE_SUCCESS; -+ - /* malloc our db and ppath list */ -- dblist = (char **)alloc(CSCOPE_MAX_CONNECTIONS * sizeof(char *)); -- pplist = (char **)alloc(CSCOPE_MAX_CONNECTIONS * sizeof(char *)); -- fllist = (char **)alloc(CSCOPE_MAX_CONNECTIONS * sizeof(char *)); -+ dblist = (char **)alloc(csinfo_size * sizeof(char *)); -+ pplist = (char **)alloc(csinfo_size * sizeof(char *)); -+ fllist = (char **)alloc(csinfo_size * sizeof(char *)); - if (dblist == NULL || pplist == NULL || fllist == NULL) - { - vim_free(dblist); -@@ -2260,7 +2401,7 @@ - return CSCOPE_FAILURE; - } - -- for (i = 0; i < CSCOPE_MAX_CONNECTIONS; i++) -+ for (i = 0; i < csinfo_size; i++) - { - dblist[i] = csinfo[i].fname; - pplist[i] = csinfo[i].ppath; -@@ -2270,7 +2411,7 @@ - } - - /* rebuild the cscope connection list */ -- for (i = 0; i < CSCOPE_MAX_CONNECTIONS; i++) -+ for (i = 0; i < csinfo_size; i++) - { - if (dblist[i] != NULL) - { -@@ -2355,10 +2496,9 @@ - * - * show all cscope connections - */ --/* ARGSUSED */ - static int - cs_show(eap) -- exarg_T *eap; -+ exarg_T *eap UNUSED; - { - short i; - if (cs_cnt_connections() == 0) -@@ -2368,7 +2508,7 @@ - MSG_PUTS_ATTR( - _(" # pid database name prepend path\n"), - hl_attr(HLF_T)); -- for (i = 0; i < CSCOPE_MAX_CONNECTIONS; i++) -+ for (i = 0; i < csinfo_size; i++) - { - if (csinfo[i].fname == NULL) - continue; -@@ -2397,8 +2537,10 @@ - { - int i; - -- for (i = 0; i < CSCOPE_MAX_CONNECTIONS; i++) -+ for (i = 0; i < csinfo_size; i++) - cs_release_csp(i, TRUE); -+ vim_free(csinfo); -+ csinfo_size = 0; - } - - #endif /* FEAT_CSCOPE */ -diff -Naur vim72.orig/src/if_cscope.h vim72/src/if_cscope.h ---- vim72.orig/src/if_cscope.h 2007-09-02 15:51:08.000000000 +0100 -+++ vim72/src/if_cscope.h 2009-07-22 22:54:23.000000000 +0100 -@@ -25,7 +25,6 @@ - - #define CSCOPE_SUCCESS 0 - #define CSCOPE_FAILURE -1 --#define CSCOPE_MAX_CONNECTIONS 8 /* you actually need more? */ - - #define CSCOPE_DBFILE "cscope.out" - #define CSCOPE_PROMPT ">> " -@@ -42,17 +41,6 @@ - * 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; -diff -Naur vim72.orig/src/if_mzsch.c vim72/src/if_mzsch.c ---- vim72.orig/src/if_mzsch.c 2007-07-01 17:44:49.000000000 +0100 -+++ vim72/src/if_mzsch.c 2009-07-22 22:54:23.000000000 +0100 -@@ -4,6 +4,8 @@ - * Original work by Brent Fulgham - * (Based on lots of help from Matthew Flatt) - * -+ * TODO Convert byte-strings to char strings? -+ * - * This consists of six parts: - * 1. MzScheme interpreter main program - * 2. Routines that handle the external interface between MzScheme and -@@ -18,7 +20,7 @@ - * garbage collector will do it self - * 2. Requires at least NORMAL features. I can't imagine why one may want - * to build with SMALL or TINY features but with MzScheme interface. -- * 3. I don't use K&R-style functions. Anyway, MzScheme headers are ANSI. -+ * 3. I don't use K&R-style functions. Anyways, MzScheme headers are ANSI. - */ - - #include "vim.h" -@@ -29,14 +31,15 @@ - * depend". */ - #if defined(FEAT_MZSCHEME) || defined(PROTO) - -+#include -+ - /* Base data structures */ - #define SCHEME_VIMBUFFERP(obj) SAME_TYPE(SCHEME_TYPE(obj), mz_buffer_type) - #define SCHEME_VIMWINDOWP(obj) SAME_TYPE(SCHEME_TYPE(obj), mz_window_type) - - typedef struct - { -- Scheme_Type tag; -- Scheme_Env *env; -+ Scheme_Object so; - buf_T *buf; - } vim_mz_buffer; - -@@ -44,7 +47,7 @@ - - typedef struct - { -- Scheme_Type tag; -+ Scheme_Object so; - win_T *win; - } vim_mz_window; - -@@ -67,19 +70,6 @@ - Scheme_Object *port; - } Port_Info; - --/* info for closed prim */ --/* -- * data have different means: -- * for do_eval it is char* -- * for do_apply is Apply_Onfo* -- * for do_load is Port_Info* -- */ --typedef struct --{ -- void *data; -- Scheme_Env *env; --} Cmd_Info; -- - /* info for do_apply */ - typedef struct - { -@@ -122,7 +112,6 @@ - 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 Scheme_Object *get_buffer_namespace(void *, int, Scheme_Object **); - static vim_mz_buffer *get_vim_curr_buffer(void); - - /* Window-related commands */ -@@ -163,8 +152,6 @@ - static int do_mzscheme_command(exarg_T *, void *, Scheme_Closed_Prim *what); - static void startup_mzscheme(void); - static char *string_to_line(Scheme_Object *obj); --static int mzscheme_io_init(void); --static void mzscheme_interface_init(vim_mz_buffer *self); - static void do_output(char *mesg, long len); - static void do_printf(char *format, ...); - static void do_flush(void); -@@ -174,19 +161,52 @@ - static Scheme_Object *do_eval(void *, int noargc, Scheme_Object **noargv); - static Scheme_Object *do_load(void *, int noargc, Scheme_Object **noargv); - static Scheme_Object *do_apply(void *, int noargc, Scheme_Object **noargv); --static void register_vim_exn(Scheme_Env *env); -+static void register_vim_exn(void); - static vim_mz_buffer *get_buffer_arg(const char *fname, int argnum, - int argc, Scheme_Object **argv); - static vim_mz_window *get_window_arg(const char *fname, int argnum, - int argc, Scheme_Object **argv); --static void add_vim_exn(Scheme_Env *env); - static int line_in_range(linenr_T, buf_T *); - static void check_line_range(linenr_T, buf_T *); - static void mz_fix_cursor(int lo, int hi, int extra); - --static int eval_in_namespace(void *, Scheme_Closed_Prim *, Scheme_Env *, -- Scheme_Object **ret); --static void make_modules(Scheme_Env *); -+static int eval_with_exn_handling(void *, Scheme_Closed_Prim *, -+ Scheme_Object **ret); -+static void make_modules(void); -+static void init_exn_catching_apply(void); -+static int mzscheme_env_main(Scheme_Env *env, int argc, char **argv); -+static int mzscheme_init(void); -+#ifdef FEAT_EVAL -+static Scheme_Object *vim_to_mzscheme(typval_T *vim_value, int depth, -+ Scheme_Hash_Table *visited); -+#endif -+ -+#ifdef MZ_PRECISE_GC -+static int buffer_size_proc(void *obj) -+{ -+ return gcBYTES_TO_WORDS(sizeof(vim_mz_buffer)); -+} -+static int buffer_mark_proc(void *obj) -+{ -+ return buffer_size_proc(obj); -+} -+static int buffer_fixup_proc(void *obj) -+{ -+ return buffer_size_proc(obj); -+} -+static int window_size_proc(void *obj) -+{ -+ return gcBYTES_TO_WORDS(sizeof(vim_mz_window)); -+} -+static int window_mark_proc(void *obj) -+{ -+ return window_size_proc(obj); -+} -+static int window_fixup_proc(void *obj) -+{ -+ return window_size_proc(obj); -+} -+#endif - - #ifdef DYNAMIC_MZSCHEME - -@@ -260,8 +280,6 @@ - (Scheme_Closed_Prim *prim, void *data, const char *name, mzshort mina, - mzshort maxa); - static Scheme_Object *(*dll_scheme_make_integer_value)(long i); --static Scheme_Object *(*dll_scheme_make_namespace)(int argc, -- Scheme_Object *argv[]); - static Scheme_Object *(*dll_scheme_make_pair)(Scheme_Object *car, - Scheme_Object *cdr); - static Scheme_Object *(*dll_scheme_make_prim_w_arity)(Scheme_Prim *prim, -@@ -311,6 +329,17 @@ - static Scheme_Object *(*dll_scheme_char_string_to_path) - (Scheme_Object *s); - # endif -+static Scheme_Hash_Table *(*dll_scheme_make_hash_table)(int type); -+static void (*dll_scheme_hash_set)(Scheme_Hash_Table *table, -+ Scheme_Object *key, Scheme_Object *value); -+static Scheme_Object *(*dll_scheme_hash_get)(Scheme_Hash_Table *table, -+ Scheme_Object *key); -+static Scheme_Object *(*dll_scheme_make_double)(double d); -+# ifdef INCLUDE_MZSCHEME_BASE -+static Scheme_Object *(*dll_scheme_make_sized_byte_string)(char *chars, -+ long len, int copy); -+static Scheme_Object *(*dll_scheme_namespace_require)(Scheme_Object *req); -+# endif - - /* arrays are imported directly */ - # define scheme_eof dll_scheme_eof -@@ -368,7 +397,6 @@ - # define scheme_lookup_global dll_scheme_lookup_global - # define scheme_make_closed_prim_w_arity dll_scheme_make_closed_prim_w_arity - # define scheme_make_integer_value dll_scheme_make_integer_value --# define scheme_make_namespace dll_scheme_make_namespace - # define scheme_make_pair dll_scheme_make_pair - # define scheme_make_prim_w_arity dll_scheme_make_prim_w_arity - # if MZSCHEME_VERSION_MAJOR < 299 -@@ -403,6 +431,14 @@ - # define scheme_char_string_to_path \ - dll_scheme_char_string_to_path - # endif -+# define scheme_make_hash_table dll_scheme_make_hash_table -+# define scheme_hash_set dll_scheme_hash_set -+# define scheme_hash_get dll_scheme_hash_get -+# define scheme_make_double dll_scheme_make_double -+# ifdef INCLUDE_MZSCHEME_BASE -+# define scheme_make_sized_byte_string dll_scheme_make_sized_byte_string -+# define scheme_namespace_require dll_scheme_namespace_require -+# endif - - typedef struct - { -@@ -468,7 +504,6 @@ - {"scheme_make_closed_prim_w_arity", - (void **)&dll_scheme_make_closed_prim_w_arity}, - {"scheme_make_integer_value", (void **)&dll_scheme_make_integer_value}, -- {"scheme_make_namespace", (void **)&dll_scheme_make_namespace}, - {"scheme_make_pair", (void **)&dll_scheme_make_pair}, - {"scheme_make_prim_w_arity", (void **)&dll_scheme_make_prim_w_arity}, - # if MZSCHEME_VERSION_MAJOR < 299 -@@ -502,9 +537,16 @@ - {"scheme_current_config", (void **)&dll_scheme_current_config}, - {"scheme_char_string_to_byte_string", - (void **)&dll_scheme_char_string_to_byte_string}, -- {"scheme_char_string_to_path", -- (void **)&dll_scheme_char_string_to_path}, -+ {"scheme_char_string_to_path", (void **)&dll_scheme_char_string_to_path}, - # endif -+ {"scheme_make_hash_table", (void **)&dll_scheme_make_hash_table}, -+ {"scheme_hash_set", (void **)&dll_scheme_hash_set}, -+ {"scheme_hash_get", (void **)&dll_scheme_hash_get}, -+ {"scheme_make_double", (void **)&dll_scheme_make_double}, -+# ifdef INCLUDE_MZSCHEME_BASE -+ {"scheme_make_sized_byte_string", (void **)&dll_scheme_make_sized_byte_string}, -+ {"scheme_namespace_require", (void **)&dll_scheme_namespace_require}, -+#endif - {NULL, NULL}}; - - static HINSTANCE hMzGC = 0; -@@ -592,6 +634,11 @@ - } - #endif /* DYNAMIC_MZSCHEME */ - -+/* need to put it here for dynamic stuff to work */ -+#ifdef INCLUDE_MZSCHEME_BASE -+# include "mzscheme_base.c" -+#endif -+ - /* - *======================================================================== - * 1. MzScheme interpreter startup -@@ -601,21 +648,22 @@ - static Scheme_Type mz_buffer_type; - static Scheme_Type mz_window_type; - --static int initialized = 0; -+static int initialized = FALSE; - - /* global environment */ - static Scheme_Env *environment = NULL; - /* output/error handlers */ - static Scheme_Object *curout = NULL; - static Scheme_Object *curerr = NULL; --/* vim:exn exception */ -+/* exn:vim exception */ - static Scheme_Object *exn_catching_apply = NULL; - static Scheme_Object *exn_p = NULL; - static Scheme_Object *exn_message = NULL; - static Scheme_Object *vim_exn = NULL; /* Vim Error exception */ -- /* values for exn:vim - constructor, predicate, accessors etc */ --static Scheme_Object *vim_exn_names = NULL; --static Scheme_Object *vim_exn_values = NULL; -+ -+#if !defined(MZ_PRECISE_GC) || MZSCHEME_VERSION_MAJOR < 400 -+static void *stack_base = NULL; -+#endif - - static long range_start; - static long range_end; -@@ -667,11 +715,9 @@ - static void CALLBACK - timer_proc(HWND hwnd, UINT uMsg, UINT idEvent, DWORD dwTime) - # elif defined(FEAT_GUI_GTK) --/*ARGSUSED*/ - static gint - timer_proc(gpointer data) - # elif defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_ATHENA) --/* ARGSUSED */ - static void - timer_proc(XtPointer timed_out, XtIntervalId *interval_id) - # elif defined(FEAT_GUI_MAC) -@@ -753,12 +799,64 @@ - #endif - } - -+ void -+mzscheme_main(void) -+{ -+#if defined(MZ_PRECISE_GC) && MZSCHEME_VERSION_MAJOR >= 400 -+ /* use trampoline for precise GC in MzScheme >= 4.x */ -+ scheme_main_setup(TRUE, mzscheme_env_main, 0, NULL); -+#else -+ mzscheme_env_main(NULL, 0, NULL); -+#endif -+} -+ -+ static int -+mzscheme_env_main(Scheme_Env *env, int argc, char **argv) -+{ -+ /* neither argument nor return values are used */ -+#ifdef MZ_PRECISE_GC -+# if MZSCHEME_VERSION_MAJOR < 400 -+ /* -+ * Starting from version 4.x, embedding applications must use -+ * scheme_main_setup/scheme_main_stack_setup trampolines -+ * rather than setting stack base directly with scheme_set_stack_base -+ */ -+ Scheme_Object *dummy = NULL; -+ MZ_GC_DECL_REG(1); -+ MZ_GC_VAR_IN_REG(0, dummy); -+ -+ stack_base = &__gc_var_stack__; -+# else -+ /* environment has been created by us by Scheme */ -+ environment = env; -+# endif -+ /* -+ * In 4.x, all activities must be performed inside trampoline -+ * so we are forced to initialise GC immediately -+ * This can be postponed in 3.x but I see no point in implementing -+ * a feature which will work in older versions only. -+ * One would better use conservative GC if he needs dynamic MzScheme -+ */ -+ mzscheme_init(); -+#else -+ int dummy = 0; -+ stack_base = (void *)&dummy; -+#endif -+ main_loop(FALSE, FALSE); -+#if defined(MZ_PRECISE_GC) && MZSCHEME_VERSION_MAJOR < 400 -+ /* releasing dummy */ -+ MZ_GC_REG(); -+ MZ_GC_UNREG(); -+#endif -+ return 0; -+} -+ - static void - startup_mzscheme(void) - { -- Scheme_Object *proc_make_security_guard; -- -- scheme_set_stack_base(NULL, 1); -+#if !defined(MZ_PRECISE_GC) || MZSCHEME_VERSION_MAJOR < 400 -+ scheme_set_stack_base(stack_base, 1); -+#endif - - MZ_REGISTER_STATIC(environment); - MZ_REGISTER_STATIC(curout); -@@ -767,10 +865,35 @@ - MZ_REGISTER_STATIC(exn_p); - MZ_REGISTER_STATIC(exn_message); - MZ_REGISTER_STATIC(vim_exn); -- MZ_REGISTER_STATIC(vim_exn_names); -- MZ_REGISTER_STATIC(vim_exn_values); - -+#if !defined(MZ_PRECISE_GC) || MZSCHEME_VERSION_MAJOR < 400 -+ /* in newer versions of precise GC the initial env has been created */ - environment = scheme_basic_env(); -+#endif -+ MZ_GC_CHECK(); -+ -+#ifdef INCLUDE_MZSCHEME_BASE -+ { -+ /* -+ * versions 4.x do not provide Scheme bindings by defaults -+ * we need to add them explicitly -+ */ -+ Scheme_Object *scheme_base_symbol = NULL; -+ MZ_GC_DECL_REG(1); -+ MZ_GC_VAR_IN_REG(0, scheme_base_symbol); -+ MZ_GC_REG(); -+ /* invoke function from generated and included base.c */ -+ declare_modules(environment); -+ scheme_base_symbol = scheme_intern_symbol("scheme/base"); -+ MZ_GC_CHECK(); -+ scheme_namespace_require(scheme_base_symbol); -+ MZ_GC_CHECK(); -+ MZ_GC_UNREG(); -+ } -+#endif -+ register_vim_exn(); -+ /* use new environment to initialise exception handling */ -+ init_exn_catching_apply(); - - /* redirect output */ - scheme_console_output = do_output; -@@ -778,48 +901,131 @@ - - #ifdef MZSCHEME_COLLECTS - /* setup 'current-library-collection-paths' parameter */ -- scheme_set_param(scheme_config, MZCONFIG_COLLECTION_PATHS, -- scheme_make_pair( - # if MZSCHEME_VERSION_MAJOR >= 299 -- scheme_char_string_to_path( -- scheme_byte_string_to_char_string( -- scheme_make_byte_string(MZSCHEME_COLLECTS))), -+ { -+ Scheme_Object *coll_byte_string = NULL; -+ Scheme_Object *coll_char_string = NULL; -+ Scheme_Object *coll_path = NULL; -+ Scheme_Object *coll_pair = NULL; -+ Scheme_Config *config = NULL; -+ -+ MZ_GC_DECL_REG(5); -+ MZ_GC_VAR_IN_REG(0, coll_byte_string); -+ MZ_GC_VAR_IN_REG(1, coll_char_string); -+ MZ_GC_VAR_IN_REG(2, coll_path); -+ MZ_GC_VAR_IN_REG(3, coll_pair); -+ MZ_GC_VAR_IN_REG(4, config); -+ MZ_GC_REG(); -+ coll_byte_string = scheme_make_byte_string(MZSCHEME_COLLECTS); -+ MZ_GC_CHECK(); -+ coll_char_string = scheme_byte_string_to_char_string(coll_byte_string); -+ MZ_GC_CHECK(); -+ coll_path = scheme_char_string_to_path(coll_char_string); -+ MZ_GC_CHECK(); -+ coll_pair = scheme_make_pair(coll_path, scheme_null); -+ MZ_GC_CHECK(); -+ config = scheme_config; -+ MZ_GC_CHECK(); -+ scheme_set_param(config, MZCONFIG_COLLECTION_PATHS, coll_pair); -+ MZ_GC_CHECK(); -+ MZ_GC_UNREG(); -+ } - # else -- scheme_make_string(MZSCHEME_COLLECTS), -+ { -+ Scheme_Object *coll_string = NULL; -+ Scheme_Object *coll_pair = NULL; -+ Scheme_Config *config = NULL; -+ -+ MZ_GC_DECL_REG(3); -+ MZ_GC_VAR_IN_REG(0, coll_string); -+ MZ_GC_VAR_IN_REG(1, coll_pair); -+ MZ_GC_VAR_IN_REG(2, config); -+ MZ_GC_REG(); -+ coll_string = scheme_make_string(MZSCHEME_COLLECTS); -+ MZ_GC_CHECK(); -+ coll_pair = scheme_make_pair(coll_string, scheme_null); -+ MZ_GC_CHECK(); -+ config = scheme_config; -+ MZ_GC_CHECK(); -+ scheme_set_param(config, MZCONFIG_COLLECTION_PATHS, coll_pair); -+ MZ_GC_CHECK(); -+ MZ_GC_UNREG(); -+ } - # endif -- scheme_null)); - #endif - #ifdef HAVE_SANDBOX -- /* setup sandbox guards */ -- proc_make_security_guard = scheme_lookup_global( -- scheme_intern_symbol("make-security-guard"), -- environment); -- if (proc_make_security_guard != NULL) -- { -- Scheme_Object *args[3]; -- Scheme_Object *guard; -- args[0] = scheme_get_param(scheme_config, MZCONFIG_SECURITY_GUARD); -- args[1] = scheme_make_prim_w_arity(sandbox_file_guard, -- "sandbox-file-guard", 3, 3); -- args[2] = scheme_make_prim_w_arity(sandbox_network_guard, -- "sandbox-network-guard", 4, 4); -- guard = scheme_apply(proc_make_security_guard, 3, args); -- scheme_set_param(scheme_config, MZCONFIG_SECURITY_GUARD, guard); -+ { -+ Scheme_Object *make_security_guard = NULL; -+ MZ_GC_DECL_REG(1); -+ MZ_GC_VAR_IN_REG(0, make_security_guard); -+ MZ_GC_REG(); -+ -+#if MZSCHEME_VERSION_MAJOR < 400 -+ { -+ Scheme_Object *make_security_guard_symbol = NULL; -+ MZ_GC_DECL_REG(1); -+ MZ_GC_VAR_IN_REG(0, make_security_guard_symbol); -+ MZ_GC_REG(); -+ make_security_guard_symbol = scheme_intern_symbol("make-security-guard"); -+ MZ_GC_CHECK(); -+ make_security_guard = scheme_lookup_global( -+ make_security_guard_symbol, environment); -+ MZ_GC_UNREG(); -+ } -+#else -+ make_security_guard = scheme_builtin_value("make-security-guard"); -+ MZ_GC_CHECK(); -+#endif -+ -+ /* setup sandbox guards */ -+ if (make_security_guard != NULL) -+ { -+ Scheme_Object *args[3] = {NULL, NULL, NULL}; -+ Scheme_Object *guard = NULL; -+ Scheme_Config *config = NULL; -+ MZ_GC_DECL_REG(5); -+ MZ_GC_ARRAY_VAR_IN_REG(0, args, 3); -+ MZ_GC_VAR_IN_REG(3, guard); -+ MZ_GC_VAR_IN_REG(4, config); -+ MZ_GC_REG(); -+ config = scheme_config; -+ MZ_GC_CHECK(); -+ args[0] = scheme_get_param(config, MZCONFIG_SECURITY_GUARD); -+ MZ_GC_CHECK(); -+ args[1] = scheme_make_prim_w_arity(sandbox_file_guard, -+ "sandbox-file-guard", 3, 3); -+ args[2] = scheme_make_prim_w_arity(sandbox_network_guard, -+ "sandbox-network-guard", 4, 4); -+ guard = scheme_apply(make_security_guard, 3, args); -+ MZ_GC_CHECK(); -+ scheme_set_param(config, MZCONFIG_SECURITY_GUARD, guard); -+ MZ_GC_CHECK(); -+ MZ_GC_UNREG(); -+ } -+ MZ_GC_UNREG(); - } - #endif - /* Create buffer and window types for use in Scheme code */ - mz_buffer_type = scheme_make_type(""); -+ MZ_GC_CHECK(); - mz_window_type = scheme_make_type(""); -+ MZ_GC_CHECK(); -+#ifdef MZ_PRECISE_GC -+ GC_register_traversers(mz_buffer_type, -+ buffer_size_proc, buffer_mark_proc, buffer_fixup_proc, -+ TRUE, TRUE); -+ GC_register_traversers(mz_window_type, -+ window_size_proc, window_mark_proc, window_fixup_proc, -+ TRUE, TRUE); -+#endif - -- register_vim_exn(environment); -- make_modules(environment); -+ make_modules(); - - /* - * setup callback to receive notifications - * whether thread scheduling is (or not) required - */ - scheme_notify_multithread = notify_multithread; -- initialized = 1; - } - - /* -@@ -829,71 +1035,38 @@ - static int - mzscheme_init(void) - { -- int do_require = FALSE; -- - if (!initialized) - { -- do_require = TRUE; - #ifdef DYNAMIC_MZSCHEME - if (!mzscheme_enabled(TRUE)) - { -- EMSG(_("???: Sorry, this command is disabled, the MzScheme library could not be loaded.")); -+ EMSG(_("E815: Sorry, this command is disabled, the MzScheme libraries could not be loaded.")); - return -1; - } - #endif - startup_mzscheme(); -- -- if (mzscheme_io_init()) -- return -1; -- -+ initialized = TRUE; - } -- /* recreate ports each call effectivelly clearing these ones */ -- curout = scheme_make_string_output_port(); -- curerr = scheme_make_string_output_port(); -- scheme_set_param(scheme_config, MZCONFIG_OUTPUT_PORT, curout); -- scheme_set_param(scheme_config, MZCONFIG_ERROR_PORT, curerr); -- -- if (do_require) -- { -- /* auto-instantiate in basic env */ -- eval_in_namespace("(require (prefix vimext: vimext))", do_eval, -- environment, NULL); -- } -- -- return 0; --} -- --/* -- * This routine fills the namespace with various important routines that can -- * be used within MzScheme. -- */ -- static void --mzscheme_interface_init(vim_mz_buffer *mzbuff) --{ -- Scheme_Object *attach; -- -- mzbuff->env = (Scheme_Env *)scheme_make_namespace(0, NULL); -- -- /* -- * attach instantiated modules from global namespace -- * so they can be easily instantiated in the buffer namespace -- */ -- attach = scheme_lookup_global( -- scheme_intern_symbol("namespace-attach-module"), -- environment); -- -- if (attach != NULL) - { -- Scheme_Object *ret; -- Scheme_Object *args[2]; -- -- args[0] = (Scheme_Object *)environment; -- args[1] = scheme_intern_symbol("vimext"); -- -- ret = (Scheme_Object *)mzvim_apply(attach, 2, args); -+ Scheme_Config *config = NULL; -+ MZ_GC_DECL_REG(1); -+ MZ_GC_VAR_IN_REG(0, config); -+ MZ_GC_REG(); -+ config = scheme_config; -+ MZ_GC_CHECK(); -+ /* recreate ports each call effectivelly clearing these ones */ -+ curout = scheme_make_string_output_port(); -+ MZ_GC_CHECK(); -+ curerr = scheme_make_string_output_port(); -+ MZ_GC_CHECK(); -+ scheme_set_param(config, MZCONFIG_OUTPUT_PORT, curout); -+ MZ_GC_CHECK(); -+ scheme_set_param(config, MZCONFIG_ERROR_PORT, curerr); -+ MZ_GC_CHECK(); -+ MZ_GC_UNREG(); - } - -- add_vim_exn(mzbuff->env); -+ return 0; - } - - /* -@@ -903,28 +1076,25 @@ - */ - - /* -- * Evaluate command in namespace with exception handling -+ * Evaluate command with exception handling - */ - static int --eval_in_namespace(void *data, Scheme_Closed_Prim *what, Scheme_Env *env, -- Scheme_Object **ret) -+eval_with_exn_handling(void *data, Scheme_Closed_Prim *what, Scheme_Object **ret) - { -- Scheme_Object *value; -- Scheme_Object *exn; -- Cmd_Info info; /* closure info */ -- -- info.data = data; -- info.env = env; -- -- scheme_set_param(scheme_config, MZCONFIG_ENV, -- (Scheme_Object *) env); -- /* -- * ensure all evaluations will be in current buffer namespace, -- * the second argument to scheme_eval_string isn't enough! -- */ -- value = _apply_thunk_catch_exceptions( -- scheme_make_closed_prim_w_arity(what, &info, "mzvim", 0, 0), -- &exn); -+ Scheme_Object *value = NULL; -+ Scheme_Object *exn = NULL; -+ Scheme_Object *prim = NULL; -+ -+ MZ_GC_DECL_REG(3); -+ MZ_GC_VAR_IN_REG(0, value); -+ MZ_GC_VAR_IN_REG(1, exn); -+ MZ_GC_VAR_IN_REG(2, prim); -+ MZ_GC_REG(); -+ -+ prim = scheme_make_closed_prim_w_arity(what, data, "mzvim", 0, 0); -+ MZ_GC_CHECK(); -+ value = _apply_thunk_catch_exceptions(prim, &exn); -+ MZ_GC_CHECK(); - - if (!value) - { -@@ -932,9 +1102,11 @@ - /* Got an exn? */ - if (value) - { -- scheme_display(value, curerr); /* Send to stderr-vim */ -+ scheme_display(value, curerr); /* Send to stderr-vim */ -+ MZ_GC_CHECK(); - do_flush(); - } -+ MZ_GC_UNREG(); - /* `raise' was called on some arbitrary value */ - return FAIL; - } -@@ -943,9 +1115,13 @@ - *ret = value; - /* Print any result, as long as it's not a void */ - else if (!SCHEME_VOIDP(value)) -+ { - scheme_display(value, curout); /* Send to stdout-vim */ -+ MZ_GC_CHECK(); -+ } - - do_flush(); -+ MZ_GC_UNREG(); - return OK; - } - -@@ -959,7 +1135,7 @@ - range_start = eap->line1; - range_end = eap->line2; - -- return eval_in_namespace(data, what, get_vim_curr_buffer()->env, NULL); -+ return eval_with_exn_handling(data, what, NULL); - } - - /* -@@ -976,6 +1152,7 @@ - bp->buf = INVALID_BUFFER_VALUE; - buf->b_mzscheme_ref = NULL; - scheme_gc_ptr_ok(bp); -+ MZ_GC_CHECK(); - } - } - -@@ -992,6 +1169,7 @@ - wp->win = INVALID_WINDOW_VALUE; - win->w_mzscheme_ref = NULL; - scheme_gc_ptr_ok(wp); -+ MZ_GC_CHECK(); - } - } - -@@ -1016,18 +1194,6 @@ - } - } - --/* eval MzScheme string */ -- void * --mzvim_eval_string(char_u *str) --{ -- Scheme_Object *ret = NULL; -- if (mzscheme_init()) -- return FAIL; -- -- eval_in_namespace(str, do_eval, get_vim_curr_buffer()->env, &ret); -- return ret; --} -- - /* - * apply MzScheme procedure with arguments, - * handling errors -@@ -1035,43 +1201,65 @@ - Scheme_Object * - mzvim_apply(Scheme_Object *proc, int argc, Scheme_Object **argv) - { -- Apply_Info data; -- Scheme_Object *ret = NULL; -- - if (mzscheme_init()) - return FAIL; -+ else -+ { -+ Apply_Info data = {NULL, 0, NULL}; -+ Scheme_Object *ret = NULL; - -- data.proc = proc; -- data.argc = argc; -- data.argv = argv; -- -- eval_in_namespace(&data, do_apply, get_vim_curr_buffer()->env, &ret); -- return ret; -+ MZ_GC_DECL_REG(5); -+ MZ_GC_VAR_IN_REG(0, ret); -+ MZ_GC_VAR_IN_REG(1, data.proc); -+ MZ_GC_ARRAY_VAR_IN_REG(2, data.argv, argc); -+ MZ_GC_REG(); -+ -+ data.proc = proc; -+ data.argc = argc; -+ data.argv = argv; -+ -+ eval_with_exn_handling(&data, do_apply, &ret); -+ MZ_GC_UNREG(); -+ return ret; -+ } - } - - static Scheme_Object * - do_load(void *data, int noargc, Scheme_Object **noargv) - { -- Cmd_Info *info = (Cmd_Info *)data; -- Scheme_Object *result = scheme_void; -- Scheme_Object *expr; -- char_u *file = scheme_malloc_fail_ok( -- scheme_malloc_atomic, MAXPATHL + 1); -- Port_Info *pinfo = (Port_Info *)(info->data); -+ Scheme_Object *expr = NULL; -+ Scheme_Object *result = NULL; -+ char *file = NULL; -+ Port_Info *pinfo = (Port_Info *)data; -+ -+ MZ_GC_DECL_REG(3); -+ MZ_GC_VAR_IN_REG(0, expr); -+ MZ_GC_VAR_IN_REG(1, result); -+ MZ_GC_VAR_IN_REG(2, file); -+ MZ_GC_REG(); -+ -+ file = (char *)scheme_malloc_fail_ok(scheme_malloc_atomic, MAXPATHL + 1); -+ MZ_GC_CHECK(); - - /* make Vim expansion */ -- expand_env((char_u *)pinfo->name, file, MAXPATHL); -- /* scheme_load looks strange working with namespaces and error handling*/ -+ expand_env((char_u *)pinfo->name, (char_u *)file, MAXPATHL); - pinfo->port = scheme_open_input_file(file, "mzfile"); -- scheme_count_lines(pinfo->port); /* to get accurate read error location*/ -+ MZ_GC_CHECK(); -+ scheme_count_lines(pinfo->port); /* to get accurate read error location*/ -+ MZ_GC_CHECK(); - - /* Like REPL but print only last result */ - while (!SCHEME_EOFP(expr = scheme_read(pinfo->port))) -- result = scheme_eval(expr, info->env); -+ { -+ result = scheme_eval(expr, environment); -+ MZ_GC_CHECK(); -+ } - - /* errors will be caught in do_mzscheme_comamnd and ex_mzfile */ - scheme_close_input_port(pinfo->port); -+ MZ_GC_CHECK(); - pinfo->port = NULL; -+ MZ_GC_UNREG(); - return result; - } - -@@ -1079,13 +1267,20 @@ - void - ex_mzfile(exarg_T *eap) - { -- Port_Info pinfo; -+ Port_Info pinfo = {NULL, NULL}; -+ -+ MZ_GC_DECL_REG(1); -+ MZ_GC_VAR_IN_REG(0, pinfo.port); -+ MZ_GC_REG(); - - pinfo.name = (char *)eap->arg; -- pinfo.port = NULL; - if (do_mzscheme_command(eap, &pinfo, do_load) != OK - && pinfo.port != NULL) /* looks like port was not closed */ -+ { - scheme_close_input_port(pinfo.port); -+ MZ_GC_CHECK(); -+ } -+ MZ_GC_UNREG(); - } - - -@@ -1105,14 +1300,12 @@ - "(with-handlers ([void (lambda (exn) (cons #f exn))]) " - "(cons #t (thunk))))"; - -- /* make sure we have a namespace with the standard syntax: */ -- Scheme_Env *env = (Scheme_Env *)scheme_make_namespace(0, NULL); -- add_vim_exn(env); -- -- exn_catching_apply = scheme_eval_string(e, env); -- exn_p = scheme_lookup_global(scheme_intern_symbol("exn?"), env); -- exn_message = scheme_lookup_global( -- scheme_intern_symbol("exn-message"), env); -+ exn_catching_apply = scheme_eval_string(e, environment); -+ MZ_GC_CHECK(); -+ exn_p = scheme_builtin_value("exn?"); -+ MZ_GC_CHECK(); -+ exn_message = scheme_builtin_value("exn-message"); -+ MZ_GC_CHECK(); - } - } - -@@ -1126,8 +1319,6 @@ - { - Scheme_Object *v; - -- init_exn_catching_apply(); -- - v = _scheme_apply(exn_catching_apply, 1, &f); - /* v is a pair: (cons #t value) or (cons #f exn) */ - -@@ -1143,8 +1334,6 @@ - static Scheme_Object * - extract_exn_message(Scheme_Object *v) - { -- init_exn_catching_apply(); -- - if (SCHEME_TRUEP(_scheme_apply(exn_p, 1, &v))) - return _scheme_apply(exn_message, 1, &v); - else -@@ -1154,16 +1343,13 @@ - static Scheme_Object * - do_eval(void *s, int noargc, Scheme_Object **noargv) - { -- Cmd_Info *info = (Cmd_Info *)s; -- -- return scheme_eval_string_all((char *)(info->data), info->env, TRUE); -+ return scheme_eval_string_all((char *)s, environment, TRUE); - } - - static Scheme_Object * - do_apply(void *a, int noargc, Scheme_Object **noargv) - { -- Apply_Info *info = (Apply_Info *)(((Cmd_Info *)a)->data); -- -+ Apply_Info *info = (Apply_Info *)a; - return scheme_apply(info->proc, info->argc, info->argv); - } - -@@ -1221,6 +1407,7 @@ - long length; - - buff = scheme_get_sized_string_output(curerr, &length); -+ MZ_GC_CHECK(); - if (length) - { - do_err_output(buff, length); -@@ -1228,17 +1415,11 @@ - } - - buff = scheme_get_sized_string_output(curout, &length); -+ MZ_GC_CHECK(); - if (length) - do_output(buff, length); - } - -- static int --mzscheme_io_init(void) --{ -- /* Nothing needed so far... */ -- return 0; --} -- - /* - *======================================================================== - * 4. Implementation of the Vim Features for MzScheme -@@ -1265,22 +1446,30 @@ - vim_eval(void *data, int argc, Scheme_Object **argv) - { - #ifdef FEAT_EVAL -- Vim_Prim *prim = (Vim_Prim *)data; -- char *expr; -- char *str; -- Scheme_Object *result; -+ Vim_Prim *prim = (Vim_Prim *)data; -+ char *expr; -+ Scheme_Object *result; -+ /* hash table to store visited values to avoid infinite loops */ -+ Scheme_Hash_Table *visited = NULL; -+ typval_T *vim_result; -+ -+ MZ_GC_DECL_REG(1); -+ MZ_GC_VAR_IN_REG(0, visited); -+ MZ_GC_REG(); - -- expr = SCHEME_STR_VAL(GUARANTEE_STRING(prim->name, 0)); -+ visited = scheme_make_hash_table(SCHEME_hash_ptr); -+ MZ_GC_CHECK(); - -- str = (char *)eval_to_string((char_u *)expr, NULL, TRUE); -+ expr = SCHEME_STR_VAL(GUARANTEE_STRING(prim->name, 0)); -+ vim_result = eval_expr((char_u *)expr, NULL); - -- if (str == NULL) -+ if (vim_result == NULL) - raise_vim_exn(_("invalid expression")); - -- result = scheme_make_string(str); -- -- vim_free(str); -+ result = vim_to_mzscheme(vim_result, 1, visited); -+ free_tv(vim_result); - -+ MZ_GC_UNREG(); - return result; - #else - raise_vim_exn(_("expressions disabled at compile time")); -@@ -1320,7 +1509,7 @@ - Vim_Prim *prim = (Vim_Prim *)data; - char_u *name; - long value; -- char_u *strval; -+ char *strval; - int rc; - Scheme_Object *rval; - int opt_flags = 0; -@@ -1335,6 +1524,7 @@ - { - MZ_REGISTER_STATIC(M_global); - M_global = scheme_intern_symbol("global"); -+ MZ_GC_CHECK(); - } - - if (argv[1] == M_global) -@@ -1356,7 +1546,7 @@ - scheme_wrong_type(prim->name, "vim-buffer/window", 1, argc, argv); - } - -- rc = get_option_value(name, &value, &strval, opt_flags); -+ rc = get_option_value(name, &value, (char_u **)&strval, opt_flags); - curbuf = save_curb; - curwin = save_curw; - -@@ -1366,6 +1556,7 @@ - return scheme_make_integer_value(value); - case 0: - rval = scheme_make_string(strval); -+ MZ_GC_CHECK(); - vim_free(strval); - return rval; - case -1: -@@ -1395,6 +1586,7 @@ - { - MZ_REGISTER_STATIC(M_global); - M_global = scheme_intern_symbol("global"); -+ MZ_GC_CHECK(); - } - - if (argv[1] == M_global) -@@ -1465,7 +1657,10 @@ - - for (w = firstwin; w != NULL; w = w->w_next) - if (w->w_buffer == buf->buf) -+ { - list = scheme_make_pair(window_new(w), list); -+ MZ_GC_CHECK(); -+ } - - return list; - } -@@ -1473,7 +1668,11 @@ - static Scheme_Object * - window_new(win_T *win) - { -- vim_mz_window *self; -+ vim_mz_window *self = NULL; -+ -+ MZ_GC_DECL_REG(1); -+ MZ_GC_VAR_IN_REG(0, self); -+ MZ_GC_REG(); - - /* We need to handle deletion of windows underneath us. - * If we add a "w_mzscheme_ref" field to the win_T structure, -@@ -1487,13 +1686,14 @@ - return win->w_mzscheme_ref; - - self = scheme_malloc_fail_ok(scheme_malloc, sizeof(vim_mz_window)); -- - vim_memset(self, 0, sizeof(vim_mz_window)); - scheme_dont_gc_ptr(self); /* because win isn't visible to GC */ -+ MZ_GC_CHECK(); - win->w_mzscheme_ref = self; - self->win = win; -- self->tag = mz_window_type; -+ self->so.type = mz_window_type; - -+ MZ_GC_UNREG(); - return (Scheme_Object *)(self); - } - -@@ -1662,7 +1862,6 @@ - /* - *=========================================================================== - * 6. Vim Buffer-related Manipulation Functions -- * Note that each buffer should have its own private namespace. - *=========================================================================== - */ - -@@ -1671,14 +1870,14 @@ - mzscheme_open_buffer(void *data, int argc, Scheme_Object **argv) - { - Vim_Prim *prim = (Vim_Prim *)data; -- char *fname; -+ char_u *fname; - int num = 0; - Scheme_Object *onum; - - #ifdef HAVE_SANDBOX - sandbox_check(); - #endif -- fname = SCHEME_STR_VAL(GUARANTEE_STRING(prim->name, 0)); -+ fname = (char_u *)SCHEME_STR_VAL(GUARANTEE_STRING(prim->name, 0)); - /* TODO make open existing file */ - num = buflist_add(fname, BLN_LISTED | BLN_CURBUF); - -@@ -1714,7 +1913,7 @@ - buf_T *buf; - char_u *fname; - -- fname = SCHEME_STR_VAL(GUARANTEE_STRING(prim->name, 0)); -+ fname = (char_u *)SCHEME_STR_VAL(GUARANTEE_STRING(prim->name, 0)); - - for (buf = firstbuf; buf; buf = buf->b_next) - if (buf->b_ffname == NULL || buf->b_sfname == NULL) -@@ -1785,7 +1984,7 @@ - Vim_Prim *prim = (Vim_Prim *)data; - vim_mz_buffer *buf = get_buffer_arg(prim->name, 0, argc, argv); - -- return scheme_make_string(buf->buf->b_ffname); -+ return scheme_make_string((char *)buf->buf->b_ffname); - } - - /* (curr-buff) */ -@@ -1798,7 +1997,11 @@ - static Scheme_Object * - buffer_new(buf_T *buf) - { -- vim_mz_buffer *self; -+ vim_mz_buffer *self = NULL; -+ -+ MZ_GC_DECL_REG(1); -+ MZ_GC_VAR_IN_REG(0, self); -+ MZ_GC_REG(); - - /* We need to handle deletion of buffers underneath us. - * If we add a "b_mzscheme_ref" field to the buf_T structure, -@@ -1808,15 +2011,14 @@ - return buf->b_mzscheme_ref; - - self = scheme_malloc_fail_ok(scheme_malloc, sizeof(vim_mz_buffer)); -- - vim_memset(self, 0, sizeof(vim_mz_buffer)); -- scheme_dont_gc_ptr(self); /* because buf isn't visible to GC */ -+ scheme_dont_gc_ptr(self); /* because buf isn't visible to GC */ -+ MZ_GC_CHECK(); - buf->b_mzscheme_ref = self; - self->buf = buf; -- self->tag = mz_buffer_type; -- -- mzscheme_interface_init(self); /* Set up namespace */ -+ self->so.type = mz_buffer_type; - -+ MZ_GC_UNREG(); - return (Scheme_Object *)(self); - } - -@@ -1847,14 +2049,14 @@ - Vim_Prim *prim = (Vim_Prim *)data; - vim_mz_buffer *buf; - int linenr; -- char *line; -+ char_u *line; - - buf = get_buffer_arg(prim->name, 1, argc, argv); - linenr = SCHEME_INT_VAL(GUARANTEE_INTEGER(prim->name, 0)); - line = ml_get_buf(buf->buf, (linenr_T)linenr, FALSE); - - raise_if_error(); -- return scheme_make_string(line); -+ return scheme_make_string((char *)line); - } - - -@@ -1871,7 +2073,11 @@ - Vim_Prim *prim = (Vim_Prim *)data; - vim_mz_buffer *buf; - int i, hi, lo, n; -- Scheme_Object *list; -+ Scheme_Object *list = NULL; -+ -+ MZ_GC_DECL_REG(1); -+ MZ_GC_VAR_IN_REG(0, list); -+ MZ_GC_REG(); - - buf = get_buffer_arg(prim->name, 2, argc, argv); - list = scheme_null; -@@ -1899,8 +2105,9 @@ - - /* Set the list item */ - list = scheme_make_pair(str, list); -+ MZ_GC_CHECK(); - } -- -+ MZ_GC_UNREG(); - return list; - } - -@@ -1927,11 +2134,14 @@ - */ - Vim_Prim *prim = (Vim_Prim *)data; - vim_mz_buffer *buf; -- Scheme_Object *line; -+ Scheme_Object *line = NULL; - char *save; -- buf_T *savebuf; - int n; - -+ MZ_GC_DECL_REG(1); -+ MZ_GC_VAR_IN_REG(0, line); -+ MZ_GC_REG(); -+ - #ifdef HAVE_SANDBOX - sandbox_check(); - #endif -@@ -1945,7 +2155,8 @@ - - if (SCHEME_FALSEP(line)) - { -- savebuf = curbuf; -+ buf_T *savebuf = curbuf; -+ - curbuf = buf->buf; - - if (u_savedel((linenr_T)n, 1L) == FAIL) -@@ -1958,39 +2169,62 @@ - curbuf = savebuf; - raise_vim_exn(_("cannot delete line")); - } -- deleted_lines_mark((linenr_T)n, 1L); - if (buf->buf == curwin->w_buffer) - mz_fix_cursor(n, n + 1, -1); -+ deleted_lines_mark((linenr_T)n, 1L); - - curbuf = savebuf; - -+ MZ_GC_UNREG(); - raise_if_error(); - return scheme_void; - } -+ else -+ { -+ /* Otherwise it's a line */ -+ buf_T *savebuf = curbuf; - -- /* Otherwise it's a line */ -- save = string_to_line(line); -- savebuf = curbuf; -+ save = string_to_line(line); - -- curbuf = buf->buf; -+ curbuf = buf->buf; -+ -+ if (u_savesub((linenr_T)n) == FAIL) -+ { -+ curbuf = savebuf; -+ vim_free(save); -+ raise_vim_exn(_("cannot save undo information")); -+ } -+ else if (ml_replace((linenr_T)n, (char_u *)save, TRUE) == FAIL) -+ { -+ curbuf = savebuf; -+ vim_free(save); -+ raise_vim_exn(_("cannot replace line")); -+ } -+ else -+ { -+ vim_free(save); -+ changed_bytes((linenr_T)n, 0); -+ } - -- if (u_savesub((linenr_T)n) == FAIL) -- { -- curbuf = savebuf; -- raise_vim_exn(_("cannot save undo information")); -- } -- else if (ml_replace((linenr_T)n, (char_u *)save, TRUE) == FAIL) -- { - curbuf = savebuf; -- raise_vim_exn(_("cannot replace line")); -- } -- else -- changed_bytes((linenr_T)n, 0); - -- curbuf = savebuf; -+ /* Check that the cursor is not beyond the end of the line now. */ -+ if (buf->buf == curwin->w_buffer) -+ check_cursor_col(); - -- raise_if_error(); -- return scheme_void; -+ MZ_GC_UNREG(); -+ raise_if_error(); -+ return scheme_void; -+ } -+} -+ -+ static void -+free_array(char **array) -+{ -+ char **curr = array; -+ while (*curr != NULL) -+ vim_free(*curr++); -+ vim_free(array); - } - - /* -@@ -2015,15 +2249,15 @@ - * 3. Anything else - this is an error. - */ - Vim_Prim *prim = (Vim_Prim *)data; -- vim_mz_buffer *buf; -- Scheme_Object *line_list; -- Scheme_Object *line; -- Scheme_Object *rest; -- char **array; -- buf_T *savebuf; -+ vim_mz_buffer *buf = NULL; -+ Scheme_Object *line_list = NULL; - int i, old_len, new_len, hi, lo; - long extra; - -+ MZ_GC_DECL_REG(1); -+ MZ_GC_VAR_IN_REG(0, line_list); -+ MZ_GC_REG(); -+ - #ifdef HAVE_SANDBOX - sandbox_check(); - #endif -@@ -2049,7 +2283,7 @@ - - if (SCHEME_FALSEP(line_list) || SCHEME_NULLP(line_list)) - { -- savebuf = curbuf; -+ buf_T *savebuf = curbuf; - curbuf = buf->buf; - - if (u_savedel((linenr_T)lo, (long)old_len) == FAIL) -@@ -2065,105 +2299,128 @@ - curbuf = savebuf; - raise_vim_exn(_("cannot delete line")); - } -- deleted_lines_mark((linenr_T)lo, (long)old_len); - if (buf->buf == curwin->w_buffer) - mz_fix_cursor(lo, hi, -old_len); -+ deleted_lines_mark((linenr_T)lo, (long)old_len); - } - - curbuf = savebuf; - -+ MZ_GC_UNREG(); - raise_if_error(); - return scheme_void; - } -+ else -+ { -+ buf_T *savebuf = curbuf; - -- /* List */ -- new_len = scheme_proper_list_length(line_list); -- if (new_len < 0) /* improper or cyclic list */ -- scheme_wrong_type(prim->name, "proper list", -- 2, argc, argv); -+ /* List */ -+ new_len = scheme_proper_list_length(line_list); -+ MZ_GC_CHECK(); -+ if (new_len < 0) /* improper or cyclic list */ -+ scheme_wrong_type(prim->name, "proper list", -+ 2, argc, argv); -+ else -+ { -+ char **array = NULL; -+ Scheme_Object *line = NULL; -+ Scheme_Object *rest = NULL; -+ -+ MZ_GC_DECL_REG(2); -+ MZ_GC_VAR_IN_REG(0, line); -+ MZ_GC_VAR_IN_REG(1, rest); -+ MZ_GC_REG(); - -- /* Using MzScheme allocator, so we don't need to free this and -- * can safely keep pointers to GC collected strings -- */ -- array = (char **)scheme_malloc_fail_ok(scheme_malloc, -- (unsigned)(new_len * sizeof(char *))); -+ array = (char **)alloc(new_len * sizeof(char *)); -+ vim_memset(array, 0, new_len * sizeof(char *)); - -- rest = line_list; -- for (i = 0; i < new_len; ++i) -- { -- line = SCHEME_CAR(rest); -- rest = SCHEME_CDR(rest); -- if (!SCHEME_STRINGP(line)) -- scheme_wrong_type(prim->name, "string-list", 2, argc, argv); -- array[i] = string_to_line(line); -- } -+ rest = line_list; -+ for (i = 0; i < new_len; ++i) -+ { -+ line = SCHEME_CAR(rest); -+ rest = SCHEME_CDR(rest); -+ if (!SCHEME_STRINGP(line)) -+ { -+ free_array(array); -+ scheme_wrong_type(prim->name, "string-list", 2, argc, argv); -+ } -+ array[i] = string_to_line(line); -+ } - -- savebuf = curbuf; -- curbuf = buf->buf; -+ curbuf = buf->buf; - -- if (u_save((linenr_T)(lo-1), (linenr_T)hi) == FAIL) -- { -- curbuf = savebuf; -- raise_vim_exn(_("cannot save undo information")); -- } -+ if (u_save((linenr_T)(lo-1), (linenr_T)hi) == FAIL) -+ { -+ curbuf = savebuf; -+ free_array(array); -+ raise_vim_exn(_("cannot save undo information")); -+ } - -- /* -- * If the size of the range is reducing (ie, new_len < old_len) we -- * need to delete some old_len. We do this at the start, by -- * repeatedly deleting line "lo". -- */ -- for (i = 0; i < old_len - new_len; ++i) -- { -- if (ml_delete((linenr_T)lo, FALSE) == FAIL) -- { -- curbuf = savebuf; -- raise_vim_exn(_("cannot delete line")); -- } -- extra--; -- } -+ /* -+ * If the size of the range is reducing (ie, new_len < old_len) we -+ * need to delete some old_len. We do this at the start, by -+ * repeatedly deleting line "lo". -+ */ -+ for (i = 0; i < old_len - new_len; ++i) -+ { -+ if (ml_delete((linenr_T)lo, FALSE) == FAIL) -+ { -+ curbuf = savebuf; -+ free_array(array); -+ raise_vim_exn(_("cannot delete line")); -+ } -+ extra--; -+ } - -- /* -- * For as long as possible, replace the existing old_len with the -- * new old_len. This is a more efficient operation, as it requires -- * less memory allocation and freeing. -- */ -- for (i = 0; i < old_len && i < new_len; i++) -- if (ml_replace((linenr_T)(lo+i), (char_u *)array[i], TRUE) == FAIL) -- { -- curbuf = savebuf; -- raise_vim_exn(_("cannot replace line")); -- } -+ /* -+ * For as long as possible, replace the existing old_len with the -+ * new old_len. This is a more efficient operation, as it requires -+ * less memory allocation and freeing. -+ */ -+ for (i = 0; i < old_len && i < new_len; i++) -+ if (ml_replace((linenr_T)(lo+i), (char_u *)array[i], TRUE) == FAIL) -+ { -+ curbuf = savebuf; -+ free_array(array); -+ raise_vim_exn(_("cannot replace line")); -+ } - -- /* -- * Now we may need to insert the remaining new_len. We don't need to -- * free the string passed back because MzScheme has control of that -- * memory. -- */ -- while (i < new_len) -- { -- if (ml_append((linenr_T)(lo + i - 1), -- (char_u *)array[i], 0, FALSE) == FAIL) -- { -- curbuf = savebuf; -- raise_vim_exn(_("cannot insert line")); -+ /* -+ * Now we may need to insert the remaining new_len. We don't need to -+ * free the string passed back because MzScheme has control of that -+ * memory. -+ */ -+ while (i < new_len) -+ { -+ if (ml_append((linenr_T)(lo + i - 1), -+ (char_u *)array[i], 0, FALSE) == FAIL) -+ { -+ curbuf = savebuf; -+ free_array(array); -+ raise_vim_exn(_("cannot insert line")); -+ } -+ ++i; -+ ++extra; -+ } -+ MZ_GC_UNREG(); -+ free_array(array); - } -- ++i; -- ++extra; -- } - -- /* -- * Adjust marks. Invalidate any which lie in the -- * changed range, and move any in the remainder of the buffer. -- */ -- mark_adjust((linenr_T)lo, (linenr_T)(hi - 1), (long)MAXLNUM, (long)extra); -- changed_lines((linenr_T)lo, 0, (linenr_T)hi, (long)extra); -+ /* -+ * Adjust marks. Invalidate any which lie in the -+ * changed range, and move any in the remainder of the buffer. -+ */ -+ mark_adjust((linenr_T)lo, (linenr_T)(hi - 1), (long)MAXLNUM, (long)extra); -+ changed_lines((linenr_T)lo, 0, (linenr_T)hi, (long)extra); - -- if (buf->buf == curwin->w_buffer) -- mz_fix_cursor(lo, hi, extra); -- curbuf = savebuf; -+ if (buf->buf == curwin->w_buffer) -+ mz_fix_cursor(lo, hi, extra); -+ curbuf = savebuf; - -- raise_if_error(); -- return scheme_void; -+ MZ_GC_UNREG(); -+ raise_if_error(); -+ return scheme_void; -+ } - } - - /* -@@ -2181,15 +2438,15 @@ - insert_buffer_line_list(void *data, int argc, Scheme_Object **argv) - { - Vim_Prim *prim = (Vim_Prim *)data; -- vim_mz_buffer *buf; -- Scheme_Object *list; -- Scheme_Object *line; -- Scheme_Object *rest; -- char **array; -- char *str; -- buf_T *savebuf; -+ vim_mz_buffer *buf = NULL; -+ Scheme_Object *list = NULL; -+ char *str = NULL; - int i, n, size; - -+ MZ_GC_DECL_REG(1); -+ MZ_GC_VAR_IN_REG(0, list); -+ MZ_GC_REG(); -+ - #ifdef HAVE_SANDBOX - sandbox_check(); - #endif -@@ -2208,89 +2465,99 @@ - check_line_range(n, buf->buf); - if (SCHEME_STRINGP(list)) - { -- str = string_to_line(list); -+ buf_T *savebuf = curbuf; - -- savebuf = curbuf; -+ str = string_to_line(list); - curbuf = buf->buf; - - if (u_save((linenr_T)n, (linenr_T)(n+1)) == FAIL) - { - curbuf = savebuf; -+ vim_free(str); - raise_vim_exn(_("cannot save undo information")); - } - else if (ml_append((linenr_T)n, (char_u *)str, 0, FALSE) == FAIL) - { - curbuf = savebuf; -+ vim_free(str); - raise_vim_exn(_("cannot insert line")); - } - else -+ { -+ vim_free(str); - appended_lines_mark((linenr_T)n, 1L); -+ } - - curbuf = savebuf; - update_screen(VALID); - -+ MZ_GC_UNREG(); - raise_if_error(); - return scheme_void; - } - - /* List */ - size = scheme_proper_list_length(list); -+ MZ_GC_CHECK(); - if (size < 0) /* improper or cyclic list */ - scheme_wrong_type(prim->name, "proper list", - 2, argc, argv); -- -- /* Using MzScheme allocator, so we don't need to free this and -- * can safely keep pointers to GC collected strings -- */ -- array = (char **)scheme_malloc_fail_ok( -- scheme_malloc, (unsigned)(size * sizeof(char *))); -- -- rest = list; -- for (i = 0; i < size; ++i) -+ else - { -- line = SCHEME_CAR(rest); -- rest = SCHEME_CDR(rest); -- array[i] = string_to_line(line); -- } -+ Scheme_Object *line = NULL; -+ Scheme_Object *rest = NULL; -+ char **array; -+ buf_T *savebuf = curbuf; -+ -+ MZ_GC_DECL_REG(2); -+ MZ_GC_VAR_IN_REG(0, line); -+ MZ_GC_VAR_IN_REG(1, rest); -+ MZ_GC_REG(); - -- savebuf = curbuf; -- curbuf = buf->buf; -+ array = (char **)alloc(size * sizeof(char *)); -+ vim_memset(array, 0, size * sizeof(char *)); - -- if (u_save((linenr_T)n, (linenr_T)(n + 1)) == FAIL) -- { -- curbuf = savebuf; -- raise_vim_exn(_("cannot save undo information")); -- } -- else -- { -+ rest = list; - for (i = 0; i < size; ++i) -- if (ml_append((linenr_T)(n + i), (char_u *)array[i], -- 0, FALSE) == FAIL) -- { -- curbuf = savebuf; -- raise_vim_exn(_("cannot insert line")); -- } -+ { -+ line = SCHEME_CAR(rest); -+ rest = SCHEME_CDR(rest); -+ array[i] = string_to_line(line); -+ } - -- if (i > 0) -- appended_lines_mark((linenr_T)n, (long)i); -- } -+ curbuf = buf->buf; - -- curbuf = savebuf; -- update_screen(VALID); -+ if (u_save((linenr_T)n, (linenr_T)(n + 1)) == FAIL) -+ { -+ curbuf = savebuf; -+ free_array(array); -+ raise_vim_exn(_("cannot save undo information")); -+ } -+ else -+ { -+ for (i = 0; i < size; ++i) -+ if (ml_append((linenr_T)(n + i), (char_u *)array[i], -+ 0, FALSE) == FAIL) -+ { -+ curbuf = savebuf; -+ free_array(array); -+ raise_vim_exn(_("cannot insert line")); -+ } - -+ if (i > 0) -+ appended_lines_mark((linenr_T)n, (long)i); -+ } -+ free_array(array); -+ MZ_GC_UNREG(); -+ curbuf = savebuf; -+ update_screen(VALID); -+ } -+ -+ MZ_GC_UNREG(); - raise_if_error(); - return scheme_void; - } - --/* (get-buff-namespace [buffer]) */ -- static Scheme_Object * --get_buffer_namespace(void *data, int argc, Scheme_Object **argv) --{ -- Vim_Prim *prim = (Vim_Prim *)data; -- -- return (Scheme_Object *)get_buffer_arg(prim->name, 0, argc, argv)->env; --} -- - /* - * Predicates - */ -@@ -2345,40 +2612,172 @@ - /* - * Convert an MzScheme string into a Vim line. - * -- * The result is in allocated memory. All internal nulls are replaced by -- * newline characters. It is an error for the string to contain newline -- * characters. -+ * All internal nulls are replaced by newline characters. -+ * It is an error for the string to contain newline characters. - * -+ * Returns pointer to Vim allocated memory - */ - static char * - string_to_line(Scheme_Object *obj) - { -- char *str; -+ char *scheme_str = NULL; -+ char *vim_str = NULL; - long len; - int i; - -- str = scheme_display_to_string(obj, &len); -+ scheme_str = scheme_display_to_string(obj, &len); - - /* Error checking: String must not contain newlines, as we - * are replacing a single line, and we must replace it with - * a single line. - */ -- if (memchr(str, '\n', len)) -+ if (memchr(scheme_str, '\n', len)) - scheme_signal_error(_("string cannot contain newlines")); - -+ vim_str = (char *)alloc(len + 1); -+ - /* Create a copy of the string, with internal nulls replaced by - * newline characters, as is the vim convention. - */ - for (i = 0; i < len; ++i) - { -- if (str[i] == '\0') -- str[i] = '\n'; -+ if (scheme_str[i] == '\0') -+ vim_str[i] = '\n'; -+ else -+ vim_str[i] = scheme_str[i]; -+ } -+ -+ vim_str[i] = '\0'; -+ -+ MZ_GC_CHECK(); -+ return vim_str; -+} -+ -+#ifdef FEAT_EVAL -+/* -+ * Convert Vim value into MzScheme, adopted from if_python.c -+ */ -+ static Scheme_Object * -+vim_to_mzscheme(typval_T *vim_value, int depth, Scheme_Hash_Table *visited) -+{ -+ Scheme_Object *result = NULL; -+ int new_value = TRUE; -+ -+ MZ_GC_DECL_REG(1); -+ MZ_GC_VAR_IN_REG(0, result); -+ MZ_GC_REG(); -+ -+ /* Avoid infinite recursion */ -+ if (depth > 100) -+ { -+ MZ_GC_UNREG(); -+ return scheme_void; -+ } -+ -+ /* Check if we run into a recursive loop. The item must be in visited -+ * then and we can use it again. -+ */ -+ result = scheme_hash_get(visited, (Scheme_Object *)vim_value); -+ MZ_GC_CHECK(); -+ if (result != NULL) /* found, do nothing */ -+ new_value = FALSE; -+ else if (vim_value->v_type == VAR_STRING) -+ { -+ result = scheme_make_string((char *)vim_value->vval.v_string); -+ MZ_GC_CHECK(); -+ } -+ else if (vim_value->v_type == VAR_NUMBER) -+ { -+ result = scheme_make_integer((long)vim_value->vval.v_number); -+ MZ_GC_CHECK(); -+ } -+# ifdef FEAT_FLOAT -+ else if (vim_value->v_type == VAR_FLOAT) -+ { -+ result = scheme_make_double((double)vim_value->vval.v_float); -+ MZ_GC_CHECK(); -+ } -+# endif -+ else if (vim_value->v_type == VAR_LIST) -+ { -+ list_T *list = vim_value->vval.v_list; -+ listitem_T *curr; -+ -+ if (list == NULL || list->lv_first == NULL) -+ result = scheme_null; -+ else -+ { -+ Scheme_Object *obj = NULL; -+ -+ MZ_GC_DECL_REG(1); -+ MZ_GC_VAR_IN_REG(0, obj); -+ MZ_GC_REG(); -+ -+ curr = list->lv_last; -+ obj = vim_to_mzscheme(&curr->li_tv, depth + 1, visited); -+ result = scheme_make_pair(obj, scheme_null); -+ MZ_GC_CHECK(); -+ -+ while (curr != list->lv_first) -+ { -+ curr = curr->li_prev; -+ obj = vim_to_mzscheme(&curr->li_tv, depth + 1, visited); -+ result = scheme_make_pair(obj, result); -+ MZ_GC_CHECK(); -+ } -+ } -+ MZ_GC_UNREG(); - } -+ else if (vim_value->v_type == VAR_DICT) -+ { -+ Scheme_Object *key = NULL; -+ Scheme_Object *obj = NULL; -+ -+ MZ_GC_DECL_REG(2); -+ MZ_GC_VAR_IN_REG(0, key); -+ MZ_GC_VAR_IN_REG(1, obj); -+ MZ_GC_REG(); - -- str[i] = '\0'; -+ result = (Scheme_Object *)scheme_make_hash_table(SCHEME_hash_ptr); -+ MZ_GC_CHECK(); -+ if (vim_value->vval.v_dict != NULL) -+ { -+ hashtab_T *ht = &vim_value->vval.v_dict->dv_hashtab; -+ long_u todo = ht->ht_used; -+ hashitem_T *hi; -+ dictitem_T *di; - -- return str; -+ for (hi = ht->ht_array; todo > 0; ++hi) -+ { -+ if (!HASHITEM_EMPTY(hi)) -+ { -+ --todo; -+ -+ di = dict_lookup(hi); -+ obj = vim_to_mzscheme(&di->di_tv, depth + 1, visited); -+ key = scheme_make_string((char *)hi->hi_key); -+ MZ_GC_CHECK(); -+ scheme_hash_set((Scheme_Hash_Table *)result, key, obj); -+ MZ_GC_CHECK(); -+ } -+ } -+ } -+ MZ_GC_UNREG(); -+ } -+ else -+ { -+ result = scheme_void; -+ new_value = FALSE; -+ } -+ if (new_value) -+ { -+ scheme_hash_set(visited, (Scheme_Object *)vim_value, result); -+ MZ_GC_CHECK(); -+ } -+ MZ_GC_UNREG(); -+ return result; - } -+#endif - - /* - * Check to see whether a Vim error has been reported, or a keyboard -@@ -2394,50 +2793,59 @@ - * register Scheme exn:vim - */ - static void --register_vim_exn(Scheme_Env *env) -+register_vim_exn(void) - { -- Scheme_Object *exn_name = scheme_intern_symbol("exn:vim"); -+ int nc = 0; -+ int i; -+ Scheme_Object *struct_exn = NULL; -+ Scheme_Object *exn_name = NULL; -+ -+ MZ_GC_DECL_REG(2); -+ MZ_GC_VAR_IN_REG(0, struct_exn); -+ MZ_GC_VAR_IN_REG(1, exn_name); -+ MZ_GC_REG(); -+ -+ exn_name = scheme_intern_symbol("exn:vim"); -+ MZ_GC_CHECK(); -+ struct_exn = scheme_builtin_value("struct:exn"); -+ MZ_GC_CHECK(); - - if (vim_exn == NULL) - vim_exn = scheme_make_struct_type(exn_name, -- scheme_builtin_value("struct:exn"), NULL, 0, 0, NULL, NULL -+ struct_exn, NULL, 0, 0, NULL, NULL - #if MZSCHEME_VERSION_MAJOR >= 299 - , NULL - #endif - ); - -- if (vim_exn_values == NULL) -- { -- int nc = 0; - -- Scheme_Object **exn_names = scheme_make_struct_names( -- exn_name, scheme_null, 0, &nc); -- Scheme_Object **exn_values = scheme_make_struct_values( -- vim_exn, exn_names, nc, 0); -- -- vim_exn_names = scheme_make_vector(nc, scheme_false); -- vim_exn_values = scheme_make_vector(nc, scheme_false); -- /* remember names and values */ -- mch_memmove(SCHEME_VEC_ELS(vim_exn_names), exn_names, -- nc * sizeof(Scheme_Object *)); -- mch_memmove(SCHEME_VEC_ELS(vim_exn_values), exn_values, -- nc * sizeof(Scheme_Object *)); -+ { -+ Scheme_Object **tmp = NULL; -+ Scheme_Object *exn_names[5] = {NULL, NULL, NULL, NULL, NULL}; -+ Scheme_Object *exn_values[5] = {NULL, NULL, NULL, NULL, NULL}; -+ MZ_GC_DECL_REG(6); -+ MZ_GC_ARRAY_VAR_IN_REG(0, exn_names, 5); -+ MZ_GC_ARRAY_VAR_IN_REG(3, exn_values, 5); -+ MZ_GC_REG(); -+ -+ tmp = scheme_make_struct_names(exn_name, scheme_null, 0, &nc); -+ assert(nc <= 5); -+ mch_memmove(exn_names, tmp, nc * sizeof(Scheme_Object *)); -+ MZ_GC_CHECK(); -+ -+ tmp = scheme_make_struct_values(vim_exn, exn_names, nc, 0); -+ mch_memmove(exn_values, tmp, nc * sizeof(Scheme_Object *)); -+ MZ_GC_CHECK(); -+ -+ for (i = 0; i < nc; i++) -+ { -+ scheme_add_global_symbol(exn_names[i], -+ exn_values[i], environment); -+ MZ_GC_CHECK(); -+ } -+ MZ_GC_UNREG(); - } -- -- add_vim_exn(env); --} -- --/* -- * Add stuff of exn:vim to env -- */ -- static void --add_vim_exn(Scheme_Env *env) --{ -- int i; -- -- for (i = 0; i < SCHEME_VEC_SIZE(vim_exn_values); i++) -- scheme_add_global_symbol(SCHEME_VEC_ELS(vim_exn_names)[i], -- SCHEME_VEC_ELS(vim_exn_values)[i], env); -+ MZ_GC_UNREG(); - } - - /* -@@ -2446,26 +2854,54 @@ - void - raise_vim_exn(const char *add_info) - { -- Scheme_Object *argv[2]; -- char_u *fmt = _("Vim error: ~a"); -+ char *fmt = _("Vim error: ~a"); -+ Scheme_Object *argv[2] = {NULL, NULL}; -+ Scheme_Object *exn = NULL; -+ -+ MZ_GC_DECL_REG(4); -+ MZ_GC_ARRAY_VAR_IN_REG(0, argv, 2); -+ MZ_GC_VAR_IN_REG(3, exn); -+ MZ_GC_REG(); - - if (add_info != NULL) - { -- Scheme_Object *info = scheme_make_string(add_info); -- argv[0] = scheme_byte_string_to_char_string(scheme_make_string( -- scheme_format(fmt, strlen(fmt), 1, &info, NULL))); -+ char *c_string = NULL; -+ Scheme_Object *byte_string = NULL; -+ Scheme_Object *info = NULL; -+ -+ MZ_GC_DECL_REG(3); -+ MZ_GC_VAR_IN_REG(0, c_string); -+ MZ_GC_VAR_IN_REG(1, byte_string); -+ MZ_GC_VAR_IN_REG(2, info); -+ MZ_GC_REG(); -+ -+ info = scheme_make_string(add_info); -+ MZ_GC_CHECK(); -+ c_string = scheme_format(fmt, STRLEN(fmt), 1, &info, NULL); -+ MZ_GC_CHECK(); -+ byte_string = scheme_make_string(c_string); -+ MZ_GC_CHECK(); -+ argv[0] = scheme_byte_string_to_char_string(byte_string); -+ MZ_GC_CHECK(); - SCHEME_SET_IMMUTABLE(argv[0]); -+ MZ_GC_UNREG(); - } - else - argv[0] = scheme_make_string(_("Vim error")); -+ MZ_GC_CHECK(); - - #if MZSCHEME_VERSION_MAJOR < 360 - argv[1] = scheme_current_continuation_marks(); -+ MZ_GC_CHECK(); - #else - argv[1] = scheme_current_continuation_marks(NULL); -+ MZ_GC_CHECK(); - #endif - -- scheme_raise(scheme_make_struct_instance(vim_exn, 2, argv)); -+ exn = scheme_make_struct_instance(vim_exn, 2, argv); -+ MZ_GC_CHECK(); -+ scheme_raise(exn); -+ MZ_GC_UNREG(); - } - - void -@@ -2572,6 +3008,8 @@ - curwin->w_cursor.lnum = lo; - check_cursor(); - } -+ else -+ check_cursor_col(); - changed_cline_bef_curs(); - } - invalidate_botline(); -@@ -2597,7 +3035,6 @@ - {mzscheme_open_buffer, "open-buff", 1, 1}, - {get_buffer_by_name, "get-buff-by-name", 1, 1}, - {get_buffer_by_num, "get-buff-by-num", 1, 1}, -- {get_buffer_namespace, "get-buff-namespace", 0, 1}, - /* - * Window-related commands - */ -@@ -2655,23 +3092,35 @@ - } - - static void --make_modules(Scheme_Env *env) -+make_modules() - { -- int i; -- Scheme_Env *mod; -- -- mod = scheme_primitive_module(scheme_intern_symbol("vimext"), env); -+ int i; -+ Scheme_Env *mod = NULL; -+ Scheme_Object *vimext_symbol = NULL; -+ Scheme_Object *closed_prim = NULL; -+ -+ MZ_GC_DECL_REG(3); -+ MZ_GC_VAR_IN_REG(0, mod); -+ MZ_GC_VAR_IN_REG(1, vimext_symbol); -+ MZ_GC_VAR_IN_REG(2, closed_prim); -+ MZ_GC_REG(); -+ -+ vimext_symbol = scheme_intern_symbol("vimext"); -+ MZ_GC_CHECK(); -+ mod = scheme_primitive_module(vimext_symbol, environment); -+ MZ_GC_CHECK(); - /* all prims made closed so they can access their own names */ -- for (i = 0; i < sizeof(prims)/sizeof(prims[0]); i++) -+ for (i = 0; i < (int)(sizeof(prims)/sizeof(prims[0])); i++) - { - Vim_Prim *prim = prims + i; -- scheme_add_global(prim->name, -- scheme_make_closed_prim_w_arity(prim->prim, prim, prim->name, -- prim->mina, prim->maxa), -- mod); -+ closed_prim = scheme_make_closed_prim_w_arity(prim->prim, prim, prim->name, -+ prim->mina, prim->maxa); -+ scheme_add_global(prim->name, closed_prim, mod); -+ MZ_GC_CHECK(); - } -- scheme_add_global("global-namespace", (Scheme_Object *)environment, mod); - scheme_finish_primitive_module(mod); -+ MZ_GC_CHECK(); -+ MZ_GC_UNREG(); - } - - #ifdef HAVE_SANDBOX -@@ -2699,21 +3148,25 @@ - { - MZ_REGISTER_STATIC(M_write); - M_write = scheme_intern_symbol("write"); -+ MZ_GC_CHECK(); - } - if (M_read == NULL) - { - MZ_REGISTER_STATIC(M_read); - M_read = scheme_intern_symbol("read"); -+ MZ_GC_CHECK(); - } - if (M_execute == NULL) - { - MZ_REGISTER_STATIC(M_execute); - M_execute = scheme_intern_symbol("execute"); -+ MZ_GC_CHECK(); - } - if (M_delete == NULL) - { - MZ_REGISTER_STATIC(M_delete); - M_delete = scheme_intern_symbol("delete"); -+ MZ_GC_CHECK(); - } - - while (!SCHEME_NULLP(requested_access)) -diff -Naur vim72.orig/src/if_mzsch.h vim72/src/if_mzsch.h ---- vim72.orig/src/if_mzsch.h 2006-03-24 16:09:53.000000000 +0000 -+++ vim72/src/if_mzsch.h 2009-07-22 22:54:22.000000000 +0100 -@@ -11,6 +11,7 @@ - - /* #ifdef needed for "make depend" */ - #ifdef FEAT_MZSCHEME -+# include - # include - #endif - -@@ -46,4 +47,31 @@ - # define scheme_byte_string_to_char_string(obj) (obj) - #endif - -+/* Precise GC macros */ -+#ifndef MZ_GC_DECL_REG -+# define MZ_GC_DECL_REG(size) /* empty */ -+#endif -+#ifndef MZ_GC_VAR_IN_REG -+# define MZ_GC_VAR_IN_REG(x, v) /* empty */ -+#endif -+#ifndef MZ_GC_ARRAY_VAR_IN_REG -+# define MZ_GC_ARRAY_VAR_IN_REG(x, v, l) /* empty */ -+#endif -+#ifndef MZ_GC_REG -+# define MZ_GC_REG() /* empty */ -+#endif -+#ifndef MZ_GC_UNREG -+# define MZ_GC_UNREG() /* empty */ -+#endif -+ -+#ifdef MZSCHEME_FORCE_GC -+/* -+ * force garbage collection to check all references are registered -+ * seg faults will indicate not registered refs -+ */ -+# define MZ_GC_CHECK() scheme_collect_garbage(); -+#else -+# define MZ_GC_CHECK() /* empty */ -+#endif -+ - #endif /* _IF_MZSCH_H_ */ -diff -Naur vim72.orig/src/if_perl.xs vim72/src/if_perl.xs ---- vim72.orig/src/if_perl.xs 2008-07-17 21:55:09.000000000 +0100 -+++ vim72/src/if_perl.xs 2009-07-22 22:54:23.000000000 +0100 -@@ -136,6 +136,9 @@ - # 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 -@@ -163,7 +166,7 @@ - # define Perl_Isv_yes_ptr dll_Perl_Isv_yes_ptr - # define boot_DynaLoader dll_boot_DynaLoader - --# define Perl_sys_init3 dll_Perl_sys_init3 -+# define Perl_sys_init dll_Perl_sys_init - # define Perl_sys_term dll_Perl_sys_term - # define Perl_ISv_ptr dll_Perl_ISv_ptr - # define Perl_Istack_max_ptr dll_Perl_Istack_max_ptr -@@ -268,7 +271,8 @@ - static void (*boot_DynaLoader)_((pTHX_ CV*)); - - #if (PERL_REVISION == 5) && (PERL_VERSION >= 10) --static void (*Perl_sys_init3)(int* argc, char*** argv, char*** env); -+static void (*Perl_sv_free2)(pTHX_ SV*); -+static void (*Perl_sys_init)(int* argc, char*** argv); - static void (*Perl_sys_term)(void); - static SV** (*Perl_ISv_ptr)(register PerlInterpreter*); - static SV*** (*Perl_Istack_max_ptr)(register PerlInterpreter*); -@@ -367,7 +371,8 @@ - {"Perl_TXpv_ptr", (PERL_PROC*)&Perl_TXpv_ptr}, - {"Perl_Tna_ptr", (PERL_PROC*)&Perl_Tna_ptr}, - #else -- {"Perl_sys_init3", (PERL_PROC*)&Perl_sys_init3}, -+ {"Perl_sv_free2", (PERL_PROC*)&Perl_sv_free2}, -+ {"Perl_sys_init", (PERL_PROC*)&Perl_sys_init}, - {"Perl_sys_term", (PERL_PROC*)&Perl_sys_term}, - {"Perl_ISv_ptr", (PERL_PROC*)&Perl_ISv_ptr}, - {"Perl_Istack_sp_ptr", (PERL_PROC*)&Perl_Istack_sp_ptr}, -@@ -455,7 +460,7 @@ - static char *argv[] = { "", "-e", "" }; - - #if (PERL_REVISION == 5) && (PERL_VERSION >= 10) -- Perl_sys_init3(&argc, (char***)&argv, NULL); -+ Perl_sys_init(&argc, (char***)&argv); - #endif - perl_interp = perl_alloc(); - perl_construct(perl_interp); -@@ -715,9 +720,11 @@ - #ifdef HAVE_SANDBOX - if (sandbox) - { -+# ifndef MAKE_TEST /* avoid a warning for unreachable code */ - if ((safe = perl_get_sv( "VIM::safe", FALSE )) == NULL || !SvTRUE(safe)) - EMSG(_("E299: Perl evaluation forbidden in sandbox without the Safe module")); - else -+# endif - { - PUSHMARK(SP); - XPUSHs(safe); -@@ -1228,9 +1235,8 @@ - if (u_savedel(lnum, 1) == OK) - { - ml_delete(lnum, 0); -+ check_cursor(); - deleted_lines_mark(lnum, 1L); -- if (aco.save_buf == curbuf) -- check_cursor(); - } - - /* restore curwin/curbuf and a few other things */ -diff -Naur vim72.orig/src/if_python.c vim72/src/if_python.c ---- vim72.orig/src/if_python.c 2008-07-17 22:09:32.000000000 +0100 -+++ vim72/src/if_python.c 2009-07-22 22:54:23.000000000 +0100 -@@ -531,6 +531,12 @@ - if (PythonMod_Init()) - goto fail; - -+ /* Remove the element from sys.path that was added because of our -+ * argv[0] value in PythonMod_Init(). Previously we used an empty -+ * string, but dependinding on the OS we then get an empty entry or -+ * the current directory in sys.path. */ -+ PyRun_SimpleString("import sys; sys.path = filter(lambda x: x != '/must>not&exist', sys.path)"); -+ - /* the first python thread is vim's, release the lock */ - Python_SaveThread(); - -@@ -1090,9 +1096,8 @@ - - /* Vim module - Implementation - */ --/*ARGSUSED*/ - static PyObject * --VimCommand(PyObject *self, PyObject *args) -+VimCommand(PyObject *self UNUSED, PyObject *args) - { - char *cmd; - PyObject *result; -@@ -1145,14 +1150,23 @@ - - /* Check if we run into a recursive loop. The item must be in lookupDict - * then and we can use it again. */ -- sprintf(ptrBuf, PRINTF_DECIMAL_LONG_U, (long_u)our_tv); -- result = PyDict_GetItemString(lookupDict, ptrBuf); -- if (result != NULL) -- Py_INCREF(result); -- else if (our_tv->v_type == VAR_STRING) -+ if ((our_tv->v_type == VAR_LIST && our_tv->vval.v_list != NULL) -+ || (our_tv->v_type == VAR_DICT && our_tv->vval.v_dict != NULL)) -+ { -+ sprintf(ptrBuf, PRINTF_DECIMAL_LONG_U, -+ our_tv->v_type == VAR_LIST ? (long_u)our_tv->vval.v_list -+ : (long_u)our_tv->vval.v_dict); -+ result = PyDict_GetItemString(lookupDict, ptrBuf); -+ if (result != NULL) -+ { -+ Py_INCREF(result); -+ return result; -+ } -+ } -+ -+ if (our_tv->v_type == VAR_STRING) - { - result = Py_BuildValue("s", our_tv->vval.v_string); -- PyDict_SetItemString(lookupDict, ptrBuf, result); - } - else if (our_tv->v_type == VAR_NUMBER) - { -@@ -1161,7 +1175,6 @@ - /* For backwards compatibility numbers are stored as strings. */ - sprintf(buf, "%ld", (long)our_tv->vval.v_number); - result = Py_BuildValue("s", buf); -- PyDict_SetItemString(lookupDict, ptrBuf, result); - } - # ifdef FEAT_FLOAT - else if (our_tv->v_type == VAR_FLOAT) -@@ -1170,7 +1183,6 @@ - - sprintf(buf, "%f", our_tv->vval.v_float); - result = Py_BuildValue("s", buf); -- PyDict_SetItemString(lookupDict, ptrBuf, result); - } - # endif - else if (our_tv->v_type == VAR_LIST) -@@ -1179,10 +1191,11 @@ - listitem_T *curr; - - result = PyList_New(0); -- PyDict_SetItemString(lookupDict, ptrBuf, result); - - if (list != NULL) - { -+ PyDict_SetItemString(lookupDict, ptrBuf, result); -+ - for (curr = list->lv_first; curr != NULL; curr = curr->li_next) - { - newObj = VimToPython(&curr->li_tv, depth + 1, lookupDict); -@@ -1194,7 +1207,6 @@ - else if (our_tv->v_type == VAR_DICT) - { - result = PyDict_New(); -- PyDict_SetItemString(lookupDict, ptrBuf, result); - - if (our_tv->vval.v_dict != NULL) - { -@@ -1203,6 +1215,8 @@ - hashitem_T *hi; - dictitem_T *di; - -+ PyDict_SetItemString(lookupDict, ptrBuf, result); -+ - for (hi = ht->ht_array; todo > 0; ++hi) - { - if (!HASHITEM_EMPTY(hi)) -@@ -1227,9 +1241,8 @@ - } - #endif - --/*ARGSUSED*/ - static PyObject * --VimEval(PyObject *self, PyObject *args) -+VimEval(PyObject *self UNUSED, PyObject *args) - { - #ifdef FEAT_EVAL - char *expr; -@@ -1879,9 +1892,8 @@ - /* Buffer list object - Implementation - */ - --/*ARGSUSED*/ - static PyInt --BufListLength(PyObject *self) -+BufListLength(PyObject *self UNUSED) - { - buf_T *b = firstbuf; - PyInt n = 0; -@@ -1895,9 +1907,8 @@ - return n; - } - --/*ARGSUSED*/ - static PyObject * --BufListItem(PyObject *self, PyInt n) -+BufListItem(PyObject *self UNUSED, PyInt n) - { - buf_T *b; - -@@ -2195,9 +2206,8 @@ - - /* Window list object - Implementation - */ --/*ARGSUSED*/ - static PyInt --WinListLength(PyObject *self) -+WinListLength(PyObject *self UNUSED) - { - win_T *w = firstwin; - PyInt n = 0; -@@ -2211,9 +2221,8 @@ - return n; - } - --/*ARGSUSED*/ - static PyObject * --WinListItem(PyObject *self, PyInt n) -+WinListItem(PyObject *self UNUSED, PyInt n) - { - win_T *w; - -@@ -2259,9 +2268,8 @@ - - /* Current items object - Implementation - */ --/*ARGSUSED*/ - static PyObject * --CurrentGetattr(PyObject *self, char *name) -+CurrentGetattr(PyObject *self UNUSED, char *name) - { - if (strcmp(name, "buffer") == 0) - return (PyObject *)BufferNew(curbuf); -@@ -2280,9 +2288,8 @@ - } - } - --/*ARGSUSED*/ - static int --CurrentSetattr(PyObject *self, char *name, PyObject *value) -+CurrentSetattr(PyObject *self UNUSED, char *name, PyObject *value) - { - if (strcmp(name, "line") == 0) - { -@@ -2345,7 +2352,8 @@ - { - PyObject *mod; - PyObject *dict; -- static char *(argv[2]) = {"", NULL}; -+ /* The special value is removed from sys.path in Python_Init(). */ -+ static char *(argv[2]) = {"/must>not&exist/foo", NULL}; - - /* Fixups... */ - BufferType.ob_type = &PyType_Type; -@@ -2489,9 +2497,9 @@ - PyErr_SetVim(_("cannot delete line")); - else - { -- deleted_lines_mark((linenr_T)n, 1L); - if (buf == curwin->w_buffer) - py_fix_cursor((linenr_T)n, (linenr_T)n + 1, (linenr_T)-1); -+ deleted_lines_mark((linenr_T)n, 1L); - } - - curbuf = savebuf; -@@ -2588,10 +2596,9 @@ - break; - } - } -- deleted_lines_mark((linenr_T)lo, (long)i); -- - if (buf == curwin->w_buffer) - py_fix_cursor((linenr_T)lo, (linenr_T)hi, (linenr_T)-n); -+ deleted_lines_mark((linenr_T)lo, (long)i); - } - - curbuf = savebuf; -diff -Naur vim72.orig/src/if_ruby.c vim72/src/if_ruby.c ---- vim72.orig/src/if_ruby.c 2007-09-10 09:40:38.000000000 +0100 -+++ vim72/src/if_ruby.c 2009-07-22 22:54:22.000000000 +0100 -@@ -492,7 +492,7 @@ - } - } - --static VALUE vim_message(VALUE self, VALUE str) -+static VALUE vim_message(VALUE self UNUSED, VALUE str) - { - char *buff, *p; - -@@ -505,20 +505,20 @@ - return Qnil; - } - --static VALUE vim_set_option(VALUE self, VALUE str) -+static VALUE vim_set_option(VALUE self UNUSED, VALUE str) - { - do_set((char_u *)STR2CSTR(str), 0); - update_screen(NOT_VALID); - return Qnil; - } - --static VALUE vim_command(VALUE self, VALUE str) -+static VALUE vim_command(VALUE self UNUSED, VALUE str) - { - do_cmdline_cmd((char_u *)STR2CSTR(str)); - return Qnil; - } - --static VALUE vim_evaluate(VALUE self, VALUE str) -+static VALUE vim_evaluate(VALUE self UNUSED, VALUE str) - { - #ifdef FEAT_EVAL - char_u *value = eval_to_string((char_u *)STR2CSTR(str), NULL, TRUE); -@@ -580,7 +580,7 @@ - return INT2NUM(n); - } - --static VALUE buffer_s_aref(VALUE self, VALUE num) -+static VALUE buffer_s_aref(VALUE self UNUSED, VALUE num) - { - buf_T *b; - int n = NUM2INT(num); -@@ -629,7 +629,9 @@ - return line ? rb_str_new2(line) : Qnil; - } - rb_raise(rb_eIndexError, "index %d out of buffer", n); -+#ifndef __GNUC__ - return Qnil; /* For stop warning */ -+#endif - } - - static VALUE buffer_aref(VALUE self, VALUE num) -@@ -668,7 +670,9 @@ - else - { - rb_raise(rb_eIndexError, "index %d out of buffer", n); -+#ifndef __GNUC__ - return Qnil; /* For stop warning */ -+#endif - } - return str; - } -@@ -789,7 +793,7 @@ - return get_buffer_line(curbuf, curwin->w_cursor.lnum); - } - --static VALUE set_current_line(VALUE self, VALUE str) -+static VALUE set_current_line(VALUE self UNUSED, VALUE str) - { - return set_buffer_line(curbuf, curwin->w_cursor.lnum, str); - } -@@ -815,7 +819,7 @@ - #endif - } - --static VALUE window_s_aref(VALUE self, VALUE num) -+static VALUE window_s_aref(VALUE self UNUSED, VALUE num) - { - win_T *w; - int n = NUM2INT(num); -@@ -897,7 +901,7 @@ - return Qnil; - } - --static VALUE f_p(int argc, VALUE *argv, VALUE self) -+static VALUE f_p(int argc, VALUE *argv, VALUE self UNUSED) - { - int i; - VALUE str = rb_str_new("", 0); -diff -Naur vim72.orig/src/if_tcl.c vim72/src/if_tcl.c ---- vim72.orig/src/if_tcl.c 2007-05-07 20:50:14.000000000 +0100 -+++ vim72/src/if_tcl.c 2009-07-22 22:54:22.000000000 +0100 -@@ -161,7 +161,7 @@ - # endif - - /* -- * Declare HANDLE for perl.dll and function pointers. -+ * Declare HANDLE for tcl.dll and function pointers. - */ - static HANDLE hTclLib = NULL; - Tcl_Interp* (*dll_Tcl_CreateInterp)(); -@@ -182,7 +182,7 @@ - * Make all runtime-links of tcl. - * - * 1. Get module handle using LoadLibraryEx. -- * 2. Get pointer to perl function by GetProcAddress. -+ * 2. Get pointer to tcl function by GetProcAddress. - * 3. Repeat 2, until get all functions will be used. - * - * Parameter 'libname' provides name of DLL. -@@ -290,10 +290,9 @@ - */ - #define TCL_EXIT 5 - --/* ARGSUSED */ - static int - exitcmd(dummy, interp, objc, objv) -- ClientData dummy; -+ ClientData dummy UNUSED; - Tcl_Interp *interp; - int objc; - Tcl_Obj *CONST objv[]; -@@ -315,10 +314,9 @@ - return TCL_ERROR; - } - --/* ARGSUSED */ - static int - catchcmd(dummy, interp, objc, objv) -- ClientData dummy; -+ ClientData dummy UNUSED; - Tcl_Interp *interp; - int objc; - Tcl_Obj *CONST objv[]; -@@ -356,10 +354,9 @@ - /* - * "::vim::beep" - what Vi[m] does best :-) - */ --/* ARGSUSED */ - static int - beepcmd(dummy, interp, objc, objv) -- ClientData dummy; -+ ClientData dummy UNUSED; - Tcl_Interp *interp; - int objc; - Tcl_Obj *CONST objv[]; -@@ -378,10 +375,9 @@ - * "::vim::buffer {N}" - create buffer command for buffer N. - * "::vim::buffer new" - create a new buffer (not implemented) - */ --/* ARGSUSED */ - static int - buffercmd(dummy, interp, objc, objv) -- ClientData dummy; -+ ClientData dummy UNUSED; - Tcl_Interp *interp; - int objc; - Tcl_Obj *CONST objv[]; -@@ -475,10 +471,9 @@ - /* - * "::vim::window list" - create list of window commands. - */ --/* ARGSUSED */ - static int - windowcmd(dummy, interp, objc, objv) -- ClientData dummy; -+ ClientData dummy UNUSED; - Tcl_Interp *interp; - int objc; - Tcl_Obj *CONST objv[]; -@@ -1130,10 +1125,9 @@ - } - - --/* ARGSUSED */ - static int - commandcmd(dummy, interp, objc, objv) -- ClientData dummy; -+ ClientData dummy UNUSED; - Tcl_Interp *interp; - int objc; - Tcl_Obj *CONST objv[]; -@@ -1145,10 +1139,9 @@ - return err; - } - --/* ARGSUSED */ - static int - optioncmd(dummy, interp, objc, objv) -- ClientData dummy; -+ ClientData dummy UNUSED; - Tcl_Interp *interp; - int objc; - Tcl_Obj *CONST objv[]; -@@ -1160,10 +1153,9 @@ - return err; - } - --/* ARGSUSED */ - static int - exprcmd(dummy, interp, objc, objv) -- ClientData dummy; -+ ClientData dummy UNUSED; - Tcl_Interp *interp; - int objc; - Tcl_Obj *CONST objv[]; -@@ -1584,11 +1576,10 @@ - I/O Channel - ********************************************/ - --/* ARGSUSED */ - static int - channel_close(instance, interp) - ClientData instance; -- Tcl_Interp *interp; -+ Tcl_Interp *interp UNUSED; - { - int err = 0; - -@@ -1602,12 +1593,11 @@ - return err; - } - --/* ARGSUSED */ - static int - channel_input(instance, buf, bufsiz, errptr) -- ClientData instance; -- char *buf; -- int bufsiz; -+ ClientData instance UNUSED; -+ char *buf UNUSED; -+ int bufsiz UNUSED; - int *errptr; - { - -@@ -1659,21 +1649,19 @@ - return result; - } - --/* ARGSUSED */ - static void - channel_watch(instance, mask) -- ClientData instance; -- int mask; -+ ClientData instance UNUSED; -+ int mask UNUSED; - { - Tcl_SetErrno(EINVAL); - } - --/* ARGSUSED */ - static int - channel_gethandle(instance, direction, handleptr) -- ClientData instance; -- int direction; -- ClientData *handleptr; -+ ClientData instance UNUSED; -+ int direction UNUSED; -+ ClientData *handleptr UNUSED; - { - Tcl_SetErrno(EINVAL); - return EINVAL; -@@ -1682,16 +1670,31 @@ - - static Tcl_ChannelType channel_type = - { -- "vimmessage", -- NULL, /* blockmode */ -- channel_close, -- channel_input, -- channel_output, -- NULL, /* seek */ -- NULL, /* set option */ -- NULL, /* get option */ -- channel_watch, -- channel_gethandle -+ "vimmessage", /* typeName */ -+ NULL, /* version */ -+ channel_close, /* closeProc */ -+ channel_input, /* inputProc */ -+ channel_output, /* outputProc */ -+ NULL, /* seekProc */ -+ NULL, /* setOptionProc */ -+ NULL, /* getOptionProc */ -+ channel_watch, /* watchProc */ -+ channel_gethandle, /* getHandleProc */ -+ NULL, /* close2Proc */ -+ NULL, /* blockModeProc */ -+#ifdef TCL_CHANNEL_VERSION_2 -+ NULL, /* flushProc */ -+ NULL, /* handlerProc */ -+#endif -+#ifdef TCL_CHANNEL_VERSION_3 -+ NULL, /* wideSeekProc */ -+#endif -+#ifdef TCL_CHANNEL_VERSION_4 -+ NULL, /* threadActionProc */ -+#endif -+#ifdef TCL_CHANNEL_VERSION_5 -+ NULL /* truncateProc */ -+#endif - }; - - /********************************** -diff -Naur vim72.orig/src/if_xcmdsrv.c vim72/src/if_xcmdsrv.c ---- vim72.orig/src/if_xcmdsrv.c 2008-07-18 14:05:03.000000000 +0100 -+++ vim72/src/if_xcmdsrv.c 2009-07-22 22:54:22.000000000 +0100 -@@ -682,7 +682,7 @@ - * Scan all of the names out of the property. - */ - ga_init2(&ga, 1, 100); -- for (p = regProp; (p - regProp) < numItems; p++) -+ for (p = regProp; (long_u)(p - regProp) < numItems; p++) - { - entry = p; - while (*p != 0 && !isspace(*p)) -@@ -736,7 +736,7 @@ - + serverReply.ga_len; - e.id = w; - ga_init2(&e.strings, 1, 100); -- memcpy(p, &e, sizeof(e)); -+ mch_memmove(p, &e, sizeof(e)); - serverReply.ga_len++; - } - } -@@ -969,7 +969,7 @@ - */ - returnValue = (int_u)None; - entry = NULL; /* Not needed, but eliminates compiler warning. */ -- for (p = regProp; (p - regProp) < numItems; ) -+ for (p = regProp; (long_u)(p - regProp) < numItems; ) - { - entry = p; - while (*p != 0 && !isspace(*p)) -@@ -986,7 +986,7 @@ - - if (loose != NULL && returnValue == (int_u)None && !IsSerialName(name)) - { -- for (p = regProp; (p - regProp) < numItems; ) -+ for (p = regProp; (long_u)(p - regProp) < numItems; ) - { - entry = p; - while (*p != 0 && !isspace(*p)) -@@ -1018,7 +1018,7 @@ - p++; - count = numItems - (p - regProp); - if (count > 0) -- memcpy(entry, p, count); -+ mch_memmove(entry, p, count); - XChangeProperty(dpy, RootWindow(dpy, 0), registryProperty, XA_STRING, - 8, PropModeReplace, regProp, - (int)(numItems - (p - entry))); -@@ -1056,7 +1056,7 @@ - return; - - /* Scan the property for the window id. */ -- for (p = regProp; (p - regProp) < numItems; ) -+ for (p = regProp; (long_u)(p - regProp) < numItems; ) - { - if (*p != 0) - { -@@ -1072,7 +1072,7 @@ - p++; - lastHalf = numItems - (p - regProp); - if (lastHalf > 0) -- memcpy(entry, p, lastHalf); -+ mch_memmove(entry, p, lastHalf); - numItems = (entry - regProp) + lastHalf; - p = entry; - continue; -@@ -1196,7 +1196,7 @@ - * one time; each iteration through the outer loop handles a - * single command or result. - */ -- for (p = propInfo; (p - propInfo) < numItems; ) -+ for (p = propInfo; (long_u)(p - propInfo) < numItems; ) - { - /* - * Ignore leading NULs; each command or result starts with a -@@ -1230,7 +1230,7 @@ - serial = (char_u *)""; - script = NULL; - enc = NULL; -- while (p - propInfo < numItems && *p == '-') -+ while ((long_u)(p - propInfo) < numItems && *p == '-') - { - switch (p[1]) - { -@@ -1333,7 +1333,7 @@ - res = (char_u *)""; - code = 0; - enc = NULL; -- while ((p-propInfo) < numItems && *p == '-') -+ while ((long_u)(p - propInfo) < numItems && *p == '-') - { - switch (p[1]) - { -@@ -1401,7 +1401,7 @@ - gotWindow = 0; - str = (char_u *)""; - enc = NULL; -- while ((p-propInfo) < numItems && *p == '-') -+ while ((long_u)(p - propInfo) < numItems && *p == '-') - { - switch (p[1]) - { -@@ -1489,11 +1489,10 @@ - /* - * Another X Error handler, just used to check for errors. - */ --/* ARGSUSED */ - static int - x_error_check(dpy, error_event) -- Display *dpy; -- XErrorEvent *error_event; -+ Display *dpy UNUSED; -+ XErrorEvent *error_event UNUSED; - { - got_x_error = TRUE; - return 0; -diff -Naur vim72.orig/src/macros.h vim72/src/macros.h ---- vim72.orig/src/macros.h 2007-08-04 12:44:18.000000000 +0100 -+++ vim72/src/macros.h 2009-07-22 22:54:22.000000000 +0100 -@@ -127,15 +127,31 @@ - #ifdef FEAT_LANGMAP - /* - * Adjust chars in a language according to 'langmap' option. -- * NOTE that there is NO overhead if 'langmap' is not set; but even -- * when set we only have to do 2 ifs and an array lookup. -+ * NOTE that there is no noticeable overhead if 'langmap' is not set. -+ * When set the overhead for characters < 256 is small. - * Don't apply 'langmap' if the character comes from the Stuff buffer. - * The do-while is just to ignore a ';' after the macro. - */ --# define LANGMAP_ADJUST(c, condition) do { \ -- if (*p_langmap && (condition) && !KeyStuffed && (c) >= 0 && (c) < 256) \ -- c = langmap_mapchar[c]; \ -+# ifdef FEAT_MBYTE -+# define LANGMAP_ADJUST(c, condition) \ -+ do { \ -+ if (*p_langmap && (condition) && !KeyStuffed && (c) >= 0) \ -+ { \ -+ if ((c) < 256) \ -+ c = langmap_mapchar[c]; \ -+ else \ -+ c = langmap_adjust_mb(c); \ -+ } \ - } while (0) -+# else -+# define LANGMAP_ADJUST(c, condition) \ -+ do { \ -+ if (*p_langmap && (condition) && !KeyStuffed && (c) >= 0 && (c) < 256) \ -+ c = langmap_mapchar[c]; \ -+ } while (0) -+# endif -+#else -+# define LANGMAP_ADJUST(c, condition) /* nop */ - #endif - - /* -@@ -268,7 +284,7 @@ - # define mb_cptr2len(p) (enc_utf8 ? utf_ptr2len(p) : (*mb_ptr2len)(p)) - - # define MB_COPY_CHAR(f, t) if (has_mbyte) mb_copy_char(&f, &t); else *t++ = *f++ --# define MB_CHARLEN(p) (has_mbyte ? mb_charlen(p) : STRLEN(p)) -+# define MB_CHARLEN(p) (has_mbyte ? mb_charlen(p) : (int)STRLEN(p)) - # define PTR2CHAR(p) (has_mbyte ? mb_ptr2char(p) : (int)*(p)) - #else - # define mb_ptr_adv(p) ++p -diff -Naur vim72.orig/src/main.c vim72/src/main.c ---- vim72.orig/src/main.c 2008-07-24 09:40:56.000000000 +0100 -+++ vim72/src/main.c 2009-07-22 22:54:22.000000000 +0100 -@@ -645,11 +645,12 @@ - - #ifdef FEAT_VIMINFO - /* -- * Read in registers, history etc, but not marks, from the viminfo file -+ * Read in registers, history etc, but not marks, from the viminfo file. -+ * This is where v:oldfiles gets filled. - */ - if (*p_viminfo != NUL) - { -- read_viminfo(NULL, TRUE, FALSE, FALSE); -+ read_viminfo(NULL, VIF_WANT_INFO | VIF_GET_OLDFILES); - TIME_MSG("reading viminfo"); - } - #endif -@@ -934,8 +935,14 @@ - - /* - * Call the main command loop. This never returns. -+ * For embedded MzScheme the main_loop will be called by Scheme -+ * for proper stack tracking - */ -+#ifndef FEAT_MZSCHEME - main_loop(FALSE, FALSE); -+#else -+ mzscheme_main(); -+#endif - - return 0; - } -@@ -1457,7 +1464,8 @@ - ++initstr; - } - -- if (TOLOWER_ASC(initstr[0]) == 'g' || initstr[0] == 'k') -+ /* "gvim" starts the GUI. Also accept "Gvim" for MS-Windows. */ -+ if (TOLOWER_ASC(initstr[0]) == 'g') - { - main_start_gui(); - #ifdef FEAT_GUI -@@ -1503,12 +1511,12 @@ - * - * Also find the --server... arguments and --socketid and --windowid - */ --/*ARGSUSED*/ - static void - early_arg_scan(parmp) -- mparm_T *parmp; -+ mparm_T *parmp UNUSED; - { --#if defined(FEAT_XCLIPBOARD) || defined(FEAT_CLIENTSERVER) -+#if defined(FEAT_XCLIPBOARD) || defined(FEAT_CLIENTSERVER) \ -+ || !defined(FEAT_NETBEANS_INTG) - int argc = parmp->argc; - char **argv = parmp->argv; - int i; -@@ -1580,6 +1588,14 @@ - else if (STRICMP(argv[i], "--echo-wid") == 0) - echo_wid_arg = TRUE; - # endif -+# ifndef FEAT_NETBEANS_INTG -+ else if (strncmp(argv[i], "-nb", (size_t)3) == 0) -+ { -+ mch_errmsg(_("'-nb' cannot be used: not enabled at compile time\n")); -+ mch_exit(2); -+ } -+# endif -+ - } - #endif - } -@@ -2361,7 +2377,7 @@ - * Is there any other system that cannot do this? - */ - close(0); -- dup(2); -+ ignored = dup(2); - #endif - } - -@@ -2369,10 +2385,9 @@ - * Create the requested number of windows and edit buffers in them. - * Also does recovery if "recoverymode" set. - */ --/*ARGSUSED*/ - static void - create_windows(parmp) -- mparm_T *parmp; -+ mparm_T *parmp UNUSED; - { - #ifdef FEAT_WINDOWS - int dorewind; -@@ -2586,7 +2601,7 @@ - # endif - (void)do_ecmd(0, arg_idx < GARGCOUNT - ? alist_name(&GARGLIST[arg_idx]) : NULL, -- NULL, NULL, ECMD_LASTL, ECMD_HIDE); -+ NULL, NULL, ECMD_LASTL, ECMD_HIDE, curwin); - # ifdef HAS_SWAP_EXISTS_ACTION - if (swap_exists_did_quit) - { -@@ -3840,10 +3855,9 @@ - * return an allocated string. Otherwise return "data". - * "*tofree" is set to the result when it needs to be freed later. - */ --/*ARGSUSED*/ - char_u * - serverConvert(client_enc, data, tofree) -- char_u *client_enc; -+ char_u *client_enc UNUSED; - char_u *data; - char_u **tofree; - { -diff -Naur vim72.orig/src/Makefile vim72/src/Makefile ---- vim72.orig/src/Makefile 2008-08-09 15:50:04.000000000 +0100 -+++ vim72/src/Makefile 2009-07-22 22:54:22.000000000 +0100 -@@ -105,8 +105,8 @@ - # 4. "make test" {{{1 - # This is optional. This will run Vim scripts on a number of test - # files, and compare the produced output with the expected output. --# If all is well, you will get the "ALL DONE" message in the end. See --# below (search for "/^test"). -+# If all is well, you will get the "ALL DONE" message in the end. If a -+# test fails you get "TEST FAILURE". See below (search for "/^test"). - # - # 5. "make install" {{{1 - # If the new Vim seems to be working OK you can install it and the -@@ -533,6 +533,11 @@ - #CFLAGS = -g -DDEBUG -Wall -Wshadow -Wmissing-prototypes - #CFLAGS = -g -O2 '-DSTARTUPTIME="vimstartup"' -fno-strength-reduce -Wall -Wmissing-prototypes - -+# Use this with GCC to check for mistakes, unused arguments, etc. -+#CFLAGS = -g -Wall -Wextra -Wmissing-prototypes -Wunreachable-code -+#PYTHON_CFLAGS_EXTRA = -Wno-missing-field-initializers -+#MZSCHEME_CFLAGS_EXTRA = -Wno-unreachable-code -Wno-unused-parameter -+ - # EFENCE - Electric-Fence malloc debugging: catches memory accesses beyond - # allocated memory (and makes every malloc()/free() very slow). - # Electric Fence is free (search ftp sites). -@@ -551,7 +556,13 @@ - # }}} - - # LINT - for running lint -+# For standard Unix lint -+LINT = lint - LINT_OPTIONS = -beprxzF -+# For splint -+# It doesn't work well, crashes on include files and non-ascii characters. -+#LINT = splint -+#LINT_OPTIONS = +unixlib -weak -macrovarprefixexclude -showfunc -linelen 9999 - - # PROFILING - Uncomment the next two lines to do profiling with gcc and gprof. - # Might not work with GUI or Perl. -@@ -1259,16 +1270,16 @@ - # This is for cproto 3 patchlevel 8 or below - # __inline, __attribute__ and __extension__ are not recognized by cproto - # G_IMPLEMENT_INLINES is to avoid functions defined in glib/gutils.h. --NO_ATTR = -D__inline= -D__inline__= -DG_IMPLEMENT_INLINES \ -- -D"__attribute__\\(x\\)=" -D"__asm__\\(x\\)=" \ -- -D__extension__= -D__restrict="" \ -- -D__gnuc_va_list=char -D__builtin_va_list=char -+#NO_ATTR = -D__inline= -D__inline__= -DG_IMPLEMENT_INLINES \ -+# -D"__attribute__\\(x\\)=" -D"__asm__\\(x\\)=" \ -+# -D__extension__= -D__restrict="" \ -+# -D__gnuc_va_list=char -D__builtin_va_list=char - - # --# This is for cproto 3 patchlevel 9 or above (currently 4.6) -+# This is for cproto 3 patchlevel 9 or above (currently 4.6, 4.7g) - # __inline and __attribute__ are now recognized by cproto - # -D"foo()=" is not supported by all compilers so do not use it --# NO_ATTR= -+NO_ATTR= - # - # maybe the "/usr/bin/cc -E" has to be adjusted for some systems - # This is for cproto 3.5 patchlevel 3: -@@ -1432,6 +1443,7 @@ - $(SNIFF_SRC) $(WORKSHOP_SRC) $(WSDEBUG_SRC) $(NETBEANS_SRC) - #LINT_SRC = $(SRC) - #LINT_SRC = $(ALL_SRC) -+#LINT_SRC = $(BASIC_SRC) - - OBJ = \ - objects/buffer.o \ -@@ -1737,7 +1749,8 @@ - # 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 everything is alright, the final message will be "ALL DONE". If not you -+# get "TEST FAILURE". - # - test check: - $(MAKE) -f Makefile $(VIMTARGET) -@@ -2187,6 +2200,7 @@ - -rm -f $(TOOLS) auto/osdef.h auto/pathdef.c auto/if_perl.c - -rm -f conftest* *~ auto/link.sed - -rm -rf $(APPDIR) -+ -rm -rf mzscheme_base.c - if test -d $(PODIR); then \ - cd $(PODIR); $(MAKE) prefix=$(DESTDIR)$(prefix) clean; \ - fi -@@ -2272,12 +2286,12 @@ - - # Run lint. Clean up the *.ln files that are sometimes left behind. - lint: -- lint $(LINT_OPTIONS) $(LINT_CFLAGS) $(LINT_EXTRA) $(LINT_SRC) -+ $(LINT) $(LINT_OPTIONS) $(LINT_CFLAGS) $(LINT_EXTRA) $(LINT_SRC) - -rm -f *.ln - - # Check dosinst.c with lint. - lintinstall: -- lint $(LINT_OPTIONS) -DWIN32 -DUNIX_LINT dosinst.c -+ $(LINT) $(LINT_OPTIONS) -DWIN32 -DUNIX_LINT dosinst.c - -rm -f dosinst.ln - - ########################################################################### -@@ -2420,8 +2434,11 @@ - objects/if_xcmdsrv.o: if_xcmdsrv.c - $(CCC) -o $@ if_xcmdsrv.c - --objects/if_mzsch.o: if_mzsch.c -- $(CCC) -o $@ if_mzsch.c -+objects/if_mzsch.o: if_mzsch.c $(MZSCHEME_EXTRA) -+ $(CCC) -o $@ $(MZSCHEME_CFLAGS_EXTRA) if_mzsch.c -+ -+mzscheme_base.c: -+ $(MZSCHEME_MZC) --c-mods mzscheme_base.c ++lib scheme/base - - objects/if_perl.o: auto/if_perl.c - $(CCC) -o $@ auto/if_perl.c -@@ -2430,7 +2447,7 @@ - $(CCC) -o $@ if_perlsfio.c - - objects/if_python.o: if_python.c -- $(CCC) -o $@ if_python.c -+ $(CCC) -o $@ $(PYTHON_CFLAGS_EXTRA) if_python.c - - objects/if_ruby.o: if_ruby.c - $(CCC) -o $@ if_ruby.c -diff -Naur vim72.orig/src/mark.c vim72/src/mark.c ---- vim72.orig/src/mark.c 2008-08-08 23:06:49.000000000 +0100 -+++ vim72/src/mark.c 2009-07-22 22:54:22.000000000 +0100 -@@ -884,10 +884,9 @@ - /* - * print the jumplist - */ --/*ARGSUSED*/ - void - ex_jumps(eap) -- exarg_T *eap; -+ exarg_T *eap UNUSED; - { - int i; - char_u *name; -@@ -933,10 +932,9 @@ - /* - * print the changelist - */ --/*ARGSUSED*/ - void - ex_changes(eap) -- exarg_T *eap; -+ exarg_T *eap UNUSED; - { - int i; - char_u *name; -@@ -1023,6 +1021,9 @@ - int fnum = curbuf->b_fnum; - linenr_T *lp; - win_T *win; -+#ifdef FEAT_WINDOWS -+ tabpage_T *tab; -+#endif - - if (line2 < line1 && amount_after == 0L) /* nothing to do */ - return; -@@ -1064,7 +1065,7 @@ - /* quickfix marks */ - qf_mark_adjust(NULL, line1, line2, amount, amount_after); - /* location lists */ -- FOR_ALL_WINDOWS(win) -+ FOR_ALL_TAB_WINDOWS(tab, win) - qf_mark_adjust(win, line1, line2, amount, amount_after); - #endif - -@@ -1086,7 +1087,7 @@ - /* - * Adjust items in all windows related to the current buffer. - */ -- FOR_ALL_WINDOWS(win) -+ FOR_ALL_TAB_WINDOWS(tab, win) - { - #ifdef FEAT_JUMPLIST - if (!cmdmod.lockmarks) -@@ -1627,15 +1628,17 @@ - - /* - * Handle marks in the viminfo file: -- * fp_out == NULL read marks for current buffer only -- * fp_out != NULL copy marks for buffers not in buffer list -+ * fp_out != NULL: copy marks for buffers not in buffer list -+ * fp_out == NULL && (flags & VIF_WANT_MARKS): read marks for curbuf only -+ * fp_out == NULL && (flags & VIF_GET_OLDFILES | VIF_FORCEIT): fill v:oldfiles - */ - void --copy_viminfo_marks(virp, fp_out, count, eof) -+copy_viminfo_marks(virp, fp_out, count, eof, flags) - vir_T *virp; - FILE *fp_out; - int count; - int eof; -+ int flags; - { - char_u *line = virp->vir_line; - buf_T *buf; -@@ -1647,10 +1650,23 @@ - char_u *p; - char_u *name_buf; - pos_T pos; -+#ifdef FEAT_EVAL -+ list_T *list = NULL; -+#endif - - if ((name_buf = alloc(LSIZE)) == NULL) - return; - *name_buf = NUL; -+ -+#ifdef FEAT_EVAL -+ if (fp_out == NULL && (flags & (VIF_GET_OLDFILES | VIF_FORCEIT))) -+ { -+ list = list_alloc(); -+ if (list != NULL) -+ set_vim_var_list(VV_OLDFILES, list); -+ } -+#endif -+ - num_marked_files = get_viminfo_parameter('\''); - while (!eof && (count < num_marked_files || fp_out == NULL)) - { -@@ -1681,6 +1697,11 @@ - p++; - *p = NUL; - -+#ifdef FEAT_EVAL -+ if (list != NULL) -+ list_append_string(list, str, -1); -+#endif -+ - /* - * If fp_out == NULL, load marks for current buffer. - * If fp_out != NULL, copy marks for buffers not in buflist. -@@ -1688,7 +1709,7 @@ - load_marks = copy_marks_out = FALSE; - if (fp_out == NULL) - { -- if (curbuf->b_ffname != NULL) -+ if ((flags & VIF_WANT_MARKS) && curbuf->b_ffname != NULL) - { - if (*name_buf == NUL) /* only need to do this once */ - home_replace(NULL, curbuf->b_ffname, name_buf, LSIZE, TRUE); -diff -Naur vim72.orig/src/mbyte.c vim72/src/mbyte.c ---- vim72.orig/src/mbyte.c 2008-07-14 13:38:05.000000000 +0100 -+++ vim72/src/mbyte.c 2009-07-22 22:54:23.000000000 +0100 -@@ -127,7 +127,10 @@ - static int dbcs_char2len __ARGS((int c)); - static int dbcs_char2bytes __ARGS((int c, char_u *buf)); - static int dbcs_ptr2len __ARGS((char_u *p)); -+static int dbcs_ptr2len_len __ARGS((char_u *p, int size)); -+static int utf_ptr2cells_len __ARGS((char_u *p, int size)); - static int dbcs_char2cells __ARGS((int c)); -+static int dbcs_ptr2cells_len __ARGS((char_u *p, int size)); - static int dbcs_ptr2char __ARGS((char_u *p)); - - /* Lookup table to quickly get the length in bytes of a UTF-8 character from -@@ -606,9 +609,11 @@ - if (enc_utf8) - { - mb_ptr2len = utfc_ptr2len; -+ mb_ptr2len_len = utfc_ptr2len_len; - mb_char2len = utf_char2len; - mb_char2bytes = utf_char2bytes; - mb_ptr2cells = utf_ptr2cells; -+ mb_ptr2cells_len = utf_ptr2cells_len; - mb_char2cells = utf_char2cells; - mb_off2cells = utf_off2cells; - mb_ptr2char = utf_ptr2char; -@@ -617,9 +622,11 @@ - else if (enc_dbcs != 0) - { - mb_ptr2len = dbcs_ptr2len; -+ mb_ptr2len_len = dbcs_ptr2len_len; - mb_char2len = dbcs_char2len; - mb_char2bytes = dbcs_char2bytes; - mb_ptr2cells = dbcs_ptr2cells; -+ mb_ptr2cells_len = dbcs_ptr2cells_len; - mb_char2cells = dbcs_char2cells; - mb_off2cells = dbcs_off2cells; - mb_ptr2char = dbcs_ptr2char; -@@ -628,9 +635,11 @@ - else - { - mb_ptr2len = latin_ptr2len; -+ mb_ptr2len_len = latin_ptr2len_len; - mb_char2len = latin_char2len; - mb_char2bytes = latin_char2bytes; - mb_ptr2cells = latin_ptr2cells; -+ mb_ptr2cells_len = latin_ptr2cells_len; - mb_char2cells = latin_char2cells; - mb_off2cells = latin_off2cells; - mb_ptr2char = latin_ptr2char; -@@ -717,7 +726,7 @@ - * where mblen() returns 0 for invalid character. - * Therefore, following condition includes 0. - */ -- (void)mblen(NULL, 0); /* First reset the state. */ -+ ignored = mblen(NULL, 0); /* First reset the state. */ - if (mblen(buf, (size_t)1) <= 0) - n = 2; - else -@@ -1015,10 +1024,9 @@ - * Return length in bytes of character "c". - * Returns 1 for a single-byte character. - */ --/* ARGSUSED */ - int - latin_char2len(c) -- int c; -+ int c UNUSED; - { - return 1; - } -@@ -1070,7 +1078,6 @@ - * Get byte length of character at "*p" but stop at a NUL. - * For UTF-8 this includes following composing characters. - * Returns 0 when *p is NUL. -- * - */ - int - latin_ptr2len(p) -@@ -1092,6 +1099,40 @@ - return len; - } - -+/* -+ * mb_ptr2len_len() function pointer. -+ * Like mb_ptr2len(), but limit to read "size" bytes. -+ * Returns 0 for an empty string. -+ * Returns 1 for an illegal char or an incomplete byte sequence. -+ */ -+ int -+latin_ptr2len_len(p, size) -+ char_u *p; -+ int size; -+{ -+ if (size < 1 || *p == NUL) -+ return 0; -+ return 1; -+} -+ -+ static int -+dbcs_ptr2len_len(p, size) -+ char_u *p; -+ int size; -+{ -+ int len; -+ -+ if (size < 1 || *p == NUL) -+ return 0; -+ if (size == 1) -+ return 1; -+ /* Check that second byte is not missing. */ -+ len = MB_BYTE2LEN(*p); -+ if (len == 2 && p[1] == NUL) -+ len = 1; -+ return len; -+} -+ - struct interval - { - unsigned short first; -@@ -1248,10 +1289,9 @@ - * Return the number of display cells character at "*p" occupies. - * This doesn't take care of unprintable characters, use ptr2cells() for that. - */ --/*ARGSUSED*/ - int - latin_ptr2cells(p) -- char_u *p; -+ char_u *p UNUSED; - { - return 1; - } -@@ -1289,14 +1329,62 @@ - } - - /* -+ * mb_ptr2cells_len() function pointer. -+ * Like mb_ptr2cells(), but limit string length to "size". -+ * For an empty string or truncated character returns 1. -+ */ -+ int -+latin_ptr2cells_len(p, size) -+ char_u *p UNUSED; -+ int size UNUSED; -+{ -+ return 1; -+} -+ -+ static int -+utf_ptr2cells_len(p, size) -+ char_u *p; -+ int size; -+{ -+ int c; -+ -+ /* Need to convert to a wide character. */ -+ if (size > 0 && *p >= 0x80) -+ { -+ if (utf_ptr2len_len(p, size) < utf8len_tab[*p]) -+ return 1; -+ c = utf_ptr2char(p); -+ /* An illegal byte is displayed as . */ -+ if (utf_ptr2len(p) == 1 || c == NUL) -+ return 4; -+ /* If the char is ASCII it must be an overlong sequence. */ -+ if (c < 0x80) -+ return char2cells(c); -+ return utf_char2cells(c); -+ } -+ return 1; -+} -+ -+ static int -+dbcs_ptr2cells_len(p, size) -+ char_u *p; -+ int size; -+{ -+ /* Number of cells is equal to number of bytes, except for euc-jp when -+ * the first byte is 0x8e. */ -+ if (size <= 1 || (enc_dbcs == DBCS_JPNU && *p == 0x8e)) -+ return 1; -+ return MB_BYTE2LEN(*p); -+} -+ -+/* - * mb_char2cells() function pointer. - * Return the number of display cells character "c" occupies. - * Only takes care of multi-byte chars, not "^C" and such. - */ --/*ARGSUSED*/ - int - latin_char2cells(c) -- int c; -+ int c UNUSED; - { - return 1; - } -@@ -1318,11 +1406,10 @@ - * Return number of display cells for char at ScreenLines[off]. - * We make sure that the offset used is less than "max_off". - */ --/*ARGSUSED*/ - int - latin_off2cells(off, max_off) -- unsigned off; -- unsigned max_off; -+ unsigned off UNUSED; -+ unsigned max_off UNUSED; - { - return 1; - } -@@ -1720,6 +1807,7 @@ - /* - * Return the number of bytes the UTF-8 encoding of the character at "p[size]" - * takes. This includes following composing characters. -+ * Returns 0 for an empty string. - * Returns 1 for an illegal char or an incomplete byte sequence. - */ - int -@@ -1732,7 +1820,7 @@ - int prevlen; - #endif - -- if (*p == NUL) -+ if (size < 1 || *p == NUL) - return 0; - if (p[0] < 0x80 && (size == 1 || p[1] < 0x80)) /* be quick for ASCII */ - return 1; -@@ -2419,11 +2507,10 @@ - * Return offset from "p" to the first byte of the character it points into. - * Returns 0 when already at the first byte of a character. - */ --/*ARGSUSED*/ - int - latin_head_off(base, p) -- char_u *base; -- char_u *p; -+ char_u *base UNUSED; -+ char_u *p UNUSED; - { - return 0; - } -@@ -2540,7 +2627,6 @@ - return (int)(p - q); - } - --#if defined(FEAT_EVAL) || defined(PROTO) - /* - * Copy a character from "*fp" to "*tp" and advance the pointers. - */ -@@ -2555,7 +2641,6 @@ - *tp += l; - *fp += l; - } --#endif - - /* - * Return the offset from "p" to the first byte of a character. When "p" is -@@ -3133,7 +3218,7 @@ - else - s = p + 1; - } -- for (i = 0; s[i] != NUL && s + i < buf + sizeof(buf) - 1; ++i) -+ for (i = 0; s[i] != NUL && i < (int)sizeof(buf) - 1; ++i) - { - if (s[i] == '_' || s[i] == '-') - buf[i] = '-'; -@@ -3180,7 +3265,7 @@ - - # if defined(USE_ICONV) || defined(PROTO) - --static char_u *iconv_string __ARGS((vimconv_T *vcp, char_u *str, int slen, int *unconvlenp)); -+static char_u *iconv_string __ARGS((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 -@@ -3241,13 +3326,15 @@ - * If "unconvlenp" is not NULL handle the string ending in an incomplete - * sequence and set "*unconvlenp" to the length of it. - * Returns the converted string in allocated memory. NULL for an error. -+ * If resultlenp is not NULL, sets it to the result length in bytes. - */ - static char_u * --iconv_string(vcp, str, slen, unconvlenp) -+iconv_string(vcp, str, slen, unconvlenp, resultlenp) - vimconv_T *vcp; - char_u *str; - int slen; - int *unconvlenp; -+ int *resultlenp; - { - const char *from; - size_t fromlen; -@@ -3333,6 +3420,9 @@ - /* Not enough room or skipping illegal sequence. */ - done = to - (char *)result; - } -+ -+ if (resultlenp != NULL) -+ *resultlenp = (int)(to - (char *)result); - return result; - } - -@@ -3584,9 +3674,10 @@ - * Callback invoked when the user finished preediting. - * Put the final string into the input buffer. - */ --/*ARGSUSED0*/ - static void --im_commit_cb(GtkIMContext *context, const gchar *str, gpointer data) -+im_commit_cb(GtkIMContext *context UNUSED, -+ const gchar *str, -+ gpointer data UNUSED) - { - int slen = (int)STRLEN(str); - int add_to_input = TRUE; -@@ -3672,9 +3763,8 @@ - /* - * Callback invoked after start to the preedit. - */ --/*ARGSUSED*/ - static void --im_preedit_start_cb(GtkIMContext *context, gpointer data) -+im_preedit_start_cb(GtkIMContext *context UNUSED, gpointer data UNUSED) - { - #ifdef XIM_DEBUG - xim_log("im_preedit_start_cb()\n"); -@@ -3689,9 +3779,8 @@ - /* - * Callback invoked after end to the preedit. - */ --/*ARGSUSED*/ - static void --im_preedit_end_cb(GtkIMContext *context, gpointer data) -+im_preedit_end_cb(GtkIMContext *context UNUSED, gpointer data UNUSED) - { - #ifdef XIM_DEBUG - xim_log("im_preedit_end_cb()\n"); -@@ -3750,9 +3839,8 @@ - * remaining input from within the "retrieve_surrounding" signal handler, this - * might not be necessary. Gotta ask on vim-dev for opinions. - */ --/*ARGSUSED1*/ - static void --im_preedit_changed_cb(GtkIMContext *context, gpointer data) -+im_preedit_changed_cb(GtkIMContext *context, gpointer data UNUSED) - { - char *preedit_string = NULL; - int cursor_index = 0; -@@ -4618,11 +4706,10 @@ - } - } - --/*ARGSUSED*/ - void - im_set_position(row, col) -- int row; -- int col; -+ int row UNUSED; -+ int col UNUSED; - { - xim_set_preedit(); - } -@@ -4929,12 +5016,11 @@ - static void xim_instantiate_cb __ARGS((Display *display, XPointer client_data, XPointer call_data)); - static void xim_destroy_cb __ARGS((XIM im, XPointer client_data, XPointer call_data)); - --/*ARGSUSED*/ - static void - xim_instantiate_cb(display, client_data, call_data) - Display *display; -- XPointer client_data; -- XPointer call_data; -+ XPointer client_data UNUSED; -+ XPointer call_data UNUSED; - { - Window x11_window; - Display *x11_display; -@@ -4954,12 +5040,11 @@ - xim_instantiate_cb, NULL); - } - --/*ARGSUSED*/ - static void - xim_destroy_cb(im, client_data, call_data) -- XIM im; -- XPointer client_data; -- XPointer call_data; -+ XIM im UNUSED; -+ XPointer client_data UNUSED; -+ XPointer call_data UNUSED; - { - Window x11_window; - Display *x11_display; -@@ -5278,9 +5363,10 @@ - } - } - --/*ARGSUSED*/ - static void --preedit_start_cbproc(XIC xic, XPointer client_data, XPointer call_data) -+preedit_start_cbproc(XIC thexic UNUSED, -+ XPointer client_data UNUSED, -+ XPointer call_data UNUSED) - { - #ifdef XIM_DEBUG - xim_log("xim_decide_input_style()\n"); -@@ -5312,9 +5398,10 @@ - static GSList *key_press_event_queue = NULL; - static gboolean processing_queued_event = FALSE; - --/*ARGSUSED*/ - static void --preedit_draw_cbproc(XIC xic, XPointer client_data, XPointer call_data) -+preedit_draw_cbproc(XIC thexic UNUSED, -+ XPointer client_data UNUSED, -+ XPointer call_data) - { - XIMPreeditDrawCallbackStruct *draw_data; - XIMText *text; -@@ -5386,7 +5473,7 @@ - draw_feedback = (char *)alloc(draw_data->chg_first - + text->length); - else -- draw_feedback = realloc(draw_feedback, -+ draw_feedback = vim_realloc(draw_feedback, - draw_data->chg_first + text->length); - if (draw_feedback != NULL) - { -@@ -5453,18 +5540,20 @@ - return -1; - } - --/*ARGSUSED*/ - static void --preedit_caret_cbproc(XIC xic, XPointer client_data, XPointer call_data) -+preedit_caret_cbproc(XIC thexic UNUSED, -+ XPointer client_data UNUSED, -+ XPointer call_data UNUSED) - { - #ifdef XIM_DEBUG - xim_log("preedit_caret_cbproc()\n"); - #endif - } - --/*ARGSUSED*/ - static void --preedit_done_cbproc(XIC xic, XPointer client_data, XPointer call_data) -+preedit_done_cbproc(XIC thexic UNUSED, -+ XPointer client_data UNUSED, -+ XPointer call_data UNUSED) - { - #ifdef XIM_DEBUG - xim_log("preedit_done_cbproc()\n"); -@@ -5503,9 +5592,8 @@ - } - } - --/*ARGSUSED*/ - int --xim_queue_key_press_event(GdkEventKey *event, int down) -+xim_queue_key_press_event(GdkEventKey *event, int down UNUSED) - { - #ifdef XIM_DEBUG - xim_log("xim_queue_key_press_event()\n"); -@@ -5521,9 +5609,8 @@ - return TRUE; - } - --/*ARGSUSED*/ - static void --preedit_callback_setup(GdkIC *ic) -+preedit_callback_setup(GdkIC *ic UNUSED) - { - XIC xxic; - XVaNestedList preedit_attr; -@@ -5548,9 +5635,8 @@ - XFree(preedit_attr); - } - --/*ARGSUSED*/ - static void --reset_state_setup(GdkIC *ic) -+reset_state_setup(GdkIC *ic UNUSED) - { - #ifdef USE_X11R6_XIM - /* don't change the input context when we call reset */ -@@ -5756,8 +5842,25 @@ - char_u *from; - char_u *to; - { -+ return convert_setup_ext(vcp, from, TRUE, to, TRUE); -+} -+ -+/* -+ * As convert_setup(), but only when from_unicode_is_utf8 is TRUE will all -+ * "from" unicode charsets be considered utf-8. Same for "to". -+ */ -+ int -+convert_setup_ext(vcp, from, from_unicode_is_utf8, to, to_unicode_is_utf8) -+ vimconv_T *vcp; -+ char_u *from; -+ int from_unicode_is_utf8; -+ char_u *to; -+ int to_unicode_is_utf8; -+{ - int from_prop; - int to_prop; -+ int from_is_utf8; -+ int to_is_utf8; - - /* Reset to no conversion. */ - # ifdef USE_ICONV -@@ -5775,37 +5878,46 @@ - - from_prop = enc_canon_props(from); - to_prop = enc_canon_props(to); -- if ((from_prop & ENC_LATIN1) && (to_prop & ENC_UNICODE)) -+ if (from_unicode_is_utf8) -+ from_is_utf8 = from_prop & ENC_UNICODE; -+ else -+ from_is_utf8 = from_prop == ENC_UNICODE; -+ if (to_unicode_is_utf8) -+ to_is_utf8 = to_prop & ENC_UNICODE; -+ else -+ to_is_utf8 = to_prop == ENC_UNICODE; -+ -+ if ((from_prop & ENC_LATIN1) && to_is_utf8) - { - /* Internal latin1 -> utf-8 conversion. */ - vcp->vc_type = CONV_TO_UTF8; - vcp->vc_factor = 2; /* up to twice as long */ - } -- else if ((from_prop & ENC_LATIN9) && (to_prop & ENC_UNICODE)) -+ else if ((from_prop & ENC_LATIN9) && to_is_utf8) - { - /* Internal latin9 -> utf-8 conversion. */ - vcp->vc_type = CONV_9_TO_UTF8; - vcp->vc_factor = 3; /* up to three as long (euro sign) */ - } -- else if ((from_prop & ENC_UNICODE) && (to_prop & ENC_LATIN1)) -+ else if (from_is_utf8 && (to_prop & ENC_LATIN1)) - { - /* Internal utf-8 -> latin1 conversion. */ - vcp->vc_type = CONV_TO_LATIN1; - } -- else if ((from_prop & ENC_UNICODE) && (to_prop & ENC_LATIN9)) -+ else if (from_is_utf8 && (to_prop & ENC_LATIN9)) - { - /* Internal utf-8 -> latin9 conversion. */ - vcp->vc_type = CONV_TO_LATIN9; - } - #ifdef WIN3264 - /* Win32-specific codepage <-> codepage conversion without iconv. */ -- else if (((from_prop & ENC_UNICODE) || encname2codepage(from) > 0) -- && ((to_prop & ENC_UNICODE) || encname2codepage(to) > 0)) -+ else if ((from_is_utf8 || encname2codepage(from) > 0) -+ && (to_is_utf8 || encname2codepage(to) > 0)) - { - vcp->vc_type = CONV_CODEPAGE; - vcp->vc_factor = 2; /* up to twice as long */ -- vcp->vc_cpfrom = (from_prop & ENC_UNICODE) ? 0 : encname2codepage(from); -- vcp->vc_cpto = (to_prop & ENC_UNICODE) ? 0 : encname2codepage(to); -+ vcp->vc_cpfrom = from_is_utf8 ? 0 : encname2codepage(from); -+ vcp->vc_cpto = to_is_utf8 ? 0 : encname2codepage(to); - } - #endif - #ifdef MACOS_X -@@ -5813,7 +5925,7 @@ - { - vcp->vc_type = CONV_MAC_LATIN1; - } -- else if ((from_prop & ENC_MACROMAN) && (to_prop & ENC_UNICODE)) -+ else if ((from_prop & ENC_MACROMAN) && to_is_utf8) - { - vcp->vc_type = CONV_MAC_UTF8; - vcp->vc_factor = 2; /* up to twice as long */ -@@ -5822,7 +5934,7 @@ - { - vcp->vc_type = CONV_LATIN1_MAC; - } -- else if ((from_prop & ENC_UNICODE) && (to_prop & ENC_MACROMAN)) -+ else if (from_is_utf8 && (to_prop & ENC_MACROMAN)) - { - vcp->vc_type = CONV_UTF8_MAC; - } -@@ -5832,8 +5944,8 @@ - { - /* Use iconv() for conversion. */ - vcp->vc_fd = (iconv_t)my_iconv_open( -- (to_prop & ENC_UNICODE) ? (char_u *)"utf-8" : to, -- (from_prop & ENC_UNICODE) ? (char_u *)"utf-8" : from); -+ to_is_utf8 ? (char_u *)"utf-8" : to, -+ from_is_utf8 ? (char_u *)"utf-8" : from); - if (vcp->vc_fd != (iconv_t)-1) - { - vcp->vc_type = CONV_ICONV; -@@ -6089,9 +6201,7 @@ - - # ifdef USE_ICONV - case CONV_ICONV: /* conversion with output_conv.vc_fd */ -- retval = iconv_string(vcp, ptr, len, unconvlenp); -- if (retval != NULL && lenp != NULL) -- *lenp = (int)STRLEN(retval); -+ retval = iconv_string(vcp, ptr, len, unconvlenp, lenp); - break; - # endif - # ifdef WIN3264 -@@ -6103,7 +6213,7 @@ - - /* 1. codepage/UTF-8 -> ucs-2. */ - if (vcp->vc_cpfrom == 0) -- tmp_len = utf8_to_ucs2(ptr, len, NULL, NULL); -+ tmp_len = utf8_to_utf16(ptr, len, NULL, NULL); - else - tmp_len = MultiByteToWideChar(vcp->vc_cpfrom, 0, - ptr, len, 0, 0); -@@ -6111,13 +6221,13 @@ - if (tmp == NULL) - break; - if (vcp->vc_cpfrom == 0) -- utf8_to_ucs2(ptr, len, tmp, unconvlenp); -+ utf8_to_utf16(ptr, len, tmp, unconvlenp); - else - MultiByteToWideChar(vcp->vc_cpfrom, 0, ptr, len, tmp, tmp_len); - - /* 2. ucs-2 -> codepage/UTF-8. */ - if (vcp->vc_cpto == 0) -- retlen = ucs2_to_utf8(tmp, tmp_len, NULL); -+ retlen = utf16_to_utf8(tmp, tmp_len, NULL); - else - retlen = WideCharToMultiByte(vcp->vc_cpto, 0, - tmp, tmp_len, 0, 0, 0, 0); -@@ -6125,7 +6235,7 @@ - if (retval != NULL) - { - if (vcp->vc_cpto == 0) -- ucs2_to_utf8(tmp, tmp_len, retval); -+ utf16_to_utf8(tmp, tmp_len, retval); - else - WideCharToMultiByte(vcp->vc_cpto, 0, - tmp, tmp_len, retval, retlen, 0, 0); -diff -Naur vim72.orig/src/memline.c vim72/src/memline.c ---- vim72.orig/src/memline.c 2008-07-13 17:19:22.000000000 +0100 -+++ vim72/src/memline.c 2009-07-22 22:54:21.000000000 +0100 -@@ -1554,10 +1554,15 @@ - for (i = 0; i < num_files; ++i) - if (fullpathcmp(p, files[i], TRUE) & FPC_SAME) - { -+ /* Remove the name from files[i]. Move further entries -+ * down. When the array becomes empty free it here, since -+ * FreeWild() won't be called below. */ - vim_free(files[i]); -- --num_files; -- for ( ; i < num_files; ++i) -- files[i] = files[i + 1]; -+ if (--num_files == 0) -+ vim_free(files); -+ else -+ for ( ; i < num_files; ++i) -+ files[i] = files[i + 1]; - } - } - if (nr > 0) -@@ -3522,7 +3527,7 @@ - if (errno == EINVAL || errno == ENOENT) - { - /* Found non-symlink or not existing file, stop here. -- * When at the first level use the unmodifed name, skip the -+ * When at the first level use the unmodified name, skip the - * call to vim_FullName(). */ - if (depth == 1) - return FAIL; -@@ -3766,8 +3771,10 @@ - set_vim_var_string(VV_SWAPCHOICE, NULL, -1); - - /* Trigger SwapExists autocommands with set to the file being -- * edited. */ -+ * edited. Disallow changing directory here. */ -+ ++allbuf_lock; - apply_autocmds(EVENT_SWAPEXISTS, buf->b_fname, NULL, FALSE, NULL); -+ --allbuf_lock; - - set_vim_var_string(VV_SWAPNAME, NULL, -1); - -@@ -3793,6 +3800,7 @@ - * - * Note: If BASENAMELEN is not correct, you will get error messages for - * not being able to open the swapfile -+ * Note: May trigger SwapExists autocmd, pointers may change! - */ - static char_u * - findswapname(buf, dirp, old_fname) -@@ -4560,7 +4568,7 @@ - buf->b_ml.ml_chunksize + curix, - (buf->b_ml.ml_usedchunks - curix) * - sizeof(chunksize_T)); -- /* Compute length of first half of lines in the splitted chunk */ -+ /* Compute length of first half of lines in the split chunk */ - size = 0; - linecnt = 0; - while (curline < buf->b_ml.ml_line_count -diff -Naur vim72.orig/src/menu.c vim72/src/menu.c ---- vim72.orig/src/menu.c 2008-06-21 20:53:43.000000000 +0100 -+++ vim72/src/menu.c 2009-07-22 22:54:22.000000000 +0100 -@@ -231,7 +231,7 @@ - if (skipdigits(menu_path + 7) == p) - { - menuarg.iconidx = atoi((char *)menu_path + 7); -- if (menuarg.iconidx >= TOOLBAR_NAME_COUNT) -+ if (menuarg.iconidx >= (int)TOOLBAR_NAME_COUNT) - menuarg.iconidx = -1; - else - menuarg.icon_builtin = TRUE; -@@ -239,7 +239,7 @@ - } - else - { -- for (i = 0; i < TOOLBAR_NAME_COUNT; ++i) -+ for (i = 0; i < (int)TOOLBAR_NAME_COUNT; ++i) - if (STRNCMP(toolbar_names[i], menu_path, p - menu_path) - == 0) - { -@@ -1120,6 +1120,7 @@ - parent = menu; - menu = menu->children; - } -+ vim_free(path_name); - - /* Now we have found the matching menu, and we list the mappings */ - /* Highlight title */ -@@ -1340,10 +1341,9 @@ - * Function given to ExpandGeneric() to obtain the list of (sub)menus (not - * entries). - */ --/*ARGSUSED*/ - char_u * - get_menu_name(xp, idx) -- expand_T *xp; -+ expand_T *xp UNUSED; - int idx; - { - static vimmenu_T *menu = NULL; -@@ -1377,10 +1377,9 @@ - * Function given to ExpandGeneric() to obtain the list of menus and menu - * entries. - */ --/*ARGSUSED*/ - char_u * - get_menu_names(xp, idx) -- expand_T *xp; -+ expand_T *xp UNUSED; - int idx; - { - static vimmenu_T *menu = NULL; -@@ -1738,10 +1737,9 @@ - /* - * Return TRUE if the menu is the tearoff menu. - */ --/*ARGSUSED*/ - static int - menu_is_tearoff(name) -- char_u *name; -+ char_u *name UNUSED; - { - #ifdef FEAT_GUI - return (STRCMP(name, TEAR_STRING) == 0); -@@ -2342,10 +2340,9 @@ - * This function is also defined without the +multi_lang feature, in which - * case the commands are ignored. - */ --/*ARGSUSED*/ - void - ex_menutranslate(eap) -- exarg_T *eap; -+ exarg_T *eap UNUSED; - { - #ifdef FEAT_MULTI_LANG - char_u *arg = eap->arg; -diff -Naur vim72.orig/src/message.c vim72/src/message.c ---- vim72.orig/src/message.c 2008-07-09 19:24:55.000000000 +0100 -+++ vim72/src/message.c 2009-07-22 22:54:23.000000000 +0100 -@@ -107,7 +107,7 @@ - } - - #if defined(FEAT_EVAL) || defined(FEAT_X11) || defined(USE_XSMP) \ -- || defined(PROTO) -+ || defined(FEAT_GUI_GTK) || defined(PROTO) - /* - * Like msg() but keep it silent when 'verbosefile' is set. - */ -@@ -818,10 +818,9 @@ - /* - * ":messages" command. - */ --/*ARGSUSED*/ - void - ex_messages(eap) -- exarg_T *eap; -+ exarg_T *eap UNUSED; - { - struct msg_hist *p; - char_u *s; -@@ -976,7 +975,7 @@ - } - } - else if (msg_scrolled > Rows - 2 -- && (c == 'j' || c == K_DOWN || c == 'd')) -+ && (c == 'j' || c == K_DOWN || c == 'd' || c == 'f')) - c = K_IGNORE; - } - } while ((had_got_int && c == Ctrl_C) -@@ -2504,7 +2503,6 @@ - break; - - case 'u': /* Up half a page */ -- case K_PAGEUP: - scroll = -(Rows / 2); - break; - -@@ -2513,10 +2511,12 @@ - break; - - case 'b': /* one page back */ -+ case K_PAGEUP: - scroll = -(Rows - 1); - break; - - case ' ': /* one extra page */ -+ case 'f': - case K_PAGEDOWN: - case K_LEFTMOUSE: - scroll = Rows - 1; -@@ -2552,7 +2552,6 @@ - { - /* Jump to the choices of the dialog. */ - retval = TRUE; -- lines_left = Rows - 1; - } - else - #endif -@@ -2560,6 +2559,9 @@ - got_int = TRUE; - quit_more = TRUE; - } -+ /* When there is some more output (wrapping line) display that -+ * without another prompt. */ -+ lines_left = Rows - 1; - break; - - #ifdef FEAT_CLIPBOARD -@@ -3020,11 +3022,7 @@ - if (*p_vfile != NUL) - verbose_write(s, maxlen); - -- if (redir_fd != NULL --#ifdef FEAT_EVAL -- || redir_reg || redir_vname --#endif -- ) -+ if (redirecting()) - { - /* If the string doesn't start with CR or NL, go to msg_col */ - if (*s != '\n' && *s != '\r') -@@ -3071,6 +3069,16 @@ - } - } - -+ int -+redirecting() -+{ -+ return redir_fd != NULL -+#ifdef FEAT_EVAL -+ || redir_reg || redir_vname -+#endif -+ ; -+} -+ - /* - * Before giving verbose message. - * Must always be called paired with verbose_leave()! -@@ -3281,15 +3289,15 @@ - * A '&' in a button name becomes a shortcut, so each '&' should be before a - * different letter. - */ --/* ARGSUSED */ - int - do_dialog(type, title, message, buttons, dfltbutton, textfield) -- int type; -- char_u *title; -+ int type UNUSED; -+ char_u *title UNUSED; - char_u *message; - char_u *buttons; - int dfltbutton; -- char_u *textfield; /* IObuff for inputdialog(), NULL otherwise */ -+ char_u *textfield UNUSED; /* IObuff for inputdialog(), NULL -+ otherwise */ - { - int oldState; - int retval = 0; -@@ -3309,7 +3317,10 @@ - { - c = gui_mch_dialog(type, title, message, buttons, dfltbutton, - textfield); -- msg_end_prompt(); -+ /* avoid a hit-enter prompt without clearing the cmdline */ -+ need_wait_return = FALSE; -+ emsg_on_display = FALSE; -+ cmdline_row = msg_row; - - /* Flush output to avoid that further messages and redrawing is done - * in the wrong order. */ -@@ -4009,7 +4020,7 @@ - if (*p != '%') - { - char *q = strchr(p + 1, '%'); -- size_t n = (q == NULL) ? STRLEN(p) : (q - p); -+ size_t n = (q == NULL) ? STRLEN(p) : (size_t)(q - p); - - /* Copy up to the next '%' or NUL without any changes. */ - if (str_l < str_m) -@@ -4256,7 +4267,8 @@ - precision <= (size_t)0x7fffffffL ? precision - : (size_t)0x7fffffffL); - #endif -- str_arg_l = (q == NULL) ? precision : q - str_arg; -+ str_arg_l = (q == NULL) ? precision -+ : (size_t)(q - str_arg); - } - break; - -@@ -4356,7 +4368,8 @@ - get_a_arg(arg_idx); - #else - # if defined(FEAT_EVAL) -- tvs != NULL ? tv_nr(tvs, &arg_idx) : -+ tvs != NULL ? (unsigned) -+ tv_nr(tvs, &arg_idx) : - # endif - va_arg(ap, unsigned int); - #endif -@@ -4369,7 +4382,8 @@ - get_a_arg(arg_idx); - #else - # if defined(FEAT_EVAL) -- tvs != NULL ? tv_nr(tvs, &arg_idx) : -+ tvs != NULL ? (unsigned long) -+ tv_nr(tvs, &arg_idx) : - # endif - va_arg(ap, unsigned long int); - #endif -@@ -4556,7 +4570,13 @@ - remove_trailing_zeroes = TRUE; - } - -- if (fmt_spec == 'f' && abs_f > 1.0e307) -+ if (fmt_spec == 'f' && -+#ifdef VAX -+ abs_f > 1.0e38 -+#else -+ abs_f > 1.0e307 -+#endif -+ ) - { - /* Avoid a buffer overflow */ - strcpy(tmp, "inf"); -@@ -4585,61 +4605,62 @@ - if (remove_trailing_zeroes) - { - int i; -- char *p; -+ char *tp; - - /* Using %g or %G: remove superfluous zeroes. */ - if (fmt_spec == 'f') -- p = tmp + str_arg_l - 1; -+ tp = tmp + str_arg_l - 1; - else - { -- p = (char *)vim_strchr((char_u *)tmp, -+ tp = (char *)vim_strchr((char_u *)tmp, - fmt_spec == 'e' ? 'e' : 'E'); -- if (p != NULL) -+ if (tp != NULL) - { - /* Remove superfluous '+' and leading - * zeroes from the exponent. */ -- if (p[1] == '+') -+ if (tp[1] == '+') - { - /* Change "1.0e+07" to "1.0e07" */ -- STRMOVE(p + 1, p + 2); -+ STRMOVE(tp + 1, tp + 2); - --str_arg_l; - } -- i = (p[1] == '-') ? 2 : 1; -- while (p[i] == '0') -+ i = (tp[1] == '-') ? 2 : 1; -+ while (tp[i] == '0') - { - /* Change "1.0e07" to "1.0e7" */ -- STRMOVE(p + i, p + i + 1); -+ STRMOVE(tp + i, tp + i + 1); - --str_arg_l; - } -- --p; -+ --tp; - } - } - -- if (p != NULL && !precision_specified) -+ if (tp != NULL && !precision_specified) - /* Remove trailing zeroes, but keep the one - * just after a dot. */ -- while (p > tmp + 2 && *p == '0' && p[-1] != '.') -+ while (tp > tmp + 2 && *tp == '0' -+ && tp[-1] != '.') - { -- STRMOVE(p, p + 1); -- --p; -+ STRMOVE(tp, tp + 1); -+ --tp; - --str_arg_l; - } - } - else - { -- char *p; -+ char *tp; - - /* Be consistent: some printf("%e") use 1.0e+12 - * and some 1.0e+012. Remove one zero in the last - * case. */ -- p = (char *)vim_strchr((char_u *)tmp, -+ tp = (char *)vim_strchr((char_u *)tmp, - fmt_spec == 'e' ? 'e' : 'E'); -- if (p != NULL && (p[1] == '+' || p[1] == '-') -- && p[2] == '0' -- && vim_isdigit(p[3]) -- && vim_isdigit(p[4])) -+ if (tp != NULL && (tp[1] == '+' || tp[1] == '-') -+ && tp[2] == '0' -+ && vim_isdigit(tp[3]) -+ && vim_isdigit(tp[4])) - { -- STRMOVE(p + 2, p + 3); -+ STRMOVE(tp + 2, tp + 3); - --str_arg_l; - } - } -@@ -4685,7 +4706,8 @@ - size_t avail = str_m - str_l; - - vim_memset(str + str_l, zero_padding ? '0' : ' ', -- (size_t)pn > avail ? avail : pn); -+ (size_t)pn > avail ? avail -+ : (size_t)pn); - } - str_l += pn; - } -@@ -4712,7 +4734,8 @@ - size_t avail = str_m - str_l; - - mch_memmove(str + str_l, str_arg, -- (size_t)zn > avail ? avail : zn); -+ (size_t)zn > avail ? avail -+ : (size_t)zn); - } - str_l += zn; - } -@@ -4727,7 +4750,8 @@ - size_t avail = str_m-str_l; - - vim_memset(str + str_l, '0', -- (size_t)zn > avail ? avail : zn); -+ (size_t)zn > avail ? avail -+ : (size_t)zn); - } - str_l += zn; - } -@@ -4746,7 +4770,7 @@ - - mch_memmove(str + str_l, - str_arg + zero_padding_insertion_ind, -- (size_t)sn > avail ? avail : sn); -+ (size_t)sn > avail ? avail : (size_t)sn); - } - str_l += sn; - } -@@ -4766,7 +4790,8 @@ - size_t avail = str_m - str_l; - - vim_memset(str + str_l, ' ', -- (size_t)pn > avail ? avail : pn); -+ (size_t)pn > avail ? avail -+ : (size_t)pn); - } - str_l += pn; - } -diff -Naur vim72.orig/src/misc1.c vim72/src/misc1.c ---- vim72.orig/src/misc1.c 2008-07-12 20:20:53.000000000 +0100 -+++ vim72/src/misc1.c 2009-07-22 22:54:23.000000000 +0100 -@@ -2188,12 +2188,11 @@ - * - * return FAIL for failure, OK otherwise - */ --/*ARGSUSED*/ - int - del_bytes(count, fixpos_arg, use_delcombine) - long count; - int fixpos_arg; -- int use_delcombine; /* 'delcombine' option applies */ -+ int use_delcombine UNUSED; /* 'delcombine' option applies */ - { - char_u *oldp, *newp; - colnr_T oldlen; -@@ -2346,12 +2345,13 @@ - int undo; /* if TRUE, prepare for undo */ - { - long n; -+ linenr_T first = curwin->w_cursor.lnum; - - if (nlines <= 0) - return; - - /* save the deleted lines for undo */ -- if (undo && u_savedel(curwin->w_cursor.lnum, nlines) == FAIL) -+ if (undo && u_savedel(first, nlines) == FAIL) - return; - - for (n = 0; n < nlines; ) -@@ -2359,18 +2359,21 @@ - if (curbuf->b_ml.ml_flags & ML_EMPTY) /* nothing to delete */ - break; - -- ml_delete(curwin->w_cursor.lnum, TRUE); -+ ml_delete(first, TRUE); - ++n; - - /* If we delete the last line in the file, stop */ -- if (curwin->w_cursor.lnum > curbuf->b_ml.ml_line_count) -+ if (first > curbuf->b_ml.ml_line_count) - break; - } -- /* adjust marks, mark the buffer as changed and prepare for displaying */ -- deleted_lines_mark(curwin->w_cursor.lnum, n); - -+ /* Correct the cursor position before calling deleted_lines_mark(), it may -+ * trigger a callback to display the cursor. */ - curwin->w_cursor.col = 0; - check_cursor_lnum(); -+ -+ /* adjust marks, mark the buffer as changed and prepare for displaying */ -+ deleted_lines_mark(first, n); - } - - int -@@ -2622,6 +2625,8 @@ - - /* - * Like deleted_lines(), but adjust marks first. -+ * Make sure the cursor is on a valid line before calling, a GUI callback may -+ * be triggered to display the cursor. - */ - void - deleted_lines_mark(lnum, count) -@@ -2717,6 +2722,9 @@ - long xtra; - { - win_T *wp; -+#ifdef FEAT_WINDOWS -+ tabpage_T *tp; -+#endif - int i; - #ifdef FEAT_JUMPLIST - int cols; -@@ -2769,7 +2777,7 @@ - curbuf->b_changelistlen = JUMPLISTSIZE - 1; - mch_memmove(curbuf->b_changelist, curbuf->b_changelist + 1, - sizeof(pos_T) * (JUMPLISTSIZE - 1)); -- FOR_ALL_WINDOWS(wp) -+ FOR_ALL_TAB_WINDOWS(tp, wp) - { - /* Correct position in changelist for other windows on - * this buffer. */ -@@ -2777,7 +2785,7 @@ - --wp->w_changelistidx; - } - } -- FOR_ALL_WINDOWS(wp) -+ FOR_ALL_TAB_WINDOWS(tp, wp) - { - /* For other windows, if the position in the changelist is - * at the end it stays at the end. */ -@@ -2796,7 +2804,7 @@ - #endif - } - -- FOR_ALL_WINDOWS(wp) -+ FOR_ALL_TAB_WINDOWS(tp, wp) - { - if (wp->w_buffer == curbuf) - { -@@ -2955,6 +2963,8 @@ - int col; /* column for message; non-zero when in insert - mode and 'showmode' is on */ - { -+ static char *w_readonly = N_("W10: Warning: Changing a readonly file"); -+ - if (curbuf->b_did_warn == FALSE - && curbufIsChanged() == 0 - #ifdef FEAT_AUTOCMD -@@ -2977,8 +2987,10 @@ - if (msg_row == Rows - 1) - msg_col = col; - msg_source(hl_attr(HLF_W)); -- MSG_PUTS_ATTR(_("W10: Warning: Changing a readonly file"), -- hl_attr(HLF_W) | MSG_HIST); -+ MSG_PUTS_ATTR(_(w_readonly), hl_attr(HLF_W) | MSG_HIST); -+#ifdef FEAT_EVAL -+ set_vim_var_string(VV_WARNINGMSG, (char_u *)_(w_readonly), -1); -+#endif - msg_clr_eos(); - (void)msg_end(); - if (msg_silent == 0 && !silent_mode) -@@ -3245,9 +3257,9 @@ - - /* When using ":silent" assume that was entered. */ - if (mouse_used != NULL) -- MSG_PUTS(_("Type number or click with mouse ( cancels): ")); -+ MSG_PUTS(_("Type number and or click with mouse (empty cancels): ")); - else -- MSG_PUTS(_("Choice number ( cancels): ")); -+ MSG_PUTS(_("Type number and (empty cancels): ")); - - /* Set the state such that text can be selected/copied/pasted and we still - * get mouse events. */ -@@ -3264,6 +3276,7 @@ - cmdline_row = msg_row - 1; - need_wait_return = FALSE; - msg_didany = FALSE; -+ msg_didout = FALSE; - } - else - cmdline_row = save_cmdline_row; -@@ -4141,10 +4154,9 @@ - /* - * Function given to ExpandGeneric() to obtain an environment variable name. - */ --/*ARGSUSED*/ - char_u * - get_env_name(xp, idx) -- expand_T *xp; -+ expand_T *xp UNUSED; - int idx; - { - # if defined(AMIGA) || defined(__MRC__) || defined(__SC__) -@@ -4736,9 +4748,9 @@ - * If it is then restrict the search to below this line and try again. - */ - line = ml_get(pos->lnum); -- for (p = line; *p && (unsigned)(p - line) < pos->col; ++p) -+ for (p = line; *p && (colnr_T)(p - line) < pos->col; ++p) - p = skip_string(p); -- if ((unsigned)(p - line) <= pos->col) -+ if ((colnr_T)(p - line) <= pos->col) - break; - cur_maxcomment = curwin->w_cursor.lnum - pos->lnum - 1; - if (cur_maxcomment <= 0) -@@ -6269,7 +6281,7 @@ - * check for that. - */ - if ((State & INSERT) -- && curwin->w_cursor.col < STRLEN(linecopy) -+ && curwin->w_cursor.col < (colnr_T)STRLEN(linecopy) - && linecopy[curwin->w_cursor.col] == ')') - linecopy[curwin->w_cursor.col] = NUL; - -@@ -8522,11 +8534,25 @@ - for (setsuf = p_su; *setsuf; ) - { - setsuflen = copy_option_part(&setsuf, suf_buf, MAXSUFLEN, ".,"); -- if (fnamelen >= setsuflen -- && fnamencmp(suf_buf, fname + fnamelen - setsuflen, -- (size_t)setsuflen) == 0) -- break; -- setsuflen = 0; -+ if (setsuflen == 0) -+ { -+ char_u *tail = gettail(fname); -+ -+ /* empty entry: match name without a '.' */ -+ if (vim_strchr(tail, '.') == NULL) -+ { -+ setsuflen = 1; -+ break; -+ } -+ } -+ else -+ { -+ if (fnamelen >= setsuflen -+ && fnamencmp(suf_buf, fname + fnamelen - setsuflen, -+ (size_t)setsuflen) == 0) -+ break; -+ setsuflen = 0; -+ } - } - return (setsuflen != 0); - } -@@ -8728,7 +8754,7 @@ - /* The active codepage differs from 'encoding'. Attempt using the - * wide function. If it fails because it is not implemented fall back - * to the non-wide version (for Windows 98) */ -- wn = enc_to_ucs2(buf, NULL); -+ wn = enc_to_utf16(buf, NULL); - if (wn != NULL) - { - hFind = FindFirstFileW(wn, &wfb); -@@ -8756,7 +8782,7 @@ - #ifdef WIN3264 - # ifdef FEAT_MBYTE - if (wn != NULL) -- p = ucs2_to_enc(wfb.cFileName, NULL); /* p is allocated here */ -+ p = utf16_to_enc(wfb.cFileName, NULL); /* p is allocated here */ - else - # endif - p = (char_u *)fb.cFileName; -@@ -8830,7 +8856,7 @@ - if (wn != NULL) - { - vim_free(wn); -- wn = enc_to_ucs2(buf, NULL); -+ wn = enc_to_utf16(buf, NULL); - if (wn != NULL) - hFind = FindFirstFileW(wn, &wfb); - } -@@ -9188,7 +9214,7 @@ - else if (vim_strpbrk(p, (char_u *)"$~") != NULL) - { - vim_free(p); -- ga_clear(&ga); -+ ga_clear_strings(&ga); - i = mch_expand_wildcards(num_pat, pat, num_file, file, - flags); - recursive = FALSE; -diff -Naur vim72.orig/src/misc2.c vim72/src/misc2.c ---- vim72.orig/src/misc2.c 2008-07-23 20:12:56.000000000 +0100 -+++ vim72/src/misc2.c 2009-07-22 22:54:22.000000000 +0100 -@@ -496,7 +496,8 @@ - { - colnr_T len; - #ifdef FEAT_VIRTUALEDIT -- colnr_T oldcol = curwin->w_cursor.col + curwin->w_cursor.coladd; -+ colnr_T oldcol = curwin->w_cursor.col; -+ colnr_T oldcoladd = curwin->w_cursor.col + curwin->w_cursor.coladd; - #endif - - len = (colnr_T)STRLEN(ml_get_curline()); -@@ -535,7 +536,13 @@ - if (oldcol == MAXCOL) - curwin->w_cursor.coladd = 0; - else if (ve_flags == VE_ALL) -- curwin->w_cursor.coladd = oldcol - curwin->w_cursor.col; -+ { -+ if (oldcoladd > curwin->w_cursor.col) -+ curwin->w_cursor.coladd = oldcoladd - curwin->w_cursor.col; -+ else -+ /* avoid weird number when there is a miscalculation or overflow */ -+ curwin->w_cursor.coladd = 0; -+ } - #endif - } - -@@ -873,7 +880,7 @@ - /* 3. check for available memory: call mch_avail_mem() */ - if (mch_avail_mem(TRUE) < KEEP_ROOM && !releasing) - { -- vim_free((char *)p); /* System is low... no go! */ -+ free((char *)p); /* System is low... no go! */ - p = NULL; - } - else -@@ -1010,6 +1017,9 @@ - # if defined(FEAT_PROFILE) - do_cmdline_cmd((char_u *)"profdel *"); - # endif -+# if defined(FEAT_KEYMAP) -+ do_cmdline_cmd((char_u *)"set keymap="); -+#endif - - # ifdef FEAT_TITLE - free_titles(); -@@ -1034,6 +1044,9 @@ - free_regexp_stuff(); - free_tag_stuff(); - free_cd_dir(); -+# ifdef FEAT_SIGNS -+ free_signs(); -+# endif - # ifdef FEAT_EVAL - set_expr_line(NULL); - # endif -@@ -1062,11 +1075,12 @@ - - #ifdef FEAT_QUICKFIX - { -- win_T *win; -+ win_T *win; -+ tabpage_T *tab; - - qf_free_all(NULL); - /* Free all location lists */ -- FOR_ALL_WINDOWS(win) -+ FOR_ALL_TAB_WINDOWS(tab, win) - qf_free_all(win); - } - #endif -@@ -1257,7 +1271,6 @@ - return escaped_string; - } - --#if !defined(BACKSLASH_IN_FILENAME) || defined(FEAT_EVAL) || defined(PROTO) - /* - * Return TRUE when 'shell' has "csh" in the tail. - */ -@@ -1266,9 +1279,7 @@ - { - 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 -@@ -1391,7 +1402,6 @@ - - return escaped_string; - } --#endif - - /* - * Like vim_strsave(), but make all characters uppercase. -@@ -2565,7 +2575,7 @@ - int key; - int dlen = 0; - -- key = find_special_key(srcp, &modifiers, keycode); -+ key = find_special_key(srcp, &modifiers, keycode, FALSE); - if (key == 0) - return 0; - -@@ -2601,10 +2611,11 @@ - * returns 0 if there is no match. - */ - int --find_special_key(srcp, modp, keycode) -+find_special_key(srcp, modp, keycode, keep_x_key) - char_u **srcp; - int *modp; -- int keycode; /* prefer key code, e.g. K_DEL instead of DEL */ -+ int keycode; /* prefer key code, e.g. K_DEL instead of DEL */ -+ int keep_x_key; /* don't translate xHome to Home key */ - { - char_u *last_dash; - char_u *end_of_name; -@@ -2672,7 +2683,8 @@ - else - { - key = get_special_key_code(last_dash + 1); -- key = handle_x_keys(key); -+ if (!keep_x_key) -+ key = handle_x_keys(key); - } - - /* -@@ -2829,7 +2841,7 @@ - get_key_name(i) - int i; - { -- if (i >= KEY_NAMES_TABLE_LEN) -+ if (i >= (int)KEY_NAMES_TABLE_LEN) - return NULL; - return key_names_table[i].name; - } -@@ -3857,7 +3869,8 @@ - * use filename. - */ - #ifdef UNIX -- int ffv_dev; /* device number (-1 if not set) */ -+ int ffv_dev_valid; /* ffv_dev and ffv_ino were set */ -+ dev_t ffv_dev; /* device number */ - ino_t ffv_ino; /* inode number */ - #endif - /* The memory for this struct is allocated according to the length of -@@ -4047,13 +4060,12 @@ - * This function silently ignores a few errors, vim_findfile() will have - * limited functionality then. - */ --/*ARGSUSED*/ - void * - vim_findfile_init(path, filename, stopdirs, level, free_visited, find_what, - search_ctx_arg, tagfile, rel_fname) - char_u *path; - char_u *filename; -- char_u *stopdirs; -+ char_u *stopdirs UNUSED; - int level; - int free_visited; - int find_what; -@@ -4698,7 +4710,8 @@ - stackp->ffs_filearray_cur = i + 1; - ff_push(search_ctx, stackp); - -- simplify_filename(file_path); -+ if (!path_with_url(file_path)) -+ simplify_filename(file_path); - if (mch_dirname(ff_expand_buffer, MAXPATHL) - == OK) - { -@@ -5050,10 +5063,9 @@ - { - if ( - #ifdef UNIX -- !url -- ? (vp->ffv_dev == st.st_dev -- && vp->ffv_ino == st.st_ino) -- : -+ !url ? (vp->ffv_dev_valid && vp->ffv_dev == st.st_dev -+ && vp->ffv_ino == st.st_ino) -+ : - #endif - fnamecmp(vp->ffv_fname, ff_expand_buffer) == 0 - ) -@@ -5078,14 +5090,14 @@ - #ifdef UNIX - if (!url) - { -+ vp->ffv_dev_valid = TRUE; - vp->ffv_ino = st.st_ino; - vp->ffv_dev = st.st_dev; - vp->ffv_fname[0] = NUL; - } - else - { -- vp->ffv_ino = 0; -- vp->ffv_dev = -1; -+ vp->ffv_dev_valid = FALSE; - #endif - STRCPY(vp->ffv_fname, ff_expand_buffer); - #ifdef UNIX -diff -Naur vim72.orig/src/move.c vim72/src/move.c ---- vim72.orig/src/move.c 2008-07-12 17:26:47.000000000 +0100 -+++ vim72/src/move.c 2009-07-22 22:54:21.000000000 +0100 -@@ -280,18 +280,20 @@ - - if (curwin->w_botline <= curbuf->b_ml.ml_line_count) - { -- if (curwin->w_cursor.lnum < curwin->w_botline -- && ((long)curwin->w_cursor.lnum -+ if (curwin->w_cursor.lnum < curwin->w_botline) -+ { -+ if (((long)curwin->w_cursor.lnum - >= (long)curwin->w_botline - p_so - #ifdef FEAT_FOLDING - || hasAnyFolding(curwin) - #endif - )) -- { -+ { - lineoff_T loff; - -- /* Cursor is above botline, check if there are 'scrolloff' -- * window lines below the cursor. If not, need to scroll. */ -+ /* Cursor is (a few lines) above botline, check if there are -+ * 'scrolloff' window lines below the cursor. If not, need to -+ * scroll. */ - n = curwin->w_empty_rows; - loff.lnum = curwin->w_cursor.lnum; - #ifdef FEAT_FOLDING -@@ -317,6 +319,10 @@ - if (n >= p_so) - /* sufficient context, no need to scroll */ - check_botline = FALSE; -+ } -+ else -+ /* sufficient context, no need to scroll */ -+ check_botline = FALSE; - } - if (check_botline) - { -@@ -509,6 +515,9 @@ - /* Approximate the value of w_botline */ - wp->w_botline += lnum - wp->w_topline; - wp->w_topline = lnum; -+#ifdef FEAT_AUTOCMD -+ wp->w_topline_was_set = TRUE; -+#endif - #ifdef FEAT_DIFF - wp->w_topfill = 0; - #endif -@@ -1229,11 +1238,10 @@ - /* - * Scroll the current window down by "line_count" logical lines. "CTRL-Y" - */ --/*ARGSUSED*/ - void - scrolldown(line_count, byfold) - long line_count; -- int byfold; /* TRUE: count a closed fold as one line */ -+ int byfold UNUSED; /* TRUE: count a closed fold as one line */ - { - long done = 0; /* total # of physical lines done */ - int wrow; -@@ -1340,11 +1348,10 @@ - /* - * Scroll the current window up by "line_count" logical lines. "CTRL-E" - */ --/*ARGSUSED*/ - void - scrollup(line_count, byfold) - long line_count; -- int byfold; /* TRUE: count a closed fold as one line */ -+ int byfold UNUSED; /* TRUE: count a closed fold as one line */ - { - #if defined(FEAT_FOLDING) || defined(FEAT_DIFF) - linenr_T lnum; -diff -Naur vim72.orig/src/nbdebug.c vim72/src/nbdebug.c ---- vim72.orig/src/nbdebug.c 2008-06-22 16:38:58.000000000 +0100 -+++ vim72/src/nbdebug.c 2009-07-22 22:54:20.000000000 +0100 -@@ -33,7 +33,6 @@ - u_int nb_dlevel = 0; /* nb_debug verbosity level */ - - void nbdb(char *, ...); --void nbtrace(char *, ...); - - static int lookup(char *); - #ifdef USE_NB_ERRORHANDLER -@@ -100,25 +99,6 @@ - } /* end nbdebug_log_init */ - - -- -- --void --nbtrace( -- char *fmt, -- ...) --{ -- va_list ap; -- -- if (nb_debug!= NULL && (nb_dlevel & (NB_TRACE | NB_TRACE_VERBOSE))) { -- va_start(ap, fmt); -- vfprintf(nb_debug, fmt, ap); -- va_end(ap); -- fflush(nb_debug); -- } -- --} /* end nbtrace */ -- -- - void - nbdbg( - char *fmt, -@@ -136,23 +116,6 @@ - } /* end nbdbg */ - - --void --nbprt( -- char *fmt, -- ...) --{ -- va_list ap; -- -- if (nb_debug != NULL && nb_dlevel & NB_PRINT) { -- va_start(ap, fmt); -- vfprintf(nb_debug, fmt, ap); -- va_end(ap); -- fflush(nb_debug); -- } -- --} /* end nbprt */ -- -- - static int - lookup( - char *file) -diff -Naur vim72.orig/src/nbdebug.h vim72/src/nbdebug.h ---- vim72.orig/src/nbdebug.h 2008-06-22 15:31:50.000000000 +0100 -+++ vim72/src/nbdebug.h 2009-07-22 22:54:20.000000000 +0100 -@@ -43,8 +43,6 @@ - - - void nbdbg(char *, ...); --void nbprt(char *, ...); --void nbtrace(char *, ...); - - void nbdebug_wait __ARGS((u_int wait_flags, char *wait_var, u_int wait_secs)); - void nbdebug_log_init __ARGS((char *log_var, char *level_var)); -@@ -70,19 +68,5 @@ - { - } - --void --nbprt( -- char *fmt, -- ...) --{ --} -- --void --nbtrace( -- char *fmt, -- ...) --{ --} -- - #endif /* NBDEBUG */ - #endif /* NBDEBUG_H */ -diff -Naur vim72.orig/src/netbeans.c vim72/src/netbeans.c ---- vim72.orig/src/netbeans.c 2008-07-13 17:19:54.000000000 +0100 -+++ vim72/src/netbeans.c 2009-07-22 22:54:23.000000000 +0100 -@@ -32,6 +32,7 @@ - /* WinSock API is separated from C API, thus we can't use read(), write(), - * errno... */ - # define sock_errno WSAGetLastError() -+# undef ECONNREFUSED - # define ECONNREFUSED WSAECONNREFUSED - # ifdef EINTR - # undef EINTR -@@ -700,7 +701,6 @@ - /* - * Read and process a command from netbeans. - */ --/*ARGSUSED*/ - #if defined(FEAT_GUI_W32) || defined(PROTO) - /* Use this one when generating prototypes, the others are static. */ - void -@@ -708,12 +708,15 @@ - #else - # ifdef FEAT_GUI_MOTIF - static void --messageFromNetbeans(XtPointer clientData, int *unused1, XtInputId *unused2) -+messageFromNetbeans(XtPointer clientData UNUSED, -+ int *unused1 UNUSED, -+ XtInputId *unused2 UNUSED) - # endif - # ifdef FEAT_GUI_GTK - static void --messageFromNetbeans(gpointer clientData, gint unused1, -- GdkInputCondition unused2) -+messageFromNetbeans(gpointer clientData UNUSED, -+ gint unused1 UNUSED, -+ GdkInputCondition unused2 UNUSED) - # endif - #endif - { -@@ -769,11 +772,14 @@ - return; /* don't try to parse it */ - } - --#ifdef FEAT_GUI_GTK -+#if defined(FEAT_GUI_GTK) || defined(FEAT_GUI_W32) -+ /* Let the main loop handle messages. */ -+# ifdef FEAT_GUI_GTK - if (gtk_main_level() > 0) - gtk_main_quit(); -+# endif - #else -- /* Parse the messages, but avoid recursion. */ -+ /* Parse the messages now, but avoid recursion. */ - if (level == 1) - netbeans_parse_messages(); - -@@ -1043,7 +1049,7 @@ - nbdebug(("EVT: %s", buf)); - /* nb_send(buf, "netbeans_end"); avoid "write failed" messages */ - if (sd >= 0) -- sock_write(sd, buf, (int)STRLEN(buf)); /* ignore errors */ -+ ignored = sock_write(sd, buf, (int)STRLEN(buf)); - } - } - -@@ -1582,7 +1588,9 @@ - buf_delsign(buf->bufp, id); - } - else -+ { - nbdebug((" No sign on line %d\n", i)); -+ } - } - - nbdebug((" Deleting lines %d through %d\n", del_from_lnum, del_to_lnum)); -@@ -1795,7 +1803,7 @@ - buf->displayname = NULL; - - netbeansReadFile = 0; /* don't try to open disk file */ -- do_ecmd(0, NULL, 0, 0, ECMD_ONE, ECMD_HIDE + ECMD_OLDBUF); -+ do_ecmd(0, NULL, 0, 0, ECMD_ONE, ECMD_HIDE + ECMD_OLDBUF, curwin); - netbeansReadFile = 1; - buf->bufp = curbuf; - maketitle(); -@@ -1921,7 +1929,7 @@ - vim_free(path); - if (bufp == NULL) - { -- nbdebug((" File %s not found in setBufferNumber\n", args)); -+ nbdebug((" File %s not found in setBufferNumber\n", args)); - EMSG2("E642: File %s not found in setBufferNumber", args); - return FAIL; - } -@@ -1960,7 +1968,7 @@ - - netbeansReadFile = 0; /* don't try to open disk file */ - do_ecmd(0, (char_u *)buf->displayname, 0, 0, ECMD_ONE, -- ECMD_HIDE + ECMD_OLDBUF); -+ ECMD_HIDE + ECMD_OLDBUF, curwin); - netbeansReadFile = 1; - buf->bufp = curbuf; - maketitle(); -@@ -1979,7 +1987,7 @@ - vim_free(buf->displayname); - buf->displayname = nb_unquote(args, NULL); - do_ecmd(0, (char_u *)buf->displayname, NULL, NULL, ECMD_ONE, -- ECMD_HIDE + ECMD_OLDBUF); -+ ECMD_HIDE + ECMD_OLDBUF, curwin); - buf->bufp = curbuf; - buf->initDone = TRUE; - doupdate = 1; -@@ -2141,7 +2149,9 @@ - #endif - } - else -+ { - nbdebug((" BAD POSITION in setDot: %s\n", s)); -+ } - - /* gui_update_cursor(TRUE, FALSE); */ - /* update_curbuf(NOT_VALID); */ -@@ -2277,9 +2287,6 @@ - int serNum; - int localTypeNum; - int typeNum; --# ifdef NBDEBUG -- int len; --# endif - pos_T *pos; - - if (buf == NULL || buf->bufp == NULL) -@@ -2303,13 +2310,10 @@ - pos = get_off_or_lnum(buf->bufp, &args); - - cp = (char *)args; --# ifdef NBDEBUG -- len = --# endif -- strtol(cp, &cp, 10); -+ ignored = (int)strtol(cp, &cp, 10); - args = (char_u *)cp; - # ifdef NBDEBUG -- if (len != -1) -+ if (ignored != -1) - { - nbdebug((" partial line annotation -- Not Yet Implemented!\n")); - } -@@ -2321,7 +2325,7 @@ - } - if (pos) - { -- coloncmd(":sign place %d line=%d name=%d buffer=%d", -+ coloncmd(":sign place %d line=%ld name=%d buffer=%d", - serNum, pos->lnum, typeNum, buf->bufp->b_fnum); - if (typeNum == curPCtype) - coloncmd(":sign jump %d buffer=%d", serNum, -@@ -2425,7 +2429,7 @@ - GUARDED) == 0) - { - coloncmd( -- ":sign place %d line=%d name=%d buffer=%d", -+ ":sign place %d line=%ld name=%d buffer=%d", - guardId++, lnum, GUARDED, - buf->bufp->b_fnum); - } -@@ -2582,7 +2586,7 @@ - va_list ap; - - va_start(ap, cmd); -- vsprintf(buf, cmd, ap); -+ vim_vsnprintf(buf, sizeof(buf), cmd, ap, NULL); - va_end(ap); - - nbdebug((" COLONCMD %s\n", buf)); -@@ -2747,11 +2751,10 @@ - * cursor and sends it to the debugger for evaluation. The debugger should - * respond with a showBalloon command when there is a useful result. - */ --/*ARGSUSED*/ - void - netbeans_beval_cb( - BalloonEval *beval, -- int state) -+ int state UNUSED) - { - win_T *wp; - char_u *text; -@@ -2924,44 +2927,26 @@ - } - - /* -- * Tell netbeans a file was closed. -+ * Tell netbeans that a file was deleted or wiped out. - */ - void --netbeans_file_closed(buf_T *bufp) -+netbeans_file_killed(buf_T *bufp) - { - int bufno = nb_getbufno(bufp); - nbbuf_T *nbbuf = nb_get_buf(bufno); - char buffer[2*MAXPATHL]; - -- if (!haveConnection || bufno < 0) -+ if (!haveConnection || bufno == -1) - return; - -- if (!netbeansCloseFile) -- { -- nbdebug(("Ignoring file_closed for %s. File was closed from IDE\n", -- bufp->b_ffname)); -- return; -- } -- -- nbdebug(("netbeans_file_closed:\n")); -- nbdebug((" Closing bufno: %d", bufno)); -- if (curbuf != NULL && curbuf != bufp) -- { -- nbdebug((" Curbuf bufno: %d\n", nb_getbufno(curbuf))); -- } -- else if (curbuf == bufp) -- { -- nbdebug((" curbuf == bufp\n")); -- } -- -- if (bufno <= 0) -- return; -+ nbdebug(("netbeans_file_killed:\n")); -+ nbdebug((" Killing bufno: %d", bufno)); - - sprintf(buffer, "%d:killed=%d\n", bufno, r_cmdno); - - nbdebug(("EVT: %s", buffer)); - -- nb_send(buffer, "netbeans_file_closed"); -+ nb_send(buffer, "netbeans_file_killed"); - - if (nbbuf != NULL) - nbbuf->bufp = NULL; -@@ -3082,9 +3067,8 @@ - /* - * Send netbeans an unmodufied command. - */ --/*ARGSUSED*/ - void --netbeans_unmodified(buf_T *bufp) -+netbeans_unmodified(buf_T *bufp UNUSED) - { - #if 0 - char_u buf[128]; -@@ -3391,13 +3375,12 @@ - * buf->signmapused[] maps buffer-local annotation IDs to an index in - * globalsignmap[]. - */ --/*ARGSUSED*/ - static void - addsigntype( - nbbuf_T *buf, - int typeNum, - char_u *typeName, -- char_u *tooltip, -+ char_u *tooltip UNUSED, - char_u *glyphFile, - int use_fg, - int fg, -diff -Naur vim72.orig/src/normal.c vim72/src/normal.c ---- vim72.orig/src/normal.c 2008-07-31 21:03:08.000000000 +0100 -+++ vim72/src/normal.c 2009-07-22 22:54:22.000000000 +0100 -@@ -183,6 +183,8 @@ - static void nv_cursorhold __ARGS((cmdarg_T *cap)); - #endif - -+static char *e_noident = N_("E349: No identifier under cursor"); -+ - /* - * Function to be called for a Normal or Visual mode command. - * The argument is a cmdarg_T. -@@ -491,14 +493,14 @@ - int i; - - /* Fill the index table with a one to one relation. */ -- for (i = 0; i < NV_CMDS_SIZE; ++i) -+ for (i = 0; i < (int)NV_CMDS_SIZE; ++i) - nv_cmd_idx[i] = i; - - /* Sort the commands by the command character. */ - qsort((void *)&nv_cmd_idx, (size_t)NV_CMDS_SIZE, sizeof(short), nv_compare); - - /* Find the first entry that can't be indexed by the command character. */ -- for (i = 0; i < NV_CMDS_SIZE; ++i) -+ for (i = 0; i < (int)NV_CMDS_SIZE; ++i) - if (i != nv_cmds[nv_cmd_idx[i]].cmd_char) - break; - nv_max_linear = i - 1; -@@ -559,11 +561,10 @@ - /* - * Execute a command in Normal mode. - */ --/*ARGSUSED*/ - void - normal_cmd(oap, toplevel) - oparg_T *oap; -- int toplevel; /* TRUE when called from main() */ -+ int toplevel UNUSED; /* TRUE when called from main() */ - { - cmdarg_T ca; /* command arguments */ - int c; -@@ -578,6 +579,9 @@ - static int old_mapped_len = 0; - #endif - int idx; -+#ifdef FEAT_EVAL -+ int set_prevcount = FALSE; -+#endif - - vim_memset(&ca, 0, sizeof(ca)); /* also resets ca.retval */ - ca.oap = oap; -@@ -613,7 +617,12 @@ - /* When not finishing an operator and no register name typed, reset the - * count. */ - if (!finish_op && !oap->regname) -+ { - ca.opcount = 0; -+#ifdef FEAT_EVAL -+ set_prevcount = TRUE; -+#endif -+ } - - #ifdef FEAT_AUTOCMD - /* Restore counts from before receiving K_CURSORHOLD. This means after -@@ -641,10 +650,7 @@ - * Get the command character from the user. - */ - c = safe_vgetc(); -- --#ifdef FEAT_LANGMAP - LANGMAP_ADJUST(c, TRUE); --#endif - - #ifdef FEAT_VISUAL - /* -@@ -717,7 +723,15 @@ - * command, so that v:count can be used in an expression mapping - * right after the count. */ - if (toplevel && stuff_empty()) -- set_vcount(ca.count0, ca.count0 == 0 ? 1 : ca.count0); -+ { -+ long count = ca.count0; -+ -+ /* multiply with ca.opcount the same way as below */ -+ if (ca.opcount != 0) -+ count = ca.opcount * (count == 0 ? 1 : count); -+ set_vcount(count, count == 0 ? 1 : count, set_prevcount); -+ set_prevcount = FALSE; /* only set v:prevcount once */ -+ } - #endif - if (ctrl_w) - { -@@ -726,9 +740,7 @@ - } - ++no_zero_mapping; /* don't map zero here */ - c = plain_vgetc(); --#ifdef FEAT_LANGMAP - LANGMAP_ADJUST(c, TRUE); --#endif - --no_zero_mapping; - if (ctrl_w) - { -@@ -751,9 +763,7 @@ - ++no_mapping; - ++allow_keys; /* no mapping for nchar, but keys */ - c = plain_vgetc(); /* get next character */ --#ifdef FEAT_LANGMAP - LANGMAP_ADJUST(c, TRUE); --#endif - --no_mapping; - --allow_keys; - #ifdef FEAT_CMDL_INFO -@@ -804,7 +814,7 @@ - * Only set v:count when called from main() and not a stuffed command. - */ - if (toplevel && stuff_empty()) -- set_vcount(ca.count0, ca.count1); -+ set_vcount(ca.count0, ca.count1, set_prevcount); - #endif - - /* -@@ -941,9 +951,7 @@ - * "gr", "g'" and "g`". - */ - ca.nchar = plain_vgetc(); --#ifdef FEAT_LANGMAP - LANGMAP_ADJUST(ca.nchar, TRUE); --#endif - #ifdef FEAT_CMDL_INFO - need_flushbuf |= add_to_showcmd(ca.nchar); - #endif -@@ -1044,10 +1052,8 @@ - } - #endif - --#ifdef FEAT_LANGMAP - /* adjust chars > 127, except after "tTfFr" commands */ - LANGMAP_ADJUST(*cp, !lang); --#endif - #ifdef FEAT_RIGHTLEFT - /* adjust Hebrew mapped char */ - if (p_hkmap && lang && KeyTyped) -@@ -1132,7 +1138,8 @@ - out_flush(); - #endif - #ifdef FEAT_AUTOCMD -- did_cursorhold = FALSE; -+ if (ca.cmdchar != K_IGNORE) -+ did_cursorhold = FALSE; - #endif - - State = NORMAL; -@@ -2180,10 +2187,9 @@ - /* - * Handle the "g@" operator: call 'operatorfunc'. - */ --/*ARGSUSED*/ - static void - op_function(oap) -- oparg_T *oap; -+ oparg_T *oap UNUSED; - { - #ifdef FEAT_EVAL - char_u *(argv[1]); -@@ -3509,7 +3515,7 @@ - if (find_type & FIND_STRING) - EMSG(_("E348: No string under cursor")); - else -- EMSG(_("E349: No identifier under cursor")); -+ EMSG(_(e_noident)); - return 0; - } - ptr += col; -@@ -3701,13 +3707,13 @@ - #ifdef FEAT_VISUAL - if (VIsual_active && !char_avail()) - { -- int i = lt(VIsual, curwin->w_cursor); -+ int cursor_bot = lt(VIsual, curwin->w_cursor); - long lines; - colnr_T leftcol, rightcol; - linenr_T top, bot; - - /* Show the size of the Visual area. */ -- if (i) -+ if (cursor_bot) - { - top = VIsual.lnum; - bot = curwin->w_cursor.lnum; -@@ -3726,14 +3732,23 @@ - - if (VIsual_mode == Ctrl_V) - { -+#ifdef FEAT_LINEBREAK -+ char_u *saved_sbr = p_sbr; -+ -+ /* Make 'sbr' empty for a moment to get the correct size. */ -+ p_sbr = empty_option; -+#endif - getvcols(curwin, &curwin->w_cursor, &VIsual, &leftcol, &rightcol); -+#ifdef FEAT_LINEBREAK -+ p_sbr = saved_sbr; -+#endif - sprintf((char *)showcmd_buf, "%ldx%ld", lines, - (long)(rightcol - leftcol + 1)); - } - else if (VIsual_mode == 'V' || VIsual.lnum != curwin->w_cursor.lnum) - sprintf((char *)showcmd_buf, "%ld", lines); - else -- sprintf((char *)showcmd_buf, "%ld", (long)(i -+ sprintf((char *)showcmd_buf, "%ld", (long)(cursor_bot - ? curwin->w_cursor.col - VIsual.col - : VIsual.col - curwin->w_cursor.col) + (*p_sel != 'e')); - showcmd_buf[SHOWCMD_COLS] = NUL; /* truncate */ -@@ -4083,10 +4098,9 @@ - * Command character that doesn't do anything, but unlike nv_ignore() does - * start edit(). Used for "startinsert" executed while starting up. - */ --/*ARGSUSED */ - static void - nv_nop(cap) -- cmdarg_T *cap; -+ cmdarg_T *cap UNUSED; - { - } - -@@ -4611,9 +4625,7 @@ - ++no_mapping; - ++allow_keys; /* no mapping for nchar, but allow key codes */ - nchar = plain_vgetc(); --#ifdef FEAT_LANGMAP - LANGMAP_ADJUST(nchar, TRUE); --#endif - --no_mapping; - --allow_keys; - #ifdef FEAT_CMDL_INFO -@@ -4969,9 +4981,7 @@ - ++no_mapping; - ++allow_keys; /* no mapping for nchar, but allow key codes */ - nchar = plain_vgetc(); --#ifdef FEAT_LANGMAP - LANGMAP_ADJUST(nchar, TRUE); --#endif - --no_mapping; - --allow_keys; - #ifdef FEAT_CMDL_INFO -@@ -5228,7 +5238,7 @@ - if (cap->oap->op_type != OP_NOP - && (cap->oap->start.lnum > curbuf->b_ml.ml_line_count - || cap->oap->start.col > -- STRLEN(ml_get(cap->oap->start.lnum)))) -+ (colnr_T)STRLEN(ml_get(cap->oap->start.lnum)))) - clearopbeep(cap->oap); - } - } -@@ -5469,6 +5479,20 @@ - 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 == '-' && n > 0) -+ { -+ ++ptr; -+ --n; -+ } -+ if (n == 0) -+ { -+ EMSG(_(e_noident)); /* found dashes only */ -+ vim_free(buf); -+ return; -+ } -+ - /* When a count is given, turn it into a range. Is this - * really what we want? */ - isman = (STRCMP(kp, "man") == 0); -@@ -5511,37 +5535,59 @@ - /* - * 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) -+ if (cmdchar == 'K' && !kp_help) -+ { -+ /* Escape the argument properly for a shell command */ -+ ptr = vim_strnsave(ptr, n); -+ p = vim_strsave_shellescape(ptr, TRUE); -+ vim_free(ptr); -+ if (p == NULL) - { -- int i; -- int len = (*mb_ptr2len)(ptr) - 1; -- -- for (i = 0; i < len && n >= 1; ++i, --n) -- *p++ = *ptr++; -+ 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++ = *ptr++; -+ } -+ *p = NUL; - } -- *p = NUL; - - /* - * Execute the command. -@@ -5767,7 +5813,10 @@ - for (n = cap->count1; n > 0; --n) - { - if ((!PAST_LINE && oneright() == FAIL) -- || (PAST_LINE && *ml_get_cursor() == NUL)) -+#ifdef FEAT_VISUAL -+ || (PAST_LINE && *ml_get_cursor() == NUL) -+#endif -+ ) - { - /* - * wraps to next line if 'whichwrap' has 's'. -@@ -6011,7 +6060,7 @@ - autowrite(curbuf, FALSE); - setpcmark(); - (void)do_ecmd(0, ptr, NULL, NULL, ECMD_LAST, -- P_HID(curbuf) ? ECMD_HIDE : 0); -+ P_HID(curbuf) ? ECMD_HIDE : 0, curwin); - if (cap->nchar == 'F' && lnum >= 0) - { - curwin->w_cursor.lnum = lnum; -@@ -6728,6 +6777,8 @@ - /* Visual mode "r" */ - if (VIsual_active) - { -+ if (got_int) -+ reset_VIsual(); - nv_operator(cap); - return; - } -@@ -7784,7 +7835,7 @@ - else - i = curwin->w_leftcol; - /* Go to the middle of the screen line. When 'number' is on and lines -- * are wrapping the middle can be more to the left.*/ -+ * are wrapping the middle can be more to the left. */ - if (cap->nchar == 'm') - i += (W_WIDTH(curwin) - curwin_col_off() - + ((curwin->w_p_wrap && i > 0) -@@ -9192,10 +9243,9 @@ - } - - #ifdef FEAT_SNIFF --/*ARGSUSED*/ - static void - nv_sniff(cap) -- cmdarg_T *cap; -+ cmdarg_T *cap UNUSED; - { - ProcessSniffRequests(); - } -@@ -9211,10 +9261,9 @@ - #endif - - #ifdef FEAT_DND --/*ARGSUSED*/ - static void - nv_drop(cap) -- cmdarg_T *cap; -+ cmdarg_T *cap UNUSED; - { - do_put('~', BACKWARD, 1L, PUT_CURSEND); - } -@@ -9226,7 +9275,6 @@ - * When waiting for a character for 'updatetime' K_CURSORHOLD is put in the - * input buffer. "did_cursorhold" is set to avoid retriggering. - */ --/*ARGSUSED*/ - static void - nv_cursorhold(cap) - cmdarg_T *cap; -diff -Naur vim72.orig/src/ops.c vim72/src/ops.c ---- vim72.orig/src/ops.c 2008-06-21 21:08:59.000000000 +0100 -+++ vim72/src/ops.c 2009-07-22 22:54:23.000000000 +0100 -@@ -72,11 +72,11 @@ - */ - struct block_def - { -- int startspaces; /* 'extra' cols of first char */ -- int endspaces; /* 'extra' cols of first char */ -+ int startspaces; /* 'extra' cols before first char */ -+ int endspaces; /* 'extra' cols after last char */ - int textlen; /* chars in block */ -- char_u *textstart; /* pointer to 1st char in block */ -- colnr_T textcol; /* cols of chars (at least part.) in block */ -+ char_u *textstart; /* pointer to 1st char (partially) in block */ -+ colnr_T textcol; /* index of chars (partially) in block */ - colnr_T start_vcol; /* start col of 1st char wholly inside block */ - colnr_T end_vcol; /* start col of 1st char wholly after block */ - #ifdef FEAT_VISUALEXTRA -@@ -382,18 +382,16 @@ - { - int left = (oap->op_type == OP_LSHIFT); - int oldstate = State; -- int total, split; -- char_u *newp, *oldp, *midp, *ptr; -+ int total; -+ char_u *newp, *oldp; - int oldcol = curwin->w_cursor.col; - int p_sw = (int)curbuf->b_p_sw; - int p_ts = (int)curbuf->b_p_ts; - struct block_def bd; -- int internal = 0; - int incr; -- colnr_T vcol, col = 0, ws_vcol; -+ colnr_T ws_vcol; - int i = 0, j = 0; - int len; -- - #ifdef FEAT_RIGHTLEFT - int old_p_ri = p_ri; - -@@ -456,67 +454,90 @@ - } - else /* left */ - { -- vcol = oap->start_vcol; -- /* walk vcol past ws to be removed */ -- for (midp = oldp + bd.textcol; -- vcol < (oap->start_vcol + total) && vim_iswhite(*midp); ) -- { -- incr = lbr_chartabsize_adv(&midp, (colnr_T)vcol); -- vcol += incr; -- } -- /* internal is the block-internal ws replacing a split TAB */ -- if (vcol > (oap->start_vcol + total)) -- { -- /* we have to split the TAB *(midp-1) */ -- internal = vcol - (oap->start_vcol + total); -- } -- /* if 'expandtab' is not set, use TABs */ -+ colnr_T destination_col; /* column to which text in block will -+ be shifted */ -+ char_u *verbatim_copy_end; /* end of the part of the line which is -+ copied verbatim */ -+ colnr_T verbatim_copy_width;/* the (displayed) width of this part -+ of line */ -+ unsigned fill; /* nr of spaces that replace a TAB */ -+ unsigned new_line_len; /* the length of the line after the -+ block shift */ -+ size_t block_space_width; -+ size_t shift_amount; -+ char_u *non_white = bd.textstart; -+ colnr_T non_white_col; - -- split = bd.startspaces + internal; -- if (split > 0) -- { -- if (!curbuf->b_p_et) -- { -- for (ptr = oldp, col = 0; ptr < oldp+bd.textcol; ) -- col += lbr_chartabsize_adv(&ptr, (colnr_T)col); -+ /* -+ * Firstly, let's find the first non-whitespace character that is -+ * displayed after the block's start column and the character's column -+ * number. Also, let's calculate the width of all the whitespace -+ * characters that are displayed in the block and precede the searched -+ * non-whitespace character. -+ */ - -- /* col+1 now equals the start col of the first char of the -- * block (may be < oap.start_vcol if we're splitting a TAB) */ -- i = ((col % p_ts) + split) / p_ts; /* number of tabs */ -- } -- if (i) -- j = ((col % p_ts) + split) % p_ts; /* number of spp */ -- else -- j = split; -- } -+ /* If "bd.startspaces" is set, "bd.textstart" points to the character, -+ * the part of which is displayed at the block's beginning. Let's start -+ * searching from the next character. */ -+ if (bd.startspaces) -+ mb_ptr_adv(non_white); - -- newp = alloc_check(bd.textcol + i + j + (unsigned)STRLEN(midp) + 1); -- if (newp == NULL) -- return; -- vim_memset(newp, NUL, (size_t)(bd.textcol + i + j + STRLEN(midp) + 1)); -+ /* The character's column is in "bd.start_vcol". */ -+ non_white_col = bd.start_vcol; - -- /* copy first part we want to keep */ -- mch_memmove(newp, oldp, (size_t)bd.textcol); -- /* Now copy any TABS and spp to ensure correct alignment! */ -- while (vim_iswhite(*midp)) -+ while (vim_iswhite(*non_white)) - { -- if (*midp == TAB) -- i++; -- else /*space */ -- j++; -- midp++; -+ incr = lbr_chartabsize_adv(&non_white, non_white_col); -+ non_white_col += incr; - } -- /* We might have an extra TAB worth of spp now! */ -- if (j / p_ts && !curbuf->b_p_et) -+ -+ block_space_width = non_white_col - oap->start_vcol; -+ /* We will shift by "total" or "block_space_width", whichever is less. -+ */ -+ shift_amount = (block_space_width < (size_t)total -+ ? block_space_width : (size_t)total); -+ -+ /* The column to which we will shift the text. */ -+ destination_col = (colnr_T)(non_white_col - shift_amount); -+ -+ /* Now let's find out how much of the beginning of the line we can -+ * reuse without modification. */ -+ verbatim_copy_end = bd.textstart; -+ verbatim_copy_width = bd.start_vcol; -+ -+ /* If "bd.startspaces" is set, "bd.textstart" points to the character -+ * preceding the block. We have to subtract its width to obtain its -+ * column number. */ -+ if (bd.startspaces) -+ verbatim_copy_width -= bd.start_char_vcols; -+ while (verbatim_copy_width < destination_col) - { -- i++; -- j -= p_ts; -+ incr = lbr_chartabsize(verbatim_copy_end, verbatim_copy_width); -+ if (verbatim_copy_width + incr > destination_col) -+ break; -+ verbatim_copy_width += incr; -+ mb_ptr_adv(verbatim_copy_end); - } -- copy_chars(newp + bd.textcol, (size_t)i, TAB); -- copy_spaces(newp + bd.textcol + i, (size_t)j); - -- /* the end */ -- STRMOVE(newp + STRLEN(newp), midp); -+ /* If "destination_col" is different from the width of the initial -+ * part of the line that will be copied, it means we encountered a tab -+ * character, which we will have to partly replace with spaces. */ -+ fill = destination_col - verbatim_copy_width; -+ -+ /* The replacement line will consist of: -+ * - the beginning of the original line up to "verbatim_copy_end", -+ * - "fill" number of spaces, -+ * - the rest of the line, pointed to by non_white. */ -+ new_line_len = (unsigned)(verbatim_copy_end - oldp) -+ + fill -+ + (unsigned)STRLEN(non_white) + 1; -+ -+ newp = alloc_check(new_line_len); -+ if (newp == NULL) -+ return; -+ mch_memmove(newp, oldp, (size_t)(verbatim_copy_end - oldp)); -+ copy_spaces(newp + (verbatim_copy_end - oldp), (size_t)fill); -+ STRMOVE(newp + (verbatim_copy_end - oldp) + fill, non_white); - } - /* replace the line */ - ml_replace(curwin->w_cursor.lnum, newp, FALSE); -@@ -1122,6 +1143,8 @@ - return OK; - } - -+static int execreg_lastc = NUL; -+ - /* - * execute a yank register: copy it into the stuff buffer - * -@@ -1134,7 +1157,6 @@ - int addcr; /* always add '\n' to end of line */ - int silent; /* set "silent" flag in typeahead buffer */ - { -- static int lastc = NUL; - long i; - char_u *p; - int retval = OK; -@@ -1142,12 +1164,12 @@ - - if (regname == '@') /* repeat previous one */ - { -- if (lastc == NUL) -+ if (execreg_lastc == NUL) - { - EMSG(_("E748: No previously used register")); - return FAIL; - } -- regname = lastc; -+ regname = execreg_lastc; - } - /* check for valid regname */ - if (regname == '%' || regname == '#' || !valid_yank_reg(regname, FALSE)) -@@ -1155,7 +1177,7 @@ - emsg_invreg(regname); - return FAIL; - } -- lastc = regname; -+ execreg_lastc = regname; - - #ifdef FEAT_CLIPBOARD - regname = may_get_selection(regname); -@@ -2209,12 +2231,15 @@ - { - for (; pos.lnum <= oap->end.lnum; ++pos.lnum) - { -+ int one_change; -+ - block_prep(oap, &bd, pos.lnum, FALSE); - pos.col = bd.textcol; -- did_change = swapchars(oap->op_type, &pos, bd.textlen); -+ one_change = swapchars(oap->op_type, &pos, bd.textlen); -+ did_change |= one_change; - - # ifdef FEAT_NETBEANS_INTG -- if (usingNetbeans && did_change) -+ if (usingNetbeans && one_change) - { - char_u *ptr = ml_get_buf(curbuf, pos.lnum, FALSE); - -@@ -4848,7 +4873,8 @@ - * - textlen includes the first/last char to be (partly) deleted - * - start/endspaces is the number of columns that are taken by the - * first/last deleted char minus the number of columns that have to be -- * deleted. for yank and tilde: -+ * deleted. -+ * for yank and tilde: - * - textlen includes the first/last char to be wholly yanked - * - start/endspaces is the number of columns of the first/last yanked char - * that are to be yanked. -@@ -5312,11 +5338,14 @@ - - /* We only get here (hopefully) if line[0] == '"' */ - str = virp->vir_line + 1; -+ -+ /* If the line starts with "" this is the y_previous register. */ - if (*str == '"') - { - set_prev = TRUE; - str++; - } -+ - if (!ASCII_ISALNUM(*str) && *str != '-') - { - if (viminfo_error("E577: ", _("Illegal register name"), virp->vir_line)) -@@ -5326,6 +5355,14 @@ - get_yank_register(*str++, FALSE); - if (!force && y_current->y_array != NULL) - do_it = FALSE; -+ -+ if (*str == '@') -+ { -+ /* "x@: register x used for @@ */ -+ if (force || execreg_lastc == NUL) -+ execreg_lastc = str[-1]; -+ } -+ - size = 0; - limit = 100; /* Optimized for registers containing <= 100 lines */ - if (do_it) -@@ -5335,7 +5372,7 @@ - vim_free(y_current->y_array); - array = y_current->y_array = - (char_u **)alloc((unsigned)(limit * sizeof(char_u *))); -- str = skipwhite(str); -+ str = skipwhite(skiptowhite(str)); - if (STRNCMP(str, "CHAR", 4) == 0) - y_current->y_type = MCHAR; - #ifdef FEAT_VISUAL -@@ -5418,6 +5455,7 @@ - max_kbyte = get_viminfo_parameter('s'); - if (max_kbyte == 0) - return; -+ - for (i = 0; i < NUM_REGISTERS; i++) - { - if (y_regs[i].y_array == NULL) -@@ -5472,7 +5510,10 @@ - if (y_previous == &y_regs[i]) - fprintf(fp, "\""); - c = get_register_name(i); -- fprintf(fp, "\"%c\t%s\t%d\n", c, type, -+ fprintf(fp, "\"%c", c); -+ if (c == execreg_lastc) -+ fprintf(fp, "@"); -+ fprintf(fp, "\t%s\t%d\n", type, - #ifdef FEAT_VISUAL - (int)y_regs[i].y_width - #else -@@ -5550,6 +5591,29 @@ - if (dpy != NULL && str != NULL && motion_type >= 0 - && len < 1024*1024 && len > 0) - { -+#ifdef FEAT_MBYTE -+ /* The CUT_BUFFER0 is supposed to always contain latin1. Convert from -+ * 'enc' when it is a multi-byte encoding. When 'enc' is an 8-bit -+ * encoding conversion usually doesn't work, so keep the text as-is. -+ */ -+ if (has_mbyte) -+ { -+ char_u *conv_str = str; -+ vimconv_T vc; -+ -+ vc.vc_type = CONV_NONE; -+ if (convert_setup(&vc, p_enc, (char_u *)"latin1") == OK) -+ { -+ conv_str = string_convert(&vc, str, (int*)&len); -+ if (conv_str != NULL) -+ { -+ vim_free(str); -+ str = conv_str; -+ } -+ convert_setup(&vc, NULL, NULL); -+ } -+ } -+#endif - XStoreBuffer(dpy, (char *)str, (int)len, 0); - XFlush(dpy); - } -@@ -6258,11 +6322,20 @@ - - if (VIsual_mode == Ctrl_V) - { -+#ifdef FEAT_LINEBREAK -+ char_u * saved_sbr = p_sbr; -+ -+ /* Make 'sbr' empty for a moment to get the correct size. */ -+ p_sbr = empty_option; -+#endif - oparg.is_VIsual = 1; - oparg.block_mode = TRUE; - oparg.op_type = OP_NOP; - getvcols(curwin, &min_pos, &max_pos, - &oparg.start_vcol, &oparg.end_vcol); -+#ifdef FEAT_LINEBREAK -+ p_sbr = saved_sbr; -+#endif - if (curwin->w_curswant == MAXCOL) - oparg.end_vcol = MAXCOL; - /* Swap the start, end vcol if needed */ -@@ -6366,7 +6439,7 @@ - { - getvcols(curwin, &min_pos, &max_pos, &min_pos.col, - &max_pos.col); -- sprintf((char *)buf1, _("%ld Cols; "), -+ vim_snprintf((char *)buf1, sizeof(buf1), _("%ld Cols; "), - (long)(oparg.end_vcol - oparg.start_vcol + 1)); - } - else -@@ -6374,13 +6447,15 @@ - - if (char_count_cursor == byte_count_cursor - && char_count == byte_count) -- sprintf((char *)IObuff, _("Selected %s%ld of %ld Lines; %ld of %ld Words; %ld of %ld Bytes"), -+ vim_snprintf((char *)IObuff, IOSIZE, -+ _("Selected %s%ld of %ld Lines; %ld of %ld Words; %ld of %ld Bytes"), - buf1, line_count_selected, - (long)curbuf->b_ml.ml_line_count, - word_count_cursor, word_count, - byte_count_cursor, byte_count); - else -- sprintf((char *)IObuff, _("Selected %s%ld of %ld Lines; %ld of %ld Words; %ld of %ld Chars; %ld of %ld Bytes"), -+ vim_snprintf((char *)IObuff, IOSIZE, -+ _("Selected %s%ld of %ld Lines; %ld of %ld Words; %ld of %ld Chars; %ld of %ld Bytes"), - buf1, line_count_selected, - (long)curbuf->b_ml.ml_line_count, - word_count_cursor, word_count, -@@ -6392,20 +6467,22 @@ - { - p = ml_get_curline(); - validate_virtcol(); -- col_print(buf1, (int)curwin->w_cursor.col + 1, -+ col_print(buf1, sizeof(buf1), (int)curwin->w_cursor.col + 1, - (int)curwin->w_virtcol + 1); -- col_print(buf2, (int)STRLEN(p), linetabsize(p)); -+ col_print(buf2, sizeof(buf2), (int)STRLEN(p), linetabsize(p)); - - if (char_count_cursor == byte_count_cursor - && char_count == byte_count) -- sprintf((char *)IObuff, _("Col %s of %s; Line %ld of %ld; Word %ld of %ld; Byte %ld of %ld"), -+ vim_snprintf((char *)IObuff, IOSIZE, -+ _("Col %s of %s; Line %ld of %ld; Word %ld of %ld; Byte %ld of %ld"), - (char *)buf1, (char *)buf2, - (long)curwin->w_cursor.lnum, - (long)curbuf->b_ml.ml_line_count, - word_count_cursor, word_count, - byte_count_cursor, byte_count); - else -- sprintf((char *)IObuff, _("Col %s of %s; Line %ld of %ld; Word %ld of %ld; Char %ld of %ld; Byte %ld of %ld"), -+ vim_snprintf((char *)IObuff, IOSIZE, -+ _("Col %s of %s; Line %ld of %ld; Word %ld of %ld; Char %ld of %ld; Byte %ld of %ld"), - (char *)buf1, (char *)buf2, - (long)curwin->w_cursor.lnum, - (long)curbuf->b_ml.ml_line_count, -diff -Naur vim72.orig/src/option.c vim72/src/option.c ---- vim72.orig/src/option.c 2008-07-18 14:05:33.000000000 +0100 -+++ vim72/src/option.c 2009-07-22 22:54:24.000000000 +0100 -@@ -387,6 +387,9 @@ - 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 - }; - -@@ -400,8 +403,9 @@ - #define P_NUM 0x02 /* the option is numeric */ - #define P_STRING 0x04 /* the option is a string */ - #define P_ALLOCED 0x08 /* the string option is in allocated memory, -- must use vim_free() when assigning new -- value. Not set if default is the same. */ -+ must use free_string_option() when -+ assigning new value. Not set if default is -+ the same. */ - #define P_EXPAND 0x10 /* environment expansion. NOTE: P_EXPAND can - never be used for local or hidden options! */ - #define P_NODEFAULT 0x40 /* don't set to default value */ -@@ -477,7 +481,7 @@ - #else - (char_u *)224L, - #endif -- (char_u *)0L}}, -+ (char_u *)0L} SCRIPTID_INIT}, - {"antialias", "anti", P_BOOL|P_VI_DEF|P_VIM|P_RCLR, - #if defined(FEAT_GUI) && defined(MACOS_X) - (char_u *)&p_antialias, PV_NONE, -@@ -486,35 +490,35 @@ - (char_u *)NULL, PV_NONE, - {(char_u *)FALSE, (char_u *)FALSE} - #endif -- }, -+ SCRIPTID_INIT}, - {"arabic", "arab", P_BOOL|P_VI_DEF|P_VIM, - #ifdef FEAT_ARABIC - (char_u *)VAR_WIN, PV_ARAB, - #else - (char_u *)NULL, PV_NONE, - #endif -- {(char_u *)FALSE, (char_u *)0L}}, -+ {(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}}, -+ {(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}}, -+ {(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}}, -+ {(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, -@@ -523,27 +527,27 @@ - (char_u *)NULL, PV_NONE, - {(char_u *)0L, (char_u *)0L} - #endif -- }, -+ SCRIPTID_INIT}, - #ifdef FEAT_AUTOCHDIR - {"autochdir", "acd", P_BOOL|P_VI_DEF, - (char_u *)&p_acd, PV_NONE, -- {(char_u *)FALSE, (char_u *)0L}}, -+ {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, - #endif - {"autoindent", "ai", P_BOOL|P_VI_DEF, - (char_u *)&p_ai, PV_AI, -- {(char_u *)FALSE, (char_u *)0L}}, -+ {(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}}, -+ {(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}}, -+ {(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}}, -+ {(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}}, -+ {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, - {"background", "bg", P_STRING|P_VI_DEF|P_RCLR, - (char_u *)&p_bg, PV_NONE, - { -@@ -552,13 +556,13 @@ - #else - (char_u *)"light", - #endif -- (char_u *)0L}}, -+ (char_u *)0L} SCRIPTID_INIT}, - {"backspace", "bs", P_STRING|P_VI_DEF|P_VIM|P_COMMA|P_NODUP, - (char_u *)&p_bs, PV_NONE, -- {(char_u *)"", (char_u *)0L}}, -+ {(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}}, -+ {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, - {"backupcopy", "bkc", P_STRING|P_VIM|P_COMMA|P_NODUP, - (char_u *)&p_bkc, PV_NONE, - #ifdef UNIX -@@ -566,10 +570,10 @@ - #else - {(char_u *)"auto", (char_u *)"auto"} - #endif -- }, -+ SCRIPTID_INIT}, - {"backupdir", "bdir", P_STRING|P_EXPAND|P_VI_DEF|P_COMMA|P_NODUP|P_SECURE, - (char_u *)&p_bdir, PV_NONE, -- {(char_u *)DFLT_BDIR, (char_u *)0L}}, -+ {(char_u *)DFLT_BDIR, (char_u *)0L} SCRIPTID_INIT}, - {"backupext", "bex", P_STRING|P_VI_DEF|P_NFNAME, - (char_u *)&p_bex, PV_NONE, - { -@@ -578,7 +582,7 @@ - #else - (char_u *)"~", - #endif -- (char_u *)0L}}, -+ (char_u *)0L} SCRIPTID_INIT}, - {"backupskip", "bsk", P_STRING|P_VI_DEF|P_COMMA, - #ifdef FEAT_WILDIGN - (char_u *)&p_bsk, PV_NONE, -@@ -587,40 +591,40 @@ - (char_u *)NULL, PV_NONE, - {(char_u *)0L, (char_u *)0L} - #endif -- }, -+ SCRIPTID_INIT}, - #ifdef FEAT_BEVAL - {"balloondelay","bdlay",P_NUM|P_VI_DEF, - (char_u *)&p_bdlay, PV_NONE, -- {(char_u *)600L, (char_u *)0L}}, -+ {(char_u *)600L, (char_u *)0L} SCRIPTID_INIT}, - {"ballooneval", "beval",P_BOOL|P_VI_DEF|P_NO_MKRC, - (char_u *)&p_beval, PV_NONE, -- {(char_u *)FALSE, (char_u *)0L}}, -+ {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, - # ifdef FEAT_EVAL - {"balloonexpr", "bexpr", P_STRING|P_ALLOCED|P_VI_DEF|P_VIM, - (char_u *)&p_bexpr, PV_BEXPR, -- {(char_u *)"", (char_u *)0L}}, -+ {(char_u *)"", (char_u *)0L} SCRIPTID_INIT}, - # endif - #endif - {"beautify", "bf", P_BOOL|P_VI_DEF, - (char_u *)NULL, PV_NONE, -- {(char_u *)FALSE, (char_u *)0L}}, -+ {(char_u *)FALSE, (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}}, -+ {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, - {"bioskey", "biosk",P_BOOL|P_VI_DEF, - #ifdef MSDOS - (char_u *)&p_biosk, PV_NONE, - #else - (char_u *)NULL, PV_NONE, - #endif -- {(char_u *)TRUE, (char_u *)0L}}, -+ {(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}}, -+ {(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, -@@ -629,7 +633,7 @@ - (char_u *)NULL, PV_NONE, - {(char_u *)0L, (char_u *)0L} - #endif -- }, -+ SCRIPTID_INIT}, - {"browsedir", "bsdir",P_STRING|P_VI_DEF, - #ifdef FEAT_BROWSE - (char_u *)&p_bsdir, PV_NONE, -@@ -638,7 +642,7 @@ - (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, - #if defined(FEAT_QUICKFIX) - (char_u *)&p_bh, PV_BH, -@@ -647,11 +651,11 @@ - (char_u *)NULL, PV_NONE, - {(char_u *)0L, (char_u *)0L} - #endif -- }, -+ 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, - #if defined(FEAT_QUICKFIX) - (char_u *)&p_bt, PV_BT, -@@ -660,7 +664,7 @@ - (char_u *)NULL, PV_NONE, - {(char_u *)0L, (char_u *)0L} - #endif -- }, -+ SCRIPTID_INIT}, - {"casemap", "cmp", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, - #ifdef FEAT_MBYTE - (char_u *)&p_cmp, PV_NONE, -@@ -669,7 +673,7 @@ - (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, -@@ -678,7 +682,7 @@ - (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, -@@ -687,7 +691,7 @@ - (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, -@@ -696,14 +700,14 @@ - (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}}, -+ {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, - {"cinkeys", "cink", P_STRING|P_ALLOCED|P_VI_DEF|P_COMMA|P_NODUP, - #ifdef FEAT_CINDENT - (char_u *)&p_cink, PV_CINK, -@@ -712,14 +716,14 @@ - (char_u *)NULL, PV_NONE, - {(char_u *)0L, (char_u *)0L} - #endif -- }, -+ SCRIPTID_INIT}, - {"cinoptions", "cino", P_STRING|P_ALLOCED|P_VI_DEF|P_COMMA|P_NODUP, - #ifdef FEAT_CINDENT - (char_u *)&p_cino, PV_CINO, - #else - (char_u *)NULL, PV_NONE, - #endif -- {(char_u *)"", (char_u *)0L}}, -+ {(char_u *)"", (char_u *)0L} SCRIPTID_INIT}, - {"cinwords", "cinw", P_STRING|P_ALLOCED|P_VI_DEF|P_COMMA|P_NODUP, - #if defined(FEAT_SMARTINDENT) || defined(FEAT_CINDENT) - (char_u *)&p_cinw, PV_CINW, -@@ -729,7 +733,7 @@ - (char_u *)NULL, PV_NONE, - {(char_u *)0L, (char_u *)0L} - #endif -- }, -+ SCRIPTID_INIT}, - {"clipboard", "cb", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, - #ifdef FEAT_CLIPBOARD - (char_u *)&p_cb, PV_NONE, -@@ -743,20 +747,20 @@ - (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}}, -+ {(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}}, -+ {(char_u *)7L, (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}}, -+ {(char_u *)80L, (char_u *)0L} SCRIPTID_INIT}, - {"comments", "com", P_STRING|P_ALLOCED|P_VI_DEF|P_COMMA|P_NODUP, - #ifdef FEAT_COMMENTS - (char_u *)&p_com, PV_COM, -@@ -766,7 +770,7 @@ - (char_u *)NULL, PV_NONE, - {(char_u *)0L, (char_u *)0L} - #endif -- }, -+ SCRIPTID_INIT}, - {"commentstring", "cms", P_STRING|P_ALLOCED|P_VI_DEF, - #ifdef FEAT_FOLDING - (char_u *)&p_cms, PV_CMS, -@@ -775,12 +779,12 @@ - (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}}, -+ {(char_u *)TRUE, (char_u *)FALSE} SCRIPTID_INIT}, - {"complete", "cpt", P_STRING|P_ALLOCED|P_VI_DEF|P_COMMA|P_NODUP, - #ifdef FEAT_INS_EXPAND - (char_u *)&p_cpt, PV_CPT, -@@ -789,7 +793,7 @@ - (char_u *)NULL, PV_NONE, - {(char_u *)0L, (char_u *)0L} - #endif -- }, -+ SCRIPTID_INIT}, - {"completefunc", "cfu", P_STRING|P_ALLOCED|P_VI_DEF|P_SECURE, - #ifdef FEAT_COMPL_FUNC - (char_u *)&p_cfu, PV_CFU, -@@ -798,7 +802,7 @@ - (char_u *)NULL, PV_NONE, - {(char_u *)0L, (char_u *)0L} - #endif -- }, -+ SCRIPTID_INIT}, - {"completeopt", "cot", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, - #ifdef FEAT_INS_EXPAND - (char_u *)&p_cot, PV_NONE, -@@ -807,34 +811,35 @@ - (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}}, -+ {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, - {"conskey", "consk",P_BOOL|P_VI_DEF, - #ifdef MSDOS - (char_u *)&p_consk, PV_NONE, - #else - (char_u *)NULL, PV_NONE, - #endif -- {(char_u *)FALSE, (char_u *)0L}}, -+ {(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}}, -+ {(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}}, -+ {(char_u *)CPO_VI, (char_u *)CPO_VIM} -+ 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}}, -+ {(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, -@@ -843,7 +848,7 @@ - (char_u *)NULL, PV_NONE, - {(char_u *)0L, (char_u *)0L} - #endif -- }, -+ SCRIPTID_INIT}, - {"cscopequickfix", "csqf", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, - #if defined(FEAT_CSCOPE) && defined(FEAT_QUICKFIX) - (char_u *)&p_csqf, PV_NONE, -@@ -852,45 +857,45 @@ - (char_u *)NULL, PV_NONE, - {(char_u *)0L, (char_u *)0L} - #endif -- }, -+ 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}}, -+ {(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}}, -+ {(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}}, -+ {(char_u *)0L, (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}}, -+ {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, - {"cursorline", "cul", P_BOOL|P_VI_DEF|P_RWIN, - #ifdef FEAT_SYN_HL - (char_u *)VAR_WIN, PV_CUL, - #else - (char_u *)NULL, PV_NONE, - #endif -- {(char_u *)FALSE, (char_u *)0L}}, -+ {(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}}, -+ {(char_u *)"", (char_u *)0L} SCRIPTID_INIT}, - {"define", "def", P_STRING|P_ALLOCED|P_VI_DEF, - #ifdef FEAT_FIND_ID - (char_u *)&p_def, PV_DEF, -@@ -899,28 +904,28 @@ - (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}}, -+ {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, - {"dictionary", "dict", P_STRING|P_EXPAND|P_VI_DEF|P_COMMA|P_NODUP, - #ifdef FEAT_INS_EXPAND - (char_u *)&p_dict, PV_DICT, - #else - (char_u *)NULL, PV_NONE, - #endif -- {(char_u *)"", (char_u *)0L}}, -+ {(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}}, -+ {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, - {"diffexpr", "dex", P_STRING|P_VI_DEF|P_SECURE, - #if defined(FEAT_DIFF) && defined(FEAT_EVAL) - (char_u *)&p_dex, PV_NONE, -@@ -929,7 +934,7 @@ - (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_COMMA|P_NODUP, - #ifdef FEAT_DIFF - (char_u *)&p_dip, PV_NONE, -@@ -938,20 +943,20 @@ - (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}}, -+ {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, - {"directory", "dir", P_STRING|P_EXPAND|P_VI_DEF|P_COMMA|P_NODUP|P_SECURE, - (char_u *)&p_dir, PV_NONE, -- {(char_u *)DFLT_DIR, (char_u *)0L}}, -+ {(char_u *)DFLT_DIR, (char_u *)0L} SCRIPTID_INIT}, - {"display", "dy", P_STRING|P_VI_DEF|P_COMMA|P_RALL|P_NODUP, - (char_u *)&p_dy, PV_NONE, -- {(char_u *)"", (char_u *)0L}}, -+ {(char_u *)"", (char_u *)0L} SCRIPTID_INIT}, - {"eadirection", "ead", P_STRING|P_VI_DEF, - #ifdef FEAT_VERTSPLIT - (char_u *)&p_ead, PV_NONE, -@@ -960,10 +965,10 @@ - (char_u *)NULL, PV_NONE, - {(char_u *)NULL, (char_u *)0L} - #endif -- }, -+ SCRIPTID_INIT}, - {"edcompatible","ed", P_BOOL|P_VI_DEF, - (char_u *)&p_ed, PV_NONE, -- {(char_u *)FALSE, (char_u *)0L}}, -+ {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, - {"encoding", "enc", P_STRING|P_VI_DEF|P_RCLR, - #ifdef FEAT_MBYTE - (char_u *)&p_enc, PV_NONE, -@@ -972,19 +977,19 @@ - (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}}, -+ {(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}}, -+ {(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}}, -+ {(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}}, -+ {(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, -@@ -993,32 +998,32 @@ - (char_u *)NULL, PV_NONE, - {(char_u *)NULL, (char_u *)0L} - #endif -- }, -+ SCRIPTID_INIT}, - {"errorformat", "efm", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, - #ifdef FEAT_QUICKFIX - (char_u *)&p_efm, PV_EFM, -- {(char_u *)DFLT_EFM, (char_u *)0L}, -+ {(char_u *)DFLT_EFM, (char_u *)0L} - #else - (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}}, -+ {(char_u *)FALSE, (char_u *)TRUE} SCRIPTID_INIT}, - {"eventignore", "ei", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, - #ifdef FEAT_AUTOCMD - (char_u *)&p_ei, PV_NONE, - #else - (char_u *)NULL, PV_NONE, - #endif -- {(char_u *)"", (char_u *)0L}}, -+ {(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}}, -+ {(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}}, -+ {(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 - (char_u *)&p_fenc, PV_FENC, -@@ -1027,7 +1032,7 @@ - (char_u *)NULL, PV_NONE, - {(char_u *)0L, (char_u *)0L} - #endif -- }, -+ SCRIPTID_INIT}, - {"fileencodings","fencs", P_STRING|P_VI_DEF|P_COMMA, - #ifdef FEAT_MBYTE - (char_u *)&p_fencs, PV_NONE, -@@ -1036,13 +1041,14 @@ - (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, - (char_u *)&p_ff, PV_FF, -- {(char_u *)DFLT_FF, (char_u *)0L}}, -+ {(char_u *)DFLT_FF, (char_u *)0L} SCRIPTID_INIT}, - {"fileformats", "ffs", P_STRING|P_VIM|P_COMMA|P_NODUP, - (char_u *)&p_ffs, PV_NONE, -- {(char_u *)DFLT_FFS_VI, (char_u *)DFLT_FFS_VIM}}, -+ {(char_u *)DFLT_FFS_VI, (char_u *)DFLT_FFS_VIM} -+ SCRIPTID_INIT}, - {"filetype", "ft", P_STRING|P_ALLOCED|P_VI_DEF|P_NOGLOB|P_NFNAME, - #ifdef FEAT_AUTOCMD - (char_u *)&p_ft, PV_FT, -@@ -1051,7 +1057,7 @@ - (char_u *)NULL, PV_NONE, - {(char_u *)0L, (char_u *)0L} - #endif -- }, -+ SCRIPTID_INIT}, - {"fillchars", "fcs", P_STRING|P_VI_DEF|P_RALL|P_COMMA|P_NODUP, - #if defined(FEAT_WINDOWS) || defined(FEAT_FOLDING) - (char_u *)&p_fcs, PV_NONE, -@@ -1060,27 +1066,27 @@ - (char_u *)NULL, PV_NONE, - {(char_u *)"", (char_u *)0L} - #endif -- }, -+ 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}}, -+ {(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}}, -+ {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, - #ifdef FEAT_FOLDING - {"foldclose", "fcl", P_STRING|P_VI_DEF|P_COMMA|P_NODUP|P_RWIN, - (char_u *)&p_fcl, PV_NONE, -- {(char_u *)"", (char_u *)0L}}, -+ {(char_u *)"", (char_u *)0L} SCRIPTID_INIT}, - {"foldcolumn", "fdc", P_NUM|P_VI_DEF|P_RWIN, - (char_u *)VAR_WIN, PV_FDC, -- {(char_u *)FALSE, (char_u *)0L}}, -+ {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, - {"foldenable", "fen", P_BOOL|P_VI_DEF|P_RWIN, - (char_u *)VAR_WIN, PV_FEN, -- {(char_u *)TRUE, (char_u *)0L}}, -+ {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT}, - {"foldexpr", "fde", P_STRING|P_ALLOCED|P_VIM|P_VI_DEF|P_RWIN, - # ifdef FEAT_EVAL - (char_u *)VAR_WIN, PV_FDE, -@@ -1089,33 +1095,34 @@ - (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, - (char_u *)VAR_WIN, PV_FDI, -- {(char_u *)"#", (char_u *)NULL}}, -+ {(char_u *)"#", (char_u *)NULL} SCRIPTID_INIT}, - {"foldlevel", "fdl", P_NUM|P_VI_DEF|P_RWIN, - (char_u *)VAR_WIN, PV_FDL, -- {(char_u *)0L, (char_u *)0L}}, -+ {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT}, - {"foldlevelstart","fdls", P_NUM|P_VI_DEF, - (char_u *)&p_fdls, PV_NONE, -- {(char_u *)-1L, (char_u *)0L}}, -+ {(char_u *)-1L, (char_u *)0L} SCRIPTID_INIT}, - {"foldmarker", "fmr", P_STRING|P_ALLOCED|P_VIM|P_VI_DEF| - P_RWIN|P_COMMA|P_NODUP, - (char_u *)VAR_WIN, PV_FMR, -- {(char_u *)"{{{,}}}", (char_u *)NULL}}, -+ {(char_u *)"{{{,}}}", (char_u *)NULL} -+ SCRIPTID_INIT}, - {"foldmethod", "fdm", P_STRING|P_ALLOCED|P_VIM|P_VI_DEF|P_RWIN, - (char_u *)VAR_WIN, PV_FDM, -- {(char_u *)"manual", (char_u *)NULL}}, -+ {(char_u *)"manual", (char_u *)NULL} SCRIPTID_INIT}, - {"foldminlines","fml", P_NUM|P_VI_DEF|P_RWIN, - (char_u *)VAR_WIN, PV_FML, -- {(char_u *)1L, (char_u *)0L}}, -+ {(char_u *)1L, (char_u *)0L} SCRIPTID_INIT}, - {"foldnestmax", "fdn", P_NUM|P_VI_DEF|P_RWIN, - (char_u *)VAR_WIN, PV_FDN, -- {(char_u *)20L, (char_u *)0L}}, -+ {(char_u *)20L, (char_u *)0L} SCRIPTID_INIT}, - {"foldopen", "fdo", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, - (char_u *)&p_fdo, PV_NONE, - {(char_u *)"block,hor,mark,percent,quickfix,search,tag,undo", -- (char_u *)0L}}, -+ (char_u *)0L} SCRIPTID_INIT}, - {"foldtext", "fdt", P_STRING|P_ALLOCED|P_VIM|P_VI_DEF|P_RWIN, - # ifdef FEAT_EVAL - (char_u *)VAR_WIN, PV_FDT, -@@ -1124,7 +1131,7 @@ - (char_u *)NULL, PV_NONE, - {(char_u *)NULL, (char_u *)0L} - # endif -- }, -+ SCRIPTID_INIT}, - #endif - {"formatexpr", "fex", P_STRING|P_ALLOCED|P_VI_DEF|P_VIM, - #ifdef FEAT_EVAL -@@ -1134,16 +1141,18 @@ - (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}}, -+ {(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}}, -+ {(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_NONE, -- {(char_u *)"", (char_u *)0L}}, -+ {(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, -@@ -1152,22 +1161,22 @@ - (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}}, -+ {(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}}, -+ {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, - {"grepformat", "gfm", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, - #ifdef FEAT_QUICKFIX - (char_u *)&p_gefm, PV_NONE, -- {(char_u *)DFLT_GREPFORMAT, (char_u *)0L}, -+ {(char_u *)DFLT_GREPFORMAT, (char_u *)0L} - #else - (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, -@@ -1185,15 +1194,15 @@ - (char_u *)"SEARCH/NUMBERS ", - # else - (char_u *)"grep -n ", --#endif --#endif -+# endif -+# endif - # endif -- (char_u *)0L}, -+ (char_u *)0L} - #else - (char_u *)NULL, PV_NONE, - {(char_u *)NULL, (char_u *)0L} - #endif -- }, -+ SCRIPTID_INIT}, - {"guicursor", "gcr", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, - #ifdef CURSOR_SHAPE - (char_u *)&p_guicursor, PV_NONE, -@@ -1208,7 +1217,7 @@ - (char_u *)NULL, PV_NONE, - {(char_u *)NULL, (char_u *)0L} - #endif -- }, -+ SCRIPTID_INIT}, - {"guifont", "gfn", P_STRING|P_VI_DEF|P_RCLR|P_COMMA|P_NODUP, - #ifdef FEAT_GUI - (char_u *)&p_guifont, PV_NONE, -@@ -1217,7 +1226,7 @@ - (char_u *)NULL, PV_NONE, - {(char_u *)NULL, (char_u *)0L} - #endif -- }, -+ SCRIPTID_INIT}, - {"guifontset", "gfs", P_STRING|P_VI_DEF|P_RCLR|P_COMMA, - #if defined(FEAT_GUI) && defined(FEAT_XFONTSET) - (char_u *)&p_guifontset, PV_NONE, -@@ -1226,7 +1235,7 @@ - (char_u *)NULL, PV_NONE, - {(char_u *)NULL, (char_u *)0L} - #endif -- }, -+ SCRIPTID_INIT}, - {"guifontwide", "gfw", P_STRING|P_VI_DEF|P_RCLR|P_COMMA|P_NODUP, - #if defined(FEAT_GUI) && defined(FEAT_MBYTE) - (char_u *)&p_guifontwide, PV_NONE, -@@ -1235,14 +1244,14 @@ - (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}}, -+ {(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, -@@ -1255,14 +1264,14 @@ - (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}}, -+ {(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, -@@ -1271,7 +1280,7 @@ - (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, -@@ -1280,20 +1289,21 @@ - (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}}, -+ {(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}}, -+ {(char_u *)DFLT_HELPFILE, (char_u *)0L} -+ SCRIPTID_INIT}, - {"helpheight", "hh", P_NUM|P_VI_DEF, - #ifdef FEAT_WINDOWS - (char_u *)&p_hh, PV_NONE, - #else - (char_u *)NULL, PV_NONE, - #endif -- {(char_u *)20L, (char_u *)0L}}, -+ {(char_u *)20L, (char_u *)0L} SCRIPTID_INIT}, - {"helplang", "hlg", P_STRING|P_VI_DEF|P_COMMA, - #ifdef FEAT_MULTI_LANG - (char_u *)&p_hlg, PV_NONE, -@@ -1302,64 +1312,65 @@ - (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}}, -+ {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, - {"highlight", "hl", P_STRING|P_VI_DEF|P_RCLR|P_COMMA|P_NODUP, - (char_u *)&p_hl, PV_NONE, -- {(char_u *)HIGHLIGHT_INIT, (char_u *)0L}}, -+ {(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 *)20L}}, -+ {(char_u *)0L, (char_u *)20L} 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}}, -+ {(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}}, -+ {(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}}, -+ {(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}}, -+ {(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}}, -+ {(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}}, -+ {(char_u *)FALSE, (char_u *)0L} 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}}, -+ {(char_u *)"", (char_u *)0L} SCRIPTID_INIT}, - {"imcmdline", "imc", P_BOOL|P_VI_DEF, - #ifdef USE_IM_CONTROL - (char_u *)&p_imcmdline, PV_NONE, - #else - (char_u *)NULL, PV_NONE, - #endif -- {(char_u *)FALSE, (char_u *)0L}}, -+ {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, - {"imdisable", "imd", P_BOOL|P_VI_DEF, - #ifdef USE_IM_CONTROL - (char_u *)&p_imdisable, PV_NONE, -@@ -1371,7 +1382,7 @@ - #else - {(char_u *)FALSE, (char_u *)0L} - #endif -- }, -+ SCRIPTID_INIT}, - {"iminsert", "imi", P_NUM|P_VI_DEF, - (char_u *)&p_iminsert, PV_IMI, - #ifdef B_IMODE_IM -@@ -1379,7 +1390,7 @@ - #else - {(char_u *)B_IMODE_NONE, (char_u *)0L} - #endif -- }, -+ SCRIPTID_INIT}, - {"imsearch", "ims", P_NUM|P_VI_DEF, - (char_u *)&p_imsearch, PV_IMS, - #ifdef B_IMODE_IM -@@ -1387,7 +1398,7 @@ - #else - {(char_u *)B_IMODE_NONE, (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, -@@ -1396,7 +1407,7 @@ - (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, -@@ -1405,10 +1416,10 @@ - (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}}, -+ {(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, -@@ -1417,7 +1428,7 @@ - (char_u *)NULL, PV_NONE, - {(char_u *)0L, (char_u *)0L} - #endif -- }, -+ SCRIPTID_INIT}, - {"indentkeys", "indk", P_STRING|P_ALLOCED|P_VI_DEF|P_COMMA|P_NODUP, - #if defined(FEAT_CINDENT) && defined(FEAT_EVAL) - (char_u *)&p_indk, PV_INDK, -@@ -1426,13 +1437,13 @@ - (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}}, -+ {(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}}, -+ {(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, - { -@@ -1455,7 +1466,7 @@ - # endif - # endif - #endif -- (char_u *)0L}}, -+ (char_u *)0L} SCRIPTID_INIT}, - {"isident", "isi", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, - (char_u *)&p_isi, PV_NONE, - { -@@ -1472,7 +1483,7 @@ - (char_u *)"@,48-57,_,192-255", - # endif - #endif -- (char_u *)0L}}, -+ (char_u *)0L} SCRIPTID_INIT}, - {"iskeyword", "isk", P_STRING|P_ALLOCED|P_VIM|P_COMMA|P_NODUP, - (char_u *)&p_isk, PV_ISK, - { -@@ -1491,7 +1502,7 @@ - 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, - { -@@ -1507,10 +1518,10 @@ - ISP_LATIN1, - # endif - #endif -- (char_u *)0L}}, -+ (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}}, -+ {(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, -@@ -1519,7 +1530,7 @@ - (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, -@@ -1528,14 +1539,14 @@ - (char_u *)NULL, PV_NONE, - {(char_u *)"", (char_u *)0L} - #endif -- }, -+ SCRIPTID_INIT}, - {"keymodel", "km", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, - #ifdef FEAT_VISUAL - (char_u *)&p_km, PV_NONE, - #else - (char_u *)NULL, PV_NONE, - #endif -- {(char_u *)"", (char_u *)0L}}, -+ {(char_u *)"", (char_u *)0L} SCRIPTID_INIT}, - {"keywordprg", "kp", P_STRING|P_EXPAND|P_VI_DEF|P_SECURE, - (char_u *)&p_kp, PV_KP, - { -@@ -1556,7 +1567,7 @@ - # endif - #endif - #endif -- (char_u *)0L}}, -+ (char_u *)0L} SCRIPTID_INIT}, - {"langmap", "lmap", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, - #ifdef FEAT_LANGMAP - (char_u *)&p_langmap, PV_NONE, -@@ -1565,31 +1576,31 @@ - (char_u *)NULL, PV_NONE, - {(char_u *)NULL, - #endif -- (char_u *)0L}}, -+ (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}}, -+ {(char_u *)"", (char_u *)0L} SCRIPTID_INIT}, - {"laststatus", "ls", P_NUM|P_VI_DEF|P_RALL, - #ifdef FEAT_WINDOWS - (char_u *)&p_ls, PV_NONE, - #else - (char_u *)NULL, PV_NONE, - #endif -- {(char_u *)1L, (char_u *)0L}}, -+ {(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}}, -+ {(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}}, -+ {(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, - { -@@ -1598,7 +1609,7 @@ - #else - (char_u *)24L, - #endif -- (char_u *)0L}}, -+ (char_u *)0L} SCRIPTID_INIT}, - {"linespace", "lsp", P_NUM|P_VI_DEF|P_RCLR, - #ifdef FEAT_GUI - (char_u *)&p_linespace, PV_NONE, -@@ -1610,14 +1621,14 @@ - #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}}, -+ {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, - {"lispwords", "lw", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, - #ifdef FEAT_LISP - (char_u *)&p_lispwords, PV_NONE, -@@ -1626,24 +1637,24 @@ - (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}}, -+ {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, - {"listchars", "lcs", P_STRING|P_VI_DEF|P_RALL|P_COMMA|P_NODUP, - (char_u *)&p_lcs, PV_NONE, -- {(char_u *)"eol:$", (char_u *)0L}}, -+ {(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}}, -+ {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT}, - #ifdef FEAT_GUI_MAC - {"macatsui", NULL, P_BOOL|P_VI_DEF|P_RCLR, - (char_u *)&p_macatsui, PV_NONE, -- {(char_u *)TRUE, (char_u *)0L}}, -+ {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT}, - #endif - {"magic", NULL, P_BOOL|P_VI_DEF, - (char_u *)&p_magic, PV_NONE, -- {(char_u *)TRUE, (char_u *)0L}}, -+ {(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, -@@ -1652,7 +1663,7 @@ - (char_u *)NULL, PV_NONE, - {(char_u *)NULL, (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, -@@ -1665,49 +1676,52 @@ - (char_u *)NULL, PV_NONE, - {(char_u *)NULL, (char_u *)0L} - #endif -- }, -+ SCRIPTID_INIT}, - {"matchpairs", "mps", P_STRING|P_ALLOCED|P_VI_DEF|P_COMMA|P_NODUP, - (char_u *)&p_mps, PV_MPS, -- {(char_u *)"(:),{:},[:]", (char_u *)0L}}, -+ {(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}}, -+ {(char_u *)5L, (char_u *)0L} SCRIPTID_INIT}, - {"maxcombine", "mco", P_NUM|P_VI_DEF, - #ifdef FEAT_MBYTE - (char_u *)&p_mco, PV_NONE, - #else - (char_u *)NULL, PV_NONE, - #endif -- {(char_u *)2, (char_u *)0L}}, -+ {(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}}, -+ {(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}}, -+ {(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}}, -+ {(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}}, -+ {(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}}, -+ {(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}}, -+ {(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}}, -+ {(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, -@@ -1716,22 +1730,22 @@ - (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}}, -+ {(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}}, -+ {(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}}, -+ {(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}}, -+ {(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}}, -+ {(char_u *)FALSE, (char_u *)TRUE} SCRIPTID_INIT}, - {"mouse", NULL, P_STRING|P_VI_DEF|P_FLAGLIST, - (char_u *)&p_mouse, PV_NONE, - { -@@ -1740,21 +1754,21 @@ - #else - (char_u *)"", - #endif -- (char_u *)0L}}, -+ (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}}, -+ {(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}}, -+ {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT}, - {"mousemodel", "mousem", P_STRING|P_VI_DEF, - (char_u *)&p_mousem, PV_NONE, - { -@@ -1767,7 +1781,7 @@ - (char_u *)"extend", - # endif - #endif -- (char_u *)0L}}, -+ (char_u *)0L} SCRIPTID_INIT}, - {"mouseshape", "mouses", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, - #ifdef FEAT_MOUSESHAPE - (char_u *)&p_mouseshape, PV_NONE, -@@ -1776,33 +1790,34 @@ - (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}}, -+ {(char_u *)500L, (char_u *)0L} 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}}, -+ {(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}}, -+ {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, - {"nrformats", "nf", P_STRING|P_ALLOCED|P_VI_DEF|P_COMMA|P_NODUP, - (char_u *)&p_nf, PV_NF, -- {(char_u *)"octal,hex", (char_u *)0L}}, -+ {(char_u *)"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}}, -+ {(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}}, -+ {(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, -@@ -1811,10 +1826,10 @@ - (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}}, -+ {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, - {"opendevice", "odev", P_BOOL|P_VI_DEF, - #if defined(MSDOS) || defined(MSWIN) || defined(OS2) - (char_u *)&p_odev, PV_NONE, -@@ -1822,13 +1837,13 @@ - (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} }, -+ {(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}}, -+ {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, - {"osfiletype", "oft", P_STRING|P_ALLOCED|P_VI_DEF, - #ifdef FEAT_OSFILETYPE - (char_u *)&p_oft, PV_OFT, -@@ -1837,17 +1852,17 @@ - (char_u *)NULL, PV_NONE, - {(char_u *)0L, (char_u *)0L} - #endif -- }, -+ SCRIPTID_INIT}, - {"paragraphs", "para", P_STRING|P_VI_DEF, - (char_u *)&p_para, PV_NONE, - {(char_u *)"IPLPPPQPP TPHPLIPpLpItpplpipbp", -- (char_u *)0L}}, -+ (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}}, -+ {(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}}, -+ {(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, -@@ -1856,10 +1871,10 @@ - (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}}, -+ {(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, - { -@@ -1872,24 +1887,24 @@ - (char_u *)".,/usr/include,,", - # endif - #endif -- (char_u *)0L}}, -+ (char_u *)0L} SCRIPTID_INIT}, - {"preserveindent", "pi", P_BOOL|P_VI_DEF|P_VIM, - (char_u *)&p_pi, PV_PI, -- {(char_u *)FALSE, (char_u *)0L}}, -+ {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, - {"previewheight", "pvh", P_NUM|P_VI_DEF, - #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX) - (char_u *)&p_pvh, PV_NONE, - #else - (char_u *)NULL, PV_NONE, - #endif -- {(char_u *)12L, (char_u *)0L}}, -+ {(char_u *)12L, (char_u *)0L} SCRIPTID_INIT}, - {"previewwindow", "pvw", P_BOOL|P_VI_DEF|P_RSTAT|P_NOGLOB, - #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX) - (char_u *)VAR_WIN, PV_PVW, - #else - (char_u *)NULL, PV_NONE, - #endif -- {(char_u *)FALSE, (char_u *)0L}}, -+ {(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, -@@ -1898,7 +1913,7 @@ - (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, -@@ -1907,7 +1922,7 @@ - (char_u *)NULL, PV_NONE, - {(char_u *)NULL, (char_u *)0L} - #endif -- }, -+ SCRIPTID_INIT}, - {"printexpr", "pexpr", P_STRING|P_VI_DEF, - #ifdef FEAT_POSTSCRIPT - (char_u *)&p_pexpr, PV_NONE, -@@ -1916,7 +1931,7 @@ - (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, -@@ -1931,7 +1946,7 @@ - (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, -@@ -1940,7 +1955,7 @@ - (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, -@@ -1949,7 +1964,7 @@ - (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, -@@ -1958,7 +1973,7 @@ - (char_u *)NULL, PV_NONE, - {(char_u *)NULL, (char_u *)0L} - #endif -- }, -+ SCRIPTID_INIT}, - {"printoptions", "popt", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, - #ifdef FEAT_PRINTER - (char_u *)&p_popt, PV_NONE, -@@ -1967,17 +1982,17 @@ - (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}}, -+ {(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}}, -+ {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT}, - {"quoteescape", "qe", P_STRING|P_ALLOCED|P_VI_DEF, - #ifdef FEAT_TEXTOBJ - (char_u *)&p_qe, PV_QE, -@@ -1986,47 +2001,47 @@ - (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}}, -+ {(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}}, -+ {(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}}, -+ {(char_u *)2000L, (char_u *)0L} SCRIPTID_INIT}, - {"remap", NULL, P_BOOL|P_VI_DEF, - (char_u *)&p_remap, PV_NONE, -- {(char_u *)TRUE, (char_u *)0L}}, -+ {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT}, - {"report", NULL, P_NUM|P_VI_DEF, - (char_u *)&p_report, PV_NONE, -- {(char_u *)2L, (char_u *)0L}}, -+ {(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}}, -+ {(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}}, -+ {(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}}, -+ {(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, -@@ -2035,40 +2050,41 @@ - (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}}, -+ {(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}}, -+ {(char_u *)"", (char_u *)0L} SCRIPTID_INIT}, - {"runtimepath", "rtp", P_STRING|P_VI_DEF|P_EXPAND|P_COMMA|P_NODUP|P_SECURE, - (char_u *)&p_rtp, PV_NONE, -- {(char_u *)DFLT_RUNTIMEPATH, (char_u *)0L}}, -+ {(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 *)12L, (char_u *)0L}}, -+ {(char_u *)12L, (char_u *)0L} SCRIPTID_INIT}, - {"scrollbind", "scb", P_BOOL|P_VI_DEF, - #ifdef FEAT_SCROLLBIND - (char_u *)VAR_WIN, PV_SCBIND, - #else - (char_u *)NULL, PV_NONE, - #endif -- {(char_u *)FALSE, (char_u *)0L}}, -+ {(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}}, -+ {(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}}, -+ {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT}, - {"scrollopt", "sbo", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, - #ifdef FEAT_SCROLLBIND - (char_u *)&p_sbo, PV_NONE, -@@ -2077,27 +2093,29 @@ - (char_u *)NULL, PV_NONE, - {(char_u *)0L, (char_u *)0L} - #endif -- }, -+ SCRIPTID_INIT}, - {"sections", "sect", P_STRING|P_VI_DEF, - (char_u *)&p_sections, PV_NONE, -- {(char_u *)"SHNHH HUnhsh", (char_u *)0L}}, -+ {(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}}, -+ {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, - {"selection", "sel", P_STRING|P_VI_DEF, - #ifdef FEAT_VISUAL - (char_u *)&p_sel, PV_NONE, - #else - (char_u *)NULL, PV_NONE, - #endif -- {(char_u *)"inclusive", (char_u *)0L}}, -+ {(char_u *)"inclusive", (char_u *)0L} -+ SCRIPTID_INIT}, - {"selectmode", "slm", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, - #ifdef FEAT_VISUAL - (char_u *)&p_slm, PV_NONE, - #else - (char_u *)NULL, PV_NONE, - #endif -- {(char_u *)"", (char_u *)0L}}, -+ {(char_u *)"", (char_u *)0L} SCRIPTID_INIT}, - {"sessionoptions", "ssop", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, - #ifdef FEAT_SESSION - (char_u *)&p_ssop, PV_NONE, -@@ -2107,7 +2125,7 @@ - (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, - { -@@ -2136,7 +2154,7 @@ - # endif - # endif - #endif /* VMS */ -- (char_u *)0L}}, -+ (char_u *)0L} SCRIPTID_INIT}, - {"shellcmdflag","shcf", P_STRING|P_VI_DEF|P_SECURE, - (char_u *)&p_shcf, PV_NONE, - { -@@ -2149,7 +2167,7 @@ - (char_u *)"-c", - # endif - #endif -- (char_u *)0L}}, -+ (char_u *)0L} SCRIPTID_INIT}, - {"shellpipe", "sp", P_STRING|P_VI_DEF|P_SECURE, - #ifdef FEAT_QUICKFIX - (char_u *)&p_sp, PV_NONE, -@@ -2168,30 +2186,30 @@ - (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}}, -+ {(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}}, -+ {(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}}, -+ {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, - {"shelltemp", "stmp", P_BOOL, - (char_u *)&p_stmp, PV_NONE, -- {(char_u *)FALSE, (char_u *)TRUE}}, -+ {(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}}, -+ {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT}, - {"shellxquote", "sxq", P_STRING|P_VI_DEF|P_SECURE, - (char_u *)&p_sxq, PV_NONE, - { -@@ -2200,30 +2218,31 @@ - #else - (char_u *)"", - #endif -- (char_u *)0L}}, -+ (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}}, -+ {(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}}, -+ {(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"}}, -+ {(char_u *)"", (char_u *)"filnxtToO"} -+ SCRIPTID_INIT}, - {"shortname", "sn", P_BOOL|P_VI_DEF, - #ifdef SHORT_FNAME - (char_u *)NULL, PV_NONE, - #else - (char_u *)&p_sn, PV_SN, - #endif -- {(char_u *)FALSE, (char_u *)0L}}, -+ {(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}}, -+ {(char_u *)"", (char_u *)0L} SCRIPTID_INIT}, - {"showcmd", "sc", P_BOOL|P_VIM, - #ifdef FEAT_CMDL_INFO - (char_u *)&p_sc, PV_NONE, -@@ -2236,58 +2255,58 @@ - #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}}, -+ {(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}}, -+ {(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}}, -+ {(char_u *)FALSE, (char_u *)TRUE} SCRIPTID_INIT}, - {"showtabline", "stal", P_NUM|P_VI_DEF|P_RALL, - #ifdef FEAT_WINDOWS - (char_u *)&p_stal, PV_NONE, - #else - (char_u *)NULL, PV_NONE, - #endif -- {(char_u *)1L, (char_u *)0L}}, -+ {(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}}, -+ {(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}}, -+ {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT}, - {"slowopen", "slow", P_BOOL|P_VI_DEF, - (char_u *)NULL, PV_NONE, -- {(char_u *)FALSE, (char_u *)0L}}, -+ {(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}}, -+ {(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}}, -+ {(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}}, -+ {(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}}, -+ {(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}}, -+ {(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}}, -+ {(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, -@@ -2296,7 +2315,7 @@ - (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_COMMA, - #ifdef FEAT_SPELL - (char_u *)&p_spf, PV_SPF, -@@ -2305,7 +2324,7 @@ - (char_u *)NULL, PV_NONE, - {(char_u *)0L, (char_u *)0L} - #endif -- }, -+ SCRIPTID_INIT}, - {"spelllang", "spl", P_STRING|P_ALLOCED|P_VI_DEF|P_COMMA|P_RBUF|P_EXPAND, - #ifdef FEAT_SPELL - (char_u *)&p_spl, PV_SPL, -@@ -2314,7 +2333,7 @@ - (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_COMMA, - #ifdef FEAT_SPELL - (char_u *)&p_sps, PV_NONE, -@@ -2323,35 +2342,35 @@ - (char_u *)NULL, PV_NONE, - {(char_u *)0L, (char_u *)0L} - #endif -- }, -+ SCRIPTID_INIT}, - {"splitbelow", "sb", P_BOOL|P_VI_DEF, - #ifdef FEAT_WINDOWS - (char_u *)&p_sb, PV_NONE, - #else - (char_u *)NULL, PV_NONE, - #endif -- {(char_u *)FALSE, (char_u *)0L}}, -+ {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, - {"splitright", "spr", P_BOOL|P_VI_DEF, - #ifdef FEAT_VERTSPLIT - (char_u *)&p_spr, PV_NONE, - #else - (char_u *)NULL, PV_NONE, - #endif -- {(char_u *)FALSE, (char_u *)0L}}, -+ {(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}}, -+ {(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}}, -+ {(char_u *)"", (char_u *)0L} SCRIPTID_INIT}, - {"suffixes", "su", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, - (char_u *)&p_su, PV_NONE, - {(char_u *)".bak,~,.o,.h,.info,.swp,.obj", -- (char_u *)0L}}, -+ (char_u *)0L} SCRIPTID_INIT}, - {"suffixesadd", "sua", P_STRING|P_VI_DEF|P_ALLOCED|P_COMMA|P_NODUP, - #ifdef FEAT_SEARCHPATH - (char_u *)&p_sua, PV_SUA, -@@ -2360,16 +2379,16 @@ - (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}}, -+ {(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}}, -+ {(char_u *)"fsync", (char_u *)0L} SCRIPTID_INIT}, - {"switchbuf", "swb", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, - (char_u *)&p_swb, PV_NONE, -- {(char_u *)"", (char_u *)0L}}, -+ {(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, -@@ -2378,7 +2397,7 @@ - (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, -@@ -2387,24 +2406,24 @@ - (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}}, -+ {(char_u *)"", (char_u *)0L} SCRIPTID_INIT}, - {"tabpagemax", "tpm", P_NUM|P_VI_DEF, - #ifdef FEAT_WINDOWS - (char_u *)&p_tpm, PV_NONE, - #else - (char_u *)NULL, PV_NONE, - #endif -- {(char_u *)10L, (char_u *)0L}}, -+ {(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}}, -+ {(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 */ -@@ -2412,13 +2431,13 @@ - #else - {(char_u *)TRUE, (char_u *)0L} - #endif -- }, -+ SCRIPTID_INIT}, - {"taglength", "tl", P_NUM|P_VI_DEF, - (char_u *)&p_tl, PV_NONE, -- {(char_u *)0L, (char_u *)0L}}, -+ {(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}}, -+ {(char_u *)FALSE, (char_u *)TRUE} SCRIPTID_INIT}, - {"tags", "tag", P_STRING|P_EXPAND|P_VI_DEF|P_COMMA|P_NODUP, - (char_u *)&p_tags, PV_TAGS, - { -@@ -2427,20 +2446,20 @@ - #else - (char_u *)"./tags,tags", - #endif -- (char_u *)0L}}, -+ (char_u *)0L} SCRIPTID_INIT}, - {"tagstack", "tgst", P_BOOL|P_VI_DEF, - (char_u *)&p_tgst, PV_NONE, -- {(char_u *)TRUE, (char_u *)0L}}, -+ {(char_u *)TRUE, (char_u *)0L} 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}}, -+ {(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}}, -+ {(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, -@@ -2449,13 +2468,14 @@ - (char_u *)NULL, PV_NONE, - {(char_u *)0L, (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}}, -+ {(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}}, -+ {(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, - { -@@ -2464,40 +2484,40 @@ - #else - (char_u *)FALSE, - #endif -- (char_u *)0L}}, -+ (char_u *)0L} SCRIPTID_INIT}, - {"textwidth", "tw", P_NUM|P_VI_DEF|P_VIM, - (char_u *)&p_tw, PV_TW, -- {(char_u *)0L, (char_u *)0L}}, -+ {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT}, - {"thesaurus", "tsr", P_STRING|P_EXPAND|P_VI_DEF|P_COMMA|P_NODUP, - #ifdef FEAT_INS_EXPAND - (char_u *)&p_tsr, PV_TSR, - #else - (char_u *)NULL, PV_NONE, - #endif -- {(char_u *)"", (char_u *)0L}}, -+ {(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}}, -+ {(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}}, -+ {(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}}, -+ {(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}}, -+ {(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}}, -+ {(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, -@@ -2507,49 +2527,50 @@ - (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}}, -+ {(char_u *)"", (char_u *)0L} SCRIPTID_INIT}, - #if defined(FEAT_TOOLBAR) && !defined(FEAT_GUI_W32) - {"toolbar", "tb", P_STRING|P_COMMA|P_VI_DEF|P_NODUP, - (char_u *)&p_toolbar, PV_NONE, -- {(char_u *)"icons,tooltips", (char_u *)0L}}, -+ {(char_u *)"icons,tooltips", (char_u *)0L} -+ SCRIPTID_INIT}, - #endif - #if defined(FEAT_TOOLBAR) && defined(FEAT_GUI_GTK) && defined(HAVE_GTK2) - {"toolbariconsize", "tbis", P_STRING|P_VI_DEF, - (char_u *)&p_tbis, PV_NONE, -- {(char_u *)"small", (char_u *)0L}}, -+ {(char_u *)"small", (char_u *)0L} SCRIPTID_INIT}, - #endif - {"ttimeout", NULL, P_BOOL|P_VI_DEF|P_VIM, - (char_u *)&p_ttimeout, PV_NONE, -- {(char_u *)FALSE, (char_u *)0L}}, -+ {(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}}, -+ {(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}}, -+ {(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}}, -+ {(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}}, -+ {(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}}, -+ {(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}}, -+ {(char_u *)"", (char_u *)0L} SCRIPTID_INIT}, - {"undolevels", "ul", P_NUM|P_VI_DEF, - (char_u *)&p_ul, PV_NONE, - { -@@ -2558,19 +2579,19 @@ - #else - (char_u *)100L, - #endif -- (char_u *)0L}}, -+ (char_u *)0L} SCRIPTID_INIT}, - {"updatecount", "uc", P_NUM|P_VI_DEF, - (char_u *)&p_uc, PV_NONE, -- {(char_u *)200L, (char_u *)0L}}, -+ {(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}}, -+ {(char_u *)4000L, (char_u *)0L} SCRIPTID_INIT}, - {"verbose", "vbs", P_NUM|P_VI_DEF, - (char_u *)&p_verbose, PV_NONE, -- {(char_u *)0L, (char_u *)0L}}, -+ {(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}}, -+ {(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, -@@ -2579,7 +2600,7 @@ - (char_u *)NULL, PV_NONE, - {(char_u *)0L, (char_u *)0L} - #endif -- }, -+ SCRIPTID_INIT}, - {"viewoptions", "vop", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, - #ifdef FEAT_SESSION - (char_u *)&p_vop, PV_NONE, -@@ -2588,25 +2609,25 @@ - (char_u *)NULL, PV_NONE, - {(char_u *)0L, (char_u *)0L} - #endif -- }, -+ SCRIPTID_INIT}, - {"viminfo", "vi", P_STRING|P_COMMA|P_NODUP|P_SECURE, - #ifdef FEAT_VIMINFO - (char_u *)&p_viminfo, PV_NONE, - #if defined(MSDOS) || defined(MSWIN) || defined(OS2) -- {(char_u *)"", (char_u *)"'20,<50,s10,h,rA:,rB:"} -+ {(char_u *)"", (char_u *)"'100,<50,s10,h,rA:,rB:"} - #else - # ifdef AMIGA - {(char_u *)"", -- (char_u *)"'20,<50,s10,h,rdf0:,rdf1:,rdf2:"} -+ (char_u *)"'100,<50,s10,h,rdf0:,rdf1:,rdf2:"} - # else -- {(char_u *)"", (char_u *)"'20,<50,s10,h"} -+ {(char_u *)"", (char_u *)"'100,<50,s10,h"} - # endif - #endif - #else - (char_u *)NULL, PV_NONE, - {(char_u *)0L, (char_u *)0L} - #endif -- }, -+ SCRIPTID_INIT}, - {"virtualedit", "ve", P_STRING|P_COMMA|P_NODUP|P_VI_DEF|P_VIM, - #ifdef FEAT_VIRTUALEDIT - (char_u *)&p_ve, PV_NONE, -@@ -2615,51 +2636,52 @@ - (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}}, -+ {(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}}, -+ {(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}}, -+ {(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}}, -+ {(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}}, -+ {(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}}, -+ {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, - {"whichwrap", "ww", P_STRING|P_VIM|P_COMMA|P_FLAGLIST, - (char_u *)&p_ww, PV_NONE, -- {(char_u *)"", (char_u *)"b,s"}}, -+ {(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}}, -+ {(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}}, -+ {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT}, - {"wildignore", "wig", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, - #ifdef FEAT_WILDIGN - (char_u *)&p_wig, PV_NONE, - #else - (char_u *)NULL, PV_NONE, - #endif -- {(char_u *)"", (char_u *)0L}}, -+ {(char_u *)"", (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}}, -+ {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, - {"wildmode", "wim", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, - (char_u *)&p_wim, PV_NONE, -- {(char_u *)"full", (char_u *)0L}}, -+ {(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, -@@ -2668,7 +2690,7 @@ - (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, -@@ -2677,67 +2699,67 @@ - (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}}, -+ {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT}, - {"winheight", "wh", P_NUM|P_VI_DEF, - #ifdef FEAT_WINDOWS - (char_u *)&p_wh, PV_NONE, - #else - (char_u *)NULL, PV_NONE, - #endif -- {(char_u *)1L, (char_u *)0L}}, -+ {(char_u *)1L, (char_u *)0L} SCRIPTID_INIT}, - {"winfixheight", "wfh", P_BOOL|P_VI_DEF|P_RSTAT, - #ifdef FEAT_WINDOWS - (char_u *)VAR_WIN, PV_WFH, - #else - (char_u *)NULL, PV_NONE, - #endif -- {(char_u *)FALSE, (char_u *)0L}}, -+ {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, - {"winfixwidth", "wfw", P_BOOL|P_VI_DEF|P_RSTAT, - #ifdef FEAT_VERTSPLIT - (char_u *)VAR_WIN, PV_WFW, - #else - (char_u *)NULL, PV_NONE, - #endif -- {(char_u *)FALSE, (char_u *)0L}}, -+ {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, - {"winminheight", "wmh", P_NUM|P_VI_DEF, - #ifdef FEAT_WINDOWS - (char_u *)&p_wmh, PV_NONE, - #else - (char_u *)NULL, PV_NONE, - #endif -- {(char_u *)1L, (char_u *)0L}}, -+ {(char_u *)1L, (char_u *)0L} SCRIPTID_INIT}, - {"winminwidth", "wmw", P_NUM|P_VI_DEF, - #ifdef FEAT_VERTSPLIT - (char_u *)&p_wmw, PV_NONE, - #else - (char_u *)NULL, PV_NONE, - #endif -- {(char_u *)1L, (char_u *)0L}}, -+ {(char_u *)1L, (char_u *)0L} SCRIPTID_INIT}, - {"winwidth", "wiw", P_NUM|P_VI_DEF, - #ifdef FEAT_VERTSPLIT - (char_u *)&p_wiw, PV_NONE, - #else - (char_u *)NULL, PV_NONE, - #endif -- {(char_u *)20L, (char_u *)0L}}, -+ {(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}}, -+ {(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}}, -+ {(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}}, -+ {(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}}, -+ {(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}}, -+ {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, - {"writebackup", "wb", P_BOOL|P_VI_DEF|P_VIM, - (char_u *)&p_wb, PV_NONE, - { -@@ -2746,15 +2768,15 @@ - #else - (char_u *)FALSE, - #endif -- (char_u *)0L}}, -+ (char_u *)0L} SCRIPTID_INIT}, - {"writedelay", "wd", P_NUM|P_VI_DEF, - (char_u *)&p_wd, PV_NONE, -- {(char_u *)0L, (char_u *)0L}}, -+ {(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}}, -+ {(char_u *)"", (char_u *)0L} SCRIPTID_INIT}, - - p_term("t_AB", T_CAB) - p_term("t_AF", T_CAF) -@@ -2815,7 +2837,8 @@ - - /* terminal key codes are not in here */ - -- {NULL, NULL, 0, NULL, PV_NONE, {NULL, NULL}} /* end marker */ -+ /* end marker */ -+ {NULL, NULL, 0, NULL, PV_NONE, {NULL, NULL} SCRIPTID_INIT} - }; - - #define PARAM_COUNT (sizeof(options) / sizeof(struct vimoption)) -@@ -3984,7 +4007,7 @@ - else - { - prefix = 1; -- if (STRNCMP(arg, "no", 2) == 0) -+ if (STRNCMP(arg, "no", 2) == 0 && STRNCMP(arg, "novice", 6) != 0) - { - prefix = 0; - arg += 2; -@@ -4119,11 +4142,23 @@ - && options[opt_idx].var == VAR_WIN) - goto skip; - -- /* Disallow changing some options from modelines */ -- if ((opt_flags & OPT_MODELINE) && (flags & P_SECURE)) -+ /* Disallow changing some options from modelines. */ -+ if (opt_flags & OPT_MODELINE) - { -- errmsg = (char_u *)_("E520: Not allowed in a modeline"); -- goto skip; -+ if (flags & P_SECURE) -+ { -+ errmsg = (char_u *)_("E520: Not allowed in a modeline"); -+ goto skip; -+ } -+#ifdef FEAT_DIFF -+ /* In diff mode some options are overruled. This avoids that -+ * 'foldmethod' becomes "marker" instead of "diff" and that -+ * "wrap" gets set. */ -+ if (curwin->w_p_diff -+ && (options[opt_idx].indir == PV_FDM -+ || options[opt_idx].indir == PV_WRAP)) -+ goto skip; -+#endif - } - - #ifdef HAVE_SANDBOX -@@ -5268,6 +5303,21 @@ - } - #endif - -+#ifdef FEAT_TITLE -+static void redraw_titles __ARGS((void)); -+ -+/* -+ * Redraw the window title and/or tab page text later. -+ */ -+static void redraw_titles() -+{ -+ need_maketitle = TRUE; -+# ifdef FEAT_WINDOWS -+ redraw_tabline = TRUE; -+# endif -+} -+#endif -+ - /* - * Set a string option to a new value (without checking the effect). - * The string is copied into allocated memory. -@@ -5275,14 +5325,13 @@ - * 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". - */ --/*ARGSUSED*/ - void - set_string_option_direct(name, opt_idx, val, opt_flags, set_sid) - char_u *name; - int opt_idx; - char_u *val; - int opt_flags; /* OPT_FREE, OPT_LOCAL and/or OPT_GLOBAL */ -- int set_sid; -+ int set_sid UNUSED; - { - char_u *s; - char_u **varp; -@@ -5407,6 +5456,10 @@ - int did_chartab = FALSE; - char_u **gvarp; - long_u free_oldval = (options[opt_idx].flags & P_ALLOCED); -+#ifdef FEAT_GUI -+ /* set when changing an option that only requires a redraw in the GUI */ -+ int redraw_gui_only = FALSE; -+#endif - - /* Get the global option to compare with, otherwise we would have to check - * two values for all local options. */ -@@ -5668,7 +5721,7 @@ - { - # ifdef FEAT_TITLE - /* May show a "+" in the title now. */ -- need_maketitle = TRUE; -+ redraw_titles(); - # endif - /* Add 'fileencoding' to the swap file. */ - ml_setflags(curbuf); -@@ -5687,7 +5740,7 @@ - { - errmsg = mb_init(); - # ifdef FEAT_TITLE -- need_maketitle = TRUE; -+ redraw_titles(); - # endif - } - } -@@ -5766,14 +5819,28 @@ - /* load or unload key mapping tables */ - errmsg = keymap_init(); - -- /* When successfully installed a new keymap switch on using it. */ -- if (*curbuf->b_p_keymap != NUL && errmsg == NULL) -+ if (errmsg == NULL) - { -- curbuf->b_p_iminsert = B_IMODE_LMAP; -- if (curbuf->b_p_imsearch != B_IMODE_USE_INSERT) -- curbuf->b_p_imsearch = B_IMODE_LMAP; -- set_iminsert_global(); -- set_imsearch_global(); -+ if (*curbuf->b_p_keymap != NUL) -+ { -+ /* Installed a new keymap, switch on using it. */ -+ curbuf->b_p_iminsert = B_IMODE_LMAP; -+ if (curbuf->b_p_imsearch != B_IMODE_USE_INSERT) -+ curbuf->b_p_imsearch = B_IMODE_LMAP; -+ } -+ else -+ { -+ /* Cleared the keymap, may reset 'iminsert' and 'imsearch'. */ -+ if (curbuf->b_p_iminsert == B_IMODE_LMAP) -+ curbuf->b_p_iminsert = B_IMODE_NONE; -+ if (curbuf->b_p_imsearch == B_IMODE_LMAP) -+ curbuf->b_p_imsearch = B_IMODE_USE_INSERT; -+ } -+ if ((opt_flags & OPT_LOCAL) == 0) -+ { -+ set_iminsert_global(); -+ set_imsearch_global(); -+ } - # ifdef FEAT_WINDOWS - status_redraw_curbuf(); - # endif -@@ -5796,7 +5863,7 @@ - else - curbuf->b_p_tx = FALSE; - #ifdef FEAT_TITLE -- need_maketitle = TRUE; -+ redraw_titles(); - #endif - /* update flag in swap file */ - ml_setflags(curbuf); -@@ -5977,15 +6044,23 @@ - /* ":set t_Co=0" and ":set t_Co=1" do ":set t_Co=" */ - if (varp == &T_CCO) - { -- t_colors = atoi((char *)T_CCO); -- if (t_colors <= 1) -+ int colors = atoi((char *)T_CCO); -+ -+ /* Only reinitialize colors if t_Co value has really changed to -+ * avoid expensive reload of colorscheme if t_Co is set to the -+ * same value multiple times. */ -+ if (colors != t_colors) - { -- if (new_value_alloced) -- vim_free(T_CCO); -- T_CCO = empty_option; -+ t_colors = colors; -+ if (t_colors <= 1) -+ { -+ if (new_value_alloced) -+ vim_free(T_CCO); -+ T_CCO = empty_option; -+ } -+ /* We now have a different color setup, initialize it again. */ -+ init_highlight(TRUE, FALSE); - } -- /* We now have a different color setup, initialize it again. */ -- init_highlight(TRUE, FALSE); - } - ttest(FALSE); - if (varp == &T_ME) -@@ -6055,6 +6130,7 @@ - errmsg = (char_u *)N_("E596: Invalid font(s)"); - } - } -+ redraw_gui_only = TRUE; - } - # ifdef FEAT_XFONTSET - else if (varp == &p_guifontset) -@@ -6063,6 +6139,7 @@ - errmsg = (char_u *)N_("E597: can't select fontset"); - else if (gui.in_use && gui_init_font(p_guifontset, TRUE) != OK) - errmsg = (char_u *)N_("E598: Invalid fontset"); -+ redraw_gui_only = TRUE; - } - # endif - # ifdef FEAT_MBYTE -@@ -6072,6 +6149,7 @@ - errmsg = (char_u *)N_("E533: can't select wide font"); - else if (gui_get_wide_font() == FAIL) - errmsg = (char_u *)N_("E534: Invalid wide font"); -+ redraw_gui_only = TRUE; - } - # endif - #endif -@@ -6133,13 +6211,24 @@ - #ifdef FEAT_GUI - /* 'guioptions' */ - else if (varp == &p_go) -+ { - gui_init_which_components(oldval); -+ redraw_gui_only = TRUE; -+ } - #endif - - #if defined(FEAT_GUI_TABLINE) - /* 'guitablabel' */ - else if (varp == &p_gtl) -+ { - redraw_tabline = TRUE; -+ redraw_gui_only = TRUE; -+ } -+ /* 'guitabtooltip' */ -+ else if (varp == &p_gtt) -+ { -+ redraw_gui_only = TRUE; -+ } - #endif - - #if defined(FEAT_MOUSE_TTY) && (defined(UNIX) || defined(VMS)) -@@ -6717,7 +6806,11 @@ - - if (curwin->w_curswant != MAXCOL) - curwin->w_set_curswant = TRUE; /* in case 'showbreak' changed */ -- check_redraw(options[opt_idx].flags); -+#ifdef FEAT_GUI -+ /* check redraw when it's not a GUI option or the GUI is active. */ -+ if (!redraw_gui_only || gui.in_use) -+#endif -+ check_redraw(options[opt_idx].flags); - - return errmsg; - } -@@ -6932,6 +7025,7 @@ - int new_unnamed = FALSE; - int new_autoselect = FALSE; - int new_autoselectml = FALSE; -+ int new_html = FALSE; - regprog_T *new_exclude_prog = NULL; - char_u *errmsg = NULL; - char_u *p; -@@ -6955,6 +7049,11 @@ - new_autoselectml = TRUE; - p += 12; - } -+ else if (STRNCMP(p, "html", 4) == 0 && (p[4] == ',' || p[4] == NUL)) -+ { -+ new_html = TRUE; -+ p += 4; -+ } - else if (STRNCMP(p, "exclude:", 8) == 0 && new_exclude_prog == NULL) - { - p += 8; -@@ -6976,6 +7075,7 @@ - clip_unnamed = new_unnamed; - clip_autoselect = new_autoselect; - clip_autoselectml = new_autoselectml; -+ clip_html = new_html; - vim_free(clip_exclude_prog); - clip_exclude_prog = new_exclude_prog; - } -@@ -7105,22 +7205,28 @@ - curbuf->b_did_warn = FALSE; - - #ifdef FEAT_TITLE -- need_maketitle = TRUE; -+ redraw_titles(); - #endif - } - - #ifdef FEAT_TITLE - /* when 'modifiable' is changed, redraw the window title */ - else if ((int *)varp == &curbuf->b_p_ma) -- need_maketitle = TRUE; -+ { -+ redraw_titles(); -+ } - /* when 'endofline' is changed, redraw the window title */ - else if ((int *)varp == &curbuf->b_p_eol) -- need_maketitle = TRUE; --#ifdef FEAT_MBYTE -- /* when 'bomb' is changed, redraw the window title */ -+ { -+ redraw_titles(); -+ } -+# ifdef FEAT_MBYTE -+ /* when 'bomb' is changed, redraw the window title and tab page text */ - else if ((int *)varp == &curbuf->b_p_bomb) -- need_maketitle = TRUE; --#endif -+ { -+ redraw_titles(); -+ } -+# endif - #endif - - /* when 'bin' is set also set some other options */ -@@ -7128,7 +7234,7 @@ - { - set_options_bin(old_value, curbuf->b_p_bin, opt_flags); - #ifdef FEAT_TITLE -- need_maketitle = TRUE; -+ redraw_titles(); - #endif - } - -@@ -7279,7 +7385,7 @@ - if (!value) - save_file_ff(curbuf); /* Buffer is unchanged */ - #ifdef FEAT_TITLE -- need_maketitle = TRUE; -+ redraw_titles(); - #endif - #ifdef FEAT_AUTOCMD - modified_was_set = value; -@@ -7486,9 +7592,13 @@ - * set. */ - if (STRCMP(p_enc, "utf-8") != 0) - { -+ static char *w_arabic = N_("W17: Arabic requires UTF-8, do ':set encoding=utf-8'"); -+ - msg_source(hl_attr(HLF_W)); -- MSG_ATTR(_("W17: Arabic requires UTF-8, do ':set encoding=utf-8'"), -- hl_attr(HLF_W)); -+ MSG_ATTR(_(w_arabic), hl_attr(HLF_W)); -+#ifdef FEAT_EVAL -+ set_vim_var_string(VV_WARNINGMSG, (char_u *)_(w_arabic), -1); -+#endif - } - - # ifdef FEAT_MBYTE -@@ -7714,7 +7824,7 @@ - newFoldLevel(); - } - -- /* 'foldminlevel' */ -+ /* 'foldminlines' */ - else if (pp == &curwin->w_p_fml) - { - foldUpdateAll(curwin); -@@ -7974,6 +8084,11 @@ - else /* curwin->w_p_scr > curwin->w_height */ - curwin->w_p_scr = curwin->w_height; - } -+ if (p_hi < 0) -+ { -+ errmsg = e_positive; -+ p_hi = 0; -+ } - if (p_report < 0) - { - errmsg = e_positive; -@@ -8227,13 +8342,13 @@ - { - if (number == 0 && string != NULL) - { -- int index; -+ int idx; - - /* Either we are given a string or we are setting option - * to zero. */ -- for (index = 0; string[index] == '0'; ++index) -+ for (idx = 0; string[idx] == '0'; ++idx) - ; -- if (string[index] != NUL || index == 0) -+ if (string[idx] != NUL || idx == 0) - { - /* There's another character after zeros or the string - * is empty. In both cases, we are trying to set a -@@ -8323,7 +8438,7 @@ - { - --arg; /* put arg at the '<' */ - modifiers = 0; -- key = find_special_key(&arg, &modifiers, TRUE); -+ key = find_special_key(&arg, &modifiers, TRUE, TRUE); - if (modifiers) /* can't handle modifiers here */ - key = 0; - } -@@ -8813,6 +8928,28 @@ - } - - /* -+ * Free the string for one term option, if it was allocated. -+ * Set the string to empty_option and clear allocated flag. -+ * "var" points to the option value. -+ */ -+ void -+free_one_termoption(var) -+ char_u *var; -+{ -+ struct vimoption *p; -+ -+ for (p = &options[0]; p->fullname != NULL; p++) -+ if (p->var == var) -+ { -+ if (p->flags & P_ALLOCED) -+ free_string_option(*(char_u **)(p->var)); -+ *(char_u **)(p->var) = empty_option; -+ p->flags &= ~P_ALLOCED; -+ break; -+ } -+} -+ -+/* - * Set the terminal option defaults to the current value. - * Used after setting the terminal name. - */ -@@ -9271,10 +9408,9 @@ - /* - * Check for NULL pointers in a winopt_T and replace them with empty_option. - */ --/*ARGSUSED*/ - void - check_winopt(wop) -- winopt_T *wop; -+ winopt_T *wop UNUSED; - { - #ifdef FEAT_FOLDING - check_string_option(&wop->wo_fdi); -@@ -9296,10 +9432,9 @@ - /* - * Free the allocated memory inside a winopt_T. - */ --/*ARGSUSED*/ - void - clear_winopt(wop) -- winopt_T *wop; -+ winopt_T *wop UNUSED; - { - #ifdef FEAT_FOLDING - clear_string_option(&wop->wo_fdi); -@@ -9645,7 +9780,7 @@ - } - --p; - } -- if (STRNCMP(p, "no", 2) == 0) -+ if (STRNCMP(p, "no", 2) == 0 && STRNCMP(p, "novice", 6) != 0) - { - xp->xp_context = EXPAND_BOOL_SETTINGS; - p += 2; -@@ -9834,7 +9969,8 @@ - regmatch->rm_ic = ic; - if (xp->xp_context != EXPAND_BOOL_SETTINGS) - { -- for (match = 0; match < sizeof(names) / sizeof(char *); ++match) -+ for (match = 0; match < (int)(sizeof(names) / sizeof(char *)); -+ ++match) - if (vim_regexec(regmatch, (char_u *)names[match], (colnr_T)0)) - { - if (loop == 0) -@@ -10093,25 +10229,110 @@ - - #ifdef FEAT_LANGMAP - /* -- * Any character has an equivalent character. This is used for keyboards that -- * have a special language mode that sends characters above 128 (although -- * other characters can be translated too). -+ * Any character has an equivalent 'langmap' character. This is used for -+ * keyboards that have a special language mode that sends characters above -+ * 128 (although other characters can be translated too). The "to" field is a -+ * Vim command character. This avoids having to switch the keyboard back to -+ * ASCII mode when leaving Insert mode. -+ * -+ * langmap_mapchar[] maps any of 256 chars to an ASCII char used for Vim -+ * commands. -+ * When FEAT_MBYTE is defined langmap_mapga.ga_data is a sorted table of -+ * langmap_entry_T. This does the same as langmap_mapchar[] for characters >= -+ * 256. -+ */ -+# ifdef FEAT_MBYTE -+/* -+ * With multi-byte support use growarray for 'langmap' chars >= 256 -+ */ -+typedef struct -+{ -+ int from; -+ int to; -+} langmap_entry_T; -+ -+static garray_T langmap_mapga; -+static void langmap_set_entry __ARGS((int from, int to)); -+ -+/* -+ * Search for an entry in "langmap_mapga" for "from". If found set the "to" -+ * field. If not found insert a new entry at the appropriate location. - */ -+ static void -+langmap_set_entry(from, to) -+ int from; -+ int to; -+{ -+ langmap_entry_T *entries = (langmap_entry_T *)(langmap_mapga.ga_data); -+ int a = 0; -+ int b = langmap_mapga.ga_len; -+ -+ /* Do a binary search for an existing entry. */ -+ while (a != b) -+ { -+ int i = (a + b) / 2; -+ int d = entries[i].from - from; -+ -+ if (d == 0) -+ { -+ entries[i].to = to; -+ return; -+ } -+ if (d < 0) -+ a = i + 1; -+ else -+ b = i; -+ } -+ -+ if (ga_grow(&langmap_mapga, 1) != OK) -+ return; /* out of memory */ -+ -+ /* insert new entry at position "a" */ -+ entries = (langmap_entry_T *)(langmap_mapga.ga_data) + a; -+ mch_memmove(entries + 1, entries, -+ (langmap_mapga.ga_len - a) * sizeof(langmap_entry_T)); -+ ++langmap_mapga.ga_len; -+ entries[0].from = from; -+ entries[0].to = to; -+} - - /* -- * char_u langmap_mapchar[256]; -- * Normally maps each of the 128 upper chars to an <128 ascii char; used to -- * "translate" native lang chars in normal mode or some cases of -- * insert mode without having to tediously switch lang mode back&forth. -+ * Apply 'langmap' to multi-byte character "c" and return the result. - */ -+ int -+langmap_adjust_mb(c) -+ int c; -+{ -+ langmap_entry_T *entries = (langmap_entry_T *)(langmap_mapga.ga_data); -+ int a = 0; -+ int b = langmap_mapga.ga_len; -+ -+ while (a != b) -+ { -+ int i = (a + b) / 2; -+ int d = entries[i].from - c; -+ -+ if (d == 0) -+ return entries[i].to; /* found matching entry */ -+ if (d < 0) -+ a = i + 1; -+ else -+ b = i; -+ } -+ return c; /* no entry found, return "c" unmodified */ -+} -+# endif - - static void - langmap_init() - { - int i; - -- for (i = 0; i < 256; i++) /* we init with a-one-to one map */ -- langmap_mapchar[i] = i; -+ for (i = 0; i < 256; i++) -+ langmap_mapchar[i] = i; /* we init with a one-to-one map */ -+# ifdef FEAT_MBYTE -+ ga_init2(&langmap_mapga, sizeof(langmap_entry_T), 8); -+# endif - } - - /* -@@ -10125,7 +10346,10 @@ - char_u *p2; - int from, to; - -- langmap_init(); /* back to one-to-one map first */ -+#ifdef FEAT_MBYTE -+ ga_clear(&langmap_mapga); /* clear the previous map first */ -+#endif -+ langmap_init(); /* back to one-to-one map */ - - for (p = p_langmap; p[0] != NUL; ) - { -@@ -10175,7 +10399,13 @@ - transchar(from)); - return; - } -- langmap_mapchar[from & 255] = to; -+ -+#ifdef FEAT_MBYTE -+ if (from >= 256) -+ langmap_set_entry(from, to); -+ else -+#endif -+ langmap_mapchar[from & 255] = to; - - /* Advance to next pair */ - mb_ptr_adv(p); -diff -Naur vim72.orig/src/os_unix.c vim72/src/os_unix.c ---- vim72.orig/src/os_unix.c 2008-08-06 12:01:40.000000000 +0100 -+++ vim72/src/os_unix.c 2009-07-22 22:54:24.000000000 +0100 -@@ -181,7 +181,8 @@ - && defined(FEAT_TITLE) && !defined(FEAT_GUI_GTK) - # define SET_SIG_ALARM - static RETSIGTYPE sig_alarm __ARGS(SIGPROTOARG); --static int sig_alarm_called; -+/* volatile because it is used in signal handler sig_alarm(). */ -+static volatile int sig_alarm_called; - #endif - static RETSIGTYPE deathtrap __ARGS(SIGPROTOARG); - -@@ -201,13 +202,16 @@ - # define SIG_ERR ((RETSIGTYPE (*)())-1) - #endif - --static int do_resize = FALSE; -+/* volatile because it is used in signal handler sig_winch(). */ -+static volatile int do_resize = FALSE; - #ifndef __EMX__ - static char_u *extra_shell_arg = NULL; - static int show_shell_mess = TRUE; - #endif --static int deadly_signal = 0; /* The signal we caught */ --static int in_mch_delay = FALSE; /* sleeping in mch_delay() */ -+/* 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() */ - - static int curr_tmode = TMODE_COOK; /* contains current terminal mode */ - -@@ -315,12 +319,32 @@ - {-1, "Unknown!", FALSE} - }; - -+ int -+mch_chdir(path) -+ char *path; -+{ -+ if (p_verbose >= 5) -+ { -+ verbose_enter(); -+ smsg((char_u *)"chdir(%s)", path); -+ verbose_leave(); -+ } -+# ifdef VMS -+ return chdir(vms_fixfilename(path)); -+# else -+ return chdir(path); -+# endif -+} -+ -+/* -+ * Write s[len] to the screen. -+ */ - void - mch_write(s, len) - char_u *s; - int len; - { -- write(1, (char *)s, 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); - } -@@ -447,10 +471,9 @@ - * Return total amount of memory available in Kbyte. - * Doesn't change when memory has been allocated. - */ --/* ARGSUSED */ - long_u - mch_total_mem(special) -- int special; -+ int special UNUSED; - { - # ifdef __EMX__ - return ulimit(3, 0L) >> 10; /* always 32MB? */ -@@ -799,12 +822,11 @@ - #endif - - /* -- * We need correct potatotypes for a signal function, otherwise mean compilers -+ * We need correct prototypes for a signal function, otherwise mean compilers - * will barf when the second argument to signal() is ``wrong''. - * Let me try it with a few tricky defines from my own osdef.h (jw). - */ - #if defined(SIGWINCH) --/* ARGSUSED */ - static RETSIGTYPE - sig_winch SIGDEFARG(sigarg) - { -@@ -816,7 +838,6 @@ - #endif - - #if defined(SIGINT) --/* ARGSUSED */ - static RETSIGTYPE - catch_sigint SIGDEFARG(sigarg) - { -@@ -828,7 +849,6 @@ - #endif - - #if defined(SIGPWR) --/* ARGSUSED */ - static RETSIGTYPE - catch_sigpwr SIGDEFARG(sigarg) - { -@@ -848,7 +868,6 @@ - /* - * signal function for alarm(). - */ --/* ARGSUSED */ - static RETSIGTYPE - sig_alarm SIGDEFARG(sigarg) - { -@@ -1065,19 +1084,23 @@ - SIGRETURN; - } - --#ifdef _REENTRANT -+#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 in signal handler sigcont_handler(). - */ --static int sigcont_received; -+static volatile int sigcont_received; - static RETSIGTYPE sigcont_handler __ARGS(SIGPROTOARG); - - /* - * signal handler for SIGCONT - */ --/* ARGSUSED */ - static RETSIGTYPE - sigcont_handler SIGDEFARG(sigarg) - { -@@ -1115,15 +1138,28 @@ - } - # endif - --# ifdef _REENTRANT -+# if defined(_REENTRANT) && defined(SIGCONT) - sigcont_received = FALSE; - # endif - kill(0, SIGTSTP); /* send ourselves a STOP signal */ --# ifdef _REENTRANT -- /* When we didn't suspend immediately in the kill(), do it now. Happens -- * on multi-threaded Solaris. */ -- if (!sigcont_received) -- pause(); -+# 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 -@@ -1172,7 +1208,7 @@ - #ifdef SIGTSTP - signal(SIGTSTP, restricted ? SIG_IGN : SIG_DFL); - #endif --#ifdef _REENTRANT -+#if defined(_REENTRANT) && defined(SIGCONT) - signal(SIGCONT, sigcont_handler); - #endif - -@@ -1231,7 +1267,7 @@ - reset_signals() - { - catch_signals(SIG_DFL, SIG_DFL); --#ifdef _REENTRANT -+#if defined(_REENTRANT) && defined(SIGCONT) - /* SIGCONT isn't in the list, because its default action is ignore */ - signal(SIGCONT, SIG_DFL); - #endif -@@ -1326,11 +1362,10 @@ - /* - * Check_win checks whether we have an interactive stdout. - */ --/* ARGSUSED */ - int - mch_check_win(argc, argv) -- int argc; -- char **argv; -+ int argc UNUSED; -+ char **argv UNUSED; - { - #ifdef OS2 - /* -@@ -1414,11 +1449,10 @@ - /* - * Another X Error handler, just used to check for errors. - */ --/* ARGSUSED */ - static int - x_error_check(dpy, error_event) -- Display *dpy; -- XErrorEvent *error_event; -+ Display *dpy UNUSED; -+ XErrorEvent *error_event UNUSED; - { - got_x_error = TRUE; - return 0; -@@ -1431,15 +1465,12 @@ - */ - static int x_IOerror_check __ARGS((Display *dpy)); - --/* ARGSUSED */ - static int - x_IOerror_check(dpy) -- Display *dpy; -+ Display *dpy UNUSED; - { - /* This function should not return, it causes exit(). Longjump instead. */ - LONGJMP(lc_jump_env, 1); -- /*NOTREACHED*/ -- return 0; - } - # endif - -@@ -1448,10 +1479,9 @@ - */ - static int x_IOerror_handler __ARGS((Display *dpy)); - --/* ARGSUSED */ - static int - x_IOerror_handler(dpy) -- Display *dpy; -+ Display *dpy UNUSED; - { - xterm_dpy = NULL; - x11_window = 0; -@@ -1460,8 +1490,6 @@ - - /* This function should not return, it causes exit(). Longjump instead. */ - LONGJMP(x_jump_env, 1); -- /*NOTREACHED*/ -- return 0; - } - #endif - -@@ -1706,9 +1734,9 @@ - if (oldicon == NULL && !test_only) - { - if (STRNCMP(T_NAME, "builtin_", 8) == 0) -- oldicon = T_NAME + 8; -+ oldicon = vim_strsave(T_NAME + 8); - else -- oldicon = T_NAME; -+ oldicon = vim_strsave(T_NAME); - } - - return retval; -@@ -1897,10 +1925,9 @@ - - #else /* FEAT_X11 */ - --/*ARGSUSED*/ - static int - get_x11_title(test_only) -- int test_only; -+ int test_only UNUSED; - { - return FALSE; - } -@@ -1912,9 +1939,9 @@ - if (!test_only) - { - if (STRNCMP(T_NAME, "builtin_", 8) == 0) -- oldicon = T_NAME + 8; -+ oldicon = vim_strsave(T_NAME + 8); - else -- oldicon = T_NAME; -+ oldicon = vim_strsave(T_NAME); - } - return FALSE; - } -@@ -2414,6 +2441,12 @@ - #ifdef HAVE_FCHDIR - if (fd >= 0) - { -+ if (p_verbose >= 5) -+ { -+ verbose_enter(); -+ MSG("fchdir() to previous dir"); -+ verbose_leave(); -+ } - l = fchdir(fd); - close(fd); - } -@@ -2438,7 +2471,7 @@ - } - - /* Catch file names which are too long. */ -- if (retval == FAIL || STRLEN(buf) + STRLEN(fname) >= len) -+ if (retval == FAIL || (int)(STRLEN(buf) + STRLEN(fname)) >= len) - return FAIL; - - /* Do not append ".", "/dir/." is equal to "/dir". */ -@@ -2475,11 +2508,10 @@ - * file name to remain exactly the same. - * Only required for file systems where case is ignored and preserved. - */ --/*ARGSUSED*/ - void - fname_case(name, len) - char_u *name; -- int len; /* buffer size, only used when name gets longer */ -+ int len UNUSED; /* buffer size, only used when name gets longer */ - { - struct stat st; - char_u *slash, *tail; -@@ -2657,7 +2689,7 @@ - */ - vim_acl_T - mch_get_acl(fname) -- char_u *fname; -+ char_u *fname UNUSED; - { - vim_acl_T ret = NULL; - #ifdef HAVE_POSIX_ACL -@@ -2717,7 +2749,7 @@ - */ - void - mch_set_acl(fname, aclent) -- char_u *fname; -+ char_u *fname UNUSED; - vim_acl_T aclent; - { - if (aclent == NULL) -@@ -2760,10 +2792,9 @@ - /* - * Set hidden flag for "name". - */ --/* ARGSUSED */ - void - mch_hide(name) -- char_u *name; -+ char_u *name UNUSED; - { - /* can't hide a file */ - } -@@ -2905,7 +2936,7 @@ - * Ignore any errors. - */ - #if defined(HAVE_SIGALTSTACK) || defined(HAVE_SIGSTACK) -- signal_stack = malloc(SIGSTKSZ); -+ signal_stack = (char *)alloc(SIGSTKSZ); - init_signal_stack(); - #endif - } -@@ -2936,7 +2967,8 @@ - } - # endif - # endif --# ifdef FEAT_X11 -+ /* Don't close the display for GTK 1, it is done in exit(). */ -+# if defined(FEAT_X11) && (!defined(FEAT_GUI_GTK) || defined(HAVE_GTK2)) - if (x11_display != NULL - # ifdef FEAT_XCLIPBOARD - && x11_display != xterm_dpy -@@ -3451,10 +3483,9 @@ - /* - * set screen mode, always fails. - */ --/* ARGSUSED */ - int - mch_screenmode(arg) -- char_u *arg; -+ char_u *arg UNUSED; - { - EMSG(_(e_screenmode)); - return FAIL; -@@ -3926,9 +3957,9 @@ - */ - if (fd >= 0) - { -- dup(fd); /* To replace stdin (file descriptor 0) */ -- dup(fd); /* To replace stdout (file descriptor 1) */ -- dup(fd); /* To replace stderr (file descriptor 2) */ -+ 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); -@@ -3946,7 +3977,17 @@ - * children can be kill()ed. Don't do this when using pipes, - * because stdin is not a tty, we would lose /dev/tty. */ - if (p_stmp) -+ { - (void)setsid(); -+# if defined(SIGHUP) -+ /* When doing "!xterm&" and 'shell' is bash: the shell -+ * will exit and send SIGHUP to all processes in its -+ * group, killing the just started process. Ignore SIGHUP -+ * to avoid that. (suggested by Simon Schubert) -+ */ -+ signal(SIGHUP, SIG_IGN); -+# endif -+ } - # endif - # ifdef FEAT_GUI - if (pty_slave_fd >= 0) -@@ -3996,13 +4037,13 @@ - - /* set up stdin/stdout/stderr for the child */ - close(0); -- dup(pty_slave_fd); -+ ignored = dup(pty_slave_fd); - close(1); -- dup(pty_slave_fd); -+ ignored = dup(pty_slave_fd); - if (gui.in_use) - { - close(2); -- dup(pty_slave_fd); -+ ignored = dup(pty_slave_fd); - } - - close(pty_slave_fd); /* has been dupped, close it now */ -@@ -4013,13 +4054,13 @@ - /* set up stdin for the child */ - close(fd_toshell[1]); - close(0); -- dup(fd_toshell[0]); -+ ignored = dup(fd_toshell[0]); - close(fd_toshell[0]); - - /* set up stdout for the child */ - close(fd_fromshell[0]); - close(1); -- dup(fd_fromshell[1]); -+ ignored = dup(fd_fromshell[1]); - close(fd_fromshell[1]); - - # ifdef FEAT_GUI -@@ -4027,7 +4068,7 @@ - { - /* set up stderr for the child */ - close(2); -- dup(1); -+ ignored = dup(1); - } - # endif - } -@@ -4078,6 +4119,9 @@ - int fromshell_fd; - garray_T ga; - int noread_cnt; -+# if defined(HAVE_GETTIMEOFDAY) && defined(HAVE_SYS_TIME_H) -+ struct timeval start_tv; -+# endif - - # ifdef FEAT_GUI - if (pty_master_fd >= 0) -@@ -4146,9 +4190,10 @@ - { - s = vim_strchr(lp + written, NL); - len = write(toshell_fd, (char *)lp + written, -- s == NULL ? l : s - (lp + written)); -+ s == NULL ? l -+ : (size_t)(s - (lp + written))); - } -- if (len == l) -+ if (len == (int)l) - { - /* Finished a line, add a NL, unless this line - * should not have one. */ -@@ -4158,7 +4203,8 @@ - && (lnum != - curbuf->b_ml.ml_line_count - || curbuf->b_p_eol))) -- write(toshell_fd, "\n", (size_t)1); -+ ignored = write(toshell_fd, "\n", -+ (size_t)1); - ++lnum; - if (lnum > curbuf->b_op_end.lnum) - { -@@ -4186,7 +4232,9 @@ - ga_init2(&ga, 1, BUFLEN); - - noread_cnt = 0; -- -+# if defined(HAVE_GETTIMEOFDAY) && defined(HAVE_SYS_TIME_H) -+ gettimeofday(&start_tv, NULL); -+# endif - for (;;) - { - /* -@@ -4199,25 +4247,34 @@ - * that a typed password is echoed for ssh or gpg command. - * Don't get characters when the child has already - * finished (wait_pid == 0). -- * Don't get extra characters when we already have one. - * Don't read characters unless we didn't get output for a -- * while, avoids that ":r !ls" eats typeahead. -+ * while (noread_cnt > 4), avoids that ":r !ls" eats -+ * typeahead. - */ - len = 0; - if (!(options & SHELL_EXPAND) - && ((options & - (SHELL_READ|SHELL_WRITE|SHELL_COOKED)) - != (SHELL_READ|SHELL_WRITE|SHELL_COOKED) --#ifdef FEAT_GUI -+# ifdef FEAT_GUI - || gui.in_use --#endif -+# endif - ) - && wait_pid == 0 -- && (ta_len > 0 -- || (noread_cnt > 4 -- && (len = ui_inchar(ta_buf, -- BUFLEN, 10L, 0)) > 0))) -+ && (ta_len > 0 || noread_cnt > 4)) - { -+ if (ta_len == 0) -+ { -+ /* Get extra characters when we don't have any. -+ * Reset the counter and timer. */ -+ noread_cnt = 0; -+# if defined(HAVE_GETTIMEOFDAY) && defined(HAVE_SYS_TIME_H) -+ gettimeofday(&start_tv, NULL); -+# endif -+ len = ui_inchar(ta_buf, BUFLEN, 10L, 0); -+ } -+ if (ta_len > 0 || len > 0) -+ { - /* - * For pipes: - * Check for CTRL-C: send interrupt signal to child. -@@ -4271,7 +4328,8 @@ - ta_buf[i] = '\n'; - # ifdef FEAT_MBYTE - if (has_mbyte) -- i += (*mb_ptr2len)(ta_buf + i) - 1; -+ i += (*mb_ptr2len_len)(ta_buf + i, -+ ta_len + len - i) - 1; - # endif - } - -@@ -4319,9 +4377,9 @@ - { - ta_len -= len; - mch_memmove(ta_buf, ta_buf + len, ta_len); -- noread_cnt = 0; - } - } -+ } - } - - if (got_int) -@@ -4429,6 +4487,25 @@ - out_flush(); - if (got_int) - break; -+ -+# if defined(HAVE_GETTIMEOFDAY) && defined(HAVE_SYS_TIME_H) -+ { -+ struct timeval now_tv; -+ long msec; -+ -+ /* Avoid that we keep looping here without -+ * checking for a CTRL-C for a long time. Don't -+ * break out too often to avoid losing typeahead. */ -+ gettimeofday(&now_tv, NULL); -+ msec = (now_tv.tv_sec - start_tv.tv_sec) * 1000L -+ + (now_tv.tv_usec - start_tv.tv_usec) / 1000L; -+ if (msec > 2000) -+ { -+ noread_cnt = 5; -+ break; -+ } -+ } -+# endif - } - - /* If we already detected the child has finished break the -@@ -4672,7 +4749,6 @@ - * Returns also, when a request from Sniff is waiting -- toni. - * Or when a Linux GPM mouse event is waiting. - */ --/* ARGSUSED */ - #if defined(__BEOS__) - int - #else -@@ -4681,7 +4757,7 @@ - RealWaitForChar(fd, msec, check_for_gpm) - int fd; - long msec; -- int *check_for_gpm; -+ int *check_for_gpm UNUSED; - { - int ret; - #if defined(FEAT_XCLIPBOARD) || defined(USE_XSMP) || defined(FEAT_MZSCHEME) -@@ -5076,7 +5152,6 @@ - - #define SHELL_SPECIAL (char_u *)"\t \"&'$;<>()\\|" - --/* ARGSUSED */ - int - mch_expand_wildcards(num_pat, pat, num_file, file, flags) - int num_pat; -@@ -5498,7 +5573,7 @@ - i = fread((char *)buffer, 1, len, fd); - fclose(fd); - mch_remove(tempname); -- if (i != len) -+ if (i != (int)len) - { - /* unexpected read error */ - EMSG2(_(e_notread), tempname); -@@ -5559,7 +5634,7 @@ - if (shell_style == STYLE_PRINT && !did_find_nul) - { - /* If there is a NUL, set did_find_nul, else set check_spaces */ -- if (len && (int)STRLEN(buffer) < len - 1) -+ if (len && (int)STRLEN(buffer) < (int)len - 1) - did_find_nul = TRUE; - else - check_spaces = TRUE; -@@ -5851,7 +5926,9 @@ - * we are going to suspend or starting an external process - * so we shouldn't have problem with this - */ -+# ifdef SIGTSTP - signal(SIGTSTP, restricted ? SIG_IGN : SIG_DFL); -+# endif - return 1; /* succeed */ - } - if (gpm_fd == -2) -@@ -6001,7 +6078,6 @@ - /* - * Gets info from sysmouse and adds special keys to input buf. - */ --/* ARGSUSED */ - static RETSIGTYPE - sig_sysmouse SIGDEFARG(sigarg) - { -@@ -6565,11 +6641,10 @@ - * This is our chance to ask the user if they want to save, - * or abort the logout - */ --/*ARGSUSED*/ - static void - xsmp_handle_interaction(smc_conn, client_data) - SmcConn smc_conn; -- SmPointer client_data; -+ SmPointer client_data UNUSED; - { - cmdmod_T save_cmdmod; - int cancel_shutdown = False; -@@ -6602,16 +6677,15 @@ - /* - * Callback that starts save-yourself. - */ --/*ARGSUSED*/ - static void - xsmp_handle_save_yourself(smc_conn, client_data, save_type, - shutdown, interact_style, fast) - SmcConn smc_conn; -- SmPointer client_data; -- int save_type; -+ SmPointer client_data UNUSED; -+ int save_type UNUSED; - Bool shutdown; -- int interact_style; -- Bool fast; -+ int interact_style UNUSED; -+ Bool fast UNUSED; - { - /* Handle already being in saveyourself */ - if (xsmp.save_yourself) -@@ -6645,11 +6719,10 @@ - /* - * Callback to warn us of imminent death. - */ --/*ARGSUSED*/ - static void - xsmp_die(smc_conn, client_data) -- SmcConn smc_conn; -- SmPointer client_data; -+ SmcConn smc_conn UNUSED; -+ SmPointer client_data UNUSED; - { - xsmp_close(); - -@@ -6661,11 +6734,10 @@ - /* - * Callback to tell us that save-yourself has completed. - */ --/*ARGSUSED*/ - static void - xsmp_save_complete(smc_conn, client_data) -- SmcConn smc_conn; -- SmPointer client_data; -+ SmcConn smc_conn UNUSED; -+ SmPointer client_data UNUSED; - { - xsmp.save_yourself = False; - } -@@ -6675,11 +6747,10 @@ - * Callback to tell us that an instigated shutdown was cancelled - * (maybe even by us) - */ --/*ARGSUSED*/ - static void - xsmp_shutdown_cancelled(smc_conn, client_data) - SmcConn smc_conn; -- SmPointer client_data; -+ SmPointer client_data UNUSED; - { - if (xsmp.save_yourself) - SmcSaveYourselfDone(smc_conn, True); -@@ -6691,13 +6762,12 @@ - /* - * Callback to tell us that a new ICE connection has been established. - */ --/*ARGSUSED*/ - static void - xsmp_ice_connection(iceConn, clientData, opening, watchData) - IceConn iceConn; -- IcePointer clientData; -+ IcePointer clientData UNUSED; - Bool opening; -- IcePointer *watchData; -+ IcePointer *watchData UNUSED; - { - /* Intercept creation of ICE connection fd */ - if (opening) -@@ -6814,7 +6884,8 @@ - if (xsmp_icefd != -1) - { - SmcCloseConnection(xsmp.smcconn, 0, NULL); -- vim_free(xsmp.clientid); -+ if (xsmp.clientid != NULL) -+ free(xsmp.clientid); - xsmp.clientid = NULL; - xsmp_icefd = -1; - } -diff -Naur vim72.orig/src/os_unix.h vim72/src/os_unix.h ---- vim72.orig/src/os_unix.h 2008-06-17 19:01:17.000000000 +0100 -+++ vim72/src/os_unix.h 2009-07-22 22:54:23.000000000 +0100 -@@ -124,7 +124,7 @@ - # define SIGDUMMYARG 0, 0, (struct sigcontext *)0 - # else - # define SIGPROTOARG (int) --# define SIGDEFARG(s) (s) int s; -+# define SIGDEFARG(s) (s) int s UNUSED; - # define SIGDUMMYARG 0 - # endif - #else -@@ -482,11 +482,6 @@ - # else - int mch_rename __ARGS((const char *src, const char *dest)); - # endif --# ifdef VMS --# define mch_chdir(s) chdir(vms_fixfilename(s)) --# else --# define mch_chdir(s) chdir(s) --# endif - # ifndef VMS - # ifdef __MVS__ - /* on OS390 Unix getenv() doesn't return a pointer to persistent -diff -Naur vim72.orig/src/popupmnu.c vim72/src/popupmnu.c ---- vim72.orig/src/popupmnu.c 2008-07-12 17:28:18.000000000 +0100 -+++ vim72/src/popupmnu.c 2009-07-22 22:54:17.000000000 +0100 -@@ -573,7 +573,7 @@ - { - /* Don't want to sync undo in the current buffer. */ - ++no_u_sync; -- res = do_ecmd(0, NULL, NULL, NULL, ECMD_ONE, 0); -+ res = do_ecmd(0, NULL, NULL, NULL, ECMD_ONE, 0, NULL); - --no_u_sync; - if (res == OK) - { -diff -Naur vim72.orig/src/proto/buffer.pro vim72/src/proto/buffer.pro ---- vim72.orig/src/proto/buffer.pro 2008-08-09 15:31:21.000000000 +0100 -+++ vim72/src/proto/buffer.pro 2009-07-22 22:54:21.000000000 +0100 -@@ -33,17 +33,16 @@ - char_u *getaltfname __ARGS((int errmsg)); - int buflist_add __ARGS((char_u *fname, int flags)); - void buflist_slash_adjust __ARGS((void)); --void buflist_altfpos __ARGS((void)); -+void buflist_altfpos __ARGS((win_T *win)); - int otherfile __ARGS((char_u *ffname)); - void buf_setino __ARGS((buf_T *buf)); - void fileinfo __ARGS((int fullname, int shorthelp, int dont_truncate)); --void col_print __ARGS((char_u *buf, int col, int vcol)); -+void col_print __ARGS((char_u *buf, size_t buflen, int col, int vcol)); - void maketitle __ARGS((void)); - void resettitle __ARGS((void)); - void free_titles __ARGS((void)); - int build_stl_str_hl __ARGS((win_T *wp, char_u *out, size_t outlen, char_u *fmt, int use_sandbox, int fillchar, int maxwidth, struct stl_hlrec *hltab, struct stl_hlrec *tabtab)); --void get_rel_pos __ARGS((win_T *wp, char_u *str)); --int append_arg_number __ARGS((win_T *wp, char_u *buf, int add_file, int maxlen)); -+void get_rel_pos __ARGS((win_T *wp, char_u *buf, int buflen)); - char_u *fix_fname __ARGS((char_u *fname)); - void fname_expand __ARGS((buf_T *buf, char_u **ffname, char_u **sfname)); - char_u *alist_name __ARGS((aentry_T *aep)); -@@ -54,8 +53,8 @@ - void write_viminfo_bufferlist __ARGS((FILE *fp)); - char *buf_spname __ARGS((buf_T *buf)); - void buf_addsign __ARGS((buf_T *buf, int id, linenr_T lnum, int typenr)); --int buf_change_sign_type __ARGS((buf_T *buf, int markId, int typenr)); --int_u buf_getsigntype __ARGS((buf_T *buf, linenr_T lnum, int type)); -+linenr_T buf_change_sign_type __ARGS((buf_T *buf, int markId, int typenr)); -+int buf_getsigntype __ARGS((buf_T *buf, linenr_T lnum, int type)); - linenr_T buf_delsign __ARGS((buf_T *buf, int id)); - int buf_findsign __ARGS((buf_T *buf, int id)); - int buf_findsign_id __ARGS((buf_T *buf, linenr_T lnum)); -diff -Naur vim72.orig/src/proto/edit.pro vim72/src/proto/edit.pro ---- vim72.orig/src/proto/edit.pro 2008-08-09 15:31:24.000000000 +0100 -+++ vim72/src/proto/edit.pro 2009-07-22 22:54:21.000000000 +0100 -@@ -8,7 +8,7 @@ - void backspace_until_column __ARGS((int col)); - int vim_is_ctrl_x_key __ARGS((int c)); - int ins_compl_add_infercase __ARGS((char_u *str, int len, int icase, char_u *fname, int dir, int flags)); --void set_completion __ARGS((int startcol, list_T *list)); -+void set_completion __ARGS((colnr_T startcol, list_T *list)); - void ins_compl_show_pum __ARGS((void)); - char_u *find_word_start __ARGS((char_u *ptr)); - char_u *find_word_end __ARGS((char_u *ptr)); -diff -Naur vim72.orig/src/proto/eval.pro vim72/src/proto/eval.pro ---- vim72.orig/src/proto/eval.pro 2008-08-09 15:31:25.000000000 +0100 -+++ vim72/src/proto/eval.pro 2009-07-22 22:54:18.000000000 +0100 -@@ -17,7 +17,7 @@ - int eval_to_bool __ARGS((char_u *arg, int *error, char_u **nextcmd, int skip)); - char_u *eval_to_string_skip __ARGS((char_u *arg, char_u **nextcmd, int skip)); - int skip_expr __ARGS((char_u **pp)); --char_u *eval_to_string __ARGS((char_u *arg, char_u **nextcmd, int dolist)); -+char_u *eval_to_string __ARGS((char_u *arg, char_u **nextcmd, int convert)); - char_u *eval_to_string_safe __ARGS((char_u *arg, char_u **nextcmd, int use_sandbox)); - int eval_to_number __ARGS((char_u *expr)); - list_T *eval_spell_expr __ARGS((char_u *badword, char_u *expr)); -@@ -46,7 +46,9 @@ - void list_unref __ARGS((list_T *l)); - void list_free __ARGS((list_T *l, int recurse)); - dictitem_T *dict_lookup __ARGS((hashitem_T *hi)); -+char_u *list_find_str __ARGS((list_T *l, long idx)); - int list_append_dict __ARGS((list_T *list, dict_T *dict)); -+int list_append_string __ARGS((list_T *l, char_u *str, int len)); - int garbage_collect __ARGS((void)); - dict_T *dict_alloc __ARGS((void)); - int dict_add_nr_str __ARGS((dict_T *d, char *key, long nr, char_u *str)); -@@ -58,8 +60,10 @@ - void set_vim_var_nr __ARGS((int idx, long val)); - long get_vim_var_nr __ARGS((int idx)); - char_u *get_vim_var_str __ARGS((int idx)); --void set_vcount __ARGS((long count, long count1)); -+list_T *get_vim_var_list __ARGS((int idx)); -+void set_vcount __ARGS((long count, long count1, int set_prevcount)); - void set_vim_var_string __ARGS((int idx, char_u *val, int len)); -+void set_vim_var_list __ARGS((int idx, list_T *val)); - void set_reg_var __ARGS((int c)); - char_u *v_exception __ARGS((char_u *oldval)); - char_u *v_throwpoint __ARGS((char_u *oldval)); -@@ -94,6 +98,7 @@ - void write_viminfo_varlist __ARGS((FILE *fp)); - int store_session_globals __ARGS((FILE *fd)); - void last_set_msg __ARGS((scid_T scriptID)); -+void ex_oldfiles __ARGS((exarg_T *eap)); - int modify_fname __ARGS((char_u *src, int *usedlen, char_u **fnamep, char_u **bufp, int *fnamelen)); - char_u *do_string_sub __ARGS((char_u *str, char_u *pat, char_u *sub, char_u *flags)); - /* vim: set ft=c : */ -diff -Naur vim72.orig/src/proto/ex_cmds.pro vim72/src/proto/ex_cmds.pro ---- vim72.orig/src/proto/ex_cmds.pro 2008-08-09 15:31:25.000000000 +0100 -+++ vim72/src/proto/ex_cmds.pro 2009-07-22 22:54:21.000000000 +0100 -@@ -9,9 +9,9 @@ - void do_bang __ARGS((int addr_count, exarg_T *eap, int forceit, int do_in, int do_out)); - void do_shell __ARGS((char_u *cmd, int flags)); - char_u *make_filter_cmd __ARGS((char_u *cmd, char_u *itmp, char_u *otmp)); --void append_redir __ARGS((char_u *buf, char_u *opt, char_u *fname)); -+void append_redir __ARGS((char_u *buf, int buflen, char_u *opt, char_u *fname)); - int viminfo_error __ARGS((char *errnum, char *message, char_u *line)); --int read_viminfo __ARGS((char_u *file, int want_info, int want_marks, int forceit)); -+int read_viminfo __ARGS((char_u *file, int flags)); - void write_viminfo __ARGS((char_u *file, int forceit)); - int viminfo_readline __ARGS((vir_T *virp)); - char_u *viminfo_readstring __ARGS((vir_T *virp, int off, int convert)); -@@ -27,7 +27,7 @@ - void do_wqall __ARGS((exarg_T *eap)); - int not_writing __ARGS((void)); - int getfile __ARGS((int fnum, char_u *ffname, char_u *sfname, int setpm, linenr_T lnum, int forceit)); --int do_ecmd __ARGS((int fnum, char_u *ffname, char_u *sfname, exarg_T *eap, linenr_T newlnum, int flags)); -+int do_ecmd __ARGS((int fnum, char_u *ffname, char_u *sfname, exarg_T *eap, linenr_T newlnum, int flags, win_T *oldwin)); - void ex_append __ARGS((exarg_T *eap)); - void ex_change __ARGS((exarg_T *eap)); - void ex_z __ARGS((exarg_T *eap)); -@@ -55,5 +55,8 @@ - char_u *sign_get_text __ARGS((int typenr)); - void *sign_get_image __ARGS((int typenr)); - char_u *sign_typenr2name __ARGS((int typenr)); -+void free_signs __ARGS((void)); -+char_u *get_sign_name __ARGS((expand_T *xp, int idx)); -+void set_context_in_sign_cmd __ARGS((expand_T *xp, char_u *arg)); - void ex_drop __ARGS((exarg_T *eap)); - /* vim: set ft=c : */ -diff -Naur vim72.orig/src/proto/ex_getln.pro vim72/src/proto/ex_getln.pro ---- vim72.orig/src/proto/ex_getln.pro 2008-08-09 15:31:28.000000000 +0100 -+++ vim72/src/proto/ex_getln.pro 2009-07-22 22:54:20.000000000 +0100 -@@ -4,6 +4,7 @@ - int text_locked __ARGS((void)); - void text_locked_msg __ARGS((void)); - int curbuf_locked __ARGS((void)); -+int allbuf_locked __ARGS((void)); - char_u *getexline __ARGS((int c, void *dummy, int indent)); - char_u *getexmodeline __ARGS((int promptc, void *dummy, int indent)); - int cmdline_overstrike __ARGS((void)); -@@ -31,7 +32,7 @@ - void set_cmd_context __ARGS((expand_T *xp, char_u *str, int len, int col)); - int expand_cmdline __ARGS((expand_T *xp, char_u *str, int col, int *matchcount, char_u ***matches)); - int ExpandGeneric __ARGS((expand_T *xp, regmatch_T *regmatch, int *num_file, char_u ***file, char_u *((*func)(expand_T *, int)))); --char_u *globpath __ARGS((char_u *path, char_u *file)); -+char_u *globpath __ARGS((char_u *path, char_u *file, int expand_options)); - void init_history __ARGS((void)); - int get_histtype __ARGS((char_u *name)); - void add_to_history __ARGS((int histype, char_u *new_entry, int in_map, int sep)); -diff -Naur vim72.orig/src/proto/gui.pro vim72/src/proto/gui.pro ---- vim72.orig/src/proto/gui.pro 2008-08-09 15:31:56.000000000 +0100 -+++ vim72/src/proto/gui.pro 2009-07-22 22:54:23.000000000 +0100 -@@ -43,6 +43,7 @@ - void gui_create_scrollbar __ARGS((scrollbar_T *sb, int type, win_T *wp)); - scrollbar_T *gui_find_scrollbar __ARGS((long ident)); - void gui_drag_scrollbar __ARGS((scrollbar_T *sb, long value, int still_dragging)); -+void gui_may_update_scrollbars __ARGS((void)); - void gui_update_scrollbars __ARGS((int force)); - int gui_do_scroll __ARGS((void)); - int gui_do_horiz_scroll __ARGS((void)); -diff -Naur vim72.orig/src/proto/if_cscope.pro vim72/src/proto/if_cscope.pro ---- vim72.orig/src/proto/if_cscope.pro 2008-08-09 15:31:33.000000000 +0100 -+++ vim72/src/proto/if_cscope.pro 2009-07-22 22:54:21.000000000 +0100 -@@ -1,4 +1,6 @@ - /* if_cscope.c */ -+char_u *get_cscope_name __ARGS((expand_T *xp, int idx)); -+void set_context_in_cscope_cmd __ARGS((expand_T *xp, char_u *arg, cmdidx_T cmdidx)); - void do_cscope __ARGS((exarg_T *eap)); - void do_scscope __ARGS((exarg_T *eap)); - void do_cstag __ARGS((exarg_T *eap)); -diff -Naur vim72.orig/src/proto/if_mzsch.pro vim72/src/proto/if_mzsch.pro ---- vim72.orig/src/proto/if_mzsch.pro 2004-07-12 09:27:00.000000000 +0100 -+++ vim72/src/proto/if_mzsch.pro 2009-07-22 22:54:22.000000000 +0100 -@@ -15,10 +15,6 @@ - void *mzvim_eval_string __ARGS((char_u *str)); - struct Scheme_Object *mzvim_apply __ARGS((struct Scheme_Object *, int argc, - struct Scheme_Object **)); --int mzthreads_allowed (void); --#ifdef FEAT_GUI_KDE --void timer_proc (void); --void mzscheme_kde_start_timer (void); --void mzscheme_kde_stop_timer (void); --#endif -+int mzthreads_allowed __ARGS((void)); -+void mzscheme_main __ARGS((void)); - /* vim: set ft=c : */ -diff -Naur vim72.orig/src/proto/mark.pro vim72/src/proto/mark.pro ---- vim72.orig/src/proto/mark.pro 2008-08-09 15:31:36.000000000 +0100 -+++ vim72/src/proto/mark.pro 2009-07-22 22:54:17.000000000 +0100 -@@ -26,5 +26,5 @@ - void write_viminfo_filemarks __ARGS((FILE *fp)); - int removable __ARGS((char_u *name)); - int write_viminfo_marks __ARGS((FILE *fp_out)); --void copy_viminfo_marks __ARGS((vir_T *virp, FILE *fp_out, int count, int eof)); -+void copy_viminfo_marks __ARGS((vir_T *virp, FILE *fp_out, int count, int eof, int flags)); - /* vim: set ft=c : */ -diff -Naur vim72.orig/src/proto/mbyte.pro vim72/src/proto/mbyte.pro ---- vim72.orig/src/proto/mbyte.pro 2008-08-09 15:31:41.000000000 +0100 -+++ vim72/src/proto/mbyte.pro 2009-07-22 22:54:22.000000000 +0100 -@@ -7,10 +7,12 @@ - int latin_char2len __ARGS((int c)); - int latin_char2bytes __ARGS((int c, char_u *buf)); - int latin_ptr2len __ARGS((char_u *p)); -+int latin_ptr2len_len __ARGS((char_u *p, int size)); - int utf_char2cells __ARGS((int c)); - int latin_ptr2cells __ARGS((char_u *p)); - int utf_ptr2cells __ARGS((char_u *p)); - int dbcs_ptr2cells __ARGS((char_u *p)); -+int latin_ptr2cells_len __ARGS((char_u *p, int size)); - int latin_char2cells __ARGS((int c)); - int latin_off2cells __ARGS((unsigned off, unsigned max_off)); - int dbcs_off2cells __ARGS((unsigned off, unsigned max_off)); -@@ -85,6 +87,7 @@ - int preedit_get_status __ARGS((void)); - int im_is_preediting __ARGS((void)); - int convert_setup __ARGS((vimconv_T *vcp, char_u *from, char_u *to)); -+int convert_setup_ext __ARGS((vimconv_T *vcp, char_u *from, int from_unicode_is_utf8, char_u *to, int to_unicode_is_utf8)); - int convert_input __ARGS((char_u *ptr, int len, int maxlen)); - int convert_input_safe __ARGS((char_u *ptr, int len, int maxlen, char_u **restp, int *restlenp)); - char_u *string_convert __ARGS((vimconv_T *vcp, char_u *ptr, int *lenp)); -diff -Naur vim72.orig/src/proto/message.pro vim72/src/proto/message.pro ---- vim72.orig/src/proto/message.pro 2008-08-09 15:31:39.000000000 +0100 -+++ vim72/src/proto/message.pro 2009-07-22 22:54:21.000000000 +0100 -@@ -54,6 +54,7 @@ - void msg_clr_cmdline __ARGS((void)); - int msg_end __ARGS((void)); - void msg_check __ARGS((void)); -+int redirecting __ARGS((void)); - void verbose_enter __ARGS((void)); - void verbose_leave __ARGS((void)); - void verbose_enter_scroll __ARGS((void)); -diff -Naur vim72.orig/src/proto/misc2.pro vim72/src/proto/misc2.pro ---- vim72.orig/src/proto/misc2.pro 2008-08-09 15:31:40.000000000 +0100 -+++ vim72/src/proto/misc2.pro 2009-07-22 22:54:18.000000000 +0100 -@@ -59,7 +59,7 @@ - int handle_x_keys __ARGS((int key)); - char_u *get_special_key_name __ARGS((int c, int modifiers)); - int trans_special __ARGS((char_u **srcp, char_u *dst, int keycode)); --int find_special_key __ARGS((char_u **srcp, int *modp, int keycode)); -+int find_special_key __ARGS((char_u **srcp, int *modp, int keycode, int keep_x_key)); - int extract_modifiers __ARGS((int key, int *modp)); - int find_special_key_in_table __ARGS((int c)); - int get_special_key_code __ARGS((char_u *name)); -diff -Naur vim72.orig/src/proto/netbeans.pro vim72/src/proto/netbeans.pro ---- vim72.orig/src/proto/netbeans.pro 2008-08-09 15:31:56.000000000 +0100 -+++ vim72/src/proto/netbeans.pro 2009-07-22 22:54:19.000000000 +0100 -@@ -11,7 +11,7 @@ - void netbeans_frame_moved __ARGS((int new_x, int new_y)); - void netbeans_file_activated __ARGS((buf_T *bufp)); - void netbeans_file_opened __ARGS((buf_T *bufp)); --void netbeans_file_closed __ARGS((buf_T *bufp)); -+void netbeans_file_killed __ARGS((buf_T *bufp)); - void netbeans_inserted __ARGS((buf_T *bufp, linenr_T linenr, colnr_T col, char_u *txt, int newlen)); - void netbeans_removed __ARGS((buf_T *bufp, linenr_T linenr, colnr_T col, long len)); - void netbeans_unmodified __ARGS((buf_T *bufp)); -diff -Naur vim72.orig/src/proto/option.pro vim72/src/proto/option.pro ---- vim72.orig/src/proto/option.pro 2008-08-09 15:31:43.000000000 +0100 -+++ vim72/src/proto/option.pro 2009-07-22 22:54:24.000000000 +0100 -@@ -29,6 +29,7 @@ - int makefoldset __ARGS((FILE *fd)); - void clear_termoptions __ARGS((void)); - void free_termoptions __ARGS((void)); -+void free_one_termoption __ARGS((char_u *var)); - void set_term_defaults __ARGS((void)); - void comp_col __ARGS((void)); - char_u *get_equalprg __ARGS((void)); -@@ -44,6 +45,7 @@ - void set_context_in_set_cmd __ARGS((expand_T *xp, char_u *arg, int opt_flags)); - int ExpandSettings __ARGS((expand_T *xp, regmatch_T *regmatch, int *num_file, char_u ***file)); - int ExpandOldSetting __ARGS((int *num_file, char_u ***file)); -+int langmap_adjust_mb __ARGS((int c)); - int has_format_option __ARGS((int x)); - int shortmess __ARGS((int x)); - void vimrc_found __ARGS((char_u *fname, char_u *envname)); -diff -Naur vim72.orig/src/proto/os_unix.pro vim72/src/proto/os_unix.pro ---- vim72.orig/src/proto/os_unix.pro 2008-08-09 15:31:44.000000000 +0100 -+++ vim72/src/proto/os_unix.pro 2009-07-22 22:54:23.000000000 +0100 -@@ -1,4 +1,5 @@ - /* os_unix.c */ -+int mch_chdir __ARGS((char *path)); - void mch_write __ARGS((char_u *s, int len)); - int mch_inchar __ARGS((char_u *buf, int maxlen, long wtime, int tb_change_cnt)); - int mch_char_avail __ARGS((void)); -diff -Naur vim72.orig/src/proto/spell.pro vim72/src/proto/spell.pro ---- vim72.orig/src/proto/spell.pro 2008-08-09 15:31:48.000000000 +0100 -+++ vim72/src/proto/spell.pro 2009-07-22 22:54:21.000000000 +0100 -@@ -22,5 +22,5 @@ - char_u *spell_to_word_end __ARGS((char_u *start, buf_T *buf)); - int spell_word_start __ARGS((int startcol)); - void spell_expand_check_cap __ARGS((colnr_T col)); --int expand_spelling __ARGS((linenr_T lnum, int col, char_u *pat, char_u ***matchp)); -+int expand_spelling __ARGS((linenr_T lnum, char_u *pat, char_u ***matchp)); - /* vim: set ft=c : */ -diff -Naur vim72.orig/src/proto/ui.pro vim72/src/proto/ui.pro ---- vim72.orig/src/proto/ui.pro 2008-08-09 15:31:52.000000000 +0100 -+++ vim72/src/proto/ui.pro 2009-07-22 22:54:23.000000000 +0100 -@@ -48,6 +48,7 @@ - void open_app_context __ARGS((void)); - void x11_setup_atoms __ARGS((Display *dpy)); - void clip_x11_request_selection __ARGS((Widget myShell, Display *dpy, VimClipboard *cbd)); -+void yank_cut_buffer0 __ARGS((Display *dpy, VimClipboard *cbd)); - void clip_x11_lose_selection __ARGS((Widget myShell, VimClipboard *cbd)); - int clip_x11_own_selection __ARGS((Widget myShell, VimClipboard *cbd)); - void clip_x11_set_selection __ARGS((VimClipboard *cbd)); -diff -Naur vim72.orig/src/proto/window.pro vim72/src/proto/window.pro ---- vim72.orig/src/proto/window.pro 2008-08-09 15:31:54.000000000 +0100 -+++ vim72/src/proto/window.pro 2009-07-22 22:54:23.000000000 +0100 -@@ -1,6 +1,7 @@ - /* window.c */ - void do_window __ARGS((int nchar, long Prenum, int xchar)); - int win_split __ARGS((int size, int flags)); -+int win_split_ins __ARGS((int size, int flags, win_T *newwin, int dir)); - int win_valid __ARGS((win_T *win)); - int win_count __ARGS((void)); - int make_windows __ARGS((int count, int vertical)); -@@ -10,9 +11,12 @@ - void win_close __ARGS((win_T *win, int free_buf)); - void win_close_othertab __ARGS((win_T *win, int free_buf, tabpage_T *tp)); - void win_free_all __ARGS((void)); -+win_T *winframe_remove __ARGS((win_T *win, int *dirp, tabpage_T *tp)); - void close_others __ARGS((int message, int forceit)); - void curwin_init __ARGS((void)); -+void win_init_empty __ARGS((win_T *wp)); - int win_alloc_first __ARGS((void)); -+void win_alloc_aucmd_win __ARGS((void)); - void win_init_size __ARGS((void)); - void free_tabpage __ARGS((tabpage_T *tp)); - int win_new_tabpage __ARGS((int after)); -@@ -30,6 +34,8 @@ - void win_enter __ARGS((win_T *wp, int undo_sync)); - win_T *buf_jump_open_win __ARGS((buf_T *buf)); - win_T *buf_jump_open_tab __ARGS((buf_T *buf)); -+void win_append __ARGS((win_T *after, win_T *wp)); -+void win_remove __ARGS((win_T *wp, tabpage_T *tp)); - int win_alloc_lines __ARGS((win_T *wp)); - void win_free_lsize __ARGS((win_T *wp)); - void shell_new_rows __ARGS((void)); -@@ -58,6 +64,8 @@ - int min_rows __ARGS((void)); - int only_one_window __ARGS((void)); - void check_lnums __ARGS((int do_curwin)); -+void make_snapshot __ARGS((int idx)); -+void restore_snapshot __ARGS((int idx, int close_curwin)); - int win_hasvertsplit __ARGS((void)); - int match_add __ARGS((win_T *wp, char_u *grp, char_u *pat, int prio, int id)); - int match_delete __ARGS((win_T *wp, int id, int perr)); -diff -Naur vim72.orig/src/pty.c vim72/src/pty.c ---- vim72.orig/src/pty.c 2008-06-21 19:52:58.000000000 +0100 -+++ vim72/src/pty.c 2009-07-22 22:54:16.000000000 +0100 -@@ -270,9 +270,10 @@ - } - #endif - --#if defined(HAVE_SVR4_PTYS) && !defined(PTY_DONE) && !defined(hpux) -+#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! */ -+/* 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) -diff -Naur vim72.orig/src/quickfix.c vim72/src/quickfix.c ---- vim72.orig/src/quickfix.c 2008-07-18 13:53:02.000000000 +0100 -+++ vim72/src/quickfix.c 2009-07-22 22:54:23.000000000 +0100 -@@ -1419,7 +1419,9 @@ - int opened_window = FALSE; - win_T *win; - win_T *altwin; -+ int flags; - #endif -+ win_T *oldwin = curwin; - int print_message = TRUE; - int len; - #ifdef FEAT_FOLDING -@@ -1530,7 +1532,6 @@ - if (qf_ptr->qf_type == 1 && (!curwin->w_buffer->b_help || cmdmod.tab != 0)) - { - win_T *wp; -- int n; - - if (cmdmod.tab != 0) - wp = NULL; -@@ -1546,13 +1547,16 @@ - * Split off help window; put it at far top if no position - * specified, the current window is vertically split and narrow. - */ -- n = WSP_HELP; -+ flags = WSP_HELP; - # ifdef FEAT_VERTSPLIT - if (cmdmod.split == 0 && curwin->w_width != Columns - && curwin->w_width < 80) -- n |= WSP_TOP; -+ flags |= WSP_TOP; - # endif -- if (win_split(0, n) == FAIL) -+ if (qi != &ql_info) -+ flags |= WSP_NEWLOC; /* don't copy the location list */ -+ -+ if (win_split(0, flags) == FAIL) - goto theend; - opened_window = TRUE; /* close it when fail */ - -@@ -1562,7 +1566,6 @@ - if (qi != &ql_info) /* not a quickfix list */ - { - /* The new window should use the supplied location list */ -- qf_free_all(curwin); - curwin->w_llist = qi; - qi->qf_refcount++; - } -@@ -1609,10 +1612,11 @@ - { - goto_tabpage_win(tp, wp); - usable_win = 1; -- break; -+ goto win_found; - } - } - } -+win_found: - - /* - * If there is only one window and it is the quickfix window, create a -@@ -1622,7 +1626,10 @@ - { - ll_ref = curwin->w_llist_ref; - -- if (win_split(0, WSP_ABOVE) == FAIL) -+ flags = WSP_ABOVE; -+ if (ll_ref != NULL) -+ flags |= WSP_NEWLOC; -+ if (win_split(0, flags) == FAIL) - goto failed; /* not enough room for window */ - opened_window = TRUE; /* close it when fail */ - p_swb = empty_option; /* don't split again */ -@@ -1634,7 +1641,6 @@ - { - /* The new window should use the location list from the - * location list window */ -- qf_free_all(curwin); - curwin->w_llist = ll_ref; - ll_ref->qf_refcount++; - } -@@ -1744,7 +1750,8 @@ - } - else - ok = do_ecmd(qf_ptr->qf_fnum, NULL, NULL, NULL, (linenr_T)1, -- ECMD_HIDE + ECMD_SET_HELP); -+ ECMD_HIDE + ECMD_SET_HELP, -+ oldwin == curwin ? curwin : NULL); - } - else - ok = buflist_getfile(qf_ptr->qf_fnum, -@@ -2233,7 +2240,6 @@ - * ":cclose": close the window showing the list of errors. - * ":lclose": close the window showing the location list - */ --/*ARGSUSED*/ - void - ex_cclose(eap) - exarg_T *eap; -@@ -2267,6 +2273,7 @@ - win_T *win; - tabpage_T *prevtab = curtab; - buf_T *qf_buf; -+ win_T *oldwin = curwin; - - if (eap->cmdidx == CMD_lopen || eap->cmdidx == CMD_lwindow) - { -@@ -2307,15 +2314,12 @@ - if (eap->cmdidx == CMD_copen || eap->cmdidx == CMD_cwindow) - /* Create the new window at the very bottom. */ - win_goto(lastwin); -- if (win_split(height, WSP_BELOW) == FAIL) -+ if (win_split(height, WSP_BELOW | WSP_NEWLOC) == FAIL) - return; /* not enough room for window */ - #ifdef FEAT_SCROLLBIND - curwin->w_p_scb = FALSE; - #endif - -- /* Remove the location list for the quickfix window */ -- qf_free_all(curwin); -- - if (eap->cmdidx == CMD_lopen || eap->cmdidx == CMD_lwindow) - { - /* -@@ -2326,20 +2330,28 @@ - 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); -+ ECMD_HIDE + ECMD_OLDBUF, oldwin); - else - { - /* Create a new quickfix buffer */ -- (void)do_ecmd(0, NULL, NULL, NULL, ECMD_ONE, ECMD_HIDE); -+ (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); -- set_option_value((char_u *)"diff", 0L, NULL, OPT_LOCAL); -+#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 -@@ -2600,10 +2612,12 @@ - curbuf->b_p_ma = FALSE; - - #ifdef FEAT_AUTOCMD -+ 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, - FALSE, curbuf); -+ keep_filetype = FALSE; - #endif - - /* make sure it will be redrawn */ -@@ -2759,7 +2773,7 @@ - sprintf((char *)cmd, "%s%s%s", (char *)p_shq, (char *)eap->arg, - (char *)p_shq); - if (*p_sp != NUL) -- append_redir(cmd, p_sp, fname); -+ 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). -@@ -3196,7 +3210,7 @@ - break; - col = regmatch.endpos[0].col - + (col == regmatch.endpos[0].col); -- if (col > STRLEN(ml_get_buf(buf, lnum, FALSE))) -+ if (col > (colnr_T)STRLEN(ml_get_buf(buf, lnum, FALSE))) - break; - } - line_breakcheck(); -@@ -3397,14 +3411,15 @@ - /* Init the options. */ - buf_copy_options(newbuf, BCO_ENTER | BCO_NOHELP); - -- /* set curwin/curbuf to buf and save a few things */ -- aucmd_prepbuf(&aco, newbuf); -+ /* need to open the memfile before putting the buffer in a window */ -+ if (ml_open(newbuf) == OK) -+ { -+ /* 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); -+ /* Need to set the filename for autocommands. */ -+ (void)setfname(curbuf, fname, NULL, FALSE); - -- if (ml_open(curbuf) == OK) -- { - /* Create swap file now to avoid the ATTENTION message. */ - check_need_swap(TRUE); - -@@ -3427,10 +3442,10 @@ - newbuf = curbuf; - } - } -- } - -- /* restore curwin/curbuf and a few other things */ -- aucmd_restbuf(&aco); -+ /* restore curwin/curbuf and a few other things */ -+ aucmd_restbuf(&aco); -+ } - - if (!buf_valid(newbuf)) - return NULL; -diff -Naur vim72.orig/src/regexp.c vim72/src/regexp.c ---- vim72.orig/src/regexp.c 2008-08-07 20:58:50.000000000 +0100 -+++ vim72/src/regexp.c 2009-07-22 22:54:21.000000000 +0100 -@@ -471,7 +471,7 @@ - - if ((*pp)[1] == ':') - { -- for (i = 0; i < sizeof(class_names) / sizeof(*class_names); ++i) -+ for (i = 0; i < (int)(sizeof(class_names) / sizeof(*class_names)); ++i) - if (STRNCMP(*pp + 2, class_names[i], STRLEN(class_names[i])) == 0) - { - *pp += STRLEN(class_names[i]) + 2; -@@ -3362,12 +3362,11 @@ - * Match a regexp against a string ("line" points to the string) or multiple - * lines ("line" is NULL, use reg_getline()). - */ --/*ARGSUSED*/ - static long - vim_regexec_both(line, col, tm) - char_u *line; - colnr_T col; /* column to start looking for match */ -- proftime_T *tm; /* timeout limit or NULL */ -+ proftime_T *tm UNUSED; /* timeout limit or NULL */ - { - regprog_T *prog; - char_u *s; -@@ -4532,7 +4531,7 @@ - cleanup_subexpr(); - if (!REG_MULTI) /* Single-line regexp */ - { -- if (reg_endp[no] == NULL) -+ if (reg_startp[no] == NULL || reg_endp[no] == NULL) - { - /* Backref was not set: Match an empty string. */ - len = 0; -@@ -4548,7 +4547,7 @@ - } - else /* Multi-line regexp */ - { -- if (reg_endpos[no].lnum < 0) -+ if (reg_startpos[no].lnum < 0 || reg_endpos[no].lnum < 0) - { - /* Backref was not set: Match an empty string. */ - len = 0; -@@ -7279,13 +7278,11 @@ - } - else - { -- if (submatch_match->endp[no] == NULL) -+ s = submatch_match->startp[no]; -+ if (s == NULL || submatch_match->endp[no] == NULL) - retval = NULL; - else -- { -- s = submatch_match->startp[no]; - retval = vim_strnsave(s, (int)(submatch_match->endp[no] - s)); -- } - } - - return retval; -diff -Naur vim72.orig/src/screen.c vim72/src/screen.c ---- vim72.orig/src/screen.c 2008-07-24 15:45:07.000000000 +0100 -+++ vim72/src/screen.c 2009-07-22 22:54:23.000000000 +0100 -@@ -270,11 +270,10 @@ - * Note that when also inserting/deleting lines w_redraw_top and w_redraw_bot - * may become invalid and the whole window will have to be redrawn. - */ --/*ARGSUSED*/ - void - redrawWinline(lnum, invalid) - linenr_T lnum; -- int invalid; /* window line height is invalid now */ -+ int invalid UNUSED; /* window line height is invalid now */ - { - #ifdef FEAT_FOLDING - int i; -@@ -2413,7 +2412,7 @@ - && (lnume < bot->lnum - || (lnume == bot->lnum - && (bot->col - (*p_sel == 'e')) -- >= STRLEN(ml_get_buf(wp->w_buffer, lnume, FALSE))))))) -+ >= (colnr_T)STRLEN(ml_get_buf(wp->w_buffer, lnume, FALSE))))))) - { - if (VIsual_mode == Ctrl_V) - { -@@ -2439,9 +2438,17 @@ - - #ifdef FEAT_SYN_HL - /* Show 'cursorcolumn' in the fold line. */ -- if (wp->w_p_cuc && (int)wp->w_virtcol + txtcol < W_WIDTH(wp)) -- ScreenAttrs[off + wp->w_virtcol + txtcol] = hl_combine_attr( -- ScreenAttrs[off + wp->w_virtcol + txtcol], hl_attr(HLF_CUC)); -+ if (wp->w_p_cuc) -+ { -+ txtcol += wp->w_virtcol; -+ if (wp->w_p_wrap) -+ txtcol -= wp->w_skipcol; -+ else -+ txtcol -= wp->w_leftcol; -+ if (txtcol >= 0 && txtcol < W_WIDTH(wp)) -+ ScreenAttrs[off + txtcol] = hl_combine_attr( -+ ScreenAttrs[off + txtcol], hl_attr(HLF_CUC)); -+ } - #endif - - SCREEN_LINE(row + W_WINROW(wp), W_WINCOL(wp), (int)W_WIDTH(wp), -@@ -2541,14 +2548,13 @@ - * - * Return the number of last row the line occupies. - */ --/* ARGSUSED */ - static int - win_line(wp, lnum, startrow, endrow, nochange) - win_T *wp; - linenr_T lnum; - int startrow; - int endrow; -- int nochange; /* not updating for changed text */ -+ int nochange UNUSED; /* not updating for changed text */ - { - int col; /* visual column on screen */ - unsigned off; /* offset in ScreenLines/ScreenAttrs */ -@@ -2588,6 +2594,7 @@ - int noinvcur = FALSE; /* don't invert the cursor */ - #ifdef FEAT_VISUAL - pos_T *top, *bot; -+ int lnum_in_visual_area = FALSE; - #endif - pos_T pos; - long v; -@@ -2784,9 +2791,10 @@ - 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 >= top->lnum && lnum <= bot->lnum) -+ if (lnum_in_visual_area) - { - fromcol = wp->w_old_cursor_fcol; - tocol = wp->w_old_cursor_lcol; -@@ -2879,8 +2887,9 @@ - } - else - tocol = MAXCOL; -- if (fromcol == tocol) /* do at least one character */ -- tocol = fromcol + 1; /* happens when past end of line */ -+ /* 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); - } -@@ -3412,6 +3421,7 @@ - && (*mb_ptr2cells)(ptr) > 1) - #endif - || ((int)vcol_prev == fromcol_prev -+ && vcol_prev < vcol /* not at margin */ - && vcol < tocol)) - area_attr = attr; /* start highlighting */ - else if (area_attr != 0 -@@ -3544,7 +3554,8 @@ - /* Use line_attr when not in the Visual or 'incsearch' area - * (area_attr may be 0 when "noinvcur" is set). */ - else if (line_attr != 0 && ((fromcol == -10 && tocol == MAXCOL) -- || (vcol < fromcol || vcol >= tocol))) -+ || vcol < fromcol || vcol_prev < fromcol_prev -+ || vcol >= tocol)) - char_attr = line_attr; - #endif - else -@@ -4106,6 +4117,7 @@ - # endif - (col < W_WIDTH(wp))) - && !(noinvcur -+ && lnum == wp->w_cursor.lnum - && (colnr_T)vcol == wp->w_virtcol))) - && lcs_eol_one >= 0) - { -@@ -4247,7 +4259,7 @@ - * preedit_changed and commit. Thus Vim can't set "im_is_active", use - * im_is_preediting() here. */ - if (xic != NULL -- && lnum == curwin->w_cursor.lnum -+ && lnum == wp->w_cursor.lnum - && (State & INSERT) - && !p_imdisable - && im_is_preediting() -@@ -4256,7 +4268,7 @@ - colnr_T tcol; - - if (preedit_end_col == MAXCOL) -- getvcol(curwin, &(curwin->w_cursor), &tcol, NULL, NULL); -+ getvcol(curwin, &(wp->w_cursor), &tcol, NULL, NULL); - else - tcol = preedit_end_col; - if ((long)preedit_start_col <= vcol && vcol < (long)tcol) -@@ -4353,7 +4365,13 @@ - } - #endif - if (lcs_eol == lcs_eol_one -- && ((area_attr != 0 && vcol == fromcol && c == NUL) -+ && ((area_attr != 0 && vcol == fromcol -+#ifdef FEAT_VISUAL -+ && (VIsual_mode != Ctrl_V -+ || lnum == VIsual.lnum -+ || lnum == curwin->w_cursor.lnum) -+#endif -+ && c == NUL) - #ifdef FEAT_SEARCH_EXTRA - /* highlight 'hlsearch' match at end of line */ - || (prevcol_hl_flag == TRUE -@@ -4447,7 +4465,8 @@ - if (c == NUL) - { - #ifdef FEAT_SYN_HL -- if (eol_hl_off > 0 && vcol - eol_hl_off == (long)wp->w_virtcol) -+ if (eol_hl_off > 0 && vcol - eol_hl_off == (long)wp->w_virtcol -+ && lnum == wp->w_cursor.lnum) - { - /* highlight last char after line */ - --col; -@@ -4549,7 +4568,8 @@ - * highlight the cursor position itself. */ - if (wp->w_p_cuc && vcol == (long)wp->w_virtcol - && lnum != wp->w_cursor.lnum -- && draw_state == WL_LINE) -+ && draw_state == WL_LINE -+ && !lnum_in_visual_area) - { - vcol_save_attr = char_attr; - char_attr = hl_combine_attr(char_attr, hl_attr(HLF_CUC)); -@@ -4652,7 +4672,7 @@ - --n_skip; - - /* Only advance the "vcol" when after the 'number' column. */ -- if (draw_state >= WL_SBR -+ if (draw_state > WL_NR - #ifdef FEAT_DIFF - && filler_todo <= 0 - #endif -@@ -5119,8 +5139,8 @@ - #endif - - #if defined(FEAT_GUI) || defined(UNIX) -- /* The bold trick makes a single row of pixels appear in the next -- * character. When a bold character is removed, the next -+ /* The bold trick makes a single column of pixels appear in the -+ * next character. When a bold character is removed, the next - * character should be redrawn too. This happens for our own GUI - * and for some xterms. */ - if ( -@@ -5723,6 +5743,13 @@ - int fillchar; - int attr; - int this_ru_col; -+ static int busy = FALSE; -+ -+ /* It's possible to get here recursively when 'statusline' (indirectly) -+ * invokes ":redrawstatus". Simply ignore the call then. */ -+ if (busy) -+ return; -+ busy = TRUE; - - wp->w_redr_status = FALSE; - if (wp->w_status_height == 0) -@@ -5861,6 +5888,7 @@ - attr); - } - #endif -+ busy = FALSE; - } - - #ifdef FEAT_STL_OPT -@@ -6076,7 +6104,7 @@ - fillchar, maxwidth, hltab, tabtab); - len = (int)STRLEN(buf); - -- while (width < maxwidth && len < sizeof(buf) - 1) -+ while (width < maxwidth && len < (int)sizeof(buf) - 1) - { - #ifdef FEAT_MBYTE - len += (*mb_char2bytes)(fillchar, buf + len); -@@ -6263,9 +6291,15 @@ - int pcc[MAX_MCO]; - # endif - #endif -+#if defined(FEAT_MBYTE) || defined(FEAT_GUI) || defined(UNIX) -+ int force_redraw_this; -+ int force_redraw_next = FALSE; -+#endif -+ int need_redraw; - - if (ScreenLines == NULL || row >= screen_Rows) /* safety check */ - return; -+ off = LineOffset[row] + col; - - #ifdef FEAT_MBYTE - /* When drawing over the right halve of a double-wide char clear out the -@@ -6275,10 +6309,21 @@ - && !gui.in_use - # endif - && mb_fix_col(col, row) != col) -- screen_puts_len((char_u *)" ", 1, row, col - 1, 0); -+ { -+ ScreenLines[off - 1] = ' '; -+ ScreenAttrs[off - 1] = 0; -+ if (enc_utf8) -+ { -+ ScreenLinesUC[off - 1] = 0; -+ ScreenLinesC[0][off - 1] = 0; -+ } -+ /* redraw the previous cell, make it empty */ -+ screen_char(off - 1, row, col - 1); -+ /* force the cell at "col" to be redrawn */ -+ force_redraw_next = TRUE; -+ } - #endif - -- off = LineOffset[row] + col; - #ifdef FEAT_MBYTE - max_off = LineOffset[row] + screen_Columns; - #endif -@@ -6342,7 +6387,12 @@ - } - #endif - -- if (ScreenLines[off] != c -+#if defined(FEAT_MBYTE) || defined(FEAT_GUI) || defined(UNIX) -+ force_redraw_this = force_redraw_next; -+ force_redraw_next = FALSE; -+#endif -+ -+ need_redraw = ScreenLines[off] != c - #ifdef FEAT_MBYTE - || (mbyte_cells == 2 - && ScreenLines[off + 1] != (enc_dbcs ? ptr[1] : 0)) -@@ -6350,24 +6400,24 @@ - && c == 0x8e - && ScreenLines2[off] != ptr[1]) - || (enc_utf8 -- && (ScreenLinesUC[off] != (u8char_T)u8c -+ && (ScreenLinesUC[off] != (u8char_T)(c >= 0x80 ? u8c : 0) - || screen_comp_differs(off, u8cc))) - #endif - || ScreenAttrs[off] != attr -- || exmode_active -+ || exmode_active; -+ -+ if (need_redraw -+#if defined(FEAT_MBYTE) || defined(FEAT_GUI) || defined(UNIX) -+ || force_redraw_this -+#endif - ) - { - #if defined(FEAT_GUI) || defined(UNIX) - /* The bold trick makes a single row of pixels appear in the next - * character. When a bold character is removed, the next - * character should be redrawn too. This happens for our own GUI -- * and for some xterms. -- * Force the redraw by setting the attribute to a different value -- * than "attr", the contents of ScreenLines[] may be needed by -- * mb_off2cells() further on. -- * Don't do this for the last drawn character, because the next -- * character may not be redrawn. */ -- if ( -+ * and for some xterms. */ -+ if (need_redraw && ScreenLines[off] != ' ' && ( - # ifdef FEAT_GUI - gui.in_use - # endif -@@ -6377,23 +6427,14 @@ - # ifdef UNIX - term_is_xterm - # endif -- ) -+ )) - { -- int n; -+ int n = ScreenAttrs[off]; - -- n = ScreenAttrs[off]; --# ifdef FEAT_MBYTE -- if (col + mbyte_cells < screen_Columns -- && (n > HL_ALL || (n & HL_BOLD)) -- && (len < 0 ? ptr[mbyte_blen] != NUL -- : ptr + mbyte_blen < text + len)) -- ScreenAttrs[off + mbyte_cells] = attr + 1; --# else -- if (col + 1 < screen_Columns -- && (n > HL_ALL || (n & HL_BOLD)) -- && (len < 0 ? ptr[1] != NUL : ptr + 1 < text + len)) -- ScreenLines[off + 1] = 0; --# endif -+ if (n > HL_ALL) -+ n = syn_attr2attr(n); -+ if (n & HL_BOLD) -+ force_redraw_next = TRUE; - } - #endif - #ifdef FEAT_MBYTE -@@ -6480,6 +6521,20 @@ - ++ptr; - } - } -+ -+#if defined(FEAT_MBYTE) || defined(FEAT_GUI) || defined(UNIX) -+ /* If we detected the next character needs to be redrawn, but the text -+ * doesn't extend up to there, update the character here. */ -+ if (force_redraw_next && col < screen_Columns) -+ { -+# ifdef FEAT_MBYTE -+ if (enc_dbcs != 0 && dbcs_off2cells(off, max_off) > 1) -+ screen_char_2(off, row, col); -+ else -+# endif -+ screen_char(off, row, col); -+ } -+#endif - } - - #ifdef FEAT_SEARCH_EXTRA -@@ -7356,7 +7411,11 @@ - #endif - static int entered = FALSE; /* avoid recursiveness */ - static int done_outofmem_msg = FALSE; /* did outofmem message */ -+#ifdef FEAT_AUTOCMD -+ int retry_count = 0; - -+retry: -+#endif - /* - * Allocation of the screen buffers is done only when the size changes and - * when Rows and Columns have been set and we have started doing full -@@ -7440,10 +7499,17 @@ - { - outofmem = TRUE; - #ifdef FEAT_WINDOWS -- break; -+ goto give_up; - #endif - } - } -+#ifdef FEAT_AUTOCMD -+ if (aucmd_win != NULL && win_alloc_lines(aucmd_win) == FAIL) -+ outofmem = TRUE; -+#endif -+#ifdef FEAT_WINDOWS -+give_up: -+#endif - - #ifdef FEAT_MBYTE - for (i = 0; i < p_mco; ++i) -@@ -7628,8 +7694,17 @@ - --RedrawingDisabled; - - #ifdef FEAT_AUTOCMD -- if (starting == 0) -+ /* -+ * Do not apply autocommands more than 3 times to avoid an endless loop -+ * in case applying autocommands always changes Rows or Columns. -+ */ -+ if (starting == 0 && ++retry_count <= 3) -+ { - apply_autocmds(EVENT_VIMRESIZED, NULL, NULL, FALSE, curbuf); -+ /* In rare cases, autocommands may have altered Rows or Columns, -+ * jump back to check if we need to allocate the screen again. */ -+ goto retry; -+ } - #endif - } - -@@ -8590,7 +8665,6 @@ - * - * Return OK for success, FAIL if the lines are not deleted. - */ --/*ARGSUSED*/ - int - screen_del_lines(off, row, line_count, end, force, wp) - int off; -@@ -8598,7 +8672,7 @@ - int line_count; - int end; - int force; /* even when line_count > p_ttyscroll */ -- win_T *wp; /* NULL or window to use width from */ -+ win_T *wp UNUSED; /* NULL or window to use width from */ - { - int j; - int i; -@@ -9416,13 +9490,15 @@ - win_T *wp; - int always; - { -- char_u buffer[70]; -+#define RULER_BUF_LEN 70 -+ char_u buffer[RULER_BUF_LEN]; - int row; - int fillchar; - int attr; - int empty_line = FALSE; - colnr_T virtcol; - int i; -+ size_t len; - int o; - #ifdef FEAT_VERTSPLIT - int this_ru_col; -@@ -9537,11 +9613,12 @@ - * Some sprintfs return the length, some return a pointer. - * To avoid portability problems we use strlen() here. - */ -- sprintf((char *)buffer, "%ld,", -+ vim_snprintf((char *)buffer, RULER_BUF_LEN, "%ld,", - (wp->w_buffer->b_ml.ml_flags & ML_EMPTY) - ? 0L - : (long)(wp->w_cursor.lnum)); -- col_print(buffer + STRLEN(buffer), -+ len = STRLEN(buffer); -+ col_print(buffer + len, RULER_BUF_LEN - len, - empty_line ? 0 : (int)wp->w_cursor.col + 1, - (int)virtcol + 1); - -@@ -9551,7 +9628,7 @@ - * screen up on some terminals). - */ - i = (int)STRLEN(buffer); -- get_rel_pos(wp, buffer + i + 1); -+ get_rel_pos(wp, buffer + i + 1, RULER_BUF_LEN - i - 1); - o = i + vim_strsize(buffer + i + 1); - #ifdef FEAT_WINDOWS - if (wp->w_status_height == 0) /* can't use last char of screen */ -@@ -9578,7 +9655,7 @@ - buffer[i++] = fillchar; - ++o; - } -- get_rel_pos(wp, buffer + i); -+ get_rel_pos(wp, buffer + i, RULER_BUF_LEN - i); - } - /* Truncate at window boundary. */ - #ifdef FEAT_MBYTE -diff -Naur vim72.orig/src/search.c vim72/src/search.c ---- vim72.orig/src/search.c 2008-07-13 19:18:27.000000000 +0100 -+++ vim72/src/search.c 2009-07-22 22:54:22.000000000 +0100 -@@ -345,6 +345,15 @@ - { - vim_free(spats[0].pat); - vim_free(spats[1].pat); -+ -+# ifdef FEAT_RIGHTLEFT -+ if (mr_pattern_alloced) -+ { -+ vim_free(mr_pattern); -+ mr_pattern_alloced = FALSE; -+ mr_pattern = NULL; -+ } -+# endif - } - #endif - -@@ -513,7 +522,6 @@ - * When FEAT_EVAL is defined, returns the index of the first matching - * subpattern plus one; one if there was none. - */ --/*ARGSUSED*/ - int - searchit(win, buf, pos, dir, pat, count, options, pat_use, stop_lnum, tm) - win_T *win; /* window to search in; can be NULL for a -@@ -526,7 +534,7 @@ - int options; - int pat_use; /* which pattern to use when "pat" is empty */ - linenr_T stop_lnum; /* stop after this line number when != 0 */ -- proftime_T *tm; /* timeout limit or NULL */ -+ proftime_T *tm UNUSED; /* timeout limit or NULL */ - { - int found; - linenr_T lnum; /* no init to shut up Apollo cc */ -@@ -545,8 +553,6 @@ - int save_called_emsg = called_emsg; - #ifdef FEAT_SEARCH_EXTRA - int break_loop = FALSE; --#else --# define break_loop FALSE - #endif - - if (search_regcomp(pat, RE_SEARCH, pat_use, -@@ -931,7 +937,10 @@ - * twice. - */ - if (!p_ws || stop_lnum != 0 || got_int || called_emsg -- || break_loop || found || loop) -+#ifdef FEAT_SEARCH_EXTRA -+ || break_loop -+#endif -+ || found || loop) - break; - - /* -@@ -949,7 +958,11 @@ - give_warning((char_u *)_(dir == BACKWARD - ? top_bot_msg : bot_top_msg), TRUE); - } -- if (got_int || called_emsg || break_loop) -+ if (got_int || called_emsg -+#ifdef FEAT_SEARCH_EXTRA -+ || break_loop -+#endif -+ ) - break; - } - while (--count > 0 && found); /* stop after count matches or no match */ -@@ -2327,8 +2340,8 @@ - for (col = pos.col; check_prevcol(linep, col, '\\', &col);) - bslcnt++; - } -- /* Only accept a match when 'M' is in 'cpo' or when ecaping is -- * what we expect. */ -+ /* Only accept a match when 'M' is in 'cpo' or when escaping -+ * is what we expect. */ - if (cpo_bsl || (bslcnt & 1) == match_escaped) - { - if (c == initc) -@@ -4514,12 +4527,11 @@ - * Find identifiers or defines in included files. - * if p_ic && (compl_cont_status & CONT_SOL) then ptr must be in lowercase. - */ --/*ARGSUSED*/ - void - find_pattern_in_path(ptr, dir, len, whole, skip_comments, - type, count, action, start_lnum, end_lnum) - char_u *ptr; /* pointer to search pattern */ -- int dir; /* direction of expansion */ -+ int dir UNUSED; /* direction of expansion */ - int len; /* length of search pattern */ - int whole; /* match whole words only */ - int skip_comments; /* don't match inside comments */ -@@ -4663,7 +4675,7 @@ - msg_putchar('\n'); /* cursor below last one */ - if (!got_int) /* don't display if 'q' - typed at "--more--" -- mesage */ -+ message */ - { - msg_home_replace_hl(new_fname); - MSG_PUTS(_(" (includes previously listed match)")); -@@ -4975,7 +4987,7 @@ - || IObuff[i-2] == '!')))) - IObuff[i++] = ' '; - } -- /* copy as much as posible of the new word */ -+ /* copy as much as possible of the new word */ - if (p - aux >= IOSIZE - i) - p = aux + IOSIZE - i - 1; - STRNCPY(IObuff + i, aux, p - aux); -@@ -5010,7 +5022,7 @@ - if (did_show) - msg_putchar('\n'); /* cursor below last one */ - if (!got_int) /* don't display if 'q' typed -- at "--more--" mesage */ -+ at "--more--" message */ - msg_home_replace_hl(curr_fname); - prev_fname = curr_fname; - } -@@ -5092,7 +5104,7 @@ - } - if (action != ACTION_SHOW) - { -- curwin->w_cursor.col = (colnr_T) (startp - line); -+ curwin->w_cursor.col = (colnr_T)(startp - line); - curwin->w_set_curswant = TRUE; - } - -@@ -5119,7 +5131,8 @@ - && action == ACTION_EXPAND - && !(compl_cont_status & CONT_SOL) - #endif -- && *(p = startp + 1)) -+ && *startp != NUL -+ && *(p = startp + 1) != NUL) - goto search_line; - } - line_breakcheck(); -diff -Naur vim72.orig/src/spell.c vim72/src/spell.c ---- vim72.orig/src/spell.c 2008-07-12 20:20:55.000000000 +0100 -+++ vim72/src/spell.c 2009-07-22 22:54:23.000000000 +0100 -@@ -77,7 +77,7 @@ - - /* - * Do the opposite: based on a maximum end score and a known sound score, -- * compute the the maximum word score that can be used. -+ * compute the maximum word score that can be used. - */ - #define MAXSCORE(word_score, sound_score) ((4 * word_score - sound_score) / 3) - -@@ -469,6 +469,7 @@ - garray_T sl_comppat; /* CHECKCOMPOUNDPATTERN items */ - regprog_T *sl_compprog; /* COMPOUNDRULE turned into a regexp progrm - * (NULL when no compounding) */ -+ char_u *sl_comprules; /* all COMPOUNDRULE concatenated (or NULL) */ - char_u *sl_compstartflags; /* flags for first compound word */ - char_u *sl_compallflags; /* all flags for compound words */ - char_u sl_nobreak; /* When TRUE: no spaces between words */ -@@ -625,7 +626,7 @@ - /* 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 -+/* 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) -@@ -839,7 +840,10 @@ - static void slang_clear __ARGS((slang_T *lp)); - static void slang_clear_sug __ARGS((slang_T *lp)); - static void find_word __ARGS((matchinf_T *mip, int mode)); -+static int match_checkcompoundpattern __ARGS((char_u *ptr, int wlen, garray_T *gap)); - static int can_compound __ARGS((slang_T *slang, char_u *word, char_u *flags)); -+static int can_be_compound __ARGS((trystate_T *sp, slang_T *slang, char_u *compflags, int flag)); -+static int match_compoundrule __ARGS((slang_T *slang, char_u *compflags)); - static int valid_word_prefix __ARGS((int totprefcnt, int arridx, int flags, char_u *word, slang_T *slang, int cond_req)); - static void find_prefix __ARGS((matchinf_T *mip, int mode)); - static int fold_more __ARGS((matchinf_T *mip)); -@@ -946,8 +950,8 @@ - */ - #ifndef FEAT_MBYTE - /* Non-multi-byte implementation. */ --# define SPELL_TOFOLD(c) ((c) < 256 ? spelltab.st_fold[c] : (c)) --# define SPELL_TOUPPER(c) ((c) < 256 ? spelltab.st_upper[c] : (c)) -+# define SPELL_TOFOLD(c) ((c) < 256 ? (int)spelltab.st_fold[c] : (c)) -+# define SPELL_TOUPPER(c) ((c) < 256 ? (int)spelltab.st_upper[c] : (c)) - # define SPELL_ISUPPER(c) ((c) < 256 ? spelltab.st_isu[c] : FALSE) - #else - # if defined(HAVE_WCHAR_H) -@@ -958,18 +962,18 @@ - * the "w" library function for characters above 255 if available. */ - # ifdef HAVE_TOWLOWER - # define SPELL_TOFOLD(c) (enc_utf8 && (c) >= 128 ? utf_fold(c) \ -- : (c) < 256 ? spelltab.st_fold[c] : towlower(c)) -+ : (c) < 256 ? (int)spelltab.st_fold[c] : (int)towlower(c)) - # else - # define SPELL_TOFOLD(c) (enc_utf8 && (c) >= 128 ? utf_fold(c) \ -- : (c) < 256 ? spelltab.st_fold[c] : (c)) -+ : (c) < 256 ? (int)spelltab.st_fold[c] : (c)) - # endif - - # ifdef HAVE_TOWUPPER - # define SPELL_TOUPPER(c) (enc_utf8 && (c) >= 128 ? utf_toupper(c) \ -- : (c) < 256 ? spelltab.st_upper[c] : towupper(c)) -+ : (c) < 256 ? (int)spelltab.st_upper[c] : (int)towupper(c)) - # else - # define SPELL_TOUPPER(c) (enc_utf8 && (c) >= 128 ? utf_toupper(c) \ -- : (c) < 256 ? spelltab.st_upper[c] : (c)) -+ : (c) < 256 ? (int)spelltab.st_upper[c] : (c)) - # endif - - # ifdef HAVE_ISWUPPER -@@ -1519,6 +1523,11 @@ - ((unsigned)flags >> 24))) - continue; - -+ /* If there is a match with a CHECKCOMPOUNDPATTERN rule -+ * discard the compound word. */ -+ if (match_checkcompoundpattern(ptr, wlen, &slang->sl_comppat)) -+ continue; -+ - if (mode == FIND_COMPOUND) - { - int capflags; -@@ -1577,6 +1586,11 @@ - if (!can_compound(slang, fword, mip->mi_compflags)) - continue; - } -+ else if (slang->sl_comprules != NULL -+ && !match_compoundrule(slang, mip->mi_compflags)) -+ /* The compound flags collected so far do not match any -+ * COMPOUNDRULE, discard the compounded word. */ -+ continue; - } - - /* Check NEEDCOMPOUND: can't use word without compounding. */ -@@ -1727,6 +1741,39 @@ - } - - /* -+ * Return TRUE if there is a match between the word ptr[wlen] and -+ * CHECKCOMPOUNDPATTERN rules, assuming that we will concatenate with another -+ * word. -+ * A match means that the first part of CHECKCOMPOUNDPATTERN matches at the -+ * end of ptr[wlen] and the second part matches after it. -+ */ -+ static int -+match_checkcompoundpattern(ptr, wlen, gap) -+ char_u *ptr; -+ int wlen; -+ garray_T *gap; /* &sl_comppat */ -+{ -+ int i; -+ char_u *p; -+ int len; -+ -+ for (i = 0; i + 1 < gap->ga_len; i += 2) -+ { -+ p = ((char_u **)gap->ga_data)[i + 1]; -+ if (STRNCMP(ptr + wlen, p, STRLEN(p)) == 0) -+ { -+ /* Second part matches at start of following compound word, now -+ * check if first part matches at end of previous word. */ -+ p = ((char_u **)gap->ga_data)[i]; -+ len = (int)STRLEN(p); -+ if (len <= wlen && STRNCMP(ptr + wlen - len, p, len) == 0) -+ return TRUE; -+ } -+ } -+ return FALSE; -+} -+ -+/* - * Return TRUE if "flags" is a valid sequence of compound flags and "word" - * does not have too many syllables. - */ -@@ -1773,6 +1820,98 @@ - } - - /* -+ * Return TRUE when the sequence of flags in "compflags" plus "flag" can -+ * possibly form a valid compounded word. This also checks the COMPOUNDRULE -+ * lines if they don't contain wildcards. -+ */ -+ static int -+can_be_compound(sp, slang, compflags, flag) -+ trystate_T *sp; -+ slang_T *slang; -+ char_u *compflags; -+ int flag; -+{ -+ /* If the flag doesn't appear in sl_compstartflags or sl_compallflags -+ * then it can't possibly compound. */ -+ if (!byte_in_str(sp->ts_complen == sp->ts_compsplit -+ ? slang->sl_compstartflags : slang->sl_compallflags, flag)) -+ return FALSE; -+ -+ /* If there are no wildcards, we can check if the flags collected so far -+ * possibly can form a match with COMPOUNDRULE patterns. This only -+ * makes sense when we have two or more words. */ -+ if (slang->sl_comprules != NULL && sp->ts_complen > sp->ts_compsplit) -+ { -+ int v; -+ -+ compflags[sp->ts_complen] = flag; -+ compflags[sp->ts_complen + 1] = NUL; -+ v = match_compoundrule(slang, compflags + sp->ts_compsplit); -+ compflags[sp->ts_complen] = NUL; -+ return v; -+ } -+ -+ return TRUE; -+} -+ -+ -+/* -+ * Return TRUE if the compound flags in compflags[] match the start of any -+ * compound rule. This is used to stop trying a compound if the flags -+ * collected so far can't possibly match any compound rule. -+ * Caller must check that slang->sl_comprules is not NULL. -+ */ -+ static int -+match_compoundrule(slang, compflags) -+ slang_T *slang; -+ char_u *compflags; -+{ -+ char_u *p; -+ int i; -+ int c; -+ -+ /* loop over all the COMPOUNDRULE entries */ -+ for (p = slang->sl_comprules; *p != NUL; ++p) -+ { -+ /* loop over the flags in the compound word we have made, match -+ * them against the current rule entry */ -+ for (i = 0; ; ++i) -+ { -+ c = compflags[i]; -+ if (c == NUL) -+ /* found a rule that matches for the flags we have so far */ -+ return TRUE; -+ if (*p == '/' || *p == NUL) -+ break; /* end of rule, it's too short */ -+ if (*p == '[') -+ { -+ int match = FALSE; -+ -+ /* compare against all the flags in [] */ -+ ++p; -+ while (*p != ']' && *p != NUL) -+ if (*p++ == c) -+ match = TRUE; -+ if (!match) -+ break; /* none matches */ -+ } -+ else if (*p != c) -+ break; /* flag of word doesn't match flag in pattern */ -+ ++p; -+ } -+ -+ /* Skip to the next "/", where the next pattern starts. */ -+ p = vim_strchr(p, '/'); -+ if (p == NULL) -+ break; -+ } -+ -+ /* Checked all the rules and none of them match the flags, so there -+ * can't possibly be a compound starting with these flags. */ -+ return FALSE; -+} -+ -+/* - * Return non-zero if the prefix indicated by "arridx" matches with the prefix - * ID in "flags" for the word "word". - * The WF_RAREPFX flag is included in the return value for a rare prefix. -@@ -2237,7 +2376,7 @@ - - /* If we are back at the starting line and there is no match then - * give up. */ -- if (lnum == wp->w_cursor.lnum && !found_one) -+ if (lnum == wp->w_cursor.lnum && (!found_one || wrapped)) - break; - - /* Skip the characters at the start of the next line that were -@@ -2513,9 +2652,11 @@ - lp->sl_midword = NULL; - - vim_free(lp->sl_compprog); -+ vim_free(lp->sl_comprules); - vim_free(lp->sl_compstartflags); - vim_free(lp->sl_compallflags); - lp->sl_compprog = NULL; -+ lp->sl_comprules = NULL; - lp->sl_compstartflags = NULL; - lp->sl_compallflags = NULL; - -@@ -3460,6 +3601,7 @@ - char_u *pp; - char_u *cp; - char_u *ap; -+ char_u *crp; - int cnt; - garray_T *gap; - -@@ -3545,6 +3687,12 @@ - slang->sl_compallflags = ap; - *ap = NUL; - -+ /* And a list of all patterns in their original form, for checking whether -+ * compounding may work in match_compoundrule(). This is freed when we -+ * encounter a wildcard, the check doesn't work then. */ -+ crp = alloc(todo + 1); -+ slang->sl_comprules = crp; -+ - pp = pat; - *pp++ = '^'; - *pp++ = '\\'; -@@ -3587,6 +3735,20 @@ - atstart = 0; - } - } -+ -+ /* Copy flag to "sl_comprules", unless we run into a wildcard. */ -+ if (crp != NULL) -+ { -+ if (c == '+' || c == '*') -+ { -+ vim_free(slang->sl_comprules); -+ slang->sl_comprules = NULL; -+ crp = NULL; -+ } -+ else -+ *crp++ = c; -+ } -+ - if (c == '/') /* slash separates two items */ - { - *pp++ = '\\'; -@@ -3611,6 +3773,9 @@ - *pp++ = '$'; - *pp = NUL; - -+ if (crp != NULL) -+ *crp = NUL; -+ - slang->sl_compprog = vim_regcomp(pat, RE_MAGIC + RE_STRING + RE_STRICT); - vim_free(pat); - if (slang->sl_compprog == NULL) -@@ -4791,13 +4956,16 @@ - * Structure that is used to store the items in the word tree. This avoids - * the need to keep track of each allocated thing, everything is freed all at - * once after ":mkspell" is done. -+ * Note: "sb_next" must be just before "sb_data" to make sure the alignment of -+ * "sb_data" is correct for systems where pointers must be aligned on -+ * pointer-size boundaries and sizeof(pointer) > sizeof(int) (e.g., Sparc). - */ - #define SBLOCKSIZE 16000 /* size of sb_data */ - typedef struct sblock_S sblock_T; - struct sblock_S - { -- sblock_T *sb_next; /* next block in list */ - int sb_used; /* nr of bytes already in use */ -+ sblock_T *sb_next; /* next block in list */ - char_u sb_data[1]; /* data, actually longer */ - }; - -@@ -4915,6 +5083,7 @@ - } spellinfo_T; - - static afffile_T *spell_read_aff __ARGS((spellinfo_T *spin, char_u *fname)); -+static int is_aff_rule __ARGS((char_u **items, int itemcnt, char *rulename, int mincount)); - static void aff_process_flags __ARGS((afffile_T *affile, affentry_T *entry)); - static int spell_info_item __ARGS((char_u *s)); - static unsigned affitem2flag __ARGS((int flagtype, char_u *item, char_u *fname, int lnum)); -@@ -4950,7 +5119,7 @@ - static void put_sugtime __ARGS((spellinfo_T *spin, FILE *fd)); - static int write_vim_spell __ARGS((spellinfo_T *spin, char_u *fname)); - static void clear_node __ARGS((wordnode_T *node)); --static int put_node __ARGS((FILE *fd, wordnode_T *node, int index, int regionmask, int prefixtree)); -+static int put_node __ARGS((FILE *fd, wordnode_T *node, int idx, int regionmask, int prefixtree)); - static void spell_make_sugfile __ARGS((spellinfo_T *spin, char_u *wfname)); - static int sug_filltree __ARGS((spellinfo_T *spin, slang_T *slang)); - static int sug_maketable __ARGS((spellinfo_T *spin)); -@@ -5223,8 +5392,7 @@ - /* Handle non-empty lines. */ - if (itemcnt > 0) - { -- if (STRCMP(items[0], "SET") == 0 && itemcnt == 2 -- && aff->af_enc == NULL) -+ if (is_aff_rule(items, itemcnt, "SET", 2) && aff->af_enc == NULL) - { - #ifdef FEAT_MBYTE - /* Setup for conversion from "ENC" to 'encoding'. */ -@@ -5239,7 +5407,7 @@ - smsg((char_u *)_("Conversion in %s not supported"), fname); - #endif - } -- else if (STRCMP(items[0], "FLAG") == 0 && itemcnt == 2 -+ else if (is_aff_rule(items, itemcnt, "FLAG", 2) - && aff->af_flagtype == AFT_CHAR) - { - if (STRCMP(items[1], "long") == 0) -@@ -5284,69 +5452,71 @@ - spin->si_info = p; - } - } -- else if (STRCMP(items[0], "MIDWORD") == 0 && itemcnt == 2 -+ else if (is_aff_rule(items, itemcnt, "MIDWORD", 2) - && midword == NULL) - { - midword = getroom_save(spin, items[1]); - } -- else if (STRCMP(items[0], "TRY") == 0 && itemcnt == 2) -+ else if (is_aff_rule(items, itemcnt, "TRY", 2)) - { - /* ignored, we look in the tree for what chars may appear */ - } - /* TODO: remove "RAR" later */ -- else if ((STRCMP(items[0], "RAR") == 0 -- || STRCMP(items[0], "RARE") == 0) && itemcnt == 2 -- && aff->af_rare == 0) -+ else if ((is_aff_rule(items, itemcnt, "RAR", 2) -+ || is_aff_rule(items, itemcnt, "RARE", 2)) -+ && aff->af_rare == 0) - { - aff->af_rare = affitem2flag(aff->af_flagtype, items[1], - fname, lnum); - } - /* TODO: remove "KEP" later */ -- else if ((STRCMP(items[0], "KEP") == 0 -- || STRCMP(items[0], "KEEPCASE") == 0) && itemcnt == 2 -+ else if ((is_aff_rule(items, itemcnt, "KEP", 2) -+ || is_aff_rule(items, itemcnt, "KEEPCASE", 2)) - && aff->af_keepcase == 0) - { - aff->af_keepcase = affitem2flag(aff->af_flagtype, items[1], - fname, lnum); - } -- else if (STRCMP(items[0], "BAD") == 0 && itemcnt == 2 -- && aff->af_bad == 0) -+ else if ((is_aff_rule(items, itemcnt, "BAD", 2) -+ || is_aff_rule(items, itemcnt, "FORBIDDENWORD", 2)) -+ && aff->af_bad == 0) - { - aff->af_bad = affitem2flag(aff->af_flagtype, items[1], - fname, lnum); - } -- else if (STRCMP(items[0], "NEEDAFFIX") == 0 && itemcnt == 2 -+ else if (is_aff_rule(items, itemcnt, "NEEDAFFIX", 2) - && aff->af_needaffix == 0) - { - aff->af_needaffix = affitem2flag(aff->af_flagtype, items[1], - fname, lnum); - } -- else if (STRCMP(items[0], "CIRCUMFIX") == 0 && itemcnt == 2 -+ else if (is_aff_rule(items, itemcnt, "CIRCUMFIX", 2) - && aff->af_circumfix == 0) - { - aff->af_circumfix = affitem2flag(aff->af_flagtype, items[1], - fname, lnum); - } -- else if (STRCMP(items[0], "NOSUGGEST") == 0 && itemcnt == 2 -+ else if (is_aff_rule(items, itemcnt, "NOSUGGEST", 2) - && aff->af_nosuggest == 0) - { - aff->af_nosuggest = affitem2flag(aff->af_flagtype, items[1], - fname, lnum); - } -- else if (STRCMP(items[0], "NEEDCOMPOUND") == 0 && itemcnt == 2 -+ else if ((is_aff_rule(items, itemcnt, "NEEDCOMPOUND", 2) -+ || is_aff_rule(items, itemcnt, "ONLYINCOMPOUND", 2)) - && aff->af_needcomp == 0) - { - aff->af_needcomp = affitem2flag(aff->af_flagtype, items[1], - fname, lnum); - } -- else if (STRCMP(items[0], "COMPOUNDROOT") == 0 && itemcnt == 2 -+ else if (is_aff_rule(items, itemcnt, "COMPOUNDROOT", 2) - && aff->af_comproot == 0) - { - aff->af_comproot = affitem2flag(aff->af_flagtype, items[1], - fname, lnum); - } -- else if (STRCMP(items[0], "COMPOUNDFORBIDFLAG") == 0 -- && itemcnt == 2 && aff->af_compforbid == 0) -+ else if (is_aff_rule(items, itemcnt, "COMPOUNDFORBIDFLAG", 2) -+ && aff->af_compforbid == 0) - { - aff->af_compforbid = affitem2flag(aff->af_flagtype, items[1], - fname, lnum); -@@ -5354,8 +5524,8 @@ - smsg((char_u *)_("Defining COMPOUNDFORBIDFLAG after PFX item may give wrong results in %s line %d"), - fname, lnum); - } -- else if (STRCMP(items[0], "COMPOUNDPERMITFLAG") == 0 -- && itemcnt == 2 && aff->af_comppermit == 0) -+ else if (is_aff_rule(items, itemcnt, "COMPOUNDPERMITFLAG", 2) -+ && aff->af_comppermit == 0) - { - aff->af_comppermit = affitem2flag(aff->af_flagtype, items[1], - fname, lnum); -@@ -5363,7 +5533,7 @@ - smsg((char_u *)_("Defining COMPOUNDPERMITFLAG after PFX item may give wrong results in %s line %d"), - fname, lnum); - } -- else if (STRCMP(items[0], "COMPOUNDFLAG") == 0 && itemcnt == 2 -+ else if (is_aff_rule(items, itemcnt, "COMPOUNDFLAG", 2) - && compflags == NULL) - { - /* Turn flag "c" into COMPOUNDRULE compatible string "c+", -@@ -5376,7 +5546,15 @@ - compflags = p; - } - } -- else if (STRCMP(items[0], "COMPOUNDRULE") == 0 && itemcnt == 2) -+ else if (is_aff_rule(items, itemcnt, "COMPOUNDRULES", 2)) -+ { -+ /* We don't use the count, but do check that it's a number and -+ * not COMPOUNDRULE mistyped. */ -+ if (atoi((char *)items[1]) == 0) -+ smsg((char_u *)_("Wrong COMPOUNDRULES value in %s line %d: %s"), -+ fname, lnum, items[1]); -+ } -+ else if (is_aff_rule(items, itemcnt, "COMPOUNDRULE", 2)) - { - /* Concatenate this string to previously defined ones, using a - * slash to separate them. */ -@@ -5395,7 +5573,7 @@ - compflags = p; - } - } -- else if (STRCMP(items[0], "COMPOUNDWORDMAX") == 0 && itemcnt == 2 -+ else if (is_aff_rule(items, itemcnt, "COMPOUNDWORDMAX", 2) - && compmax == 0) - { - compmax = atoi((char *)items[1]); -@@ -5403,7 +5581,7 @@ - smsg((char_u *)_("Wrong COMPOUNDWORDMAX value in %s line %d: %s"), - fname, lnum, items[1]); - } -- else if (STRCMP(items[0], "COMPOUNDMIN") == 0 && itemcnt == 2 -+ else if (is_aff_rule(items, itemcnt, "COMPOUNDMIN", 2) - && compminlen == 0) - { - compminlen = atoi((char *)items[1]); -@@ -5411,7 +5589,7 @@ - smsg((char_u *)_("Wrong COMPOUNDMIN value in %s line %d: %s"), - fname, lnum, items[1]); - } -- else if (STRCMP(items[0], "COMPOUNDSYLMAX") == 0 && itemcnt == 2 -+ else if (is_aff_rule(items, itemcnt, "COMPOUNDSYLMAX", 2) - && compsylmax == 0) - { - compsylmax = atoi((char *)items[1]); -@@ -5419,32 +5597,29 @@ - smsg((char_u *)_("Wrong COMPOUNDSYLMAX value in %s line %d: %s"), - fname, lnum, items[1]); - } -- else if (STRCMP(items[0], "CHECKCOMPOUNDDUP") == 0 && itemcnt == 1) -+ else if (is_aff_rule(items, itemcnt, "CHECKCOMPOUNDDUP", 1)) - { - compoptions |= COMP_CHECKDUP; - } -- else if (STRCMP(items[0], "CHECKCOMPOUNDREP") == 0 && itemcnt == 1) -+ else if (is_aff_rule(items, itemcnt, "CHECKCOMPOUNDREP", 1)) - { - compoptions |= COMP_CHECKREP; - } -- else if (STRCMP(items[0], "CHECKCOMPOUNDCASE") == 0 && itemcnt == 1) -+ else if (is_aff_rule(items, itemcnt, "CHECKCOMPOUNDCASE", 1)) - { - compoptions |= COMP_CHECKCASE; - } -- else if (STRCMP(items[0], "CHECKCOMPOUNDTRIPLE") == 0 -- && itemcnt == 1) -+ else if (is_aff_rule(items, itemcnt, "CHECKCOMPOUNDTRIPLE", 1)) - { - compoptions |= COMP_CHECKTRIPLE; - } -- else if (STRCMP(items[0], "CHECKCOMPOUNDPATTERN") == 0 -- && itemcnt == 2) -+ else if (is_aff_rule(items, itemcnt, "CHECKCOMPOUNDPATTERN", 2)) - { - if (atoi((char *)items[1]) == 0) - smsg((char_u *)_("Wrong CHECKCOMPOUNDPATTERN value in %s line %d: %s"), - fname, lnum, items[1]); - } -- else if (STRCMP(items[0], "CHECKCOMPOUNDPATTERN") == 0 -- && itemcnt == 3) -+ else if (is_aff_rule(items, itemcnt, "CHECKCOMPOUNDPATTERN", 3)) - { - garray_T *gap = &spin->si_comppat; - int i; -@@ -5463,24 +5638,24 @@ - = getroom_save(spin, items[2]); - } - } -- else if (STRCMP(items[0], "SYLLABLE") == 0 && itemcnt == 2 -+ else if (is_aff_rule(items, itemcnt, "SYLLABLE", 2) - && syllable == NULL) - { - syllable = getroom_save(spin, items[1]); - } -- else if (STRCMP(items[0], "NOBREAK") == 0 && itemcnt == 1) -+ else if (is_aff_rule(items, itemcnt, "NOBREAK", 1)) - { - spin->si_nobreak = TRUE; - } -- else if (STRCMP(items[0], "NOSPLITSUGS") == 0 && itemcnt == 1) -+ else if (is_aff_rule(items, itemcnt, "NOSPLITSUGS", 1)) - { - spin->si_nosplitsugs = TRUE; - } -- else if (STRCMP(items[0], "NOSUGFILE") == 0 && itemcnt == 1) -+ else if (is_aff_rule(items, itemcnt, "NOSUGFILE", 1)) - { - spin->si_nosugfile = TRUE; - } -- else if (STRCMP(items[0], "PFXPOSTPONE") == 0 && itemcnt == 1) -+ else if (is_aff_rule(items, itemcnt, "PFXPOSTPONE", 1)) - { - aff->af_pfxpostpone = TRUE; - } -@@ -5771,24 +5946,20 @@ - } - } - } -- else if (STRCMP(items[0], "FOL") == 0 && itemcnt == 2 -- && fol == NULL) -+ else if (is_aff_rule(items, itemcnt, "FOL", 2) && fol == NULL) - { - fol = vim_strsave(items[1]); - } -- else if (STRCMP(items[0], "LOW") == 0 && itemcnt == 2 -- && low == NULL) -+ else if (is_aff_rule(items, itemcnt, "LOW", 2) && low == NULL) - { - low = vim_strsave(items[1]); - } -- else if (STRCMP(items[0], "UPP") == 0 && itemcnt == 2 -- && upp == NULL) -+ else if (is_aff_rule(items, itemcnt, "UPP", 2) && upp == NULL) - { - upp = vim_strsave(items[1]); - } -- else if ((STRCMP(items[0], "REP") == 0 -- || STRCMP(items[0], "REPSAL") == 0) -- && itemcnt == 2) -+ else if (is_aff_rule(items, itemcnt, "REP", 2) -+ || is_aff_rule(items, itemcnt, "REPSAL", 2)) - { - /* Ignore REP/REPSAL count */; - if (!isdigit(*items[1])) -@@ -5819,7 +5990,7 @@ - : &spin->si_rep, items[1], items[2]); - } - } -- else if (STRCMP(items[0], "MAP") == 0 && itemcnt == 2) -+ else if (is_aff_rule(items, itemcnt, "MAP", 2)) - { - /* MAP item or count */ - if (!found_map) -@@ -5856,9 +6027,8 @@ - ga_append(&spin->si_map, '/'); - } - } -- /* Accept "SAL from to" and "SAL from to # comment". */ -- else if (STRCMP(items[0], "SAL") == 0 -- && (itemcnt == 3 || (itemcnt > 3 && items[3][0] == '#'))) -+ /* Accept "SAL from to" and "SAL from to #comment". */ -+ else if (is_aff_rule(items, itemcnt, "SAL", 3)) - { - if (do_sal) - { -@@ -5877,12 +6047,12 @@ - : items[2]); - } - } -- else if (STRCMP(items[0], "SOFOFROM") == 0 && itemcnt == 2 -+ else if (is_aff_rule(items, itemcnt, "SOFOFROM", 2) - && sofofrom == NULL) - { - sofofrom = getroom_save(spin, items[1]); - } -- else if (STRCMP(items[0], "SOFOTO") == 0 && itemcnt == 2 -+ else if (is_aff_rule(items, itemcnt, "SOFOTO", 2) - && sofoto == NULL) - { - sofoto = getroom_save(spin, items[1]); -@@ -5980,7 +6150,7 @@ - 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")); -+ MSG(_("Too many postponed prefixes and/or compound flags")); - } - - if (syllable != NULL) -@@ -6017,6 +6187,22 @@ - } - - /* -+ * Return TRUE when items[0] equals "rulename", there are "mincount" items or -+ * a comment is following after item "mincount". -+ */ -+ static int -+is_aff_rule(items, itemcnt, rulename, mincount) -+ char_u **items; -+ int itemcnt; -+ char *rulename; -+ int mincount; -+{ -+ return (STRCMP(items[0], rulename) == 0 -+ && (itemcnt == mincount -+ || (itemcnt > mincount && items[mincount][0] == '#'))); -+} -+ -+/* - * For affix "entry" move COMPOUNDFORBIDFLAG and COMPOUNDPERMITFLAG from - * ae_flags to ae_comppermit and ae_compforbid. - */ -@@ -7866,7 +8052,7 @@ - /* time_t can be up to 8 bytes in size, more than long_u, thus we - * can't use put_bytes() here. */ - for (i = 7; i >= 0; --i) -- if (i + 1 > sizeof(time_t)) -+ if (i + 1 > (int)sizeof(time_t)) - /* ">>" doesn't work well when shifting more bits than avail */ - putc(0, fd); - else -@@ -7926,6 +8112,8 @@ - char_u *p; - int rr; - int retval = OK; -+ size_t fwv = 1; /* collect return value of fwrite() to avoid -+ warnings from picky compiler */ - - fd = mch_fopen((char *)fname, "w"); - if (fd == NULL) -@@ -7936,11 +8124,11 @@ - - /*
: */ - /* */ -- if (fwrite(VIMSPELLMAGIC, VIMSPELLMAGICL, (size_t)1, fd) != 1) -- { -- EMSG(_(e_write)); -- retval = FAIL; -- } -+ fwv &= fwrite(VIMSPELLMAGIC, VIMSPELLMAGICL, (size_t)1, fd); -+ if (fwv != (size_t)1) -+ /* Catch first write error, don't try writing more. */ -+ goto theend; -+ - putc(VIMSPELLVERSION, fd); /* */ - - /* -@@ -7955,7 +8143,7 @@ - - i = (int)STRLEN(spin->si_info); - put_bytes(fd, (long_u)i, 4); /* */ -- fwrite(spin->si_info, (size_t)i, (size_t)1, fd); /* */ -+ fwv &= fwrite(spin->si_info, (size_t)i, (size_t)1, fd); /* */ - } - - /* SN_REGION: ... -@@ -7966,7 +8154,7 @@ - putc(SNF_REQUIRED, fd); /* */ - l = spin->si_region_count * 2; - put_bytes(fd, (long_u)l, 4); /* */ -- fwrite(spin->si_region_name, (size_t)l, (size_t)1, fd); -+ fwv &= fwrite(spin->si_region_name, (size_t)l, (size_t)1, fd); - /* ... */ - regionmask = (1 << spin->si_region_count) - 1; - } -@@ -8016,7 +8204,7 @@ - } - - put_bytes(fd, (long_u)l, 2); /* */ -- fwrite(folchars, (size_t)l, (size_t)1, fd); /* */ -+ fwv &= fwrite(folchars, (size_t)l, (size_t)1, fd); /* */ - } - - /* SN_MIDWORD: */ -@@ -8027,7 +8215,8 @@ - - i = (int)STRLEN(spin->si_midword); - put_bytes(fd, (long_u)i, 4); /* */ -- fwrite(spin->si_midword, (size_t)i, (size_t)1, fd); /* */ -+ fwv &= fwrite(spin->si_midword, (size_t)i, (size_t)1, fd); -+ /* */ - } - - /* SN_PREFCOND: ... */ -@@ -8113,7 +8302,8 @@ - p = rr == 1 ? ftp->ft_from : ftp->ft_to; - l = (int)STRLEN(p); - putc(l, fd); -- fwrite(p, l, (size_t)1, fd); -+ if (l > 0) -+ fwv &= fwrite(p, l, (size_t)1, fd); - } - } - -@@ -8131,11 +8321,11 @@ - /* */ - - put_bytes(fd, (long_u)l, 2); /* */ -- fwrite(spin->si_sofofr, l, (size_t)1, fd); /* */ -+ fwv &= fwrite(spin->si_sofofr, l, (size_t)1, fd); /* */ - - l = (int)STRLEN(spin->si_sofoto); - put_bytes(fd, (long_u)l, 2); /* */ -- fwrite(spin->si_sofoto, l, (size_t)1, fd); /* */ -+ fwv &= fwrite(spin->si_sofoto, l, (size_t)1, fd); /* */ - } - - /* SN_WORDS: ... -@@ -8160,7 +8350,7 @@ - l = (int)STRLEN(hi->hi_key) + 1; - len += l; - if (round == 2) /* */ -- fwrite(hi->hi_key, (size_t)l, (size_t)1, fd); -+ fwv &= fwrite(hi->hi_key, (size_t)l, (size_t)1, fd); - --todo; - } - if (round == 1) -@@ -8176,7 +8366,7 @@ - putc(0, fd); /* */ - l = spin->si_map.ga_len; - put_bytes(fd, (long_u)l, 4); /* */ -- fwrite(spin->si_map.ga_data, (size_t)l, (size_t)1, fd); -+ fwv &= fwrite(spin->si_map.ga_data, (size_t)l, (size_t)1, fd); - /* */ - } - -@@ -8232,10 +8422,11 @@ - { - p = ((char_u **)(spin->si_comppat.ga_data))[i]; - putc((int)STRLEN(p), fd); /* */ -- fwrite(p, (size_t)STRLEN(p), (size_t)1, fd);/* */ -+ fwv &= fwrite(p, (size_t)STRLEN(p), (size_t)1, fd); -+ /* */ - } - /* */ -- fwrite(spin->si_compflags, (size_t)STRLEN(spin->si_compflags), -+ fwv &= fwrite(spin->si_compflags, (size_t)STRLEN(spin->si_compflags), - (size_t)1, fd); - } - -@@ -8259,7 +8450,8 @@ - - l = (int)STRLEN(spin->si_syllable); - put_bytes(fd, (long_u)l, 4); /* */ -- fwrite(spin->si_syllable, (size_t)l, (size_t)1, fd); /* */ -+ fwv &= fwrite(spin->si_syllable, (size_t)l, (size_t)1, fd); -+ /* */ - } - - /* end of */ -@@ -8295,13 +8487,18 @@ - (void)put_node(fd, tree, 0, regionmask, round == 3); - } - -- /* Write another byte to check for errors. */ -+ /* Write another byte to check for errors (file system full). */ - if (putc(0, fd) == EOF) - retval = FAIL; -- -+theend: - if (fclose(fd) == EOF) - retval = FAIL; - -+ if (fwv != (size_t)1) -+ retval = FAIL; -+ if (retval == FAIL) -+ EMSG(_(e_write)); -+ - return retval; - } - -@@ -9890,6 +10087,7 @@ - char_u *p; - int len; - int totlen; -+ size_t x = 1; /* collect return value of fwrite() */ - - if (fd != NULL) - put_bytes(fd, (long_u)gap->ga_len, 2); /* */ -@@ -9906,7 +10104,7 @@ - if (fd != NULL) - { - fputc(len, fd); -- fwrite(p, (size_t)len, (size_t)1, fd); -+ x &= fwrite(p, (size_t)len, (size_t)1, fd); - } - totlen += len; - } -@@ -10054,6 +10252,7 @@ - int limit; - int selected = count; - int badlen = 0; -+ int msg_scroll_save = msg_scroll; - - if (no_spell_checking(curwin)) - return; -@@ -10218,7 +10417,9 @@ - selected = prompt_for_number(&mouse_used); - if (mouse_used) - selected -= lines_left; -- lines_left = Rows; /* avoid more prompt */ -+ lines_left = Rows; /* avoid more prompt */ -+ /* don't delay for 'smd' in normal_cmd() */ -+ msg_scroll = msg_scroll_save; - } - - if (selected > 0 && selected <= sug.su_ga.ga_len && u_save_cursor() == OK) -@@ -10243,7 +10444,8 @@ - } - - /* Replace the word. */ -- p = alloc((unsigned)STRLEN(line) - stp->st_orglen + stp->st_wordlen + 1); -+ p = alloc((unsigned)STRLEN(line) - stp->st_orglen -+ + stp->st_wordlen + 1); - if (p != NULL) - { - c = (int)(sug.su_badptr - line); -@@ -10343,10 +10545,9 @@ - /* - * ":spellrepall" - */ --/*ARGSUSED*/ - void - ex_spellrepall(eap) -- exarg_T *eap; -+ exarg_T *eap UNUSED; - { - pos_T pos = curwin->w_cursor; - char_u *frompat; -@@ -11480,15 +11681,24 @@ - vim_strncpy(preword + sp->ts_prewordlen, - tword + sp->ts_splitoff, - sp->ts_twordlen - sp->ts_splitoff); -- p = preword; -- while (*skiptowhite(p) != NUL) -- p = skipwhite(skiptowhite(p)); -- if (fword_ends && !can_compound(slang, p, -- compflags + sp->ts_compsplit)) -- /* Compound is not allowed. But it may still be -- * possible if we add another (short) word. */ -+ -+ /* Verify CHECKCOMPOUNDPATTERN rules. */ -+ if (match_checkcompoundpattern(preword, sp->ts_prewordlen, -+ &slang->sl_comppat)) - compound_ok = FALSE; - -+ if (compound_ok) -+ { -+ p = preword; -+ while (*skiptowhite(p) != NUL) -+ p = skipwhite(skiptowhite(p)); -+ if (fword_ends && !can_compound(slang, p, -+ compflags + sp->ts_compsplit)) -+ /* Compound is not allowed. But it may still be -+ * possible if we add another (short) word. */ -+ compound_ok = FALSE; -+ } -+ - /* Get pointer to last char of previous word. */ - p = preword + sp->ts_prewordlen; - mb_ptr_back(preword, p); -@@ -11685,10 +11895,9 @@ - && (slang->sl_compsylmax < MAXWLEN - || sp->ts_complen + 1 - sp->ts_compsplit - < slang->sl_compmax) -- && (byte_in_str(sp->ts_complen == sp->ts_compsplit -- ? slang->sl_compstartflags -- : slang->sl_compallflags, -- ((unsigned)flags >> 24)))) -+ && (can_be_compound(sp, slang, -+ compflags, ((unsigned)flags >> 24)))) -+ - { - try_compound = TRUE; - compflags[sp->ts_complen] = ((unsigned)flags >> 24); -@@ -14808,7 +15017,7 @@ - - case 0: - /* -- * Lenghts are equal, thus changes must result in same length: An -+ * Lengths are equal, thus changes must result in same length: An - * insert is only possible in combination with a delete. - * 1: check if for identical strings - */ -@@ -15398,10 +15607,9 @@ - /* - * ":spellinfo" - */ --/*ARGSUSED*/ - void - ex_spellinfo(eap) -- exarg_T *eap; -+ exarg_T *eap UNUSED; - { - int lpi; - langp_T *lp; -@@ -15945,11 +16153,9 @@ - * Returns the number of matches. The matches are in "matchp[]", array of - * allocated strings. - */ --/*ARGSUSED*/ - int --expand_spelling(lnum, col, pat, matchp) -- linenr_T lnum; -- int col; -+expand_spelling(lnum, pat, matchp) -+ linenr_T lnum UNUSED; - char_u *pat; - char_u ***matchp; - { -diff -Naur vim72.orig/src/structs.h vim72/src/structs.h ---- vim72.orig/src/structs.h 2008-07-30 21:02:50.000000000 +0100 -+++ vim72/src/structs.h 2009-07-22 22:54:23.000000000 +0100 -@@ -16,7 +16,7 @@ - */ - #if defined(SASC) && SASC < 658 - typedef long linenr_T; --typedef unsigned colnr_T; -+typedef int colnr_T; - typedef unsigned short short_u; - #endif - -@@ -33,9 +33,9 @@ - } pos_T; - - #ifdef FEAT_VIRTUALEDIT --# define INIT_POS_T {0, 0, 0} -+# define INIT_POS_T(l, c, ca) {l, c, ca} - #else --# define INIT_POS_T {0, 0} -+# define INIT_POS_T(l, c, ca) {l, c} - #endif - - /* -@@ -459,7 +459,7 @@ - typedef struct - { - int hide; /* TRUE when ":hide" was used */ --# ifdef FEAT_BROWSE -+# ifdef FEAT_BROWSE_CMD - int browse; /* TRUE to invoke file dialog */ - # endif - # ifdef FEAT_WINDOWS -@@ -882,6 +882,8 @@ - { - typebuf_T save_typebuf; - int typebuf_valid; /* TRUE when save_typebuf valid */ -+ int old_char; -+ int old_mod_mask; - struct buffheader save_stuffbuff; - #ifdef USE_INPUT_BUF - char_u *save_inputbuf; -@@ -1166,7 +1168,8 @@ - char_u *b_fname; /* current file name */ - - #ifdef UNIX -- int b_dev; /* device number (-1 if not set) */ -+ int b_dev_valid; /* TRUE when b_dev has a valid number */ -+ dev_t b_dev; /* device number */ - ino_t b_ino; /* inode number */ - #endif - #ifdef FEAT_CW_EDITOR -@@ -1620,6 +1623,14 @@ - }; - #endif - -+#define SNAP_HELP_IDX 0 -+#ifdef FEAT_AUTOCMD -+# define SNAP_AUCMD_IDX 1 -+# define SNAP_COUNT 2 -+#else -+# define SNAP_COUNT 1 -+#endif -+ - /* - * Tab pages point to the top frame of each tab page. - * Note: Most values are NOT valid for the current tab page! Use "curwin", -@@ -1648,7 +1659,7 @@ - buf_T *(tp_diffbuf[DB_COUNT]); - int tp_diff_invalid; /* list of diffs is outdated */ - #endif -- frame_T *tp_snapshot; /* window layout snapshot */ -+ frame_T *(tp_snapshot[SNAP_COUNT]); /* window layout snapshots */ - #ifdef FEAT_EVAL - dictitem_T tp_winvar; /* variable for "t:" Dictionary */ - dict_T tp_vars; /* internal variables, local to tab page */ -@@ -1784,10 +1795,15 @@ - #endif - - /* -- * The next three specify the offsets for displaying the buffer: -+ * "w_topline", "w_leftcol" and "w_skipcol" specify the offsets for -+ * displaying the buffer. - */ - linenr_T w_topline; /* buffer line number of the line at the - top of the window */ -+#ifdef FEAT_AUTOCMD -+ char w_topline_was_set; /* flag set to TRUE when topline is set, -+ e.g. by winrestview() */ -+#endif - #ifdef FEAT_DIFF - int w_topfill; /* number of filler lines above w_topline */ - int w_old_topfill; /* w_topfill at last redraw */ -@@ -2270,16 +2286,11 @@ - */ - typedef struct - { -- buf_T *save_buf; /* saved curbuf */ -+ buf_T *save_curbuf; /* saved curbuf */ - #ifdef FEAT_AUTOCMD -- buf_T *new_curbuf; /* buffer to be used */ -- win_T *save_curwin; /* saved curwin, NULL if it didn't change */ -- win_T *new_curwin; /* new curwin if save_curwin != NULL */ -- pos_T save_cursor; /* saved cursor pos of save_curwin */ -- linenr_T save_topline; /* saved topline of save_curwin */ --# ifdef FEAT_DIFF -- int save_topfill; /* saved topfill of save_curwin */ --# endif -+ win_T *save_curwin; /* saved curwin */ -+ win_T *new_curwin; /* new curwin */ -+ buf_T *new_curbuf; /* new curbuf */ - #endif - } aco_save_T; - -diff -Naur vim72.orig/src/syntax.c vim72/src/syntax.c ---- vim72.orig/src/syntax.c 2008-08-08 22:47:48.000000000 +0100 -+++ vim72/src/syntax.c 2009-07-22 22:54:22.000000000 +0100 -@@ -3224,11 +3224,10 @@ - /* - * Handle ":syntax case" command. - */ --/* ARGSUSED */ - static void - syn_cmd_case(eap, syncing) - exarg_T *eap; -- int syncing; /* not used */ -+ int syncing UNUSED; - { - char_u *arg = eap->arg; - char_u *next; -@@ -3249,11 +3248,10 @@ - /* - * Handle ":syntax spell" command. - */ --/* ARGSUSED */ - static void - syn_cmd_spell(eap, syncing) - exarg_T *eap; -- int syncing; /* not used */ -+ int syncing UNUSED; - { - char_u *arg = eap->arg; - char_u *next; -@@ -3517,11 +3515,10 @@ - /* - * Handle ":syntax on" command. - */ --/* ARGSUSED */ - static void - syn_cmd_on(eap, syncing) - exarg_T *eap; -- int syncing; /* not used */ -+ int syncing UNUSED; - { - syn_cmd_onoff(eap, "syntax"); - } -@@ -3529,11 +3526,10 @@ - /* - * Handle ":syntax enable" command. - */ --/* ARGSUSED */ - static void - syn_cmd_enable(eap, syncing) - exarg_T *eap; -- int syncing; /* not used */ -+ int syncing UNUSED; - { - set_internal_string_var((char_u *)"syntax_cmd", (char_u *)"enable"); - syn_cmd_onoff(eap, "syntax"); -@@ -3543,11 +3539,10 @@ - /* - * Handle ":syntax reset" command. - */ --/* ARGSUSED */ - static void - syn_cmd_reset(eap, syncing) - exarg_T *eap; -- int syncing; /* not used */ -+ int syncing UNUSED; - { - eap->nextcmd = check_nextcmd(eap->arg); - if (!eap->skip) -@@ -3561,11 +3556,10 @@ - /* - * Handle ":syntax manual" command. - */ --/* ARGSUSED */ - static void - syn_cmd_manual(eap, syncing) - exarg_T *eap; -- int syncing; /* not used */ -+ int syncing UNUSED; - { - syn_cmd_onoff(eap, "manual"); - } -@@ -3573,11 +3567,10 @@ - /* - * Handle ":syntax off" command. - */ --/* ARGSUSED */ - static void - syn_cmd_off(eap, syncing) - exarg_T *eap; -- int syncing; /* not used */ -+ int syncing UNUSED; - { - syn_cmd_onoff(eap, "nosyntax"); - } -@@ -4461,11 +4454,10 @@ - /* - * Handle ":syntax include [@{group-name}] filename" command. - */ --/* ARGSUSED */ - static void - syn_cmd_include(eap, syncing) - exarg_T *eap; -- int syncing; /* not used */ -+ int syncing UNUSED; - { - char_u *arg = eap->arg; - int sgl_id = 1; -@@ -4532,11 +4524,10 @@ - /* - * Handle ":syntax keyword {group-name} [{option}] keyword .." command. - */ --/* ARGSUSED */ - static void - syn_cmd_keyword(eap, syncing) - exarg_T *eap; -- int syncing; /* not used */ -+ int syncing UNUSED; - { - char_u *arg = eap->arg; - char_u *group_name_end; -@@ -5275,11 +5266,10 @@ - * Handle ":syntax cluster {cluster-name} [contains={groupname},..] - * [add={groupname},..] [remove={groupname},..]". - */ --/* ARGSUSED */ - static void - syn_cmd_cluster(eap, syncing) - exarg_T *eap; -- int syncing; /* not used */ -+ int syncing UNUSED; - { - char_u *arg = eap->arg; - char_u *group_name_end; -@@ -5464,11 +5454,10 @@ - /* - * Handle ":syntax sync .." command. - */ --/* ARGSUSED */ - static void - syn_cmd_sync(eap, syncing) - exarg_T *eap; -- int syncing; /* not used */ -+ int syncing UNUSED; - { - char_u *arg_start = eap->arg; - char_u *arg_end; -@@ -6099,10 +6088,9 @@ - * Function given to ExpandGeneric() to obtain the list syntax names for - * expansion. - */ --/*ARGSUSED*/ - char_u * - get_syntax_name(xp, idx) -- expand_T *xp; -+ expand_T *xp UNUSED; - int idx; - { - if (expand_what == EXP_SUBCMD) -@@ -7744,14 +7732,13 @@ - /* - * Get the font or fontset for one highlight group. - */ --/*ARGSUSED*/ - static void - hl_do_font(idx, arg, do_normal, do_menu, do_tooltip) - int idx; - char_u *arg; -- int do_normal; /* set normal font */ -- int do_menu; /* set menu font */ -- int do_tooltip; /* set tooltip font */ -+ int do_normal; /* set normal font */ -+ int do_menu UNUSED; /* set menu font */ -+ int do_tooltip UNUSED; /* set tooltip font */ - { - # ifdef FEAT_XFONTSET - /* If 'guifontset' is not empty, first try using the name as a -@@ -9150,10 +9137,9 @@ - * Function given to ExpandGeneric() to obtain the list of group names. - * Also used for synIDattr() function. - */ --/*ARGSUSED*/ - char_u * - get_highlight_name(xp, idx) -- expand_T *xp; -+ expand_T *xp UNUSED; - int idx; - { - #ifdef FEAT_CMDL_COMPL -diff -Naur vim72.orig/src/tag.c vim72/src/tag.c ---- vim72.orig/src/tag.c 2008-07-16 22:31:30.000000000 +0100 -+++ vim72/src/tag.c 2009-07-22 22:54:22.000000000 +0100 -@@ -100,7 +100,7 @@ - * Tag for preview window is remembered separately, to avoid messing up the - * normal tagstack. - */ --static taggy_T ptag_entry = {NULL}; -+static taggy_T ptag_entry = {NULL, {INIT_POS_T(0, 0, 0), 0}, 0, 0}; - #endif - - /* -@@ -515,7 +515,7 @@ - * If a count is supplied to the ":tag " command, then - * jump to count'th matching tag. - */ -- if (type == DT_TAG && count > 0) -+ if (type == DT_TAG && *tag != NUL && count > 0) - cur_match = count - 1; - - if (type == DT_SELECT || type == DT_JUMP -@@ -618,7 +618,7 @@ - taglen_advance(taglen); - MSG_PUTS_ATTR(_("file\n"), hl_attr(HLF_T)); - -- for (i = 0; i < num_matches; ++i) -+ for (i = 0; i < num_matches && !got_int; ++i) - { - parse_match(matches[i], &tagp); - if (!new_tag && ( -@@ -655,6 +655,8 @@ - } - if (msg_col > 0) - msg_putchar('\n'); -+ if (got_int) -+ break; - msg_advance(15); - - /* print any extra fields */ -@@ -689,6 +691,8 @@ - if (msg_col + ptr2cells(p) >= Columns) - { - msg_putchar('\n'); -+ if (got_int) -+ break; - msg_advance(15); - } - p = msg_outtrans_one(p, attr); -@@ -704,6 +708,8 @@ - if (msg_col > 15) - { - msg_putchar('\n'); -+ if (got_int) -+ break; - msg_advance(15); - } - } -@@ -734,6 +740,8 @@ - { - if (msg_col + (*p == TAB ? 1 : ptr2cells(p)) > Columns) - msg_putchar('\n'); -+ if (got_int) -+ break; - msg_advance(15); - - /* skip backslash used for escaping command char */ -@@ -760,12 +768,9 @@ - if (msg_col) - msg_putchar('\n'); - ui_breakcheck(); -- if (got_int) -- { -- got_int = FALSE; /* only stop the listing */ -- break; -- } - } -+ if (got_int) -+ got_int = FALSE; /* only stop the listing */ - ask_for_selection = TRUE; - } - #if defined(FEAT_QUICKFIX) && defined(FEAT_EVAL) -@@ -1100,10 +1105,9 @@ - /* - * Print the tag stack - */ --/*ARGSUSED*/ - void - do_tags(eap) -- exarg_T *eap; -+ exarg_T *eap UNUSED; - { - int i; - char_u *name; -@@ -2525,11 +2529,10 @@ - * Callback function for finding all "tags" and "tags-??" files in - * 'runtimepath' doc directories. - */ --/*ARGSUSED*/ - static void - found_tagfile_cb(fname, cookie) - char_u *fname; -- void *cookie; -+ void *cookie UNUSED; - { - if (ga_grow(&tag_fnames, 1) == OK) - ((char_u **)(tag_fnames.ga_data))[tag_fnames.ga_len++] = -@@ -2542,6 +2545,15 @@ - { - ga_clear_strings(&tag_fnames); - do_tag(NULL, DT_FREE, 0, 0, 0); -+ tag_freematch(); -+ -+# if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX) -+ if (ptag_entry.tagname) -+ { -+ vim_free(ptag_entry.tagname); -+ ptag_entry.tagname = NULL; -+ } -+# endif - } - #endif - -@@ -2725,7 +2737,24 @@ - */ - p_7f = vim_strchr(lbuf, 0x7f); - if (p_7f == NULL) -+ { -+etag_fail: -+ if (vim_strchr(lbuf, '\n') == NULL) -+ { -+ /* Truncated line. Ignore it. */ -+ if (p_verbose >= 5) -+ { -+ verbose_enter(); -+ MSG(_("Ignoring long line in tags file")); -+ verbose_leave(); -+ } -+ tagp->command = lbuf; -+ tagp->tagname = lbuf; -+ tagp->tagname_end = lbuf; -+ return OK; -+ } - return FAIL; -+ } - - /* Find ^A. If not found the line number is after the 0x7f */ - p = vim_strchr(p_7f, Ctrl_A); -@@ -2735,7 +2764,7 @@ - ++p; - - if (!VIM_ISDIGIT(*p)) /* check for start of line number */ -- return FAIL; -+ goto etag_fail; - tagp->command = p; - - -@@ -2749,7 +2778,7 @@ - /* find end of tagname */ - for (p = p_7f - 1; !vim_iswordc(*p); --p) - if (p == lbuf) -- return FAIL; -+ goto etag_fail; - tagp->tagname_end = p + 1; - while (p >= lbuf && vim_iswordc(*p)) - --p; -@@ -3762,7 +3791,7 @@ - --end; - } - len = (int)(end - start); -- if (len > sizeof(buf) - 1) -+ if (len > (int)sizeof(buf) - 1) - len = sizeof(buf) - 1; - vim_strncpy(buf, start, len); - } -diff -Naur vim72.orig/src/term.c vim72/src/term.c ---- vim72.orig/src/term.c 2008-07-27 12:48:06.000000000 +0100 -+++ vim72/src/term.c 2009-07-22 22:54:24.000000000 +0100 -@@ -2881,7 +2881,7 @@ - - /* if 'Sb' and 'AB' are not defined, reset "Co" */ - if (*T_CSB == NUL && *T_CAB == NUL) -- T_CCO = empty_option; -+ free_one_termoption(T_CCO); - - /* Set 'weirdinvert' according to value of 't_xs' */ - p_wiv = (*T_XS != NUL); -@@ -2906,7 +2906,7 @@ - int i; - int shift; - -- for (i = 1; i <= sizeof(long_u); i++) -+ for (i = 1; i <= (int)sizeof(long_u); i++) - { - shift = 8 * (sizeof(long_u) - i); - dst[i - 1] = (char_u) ((val >> shift) & 0xff); -@@ -2937,7 +2937,7 @@ - len = get_bytes_from_buf(buf, bytes, (int)sizeof(long_u)); - if (len != -1) - { -- for (i = 0; i < sizeof(long_u); i++) -+ for (i = 0; i < (int)sizeof(long_u); i++) - { - shift = 8 * (sizeof(long_u) - 1 - i); - *val += (long_u)bytes[i] << shift; -@@ -4920,7 +4920,15 @@ - key_name[0] = KEY2TERMCAP0(key); - key_name[1] = KEY2TERMCAP1(key); - if (key_name[0] == KS_KEY) -- string[new_slen++] = key_name[1]; /* from ":set =xx" */ -+ { -+ /* from ":set =xx" */ -+#ifdef FEAT_MBYTE -+ if (has_mbyte) -+ new_slen += (*mb_char2bytes)(key_name[1], string + new_slen); -+ else -+#endif -+ string[new_slen++] = key_name[1]; -+ } - else - { - string[new_slen++] = K_SPECIAL; -@@ -5547,7 +5555,7 @@ - * respects the current B/k/< settings of 'cpoption'. - * - * This function is called when expanding mappings/abbreviations on the -- * command-line, and for building the "Ambiguous mapping..." error messge. -+ * command-line, and for building the "Ambiguous mapping..." error message. - * - * It uses a growarray to build the translation string since the - * latter can be wider than the original description. The caller has to -diff -Naur vim72.orig/src/testdir/Makefile vim72/src/testdir/Makefile ---- vim72.orig/src/testdir/Makefile 2008-06-19 21:29:46.000000000 +0100 -+++ vim72/src/testdir/Makefile 2009-07-22 22:54:23.000000000 +0100 -@@ -4,9 +4,11 @@ - - VIMPROG = ../vim - --# Uncomment this line for using valgrind. --# The output goes into a file "valgrind.$PID" (sorry, no test number). --# VALGRIND = valgrind --tool=memcheck --leak-check=yes --num-callers=15 --logfile=valgrind -+# 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. -+# This will make testing about 10 times as slow. -+# VALGRIND = valgrind --tool=memcheck --leak-check=yes --num-callers=15 --log-file=valgrind.$* - - SCRIPTS = test1.out test2.out test3.out test4.out test5.out test6.out \ - test7.out test8.out test9.out test10.out test11.out \ -@@ -20,21 +22,23 @@ - test48.out test49.out test51.out test52.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 -+ test64.out test65.out test66.out - - SCRIPTS_GUI = test16.out - - .SUFFIXES: .in .out - --nongui: nolog $(SCRIPTS) -- @echo -- @cat test.log -- @echo ALL DONE -+nongui: nolog $(SCRIPTS) report -+ -+gui: nolog $(SCRIPTS) $(SCRIPTS_GUI) report - --gui: nolog $(SCRIPTS) $(SCRIPTS_GUI) -+report: - @echo -- @cat test.log -- @echo ALL DONE -+ @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,4 +75,4 @@ - test60.out: test60.vim - - nolog: -- -echo Test results: >test.log -+ -rm -f test.log -diff -Naur vim72.orig/src/testdir/Make_ming.mak vim72/src/testdir/Make_ming.mak ---- vim72.orig/src/testdir/Make_ming.mak 1970-01-01 01:00:00.000000000 +0100 -+++ vim72/src/testdir/Make_ming.mak 2009-07-22 22:54:20.000000000 +0100 -@@ -0,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 test66.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 -diff -Naur vim72.orig/src/testdir/test30.in vim72/src/testdir/test30.in ---- vim72.orig/src/testdir/test30.in 2008-06-25 22:33:01.000000000 +0100 -+++ vim72/src/testdir/test30.in 2009-07-22 22:54:16.000000000 +0100 -@@ -24,10 +24,17 @@ - :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 -+: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 -diff -Naur vim72.orig/src/testdir/test42.ok vim72/src/testdir/test42.ok ---- vim72.orig/src/testdir/test42.ok 2008-02-20 12:27:37.000000000 +0000 -+++ vim72/src/testdir/test42.ok 2009-07-22 22:54:17.000000000 +0100 -@@ -20,7 +20,7 @@ - ucs-2 - - -- fileencoding=ucs-2le -+ fileencoding=utf-16le - bomb - ucs-2le - -diff -Naur vim72.orig/src/testdir/test54.in vim72/src/testdir/test54.in ---- vim72.orig/src/testdir/test54.in 2005-01-01 11:21:16.000000000 +0000 -+++ vim72/src/testdir/test54.in 2009-07-22 22:54:16.000000000 +0100 -@@ -3,8 +3,13 @@ - STARTTEST - :so small.vim - :e xx --:!rm -f test.out --:au BufLeave :!echo buffer-local autommand in %>> test.out -+:if has("vms") -+: !del test.out.* -+: au BufLeave :!write sys$output "buffer-local autommand in %" > test.out -+:else -+: !rm -f test.out -+: au BufLeave :!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 - :bwipe xx " here, autocommand shall be auto-deleted -diff -Naur vim72.orig/src/testdir/test66.in vim72/src/testdir/test66.in ---- vim72.orig/src/testdir/test66.in 1970-01-01 01:00:00.000000000 +0100 -+++ vim72/src/testdir/test66.in 2009-07-22 22:54:20.000000000 +0100 -@@ -0,0 +1,25 @@ -+ -+Test for visual block shift and tab characters. -+ -+STARTTEST -+:so small.vim -+/^abcdefgh -+4jI j<<11|D -+7|a  -+7|a  -+7|a 4k13|4j< -+:$-4,$w! test.out -+:$-4,$s/\s\+//g -+4kI j<< -+7|a  -+7|a  -+7|a 4k13|4j3< -+:$-4,$w >> test.out -+:qa! -+ENDTEST -+ -+abcdefghijklmnopqrstuvwxyz -+abcdefghijklmnopqrstuvwxyz -+abcdefghijklmnopqrstuvwxyz -+abcdefghijklmnopqrstuvwxyz -+abcdefghijklmnopqrstuvwxyz -diff -Naur vim72.orig/src/testdir/test66.ok vim72/src/testdir/test66.ok ---- vim72.orig/src/testdir/test66.ok 1970-01-01 01:00:00.000000000 +0100 -+++ vim72/src/testdir/test66.ok 2009-07-22 22:54:20.000000000 +0100 -@@ -0,0 +1,10 @@ -+ abcdefghijklmnopqrstuvwxyz -+abcdefghij -+ abc defghijklmnopqrstuvwxyz -+ abc defghijklmnopqrstuvwxyz -+ abc defghijklmnopqrstuvwxyz -+ abcdefghijklmnopqrstuvwxyz -+abcdefghij -+ abc defghijklmnopqrstuvwxyz -+ abc defghijklmnopqrstuvwxyz -+ abc defghijklmnopqrstuvwxyz -diff -Naur vim72.orig/src/ui.c vim72/src/ui.c ---- vim72.orig/src/ui.c 2008-07-14 19:14:56.000000000 +0100 -+++ vim72/src/ui.c 2009-07-22 22:54:23.000000000 +0100 -@@ -320,10 +320,9 @@ - * The gui_set_shellsize() or mch_set_shellsize() function will try to set the - * new size. If this is not possible, it will adjust Rows and Columns. - */ --/*ARGSUSED*/ - void - ui_set_shellsize(mustset) -- int mustset; /* set by the user */ -+ int mustset UNUSED; /* set by the user */ - { - #ifdef FEAT_GUI - if (gui.in_use) -@@ -1127,10 +1126,9 @@ - * available for pasting. - * When "both" is TRUE also copy to the '+' register. - */ --/*ARGSUSED*/ - void - clip_copy_modeless_selection(both) -- int both; -+ int both UNUSED; - { - char_u *buffer; - char_u *bufp; -@@ -1701,10 +1699,9 @@ - return (int)maxlen; - } - --/*ARGSUSED*/ - void - fill_input_buf(exit_on_error) -- int exit_on_error; -+ int exit_on_error UNUSED; - { - #if defined(UNIX) || defined(OS2) || defined(VMS) || defined(MACOS_X_UNIX) - int len; -@@ -1820,7 +1817,7 @@ - #ifdef HAVE_DUP - /* Use stderr for stdin, also works for shell commands. */ - close(0); -- dup(2); -+ ignored = dup(2); - #else - read_cmd_fd = 2; /* read from stderr instead of stdin */ - #endif -@@ -1992,11 +1989,10 @@ - - static void clip_x11_request_selection_cb __ARGS((Widget, XtPointer, Atom *, Atom *, XtPointer, long_u *, int *)); - --/* ARGSUSED */ - static void - clip_x11_request_selection_cb(w, success, sel_atom, type, value, length, - format) -- Widget w; -+ Widget w UNUSED; - XtPointer success; - Atom *sel_atom; - Atom *type; -@@ -2020,7 +2016,7 @@ - - if (value == NULL || *length == 0) - { -- clip_free_selection(cbd); /* ??? [what's the query?] */ -+ clip_free_selection(cbd); /* nothing received, clear register */ - *(int *)success = FALSE; - return; - } -@@ -2076,7 +2072,7 @@ - text_prop.value = (unsigned char *)value; - text_prop.encoding = *type; - text_prop.format = *format; -- text_prop.nitems = STRLEN(value); -+ text_prop.nitems = len; - status = XmbTextPropertyToTextList(X_DISPLAY, &text_prop, - &text_list, &n_text); - if (status != Success || n_text < 1) -@@ -2108,8 +2104,8 @@ - Atom type; - static int success; - int i; -- int nbytes = 0; -- char_u *buffer; -+ time_t start_time; -+ int timed_out = FALSE; - - for (i = - #ifdef FEAT_MBYTE -@@ -2129,6 +2125,7 @@ - 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); - -@@ -2141,47 +2138,59 @@ - * 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 (;;) -+ start_time = time(NULL); -+ while (success == MAYBE) - { -- 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. */ -+ 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; -+ break; -+ } - - /* 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. */ -+ /* Wait for 1 msec to avoid that we eat up all CPU time. */ -+ ui_delay(1L, TRUE); - } - -- /* this is where clip_x11_request_selection_cb() is actually called */ -- XtDispatchEvent(&event); -- -- if (success) -+ if (success == TRUE) - 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 */ -- buffer = (char_u *)XFetchBuffer(dpy, &nbytes, 0); -- if (nbytes > 0) -- { -- /* Got something */ -- clip_yank_selection(MCHAR, buffer, (long)nbytes, cbd); -- XFree((void *)buffer); -- if (p_verbose > 0) -- verb_msg((char_u *)_("Used CUT_BUFFER0 instead of empty selection")); -- } -+ yank_cut_buffer0(dpy, cbd); - } - - static Boolean clip_x11_convert_selection_cb __ARGS((Widget, Atom *, Atom *, Atom *, XtPointer *, long_u *, int *)); - --/* ARGSUSED */ - static Boolean - clip_x11_convert_selection_cb(w, sel_atom, target, type, value, length, format) -- Widget w; -+ Widget w UNUSED; - Atom *sel_atom; - Atom *target; - Atom *type; -@@ -2308,10 +2317,9 @@ - - static void clip_x11_lose_ownership_cb __ARGS((Widget, Atom *)); - --/* ARGSUSED */ - static void - clip_x11_lose_ownership_cb(w, sel_atom) -- Widget w; -+ Widget w UNUSED; - Atom *sel_atom; - { - if (*sel_atom == clip_plus.sel_atom) -@@ -2344,14 +2352,67 @@ - * Send the current selection to the clipboard. Do nothing for X because we - * will fill in the selection only when requested by another app. - */ --/*ARGSUSED*/ - void - clip_x11_set_selection(cbd) -- VimClipboard *cbd; -+ VimClipboard *cbd UNUSED; - { - } - #endif - -+#if defined(FEAT_XCLIPBOARD) || defined(FEAT_GUI_X11) \ -+ || defined(FEAT_GUI_GTK) || defined(PROTO) -+/* -+ * Get the contents of the X CUT_BUFFER0 and put it in "cbd". -+ */ -+ void -+yank_cut_buffer0(dpy, cbd) -+ Display *dpy; -+ VimClipboard *cbd; -+{ -+ int nbytes = 0; -+ char_u *buffer = (char_u *)XFetchBuffer(dpy, &nbytes, 0); -+ -+ if (nbytes > 0) -+ { -+#ifdef FEAT_MBYTE -+ int done = FALSE; -+ -+ /* CUT_BUFFER0 is supposed to be always latin1. Convert to 'enc' when -+ * using a multi-byte encoding. Conversion between two 8-bit -+ * character sets usually fails and the text might actually be in -+ * 'enc' anyway. */ -+ if (has_mbyte) -+ { -+ char_u *conv_buf = buffer; -+ vimconv_T vc; -+ -+ vc.vc_type = CONV_NONE; -+ if (convert_setup(&vc, (char_u *)"latin1", p_enc) == OK) -+ { -+ conv_buf = string_convert(&vc, buffer, &nbytes); -+ if (conv_buf != NULL) -+ { -+ clip_yank_selection(MCHAR, conv_buf, (long)nbytes, cbd); -+ vim_free(conv_buf); -+ done = TRUE; -+ } -+ convert_setup(&vc, NULL, NULL); -+ } -+ } -+ if (!done) /* use the text without conversion */ -+#endif -+ clip_yank_selection(MCHAR, buffer, (long)nbytes, cbd); -+ XFree((void *)buffer); -+ if (p_verbose > 0) -+ { -+ verbose_enter(); -+ verb_msg((char_u *)_("Used CUT_BUFFER0 instead of empty selection")); -+ verbose_leave(); -+ } -+ } -+} -+#endif -+ - #if defined(FEAT_MOUSE) || defined(PROTO) - - /* -@@ -2898,11 +2959,10 @@ - * Find the window at screen position "*rowp" and "*colp". The positions are - * updated to become relative to the top-left of the window. - */ --/*ARGSUSED*/ - win_T * - mouse_find_win(rowp, colp) - int *rowp; -- int *colp; -+ int *colp UNUSED; - { - frame_T *fp; - -diff -Naur vim72.orig/src/version.c vim72/src/version.c ---- vim72.orig/src/version.c 2008-08-09 15:24:52.000000000 +0100 -+++ vim72/src/version.c 2009-07-22 22:54:24.000000000 +0100 -@@ -677,9 +677,500 @@ - static int included_patches[] = - { /* Add new patch number below this line */ - /**/ -+ 239, -+/**/ -+ 238, -+/**/ -+ 237, -+/**/ -+ 236, -+/**/ -+ 235, -+/**/ -+ 234, -+/**/ -+ 233, -+/**/ -+ 232, -+/**/ -+ 231, -+/**/ -+ 230, -+/**/ -+ 229, -+/**/ -+ 228, -+/**/ -+ 227, -+/**/ -+ 226, -+/**/ -+ 225, -+/**/ -+ 224, -+/**/ -+ 223, -+/**/ -+ 222, -+/**/ -+ 221, -+/**/ -+ 220, -+/**/ -+ 219, -+/**/ -+ 218, -+/**/ -+ 217, -+/**/ -+ 216, -+/**/ -+ 215, -+/**/ -+ 214, -+/**/ -+ 213, -+/**/ -+ 212, -+/**/ -+ 211, -+/**/ -+ 210, -+/**/ -+ 209, -+/**/ -+ 208, -+/**/ -+ 207, -+/**/ -+ 206, -+/**/ -+ 205, -+/**/ -+ 204, -+/**/ -+ 203, -+/**/ -+ 202, -+/**/ -+ 201, -+/**/ -+ 200, -+/**/ -+ 199, -+/**/ -+ 198, -+/**/ -+ 197, -+/**/ -+ 196, -+/**/ -+ 195, -+/**/ -+ 194, -+/**/ -+ 193, -+/**/ -+ 192, -+/**/ -+ 191, -+/**/ -+ 190, -+/**/ -+ 189, -+/**/ -+ 188, -+/**/ -+ 187, -+/**/ -+ 186, -+/**/ -+ 185, -+/**/ -+ 184, -+/**/ -+ 183, -+/**/ -+ 182, -+/**/ -+ 181, -+/**/ -+ 180, -+/**/ -+ 179, -+/**/ -+ 178, -+/**/ -+ 177, -+/**/ -+ 176, -+/**/ -+ 175, -+/**/ -+ 174, -+/**/ -+ 173, -+/**/ -+ 172, -+/**/ -+ 171, -+/**/ -+ 170, -+/**/ -+ 169, -+/**/ -+ 168, -+/**/ -+ 167, -+/**/ -+ 166, -+/**/ -+ 165, -+/**/ -+ 164, -+/**/ -+ 163, -+/**/ -+ 162, -+/**/ -+ 161, -+/**/ -+ 160, -+/**/ -+ 159, -+/**/ -+ 158, -+/**/ -+ 157, -+/**/ -+ 156, -+/**/ -+ 155, -+/**/ -+ 154, -+/**/ -+ 153, -+/**/ -+ 152, -+/**/ -+ 151, -+/**/ -+ 150, -+/**/ -+ 149, -+/**/ -+ 148, -+/**/ -+ 147, -+/**/ -+ 146, -+/**/ -+ 145, -+/**/ -+ 144, -+/**/ -+ 143, -+/**/ -+ 142, -+/**/ -+ 141, -+/**/ -+ 140, -+/**/ -+ 139, -+/**/ -+ 138, -+/**/ -+ 137, -+/**/ -+ 136, -+/**/ -+ 135, -+/**/ -+ 134, -+/**/ -+ 133, -+/**/ -+ 132, -+/**/ -+ 131, -+/**/ -+ 130, -+/**/ -+ 129, -+/**/ -+ 128, -+/**/ -+ 127, -+/**/ -+ 126, -+/**/ -+ 125, -+/**/ -+ 124, -+/**/ -+ 123, -+/**/ -+ 122, -+/**/ -+ 121, -+/**/ -+ 120, -+/**/ -+ 119, -+/**/ -+ 118, -+/**/ -+ 117, -+/**/ -+ 116, -+/**/ -+ 115, -+/**/ -+ 114, -+/**/ -+ 113, -+/**/ -+ 112, -+/**/ -+ 111, -+/**/ -+ 110, -+/**/ -+ 109, -+/**/ -+ 108, -+/**/ -+ 107, -+/**/ -+ 106, -+/**/ -+ 105, -+/**/ -+ 104, -+/**/ -+ 103, -+/**/ -+ 102, -+/**/ -+ 101, -+/**/ -+ 100, -+/**/ -+ 99, -+/**/ -+ 98, -+/**/ -+ 97, -+/**/ -+ 96, -+/**/ -+ 95, -+/**/ -+ 94, -+/**/ -+ 93, -+/**/ -+ 92, -+/**/ -+ 91, -+/**/ -+ 90, -+/**/ -+ 89, -+/**/ -+ 88, -+/**/ -+ 87, -+/**/ -+ 86, -+/**/ -+ 85, -+/**/ -+ 84, -+/**/ -+ 83, -+/**/ -+ 82, -+/**/ -+ 81, -+/**/ -+ 80, -+/**/ -+ 79, -+/**/ -+ 78, -+/**/ -+ 77, -+/**/ -+ 76, -+/**/ -+ 75, -+/**/ -+ 74, -+/**/ -+ 73, -+/**/ -+ 72, -+/**/ -+ 71, -+/**/ -+ 70, -+/**/ -+ 69, -+/**/ -+ 68, -+/**/ -+ 67, -+/**/ -+ 66, -+/**/ -+ 65, -+/**/ -+ 64, -+/**/ -+ 63, -+/**/ -+ 62, -+/**/ -+ 61, -+/**/ -+ 60, -+/**/ -+ 59, -+/**/ -+ 58, -+/**/ -+ 57, -+/**/ -+ 56, -+/**/ -+ 55, -+/**/ -+ 54, -+/**/ -+ 53, -+/**/ -+ 52, -+/**/ -+ 51, -+/**/ -+ 50, -+/**/ -+ 49, -+/**/ -+ 48, -+/**/ -+ 47, -+/**/ -+ 46, -+/**/ -+ 45, -+/**/ -+ 44, -+/**/ -+ 43, -+/**/ -+ 42, -+/**/ -+ 41, -+/**/ -+ 40, -+/**/ -+ 39, -+/**/ -+ 38, -+/**/ -+ 37, -+/**/ -+ 36, -+/**/ -+ 35, -+/**/ -+ 34, -+/**/ -+ 33, -+/**/ -+ 32, -+/**/ -+ 31, -+/**/ -+ 30, -+/**/ -+ 29, -+/**/ -+ 28, -+/**/ -+ 27, -+/**/ -+ 26, -+/**/ -+ 25, -+/**/ -+ 24, -+/**/ -+ 23, -+/**/ -+ 22, -+/**/ -+ 21, -+/**/ -+ 20, -+/**/ -+ 19, -+/**/ -+ 18, -+/**/ -+ 17, -+/**/ -+ 16, -+/**/ -+ 15, -+/**/ -+ 14, -+/**/ -+ 13, -+/**/ -+ 12, -+/**/ -+ 11, -+/**/ -+ 10, -+/**/ -+ 9, -+/**/ -+ 8, -+/**/ -+ 7, -+/**/ -+ 6, -+/**/ -+ 5, -+/**/ -+ 4, -+/**/ -+ 3, -+/**/ -+ 2, -+/**/ -+ 1, -+/**/ - 0 - }; - -+/* -+ * Place to put a short description when adding a feature with a patch. -+ * Keep it short, e.g.,: "relative numbers", "persistent undo". -+ * Also add a comment marker to separate the lines. -+ * See the official Vim patches for the diff format: It must use a context of -+ * one line only. Create it by hand or use "diff -C2" and edit the patch. -+ */ -+static char *(extra_patches[]) = -+{ /* Add your patch description below this line */ -+/**/ -+ NULL -+}; -+ - int - highest_patch() - { -@@ -786,7 +1277,7 @@ - MSG_PUTS(_("\nRISC OS version")); - #endif - #ifdef VMS -- MSG_PUTS("\nOpenVMS version"); -+ MSG_PUTS(_("\nOpenVMS version")); - # ifdef HAVE_PATHDEF - if (*compiled_arch != NUL) - { -@@ -825,6 +1316,19 @@ - } - } - -+ /* Print the list of extra patch descriptions if there is at least one. */ -+ if (extra_patches[0] != NULL) -+ { -+ MSG_PUTS(_("\nExtra patches: ")); -+ s = ""; -+ for (i = 0; extra_patches[i] != NULL; ++i) -+ { -+ MSG_PUTS(s); -+ s = ", "; -+ MSG_PUTS(extra_patches[i]); -+ } -+ } -+ - #ifdef MODIFIED_BY - MSG_PUTS("\n"); - MSG_PUTS(_("Modified by ")); -@@ -1253,10 +1757,9 @@ - /* - * ":intro": clear screen, display intro screen and wait for return. - */ --/*ARGSUSED*/ - void - ex_intro(eap) -- exarg_T *eap; -+ exarg_T *eap UNUSED; - { - screenclear(); - intro_message(TRUE); -diff -Naur vim72.orig/src/vim.h vim72/src/vim.h ---- vim72.orig/src/vim.h 2008-08-09 17:03:38.000000000 +0100 -+++ vim72/src/vim.h 2009-07-22 22:54:22.000000000 +0100 -@@ -262,6 +262,14 @@ - # define __PARMS(x) __ARGS(x) - #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 we're compiling in C++ (currently only KVim), the system - * headers must have the correct prototypes or nothing will build. - * conversely, our prototypes might clash due to throw() specifiers and -@@ -341,8 +349,14 @@ - #ifdef BACKSLASH_IN_FILENAME - # define PATH_ESC_CHARS ((char_u *)" \t\n*?[{`%#'\"|!<") - #else --# define PATH_ESC_CHARS ((char_u *)" \t\n*?[{`$\\%#'\"|!<") --# define SHELL_ESC_CHARS ((char_u *)" \t\n*?[{`$\\%#'\"|!<>();&") -+# ifdef VMS -+ /* VMS allows a lot of characters in the file name */ -+# define PATH_ESC_CHARS ((char_u *)" \t\n*?{`\\%#'\"|!") -+# define SHELL_ESC_CHARS ((char_u *)" \t\n*?{`\\%#'|!()&") -+# else -+# define PATH_ESC_CHARS ((char_u *)" \t\n*?[{`$\\%#'\"|!<") -+# define SHELL_ESC_CHARS ((char_u *)" \t\n*?[{`$\\%#'\"|!<>();&") -+# endif - #endif - - #define NUMBUFLEN 30 /* length of a buffer to store a number in ASCII */ -@@ -370,7 +384,7 @@ - * Define __w64 as an empty token for everything but MSVC 7.x or later. - */ - # if !defined(_MSC_VER) || (_MSC_VER < 1300) --# define __w64 -+# define __w64 - # endif - typedef unsigned long __w64 long_u; - typedef long __w64 long_i; -@@ -702,6 +716,8 @@ - #define EXPAND_USER_DEFINED 30 - #define EXPAND_USER_LIST 31 - #define EXPAND_SHELLCMD 32 -+#define EXPAND_CSCOPE 33 -+#define EXPAND_SIGN 34 - - /* Values for exmode_active (0 is no exmode) */ - #define EXMODE_NORMAL 1 -@@ -1051,6 +1067,7 @@ - #define WSP_HELP 16 /* creating the help window */ - #define WSP_BELOW 32 /* put new window below/right */ - #define WSP_ABOVE 64 /* put new window above/left */ -+#define WSP_NEWLOC 128 /* don't copy location list */ - - /* - * arguments for gui_set_shellsize() -@@ -1328,11 +1345,11 @@ - # define MSG_BUF_CLEN MSG_BUF_LEN /* cell length */ - #endif - --#if defined(AMIGA) || defined(__linux__) || defined(__QNX__) || defined(__CYGWIN32__) || defined(_AIX) --# define TBUFSZ 2048 /* buffer size for termcap entry */ --#else --# define TBUFSZ 1024 /* buffer size for termcap entry */ --#endif -+/* Size of the buffer used for tgetent(). Unfortunately this is largely -+ * undocumented, some systems use 1024. Using a buffer that is too small -+ * causes a buffer overrun and a crash. Use the maximum known value to stay -+ * on the safe side. */ -+#define TBUFSZ 2048 /* buffer size for termcap entry */ - - /* - * Maximum length of key sequence to be mapped. -@@ -1451,8 +1468,8 @@ - # define PERROR(msg) perror(msg) - #endif - --typedef long linenr_T; /* line number type */ --typedef unsigned colnr_T; /* column number type */ -+typedef long linenr_T; /* line number type */ -+typedef int colnr_T; /* column number type */ - typedef unsigned short disptick_T; /* display tick type */ - - #define MAXLNUM (0x7fffffffL) /* maximum (invalid) line number */ -@@ -1728,7 +1745,8 @@ - #define VV_MOUSE_COL 51 - #define VV_OP 52 - #define VV_SEARCHFORWARD 53 --#define VV_LEN 54 /* number of v: vars */ -+#define VV_OLDFILES 54 -+#define VV_LEN 55 /* number of v: vars */ - - #ifdef FEAT_CLIPBOARD - -@@ -1979,6 +1997,9 @@ - # endif - #endif - -+#ifndef FEAT_NETBEANS_INTG -+# undef NBDEBUG -+#endif - #ifdef NBDEBUG /* Netbeans debugging. */ - # include "nbdebug.h" - #else -@@ -2054,4 +2075,10 @@ - #define DOSO_VIMRC 1 /* loading vimrc file */ - #define DOSO_GVIMRC 2 /* loading gvimrc file */ - -+/* flags for read_viminfo() and children */ -+#define VIF_WANT_INFO 1 /* load non-mark info */ -+#define VIF_WANT_MARKS 2 /* load file marks */ -+#define VIF_FORCEIT 4 /* overwrite info already read */ -+#define VIF_GET_OLDFILES 8 /* load v:oldfiles */ -+ - #endif /* VIM__H */ -diff -Naur vim72.orig/src/window.c vim72/src/window.c ---- vim72.orig/src/window.c 2008-08-06 12:00:30.000000000 +0100 -+++ vim72/src/window.c 2009-07-22 22:54:23.000000000 +0100 -@@ -11,8 +11,8 @@ - - static int path_is_url __ARGS((char_u *p)); - #if defined(FEAT_WINDOWS) || defined(PROTO) --static int win_split_ins __ARGS((int size, int flags, win_T *newwin, int dir)); --static void win_init __ARGS((win_T *newp, win_T *oldp)); -+static void win_init __ARGS((win_T *newp, win_T *oldp, int flags)); -+static void win_init_some __ARGS((win_T *newp, win_T *oldp)); - static void frame_comp_pos __ARGS((frame_T *topfrp, int *row, int *col)); - static void frame_setheight __ARGS((frame_T *curfrp, int height)); - #ifdef FEAT_VERTSPLIT -@@ -23,8 +23,8 @@ - static void win_totop __ARGS((int size, int flags)); - static void win_equal_rec __ARGS((win_T *next_curwin, int current, frame_T *topfr, int dir, int col, int row, int width, int height)); - static int last_window __ARGS((void)); -+static int one_window __ARGS((void)); - static win_T *win_free_mem __ARGS((win_T *win, int *dirp, tabpage_T *tp)); --static win_T *winframe_remove __ARGS((win_T *win, int *dirp, tabpage_T *tp)); - static frame_T *win_altframe __ARGS((win_T *win, tabpage_T *tp)); - static tabpage_T *alt_tabpage __ARGS((void)); - static win_T *frame2win __ARGS((frame_T *frp)); -@@ -41,6 +41,7 @@ - #endif - #endif - static int win_alloc_firstwin __ARGS((win_T *oldwin)); -+static void new_frame __ARGS((win_T *wp)); - #if defined(FEAT_WINDOWS) || defined(PROTO) - static tabpage_T *alloc_tabpage __ARGS((void)); - static int leave_tabpage __ARGS((buf_T *new_curbuf)); -@@ -49,8 +50,6 @@ - static int frame_minheight __ARGS((frame_T *topfrp, win_T *next_curwin)); - static void win_enter_ext __ARGS((win_T *wp, int undo_sync, int no_curwin)); - static void win_free __ARGS((win_T *wp, tabpage_T *tp)); --static void win_append __ARGS((win_T *, win_T *)); --static void win_remove __ARGS((win_T *, tabpage_T *tp)); - static void frame_append __ARGS((frame_T *after, frame_T *frp)); - static void frame_insert __ARGS((frame_T *before, frame_T *frp)); - static void frame_remove __ARGS((frame_T *frp)); -@@ -62,17 +61,15 @@ - static void frame_add_height __ARGS((frame_T *frp, int n)); - static void last_status_rec __ARGS((frame_T *fr, int statusline)); - --static void make_snapshot __ARGS((void)); - static void make_snapshot_rec __ARGS((frame_T *fr, frame_T **frp)); --static void clear_snapshot __ARGS((tabpage_T *tp)); -+static void clear_snapshot __ARGS((tabpage_T *tp, int idx)); - static void clear_snapshot_rec __ARGS((frame_T *fr)); --static void restore_snapshot __ARGS((int close_curwin)); - static int check_snapshot_rec __ARGS((frame_T *sn, frame_T *fr)); - static win_T *restore_snapshot_rec __ARGS((frame_T *sn, frame_T *fr)); - - #endif /* FEAT_WINDOWS */ - --static win_T *win_alloc __ARGS((win_T *after)); -+static win_T *win_alloc __ARGS((win_T *after, int hidden)); - static void win_new_height __ARGS((win_T *, int)); - - #define URL_SLASH 1 /* path_is_url() has found "://" */ -@@ -259,7 +256,7 @@ - /* cursor to previous window with wrap around */ - case 'W': - CHECK_CMDWIN -- if (lastwin == firstwin && Prenum != 1) /* just one window */ -+ if (firstwin == lastwin && Prenum != 1) /* just one window */ - beep_flush(); - else - { -@@ -343,7 +340,7 @@ - - /* move window to new tab page */ - case 'T': -- if (firstwin == lastwin) -+ if (one_window()) - MSG(_(m_onlyone)); - else - { -@@ -531,7 +528,8 @@ - # ifdef FEAT_SCROLLBIND - curwin->w_p_scb = FALSE; - # endif -- (void)do_ecmd(0, ptr, NULL, NULL, ECMD_LASTL, ECMD_HIDE); -+ (void)do_ecmd(0, ptr, NULL, NULL, ECMD_LASTL, -+ ECMD_HIDE, NULL); - if (nchar == 'F' && lnum >= 0) - { - curwin->w_cursor.lnum = lnum; -@@ -593,9 +591,7 @@ - ++allow_keys; /* no mapping for xchar, but allow key codes */ - if (xchar == NUL) - xchar = plain_vgetc(); --#ifdef FEAT_LANGMAP - LANGMAP_ADJUST(xchar, TRUE); --#endif - --no_mapping; - --allow_keys; - #ifdef FEAT_CMDL_INFO -@@ -680,9 +676,9 @@ - /* When creating the help window make a snapshot of the window layout. - * Otherwise clear the snapshot, it's now invalid. */ - if (flags & WSP_HELP) -- make_snapshot(); -+ make_snapshot(SNAP_HELP_IDX); - else -- clear_snapshot(curtab); -+ clear_snapshot(curtab, SNAP_HELP_IDX); - - return win_split_ins(size, flags, NULL, 0); - } -@@ -693,7 +689,7 @@ - * top/left/right/bottom. - * return FAIL for failure, OK otherwise - */ -- static int -+ int - win_split_ins(size, flags, newwin, dir) - int size; - int flags; -@@ -894,14 +890,14 @@ - { - /* new window below/right of current one */ - if (newwin == NULL) -- wp = win_alloc(oldwin); -+ wp = win_alloc(oldwin, FALSE); - else - win_append(oldwin, wp); - } - else - { - if (newwin == NULL) -- wp = win_alloc(oldwin->w_prev); -+ wp = win_alloc(oldwin->w_prev, FALSE); - else - win_append(oldwin->w_prev, wp); - } -@@ -911,8 +907,15 @@ - if (wp == NULL) - return FAIL; - -+ new_frame(wp); -+ if (wp->w_frame == NULL) -+ { -+ win_free(wp, NULL); -+ return FAIL; -+ } -+ - /* make the contents of the new window the same as the current one */ -- win_init(wp, curwin); -+ win_init(wp, curwin, flags); - } - - /* -@@ -971,13 +974,7 @@ - } - - if (newwin == NULL) -- { -- /* Create a frame for the new window. */ -- frp = (frame_T *)alloc_clear((unsigned)sizeof(frame_T)); -- frp->fr_layout = FR_LEAF; -- frp->fr_win = wp; -- wp->w_frame = frp; -- } -+ frp = wp->w_frame; - else - frp = newwin->w_frame; - frp->fr_parent = curfrp->fr_parent; -@@ -1157,15 +1154,19 @@ - return OK; - } - -+ - /* - * Initialize window "newp" from window "oldp". - * Used when splitting a window and when creating a new tab page. - * The windows will both edit the same buffer. -+ * WSP_NEWLOC may be specified in flags to prevent the location list from -+ * being copied. - */ - static void --win_init(newp, oldp) -+win_init(newp, oldp, flags) - win_T *newp; - win_T *oldp; -+ int flags UNUSED; - { - int i; - -@@ -1190,19 +1191,19 @@ - copy_jumplist(oldp, newp); - #endif - #ifdef FEAT_QUICKFIX -- copy_loclist(oldp, newp); -+ if (flags & WSP_NEWLOC) -+ { -+ /* Don't copy the location list. */ -+ newp->w_llist = NULL; -+ newp->w_llist_ref = NULL; -+ } -+ else -+ copy_loclist(oldp, newp); - #endif - if (oldp->w_localdir != NULL) - newp->w_localdir = vim_strsave(oldp->w_localdir); - -- /* Use the same argument list. */ -- newp->w_alist = oldp->w_alist; -- ++newp->w_alist->al_refcount; -- newp->w_arg_idx = oldp->w_arg_idx; -- -- /* -- * copy tagstack and options from existing window -- */ -+ /* copy tagstack and folds */ - for (i = 0; i < oldp->w_tagstacklen; i++) - { - newp->w_tagstack[i] = oldp->w_tagstack[i]; -@@ -1212,10 +1213,29 @@ - } - newp->w_tagstackidx = oldp->w_tagstackidx; - newp->w_tagstacklen = oldp->w_tagstacklen; -- win_copy_options(oldp, newp); - # ifdef FEAT_FOLDING - copyFoldingState(oldp, newp); - # endif -+ -+ win_init_some(newp, oldp); -+} -+ -+/* -+ * Initialize window "newp" from window"old". -+ * Only the essential things are copied. -+ */ -+ static void -+win_init_some(newp, oldp) -+ win_T *newp; -+ win_T *oldp; -+{ -+ /* Use the same argument list. */ -+ newp->w_alist = oldp->w_alist; -+ ++newp->w_alist->al_refcount; -+ newp->w_arg_idx = oldp->w_arg_idx; -+ -+ /* copy options from existing window */ -+ win_copy_options(oldp, newp); - } - - #endif /* FEAT_WINDOWS */ -@@ -1258,11 +1278,10 @@ - * Must be called when there is just one window, filling the whole screen - * (excluding the command line). - */ --/*ARGSUSED*/ - int - make_windows(count, vertical) - int count; -- int vertical; /* split windows vertically if TRUE */ -+ int vertical UNUSED; /* split windows vertically if TRUE */ - { - int maxcount; - int todo; -@@ -1557,15 +1576,8 @@ - #if defined(FEAT_GUI) && defined(FEAT_VERTSPLIT) - /* When 'guioptions' includes 'L' or 'R' may have to remove or add - * scrollbars. Have to update them anyway. */ -- if (gui.in_use) -- { -- out_flush(); -- gui_init_which_components(NULL); -- gui_update_scrollbars(TRUE); -- } -- need_mouse_correct = TRUE; -+ gui_may_update_scrollbars(); - #endif -- - } - - /* -@@ -2040,13 +2052,40 @@ - } - - /* -- * Return TRUE if the current window is the only window that exists. -+ * Return TRUE if the current window is the only window that exists (ignoring -+ * "aucmd_win"). - * Returns FALSE if there is a window, possibly in another tab page. - */ - static int - last_window() - { -- return (lastwin == firstwin && first_tabpage->tp_next == NULL); -+ return (one_window() && first_tabpage->tp_next == NULL); -+} -+ -+/* -+ * Return TRUE if there is only one window other than "aucmd_win" in the -+ * current tab page. -+ */ -+ static int -+one_window() -+{ -+#ifdef FEAT_AUTOCMD -+ win_T *wp; -+ int seen_one = FALSE; -+ -+ FOR_ALL_WINDOWS(wp) -+ { -+ if (wp != aucmd_win) -+ { -+ if (seen_one) -+ return FALSE; -+ seen_one = TRUE; -+ } -+ } -+ return TRUE; -+#else -+ return firstwin == lastwin; -+#endif - } - - /* -@@ -2075,6 +2114,19 @@ - return; - } - -+#ifdef FEAT_AUTOCMD -+ if (win == aucmd_win) -+ { -+ EMSG(_("E813: Cannot close autocmd window")); -+ return; -+ } -+ if ((firstwin == aucmd_win || lastwin == aucmd_win) && one_window()) -+ { -+ EMSG(_("E814: Cannot close window, only autocmd window would remain")); -+ return; -+ } -+#endif -+ - /* - * When closing the last window in a tab page first go to another tab - * page and then close the window and the tab page. This avoids that -@@ -2104,7 +2156,7 @@ - if (win->w_buffer->b_help) - help_window = TRUE; - else -- clear_snapshot(curtab); -+ clear_snapshot(curtab, SNAP_HELP_IDX); - - #ifdef FEAT_AUTOCMD - if (win == curwin) -@@ -2221,7 +2273,7 @@ - /* After closing the help window, try restoring the window layout from - * before it was opened. */ - if (help_window) -- restore_snapshot(close_curwin); -+ restore_snapshot(SNAP_HELP_IDX, close_curwin); - - #if defined(FEAT_GUI) && defined(FEAT_VERTSPLIT) - /* When 'guioptions' includes 'L' or 'R' may have to remove scrollbars. */ -@@ -2302,13 +2354,6 @@ - frame_T *frp; - win_T *wp; - --#ifdef FEAT_FOLDING -- clearFolding(win); --#endif -- -- /* reduce the reference count to the argument list. */ -- alist_unlink(win->w_alist); -- - /* Remove the window and its frame from the tree of frames. */ - frp = win->w_frame; - wp = winframe_remove(win, dirp, tp); -@@ -2334,6 +2379,14 @@ - tabpage_close(TRUE); - # endif - -+# ifdef FEAT_AUTOCMD -+ if (aucmd_win != NULL) -+ { -+ (void)win_free_mem(aucmd_win, &dummy, NULL); -+ aucmd_win = NULL; -+ } -+# endif -+ - while (firstwin != NULL) - (void)win_free_mem(firstwin, &dummy, NULL); - } -@@ -2343,11 +2396,10 @@ - * Remove a window and its frame from the tree of frames. - * Returns a pointer to the window that got the freed up space. - */ --/*ARGSUSED*/ -- static win_T * -+ win_T * - winframe_remove(win, dirp, tp) - win_T *win; -- int *dirp; /* set to 'v' or 'h' for direction if 'ea' */ -+ int *dirp UNUSED; /* set to 'v' or 'h' for direction if 'ea' */ - tabpage_T *tp; /* tab page "win" is in, NULL for current */ - { - frame_T *frp, *frp2, *frp3; -@@ -3083,7 +3135,7 @@ - win_T *nextwp; - int r; - -- if (lastwin == firstwin) -+ if (one_window()) - { - if (message - #ifdef FEAT_AUTOCMD -@@ -3145,27 +3197,34 @@ - void - curwin_init() - { -- redraw_win_later(curwin, NOT_VALID); -- curwin->w_lines_valid = 0; -- curwin->w_cursor.lnum = 1; -- curwin->w_curswant = curwin->w_cursor.col = 0; -+ win_init_empty(curwin); -+} -+ -+ void -+win_init_empty(wp) -+ win_T *wp; -+{ -+ redraw_win_later(wp, NOT_VALID); -+ wp->w_lines_valid = 0; -+ wp->w_cursor.lnum = 1; -+ wp->w_curswant = wp->w_cursor.col = 0; - #ifdef FEAT_VIRTUALEDIT -- curwin->w_cursor.coladd = 0; -+ wp->w_cursor.coladd = 0; - #endif -- curwin->w_pcmark.lnum = 1; /* pcmark not cleared but set to line 1 */ -- curwin->w_pcmark.col = 0; -- curwin->w_prev_pcmark.lnum = 0; -- curwin->w_prev_pcmark.col = 0; -- curwin->w_topline = 1; -+ wp->w_pcmark.lnum = 1; /* pcmark not cleared but set to line 1 */ -+ wp->w_pcmark.col = 0; -+ wp->w_prev_pcmark.lnum = 0; -+ wp->w_prev_pcmark.col = 0; -+ wp->w_topline = 1; - #ifdef FEAT_DIFF -- curwin->w_topfill = 0; -+ wp->w_topfill = 0; - #endif -- curwin->w_botline = 2; -+ wp->w_botline = 2; - #ifdef FEAT_FKMAP -- if (curwin->w_p_rl) -- curwin->w_farsi = W_CONV + W_R_L; -+ if (wp->w_p_rl) -+ wp->w_farsi = W_CONV + W_R_L; - else -- curwin->w_farsi = W_CONV; -+ wp->w_farsi = W_CONV; - #endif - } - -@@ -3187,9 +3246,30 @@ - first_tabpage->tp_topframe = topframe; - curtab = first_tabpage; - #endif -+ - return OK; - } - -+#if defined(FEAT_AUTOCMD) || defined(PROTO) -+/* -+ * Init "aucmd_win". This can only be done after the first -+ * window is fully initialized, thus it can't be in win_alloc_first(). -+ */ -+ void -+win_alloc_aucmd_win() -+{ -+ aucmd_win = win_alloc(NULL, TRUE); -+ if (aucmd_win != NULL) -+ { -+ win_init_some(aucmd_win, curwin); -+# ifdef FEAT_SCROLLBIND -+ aucmd_win->w_p_scb = FALSE; -+# endif -+ new_frame(aucmd_win); -+ } -+} -+#endif -+ - /* - * Allocate the first window or the first window in a new tab page. - * When "oldwin" is NULL create an empty buffer for it. -@@ -3201,7 +3281,7 @@ - win_alloc_firstwin(oldwin) - win_T *oldwin; - { -- curwin = win_alloc(NULL); -+ curwin = win_alloc(NULL, FALSE); - if (oldwin == NULL) - { - /* Very first window, need to create an empty buffer for it and -@@ -3220,7 +3300,7 @@ - else - { - /* First window in new tab page, initialize it from "oldwin". */ -- win_init(curwin, oldwin); -+ win_init(curwin, oldwin, 0); - - # ifdef FEAT_SCROLLBIND - /* We don't want scroll-binding in the first window. */ -@@ -3229,21 +3309,36 @@ - } - #endif - -- topframe = (frame_T *)alloc_clear((unsigned)sizeof(frame_T)); -- if (topframe == NULL) -+ new_frame(curwin); -+ if (curwin->w_frame == NULL) - return FAIL; -- topframe->fr_layout = FR_LEAF; -+ topframe = curwin->w_frame; - #ifdef FEAT_VERTSPLIT - topframe->fr_width = Columns; - #endif - topframe->fr_height = Rows - p_ch; - topframe->fr_win = curwin; -- curwin->w_frame = topframe; - - return OK; - } - - /* -+ * Create a frame for window "wp". -+ */ -+ static void -+new_frame(win_T *wp) -+{ -+ frame_T *frp = (frame_T *)alloc_clear((unsigned)sizeof(frame_T)); -+ -+ wp->w_frame = frp; -+ if (frp != NULL) -+ { -+ frp->fr_layout = FR_LEAF; -+ frp->fr_win = wp; -+ } -+} -+ -+/* - * Initialize the window and frame size to the maximum. - */ - void -@@ -3293,10 +3388,13 @@ - free_tabpage(tp) - tabpage_T *tp; - { -+ int idx; -+ - # ifdef FEAT_DIFF - diff_clear(tp); - # endif -- clear_snapshot(tp); -+ for (idx = 0; idx < SNAP_COUNT; ++idx) -+ clear_snapshot(tp, idx); - #ifdef FEAT_EVAL - vars_clear(&tp->tp_vars.dv_hashtab); /* free all t: variables */ - #endif -@@ -3363,12 +3461,7 @@ - #if defined(FEAT_GUI) - /* When 'guioptions' includes 'L' or 'R' may have to remove or add - * scrollbars. Have to update them anyway. */ -- if (gui.in_use && starting == 0) -- { -- gui_init_which_components(NULL); -- gui_update_scrollbars(TRUE); -- } -- need_mouse_correct = TRUE; -+ gui_may_update_scrollbars(); - #endif - - redraw_all_later(CLEAR); -@@ -3490,10 +3583,9 @@ - * FAIL. - * Careful: When OK is returned need to get a new tab page very very soon! - */ --/*ARGSUSED*/ - static int - leave_tabpage(new_curbuf) -- buf_T *new_curbuf; /* what is going to be the new curbuf, -+ buf_T *new_curbuf UNUSED; /* what is going to be the new curbuf, - NULL if unknown */ - { - tabpage_T *tp = curtab; -@@ -3535,11 +3627,10 @@ - * Start using tab page "tp". - * Only to be used after leave_tabpage() or freeing the current tab page. - */ --/*ARGSUSED*/ - static void - enter_tabpage(tp, old_curbuf) - tabpage_T *tp; -- buf_T *old_curbuf; -+ buf_T *old_curbuf UNUSED; - { - int old_off = tp->tp_firstwin->w_winrow; - win_T *next_prevwin = tp->tp_prevwin; -@@ -3588,12 +3679,7 @@ - #if defined(FEAT_GUI) - /* When 'guioptions' includes 'L' or 'R' may have to remove or add - * scrollbars. Have to update them anyway. */ -- if (gui.in_use && starting == 0) -- { -- gui_init_which_components(NULL); -- gui_update_scrollbars(TRUE); -- } -- need_mouse_correct = TRUE; -+ gui_may_update_scrollbars(); - #endif - - redraw_all_later(CLEAR); -@@ -4028,14 +4114,14 @@ - if (mch_dirname(cwd, MAXPATHL) == OK) - globaldir = vim_strsave(cwd); - } -- mch_chdir((char *)curwin->w_localdir); -- shorten_fnames(TRUE); -+ if (mch_chdir((char *)curwin->w_localdir) == 0) -+ shorten_fnames(TRUE); - } - else if (globaldir != NULL) - { - /* Window doesn't have a local directory and we are not in the global - * directory: Change to the global directory. */ -- mch_chdir((char *)globaldir); -+ ignored = mch_chdir((char *)globaldir); - vim_free(globaldir); - globaldir = NULL; - shorten_fnames(TRUE); -@@ -4145,12 +4231,13 @@ - #endif - - /* -- * allocate a window structure and link it in the window list -+ * Allocate a window structure and link it in the window list when "hidden" is -+ * FALSE. - */ --/*ARGSUSED*/ - static win_T * --win_alloc(after) -- win_T *after; -+win_alloc(after, hidden) -+ win_T *after UNUSED; -+ int hidden UNUSED; - { - win_T *newwin; - -@@ -4176,7 +4263,8 @@ - * link the window in the window list - */ - #ifdef FEAT_WINDOWS -- win_append(after, newwin); -+ if (!hidden) -+ win_append(after, newwin); - #endif - #ifdef FEAT_VERTSPLIT - newwin->w_wincol = 0; -@@ -4237,6 +4325,13 @@ - { - int i; - -+#ifdef FEAT_FOLDING -+ clearFolding(wp); -+#endif -+ -+ /* reduce the reference count to the argument list. */ -+ alist_unlink(wp->w_alist); -+ - #ifdef FEAT_AUTOCMD - /* Don't execute autocommands while the window is halfway being deleted. - * gui_mch_destroy_scrollbar() may trigger a FocusGained event. */ -@@ -4299,7 +4394,10 @@ - } - #endif /* FEAT_GUI */ - -- win_remove(wp, tp); -+#ifdef FEAT_AUTOCMD -+ if (wp != aucmd_win) -+#endif -+ win_remove(wp, tp); - vim_free(wp); - - #ifdef FEAT_AUTOCMD -@@ -4310,7 +4408,7 @@ - /* - * Append window "wp" in the window list after window "after". - */ -- static void -+ void - win_append(after, wp) - win_T *after, *wp; - { -@@ -4336,7 +4434,7 @@ - /* - * Remove a window from the window list. - */ -- static void -+ void - win_remove(wp, tp) - win_T *wp; - tabpage_T *tp; /* tab page "win" is in, NULL for current */ -@@ -6036,6 +6134,7 @@ - /* - * Return TRUE if there is only one window (in the current tab page), not - * counting a help or preview window, unless it is the current window. -+ * Does not count "aucmd_win". - */ - int - only_one_window() -@@ -6049,11 +6148,15 @@ - return FALSE; - - for (wp = firstwin; wp != NULL; wp = wp->w_next) -- if (!((wp->w_buffer->b_help && !curbuf->b_help) -+ if ((!((wp->w_buffer->b_help && !curbuf->b_help) - # ifdef FEAT_QUICKFIX - || wp->w_p_pvw - # endif - ) || wp == curwin) -+# ifdef FEAT_AUTOCMD -+ && wp != aucmd_win -+# endif -+ ) - ++count; - return (count <= 1); - #else -@@ -6108,11 +6211,12 @@ - /* - * Create a snapshot of the current frame sizes. - */ -- static void --make_snapshot() -+ void -+make_snapshot(idx) -+ int idx; - { -- clear_snapshot(curtab); -- make_snapshot_rec(topframe, &curtab->tp_snapshot); -+ clear_snapshot(curtab, idx); -+ make_snapshot_rec(topframe, &curtab->tp_snapshot[idx]); - } - - static void -@@ -6140,11 +6244,12 @@ - * Remove any existing snapshot. - */ - static void --clear_snapshot(tp) -+clear_snapshot(tp, idx) - tabpage_T *tp; -+ int idx; - { -- clear_snapshot_rec(tp->tp_snapshot); -- tp->tp_snapshot = NULL; -+ clear_snapshot_rec(tp->tp_snapshot[idx]); -+ tp->tp_snapshot[idx] = NULL; - } - - static void -@@ -6164,26 +6269,27 @@ - * This is only done if the screen size didn't change and the window layout is - * still the same. - */ -- static void --restore_snapshot(close_curwin) -+ void -+restore_snapshot(idx, close_curwin) -+ int idx; - int close_curwin; /* closing current window */ - { - win_T *wp; - -- if (curtab->tp_snapshot != NULL -+ if (curtab->tp_snapshot[idx] != NULL - # ifdef FEAT_VERTSPLIT -- && curtab->tp_snapshot->fr_width == topframe->fr_width -+ && curtab->tp_snapshot[idx]->fr_width == topframe->fr_width - # endif -- && curtab->tp_snapshot->fr_height == topframe->fr_height -- && check_snapshot_rec(curtab->tp_snapshot, topframe) == OK) -+ && curtab->tp_snapshot[idx]->fr_height == topframe->fr_height -+ && check_snapshot_rec(curtab->tp_snapshot[idx], topframe) == OK) - { -- wp = restore_snapshot_rec(curtab->tp_snapshot, topframe); -+ wp = restore_snapshot_rec(curtab->tp_snapshot[idx], topframe); - win_comp_pos(); - if (wp != NULL && close_curwin) - win_goto(wp); - redraw_all_later(CLEAR); - } -- clear_snapshot(curtab); -+ clear_snapshot(curtab, idx); - } - - /* -diff -Naur vim72.orig/src/workshop.c vim72/src/workshop.c ---- vim72.orig/src/workshop.c 2008-06-21 19:53:26.000000000 +0100 -+++ vim72/src/workshop.c 2009-07-22 22:54:22.000000000 +0100 -@@ -204,12 +204,11 @@ - * Function: - * Load a given file into the WorkShop buffer. - */ --/*ARGSUSED*/ - void - workshop_load_file( - char *filename, /* the file to load */ - int line, /* an optional line number (or 0) */ -- char *frameid) /* used for multi-frame support */ -+ char *frameid UNUSED) /* used for multi-frame support */ - { - #ifdef WSDEBUG_TRACE - if (WSDLEVEL(WS_TRACE_VERBOSE | WS_TRACE)) -@@ -263,10 +262,9 @@ - load_window(filename, lineno); - } - --/*ARGSUSED*/ - void - workshop_front_file( -- char *filename) -+ char *filename UNUSED) - { - #ifdef WSDEBUG_TRACE - if (WSDLEVEL(WS_TRACE_VERBOSE | WS_TRACE)) -@@ -538,9 +536,8 @@ - * breakpoints have moved when a program has been recompiled and - * reloaded into dbx. - */ --/*ARGSUSED*/ - void --workshop_moved_marks(char *filename) -+workshop_moved_marks(char *filename UNUSED) - { - #ifdef WSDEBUG_TRACE - if (WSDLEVEL(WS_TRACE_VERBOSE | WS_TRACE)) -@@ -575,11 +572,10 @@ - return (int)h; - } - --/*ARGSUSED*/ - void - workshop_footer_message( -- char *message, -- int severity) /* severity is currently unused */ -+ char *message, -+ int severity UNUSED) /* severity is currently unused */ - { - #ifdef WSDEBUG_TRACE - if (WSDLEVEL(WS_TRACE_VERBOSE | WS_TRACE)) -@@ -687,15 +683,14 @@ - * command. The globals curMenuName and curMenuPriority contain the name and - * priority of the parent menu tree. - */ --/*ARGSUSED*/ - void - workshop_menu_item( - char *label, - char *verb, -- char *accelerator, -+ char *accelerator UNUSED, - char *acceleratorText, -- char *name, -- char *filepos, -+ char *name UNUSED, -+ char *filepos UNUSED, - char *sensitive) - { - char cbuf[BUFSIZ]; -@@ -810,13 +805,12 @@ - workshopInitDone = True; - } - --/*ARGSUSED*/ - void - workshop_toolbar_button( - char *label, - char *verb, -- char *senseVerb, -- char *filepos, -+ char *senseVerb UNUSED, -+ char *filepos UNUSED, - char *help, - char *sense, - char *file, -@@ -968,7 +962,9 @@ - if (strcmp(option, "syntax") == 0) - vim_snprintf(cbuf, sizeof(cbuf), "syntax %s", value); - else if (strcmp(option, "savefiles") == 0) -- ; /* XXX - Not yet implemented */ -+ { -+ /* XXX - Not yet implemented */ -+ } - break; - - case 'l': -@@ -1098,10 +1094,9 @@ - /* - * A button in the toolbar has been pushed. - */ --/*ARGSUSED*/ - int - workshop_get_positions( -- void *clientData, /* unused */ -+ void *clientData UNUSED, - char **filename, /* output data */ - int *curLine, /* output data */ - int *curCol, /* output data */ -@@ -1121,8 +1116,12 @@ - ? (char *)curbuf->b_sfname : ""); - #endif - -- strcpy(ffname, (char *) curbuf->b_ffname); -- *filename = ffname; /* copy so nobody can change b_ffname */ -+ if (curbuf->b_ffname == NULL) -+ ffname[0] = NUL; -+ else -+ /* copy so nobody can change b_ffname */ -+ strcpy(ffname, (char *) curbuf->b_ffname); -+ *filename = ffname; - *curLine = curwin->w_cursor.lnum; - *curCol = curwin->w_cursor.col; - -@@ -1522,9 +1521,8 @@ - return NULL; - } - --/*ARGSUSED*/ - void --workshop_save_sensitivity(char *filename) -+workshop_save_sensitivity(char *filename UNUSED) - { - } - -diff -Naur vim72.orig/src/xxd/xxd.c vim72/src/xxd/xxd.c ---- vim72.orig/src/xxd/xxd.c 2007-11-29 20:05:16.000000000 +0000 -+++ vim72/src/xxd/xxd.c 2009-07-22 22:54:23.000000000 +0100 -@@ -64,6 +64,9 @@ - # define _CRT_SECURE_NO_DEPRECATE - # define _CRT_NONSTDC_NO_DEPRECATE - #endif -+#if !defined(CYGWIN) && (defined(CYGWIN32) || defined(__CYGWIN__) || defined(__CYGWIN32__)) -+# define CYGWIN -+#endif - - #include - #ifdef VAXC -@@ -77,7 +80,8 @@ - #if !defined(OS2) && defined(__EMX__) - # define OS2 - #endif --#if defined(MSDOS) || defined(WIN32) || defined(OS2) || defined(__BORLANDC__) -+#if defined(MSDOS) || defined(WIN32) || defined(OS2) || defined(__BORLANDC__) \ -+ || defined(CYGWIN) - # include /* for setmode() */ - #else - # ifdef UNIX -@@ -150,9 +154,6 @@ - # endif - #endif - --#if !defined(CYGWIN) && (defined(CYGWIN32) || defined(__CYGWIN__) || defined(__CYGWIN32__)) --# define CYGWIN --#endif - #if defined(MSDOS) || defined(WIN32) || defined(OS2) - # define BIN_READ(yes) ((yes) ? "rb" : "rt") - # define BIN_WRITE(yes) ((yes) ? "wb" : "wt") diff --git a/srcpkgs/vim/patches/vim-7.2-fixes-5.patch.gz b/srcpkgs/vim/patches/vim-7.2-fixes-5.patch.gz new file mode 100644 index 0000000000000000000000000000000000000000..9aacff6019f061eb2b1da69fc77a5617e36584c8 GIT binary patch literal 226431 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

YWqSy?M)Fd&T9wzv6fv zII^(6|MFo?L3l{{rE=Hb>x9moSGVC2Maj0ip6`Ad z-*8&wbj|A;{+>5&W?xJ1NHZiRe=F)$+*EVd>gXkg7c+XwE)l!&G_(1B`u_gw^}pVp|Nr~_{q=w6 z{Xf20{O2OB3oC4L8|3T$-<3LCvg}H*|I5Eze9!wOWY^x{*re|IdE)giZpvL(xZF4c zYachRkzp_CQ@dAq@Rjh-&;PR=BwEycoPYg$9Jx^A!)n`K;sQTS1g0eg8P>!Wy{eY{ z^5X8p*X8*M=Np(7)Vx-SQ$DyVxG21zNxCxcYYE?;MIb-wU_uzwg~LcTRdsrgN7!4oBkbFOBmR%8Y~F2EUUY9 zt+&YXweIru$HbgNl{-9&q+P`ON&-6G)!E#%yw%;{HP=mn|E+xK_oA;^-+nj$-TXPm zHm1VUI^lbP{`A$?6Rh5yzPtJEq^R_X7tx?Nw*qAyh=D;4m?L5uIO#0>F+A00dQ z1w2*otc*!n^LnF0*9$lI}chgx+#^>K3{7)}_R>OaBhv^kn%k@5v#ts@MQO zv8ftAtmJ&Jw66Zk`{whm>ViLvY8`U}S|w*Y<*QiP&lkG+W%t`Xc6Im99<0(WdmXDX z|MByZ=U!h9yehr&x1eCpZ0>B?$5EaK`(}J;kWe}~?T4Z6D+#eqi8CBgsb{Wa*W8!6 zCha@5BRtquWb1=FuDdHfebN81Fxxg^%Ul^3?K`}ezeP>IZ{7YozkE*hdkrQt^ZngQ z?_bu-)W%e7`~CVh|8MuNv;HTsCv)+#+OuCc_mBTxZ0U*faUM+PriyN=sJhHv+0Ff6 zp}=!v0ZGL**QB)j59G*PewVDhQ+s;fuDmO6wA_|%4q!R^?ykhVGtZK>{w}wzIJv#H z#9xSO)w0?ss~#?A^}xh$nwbq8a(&8iwq2hV-Y|AqUwSfE;ZWa_b<@H&99%XdN=P;O zg5&Z7mohb`N#s?PAD;b_cV|=o(g23QEBE$ltkkLeqWAEB8*`xdzW-5wX0NT%kT(kF4x5K6o<5K=#w)YjCU_zejKc`Gjs}5naC9{{x`g< zIy5J_uFGcJd;Ic?Ioch!RJ~8EV?8WQY-;@3q2P`?iYHpxJUt%;5yX*c% z-0a5JSDZ_{k!NDN?$bZp-}_v4A7|g0_F|8P-N~o3OrKwjEPr0|{ki$^~I-<#58 z`DRsiUQxfU!lZS-{qLtr?r*P6O3hUIYB#h`dM3H0eBNh?vrCg%;u3?N%4-IuJxrVJ z^!m_Q-=*<-r}S1h^?Vg@zx(<6-MNd61?tYFbrMqQxc|n;TD7Wrwa2j4KsOdH>^$Mb-ZL z3ND}4vcy9x*EnpP{Vmd9tEISU{pq*aWxuu8GfzBpS}-(NY3WY$4i#RR72GjK{3U!B zGVd(CRWDq7!_tcV%^u5hk`o$E_G@SKa2K?^(QCI}zJJbBo(LYEGB0tf1JiE3eK-Gk z(U#f?Qbl3%QhUvv3M|)NcRIiQZt>>XR==X>Z=ZCr!Fx+0|JFY$``*aAT|EDzV&@_~ zztC-yCsj>Zx^8v3TXKG)+WM@oA6IQFyFT?&e2Y&)sHM+wd(O#R?uSig`Mckm8pHWh zc-vZC-3i-X{0ZCW=B96?5ag_5Gvn39kG!7*%ib)18yd!!uHbMtNsgh$Si(JO)KQhbGG!m=@js5*6T>zjwzCzSjo2nakRQZ+w*ZVkr>5|Ksze&ynmi)Fl#%3}426tWo<` zX7;x7&?KWDD-Ua4FuArNIp1XQ{h5n(We-&`GP`{GY?yMPJ?leqA@`ww!ESfhG;?@E z%U)Oa@2xUn?$!Ob*4|YeZ5?Gqt6rtpMJ$wGnrjN`de5SqdHjf zs!QI4t+;ul`1%^ACY$4dZYmpYr>4hT>^^EdwN~O{uhpUIRjfQ8)tqBhz1|i#}&-`*UxiHoB!tV#{+rWRxJ5$+iTYqv4x}W&GjBZiyLKyEa!|i zToSm)vWbr~>dMMZJG72WHJo}-A!?hn$i-9aCQYArtMj>)%pKhWZ@c^)^B~A?oBxsbiH*-YwFv>Qq%fQzWsOS z?qAhgws)9glKgnIL~bO9efyNU;O4D9=!Y|~`LO)57x-@W{}x%v8r za?NIe`CCt|zMUbo^e?ye&Ay;F8!N1W^&V6d{!a^7F>RyCURm2vzFiwS1anpvfBk;` zcXjMa_y0@oT~R(hbMqGmD>v;4pS~p*ePmd(c5me2qp}Y#?R&%$wo_&*`xFIZTl;&f zrLTNaEuHYGVRmVcM`o03s<-N{!(DbqzrQrQU46V$Yv%Ejg&%*Xo~!8gJ(+jipKT4F z_s=`ltSZ(41`eMLX7p4QIM~M@-E1eiXZzOP=DCZvw_DF()Kjl_v#$RC`|iz3$9>x3 z4^Q!Umlim(2y$%y*=WjsepT^~atAi{w54;k+@EY&V^ecp_2z?1(TrO4*SJkY%bS)a z=-*G?mm;Sf!QWR}#r(}qA$wKHQJenkiq(bE9TRh% zNp|hIWtuLWlQi$ve%O2Rb9aiFcb?f2x25a0`RwLX_J6M7BKtqd$gLx}ZT3R%%}bOy#GYQ)8c1ZnpZ>wCJfzYWMAXqs8&QL6yOFqJXa5kuR0O z0&{~+?j*Hlo#o?RbV%d+tTWqF)uLSF*F0%;Yq<8-;h>?X(U*A_iYt^tT+A9j+VafJ z+Nw2W*l@Pqk@)Ua zUBb${1Lo~L^7_1~ps~`uwY>+$H9s7k7hM%v=BB!w$NfvBAgiYAjYq{dPaHkEN4;lV zS%>6P@7cMp&)wc~DkeuexO0cnw+Nvt`+C##q$i!t=~|uFa$M>4{x>I<6!WcWI(n(+ zNz$9B%2LbT8F5OVZF~84S?9kgXNh-kTx^+slwn=xNmr$W2;H1j;wQ4_t-tS5n{{dN z(hA89u4k&${-sLjvskYeNm2;dF=5-+AL1t~gD#oJ{N9k{tnljp(n@E!-ug;Eg;jD3 zIStO6^e0U|$vUk=Z2I*p=0}q&m;VepKXHp$$-1O>3R|r-gV%nOSbF#P^pZE1vh-$Y z@?LdabGKS!rk%0E#KPpKmtNelf1HxBqFbWzmHOmF8-eLNTTPTi_fEdaw`0;o@%itGbVB->N#s_DLO7Q$i zYfIMh6#oA)um1aV^WXBS7nQ%UJ<%!COEoNU+x_%_r{(%Dy8oG$nKOxfDfGE>RM}~N zMb@wLj@x&eyk9fN_RaUn(R{1tt!R?Ge`!ZVHsg(@g|@tB%&+dAK4q4|T;E`xDc^UC zmG)M6zRlKHWTAJ$M>IVA@%NN0Y5vk%9+%!x^t-x7}QPLN+?4?B$hP*rczU<=Q1Ib}cOlOt!syF0a4zLVVhx zvo{VHdrA8WJkK|YHm@$O*|5F-%e6U&%{fKi+cCcq)GxV`DswgcOKG=n#5PUy=03ZK zRyk$MX#$OpKX&*h&RMp>_~QNfF$XmkHZ3bwi|+M(?&Y0mq>x<|7PTb3{#ERk6PlW9 z3%tDg=TExSwS38wckkNyTH4-CjQ#L5@$;k~W!?LO*52LtDOqNbtP9!kRp*Zd zF8ku^HFx)3KLc@v%Gk>Rtv~qQU%gr#TGZ+@=k(wGo+lOFdROE%euz9agZT#c-id3Y zZm@L9t#F$YC~vth?d~hlHx3Tms=LdBKCS-Vb@Ae)HAXFm1@f!PnWj{ld9!r}^e>xK zF)R12;fwoy0hWj4>r3QcNgrOcI&gjL+4fDG*QO{tORbSzv(WkJt(Q`r3U5xY=}ta0 z`(DC=t(g&$Qv$G>+FybZxzRq`4z_kw$yY+zIUWA3GRa?K!CPFM8tQg+)g~q(djY z$iAAk_Ra(21yUgl#>;iuFF6(abY9bc;=mW|S<=IKdWzen*&h#16*Vykq5U&kd%5%*2`Qs^1CT^SY`_B1Of9KZLpAPg8-M#FP z&|$5=Yu`Q4TAwzVL;v^|FO}0v**317wEF9|o#&O(DsQ!ToEFo*y!Tyi?wiiv7S=yb zHc3p;F;FyWzVSiGd!y_1x#iD~?{2T=`@FN%<)uhQ@)LER zjmA?2<*Wy}M`smvo;r~7?&>d-`o`q0Gt)z*R_pf(Sex#+bM2$pwQiouDDuB_$wJ{*(z4lxfsZEsDq63nwB^sDRn7mk&hu~8-@i4}G$haBB3KUlH+=Q?><%=C(F!rrK4wU~UfBf^Kz2AF+)Bb>6nAm3uj zvcqP~ccd4+5~`6^TPel=toGgug-yw>Kkd3!eE#U8nisvuZt@EG!i|+%H@}or ztqPN{nrigqouyQg0Auw3fL+UzTldMFRJHdzD<<&y_M$@Hn=QHb+nS7aFBU$rWQEb~ zYtk-luXAOcrUg&`7<1G;_0ToH?P^@wvvs76c1mcUzFxGgeOhK5U!BaE{JeL%hu2G< zGG8eXIz|0VskF(~Z9b}!^Fz*x?OWls`$4JpQ`R;4+jRE2i>>*-Q4MbDSf~ zCg`4uRn2+f?7%)_rOn(gzY3R0rQF}UBBw!B-SolX)9>Y`J-p$`-?8=v>%3FTRS(`u zx7%<%JH@u~`=l1}Yt_2%*6#EY`uctKw6zvojZ61B7QHrRbSYkC+GH3lf`FN-=J`sdxQs>vR=ewOePxqNDH0`BZQJakhi$3D>Jlk6uW0d_H&Z-@Kry zXP%mHss&ZT%ea-ZH{B_mWEuGS?je=EEcTsf4UnB|o0oL+yxZ!S^-??Y91p9ZaBZsEzVsS6+J>s`v7GJUOWfAZubYbNY} zxHCzE^H|Zb$WMNE=E@aWJvo#qbJ|yD?$k4~v;hbP7YDmWXUd899^I2X~(B+Vplu?@fgWc)8@txc&yieb%?Ef<9 z;-{QThB~ue+~WHmzg^I48_xradlL0+FIAfT^vmCBrtbI_v1O{noaa`LXR1o@aT$o8 z4Sh7_Z8xJ6|NNQ0=eR=Gms@4*JZS9vYx{@iP1hV_Q~6gex}?Iq^H<4vQ_lD+!p^p= zbB&+Z-HNE_S(v@-uj7w@^WQ~YWM=qRanS7G-N)tb&!<#p7lg-bkq=5>+VhdmLEMCI zrfr8c)A|0*oSnKqGLk=7?s~WMddf5xFPDXu5iL1xju)JD_RRgo+VlFWSi*)jyZdV| zgk;BUIm%i3d-eC4oy+4sJ-s7sXTll8Yo(R)d(!Fnm9u7Q$9!6uc3S^eQT&5?{@9OC z!*<>0?ogZbjU!v()?+=H$-x^tuS(Aj>e+X5efYoB)2MFSm$KVC<2En8$`w{IOK+OmKb}uD(W=}#r^<+ib4Je6 zT-{ux`ea$E9Ur&zjNNaivU3&fdSk*J;Ox_XV5P3k{5>OOlUZhIUbih1^DLQWD7GhdjcDQI#|tmVv2lx6_Up7hnZ207*7<q#H}4hyu-oaf+-RYu*AAC=4F7#5-+s$_SyXeo&#R@=Z30fXt?D_l z^yg?#=N9h^I6D(vWUnu9! zdi3y|yN^WK0&TT}CwEJ!ibwi2TyWHi2rIG(_%C&<;2nd2n~wE@LZLNJG^Tsn^yz(^ zEoEA>ch4n-O!Eb@^Mx~yN^Y-BnEvXcR%V;@%-R;qAma$f+YID}h#TT-8 zi#0NDH7pd7xx+TCQgG*~9P>iYmzrlI?uQ(hH{-kJ^7R$rwUch;e-nKYz$0oMe|K)| z!A~+K9j{D!-Md~bHVKQ33F(=4y0QD%a={L1+gsas}!X97AQt7SJPVH^@-BFNm){c2VXc&)xYLduRUnBlnx{as}^H-*R1-HOgq$9##386s_h8k@Ghu&a)Jo zSheJ^;hd%?_byaT(4KJr?6SkFwRJ2c_jvyL{3Vy)QX_oEHMJJE+{sLl(xpAAtMsA- zwy>)i#B#n1UA=DI`zu@DD%%-y>pARlin*517<{Eq)_Hooujwnrn+;OES?=slHtF^y z|ImGE*=_ZqGNkuKcwMsLw4SLs#ZR~H_@2L)+o$r(_J8$UYfA05_f{Qly}JMC)$iNH zR%kmtT~vIL@u7ZvS`b6LXxgPiN0_^fBhPMKtC0Qh^xmUJn>;-|yPv+&+|eo%Hc7KR z{PlswMjT(1*SOfu(F}LF?l|$U#P9n~GA<`{IMKw<=w#_(WcI2g* zmDQ6oU&FX{-0O-;1C&0N6<8a3Zprs85IS|l^c7(Lw?bClGVz!F*Ox1`jYtf2RSX(>y;l3o}o@Aa& zW}j94;=dFr?rz<-Vp_BOPR*4rt2(!BN&nrw@$B+1rpo`>YX4t2_svdC;`WO;pBu-j zPMO}nno^Vh=l9hW-pzZ&eB$CIZ1m}AzUni(VT$;o=N@^IDKY7muZ<4g zKhd?q%A9ZJ?%3@mFBeR7zj=lIh;}l|?`scIkHt1|9KJdC<>&ssgr_qqSolg+KN`JW zcIef<3Ce2R=Bc(F;ctFy+-bw(`Z6=%!Uo9&ET`I>bd0s*&ng!`vi`6B<*TCO*6GaC zEPl(SI~oeh;E!$$rnTzH$laygTK^{Q&8mOP?JU`*%t<;o8}_ z0@FV|l{W*6nUW5B-DdysNU|o7-PAs2l{2G6qSASecC7h^MdI zr_XPh+{_lS)7D+i;Q~kW!u_n0O4Z8h)_IIBhq5O6nj2Z=t$)}M{Q8y3#h7`qOGI_P z**&#+kf**;KqUNSmrCfDW&G(={LQTF@7{bn>vd&C&4t?gwhi__M1_uCKc0T~fqY|C zh{*p>V)y4Iit-EFdhHNSj8yJ5)>O}mx7)|G;9XDpCKl0r&Mr3QPc91|+&;HH@_oR+ z*}J;(o%72l=-N*#&N=nWR-{2?$A)%Qqjd~Vr)a!l`uWu)%(VH0Yh&U+=dpHM`$oa@+KF#sZd#GaF0y{@SF@c`t6oCbO)U z#jigt>A5B7`e}JYZKB0){Y|g+{ySVedBuGqm*KU}i;JgZh}=DE<=D^r)wl5as{)?X z)xp<2ldpwVykuLNop4(FV39=sb9a#!-JX+wem_|dPs5r1X>8-x8u>3x}jPTzffKl$Fdmvd|XOpzH6r#9DA@k@WwTfZ)< zN#?HZlE<84_Pccy`c60QnEIf9(L3Qk*3+IXPGVNkv@|#1p3kV{b939*=~_GQm}!a0 z+t=}E9TZ%_`rS~&#e8z$8BviLN*d);?qvDy=TJDpaAL>g$4g2VZ`IY**mUz@3D?!L zZP7_N>JM1MuDL~)9adBO{3U9+YowUxy7IH3HqH-=Pkj7j5Pv6h!@}Q-6&dzkpZ)ce z3U|bl{DrOi{}t)(%R6Z~gRj=^aF+`6n+2+KWR|tsDQG@FsJ8p0#%k8(5i33Q3U#K0 zPkvJLs_5VH1G{z#uMYLv?sG6~LVY0%``gfaI}eKVmff0vM_f-o@=-uCOPWC4(lZQg z`uli(^lGgzaJ=81FegT(x%$&A(a`AL2UqTWZr?8K_EA{pg!}nzb5*og*K2)mSvhr@ zPp|o;s9kF^IQ;%BpZ)fds83i$gWr_PYZOH_4(``d-(%Dm^{xN-Qz@H66BiwG=Ghye zb;st?m5Bu(9-p2%fA?<2f9EgOe%Y*Z)qTIq)1|!8JA!WWWL;gGRjgfNI{#JEv&Uaz zHLuroGu?~gjrDfAT7S#dw*TC&-S7Q2E(qLm-PZE$yLWTS|EjqkcTay_y}M3&5CsFS&8UI7RiRo9S_QFR$q&bWZ&I$ocoYq<>SURQ;r$yw94oPZQJs-@y~+$32;7=#yT# f|7ZK