diff --git a/src/Make_cyg.mak b/src/Make_cyg.mak
index 5879f1d..5568174 100644
--- a/src/Make_cyg.mak
+++ b/src/Make_cyg.mak
@@ -1,6 +1,6 @@
 #
 # Makefile for VIM on Win32, using Cygnus gcc
-# Last updated by Dan Sharp.  Last Change: 2005 Oct 01
+# Last updated by Dan Sharp.  Last Change: 2006 Mar 24
 #
 # Also read INSTALLpc.txt!
 #
@@ -404,7 +404,7 @@
 	$(OUTDIR)/fold.o \
 	$(OUTDIR)/getchar.o \
 	$(OUTDIR)/hardcopy.o \
-	$(OUTDIR)/hashtable.o \
+	$(OUTDIR)/hashtab.o \
 	$(OUTDIR)/main.o \
 	$(OUTDIR)/mark.o \
 	$(OUTDIR)/memfile.o \
@@ -421,7 +421,7 @@
 	$(OUTDIR)/os_win32.o \
 	$(OUTDIR)/os_mswin.o \
 	$(OUTDIR)/pathdef.o \
-	$(OUTDIR)/popupmenu.o \
+	$(OUTDIR)/popupmnu.o \
 	$(OUTDIR)/quickfix.o \
 	$(OUTDIR)/regexp.o \
 	$(OUTDIR)/screen.o \
diff --git a/src/Make_dice.mak b/src/Make_dice.mak
index b4e1709..a5cb692 100644
--- a/src/Make_dice.mak
+++ b/src/Make_dice.mak
@@ -41,7 +41,7 @@
 	fold.c \
 	getchar.c \
 	hardcopy.c \
-	hashtable.c \
+	hashtab.c \
 	main.c \
 	mark.c \
 	memfile.c \
@@ -56,7 +56,7 @@
 	ops.c \
 	option.c \
 	os_amiga.c \
-	popupmenu.c \
+	popupmnu.c \
 	quickfix.c \
 	regexp.c \
 	screen.c \
@@ -85,7 +85,7 @@
 	o/fold.o \
 	o/getchar.o \
 	o/hardcopy.o \
-	o/hashtable.o \
+	o/hashtab.o \
 	o/main.o \
 	o/mark.o \
 	o/memfile.o \
@@ -100,7 +100,7 @@
 	o/ops.o \
 	o/option.o \
 	o/os_amiga.o \
-	o/popupmenu.o \
+	o/popupmnu.o \
 	o/quickfix.o \
 	o/regexp.o \
 	o/screen.o \
@@ -163,7 +163,7 @@
 
 o/hardcopy.o: hardcopy.c	$(SYMS)
 
-o/hashtable.o: hashtable.c	$(SYMS)
+o/hashtab.o: hashtab.c	$(SYMS)
 
 o/main.o: main.c $(SYMS)
 
@@ -198,7 +198,7 @@
 
 o/os_amiga.o:	os_amiga.c  $(SYMS) os_amiga.h
 
-o/popupmenu.o:	popupmenu.c  $(SYMS)
+o/popupmnu.o:	popupmnu.c  $(SYMS)
 
 o/quickfix.o:	quickfix.c  $(SYMS)
 
diff --git a/src/Make_djg.mak b/src/Make_djg.mak
index 8ac1970..1df04c7 100644
--- a/src/Make_djg.mak
+++ b/src/Make_djg.mak
@@ -34,7 +34,7 @@
 	obj/fold.o \
 	obj/getchar.o \
 	obj/hardcopy.o \
-	obj/hashtable.o \
+	obj/hashtab.o \
 	obj/main.o \
 	obj/mark.o \
 	obj/memfile.o \
@@ -49,7 +49,7 @@
 	obj/ops.o \
 	obj/option.o \
 	obj/os_msdos.o \
-	obj/popupmenu.o \
+	obj/popupmnu.o \
 	obj/quickfix.o \
 	obj/regexp.o \
 	obj/screen.o \
diff --git a/src/Make_morph.mak b/src/Make_morph.mak
index 0464222..488d22c 100644
--- a/src/Make_morph.mak
+++ b/src/Make_morph.mak
@@ -39,7 +39,7 @@
 	fold.c							\
 	getchar.c						\
 	hardcopy.c						\
-	hashtable.c						\
+	hashtab.c						\
 	main.c							\
 	mark.c							\
 	mbyte.c							\
@@ -54,7 +54,7 @@
 	ops.c							\
 	option.c						\
 	os_amiga.c						\
-	popupmenu.c						\
+	popupmnu.c						\
 	quickfix.c						\
 	regexp.c						\
 	screen.c						\
diff --git a/src/Make_vms.mms b/src/Make_vms.mms
index 8b24981..89b56af 100644
--- a/src/Make_vms.mms
+++ b/src/Make_vms.mms
@@ -2,7 +2,7 @@
 # Makefile for Vim on OpenVMS
 #
 # Maintainer:   Zoltan Arpadffy <arpadffy@polarhome.com>
-# Last change:  2006 Feb 23
+# Last change:  2006 Mar 24
 #
 # This has script been tested on VMS 6.2 to 8.2 on DEC Alpha, VAX and IA64
 # with MMS and MMK
@@ -287,8 +287,8 @@
 
 SRC =	buffer.c charset.c diff.c digraph.c edit.c eval.c ex_cmds.c ex_cmds2.c \
 	ex_docmd.c ex_eval.c ex_getln.c if_xcmdsrv.c fileio.c fold.c getchar.c \
-	hardcopy.c hashtable.c main.c mark.c menu.c mbyte.c memfile.c memline.c message.c misc1.c \
-	misc2.c move.c normal.c ops.c option.c popupmenu.c quickfix.c regexp.c search.c \
+	hardcopy.c hashtab.c main.c mark.c menu.c mbyte.c memfile.c memline.c message.c misc1.c \
+	misc2.c move.c normal.c ops.c option.c popupmnu.c quickfix.c regexp.c search.c \
 	spell.c syntax.c tag.c term.c termlib.c ui.c undo.c version.c screen.c \
 	window.c os_unix.c os_vms.c pathdef.c \
 	$(GUI_SRC) $(PERL_SRC) $(PYTHON_SRC) $(TCL_SRC) $(SNIFF_SRC) \
@@ -296,9 +296,9 @@
 
 OBJ =	buffer.obj charset.obj diff.obj digraph.obj edit.obj eval.obj \
 	ex_cmds.obj ex_cmds2.obj ex_docmd.obj ex_eval.obj ex_getln.obj \
-	if_xcmdsrv.obj fileio.obj fold.obj getchar.obj hardcopy.obj hashtable.obj main.obj mark.obj \
+	if_xcmdsrv.obj fileio.obj fold.obj getchar.obj hardcopy.obj hashtab.obj main.obj mark.obj \
 	menu.obj memfile.obj memline.obj message.obj misc1.obj misc2.obj \
-	move.obj mbyte.obj normal.obj ops.obj option.obj popupmenu.obj quickfix.obj \
+	move.obj mbyte.obj normal.obj ops.obj option.obj popupmnu.obj quickfix.obj \
 	regexp.obj search.obj spell.obj syntax.obj tag.obj term.obj termlib.obj \
 	ui.obj undo.obj screen.obj version.obj window.obj os_unix.obj \
 	os_vms.obj pathdef.obj \
@@ -531,7 +531,7 @@
  ascii.h keymap.h term.h macros.h structs.h regexp.h \
  gui.h gui_beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \
  globals.h farsi.h arabic.h
-hashtable.obj : hashtable.c vim.h [.auto]config.h feature.h os_unix.h \
+hashtab.obj : hashtab.c vim.h [.auto]config.h feature.h os_unix.h \
  ascii.h keymap.h term.h macros.h structs.h regexp.h \
  gui.h gui_beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \
  globals.h farsi.h arabic.h
@@ -607,7 +607,7 @@
  ascii.h keymap.h term.h macros.h structs.h regexp.h \
  gui.h gui_beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \
  globals.h farsi.h arabic.h
-popupmenu.obj : popupmenu.c vim.h [.auto]config.h feature.h os_unix.h \
+popupmnu.obj : popupmnu.c vim.h [.auto]config.h feature.h os_unix.h \
  ascii.h keymap.h term.h macros.h structs.h regexp.h \
  gui.h gui_beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \
  globals.h farsi.h arabic.h
diff --git a/src/Make_w16.mak b/src/Make_w16.mak
index 598d72e..4e0cdcf 100644
--- a/src/Make_w16.mak
+++ b/src/Make_w16.mak
@@ -88,7 +88,7 @@
    $(INTDIR)\fold.obj\
    $(INTDIR)\getchar.obj\
    $(INTDIR)\hardcopy.obj\
-   $(INTDIR)\hashtable.obj\
+   $(INTDIR)\hashtab.obj\
    $(INTDIR)\gui.obj\
    $(INTDIR)\gui_w16.obj\
    $(INTDIR)\main.obj\
@@ -107,7 +107,7 @@
    $(INTDIR)\os_win16.obj\
    $(INTDIR)\os_msdos.obj\
    $(INTDIR)\os_mswin.obj\
-   $(INTDIR)\popupmenu.obj\
+   $(INTDIR)\popupmnu.obj\
    $(INTDIR)\quickfix.obj\
    $(INTDIR)\regexp.obj\
    $(INTDIR)\screen.obj\
diff --git a/src/dosinst.c b/src/dosinst.c
index 1b572a0..a54d168 100644
--- a/src/dosinst.c
+++ b/src/dosinst.c
@@ -1132,7 +1132,6 @@
 {
     FILE	*fd, *tfd;
     char	*fname;
-    char	*p;
 
     /* If an old vimrc file exists, overwrite it.
      * Otherwise create a new one. */
diff --git a/src/eval.c b/src/eval.c
index efa04be..e80407e 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -1666,6 +1666,8 @@
     argend = skip_var_list(arg, &var_count, &semicolon);
     if (argend == NULL)
 	return;
+    if (argend > arg && argend[-1] == '.')  /* for var.='str' */
+	--argend;
     expr = vim_strchr(argend, '=');
     if (expr == NULL)
     {
@@ -19360,9 +19362,11 @@
     init_var_dict(&fc.l_vars, &fc.l_vars_var);
     if (selfdict != NULL)
     {
-	/* Set l:self to "selfdict". */
+	/* 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;
-	STRCPY(v->di_key, "self");
+	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));
 	v->di_tv.v_type = VAR_DICT;
diff --git a/src/ex_cmds.h b/src/ex_cmds.h
index dd1622a..93a098c 100644
--- a/src/ex_cmds.h
+++ b/src/ex_cmds.h
@@ -213,10 +213,10 @@
 			TRLBAR|FILE1|BANG),
 EX(CMD_cfirst,		"cfirst",	ex_cc,
 			RANGE|NOTADR|COUNT|TRLBAR|BANG),
-EX(CMD_cgetbuffer,	"cgetbuffer",	ex_cbuffer,
-			RANGE|NOTADR|WORD1|TRLBAR),
 EX(CMD_cgetfile,	"cgetfile",	ex_cfile,
 			TRLBAR|FILE1|BANG),
+EX(CMD_cgetbuffer,	"cgetbuffer",	ex_cbuffer,
+			RANGE|NOTADR|WORD1|TRLBAR),
 EX(CMD_cgetexpr,	"cgetexpr",	ex_cexpr,
 			NEEDARG|WORD1|NOTRLCOM|TRLBAR|BANG),
 EX(CMD_chdir,		"chdir",	ex_cd,
diff --git a/src/hashtable.c b/src/hashtable.c
deleted file mode 100644
index 066f0f3..0000000
--- a/src/hashtable.c
+++ /dev/null
@@ -1,518 +0,0 @@
-/* vi:set ts=8 sts=4 sw=4:
- *
- * VIM - Vi IMproved	by Bram Moolenaar
- *
- * Do ":help uganda"  in Vim to read copying and usage conditions.
- * Do ":help credits" in Vim to see a list of people who contributed.
- * See README.txt for an overview of the Vim source code.
- */
-
-/*
- * hashtable.c: Handling of a hashtable with Vim-specific properties.
- *
- * Each item in a hashtable has a NUL terminated string key.  A key can appear
- * only once in the table.
- *
- * A hash number is computed from the key for quick lookup.  When the hashes
- * of two different keys point to the same entry an algorithm is used to
- * iterate over other entries in the table until the right one is found.
- * To make the iteration work removed keys are different from entries where a
- * key was never present.
- *
- * The mechanism has been partly based on how Python Dictionaries are
- * implemented.  The algorithm is from Knuth Vol. 3, Sec. 6.4.
- *
- * The hashtable grows to accommodate more entries when needed.  At least 1/3
- * of the entries is empty to keep the lookup efficient (at the cost of extra
- * memory).
- */
-
-#include "vim.h"
-
-#if defined(FEAT_EVAL) || defined(FEAT_SYN_HL) || defined(PROTO)
-
-#if 0
-# define HT_DEBUG	/* extra checks for table consistency  and statistics */
-
-static long hash_count_lookup = 0;	/* count number of hashtab lookups */
-static long hash_count_perturb = 0;	/* count number of "misses" */
-#endif
-
-/* Magic value for algorithm that walks through the array. */
-#define PERTURB_SHIFT 5
-
-static int hash_may_resize __ARGS((hashtab_T *ht, int minitems));
-
-#if 0 /* currently not used */
-/*
- * Create an empty hash table.
- * Returns NULL when out of memory.
- */
-    hashtab_T *
-hash_create()
-{
-    hashtab_T *ht;
-
-    ht = (hashtab_T *)alloc(sizeof(hashtab_T));
-    if (ht != NULL)
-	hash_init(ht);
-    return ht;
-}
-#endif
-
-/*
- * Initialize an empty hash table.
- */
-    void
-hash_init(ht)
-    hashtab_T *ht;
-{
-    /* This zeroes all "ht_" entries and all the "hi_key" in "ht_smallarray". */
-    vim_memset(ht, 0, sizeof(hashtab_T));
-    ht->ht_array = ht->ht_smallarray;
-    ht->ht_mask = HT_INIT_SIZE - 1;
-}
-
-/*
- * Free the array of a hash table.  Does not free the items it contains!
- * If "ht" is not freed then you should call hash_init() next!
- */
-    void
-hash_clear(ht)
-    hashtab_T *ht;
-{
-    if (ht->ht_array != ht->ht_smallarray)
-	vim_free(ht->ht_array);
-}
-
-/*
- * Free the array of a hash table and all the keys it contains.  The keys must
- * have been allocated.  "off" is the offset from the start of the allocate
- * memory to the location of the key (it's always positive).
- */
-    void
-hash_clear_all(ht, off)
-    hashtab_T	*ht;
-    int		off;
-{
-    int		todo;
-    hashitem_T	*hi;
-
-    todo = ht->ht_used;
-    for (hi = ht->ht_array; todo > 0; ++hi)
-    {
-	if (!HASHITEM_EMPTY(hi))
-	{
-	    vim_free(hi->hi_key - off);
-	    --todo;
-	}
-    }
-    hash_clear(ht);
-}
-
-/*
- * Find "key" in hashtable "ht".  "key" must not be NULL.
- * Always returns a pointer to a hashitem.  If the item was not found then
- * HASHITEM_EMPTY() is TRUE.  The pointer is then the place where the key
- * would be added.
- * WARNING: The returned pointer becomes invalid when the hashtable is changed
- * (adding, setting or removing an item)!
- */
-    hashitem_T *
-hash_find(ht, key)
-    hashtab_T	*ht;
-    char_u	*key;
-{
-    return hash_lookup(ht, key, hash_hash(key));
-}
-
-/*
- * Like hash_find(), but caller computes "hash".
- */
-    hashitem_T *
-hash_lookup(ht, key, hash)
-    hashtab_T	*ht;
-    char_u	*key;
-    hash_T	hash;
-{
-    hash_T	perturb;
-    hashitem_T	*freeitem;
-    hashitem_T	*hi;
-    int		idx;
-
-#ifdef HT_DEBUG
-    ++hash_count_lookup;
-#endif
-
-    /*
-     * Quickly handle the most common situations:
-     * - return if there is no item at all
-     * - skip over a removed item
-     * - return if the item matches
-     */
-    idx = hash & ht->ht_mask;
-    hi = &ht->ht_array[idx];
-
-    if (hi->hi_key == NULL)
-	return hi;
-    if (hi->hi_key == HI_KEY_REMOVED)
-	freeitem = hi;
-    else if (hi->hi_hash == hash && STRCMP(hi->hi_key, key) == 0)
-	return hi;
-    else
-	freeitem = NULL;
-
-    /*
-     * Need to search through the table to find the key.  The algorithm
-     * to step through the table starts with large steps, gradually becoming
-     * smaller down to (1/4 table size + 1).  This means it goes through all
-     * table entries in the end.
-     * When we run into a NULL key it's clear that the key isn't there.
-     * Return the first available slot found (can be a slot of a removed
-     * item).
-     */
-    for (perturb = hash; ; perturb >>= PERTURB_SHIFT)
-    {
-#ifdef HT_DEBUG
-	++hash_count_perturb;	    /* count a "miss" for hashtab lookup */
-#endif
-	idx = (idx << 2) + idx + perturb + 1;
-	hi = &ht->ht_array[idx & ht->ht_mask];
-	if (hi->hi_key == NULL)
-	    return freeitem == NULL ? hi : freeitem;
-	if (hi->hi_hash == hash
-		&& hi->hi_key != HI_KEY_REMOVED
-		&& STRCMP(hi->hi_key, key) == 0)
-	    return hi;
-	if (hi->hi_key == HI_KEY_REMOVED && freeitem == NULL)
-	    freeitem = hi;
-    }
-}
-
-/*
- * Print the efficiency of hashtable lookups.
- * Useful when trying different hash algorithms.
- * Called when exiting.
- */
-    void
-hash_debug_results()
-{
-#ifdef HT_DEBUG
-    fprintf(stderr, "\r\n\r\n\r\n\r\n");
-    fprintf(stderr, "Number of hashtable lookups: %ld\r\n", hash_count_lookup);
-    fprintf(stderr, "Number of perturb loops: %ld\r\n", hash_count_perturb);
-    fprintf(stderr, "Percentage of perturb loops: %ld%%\r\n",
-				hash_count_perturb * 100 / hash_count_lookup);
-#endif
-}
-
-/*
- * Add item with key "key" to hashtable "ht".
- * Returns FAIL when out of memory or the key is already present.
- */
-    int
-hash_add(ht, key)
-    hashtab_T	*ht;
-    char_u	*key;
-{
-    hash_T	hash = hash_hash(key);
-    hashitem_T	*hi;
-
-    hi = hash_lookup(ht, key, hash);
-    if (!HASHITEM_EMPTY(hi))
-    {
-	EMSG2(_(e_intern2), "hash_add()");
-	return FAIL;
-    }
-    return hash_add_item(ht, hi, key, hash);
-}
-
-/*
- * Add item "hi" with "key" to hashtable "ht".  "key" must not be NULL and
- * "hi" must have been obtained with hash_lookup() and point to an empty item.
- * "hi" is invalid after this!
- * Returns OK or FAIL (out of memory).
- */
-    int
-hash_add_item(ht, hi, key, hash)
-    hashtab_T	*ht;
-    hashitem_T	*hi;
-    char_u	*key;
-    hash_T	hash;
-{
-    /* If resizing failed before and it fails again we can't add an item. */
-    if (ht->ht_error && hash_may_resize(ht, 0) == FAIL)
-	return FAIL;
-
-    ++ht->ht_used;
-    if (hi->hi_key == NULL)
-	++ht->ht_filled;
-    hi->hi_key = key;
-    hi->hi_hash = hash;
-
-    /* When the space gets low may resize the array. */
-    return hash_may_resize(ht, 0);
-}
-
-#if 0  /* not used */
-/*
- * Overwrite hashtable item "hi" with "key".  "hi" must point to the item that
- * is to be overwritten.  Thus the number of items in the hashtable doesn't
- * change.
- * Although the key must be identical, the pointer may be different, thus it's
- * set anyway (the key is part of an item with that key).
- * The caller must take care of freeing the old item.
- * "hi" is invalid after this!
- */
-    void
-hash_set(hi, key)
-    hashitem_T	*hi;
-    char_u	*key;
-{
-    hi->hi_key = key;
-}
-#endif
-
-/*
- * Remove item "hi" from  hashtable "ht".  "hi" must have been obtained with
- * hash_lookup().
- * The caller must take care of freeing the item itself.
- */
-    void
-hash_remove(ht, hi)
-    hashtab_T	*ht;
-    hashitem_T	*hi;
-{
-    --ht->ht_used;
-    hi->hi_key = HI_KEY_REMOVED;
-    hash_may_resize(ht, 0);
-}
-
-/*
- * Lock a hashtable: prevent that ht_array changes.
- * Don't use this when items are to be added!
- * Must call hash_unlock() later.
- */
-    void
-hash_lock(ht)
-    hashtab_T	*ht;
-{
-    ++ht->ht_locked;
-}
-
-#if 0	    /* currently not used */
-/*
- * Lock a hashtable at the specified number of entries.
- * Caller must make sure no more than "size" entries will be added.
- * Must call hash_unlock() later.
- */
-    void
-hash_lock_size(ht, size)
-    hashtab_T	*ht;
-    int		size;
-{
-    (void)hash_may_resize(ht, size);
-    ++ht->ht_locked;
-}
-#endif
-
-/*
- * Unlock a hashtable: allow ht_array changes again.
- * Table will be resized (shrink) when necessary.
- * This must balance a call to hash_lock().
- */
-    void
-hash_unlock(ht)
-    hashtab_T	*ht;
-{
-    --ht->ht_locked;
-    (void)hash_may_resize(ht, 0);
-}
-
-/*
- * Shrink a hashtable when there is too much empty space.
- * Grow a hashtable when there is not enough empty space.
- * Returns OK or FAIL (out of memory).
- */
-    static int
-hash_may_resize(ht, minitems)
-    hashtab_T	*ht;
-    int		minitems;		/* minimal number of items */
-{
-    hashitem_T	temparray[HT_INIT_SIZE];
-    hashitem_T	*oldarray, *newarray;
-    hashitem_T	*olditem, *newitem;
-    int		newi;
-    int		todo;
-    long_u	oldsize, newsize;
-    long_u	minsize;
-    long_u	newmask;
-    hash_T	perturb;
-
-    /* Don't resize a locked table. */
-    if (ht->ht_locked > 0)
-	return OK;
-
-#ifdef HT_DEBUG
-    if (ht->ht_used > ht->ht_filled)
-	EMSG("hash_may_resize(): more used than filled");
-    if (ht->ht_filled >= ht->ht_mask + 1)
-	EMSG("hash_may_resize(): table completely filled");
-#endif
-
-    if (minitems == 0)
-    {
-	/* Return quickly for small tables with at least two NULL items.  NULL
-	 * items are required for the lookup to decide a key isn't there. */
-	if (ht->ht_filled < HT_INIT_SIZE - 1
-					 && ht->ht_array == ht->ht_smallarray)
-	    return OK;
-
-	/*
-	 * Grow or refill the array when it's more than 2/3 full (including
-	 * removed items, so that they get cleaned up).
-	 * Shrink the array when it's less than 1/5 full.  When growing it is
-	 * at least 1/4 full (avoids repeated grow-shrink operations)
-	 */
-	oldsize = ht->ht_mask + 1;
-	if (ht->ht_filled * 3 < oldsize * 2 && ht->ht_used > oldsize / 5)
-	    return OK;
-
-	if (ht->ht_used > 1000)
-	    minsize = ht->ht_used * 2;  /* it's big, don't make too much room */
-	else
-	    minsize = ht->ht_used * 4;  /* make plenty of room */
-    }
-    else
-    {
-	/* Use specified size. */
-	if ((long_u)minitems < ht->ht_used)	/* just in case... */
-	    minitems = ht->ht_used;
-	minsize = minitems * 3 / 2;	/* array is up to 2/3 full */
-    }
-
-    newsize = HT_INIT_SIZE;
-    while (newsize < minsize)
-    {
-	newsize <<= 1;		/* make sure it's always a power of 2 */
-	if (newsize == 0)
-	    return FAIL;	/* overflow */
-    }
-
-    if (newsize == HT_INIT_SIZE)
-    {
-	/* Use the small array inside the hashdict structure. */
-	newarray = ht->ht_smallarray;
-	if (ht->ht_array == newarray)
-	{
-	    /* Moving from ht_smallarray to ht_smallarray!  Happens when there
-	     * are many removed items.  Copy the items to be able to clean up
-	     * removed items. */
-	    mch_memmove(temparray, newarray, sizeof(temparray));
-	    oldarray = temparray;
-	}
-	else
-	    oldarray = ht->ht_array;
-    }
-    else
-    {
-	/* Allocate an array. */
-	newarray = (hashitem_T *)alloc((unsigned)
-					      (sizeof(hashitem_T) * newsize));
-	if (newarray == NULL)
-	{
-	    /* Out of memory.  When there are NULL items still return OK.
-	     * Otherwise set ht_error, because lookup may result in a hang if
-	     * we add another item. */
-	    if (ht->ht_filled < ht->ht_mask)
-		return OK;
-	    ht->ht_error = TRUE;
-	    return FAIL;
-	}
-	oldarray = ht->ht_array;
-    }
-    vim_memset(newarray, 0, (size_t)(sizeof(hashitem_T) * newsize));
-
-    /*
-     * Move all the items from the old array to the new one, placing them in
-     * the right spot.  The new array won't have any removed items, thus this
-     * is also a cleanup action.
-     */
-    newmask = newsize - 1;
-    todo = ht->ht_used;
-    for (olditem = oldarray; todo > 0; ++olditem)
-	if (!HASHITEM_EMPTY(olditem))
-	{
-	    /*
-	     * The algorithm to find the spot to add the item is identical to
-	     * the algorithm to find an item in hash_lookup().  But we only
-	     * need to search for a NULL key, thus it's simpler.
-	     */
-	    newi = olditem->hi_hash & newmask;
-	    newitem = &newarray[newi];
-
-	    if (newitem->hi_key != NULL)
-		for (perturb = olditem->hi_hash; ; perturb >>= PERTURB_SHIFT)
-		{
-		    newi = (newi << 2) + newi + perturb + 1;
-		    newitem = &newarray[newi & newmask];
-		    if (newitem->hi_key == NULL)
-			break;
-		}
-	    *newitem = *olditem;
-	    --todo;
-	}
-
-    if (ht->ht_array != ht->ht_smallarray)
-	vim_free(ht->ht_array);
-    ht->ht_array = newarray;
-    ht->ht_mask = newmask;
-    ht->ht_filled = ht->ht_used;
-    ht->ht_error = FALSE;
-
-    return OK;
-}
-
-/*
- * Get the hash number for a key.
- * If you think you know a better hash function: Compile with HT_DEBUG set and
- * run a script that uses hashtables a lot.  Vim will then print statistics
- * when exiting.  Try that with the current hash algorithm and yours.  The
- * lower the percentage the better.
- */
-    hash_T
-hash_hash(key)
-    char_u	*key;
-{
-    hash_T	hash;
-    char_u	*p;
-
-    if ((hash = *key) == 0)
-	return (hash_T)0;	/* Empty keys are not allowed, but we don't
-				   want to crash if we get one. */
-    p = key + 1;
-
-#if 0
-    /* ElfHash algorithm, which is supposed to have an even distribution.
-     * Suggested by Charles Campbell. */
-    hash_T	g;
-
-    while (*p != NUL)
-    {
-	hash = (hash << 4) + *p++;	/* clear low 4 bits of hash, add char */
-	g = hash & 0xf0000000L;		/* g has high 4 bits of hash only */
-	if (g != 0)
-	    hash ^= g >> 24;		/* xor g's high 4 bits into hash */
-    }
-#else
-
-    /* A simplistic algorithm that appears to do very well.
-     * Suggested by George Reilly. */
-    while (*p != NUL)
-	hash = hash * 101 + *p++;
-#endif
-
-    return hash;
-}
-
-#endif
diff --git a/src/if_mzsch.c b/src/if_mzsch.c
index 6a34ad3..4874851 100644
--- a/src/if_mzsch.c
+++ b/src/if_mzsch.c
@@ -24,6 +24,10 @@
 #include "vim.h"
 #include "if_mzsch.h"
 
+/* Only do the following when the feature is enabled.  Needed for "make
+ * depend". */
+#if defined(FEAT_MZSCHEME) || defined(PROTO)
+
 /* 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)
@@ -2709,3 +2713,5 @@
     return scheme_void;
 }
 #endif
+
+#endif
diff --git a/src/if_mzsch.h b/src/if_mzsch.h
index 98bcf74..b745cce 100644
--- a/src/if_mzsch.h
+++ b/src/if_mzsch.h
@@ -9,7 +9,10 @@
 # define __CYGWIN32__
 #endif
 
-#include <scheme.h>
+/* #ifdef needed for "make depend" */
+#ifdef FEAT_MZSCHEME
+# include <scheme.h>
+#endif
 
 #ifdef __MINGW32__
 # undef __CYGWIN32__
diff --git a/src/memline.c b/src/memline.c
index 6dc23f4..5543e5d 100644
--- a/src/memline.c
+++ b/src/memline.c
@@ -323,7 +323,9 @@
     STRNCPY(b0p->b0_version + 4, Version, 6);
     long_to_char((long)mfp->mf_page_size, b0p->b0_page_size);
 
-    if (!B_SPELL(buf))
+#ifdef FEAT_SPELL
+    if (!buf->b_spell)
+#endif
     {
 	b0p->b0_dirty = buf->b_changed ? B0_DIRTY : 0;
 	b0p->b0_flags = get_fileformat(buf) + 1;
diff --git a/src/popupmenu.c b/src/popupmnu.c
similarity index 99%
rename from src/popupmenu.c
rename to src/popupmnu.c
index e8ff417..861e74c 100644
--- a/src/popupmenu.c
+++ b/src/popupmnu.c
@@ -8,7 +8,7 @@
  */
 
 /*
- * popupmenu.c: Popup menu (PUM)
+ * popupmnu.c: Popup menu (PUM)
  */
 #include "vim.h"
 
diff --git a/src/proto/edit.pro b/src/proto/edit.pro
index 031f695..819cc02 100644
--- a/src/proto/edit.pro
+++ b/src/proto/edit.pro
@@ -1,42 +1,42 @@
 /* edit.c */
-int edit __ARGS((int cmdchar, int startln, long count));
-void edit_putchar __ARGS((int c, int highlight));
-void edit_unputchar __ARGS((void));
-void display_dollar __ARGS((colnr_T col));
-void change_indent __ARGS((int type, int amount, int round, int replaced));
-void truncate_spaces __ARGS((char_u *line));
-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));
-int ins_compl_add __ARGS((char_u *str, int len, int icase, char_u *fname, char_u **cptext, int cdir, int flags));
-void set_completion __ARGS((int 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));
-int ins_compl_active __ARGS((void));
-int ins_compl_add_tv __ARGS((typval_T *tv, int dir));
-void ins_compl_check_keys __ARGS((int frequency));
-int get_literal __ARGS((void));
-void insertchar __ARGS((int c, int flags, int second_indent));
-void auto_format __ARGS((int trailblank, int prev_line));
-int comp_textwidth __ARGS((int ff));
-int stop_arrow __ARGS((void));
-void set_last_insert __ARGS((int c));
-void free_last_insert __ARGS((void));
-char_u *add_char2buf __ARGS((int c, char_u *s));
-void beginline __ARGS((int flags));
-int oneright __ARGS((void));
-int oneleft __ARGS((void));
-int cursor_up __ARGS((long n, int upd_topline));
-int cursor_down __ARGS((long n, int upd_topline));
-int stuff_inserted __ARGS((int c, long count, int no_esc));
-char_u *get_last_insert __ARGS((void));
-char_u *get_last_insert_save __ARGS((void));
-void replace_push __ARGS((int c));
-void fixthisline __ARGS((int (*get_the_indent)(void)));
-void fix_indent __ARGS((void));
-int in_cinkeys __ARGS((int keytyped, int when, int line_is_empty));
-int hkmap __ARGS((int c));
-void ins_scroll __ARGS((void));
-void ins_horscroll __ARGS((void));
+extern int edit __ARGS((int cmdchar, int startln, long count));
+extern void edit_putchar __ARGS((int c, int highlight));
+extern void edit_unputchar __ARGS((void));
+extern void display_dollar __ARGS((colnr_T col));
+extern void change_indent __ARGS((int type, int amount, int round, int replaced));
+extern void truncate_spaces __ARGS((char_u *line));
+extern void backspace_until_column __ARGS((int col));
+extern int vim_is_ctrl_x_key __ARGS((int c));
+extern int ins_compl_add_infercase __ARGS((char_u *str, int len, int icase, char_u *fname, int dir, int flags));
+extern int ins_compl_add __ARGS((char_u *str, int len, int icase, char_u *fname, char_u **cptext, int cdir, int flags));
+extern void set_completion __ARGS((int startcol, list_T *list));
+extern void ins_compl_show_pum __ARGS((void));
+extern char_u *find_word_start __ARGS((char_u *ptr));
+extern char_u *find_word_end __ARGS((char_u *ptr));
+extern int ins_compl_active __ARGS((void));
+extern int ins_compl_add_tv __ARGS((typval_T *tv, int dir));
+extern void ins_compl_check_keys __ARGS((int frequency));
+extern int get_literal __ARGS((void));
+extern void insertchar __ARGS((int c, int flags, int second_indent));
+extern void auto_format __ARGS((int trailblank, int prev_line));
+extern int comp_textwidth __ARGS((int ff));
+extern int stop_arrow __ARGS((void));
+extern void set_last_insert __ARGS((int c));
+extern void free_last_insert __ARGS((void));
+extern char_u *add_char2buf __ARGS((int c, char_u *s));
+extern void beginline __ARGS((int flags));
+extern int oneright __ARGS((void));
+extern int oneleft __ARGS((void));
+extern int cursor_up __ARGS((long n, int upd_topline));
+extern int cursor_down __ARGS((long n, int upd_topline));
+extern int stuff_inserted __ARGS((int c, long count, int no_esc));
+extern char_u *get_last_insert __ARGS((void));
+extern char_u *get_last_insert_save __ARGS((void));
+extern void replace_push __ARGS((int c));
+extern void fixthisline __ARGS((int (*get_the_indent)(void)));
+extern void fix_indent __ARGS((void));
+extern int in_cinkeys __ARGS((int keytyped, int when, int line_is_empty));
+extern int hkmap __ARGS((int c));
+extern void ins_scroll __ARGS((void));
+extern void ins_horscroll __ARGS((void));
 /* vim: set ft=c : */
diff --git a/src/proto/ex_cmds.pro b/src/proto/ex_cmds.pro
index 9751c4c..84741c4 100644
--- a/src/proto/ex_cmds.pro
+++ b/src/proto/ex_cmds.pro
@@ -1,59 +1,59 @@
 /* ex_cmds.c */
-void do_ascii __ARGS((exarg_T *eap));
-void ex_align __ARGS((exarg_T *eap));
-void ex_sort __ARGS((exarg_T *eap));
-void ex_retab __ARGS((exarg_T *eap));
-int do_move __ARGS((linenr_T line1, linenr_T line2, linenr_T dest));
-void ex_copy __ARGS((linenr_T line1, linenr_T line2, linenr_T n));
-void free_prev_shellcmd __ARGS((void));
-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));
-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));
-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));
-void viminfo_writestring __ARGS((FILE *fd, char_u *p));
-void do_fixdel __ARGS((exarg_T *eap));
-void print_line_no_prefix __ARGS((linenr_T lnum, int use_number, int list));
-void print_line __ARGS((linenr_T lnum, int use_number, int list));
-void ex_file __ARGS((exarg_T *eap));
-void ex_update __ARGS((exarg_T *eap));
-void ex_write __ARGS((exarg_T *eap));
-int do_write __ARGS((exarg_T *eap));
-void ex_wnext __ARGS((exarg_T *eap));
-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));
-void ex_append __ARGS((exarg_T *eap));
-void ex_change __ARGS((exarg_T *eap));
-void ex_z __ARGS((exarg_T *eap));
-int check_restricted __ARGS((void));
-int check_secure __ARGS((void));
-void do_sub __ARGS((exarg_T *eap));
-int do_sub_msg __ARGS((int count_only));
-void ex_global __ARGS((exarg_T *eap));
-void global_exe __ARGS((char_u *cmd));
-int read_viminfo_sub_string __ARGS((vir_T *virp, int force));
-void write_viminfo_sub_string __ARGS((FILE *fp));
-void free_old_sub __ARGS((void));
-int prepare_tagpreview __ARGS((void));
-void ex_help __ARGS((exarg_T *eap));
-char_u *check_help_lang __ARGS((char_u *arg));
-int help_heuristic __ARGS((char_u *matched_string, int offset, int wrong_case));
-int find_help_tags __ARGS((char_u *arg, int *num_matches, char_u ***matches, int keep_lang));
-void fix_help_buffer __ARGS((void));
-void ex_exusage __ARGS((exarg_T *eap));
-void ex_viusage __ARGS((exarg_T *eap));
-void ex_helptags __ARGS((exarg_T *eap));
-void ex_sign __ARGS((exarg_T *eap));
-void sign_gui_started __ARGS((void));
-int sign_get_attr __ARGS((int typenr, int line));
-char_u *sign_get_text __ARGS((int typenr));
-void *sign_get_image __ARGS((int typenr));
-char_u *sign_typenr2name __ARGS((int typenr));
-void ex_drop __ARGS((exarg_T *eap));
+extern void do_ascii __ARGS((exarg_T *eap));
+extern void ex_align __ARGS((exarg_T *eap));
+extern void ex_sort __ARGS((exarg_T *eap));
+extern void ex_retab __ARGS((exarg_T *eap));
+extern int do_move __ARGS((linenr_T line1, linenr_T line2, linenr_T dest));
+extern void ex_copy __ARGS((linenr_T line1, linenr_T line2, linenr_T n));
+extern void free_prev_shellcmd __ARGS((void));
+extern void do_bang __ARGS((int addr_count, exarg_T *eap, int forceit, int do_in, int do_out));
+extern void do_shell __ARGS((char_u *cmd, int flags));
+extern char_u *make_filter_cmd __ARGS((char_u *cmd, char_u *itmp, char_u *otmp));
+extern void append_redir __ARGS((char_u *buf, char_u *opt, char_u *fname));
+extern int viminfo_error __ARGS((char *errnum, char *message, char_u *line));
+extern int read_viminfo __ARGS((char_u *file, int want_info, int want_marks, int forceit));
+extern void write_viminfo __ARGS((char_u *file, int forceit));
+extern int viminfo_readline __ARGS((vir_T *virp));
+extern char_u *viminfo_readstring __ARGS((vir_T *virp, int off, int convert));
+extern void viminfo_writestring __ARGS((FILE *fd, char_u *p));
+extern void do_fixdel __ARGS((exarg_T *eap));
+extern void print_line_no_prefix __ARGS((linenr_T lnum, int use_number, int list));
+extern void print_line __ARGS((linenr_T lnum, int use_number, int list));
+extern void ex_file __ARGS((exarg_T *eap));
+extern void ex_update __ARGS((exarg_T *eap));
+extern void ex_write __ARGS((exarg_T *eap));
+extern int do_write __ARGS((exarg_T *eap));
+extern void ex_wnext __ARGS((exarg_T *eap));
+extern void do_wqall __ARGS((exarg_T *eap));
+extern int not_writing __ARGS((void));
+extern int getfile __ARGS((int fnum, char_u *ffname, char_u *sfname, int setpm, linenr_T lnum, int forceit));
+extern int do_ecmd __ARGS((int fnum, char_u *ffname, char_u *sfname, exarg_T *eap, linenr_T newlnum, int flags));
+extern void ex_append __ARGS((exarg_T *eap));
+extern void ex_change __ARGS((exarg_T *eap));
+extern void ex_z __ARGS((exarg_T *eap));
+extern int check_restricted __ARGS((void));
+extern int check_secure __ARGS((void));
+extern void do_sub __ARGS((exarg_T *eap));
+extern int do_sub_msg __ARGS((int count_only));
+extern void ex_global __ARGS((exarg_T *eap));
+extern void global_exe __ARGS((char_u *cmd));
+extern int read_viminfo_sub_string __ARGS((vir_T *virp, int force));
+extern void write_viminfo_sub_string __ARGS((FILE *fp));
+extern void free_old_sub __ARGS((void));
+extern int prepare_tagpreview __ARGS((void));
+extern void ex_help __ARGS((exarg_T *eap));
+extern char_u *check_help_lang __ARGS((char_u *arg));
+extern int help_heuristic __ARGS((char_u *matched_string, int offset, int wrong_case));
+extern int find_help_tags __ARGS((char_u *arg, int *num_matches, char_u ***matches, int keep_lang));
+extern void fix_help_buffer __ARGS((void));
+extern void ex_exusage __ARGS((exarg_T *eap));
+extern void ex_viusage __ARGS((exarg_T *eap));
+extern void ex_helptags __ARGS((exarg_T *eap));
+extern void ex_sign __ARGS((exarg_T *eap));
+extern void sign_gui_started __ARGS((void));
+extern int sign_get_attr __ARGS((int typenr, int line));
+extern char_u *sign_get_text __ARGS((int typenr));
+extern void *sign_get_image __ARGS((int typenr));
+extern char_u *sign_typenr2name __ARGS((int typenr));
+extern void ex_drop __ARGS((exarg_T *eap));
 /* vim: set ft=c : */
diff --git a/src/proto/ex_cmds2.pro b/src/proto/ex_cmds2.pro
index 336e01e..9c89329 100644
--- a/src/proto/ex_cmds2.pro
+++ b/src/proto/ex_cmds2.pro
@@ -1,83 +1,83 @@
 /* ex_cmds2.c */
-void do_debug __ARGS((char_u *cmd));
-void ex_debug __ARGS((exarg_T *eap));
-void dbg_check_breakpoint __ARGS((exarg_T *eap));
-int dbg_check_skipped __ARGS((exarg_T *eap));
-void ex_breakadd __ARGS((exarg_T *eap));
-void ex_debuggreedy __ARGS((exarg_T *eap));
-void ex_breakdel __ARGS((exarg_T *eap));
-void ex_breaklist __ARGS((exarg_T *eap));
-linenr_T dbg_find_breakpoint __ARGS((int file, char_u *fname, linenr_T after));
-int has_profiling __ARGS((int file, char_u *fname, int *fp));
-void dbg_breakpoint __ARGS((char_u *name, linenr_T lnum));
-void profile_zero __ARGS((proftime_T *tm));
-void profile_start __ARGS((proftime_T *tm));
-void profile_end __ARGS((proftime_T *tm));
-void profile_sub __ARGS((proftime_T *tm, proftime_T *tm2));
-void profile_add __ARGS((proftime_T *tm, proftime_T *tm2));
-void profile_self __ARGS((proftime_T *self, proftime_T *total, proftime_T *children));
-void profile_get_wait __ARGS((proftime_T *tm));
-void profile_sub_wait __ARGS((proftime_T *tm, proftime_T *tma));
-int profile_equal __ARGS((proftime_T *tm1, proftime_T *tm2));
-int profile_cmp __ARGS((proftime_T *tm1, proftime_T *tm2));
-char *profile_msg __ARGS((proftime_T *tm));
-void ex_profile __ARGS((exarg_T *eap));
-void profile_dump __ARGS((void));
-void script_prof_save __ARGS((proftime_T *tm));
-void script_prof_restore __ARGS((proftime_T *tm));
-void prof_inchar_enter __ARGS((void));
-void prof_inchar_exit __ARGS((void));
-int prof_def_func __ARGS((void));
-int autowrite __ARGS((buf_T *buf, int forceit));
-void autowrite_all __ARGS((void));
-int check_changed __ARGS((buf_T *buf, int checkaw, int mult_win, int forceit, int allbuf));
-void browse_save_fname __ARGS((buf_T *buf));
-void dialog_changed __ARGS((buf_T *buf, int checkall));
-int can_abandon __ARGS((buf_T *buf, int forceit));
-int check_changed_any __ARGS((int hidden));
-int check_fname __ARGS((void));
-int buf_write_all __ARGS((buf_T *buf, int forceit));
-int get_arglist __ARGS((garray_T *gap, char_u *str));
-int get_arglist_exp __ARGS((char_u *str, int *fcountp, char_u ***fnamesp));
-void set_arglist __ARGS((char_u *str));
-void check_arg_idx __ARGS((win_T *win));
-void ex_args __ARGS((exarg_T *eap));
-void ex_previous __ARGS((exarg_T *eap));
-void ex_rewind __ARGS((exarg_T *eap));
-void ex_last __ARGS((exarg_T *eap));
-void ex_argument __ARGS((exarg_T *eap));
-void do_argfile __ARGS((exarg_T *eap, int argn));
-void ex_next __ARGS((exarg_T *eap));
-void ex_argedit __ARGS((exarg_T *eap));
-void ex_argadd __ARGS((exarg_T *eap));
-void ex_argdelete __ARGS((exarg_T *eap));
-void ex_listdo __ARGS((exarg_T *eap));
-void ex_compiler __ARGS((exarg_T *eap));
-void ex_runtime __ARGS((exarg_T *eap));
-int source_runtime __ARGS((char_u *name, int all));
-int do_in_runtimepath __ARGS((char_u *name, int all, void (*callback)(char_u *fname, void *ck), void *cookie));
-void ex_options __ARGS((exarg_T *eap));
-void ex_source __ARGS((exarg_T *eap));
-linenr_T *source_breakpoint __ARGS((void *cookie));
-int *source_dbg_tick __ARGS((void *cookie));
-int source_level __ARGS((void *cookie));
-int do_source __ARGS((char_u *fname, int check_other, int is_vimrc));
-void ex_scriptnames __ARGS((exarg_T *eap));
-void scriptnames_slash_adjust __ARGS((void));
-char_u *get_scriptname __ARGS((scid_T id));
-void free_scriptnames __ARGS((void));
-char *fgets_cr __ARGS((char *s, int n, FILE *stream));
-char_u *getsourceline __ARGS((int c, void *cookie, int indent));
-void script_line_start __ARGS((void));
-void script_line_exec __ARGS((void));
-void script_line_end __ARGS((void));
-void ex_scriptencoding __ARGS((exarg_T *eap));
-void ex_finish __ARGS((exarg_T *eap));
-void do_finish __ARGS((exarg_T *eap, int reanimate));
-int source_finished __ARGS((char_u *(*getline)(int, void *, int), void *cookie));
-void ex_checktime __ARGS((exarg_T *eap));
-char_u *get_mess_lang __ARGS((void));
-void set_lang_var __ARGS((void));
-void ex_language __ARGS((exarg_T *eap));
-char_u *get_lang_arg __ARGS((expand_T *xp, int idx));
+extern void do_debug __ARGS((char_u *cmd));
+extern void ex_debug __ARGS((exarg_T *eap));
+extern void dbg_check_breakpoint __ARGS((exarg_T *eap));
+extern int dbg_check_skipped __ARGS((exarg_T *eap));
+extern void ex_breakadd __ARGS((exarg_T *eap));
+extern void ex_debuggreedy __ARGS((exarg_T *eap));
+extern void ex_breakdel __ARGS((exarg_T *eap));
+extern void ex_breaklist __ARGS((exarg_T *eap));
+extern linenr_T dbg_find_breakpoint __ARGS((int file, char_u *fname, linenr_T after));
+extern int has_profiling __ARGS((int file, char_u *fname, int *fp));
+extern void dbg_breakpoint __ARGS((char_u *name, linenr_T lnum));
+extern void profile_start __ARGS((proftime_T *tm));
+extern void profile_end __ARGS((proftime_T *tm));
+extern void profile_sub __ARGS((proftime_T *tm, proftime_T *tm2));
+extern char *profile_msg __ARGS((proftime_T *tm));
+extern void profile_zero __ARGS((proftime_T *tm));
+extern void profile_add __ARGS((proftime_T *tm, proftime_T *tm2));
+extern void profile_self __ARGS((proftime_T *self, proftime_T *total, proftime_T *children));
+extern void profile_get_wait __ARGS((proftime_T *tm));
+extern void profile_sub_wait __ARGS((proftime_T *tm, proftime_T *tma));
+extern int profile_equal __ARGS((proftime_T *tm1, proftime_T *tm2));
+extern int profile_cmp __ARGS((proftime_T *tm1, proftime_T *tm2));
+extern void ex_profile __ARGS((exarg_T *eap));
+extern void profile_dump __ARGS((void));
+extern void script_prof_save __ARGS((proftime_T *tm));
+extern void script_prof_restore __ARGS((proftime_T *tm));
+extern void prof_inchar_enter __ARGS((void));
+extern void prof_inchar_exit __ARGS((void));
+extern int prof_def_func __ARGS((void));
+extern int autowrite __ARGS((buf_T *buf, int forceit));
+extern void autowrite_all __ARGS((void));
+extern int check_changed __ARGS((buf_T *buf, int checkaw, int mult_win, int forceit, int allbuf));
+extern void browse_save_fname __ARGS((buf_T *buf));
+extern void dialog_changed __ARGS((buf_T *buf, int checkall));
+extern int can_abandon __ARGS((buf_T *buf, int forceit));
+extern int check_changed_any __ARGS((int hidden));
+extern int check_fname __ARGS((void));
+extern int buf_write_all __ARGS((buf_T *buf, int forceit));
+extern int get_arglist __ARGS((garray_T *gap, char_u *str));
+extern int get_arglist_exp __ARGS((char_u *str, int *fcountp, char_u ***fnamesp));
+extern void set_arglist __ARGS((char_u *str));
+extern void check_arg_idx __ARGS((win_T *win));
+extern void ex_args __ARGS((exarg_T *eap));
+extern void ex_previous __ARGS((exarg_T *eap));
+extern void ex_rewind __ARGS((exarg_T *eap));
+extern void ex_last __ARGS((exarg_T *eap));
+extern void ex_argument __ARGS((exarg_T *eap));
+extern void do_argfile __ARGS((exarg_T *eap, int argn));
+extern void ex_next __ARGS((exarg_T *eap));
+extern void ex_argedit __ARGS((exarg_T *eap));
+extern void ex_argadd __ARGS((exarg_T *eap));
+extern void ex_argdelete __ARGS((exarg_T *eap));
+extern void ex_listdo __ARGS((exarg_T *eap));
+extern void ex_compiler __ARGS((exarg_T *eap));
+extern void ex_runtime __ARGS((exarg_T *eap));
+extern int source_runtime __ARGS((char_u *name, int all));
+extern int do_in_runtimepath __ARGS((char_u *name, int all, void (*callback)(char_u *fname, void *ck), void *cookie));
+extern void ex_options __ARGS((exarg_T *eap));
+extern void ex_source __ARGS((exarg_T *eap));
+extern linenr_T *source_breakpoint __ARGS((void *cookie));
+extern int *source_dbg_tick __ARGS((void *cookie));
+extern int source_level __ARGS((void *cookie));
+extern int do_source __ARGS((char_u *fname, int check_other, int is_vimrc));
+extern void ex_scriptnames __ARGS((exarg_T *eap));
+extern void scriptnames_slash_adjust __ARGS((void));
+extern char_u *get_scriptname __ARGS((scid_T id));
+extern void free_scriptnames __ARGS((void));
+extern char *fgets_cr __ARGS((char *s, int n, FILE *stream));
+extern char_u *getsourceline __ARGS((int c, void *cookie, int indent));
+extern void script_line_start __ARGS((void));
+extern void script_line_exec __ARGS((void));
+extern void script_line_end __ARGS((void));
+extern void ex_scriptencoding __ARGS((exarg_T *eap));
+extern void ex_finish __ARGS((exarg_T *eap));
+extern void do_finish __ARGS((exarg_T *eap, int reanimate));
+extern int source_finished __ARGS((char_u *(*getline)(int, void *, int), void *cookie));
+extern void ex_checktime __ARGS((exarg_T *eap));
+extern char_u *get_mess_lang __ARGS((void));
+extern void set_lang_var __ARGS((void));
+extern void ex_language __ARGS((exarg_T *eap));
+extern char_u *get_lang_arg __ARGS((expand_T *xp, int idx));
 /* vim: set ft=c : */
diff --git a/src/proto/fileio.pro b/src/proto/fileio.pro
index a8c4142..1051ff4 100644
--- a/src/proto/fileio.pro
+++ b/src/proto/fileio.pro
@@ -1,51 +1,51 @@
 /* fileio.c */
-void filemess __ARGS((buf_T *buf, char_u *name, char_u *s, int attr));
-int readfile __ARGS((char_u *fname, char_u *sfname, linenr_T from, linenr_T lines_to_skip, linenr_T lines_to_read, exarg_T *eap, int flags));
-int prep_exarg __ARGS((exarg_T *eap, buf_T *buf));
-int buf_write __ARGS((buf_T *buf, char_u *fname, char_u *sfname, linenr_T start, linenr_T end, exarg_T *eap, int append, int forceit, int reset_changed, int filtering));
-void msg_add_fname __ARGS((buf_T *buf, char_u *fname));
-void msg_add_lines __ARGS((int insert_space, long lnum, long nchars));
-char_u *shorten_fname __ARGS((char_u *full_path, char_u *dir_name));
-void shorten_fnames __ARGS((int force));
-void shorten_filenames __ARGS((char_u **fnames, int count));
-char_u *modname __ARGS((char_u *fname, char_u *ext, int prepend_dot));
-char_u *buf_modname __ARGS((int shortname, char_u *fname, char_u *ext, int prepend_dot));
-int vim_fgets __ARGS((char_u *buf, int size, FILE *fp));
-int tag_fgets __ARGS((char_u *buf, int size, FILE *fp));
-int vim_rename __ARGS((char_u *from, char_u *to));
-int check_timestamps __ARGS((int focus));
-int buf_check_timestamp __ARGS((buf_T *buf, int focus));
-void buf_reload __ARGS((buf_T *buf, int orig_mode));
-void buf_store_time __ARGS((buf_T *buf, struct stat *st, char_u *fname));
-void write_lnum_adjust __ARGS((linenr_T offset));
-void vim_deltempdir __ARGS((void));
-char_u *vim_tempname __ARGS((int extra_char));
-void forward_slash __ARGS((char_u *fname));
-void aubuflocal_remove __ARGS((buf_T *buf));
-int au_has_group __ARGS((char_u *name));
-void do_augroup __ARGS((char_u *arg, int del_group));
-void free_all_autocmds __ARGS((void));
-int check_ei __ARGS((void));
-char_u *au_event_disable __ARGS((char *what));
-void au_event_restore __ARGS((char_u *old_ei));
-void do_autocmd __ARGS((char_u *arg, int forceit));
-int do_doautocmd __ARGS((char_u *arg, int do_msg));
-void ex_doautoall __ARGS((exarg_T *eap));
-void aucmd_prepbuf __ARGS((aco_save_T *aco, buf_T *buf));
-void aucmd_restbuf __ARGS((aco_save_T *aco));
-int apply_autocmds __ARGS((event_T event, char_u *fname, char_u *fname_io, int force, buf_T *buf));
-int apply_autocmds_retval __ARGS((event_T event, char_u *fname, char_u *fname_io, int force, buf_T *buf, int *retval));
-int has_cursorhold __ARGS((void));
-int trigger_cursorhold __ARGS((void));
-int has_cursormoved __ARGS((void));
-int has_cursormovedI __ARGS((void));
-int has_autocmd __ARGS((event_T event, char_u *sfname, buf_T *buf));
-char_u *get_augroup_name __ARGS((expand_T *xp, int idx));
-char_u *set_context_in_autocmd __ARGS((expand_T *xp, char_u *arg, int doautocmd));
-char_u *get_event_name __ARGS((expand_T *xp, int idx));
-int autocmd_supported __ARGS((char_u *name));
-int au_exists __ARGS((char_u *arg));
-int match_file_pat __ARGS((char_u *pattern, regprog_T *prog, char_u *fname, char_u *sfname, char_u *tail, int allow_dirs));
-int match_file_list __ARGS((char_u *list, char_u *sfname, char_u *ffname));
-char_u *file_pat_to_reg_pat __ARGS((char_u *pat, char_u *pat_end, char *allow_dirs, int no_bslash));
+extern void filemess __ARGS((buf_T *buf, char_u *name, char_u *s, int attr));
+extern int readfile __ARGS((char_u *fname, char_u *sfname, linenr_T from, linenr_T lines_to_skip, linenr_T lines_to_read, exarg_T *eap, int flags));
+extern int prep_exarg __ARGS((exarg_T *eap, buf_T *buf));
+extern int buf_write __ARGS((buf_T *buf, char_u *fname, char_u *sfname, linenr_T start, linenr_T end, exarg_T *eap, int append, int forceit, int reset_changed, int filtering));
+extern void msg_add_fname __ARGS((buf_T *buf, char_u *fname));
+extern void msg_add_lines __ARGS((int insert_space, long lnum, long nchars));
+extern char_u *shorten_fname __ARGS((char_u *full_path, char_u *dir_name));
+extern void shorten_fnames __ARGS((int force));
+extern void shorten_filenames __ARGS((char_u **fnames, int count));
+extern char_u *modname __ARGS((char_u *fname, char_u *ext, int prepend_dot));
+extern char_u *buf_modname __ARGS((int shortname, char_u *fname, char_u *ext, int prepend_dot));
+extern int vim_fgets __ARGS((char_u *buf, int size, FILE *fp));
+extern int tag_fgets __ARGS((char_u *buf, int size, FILE *fp));
+extern int vim_rename __ARGS((char_u *from, char_u *to));
+extern int check_timestamps __ARGS((int focus));
+extern int buf_check_timestamp __ARGS((buf_T *buf, int focus));
+extern void buf_reload __ARGS((buf_T *buf, int orig_mode));
+extern void buf_store_time __ARGS((buf_T *buf, struct stat *st, char_u *fname));
+extern void write_lnum_adjust __ARGS((linenr_T offset));
+extern void vim_deltempdir __ARGS((void));
+extern char_u *vim_tempname __ARGS((int extra_char));
+extern void forward_slash __ARGS((char_u *fname));
+extern void aubuflocal_remove __ARGS((buf_T *buf));
+extern int au_has_group __ARGS((char_u *name));
+extern void do_augroup __ARGS((char_u *arg, int del_group));
+extern void free_all_autocmds __ARGS((void));
+extern int check_ei __ARGS((void));
+extern char_u *au_event_disable __ARGS((char *what));
+extern void au_event_restore __ARGS((char_u *old_ei));
+extern void do_autocmd __ARGS((char_u *arg, int forceit));
+extern int do_doautocmd __ARGS((char_u *arg, int do_msg));
+extern void ex_doautoall __ARGS((exarg_T *eap));
+extern void aucmd_prepbuf __ARGS((aco_save_T *aco, buf_T *buf));
+extern void aucmd_restbuf __ARGS((aco_save_T *aco));
+extern int apply_autocmds __ARGS((event_T event, char_u *fname, char_u *fname_io, int force, buf_T *buf));
+extern int apply_autocmds_retval __ARGS((event_T event, char_u *fname, char_u *fname_io, int force, buf_T *buf, int *retval));
+extern int has_cursorhold __ARGS((void));
+extern int trigger_cursorhold __ARGS((void));
+extern int has_cursormoved __ARGS((void));
+extern int has_cursormovedI __ARGS((void));
+extern int has_autocmd __ARGS((event_T event, char_u *sfname, buf_T *buf));
+extern char_u *get_augroup_name __ARGS((expand_T *xp, int idx));
+extern char_u *set_context_in_autocmd __ARGS((expand_T *xp, char_u *arg, int doautocmd));
+extern char_u *get_event_name __ARGS((expand_T *xp, int idx));
+extern int autocmd_supported __ARGS((char_u *name));
+extern int au_exists __ARGS((char_u *arg));
+extern int match_file_pat __ARGS((char_u *pattern, regprog_T *prog, char_u *fname, char_u *sfname, char_u *tail, int allow_dirs));
+extern int match_file_list __ARGS((char_u *list, char_u *sfname, char_u *ffname));
+extern char_u *file_pat_to_reg_pat __ARGS((char_u *pat, char_u *pat_end, char *allow_dirs, int no_bslash));
 /* vim: set ft=c : */
diff --git a/src/proto/gui_beval.pro b/src/proto/gui_beval.pro
index 33c1738..42e0082 100644
--- a/src/proto/gui_beval.pro
+++ b/src/proto/gui_beval.pro
@@ -1,11 +1,11 @@
 /* gui_beval.c */
-void general_beval_cb __ARGS((BalloonEval *beval, int state));
-BalloonEval *gui_mch_create_beval_area __ARGS((void *target, char_u *mesg, void (*mesgCB)(BalloonEval *, int), void *clientData));
-void gui_mch_destroy_beval_area __ARGS((BalloonEval *beval));
-void gui_mch_enable_beval_area __ARGS((BalloonEval *beval));
-void gui_mch_disable_beval_area __ARGS((BalloonEval *beval));
-BalloonEval *gui_mch_currently_showing_beval __ARGS((void));
-int get_beval_info __ARGS((BalloonEval *beval, int getword, win_T **winp, linenr_T *lnump, char_u **textp, int *colp));
-void gui_mch_post_balloon __ARGS((BalloonEval *beval, char_u *mesg));
-void gui_mch_unpost_balloon __ARGS((BalloonEval *beval));
+extern void general_beval_cb __ARGS((BalloonEval *beval, int state));
+extern BalloonEval *gui_mch_create_beval_area __ARGS((void *target, char_u *mesg, void (*mesgCB)(BalloonEval *, int), void *clientData));
+extern void gui_mch_destroy_beval_area __ARGS((BalloonEval *beval));
+extern void gui_mch_enable_beval_area __ARGS((BalloonEval *beval));
+extern void gui_mch_disable_beval_area __ARGS((BalloonEval *beval));
+extern BalloonEval *gui_mch_currently_showing_beval __ARGS((void));
+extern int get_beval_info __ARGS((BalloonEval *beval, int getword, win_T **winp, linenr_T *lnump, char_u **textp, int *colp));
+extern void gui_mch_post_balloon __ARGS((BalloonEval *beval, char_u *mesg));
+extern void gui_mch_unpost_balloon __ARGS((BalloonEval *beval));
 /* vim: set ft=c : */
diff --git a/src/proto/gui_motif.pro b/src/proto/gui_motif.pro
index 8c49d2f..c1b1946 100644
--- a/src/proto/gui_motif.pro
+++ b/src/proto/gui_motif.pro
@@ -1,42 +1,42 @@
 /* gui_motif.c */
-void gui_x11_create_widgets __ARGS((void));
-void gui_x11_destroy_widgets __ARGS((void));
-void gui_mch_set_text_area_pos __ARGS((int x, int y, int w, int h));
-void gui_x11_set_back_color __ARGS((void));
-void manage_centered __ARGS((Widget dialog_child));
-XmFontList gui_motif_create_fontlist __ARGS((XFontStruct *font));
-XmFontList gui_motif_fontset2fontlist __ARGS((XFontSet *fontset));
-void gui_mch_enable_menu __ARGS((int flag));
-void gui_motif_set_mnemonics __ARGS((int enable));
-void gui_mch_add_menu __ARGS((vimmenu_T *menu, int idx));
-void gui_mch_toggle_tearoffs __ARGS((int enable));
-int gui_mch_text_area_extra_height __ARGS((void));
-void gui_mch_compute_menu_height __ARGS((Widget id));
-void gui_mch_add_menu_item __ARGS((vimmenu_T *menu, int idx));
-void gui_motif_update_mousemodel __ARGS((vimmenu_T *menu));
-void gui_mch_new_menu_colors __ARGS((void));
-void gui_mch_new_menu_font __ARGS((void));
-void gui_mch_new_tooltip_font __ARGS((void));
-void gui_mch_new_tooltip_colors __ARGS((void));
-void gui_mch_destroy_menu __ARGS((vimmenu_T *menu));
-void gui_mch_show_popupmenu __ARGS((vimmenu_T *menu));
-void gui_mch_def_colors __ARGS((void));
-void gui_mch_set_scrollbar_thumb __ARGS((scrollbar_T *sb, long val, long size, long max));
-void gui_mch_set_scrollbar_pos __ARGS((scrollbar_T *sb, int x, int y, int w, int h));
-void gui_mch_enable_scrollbar __ARGS((scrollbar_T *sb, int flag));
-void gui_mch_create_scrollbar __ARGS((scrollbar_T *sb, int orient));
-void gui_mch_destroy_scrollbar __ARGS((scrollbar_T *sb));
-void gui_mch_set_scrollbar_colors __ARGS((scrollbar_T *sb));
-Window gui_x11_get_wid __ARGS((void));
-char_u *gui_mch_browse __ARGS((int saving, char_u *title, char_u *dflt, char_u *ext, char_u *initdir, char_u *filter));
-int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *button_names, int dfltbutton, char_u *textfield));
-void gui_mch_enable_footer __ARGS((int showit));
-void gui_mch_set_footer __ARGS((char_u *s));
-void gui_mch_show_toolbar __ARGS((int showit));
-int gui_mch_compute_toolbar_height __ARGS((void));
-void motif_get_toolbar_colors __ARGS((Pixel *bgp, Pixel *fgp, Pixel *bsp, Pixel *tsp, Pixel *hsp));
-void gui_motif_menu_fontlist __ARGS((Widget id));
-void gui_mch_find_dialog __ARGS((exarg_T *eap));
-void gui_mch_replace_dialog __ARGS((exarg_T *eap));
-void gui_motif_synch_fonts __ARGS((void));
+extern void gui_x11_create_widgets __ARGS((void));
+extern void gui_x11_destroy_widgets __ARGS((void));
+extern void gui_mch_set_text_area_pos __ARGS((int x, int y, int w, int h));
+extern void gui_x11_set_back_color __ARGS((void));
+extern void manage_centered __ARGS((Widget dialog_child));
+extern XmFontList gui_motif_create_fontlist __ARGS((XFontStruct *font));
+extern XmFontList gui_motif_fontset2fontlist __ARGS((XFontSet *fontset));
+extern void gui_mch_enable_menu __ARGS((int flag));
+extern void gui_motif_set_mnemonics __ARGS((int enable));
+extern void gui_mch_add_menu __ARGS((vimmenu_T *menu, int idx));
+extern void gui_mch_toggle_tearoffs __ARGS((int enable));
+extern int gui_mch_text_area_extra_height __ARGS((void));
+extern void gui_mch_compute_menu_height __ARGS((Widget id));
+extern void gui_mch_add_menu_item __ARGS((vimmenu_T *menu, int idx));
+extern void gui_motif_update_mousemodel __ARGS((vimmenu_T *menu));
+extern void gui_mch_new_menu_colors __ARGS((void));
+extern void gui_mch_new_menu_font __ARGS((void));
+extern void gui_mch_new_tooltip_font __ARGS((void));
+extern void gui_mch_new_tooltip_colors __ARGS((void));
+extern void gui_mch_destroy_menu __ARGS((vimmenu_T *menu));
+extern void gui_mch_show_popupmenu __ARGS((vimmenu_T *menu));
+extern void gui_mch_def_colors __ARGS((void));
+extern void gui_mch_set_scrollbar_thumb __ARGS((scrollbar_T *sb, long val, long size, long max));
+extern void gui_mch_set_scrollbar_pos __ARGS((scrollbar_T *sb, int x, int y, int w, int h));
+extern void gui_mch_enable_scrollbar __ARGS((scrollbar_T *sb, int flag));
+extern void gui_mch_create_scrollbar __ARGS((scrollbar_T *sb, int orient));
+extern void gui_mch_destroy_scrollbar __ARGS((scrollbar_T *sb));
+extern void gui_mch_set_scrollbar_colors __ARGS((scrollbar_T *sb));
+extern Window gui_x11_get_wid __ARGS((void));
+extern char_u *gui_mch_browse __ARGS((int saving, char_u *title, char_u *dflt, char_u *ext, char_u *initdir, char_u *filter));
+extern int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *button_names, int dfltbutton, char_u *textfield));
+extern void gui_mch_enable_footer __ARGS((int showit));
+extern void gui_mch_set_footer __ARGS((char_u *s));
+extern void gui_mch_show_toolbar __ARGS((int showit));
+extern int gui_mch_compute_toolbar_height __ARGS((void));
+extern void motif_get_toolbar_colors __ARGS((Pixel *bgp, Pixel *fgp, Pixel *bsp, Pixel *tsp, Pixel *hsp));
+extern void gui_motif_menu_fontlist __ARGS((Widget id));
+extern void gui_mch_find_dialog __ARGS((exarg_T *eap));
+extern void gui_mch_replace_dialog __ARGS((exarg_T *eap));
+extern void gui_motif_synch_fonts __ARGS((void));
 /* vim: set ft=c : */
diff --git a/src/proto/gui_x11.pro b/src/proto/gui_x11.pro
index 3fd4673..66f192a 100644
--- a/src/proto/gui_x11.pro
+++ b/src/proto/gui_x11.pro
@@ -1,70 +1,70 @@
 /* gui_x11.c */
-void gui_x11_key_hit_cb __ARGS((Widget w, XtPointer dud, XEvent *event, Boolean *dum));
-void gui_mch_prepare __ARGS((int *argc, char **argv));
-int gui_mch_init_check __ARGS((void));
-int gui_mch_init __ARGS((void));
-void gui_mch_uninit __ARGS((void));
-void gui_mch_new_colors __ARGS((void));
-int gui_mch_open __ARGS((void));
-void gui_init_tooltip_font __ARGS((void));
-void gui_init_menu_font __ARGS((void));
-void gui_mch_exit __ARGS((int rc));
-int gui_mch_get_winpos __ARGS((int *x, int *y));
-void gui_mch_set_winpos __ARGS((int x, int y));
-void gui_mch_set_shellsize __ARGS((int width, int height, int min_width, int min_height, int base_width, int base_height));
-void gui_mch_get_screen_dimensions __ARGS((int *screen_w, int *screen_h));
-int gui_mch_init_font __ARGS((char_u *font_name, int do_fontset));
-GuiFont gui_mch_get_font __ARGS((char_u *name, int giveErrorIfMissing));
-char_u *gui_mch_get_fontname __ARGS((GuiFont font, char_u *name));
-int gui_mch_adjust_charheight __ARGS((void));
-void gui_mch_set_font __ARGS((GuiFont font));
-void gui_mch_set_fontset __ARGS((GuiFontset fontset));
-void gui_mch_free_font __ARGS((GuiFont font));
-void gui_mch_free_fontset __ARGS((GuiFontset fontset));
-GuiFontset gui_mch_get_fontset __ARGS((char_u *name, int giveErrorIfMissing, int fixed_width));
-int fontset_height __ARGS((XFontSet fs));
-int fontset_height2 __ARGS((XFontSet fs));
-guicolor_T gui_mch_get_color __ARGS((char_u *reqname));
-void gui_mch_set_fg_color __ARGS((guicolor_T color));
-void gui_mch_set_bg_color __ARGS((guicolor_T color));
-void gui_mch_set_sp_color __ARGS((guicolor_T color));
-void gui_mch_draw_string __ARGS((int row, int col, char_u *s, int len, int flags));
-int gui_mch_haskey __ARGS((char_u *name));
-int gui_get_x11_windis __ARGS((Window *win, Display **dis));
-void gui_mch_beep __ARGS((void));
-void gui_mch_flash __ARGS((int msec));
-void gui_mch_invert_rectangle __ARGS((int r, int c, int nr, int nc));
-void gui_mch_iconify __ARGS((void));
-void gui_mch_set_foreground __ARGS((void));
-void gui_mch_draw_hollow_cursor __ARGS((guicolor_T color));
-void gui_mch_draw_part_cursor __ARGS((int w, int h, guicolor_T color));
-void gui_mch_update __ARGS((void));
-int gui_mch_wait_for_chars __ARGS((long wtime));
-void gui_mch_flush __ARGS((void));
-void gui_mch_clear_block __ARGS((int row1, int col1, int row2, int col2));
-void gui_mch_clear_all __ARGS((void));
-void gui_mch_delete_lines __ARGS((int row, int num_lines));
-void gui_mch_insert_lines __ARGS((int row, int num_lines));
-void clip_mch_lose_selection __ARGS((VimClipboard *cbd));
-int clip_mch_own_selection __ARGS((VimClipboard *cbd));
-void clip_mch_request_selection __ARGS((VimClipboard *cbd));
-void clip_mch_set_selection __ARGS((VimClipboard *cbd));
-void gui_mch_menu_grey __ARGS((vimmenu_T *menu, int grey));
-void gui_mch_menu_hidden __ARGS((vimmenu_T *menu, int hidden));
-void gui_mch_draw_menubar __ARGS((void));
-void gui_x11_menu_cb __ARGS((Widget w, XtPointer client_data, XtPointer call_data));
-void gui_mch_set_blinking __ARGS((long waittime, long on, long off));
-void gui_mch_stop_blink __ARGS((void));
-void gui_mch_start_blink __ARGS((void));
-long_u gui_mch_get_rgb __ARGS((guicolor_T pixel));
-void gui_x11_callbacks __ARGS((Widget textArea, Widget vimForm));
-void gui_mch_getmouse __ARGS((int *x, int *y));
-void gui_mch_setmouse __ARGS((int x, int y));
-XButtonPressedEvent *gui_x11_get_last_mouse_event __ARGS((void));
-void gui_mch_drawsign __ARGS((int row, int col, int typenr));
-void *gui_mch_register_sign __ARGS((char_u *signfile));
-void gui_mch_destroy_sign __ARGS((void *sign));
-void gui_mch_mousehide __ARGS((int hide));
-void mch_set_mouse_shape __ARGS((int shape));
-void gui_mch_menu_set_tip __ARGS((vimmenu_T *menu));
+extern void gui_x11_key_hit_cb __ARGS((Widget w, XtPointer dud, XEvent *event, Boolean *dum));
+extern void gui_mch_prepare __ARGS((int *argc, char **argv));
+extern int gui_mch_init_check __ARGS((void));
+extern int gui_mch_init __ARGS((void));
+extern void gui_mch_uninit __ARGS((void));
+extern void gui_mch_new_colors __ARGS((void));
+extern int gui_mch_open __ARGS((void));
+extern void gui_init_tooltip_font __ARGS((void));
+extern void gui_init_menu_font __ARGS((void));
+extern void gui_mch_exit __ARGS((int rc));
+extern int gui_mch_get_winpos __ARGS((int *x, int *y));
+extern void gui_mch_set_winpos __ARGS((int x, int y));
+extern void gui_mch_set_shellsize __ARGS((int width, int height, int min_width, int min_height, int base_width, int base_height));
+extern void gui_mch_get_screen_dimensions __ARGS((int *screen_w, int *screen_h));
+extern int gui_mch_init_font __ARGS((char_u *font_name, int do_fontset));
+extern GuiFont gui_mch_get_font __ARGS((char_u *name, int giveErrorIfMissing));
+extern char_u *gui_mch_get_fontname __ARGS((GuiFont font, char_u *name));
+extern int gui_mch_adjust_charheight __ARGS((void));
+extern void gui_mch_set_font __ARGS((GuiFont font));
+extern void gui_mch_set_fontset __ARGS((GuiFontset fontset));
+extern void gui_mch_free_font __ARGS((GuiFont font));
+extern void gui_mch_free_fontset __ARGS((GuiFontset fontset));
+extern GuiFontset gui_mch_get_fontset __ARGS((char_u *name, int giveErrorIfMissing, int fixed_width));
+extern int fontset_height __ARGS((XFontSet fs));
+extern int fontset_height2 __ARGS((XFontSet fs));
+extern guicolor_T gui_mch_get_color __ARGS((char_u *reqname));
+extern void gui_mch_set_fg_color __ARGS((guicolor_T color));
+extern void gui_mch_set_bg_color __ARGS((guicolor_T color));
+extern void gui_mch_set_sp_color __ARGS((guicolor_T color));
+extern void gui_mch_draw_string __ARGS((int row, int col, char_u *s, int len, int flags));
+extern int gui_mch_haskey __ARGS((char_u *name));
+extern int gui_get_x11_windis __ARGS((Window *win, Display **dis));
+extern void gui_mch_beep __ARGS((void));
+extern void gui_mch_flash __ARGS((int msec));
+extern void gui_mch_invert_rectangle __ARGS((int r, int c, int nr, int nc));
+extern void gui_mch_iconify __ARGS((void));
+extern void gui_mch_set_foreground __ARGS((void));
+extern void gui_mch_draw_hollow_cursor __ARGS((guicolor_T color));
+extern void gui_mch_draw_part_cursor __ARGS((int w, int h, guicolor_T color));
+extern void gui_mch_update __ARGS((void));
+extern int gui_mch_wait_for_chars __ARGS((long wtime));
+extern void gui_mch_flush __ARGS((void));
+extern void gui_mch_clear_block __ARGS((int row1, int col1, int row2, int col2));
+extern void gui_mch_clear_all __ARGS((void));
+extern void gui_mch_delete_lines __ARGS((int row, int num_lines));
+extern void gui_mch_insert_lines __ARGS((int row, int num_lines));
+extern void clip_mch_lose_selection __ARGS((VimClipboard *cbd));
+extern int clip_mch_own_selection __ARGS((VimClipboard *cbd));
+extern void clip_mch_request_selection __ARGS((VimClipboard *cbd));
+extern void clip_mch_set_selection __ARGS((VimClipboard *cbd));
+extern void gui_mch_menu_grey __ARGS((vimmenu_T *menu, int grey));
+extern void gui_mch_menu_hidden __ARGS((vimmenu_T *menu, int hidden));
+extern void gui_mch_draw_menubar __ARGS((void));
+extern void gui_x11_menu_cb __ARGS((Widget w, XtPointer client_data, XtPointer call_data));
+extern void gui_mch_set_blinking __ARGS((long waittime, long on, long off));
+extern void gui_mch_stop_blink __ARGS((void));
+extern void gui_mch_start_blink __ARGS((void));
+extern long_u gui_mch_get_rgb __ARGS((guicolor_T pixel));
+extern void gui_x11_callbacks __ARGS((Widget textArea, Widget vimForm));
+extern void gui_mch_getmouse __ARGS((int *x, int *y));
+extern void gui_mch_setmouse __ARGS((int x, int y));
+extern XButtonPressedEvent *gui_x11_get_last_mouse_event __ARGS((void));
+extern void gui_mch_drawsign __ARGS((int row, int col, int typenr));
+extern void *gui_mch_register_sign __ARGS((char_u *signfile));
+extern void gui_mch_destroy_sign __ARGS((void *sign));
+extern void gui_mch_mousehide __ARGS((int hide));
+extern void mch_set_mouse_shape __ARGS((int shape));
+extern void gui_mch_menu_set_tip __ARGS((vimmenu_T *menu));
 /* vim: set ft=c : */
diff --git a/src/proto/hangulin.pro b/src/proto/hangulin.pro
index adfde14..350b1cb 100644
--- a/src/proto/hangulin.pro
+++ b/src/proto/hangulin.pro
@@ -1,9 +1,9 @@
 /* hangulin.c */
-int hangul_input_state_get __ARGS((void));
-void hangul_input_state_set __ARGS((int state));
-int im_get_status __ARGS((void));
-void hangul_input_state_toggle __ARGS((void));
-void hangul_keyboard_set __ARGS((void));
-int hangul_input_process __ARGS((char_u *s, int len));
-void hangul_input_clear __ARGS((void));
+extern int hangul_input_state_get __ARGS((void));
+extern void hangul_input_state_set __ARGS((int state));
+extern int im_get_status __ARGS((void));
+extern void hangul_input_state_toggle __ARGS((void));
+extern void hangul_keyboard_set __ARGS((void));
+extern int hangul_input_process __ARGS((char_u *s, int len));
+extern void hangul_input_clear __ARGS((void));
 /* vim: set ft=c : */
diff --git a/src/proto/hashtable.pro b/src/proto/hashtable.pro
deleted file mode 100644
index 9072376..0000000
--- a/src/proto/hashtable.pro
+++ /dev/null
@@ -1,14 +0,0 @@
-/* hashtable.c */
-void hash_init __ARGS((hashtab_T *ht));
-void hash_clear __ARGS((hashtab_T *ht));
-void hash_clear_all __ARGS((hashtab_T *ht, int off));
-hashitem_T *hash_find __ARGS((hashtab_T *ht, char_u *key));
-hashitem_T *hash_lookup __ARGS((hashtab_T *ht, char_u *key, hash_T hash));
-void hash_debug_results __ARGS((void));
-int hash_add __ARGS((hashtab_T *ht, char_u *key));
-int hash_add_item __ARGS((hashtab_T *ht, hashitem_T *hi, char_u *key, hash_T hash));
-void hash_remove __ARGS((hashtab_T *ht, hashitem_T *hi));
-void hash_lock __ARGS((hashtab_T *ht));
-void hash_unlock __ARGS((hashtab_T *ht));
-hash_T hash_hash __ARGS((char_u *key));
-/* vim: set ft=c : */
diff --git a/src/proto/if_perl.pro b/src/proto/if_perl.pro
index fe0301b..91dab6d 100644
--- a/src/proto/if_perl.pro
+++ b/src/proto/if_perl.pro
@@ -1,8 +1,8 @@
 /* auto/if_perl.c */
-int perl_enabled __ARGS((int verbose));
-void perl_end __ARGS((void));
-void msg_split __ARGS((char_u *s, int attr));
-void perl_win_free __ARGS((win_T *wp));
-void perl_buf_free __ARGS((buf_T *bp));
-void ex_perl __ARGS((exarg_T *eap));
-void ex_perldo __ARGS((exarg_T *eap));
+extern int perl_enabled __ARGS((int verbose));
+extern void perl_end __ARGS((void));
+extern void msg_split __ARGS((char_u *s, int attr));
+extern void perl_win_free __ARGS((win_T *wp));
+extern void perl_buf_free __ARGS((buf_T *bp));
+extern void ex_perl __ARGS((exarg_T *eap));
+extern void ex_perldo __ARGS((exarg_T *eap));
diff --git a/src/proto/if_python.pro b/src/proto/if_python.pro
index 793b6ee..09c4ab7 100644
--- a/src/proto/if_python.pro
+++ b/src/proto/if_python.pro
@@ -1,8 +1,8 @@
 /* if_python.c */
-int python_enabled __ARGS((int verbose));
-void python_end __ARGS((void));
-void ex_python __ARGS((exarg_T *eap));
-void ex_pyfile __ARGS((exarg_T *eap));
-void python_buffer_free __ARGS((buf_T *buf));
-void python_window_free __ARGS((win_T *win));
+extern int python_enabled __ARGS((int verbose));
+extern void python_end __ARGS((void));
+extern void ex_python __ARGS((exarg_T *eap));
+extern void ex_pyfile __ARGS((exarg_T *eap));
+extern void python_buffer_free __ARGS((buf_T *buf));
+extern void python_window_free __ARGS((win_T *win));
 /* vim: set ft=c : */
diff --git a/src/proto/if_ruby.pro b/src/proto/if_ruby.pro
index 7dedb22..352f155 100644
--- a/src/proto/if_ruby.pro
+++ b/src/proto/if_ruby.pro
@@ -1,9 +1,9 @@
 /* if_ruby.c */
-int ruby_enabled __ARGS((int verbose));
-void ruby_end __ARGS((void));
-void ex_ruby __ARGS((exarg_T *eap));
-void ex_rubydo __ARGS((exarg_T *eap));
-void ex_rubyfile __ARGS((exarg_T *eap));
-void ruby_buffer_free __ARGS((buf_T *buf));
-void ruby_window_free __ARGS((win_T *win));
+extern int ruby_enabled __ARGS((int verbose));
+extern void ruby_end __ARGS((void));
+extern void ex_ruby __ARGS((exarg_T *eap));
+extern void ex_rubydo __ARGS((exarg_T *eap));
+extern void ex_rubyfile __ARGS((exarg_T *eap));
+extern void ruby_buffer_free __ARGS((buf_T *buf));
+extern void ruby_window_free __ARGS((win_T *win));
 /* vim: set ft=c : */
diff --git a/src/proto/if_xcmdsrv.pro b/src/proto/if_xcmdsrv.pro
index dd6a120..ebb45f1 100644
--- a/src/proto/if_xcmdsrv.pro
+++ b/src/proto/if_xcmdsrv.pro
@@ -1,11 +1,11 @@
 /* if_xcmdsrv.c */
-int serverRegisterName __ARGS((Display *dpy, char_u *name));
-void serverChangeRegisteredWindow __ARGS((Display *dpy, Window newwin));
-int serverSendToVim __ARGS((Display *dpy, char_u *name, char_u *cmd, char_u **result, Window *server, int asExpr, int localLoop, int silent));
-char_u *serverGetVimNames __ARGS((Display *dpy));
-Window serverStrToWin __ARGS((char_u *str));
-int serverSendReply __ARGS((char_u *name, char_u *str));
-int serverReadReply __ARGS((Display *dpy, Window win, char_u **str, int localLoop));
-int serverPeekReply __ARGS((Display *dpy, Window win, char_u **str));
-void serverEventProc __ARGS((Display *dpy, XEvent *eventPtr));
+extern int serverRegisterName __ARGS((Display *dpy, char_u *name));
+extern void serverChangeRegisteredWindow __ARGS((Display *dpy, Window newwin));
+extern int serverSendToVim __ARGS((Display *dpy, char_u *name, char_u *cmd, char_u **result, Window *server, int asExpr, int localLoop, int silent));
+extern char_u *serverGetVimNames __ARGS((Display *dpy));
+extern Window serverStrToWin __ARGS((char_u *str));
+extern int serverSendReply __ARGS((char_u *name, char_u *str));
+extern int serverReadReply __ARGS((Display *dpy, Window win, char_u **str, int localLoop));
+extern int serverPeekReply __ARGS((Display *dpy, Window win, char_u **str));
+extern void serverEventProc __ARGS((Display *dpy, XEvent *eventPtr));
 /* vim: set ft=c : */
diff --git a/src/proto/mbyte.pro b/src/proto/mbyte.pro
index 16a36c8..020b60f 100644
--- a/src/proto/mbyte.pro
+++ b/src/proto/mbyte.pro
@@ -1,91 +1,91 @@
 /* mbyte.c */
-int enc_canon_props __ARGS((char_u *name));
-char_u *mb_init __ARGS((void));
-int bomb_size __ARGS((void));
-int mb_get_class __ARGS((char_u *p));
-int dbcs_class __ARGS((unsigned lead, unsigned trail));
-int latin_char2len __ARGS((int c));
-int latin_char2bytes __ARGS((int c, char_u *buf));
-int latin_ptr2len __ARGS((char_u *p));
-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_char2cells __ARGS((int c));
-int latin_off2cells __ARGS((unsigned off));
-int dbcs_off2cells __ARGS((unsigned off));
-int utf_off2cells __ARGS((unsigned off));
-int latin_ptr2char __ARGS((char_u *p));
-int utf_ptr2char __ARGS((char_u *p));
-int mb_ptr2char_adv __ARGS((char_u **pp));
-int mb_cptr2char_adv __ARGS((char_u **pp));
-int arabic_combine __ARGS((int one, int two));
-int arabic_maycombine __ARGS((int two));
-int utf_composinglike __ARGS((char_u *p1, char_u *p2));
-int utfc_ptr2char __ARGS((char_u *p, int *pcc));
-int utfc_ptr2char_len __ARGS((char_u *p, int *pcc, int maxlen));
-int utfc_char2bytes __ARGS((int off, char_u *buf));
-int utf_ptr2len __ARGS((char_u *p));
-int utf_byte2len __ARGS((int b));
-int utf_ptr2len_len __ARGS((char_u *p, int size));
-int utfc_ptr2len __ARGS((char_u *p));
-int utfc_ptr2len_len __ARGS((char_u *p, int size));
-int utf_char2len __ARGS((int c));
-int utf_char2bytes __ARGS((int c, char_u *buf));
-int utf_iscomposing __ARGS((int c));
-int utf_printable __ARGS((int c));
-int utf_class __ARGS((int c));
-int utf_fold __ARGS((int a));
-int utf_toupper __ARGS((int a));
-int utf_islower __ARGS((int a));
-int utf_tolower __ARGS((int a));
-int utf_isupper __ARGS((int a));
-int mb_strnicmp __ARGS((char_u *s1, char_u *s2, size_t nn));
-void show_utf8 __ARGS((void));
-int latin_head_off __ARGS((char_u *base, char_u *p));
-int dbcs_head_off __ARGS((char_u *base, char_u *p));
-int dbcs_screen_head_off __ARGS((char_u *base, char_u *p));
-int utf_head_off __ARGS((char_u *base, char_u *p));
-void mb_copy_char __ARGS((char_u **fp, char_u **tp));
-int mb_off_next __ARGS((char_u *base, char_u *p));
-int mb_tail_off __ARGS((char_u *base, char_u *p));
-void utf_find_illegal __ARGS((void));
-int utf_valid_string __ARGS((char_u *s, char_u *end));
-int dbcs_screen_tail_off __ARGS((char_u *base, char_u *p));
-void mb_adjust_cursor __ARGS((void));
-void mb_adjustpos __ARGS((pos_T *lp));
-char_u *mb_prevptr __ARGS((char_u *line, char_u *p));
-int mb_charlen __ARGS((char_u *str));
-int mb_charlen_len __ARGS((char_u *str, int len));
-char_u *mb_unescape __ARGS((char_u **pp));
-int mb_lefthalve __ARGS((int row, int col));
-int mb_fix_col __ARGS((int col, int row));
-char_u *enc_skip __ARGS((char_u *p));
-char_u *enc_canonize __ARGS((char_u *enc));
-char_u *enc_locale __ARGS((void));
-int encname2codepage __ARGS((char_u *name));
-void *my_iconv_open __ARGS((char_u *to, char_u *from));
-int iconv_enabled __ARGS((int verbose));
-void iconv_end __ARGS((void));
-int im_xim_isvalid_imactivate __ARGS((void));
-void im_set_active __ARGS((int active));
-void xim_set_focus __ARGS((int focus));
-void im_set_position __ARGS((int row, int col));
-void xim_set_preedit __ARGS((void));
-void xim_set_status_area __ARGS((void));
-void xim_init __ARGS((void));
-void xim_decide_input_style __ARGS((void));
-int im_get_feedback_attr __ARGS((int col));
-void xim_reset __ARGS((void));
-int xim_queue_key_press_event __ARGS((GdkEventKey *event, int down));
-void xim_init __ARGS((void));
-void im_shutdown __ARGS((void));
-int xim_get_status_area_height __ARGS((void));
-int im_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_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));
-char_u *string_convert_ext __ARGS((vimconv_T *vcp, char_u *ptr, int *lenp, int *unconvlenp));
+extern int enc_canon_props __ARGS((char_u *name));
+extern char_u *mb_init __ARGS((void));
+extern int bomb_size __ARGS((void));
+extern int mb_get_class __ARGS((char_u *p));
+extern int dbcs_class __ARGS((unsigned lead, unsigned trail));
+extern int latin_char2len __ARGS((int c));
+extern int latin_char2bytes __ARGS((int c, char_u *buf));
+extern int latin_ptr2len __ARGS((char_u *p));
+extern int utf_char2cells __ARGS((int c));
+extern int latin_ptr2cells __ARGS((char_u *p));
+extern int utf_ptr2cells __ARGS((char_u *p));
+extern int dbcs_ptr2cells __ARGS((char_u *p));
+extern int latin_char2cells __ARGS((int c));
+extern int latin_off2cells __ARGS((unsigned off));
+extern int dbcs_off2cells __ARGS((unsigned off));
+extern int utf_off2cells __ARGS((unsigned off));
+extern int latin_ptr2char __ARGS((char_u *p));
+extern int utf_ptr2char __ARGS((char_u *p));
+extern int mb_ptr2char_adv __ARGS((char_u **pp));
+extern int mb_cptr2char_adv __ARGS((char_u **pp));
+extern int arabic_combine __ARGS((int one, int two));
+extern int arabic_maycombine __ARGS((int two));
+extern int utf_composinglike __ARGS((char_u *p1, char_u *p2));
+extern int utfc_ptr2char __ARGS((char_u *p, int *pcc));
+extern int utfc_ptr2char_len __ARGS((char_u *p, int *pcc, int maxlen));
+extern int utfc_char2bytes __ARGS((int off, char_u *buf));
+extern int utf_ptr2len __ARGS((char_u *p));
+extern int utf_byte2len __ARGS((int b));
+extern int utf_ptr2len_len __ARGS((char_u *p, int size));
+extern int utfc_ptr2len __ARGS((char_u *p));
+extern int utfc_ptr2len_len __ARGS((char_u *p, int size));
+extern int utf_char2len __ARGS((int c));
+extern int utf_char2bytes __ARGS((int c, char_u *buf));
+extern int utf_iscomposing __ARGS((int c));
+extern int utf_printable __ARGS((int c));
+extern int utf_class __ARGS((int c));
+extern int utf_fold __ARGS((int a));
+extern int utf_toupper __ARGS((int a));
+extern int utf_islower __ARGS((int a));
+extern int utf_tolower __ARGS((int a));
+extern int utf_isupper __ARGS((int a));
+extern int mb_strnicmp __ARGS((char_u *s1, char_u *s2, size_t nn));
+extern void show_utf8 __ARGS((void));
+extern int latin_head_off __ARGS((char_u *base, char_u *p));
+extern int dbcs_head_off __ARGS((char_u *base, char_u *p));
+extern int dbcs_screen_head_off __ARGS((char_u *base, char_u *p));
+extern int utf_head_off __ARGS((char_u *base, char_u *p));
+extern void mb_copy_char __ARGS((char_u **fp, char_u **tp));
+extern int mb_off_next __ARGS((char_u *base, char_u *p));
+extern int mb_tail_off __ARGS((char_u *base, char_u *p));
+extern void utf_find_illegal __ARGS((void));
+extern int utf_valid_string __ARGS((char_u *s, char_u *end));
+extern int dbcs_screen_tail_off __ARGS((char_u *base, char_u *p));
+extern void mb_adjust_cursor __ARGS((void));
+extern void mb_adjustpos __ARGS((pos_T *lp));
+extern char_u *mb_prevptr __ARGS((char_u *line, char_u *p));
+extern int mb_charlen __ARGS((char_u *str));
+extern int mb_charlen_len __ARGS((char_u *str, int len));
+extern char_u *mb_unescape __ARGS((char_u **pp));
+extern int mb_lefthalve __ARGS((int row, int col));
+extern int mb_fix_col __ARGS((int col, int row));
+extern char_u *enc_skip __ARGS((char_u *p));
+extern char_u *enc_canonize __ARGS((char_u *enc));
+extern char_u *enc_locale __ARGS((void));
+extern int encname2codepage __ARGS((char_u *name));
+extern void *my_iconv_open __ARGS((char_u *to, char_u *from));
+extern int iconv_enabled __ARGS((int verbose));
+extern void iconv_end __ARGS((void));
+extern int im_xim_isvalid_imactivate __ARGS((void));
+extern void im_set_active __ARGS((int active));
+extern void xim_set_focus __ARGS((int focus));
+extern void im_set_position __ARGS((int row, int col));
+extern void xim_set_preedit __ARGS((void));
+extern void xim_set_status_area __ARGS((void));
+extern void xim_init __ARGS((void));
+extern void xim_decide_input_style __ARGS((void));
+extern int im_get_feedback_attr __ARGS((int col));
+extern void xim_reset __ARGS((void));
+extern int xim_queue_key_press_event __ARGS((GdkEventKey *event, int down));
+extern void xim_init __ARGS((void));
+extern void im_shutdown __ARGS((void));
+extern int xim_get_status_area_height __ARGS((void));
+extern int im_get_status __ARGS((void));
+extern int im_is_preediting __ARGS((void));
+extern int convert_setup __ARGS((vimconv_T *vcp, char_u *from, char_u *to));
+extern int convert_input __ARGS((char_u *ptr, int len, int maxlen));
+extern int convert_input_safe __ARGS((char_u *ptr, int len, int maxlen, char_u **restp, int *restlenp));
+extern char_u *string_convert __ARGS((vimconv_T *vcp, char_u *ptr, int *lenp));
+extern char_u *string_convert_ext __ARGS((vimconv_T *vcp, char_u *ptr, int *lenp, int *unconvlenp));
 /* vim: set ft=c : */
diff --git a/src/proto/memline.pro b/src/proto/memline.pro
index de75a7d..88f0dac 100644
--- a/src/proto/memline.pro
+++ b/src/proto/memline.pro
@@ -1,33 +1,33 @@
 /* memline.c */
-int ml_open __ARGS((buf_T *buf));
-void ml_setname __ARGS((buf_T *buf));
-void ml_open_files __ARGS((void));
-void ml_open_file __ARGS((buf_T *buf));
-void check_need_swap __ARGS((int newfile));
-void ml_close __ARGS((buf_T *buf, int del_file));
-void ml_close_all __ARGS((int del_file));
-void ml_close_notmod __ARGS((void));
-void ml_timestamp __ARGS((buf_T *buf));
-void ml_recover __ARGS((void));
-int recover_names __ARGS((char_u **fname, int list, int nr));
-void ml_sync_all __ARGS((int check_file, int check_char));
-void ml_preserve __ARGS((buf_T *buf, int message));
-char_u *ml_get __ARGS((linenr_T lnum));
-char_u *ml_get_pos __ARGS((pos_T *pos));
-char_u *ml_get_curline __ARGS((void));
-char_u *ml_get_cursor __ARGS((void));
-char_u *ml_get_buf __ARGS((buf_T *buf, linenr_T lnum, int will_change));
-int ml_line_alloced __ARGS((void));
-int ml_append __ARGS((linenr_T lnum, char_u *line, colnr_T len, int newfile));
-int ml_append_buf __ARGS((buf_T *buf, linenr_T lnum, char_u *line, colnr_T len, int newfile));
-int ml_replace __ARGS((linenr_T lnum, char_u *line, int copy));
-int ml_delete __ARGS((linenr_T lnum, int message));
-void ml_setmarked __ARGS((linenr_T lnum));
-linenr_T ml_firstmarked __ARGS((void));
-void ml_clearmarked __ARGS((void));
-char_u *makeswapname __ARGS((char_u *fname, char_u *ffname, buf_T *buf, char_u *dir_name));
-char_u *get_file_in_dir __ARGS((char_u *fname, char_u *dname));
-void ml_setflags __ARGS((buf_T *buf));
-long ml_find_line_or_offset __ARGS((buf_T *buf, linenr_T lnum, long *offp));
-void goto_byte __ARGS((long cnt));
+extern int ml_open __ARGS((buf_T *buf));
+extern void ml_setname __ARGS((buf_T *buf));
+extern void ml_open_files __ARGS((void));
+extern void ml_open_file __ARGS((buf_T *buf));
+extern void check_need_swap __ARGS((int newfile));
+extern void ml_close __ARGS((buf_T *buf, int del_file));
+extern void ml_close_all __ARGS((int del_file));
+extern void ml_close_notmod __ARGS((void));
+extern void ml_timestamp __ARGS((buf_T *buf));
+extern void ml_recover __ARGS((void));
+extern int recover_names __ARGS((char_u **fname, int list, int nr));
+extern void ml_sync_all __ARGS((int check_file, int check_char));
+extern void ml_preserve __ARGS((buf_T *buf, int message));
+extern char_u *ml_get __ARGS((linenr_T lnum));
+extern char_u *ml_get_pos __ARGS((pos_T *pos));
+extern char_u *ml_get_curline __ARGS((void));
+extern char_u *ml_get_cursor __ARGS((void));
+extern char_u *ml_get_buf __ARGS((buf_T *buf, linenr_T lnum, int will_change));
+extern int ml_line_alloced __ARGS((void));
+extern int ml_append __ARGS((linenr_T lnum, char_u *line, colnr_T len, int newfile));
+extern int ml_append_buf __ARGS((buf_T *buf, linenr_T lnum, char_u *line, colnr_T len, int newfile));
+extern int ml_replace __ARGS((linenr_T lnum, char_u *line, int copy));
+extern int ml_delete __ARGS((linenr_T lnum, int message));
+extern void ml_setmarked __ARGS((linenr_T lnum));
+extern linenr_T ml_firstmarked __ARGS((void));
+extern void ml_clearmarked __ARGS((void));
+extern char_u *makeswapname __ARGS((char_u *fname, char_u *ffname, buf_T *buf, char_u *dir_name));
+extern char_u *get_file_in_dir __ARGS((char_u *fname, char_u *dname));
+extern void ml_setflags __ARGS((buf_T *buf));
+extern long ml_find_line_or_offset __ARGS((buf_T *buf, linenr_T lnum, long *offp));
+extern void goto_byte __ARGS((long cnt));
 /* vim: set ft=c : */
diff --git a/src/proto/menu.pro b/src/proto/menu.pro
index 506a963..227b694 100644
--- a/src/proto/menu.pro
+++ b/src/proto/menu.pro
@@ -1,21 +1,21 @@
 /* menu.c */
-void ex_menu __ARGS((exarg_T *eap));
-char_u *set_context_in_menu_cmd __ARGS((expand_T *xp, char_u *cmd, char_u *arg, int forceit));
-char_u *get_menu_name __ARGS((expand_T *xp, int idx));
-char_u *get_menu_names __ARGS((expand_T *xp, int idx));
-char_u *menu_name_skip __ARGS((char_u *name));
-int get_menu_index __ARGS((vimmenu_T *menu, int state));
-int menu_is_menubar __ARGS((char_u *name));
-int menu_is_popup __ARGS((char_u *name));
-int menu_is_child_of_popup __ARGS((vimmenu_T *menu));
-int menu_is_toolbar __ARGS((char_u *name));
-int menu_is_separator __ARGS((char_u *name));
-void gui_create_initial_menus __ARGS((vimmenu_T *menu));
-void gui_update_menus __ARGS((int modes));
-int gui_is_menu_shortcut __ARGS((int key));
-void gui_show_popupmenu __ARGS((void));
-void gui_mch_toggle_tearoffs __ARGS((int enable));
-void ex_emenu __ARGS((exarg_T *eap));
-vimmenu_T *gui_find_menu __ARGS((char_u *path_name));
-void ex_menutranslate __ARGS((exarg_T *eap));
+extern void ex_menu __ARGS((exarg_T *eap));
+extern char_u *set_context_in_menu_cmd __ARGS((expand_T *xp, char_u *cmd, char_u *arg, int forceit));
+extern char_u *get_menu_name __ARGS((expand_T *xp, int idx));
+extern char_u *get_menu_names __ARGS((expand_T *xp, int idx));
+extern char_u *menu_name_skip __ARGS((char_u *name));
+extern int get_menu_index __ARGS((vimmenu_T *menu, int state));
+extern int menu_is_menubar __ARGS((char_u *name));
+extern int menu_is_popup __ARGS((char_u *name));
+extern int menu_is_child_of_popup __ARGS((vimmenu_T *menu));
+extern int menu_is_toolbar __ARGS((char_u *name));
+extern int menu_is_separator __ARGS((char_u *name));
+extern void gui_create_initial_menus __ARGS((vimmenu_T *menu));
+extern void gui_update_menus __ARGS((int modes));
+extern int gui_is_menu_shortcut __ARGS((int key));
+extern void gui_show_popupmenu __ARGS((void));
+extern void gui_mch_toggle_tearoffs __ARGS((int enable));
+extern void ex_emenu __ARGS((exarg_T *eap));
+extern vimmenu_T *gui_find_menu __ARGS((char_u *path_name));
+extern void ex_menutranslate __ARGS((exarg_T *eap));
 /* vim: set ft=c : */
diff --git a/src/proto/misc1.pro b/src/proto/misc1.pro
index af86edc..49fc4b0 100644
--- a/src/proto/misc1.pro
+++ b/src/proto/misc1.pro
@@ -1,94 +1,94 @@
 /* misc1.c */
-int get_indent __ARGS((void));
-int get_indent_lnum __ARGS((linenr_T lnum));
-int get_indent_buf __ARGS((buf_T *buf, linenr_T lnum));
-int get_indent_str __ARGS((char_u *ptr, int ts));
-int set_indent __ARGS((int size, int flags));
-int get_number_indent __ARGS((linenr_T lnum));
-int open_line __ARGS((int dir, int flags, int old_indent));
-int get_leader_len __ARGS((char_u *line, char_u **flags, int backward));
-int plines __ARGS((linenr_T lnum));
-int plines_win __ARGS((win_T *wp, linenr_T lnum, int winheight));
-int plines_nofill __ARGS((linenr_T lnum));
-int plines_win_nofill __ARGS((win_T *wp, linenr_T lnum, int winheight));
-int plines_win_nofold __ARGS((win_T *wp, linenr_T lnum));
-int plines_win_col __ARGS((win_T *wp, linenr_T lnum, long column));
-int plines_m_win __ARGS((win_T *wp, linenr_T first, linenr_T last));
-void ins_bytes __ARGS((char_u *p));
-void ins_bytes_len __ARGS((char_u *p, int len));
-void ins_char __ARGS((int c));
-void ins_char_bytes __ARGS((char_u *buf, int charlen));
-void ins_str __ARGS((char_u *s));
-int del_char __ARGS((int fixpos));
-int del_chars __ARGS((long count, int fixpos));
-int del_bytes __ARGS((long count, int fixpos, int use_delcombine));
-int truncate_line __ARGS((int fixpos));
-void del_lines __ARGS((long nlines, int undo));
-int gchar_pos __ARGS((pos_T *pos));
-int gchar_cursor __ARGS((void));
-void pchar_cursor __ARGS((int c));
-int inindent __ARGS((int extra));
-char_u *skip_to_option_part __ARGS((char_u *p));
-void changed __ARGS((void));
-void changed_bytes __ARGS((linenr_T lnum, colnr_T col));
-void appended_lines __ARGS((linenr_T lnum, long count));
-void appended_lines_mark __ARGS((linenr_T lnum, long count));
-void deleted_lines __ARGS((linenr_T lnum, long count));
-void deleted_lines_mark __ARGS((linenr_T lnum, long count));
-void changed_lines __ARGS((linenr_T lnum, colnr_T col, linenr_T lnume, long xtra));
-void unchanged __ARGS((buf_T *buf, int ff));
-void check_status __ARGS((buf_T *buf));
-void change_warning __ARGS((int col));
-int ask_yesno __ARGS((char_u *str, int direct));
-int get_keystroke __ARGS((void));
-int get_number __ARGS((int colon, int *mouse_used));
-int prompt_for_number __ARGS((int *mouse_used));
-void msgmore __ARGS((long n));
-void beep_flush __ARGS((void));
-void vim_beep __ARGS((void));
-void init_homedir __ARGS((void));
-void free_homedir __ARGS((void));
-void expand_env __ARGS((char_u *src, char_u *dst, int dstlen));
-void expand_env_esc __ARGS((char_u *srcp, char_u *dst, int dstlen, int esc, char_u *startstr));
-char_u *vim_getenv __ARGS((char_u *name, int *mustfree));
-char_u *expand_env_save __ARGS((char_u *src));
-void vim_setenv __ARGS((char_u *name, char_u *val));
-char_u *get_env_name __ARGS((expand_T *xp, int idx));
-void home_replace __ARGS((buf_T *buf, char_u *src, char_u *dst, int dstlen, int one));
-char_u *home_replace_save __ARGS((buf_T *buf, char_u *src));
-int fullpathcmp __ARGS((char_u *s1, char_u *s2, int checkname));
-char_u *gettail __ARGS((char_u *fname));
-char_u *gettail_sep __ARGS((char_u *fname));
-char_u *getnextcomp __ARGS((char_u *fname));
-char_u *get_past_head __ARGS((char_u *path));
-int vim_ispathsep __ARGS((int c));
-int vim_ispathlistsep __ARGS((int c));
-int dir_of_file_exists __ARGS((char_u *fname));
-int vim_fnamecmp __ARGS((char_u *x, char_u *y));
-int vim_fnamencmp __ARGS((char_u *x, char_u *y, size_t len));
-char_u *concat_fnames __ARGS((char_u *fname1, char_u *fname2, int sep));
-char_u *concat_str __ARGS((char_u *str1, char_u *str2));
-void add_pathsep __ARGS((char_u *p));
-char_u *FullName_save __ARGS((char_u *fname, int force));
-pos_T *find_start_comment __ARGS((int ind_maxcomment));
-void do_c_expr_indent __ARGS((void));
-int cin_islabel __ARGS((int ind_maxcomment));
-int cin_iscase __ARGS((char_u *s));
-int cin_isscopedecl __ARGS((char_u *s));
-int get_c_indent __ARGS((void));
-int get_expr_indent __ARGS((void));
-int get_lisp_indent __ARGS((void));
-void prepare_to_exit __ARGS((void));
-void preserve_exit __ARGS((void));
-int vim_fexists __ARGS((char_u *fname));
-void line_breakcheck __ARGS((void));
-void fast_breakcheck __ARGS((void));
-int expand_wildcards __ARGS((int num_pat, char_u **pat, int *num_file, char_u ***file, int flags));
-int match_suffix __ARGS((char_u *fname));
-int unix_expandpath __ARGS((garray_T *gap, char_u *path, int wildoff, int flags, int didstar));
-int gen_expand_wildcards __ARGS((int num_pat, char_u **pat, int *num_file, char_u ***file, int flags));
-void addfile __ARGS((garray_T *gap, char_u *f, int flags));
-char_u *get_cmd_output __ARGS((char_u *cmd, char_u *infile, int flags));
-void FreeWild __ARGS((int count, char_u **files));
-int goto_im __ARGS((void));
+extern int get_indent __ARGS((void));
+extern int get_indent_lnum __ARGS((linenr_T lnum));
+extern int get_indent_buf __ARGS((buf_T *buf, linenr_T lnum));
+extern int get_indent_str __ARGS((char_u *ptr, int ts));
+extern int set_indent __ARGS((int size, int flags));
+extern int get_number_indent __ARGS((linenr_T lnum));
+extern int open_line __ARGS((int dir, int flags, int old_indent));
+extern int get_leader_len __ARGS((char_u *line, char_u **flags, int backward));
+extern int plines __ARGS((linenr_T lnum));
+extern int plines_win __ARGS((win_T *wp, linenr_T lnum, int winheight));
+extern int plines_nofill __ARGS((linenr_T lnum));
+extern int plines_win_nofill __ARGS((win_T *wp, linenr_T lnum, int winheight));
+extern int plines_win_nofold __ARGS((win_T *wp, linenr_T lnum));
+extern int plines_win_col __ARGS((win_T *wp, linenr_T lnum, long column));
+extern int plines_m_win __ARGS((win_T *wp, linenr_T first, linenr_T last));
+extern void ins_bytes __ARGS((char_u *p));
+extern void ins_bytes_len __ARGS((char_u *p, int len));
+extern void ins_char __ARGS((int c));
+extern void ins_char_bytes __ARGS((char_u *buf, int charlen));
+extern void ins_str __ARGS((char_u *s));
+extern int del_char __ARGS((int fixpos));
+extern int del_chars __ARGS((long count, int fixpos));
+extern int del_bytes __ARGS((long count, int fixpos_arg, int use_delcombine));
+extern int truncate_line __ARGS((int fixpos));
+extern void del_lines __ARGS((long nlines, int undo));
+extern int gchar_pos __ARGS((pos_T *pos));
+extern int gchar_cursor __ARGS((void));
+extern void pchar_cursor __ARGS((int c));
+extern int inindent __ARGS((int extra));
+extern char_u *skip_to_option_part __ARGS((char_u *p));
+extern void changed __ARGS((void));
+extern void changed_bytes __ARGS((linenr_T lnum, colnr_T col));
+extern void appended_lines __ARGS((linenr_T lnum, long count));
+extern void appended_lines_mark __ARGS((linenr_T lnum, long count));
+extern void deleted_lines __ARGS((linenr_T lnum, long count));
+extern void deleted_lines_mark __ARGS((linenr_T lnum, long count));
+extern void changed_lines __ARGS((linenr_T lnum, colnr_T col, linenr_T lnume, long xtra));
+extern void unchanged __ARGS((buf_T *buf, int ff));
+extern void check_status __ARGS((buf_T *buf));
+extern void change_warning __ARGS((int col));
+extern int ask_yesno __ARGS((char_u *str, int direct));
+extern int get_keystroke __ARGS((void));
+extern int get_number __ARGS((int colon, int *mouse_used));
+extern int prompt_for_number __ARGS((int *mouse_used));
+extern void msgmore __ARGS((long n));
+extern void beep_flush __ARGS((void));
+extern void vim_beep __ARGS((void));
+extern void init_homedir __ARGS((void));
+extern void free_homedir __ARGS((void));
+extern void expand_env __ARGS((char_u *src, char_u *dst, int dstlen));
+extern void expand_env_esc __ARGS((char_u *srcp, char_u *dst, int dstlen, int esc, char_u *startstr));
+extern char_u *vim_getenv __ARGS((char_u *name, int *mustfree));
+extern char_u *expand_env_save __ARGS((char_u *src));
+extern void vim_setenv __ARGS((char_u *name, char_u *val));
+extern char_u *get_env_name __ARGS((expand_T *xp, int idx));
+extern void home_replace __ARGS((buf_T *buf, char_u *src, char_u *dst, int dstlen, int one));
+extern char_u *home_replace_save __ARGS((buf_T *buf, char_u *src));
+extern int fullpathcmp __ARGS((char_u *s1, char_u *s2, int checkname));
+extern char_u *gettail __ARGS((char_u *fname));
+extern char_u *gettail_sep __ARGS((char_u *fname));
+extern char_u *getnextcomp __ARGS((char_u *fname));
+extern char_u *get_past_head __ARGS((char_u *path));
+extern int vim_ispathsep __ARGS((int c));
+extern int vim_ispathlistsep __ARGS((int c));
+extern int dir_of_file_exists __ARGS((char_u *fname));
+extern int vim_fnamecmp __ARGS((char_u *x, char_u *y));
+extern int vim_fnamencmp __ARGS((char_u *x, char_u *y, size_t len));
+extern char_u *concat_fnames __ARGS((char_u *fname1, char_u *fname2, int sep));
+extern char_u *concat_str __ARGS((char_u *str1, char_u *str2));
+extern void add_pathsep __ARGS((char_u *p));
+extern char_u *FullName_save __ARGS((char_u *fname, int force));
+extern pos_T *find_start_comment __ARGS((int ind_maxcomment));
+extern void do_c_expr_indent __ARGS((void));
+extern int cin_islabel __ARGS((int ind_maxcomment));
+extern int cin_iscase __ARGS((char_u *s));
+extern int cin_isscopedecl __ARGS((char_u *s));
+extern int get_c_indent __ARGS((void));
+extern int get_expr_indent __ARGS((void));
+extern int get_lisp_indent __ARGS((void));
+extern void prepare_to_exit __ARGS((void));
+extern void preserve_exit __ARGS((void));
+extern int vim_fexists __ARGS((char_u *fname));
+extern void line_breakcheck __ARGS((void));
+extern void fast_breakcheck __ARGS((void));
+extern int expand_wildcards __ARGS((int num_pat, char_u **pat, int *num_file, char_u ***file, int flags));
+extern int match_suffix __ARGS((char_u *fname));
+extern int unix_expandpath __ARGS((garray_T *gap, char_u *path, int wildoff, int flags, int didstar));
+extern int gen_expand_wildcards __ARGS((int num_pat, char_u **pat, int *num_file, char_u ***file, int flags));
+extern void addfile __ARGS((garray_T *gap, char_u *f, int flags));
+extern char_u *get_cmd_output __ARGS((char_u *cmd, char_u *infile, int flags));
+extern void FreeWild __ARGS((int count, char_u **files));
+extern int goto_im __ARGS((void));
 /* vim: set ft=c : */
diff --git a/src/proto/misc2.pro b/src/proto/misc2.pro
index 22415d9..adee787 100644
--- a/src/proto/misc2.pro
+++ b/src/proto/misc2.pro
@@ -1,99 +1,99 @@
 /* misc2.c */
-int virtual_active __ARGS((void));
-int getviscol __ARGS((void));
-int getviscol2 __ARGS((colnr_T col, colnr_T coladd));
-int coladvance_force __ARGS((colnr_T wcol));
-int coladvance __ARGS((colnr_T wcol));
-int getvpos __ARGS((pos_T *pos, colnr_T wcol));
-int inc_cursor __ARGS((void));
-int inc __ARGS((pos_T *lp));
-int incl __ARGS((pos_T *lp));
-int dec_cursor __ARGS((void));
-int dec __ARGS((pos_T *lp));
-int decl __ARGS((pos_T *lp));
-void check_cursor_lnum __ARGS((void));
-void check_cursor_col __ARGS((void));
-void check_cursor __ARGS((void));
-void adjust_cursor_col __ARGS((void));
-int leftcol_changed __ARGS((void));
-void vim_mem_profile_dump __ARGS((void));
-char_u *alloc __ARGS((unsigned size));
-char_u *alloc_clear __ARGS((unsigned size));
-char_u *alloc_check __ARGS((unsigned size));
-char_u *lalloc_clear __ARGS((long_u size, int message));
-char_u *lalloc __ARGS((long_u size, int message));
-void *mem_realloc __ARGS((void *ptr, size_t size));
-void do_outofmem_msg __ARGS((long_u size));
-void free_all_mem __ARGS((void));
-char_u *vim_strsave __ARGS((char_u *string));
-char_u *vim_strnsave __ARGS((char_u *string, int len));
-char_u *vim_strsave_escaped __ARGS((char_u *string, char_u *esc_chars));
-char_u *vim_strsave_escaped_ext __ARGS((char_u *string, char_u *esc_chars, int cc, int bsl));
-char_u *vim_strsave_up __ARGS((char_u *string));
-char_u *vim_strnsave_up __ARGS((char_u *string, int len));
-void vim_strup __ARGS((char_u *p));
-char_u *strup_save __ARGS((char_u *orig));
-void copy_spaces __ARGS((char_u *ptr, size_t count));
-void copy_chars __ARGS((char_u *ptr, size_t count, int c));
-void del_trailing_spaces __ARGS((char_u *ptr));
-void vim_strncpy __ARGS((char_u *to, char_u *from, size_t len));
-int copy_option_part __ARGS((char_u **option, char_u *buf, int maxlen, char *sep_chars));
-void vim_free __ARGS((void *x));
-int vim_stricmp __ARGS((char *s1, char *s2));
-int vim_strnicmp __ARGS((char *s1, char *s2, size_t len));
-char_u *vim_strchr __ARGS((char_u *string, int c));
-char_u *vim_strbyte __ARGS((char_u *string, int c));
-char_u *vim_strrchr __ARGS((char_u *string, int c));
-int vim_isspace __ARGS((int x));
-void ga_clear __ARGS((garray_T *gap));
-void ga_clear_strings __ARGS((garray_T *gap));
-void ga_init __ARGS((garray_T *gap));
-void ga_init2 __ARGS((garray_T *gap, int itemsize, int growsize));
-int ga_grow __ARGS((garray_T *gap, int n));
-void ga_concat __ARGS((garray_T *gap, char_u *s));
-void ga_append __ARGS((garray_T *gap, int c));
-int name_to_mod_mask __ARGS((int c));
-int simplify_key __ARGS((int key, int *modifiers));
-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 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));
-char_u *get_key_name __ARGS((int i));
-int get_mouse_button __ARGS((int code, int *is_click, int *is_drag));
-int get_pseudo_mouse_code __ARGS((int button, int is_click, int is_drag));
-int get_fileformat __ARGS((buf_T *buf));
-int get_fileformat_force __ARGS((buf_T *buf, exarg_T *eap));
-void set_fileformat __ARGS((int t, int opt_flags));
-int default_fileformat __ARGS((void));
-int call_shell __ARGS((char_u *cmd, int opt));
-int get_real_state __ARGS((void));
-int after_pathsep __ARGS((char_u *b, char_u *p));
-int same_directory __ARGS((char_u *f1, char_u *f2));
-int vim_chdirfile __ARGS((char_u *fname));
-int illegal_slash __ARGS((char *name));
-char_u *parse_shape_opt __ARGS((int what));
-int get_shape_idx __ARGS((int mouse));
-void update_mouseshape __ARGS((int shape_idx));
-int decrypt_byte __ARGS((void));
-int update_keys __ARGS((int c));
-void crypt_init_keys __ARGS((char_u *passwd));
-char_u *get_crypt_key __ARGS((int store, int twice));
-void *vim_findfile_init __ARGS((char_u *path, char_u *filename, char_u *stopdirs, int level, int free_visited, int need_dir, void *search_ctx, int tagfile, char_u *rel_fname));
-char_u *vim_findfile_stopdir __ARGS((char_u *buf));
-void vim_findfile_cleanup __ARGS((void *ctx));
-char_u *vim_findfile __ARGS((void *search_ctx));
-void vim_findfile_free_visited __ARGS((void *search_ctx));
-char_u *find_file_in_path __ARGS((char_u *ptr, int len, int options, int first, char_u *rel_fname));
-char_u *find_directory_in_path __ARGS((char_u *ptr, int len, int options, char_u *rel_fname));
-char_u *find_file_in_path_option __ARGS((char_u *ptr, int len, int options, int first, char_u *path_option, int need_dir, char_u *rel_fname, char_u *suffixes));
-int vim_chdir __ARGS((char_u *new_dir));
-int get_user_name __ARGS((char_u *buf, int len));
-void sort_strings __ARGS((char_u **files, int count));
-int pathcmp __ARGS((const char *p, const char *q, int maxlen));
-int filewritable __ARGS((char_u *fname));
-int emsg3 __ARGS((char_u *s, char_u *a1, char_u *a2));
-int emsgn __ARGS((char_u *s, long n));
+extern int virtual_active __ARGS((void));
+extern int getviscol __ARGS((void));
+extern int getviscol2 __ARGS((colnr_T col, colnr_T coladd));
+extern int coladvance_force __ARGS((colnr_T wcol));
+extern int coladvance __ARGS((colnr_T wcol));
+extern int getvpos __ARGS((pos_T *pos, colnr_T wcol));
+extern int inc_cursor __ARGS((void));
+extern int inc __ARGS((pos_T *lp));
+extern int incl __ARGS((pos_T *lp));
+extern int dec_cursor __ARGS((void));
+extern int dec __ARGS((pos_T *lp));
+extern int decl __ARGS((pos_T *lp));
+extern void check_cursor_lnum __ARGS((void));
+extern void check_cursor_col __ARGS((void));
+extern void check_cursor __ARGS((void));
+extern void adjust_cursor_col __ARGS((void));
+extern int leftcol_changed __ARGS((void));
+extern void vim_mem_profile_dump __ARGS((void));
+extern char_u *alloc __ARGS((unsigned size));
+extern char_u *alloc_clear __ARGS((unsigned size));
+extern char_u *alloc_check __ARGS((unsigned size));
+extern char_u *lalloc_clear __ARGS((long_u size, int message));
+extern char_u *lalloc __ARGS((long_u size, int message));
+extern void *mem_realloc __ARGS((void *ptr, size_t size));
+extern void do_outofmem_msg __ARGS((long_u size));
+extern void free_all_mem __ARGS((void));
+extern char_u *vim_strsave __ARGS((char_u *string));
+extern char_u *vim_strnsave __ARGS((char_u *string, int len));
+extern char_u *vim_strsave_escaped __ARGS((char_u *string, char_u *esc_chars));
+extern char_u *vim_strsave_escaped_ext __ARGS((char_u *string, char_u *esc_chars, int cc, int bsl));
+extern char_u *vim_strsave_up __ARGS((char_u *string));
+extern char_u *vim_strnsave_up __ARGS((char_u *string, int len));
+extern void vim_strup __ARGS((char_u *p));
+extern char_u *strup_save __ARGS((char_u *orig));
+extern void copy_spaces __ARGS((char_u *ptr, size_t count));
+extern void copy_chars __ARGS((char_u *ptr, size_t count, int c));
+extern void del_trailing_spaces __ARGS((char_u *ptr));
+extern void vim_strncpy __ARGS((char_u *to, char_u *from, size_t len));
+extern int copy_option_part __ARGS((char_u **option, char_u *buf, int maxlen, char *sep_chars));
+extern void vim_free __ARGS((void *x));
+extern int vim_stricmp __ARGS((char *s1, char *s2));
+extern int vim_strnicmp __ARGS((char *s1, char *s2, size_t len));
+extern char_u *vim_strchr __ARGS((char_u *string, int c));
+extern char_u *vim_strbyte __ARGS((char_u *string, int c));
+extern char_u *vim_strrchr __ARGS((char_u *string, int c));
+extern int vim_isspace __ARGS((int x));
+extern void ga_clear __ARGS((garray_T *gap));
+extern void ga_clear_strings __ARGS((garray_T *gap));
+extern void ga_init __ARGS((garray_T *gap));
+extern void ga_init2 __ARGS((garray_T *gap, int itemsize, int growsize));
+extern int ga_grow __ARGS((garray_T *gap, int n));
+extern void ga_concat __ARGS((garray_T *gap, char_u *s));
+extern void ga_append __ARGS((garray_T *gap, int c));
+extern int name_to_mod_mask __ARGS((int c));
+extern int simplify_key __ARGS((int key, int *modifiers));
+extern int handle_x_keys __ARGS((int key));
+extern char_u *get_special_key_name __ARGS((int c, int modifiers));
+extern int trans_special __ARGS((char_u **srcp, char_u *dst, int keycode));
+extern int find_special_key __ARGS((char_u **srcp, int *modp, int keycode));
+extern int extract_modifiers __ARGS((int key, int *modp));
+extern int find_special_key_in_table __ARGS((int c));
+extern int get_special_key_code __ARGS((char_u *name));
+extern char_u *get_key_name __ARGS((int i));
+extern int get_mouse_button __ARGS((int code, int *is_click, int *is_drag));
+extern int get_pseudo_mouse_code __ARGS((int button, int is_click, int is_drag));
+extern int get_fileformat __ARGS((buf_T *buf));
+extern int get_fileformat_force __ARGS((buf_T *buf, exarg_T *eap));
+extern void set_fileformat __ARGS((int t, int opt_flags));
+extern int default_fileformat __ARGS((void));
+extern int call_shell __ARGS((char_u *cmd, int opt));
+extern int get_real_state __ARGS((void));
+extern int after_pathsep __ARGS((char_u *b, char_u *p));
+extern int same_directory __ARGS((char_u *f1, char_u *f2));
+extern int vim_chdirfile __ARGS((char_u *fname));
+extern int illegal_slash __ARGS((char *name));
+extern char_u *parse_shape_opt __ARGS((int what));
+extern int get_shape_idx __ARGS((int mouse));
+extern void update_mouseshape __ARGS((int shape_idx));
+extern int decrypt_byte __ARGS((void));
+extern int update_keys __ARGS((int c));
+extern void crypt_init_keys __ARGS((char_u *passwd));
+extern char_u *get_crypt_key __ARGS((int store, int twice));
+extern void *vim_findfile_init __ARGS((char_u *path, char_u *filename, char_u *stopdirs, int level, int free_visited, int need_dir, void *search_ctx, int tagfile, char_u *rel_fname));
+extern char_u *vim_findfile_stopdir __ARGS((char_u *buf));
+extern void vim_findfile_cleanup __ARGS((void *ctx));
+extern char_u *vim_findfile __ARGS((void *search_ctx));
+extern void vim_findfile_free_visited __ARGS((void *search_ctx));
+extern char_u *find_file_in_path __ARGS((char_u *ptr, int len, int options, int first, char_u *rel_fname));
+extern char_u *find_directory_in_path __ARGS((char_u *ptr, int len, int options, char_u *rel_fname));
+extern char_u *find_file_in_path_option __ARGS((char_u *ptr, int len, int options, int first, char_u *path_option, int need_dir, char_u *rel_fname, char_u *suffixes));
+extern int vim_chdir __ARGS((char_u *new_dir));
+extern int get_user_name __ARGS((char_u *buf, int len));
+extern void sort_strings __ARGS((char_u **files, int count));
+extern int pathcmp __ARGS((const char *p, const char *q, int maxlen));
+extern int filewritable __ARGS((char_u *fname));
+extern int emsg3 __ARGS((char_u *s, char_u *a1, char_u *a2));
+extern int emsgn __ARGS((char_u *s, long n));
 /* vim: set ft=c : */
diff --git a/src/proto/move.pro b/src/proto/move.pro
index de51aa2..26f3b65 100644
--- a/src/proto/move.pro
+++ b/src/proto/move.pro
@@ -1,40 +1,40 @@
 /* move.c */
-void update_topline_redraw __ARGS((void));
-void update_topline __ARGS((void));
-void update_curswant __ARGS((void));
-void check_cursor_moved __ARGS((win_T *wp));
-void changed_window_setting __ARGS((void));
-void changed_window_setting_win __ARGS((win_T *wp));
-void set_topline __ARGS((win_T *wp, linenr_T lnum));
-void changed_cline_bef_curs __ARGS((void));
-void changed_cline_bef_curs_win __ARGS((win_T *wp));
-void changed_line_abv_curs __ARGS((void));
-void changed_line_abv_curs_win __ARGS((win_T *wp));
-void validate_botline __ARGS((void));
-void invalidate_botline __ARGS((void));
-void invalidate_botline_win __ARGS((win_T *wp));
-void approximate_botline_win __ARGS((win_T *wp));
-int cursor_valid __ARGS((void));
-void validate_cursor __ARGS((void));
-void validate_cline_row __ARGS((void));
-void validate_virtcol __ARGS((void));
-void validate_virtcol_win __ARGS((win_T *wp));
-void validate_cursor_col __ARGS((void));
-int win_col_off __ARGS((win_T *wp));
-int curwin_col_off __ARGS((void));
-int win_col_off2 __ARGS((win_T *wp));
-int curwin_col_off2 __ARGS((void));
-void curs_columns __ARGS((int scroll));
-void scrolldown __ARGS((long line_count, int byfold));
-void scrollup __ARGS((long line_count, int byfold));
-void check_topfill __ARGS((win_T *wp, int down));
-void scrolldown_clamp __ARGS((void));
-void scrollup_clamp __ARGS((void));
-void scroll_cursor_top __ARGS((int min_scroll, int always));
-void set_empty_rows __ARGS((win_T *wp, int used));
-void scroll_cursor_bot __ARGS((int min_scroll, int set_topbot));
-void scroll_cursor_halfway __ARGS((int atend));
-void cursor_correct __ARGS((void));
-int onepage __ARGS((int dir, long count));
-void halfpage __ARGS((int flag, linenr_T Prenum));
+extern void update_topline_redraw __ARGS((void));
+extern void update_topline __ARGS((void));
+extern void update_curswant __ARGS((void));
+extern void check_cursor_moved __ARGS((win_T *wp));
+extern void changed_window_setting __ARGS((void));
+extern void changed_window_setting_win __ARGS((win_T *wp));
+extern void set_topline __ARGS((win_T *wp, linenr_T lnum));
+extern void changed_cline_bef_curs __ARGS((void));
+extern void changed_cline_bef_curs_win __ARGS((win_T *wp));
+extern void changed_line_abv_curs __ARGS((void));
+extern void changed_line_abv_curs_win __ARGS((win_T *wp));
+extern void validate_botline __ARGS((void));
+extern void invalidate_botline __ARGS((void));
+extern void invalidate_botline_win __ARGS((win_T *wp));
+extern void approximate_botline_win __ARGS((win_T *wp));
+extern int cursor_valid __ARGS((void));
+extern void validate_cursor __ARGS((void));
+extern void validate_cline_row __ARGS((void));
+extern void validate_virtcol __ARGS((void));
+extern void validate_virtcol_win __ARGS((win_T *wp));
+extern void validate_cursor_col __ARGS((void));
+extern int win_col_off __ARGS((win_T *wp));
+extern int curwin_col_off __ARGS((void));
+extern int win_col_off2 __ARGS((win_T *wp));
+extern int curwin_col_off2 __ARGS((void));
+extern void curs_columns __ARGS((int scroll));
+extern void scrolldown __ARGS((long line_count, int byfold));
+extern void scrollup __ARGS((long line_count, int byfold));
+extern void check_topfill __ARGS((win_T *wp, int down));
+extern void scrolldown_clamp __ARGS((void));
+extern void scrollup_clamp __ARGS((void));
+extern void scroll_cursor_top __ARGS((int min_scroll, int always));
+extern void set_empty_rows __ARGS((win_T *wp, int used));
+extern void scroll_cursor_bot __ARGS((int min_scroll, int set_topbot));
+extern void scroll_cursor_halfway __ARGS((int atend));
+extern void cursor_correct __ARGS((void));
+extern int onepage __ARGS((int dir, long count));
+extern void halfpage __ARGS((int flag, linenr_T Prenum));
 /* vim: set ft=c : */
diff --git a/src/proto/os_msdos.pro b/src/proto/os_msdos.pro
index a867f3d..5cccbd6 100644
--- a/src/proto/os_msdos.pro
+++ b/src/proto/os_msdos.pro
@@ -1,48 +1,48 @@
 /* os_msdos.c */
-void mch_set_normal_colors __ARGS((void));
-void mch_update_cursor __ARGS((void));
-long_u mch_avail_mem __ARGS((int special));
-void mch_delay __ARGS((long msec, int ignoreinput));
-void mch_write __ARGS((char_u *s, int len));
-int mch_inchar __ARGS((char_u *buf, int maxlen, long time, int tb_change_cnt));
-int mch_char_avail __ARGS((void));
-void mch_suspend __ARGS((void));
-void mch_init __ARGS((void));
-int mch_check_win __ARGS((int argc, char **argv));
-int mch_input_isatty __ARGS((void));
-void fname_case __ARGS((char_u *name, int len));
-long mch_get_pid __ARGS((void));
-int mch_FullName __ARGS((char_u *fname, char_u *buf, int len, int force));
-void slash_adjust __ARGS((char_u *p));
-int mch_isFullName __ARGS((char_u *fname));
-void mch_early_init __ARGS((void));
-void mch_exit __ARGS((int r));
-void mch_settmode __ARGS((int tmode));
-void mch_setmouse __ARGS((int on));
-int mch_screenmode __ARGS((char_u *arg));
-int mch_get_shellsize __ARGS((void));
-void mch_set_shellsize __ARGS((void));
-void mch_new_shellsize __ARGS((void));
-void mch_check_columns __ARGS((void));
-int mch_call_shell __ARGS((char_u *cmd, int options));
-void mch_breakcheck __ARGS((void));
-int mch_has_exp_wildcard __ARGS((char_u *p));
-int mch_has_wildcard __ARGS((char_u *p));
-int mch_chdir __ARGS((char *path));
-char *djgpp_setlocale __ARGS((void));
-int clip_mch_own_selection __ARGS((VimClipboard *cbd));
-void clip_mch_lose_selection __ARGS((VimClipboard *cbd));
-void clip_mch_request_selection __ARGS((VimClipboard *cbd));
-void clip_mch_set_selection __ARGS((VimClipboard *cbd));
-long mch_getperm __ARGS((char_u *name));
-int mch_setperm __ARGS((char_u *name, long perm));
-void mch_hide __ARGS((char_u *name));
-int mch_isdir __ARGS((char_u *name));
-int mch_can_exe __ARGS((char_u *name));
-int mch_nodetype __ARGS((char_u *name));
-int mch_dirname __ARGS((char_u *buf, int len));
-int mch_remove __ARGS((char_u *name));
-char_u *mch_getenv __ARGS((char_u *name));
-int mch_get_user_name __ARGS((char_u *s, int len));
-void mch_get_host_name __ARGS((char_u *s, int len));
+extern void mch_set_normal_colors __ARGS((void));
+extern void mch_update_cursor __ARGS((void));
+extern long_u mch_avail_mem __ARGS((int special));
+extern void mch_delay __ARGS((long msec, int ignoreinput));
+extern void mch_write __ARGS((char_u *s, int len));
+extern int mch_inchar __ARGS((char_u *buf, int maxlen, long time, int tb_change_cnt));
+extern int mch_char_avail __ARGS((void));
+extern void mch_suspend __ARGS((void));
+extern void mch_init __ARGS((void));
+extern int mch_check_win __ARGS((int argc, char **argv));
+extern int mch_input_isatty __ARGS((void));
+extern void fname_case __ARGS((char_u *name, int len));
+extern long mch_get_pid __ARGS((void));
+extern int mch_FullName __ARGS((char_u *fname, char_u *buf, int len, int force));
+extern void slash_adjust __ARGS((char_u *p));
+extern int mch_isFullName __ARGS((char_u *fname));
+extern void mch_early_init __ARGS((void));
+extern void mch_exit __ARGS((int r));
+extern void mch_settmode __ARGS((int tmode));
+extern void mch_setmouse __ARGS((int on));
+extern int mch_screenmode __ARGS((char_u *arg));
+extern int mch_get_shellsize __ARGS((void));
+extern void mch_set_shellsize __ARGS((void));
+extern void mch_new_shellsize __ARGS((void));
+extern void mch_check_columns __ARGS((void));
+extern int mch_call_shell __ARGS((char_u *cmd, int options));
+extern void mch_breakcheck __ARGS((void));
+extern int mch_has_exp_wildcard __ARGS((char_u *p));
+extern int mch_has_wildcard __ARGS((char_u *p));
+extern int mch_chdir __ARGS((char *path));
+extern char *djgpp_setlocale __ARGS((void));
+extern int clip_mch_own_selection __ARGS((VimClipboard *cbd));
+extern void clip_mch_lose_selection __ARGS((VimClipboard *cbd));
+extern void clip_mch_request_selection __ARGS((VimClipboard *cbd));
+extern void clip_mch_set_selection __ARGS((VimClipboard *cbd));
+extern long mch_getperm __ARGS((char_u *name));
+extern int mch_setperm __ARGS((char_u *name, long perm));
+extern void mch_hide __ARGS((char_u *name));
+extern int mch_isdir __ARGS((char_u *name));
+extern int mch_can_exe __ARGS((char_u *name));
+extern int mch_nodetype __ARGS((char_u *name));
+extern int mch_dirname __ARGS((char_u *buf, int len));
+extern int mch_remove __ARGS((char_u *name));
+extern char_u *mch_getenv __ARGS((char_u *name));
+extern int mch_get_user_name __ARGS((char_u *s, int len));
+extern void mch_get_host_name __ARGS((char_u *s, int len));
 /* vim: set ft=c : */
diff --git a/src/proto/os_win32.pro b/src/proto/os_win32.pro
index 179dd5e..22e0380 100644
--- a/src/proto/os_win32.pro
+++ b/src/proto/os_win32.pro
@@ -1,54 +1,54 @@
 /* os_win32.c */
-int dyn_libintl_init __ARGS((char *libname));
-void dyn_libintl_end __ARGS((void));
-void PlatformId __ARGS((void));
-int mch_windows95 __ARGS((void));
-void mch_setmouse __ARGS((int on));
-void mch_update_cursor __ARGS((void));
-int mch_char_avail __ARGS((void));
-int mch_inchar __ARGS((char_u *buf, int maxlen, long time, int tb_change_cnt));
-void mch_init __ARGS((void));
-void mch_exit __ARGS((int r));
-int mch_check_win __ARGS((int argc, char **argv));
-void fname_case __ARGS((char_u *name, int len));
-int mch_get_user_name __ARGS((char_u *s, int len));
-void mch_get_host_name __ARGS((char_u *s, int len));
-long mch_get_pid __ARGS((void));
-int mch_dirname __ARGS((char_u *buf, int len));
-long mch_getperm __ARGS((char_u *name));
-int mch_setperm __ARGS((char_u *name, long perm));
-void mch_hide __ARGS((char_u *name));
-int mch_isdir __ARGS((char_u *name));
-int mch_is_linked __ARGS((char_u *fname));
-int mch_writable __ARGS((char_u *name));
-int mch_can_exe __ARGS((char_u *name));
-int mch_nodetype __ARGS((char_u *name));
-vim_acl_T mch_get_acl __ARGS((char_u *fname));
-void mch_set_acl __ARGS((char_u *fname, vim_acl_T acl));
-void mch_free_acl __ARGS((vim_acl_T acl));
-void mch_settmode __ARGS((int tmode));
-int mch_get_shellsize __ARGS((void));
-void mch_set_shellsize __ARGS((void));
-void mch_new_shellsize __ARGS((void));
-void mch_set_winsize_now __ARGS((void));
-int mch_call_shell __ARGS((char_u *cmd, int options));
-void mch_set_normal_colors __ARGS((void));
-void mch_write __ARGS((char_u *s, int len));
-void mch_delay __ARGS((long msec, int ignoreinput));
-int mch_remove __ARGS((char_u *name));
-void mch_breakcheck __ARGS((void));
-long_u mch_avail_mem __ARGS((int special));
-int mch_wrename __ARGS((WCHAR *wold, WCHAR *wnew));
-int mch_rename __ARGS((const char *pszOldFile, const char *pszNewFile));
-char *default_shell __ARGS((void));
-int mch_access __ARGS((char *n, int p));
-int mch_open __ARGS((char *name, int flags, int mode));
-FILE *mch_fopen __ARGS((char *name, char *mode));
-int mch_copy_file_attribute __ARGS((char_u *from, char_u *to));
-int myresetstkoflw __ARGS((void));
-int get_cmd_argsW __ARGS((char ***argvp));
-void free_cmd_argsW __ARGS((void));
-void used_file_arg __ARGS((char *name, int literal, int full_path));
-void set_alist_count __ARGS((void));
-void fix_arg_enc __ARGS((void));
+extern int dyn_libintl_init __ARGS((char *libname));
+extern void dyn_libintl_end __ARGS((void));
+extern void PlatformId __ARGS((void));
+extern int mch_windows95 __ARGS((void));
+extern void mch_setmouse __ARGS((int on));
+extern void mch_update_cursor __ARGS((void));
+extern int mch_char_avail __ARGS((void));
+extern int mch_inchar __ARGS((char_u *buf, int maxlen, long time, int tb_change_cnt));
+extern void mch_init __ARGS((void));
+extern void mch_exit __ARGS((int r));
+extern int mch_check_win __ARGS((int argc, char **argv));
+extern void fname_case __ARGS((char_u *name, int len));
+extern int mch_get_user_name __ARGS((char_u *s, int len));
+extern void mch_get_host_name __ARGS((char_u *s, int len));
+extern long mch_get_pid __ARGS((void));
+extern int mch_dirname __ARGS((char_u *buf, int len));
+extern long mch_getperm __ARGS((char_u *name));
+extern int mch_setperm __ARGS((char_u *name, long perm));
+extern void mch_hide __ARGS((char_u *name));
+extern int mch_isdir __ARGS((char_u *name));
+extern int mch_is_linked __ARGS((char_u *fname));
+extern int mch_writable __ARGS((char_u *name));
+extern int mch_can_exe __ARGS((char_u *name));
+extern int mch_nodetype __ARGS((char_u *name));
+extern vim_acl_T mch_get_acl __ARGS((char_u *fname));
+extern void mch_set_acl __ARGS((char_u *fname, vim_acl_T acl));
+extern void mch_free_acl __ARGS((vim_acl_T acl));
+extern void mch_settmode __ARGS((int tmode));
+extern int mch_get_shellsize __ARGS((void));
+extern void mch_set_shellsize __ARGS((void));
+extern void mch_new_shellsize __ARGS((void));
+extern void mch_set_winsize_now __ARGS((void));
+extern int mch_call_shell __ARGS((char_u *cmd, int options));
+extern void mch_set_normal_colors __ARGS((void));
+extern void mch_write __ARGS((char_u *s, int len));
+extern void mch_delay __ARGS((long msec, int ignoreinput));
+extern int mch_remove __ARGS((char_u *name));
+extern void mch_breakcheck __ARGS((void));
+extern long_u mch_avail_mem __ARGS((int special));
+extern int mch_wrename __ARGS((WCHAR *wold, WCHAR *wnew));
+extern int mch_rename __ARGS((const char *pszOldFile, const char *pszNewFile));
+extern char *default_shell __ARGS((void));
+extern int mch_access __ARGS((char *n, int p));
+extern int mch_open __ARGS((char *name, int flags, int mode));
+extern FILE *mch_fopen __ARGS((char *name, char *mode));
+extern int mch_copy_file_attribute __ARGS((char_u *from, char_u *to));
+extern int myresetstkoflw __ARGS((void));
+extern int get_cmd_argsW __ARGS((char ***argvp));
+extern void free_cmd_argsW __ARGS((void));
+extern void used_file_arg __ARGS((char *name, int literal, int full_path));
+extern void set_alist_count __ARGS((void));
+extern void fix_arg_enc __ARGS((void));
 /* vim: set ft=c : */
diff --git a/src/proto/popupmenu.pro b/src/proto/popupmenu.pro
deleted file mode 100644
index f332d3c..0000000
--- a/src/proto/popupmenu.pro
+++ /dev/null
@@ -1,8 +0,0 @@
-/* popupmenu.c */
-void pum_display __ARGS((pumitem_T *array, int size, int selected));
-void pum_redraw __ARGS((void));
-void pum_undisplay __ARGS((void));
-void pum_clear __ARGS((void));
-int pum_visible __ARGS((void));
-int pum_get_height __ARGS((void));
-/* vim: set ft=c : */
diff --git a/src/proto/quickfix.pro b/src/proto/quickfix.pro
index 408bf6d..e939db2 100644
--- a/src/proto/quickfix.pro
+++ b/src/proto/quickfix.pro
@@ -1,30 +1,30 @@
 /* quickfix.c */
-int qf_init __ARGS((win_T *wp, char_u *efile, char_u *errorformat, int newlist));
-void qf_free_all __ARGS((win_T *wp));
-void copy_loclist __ARGS((win_T *from, win_T *to));
-void qf_jump __ARGS((qf_info_T *qi, int dir, int errornr, int forceit));
-void qf_list __ARGS((exarg_T *eap));
-void qf_age __ARGS((exarg_T *eap));
-void qf_mark_adjust __ARGS((win_T *wp, linenr_T line1, linenr_T line2, long amount, long amount_after));
-void ex_cwindow __ARGS((exarg_T *eap));
-void ex_cclose __ARGS((exarg_T *eap));
-void ex_copen __ARGS((exarg_T *eap));
-linenr_T qf_current_entry __ARGS((win_T *wp));
-int bt_quickfix __ARGS((buf_T *buf));
-int bt_nofile __ARGS((buf_T *buf));
-int bt_dontwrite __ARGS((buf_T *buf));
-int bt_dontwrite_msg __ARGS((buf_T *buf));
-int buf_hide __ARGS((buf_T *buf));
-int grep_internal __ARGS((cmdidx_T cmdidx));
-void ex_make __ARGS((exarg_T *eap));
-void ex_cc __ARGS((exarg_T *eap));
-void ex_cnext __ARGS((exarg_T *eap));
-void ex_cfile __ARGS((exarg_T *eap));
-void ex_vimgrep __ARGS((exarg_T *eap));
-char_u *skip_vimgrep_pat __ARGS((char_u *p, char_u **s, int *flags));
-int get_errorlist __ARGS((win_T *wp, list_T *list));
-int set_errorlist __ARGS((win_T *wp, list_T *list, int action));
-void ex_cbuffer __ARGS((exarg_T *eap));
-void ex_cexpr __ARGS((exarg_T *eap));
-void ex_helpgrep __ARGS((exarg_T *eap));
+extern int qf_init __ARGS((win_T *wp, char_u *efile, char_u *errorformat, int newlist));
+extern void qf_free_all __ARGS((win_T *wp));
+extern void copy_loclist __ARGS((win_T *from, win_T *to));
+extern void qf_jump __ARGS((qf_info_T *qi, int dir, int errornr, int forceit));
+extern void qf_list __ARGS((exarg_T *eap));
+extern void qf_age __ARGS((exarg_T *eap));
+extern void qf_mark_adjust __ARGS((win_T *wp, linenr_T line1, linenr_T line2, long amount, long amount_after));
+extern void ex_cwindow __ARGS((exarg_T *eap));
+extern void ex_cclose __ARGS((exarg_T *eap));
+extern void ex_copen __ARGS((exarg_T *eap));
+extern linenr_T qf_current_entry __ARGS((win_T *wp));
+extern int bt_quickfix __ARGS((buf_T *buf));
+extern int bt_nofile __ARGS((buf_T *buf));
+extern int bt_dontwrite __ARGS((buf_T *buf));
+extern int bt_dontwrite_msg __ARGS((buf_T *buf));
+extern int buf_hide __ARGS((buf_T *buf));
+extern int grep_internal __ARGS((cmdidx_T cmdidx));
+extern void ex_make __ARGS((exarg_T *eap));
+extern void ex_cc __ARGS((exarg_T *eap));
+extern void ex_cnext __ARGS((exarg_T *eap));
+extern void ex_cfile __ARGS((exarg_T *eap));
+extern void ex_vimgrep __ARGS((exarg_T *eap));
+extern char_u *skip_vimgrep_pat __ARGS((char_u *p, char_u **s, int *flags));
+extern int get_errorlist __ARGS((win_T *wp, list_T *list));
+extern int set_errorlist __ARGS((win_T *wp, list_T *list, int action));
+extern void ex_cbuffer __ARGS((exarg_T *eap));
+extern void ex_cexpr __ARGS((exarg_T *eap));
+extern void ex_helpgrep __ARGS((exarg_T *eap));
 /* vim: set ft=c : */
diff --git a/src/proto/screen.pro b/src/proto/screen.pro
index c534a1f..2abf18b 100644
--- a/src/proto/screen.pro
+++ b/src/proto/screen.pro
@@ -1,50 +1,50 @@
 /* screen.c */
-void redraw_later __ARGS((int type));
-void redraw_win_later __ARGS((win_T *wp, int type));
-void redraw_later_clear __ARGS((void));
-void redraw_all_later __ARGS((int type));
-void redraw_curbuf_later __ARGS((int type));
-void redraw_buf_later __ARGS((buf_T *buf, int type));
-void redrawWinline __ARGS((linenr_T lnum, int invalid));
-void update_curbuf __ARGS((int type));
-void update_screen __ARGS((int type));
-void update_debug_sign __ARGS((buf_T *buf, linenr_T lnum));
-void updateWindow __ARGS((win_T *wp));
-void rl_mirror __ARGS((char_u *str));
-void status_redraw_all __ARGS((void));
-void status_redraw_curbuf __ARGS((void));
-void redraw_statuslines __ARGS((void));
-void win_redraw_last_status __ARGS((frame_T *frp));
-void win_redr_status_matches __ARGS((expand_T *xp, int num_matches, char_u **matches, int match, int showtail));
-void win_redr_status __ARGS((win_T *wp));
-int stl_connected __ARGS((win_T *wp));
-int get_keymap_str __ARGS((win_T *wp, char_u *buf, int len));
-void screen_putchar __ARGS((int c, int row, int col, int attr));
-void screen_getbytes __ARGS((int row, int col, char_u *bytes, int *attrp));
-void screen_puts __ARGS((char_u *text, int row, int col, int attr));
-void screen_puts_len __ARGS((char_u *text, int len, int row, int col, int attr));
-void screen_stop_highlight __ARGS((void));
-void reset_cterm_colors __ARGS((void));
-void screen_draw_rectangle __ARGS((int row, int col, int height, int width, int invert));
-void screen_fill __ARGS((int start_row, int end_row, int start_col, int end_col, int c1, int c2, int attr));
-void check_for_delay __ARGS((int check_msg_scroll));
-int screen_valid __ARGS((int clear));
-void screenalloc __ARGS((int clear));
-void free_screenlines __ARGS((void));
-void screenclear __ARGS((void));
-int can_clear __ARGS((char_u *p));
-void screen_start __ARGS((void));
-void windgoto __ARGS((int row, int col));
-void setcursor __ARGS((void));
-int win_ins_lines __ARGS((win_T *wp, int row, int line_count, int invalid, int mayclear));
-int win_del_lines __ARGS((win_T *wp, int row, int line_count, int invalid, int mayclear));
-int screen_ins_lines __ARGS((int off, int row, int line_count, int end, win_T *wp));
-int screen_del_lines __ARGS((int off, int row, int line_count, int end, int force, win_T *wp));
-int showmode __ARGS((void));
-void unshowmode __ARGS((int force));
-void get_trans_bufname __ARGS((buf_T *buf));
-int redrawing __ARGS((void));
-int messaging __ARGS((void));
-void showruler __ARGS((int always));
-int number_width __ARGS((win_T *wp));
+extern void redraw_later __ARGS((int type));
+extern void redraw_win_later __ARGS((win_T *wp, int type));
+extern void redraw_later_clear __ARGS((void));
+extern void redraw_all_later __ARGS((int type));
+extern void redraw_curbuf_later __ARGS((int type));
+extern void redraw_buf_later __ARGS((buf_T *buf, int type));
+extern void redrawWinline __ARGS((linenr_T lnum, int invalid));
+extern void update_curbuf __ARGS((int type));
+extern void update_screen __ARGS((int type));
+extern void update_debug_sign __ARGS((buf_T *buf, linenr_T lnum));
+extern void updateWindow __ARGS((win_T *wp));
+extern void rl_mirror __ARGS((char_u *str));
+extern void status_redraw_all __ARGS((void));
+extern void status_redraw_curbuf __ARGS((void));
+extern void redraw_statuslines __ARGS((void));
+extern void win_redraw_last_status __ARGS((frame_T *frp));
+extern void win_redr_status_matches __ARGS((expand_T *xp, int num_matches, char_u **matches, int match, int showtail));
+extern void win_redr_status __ARGS((win_T *wp));
+extern int stl_connected __ARGS((win_T *wp));
+extern int get_keymap_str __ARGS((win_T *wp, char_u *buf, int len));
+extern void screen_putchar __ARGS((int c, int row, int col, int attr));
+extern void screen_getbytes __ARGS((int row, int col, char_u *bytes, int *attrp));
+extern void screen_puts __ARGS((char_u *text, int row, int col, int attr));
+extern void screen_puts_len __ARGS((char_u *text, int len, int row, int col, int attr));
+extern void screen_stop_highlight __ARGS((void));
+extern void reset_cterm_colors __ARGS((void));
+extern void screen_draw_rectangle __ARGS((int row, int col, int height, int width, int invert));
+extern void screen_fill __ARGS((int start_row, int end_row, int start_col, int end_col, int c1, int c2, int attr));
+extern void check_for_delay __ARGS((int check_msg_scroll));
+extern int screen_valid __ARGS((int clear));
+extern void screenalloc __ARGS((int clear));
+extern void free_screenlines __ARGS((void));
+extern void screenclear __ARGS((void));
+extern int can_clear __ARGS((char_u *p));
+extern void screen_start __ARGS((void));
+extern void windgoto __ARGS((int row, int col));
+extern void setcursor __ARGS((void));
+extern int win_ins_lines __ARGS((win_T *wp, int row, int line_count, int invalid, int mayclear));
+extern int win_del_lines __ARGS((win_T *wp, int row, int line_count, int invalid, int mayclear));
+extern int screen_ins_lines __ARGS((int off, int row, int line_count, int end, win_T *wp));
+extern int screen_del_lines __ARGS((int off, int row, int line_count, int end, int force, win_T *wp));
+extern int showmode __ARGS((void));
+extern void unshowmode __ARGS((int force));
+extern void get_trans_bufname __ARGS((buf_T *buf));
+extern int redrawing __ARGS((void));
+extern int messaging __ARGS((void));
+extern void showruler __ARGS((int always));
+extern int number_width __ARGS((win_T *wp));
 /* vim: set ft=c : */
diff --git a/src/proto/search.pro b/src/proto/search.pro
index ceaca22..b4d4dc7 100644
--- a/src/proto/search.pro
+++ b/src/proto/search.pro
@@ -1,36 +1,36 @@
 /* search.c */
-int search_regcomp __ARGS((char_u *pat, int pat_save, int pat_use, int options, regmmatch_T *regmatch));
-char_u *get_search_pat __ARGS((void));
-void save_search_patterns __ARGS((void));
-void restore_search_patterns __ARGS((void));
-void free_search_patterns __ARGS((void));
-int ignorecase __ARGS((char_u *pat));
-char_u *last_search_pat __ARGS((void));
-void reset_search_dir __ARGS((void));
-void set_last_search_pat __ARGS((char_u *s, int idx, int magic, int setlast));
-void last_pat_prog __ARGS((regmmatch_T *regmatch));
-int searchit __ARGS((win_T *win, buf_T *buf, pos_T *pos, int dir, char_u *pat, long count, int options, int pat_use, linenr_T stop_lnum));
-int do_search __ARGS((oparg_T *oap, int dirc, char_u *pat, long count, int options));
-int search_for_exact_line __ARGS((buf_T *buf, pos_T *pos, int dir, char_u *pat));
-int searchc __ARGS((cmdarg_T *cap, int t_cmd));
-pos_T *findmatch __ARGS((oparg_T *oap, int initc));
-pos_T *findmatchlimit __ARGS((oparg_T *oap, int initc, int flags, int maxtravel));
-void showmatch __ARGS((int c));
-int findsent __ARGS((int dir, long count));
-int findpar __ARGS((int *pincl, int dir, long count, int what, int both));
-int startPS __ARGS((linenr_T lnum, int para, int both));
-int fwd_word __ARGS((long count, int bigword, int eol));
-int bck_word __ARGS((long count, int bigword, int stop));
-int end_word __ARGS((long count, int bigword, int stop, int empty));
-int bckend_word __ARGS((long count, int bigword, int eol));
-int current_word __ARGS((oparg_T *oap, long count, int include, int bigword));
-int current_sent __ARGS((oparg_T *oap, long count, int include));
-int current_block __ARGS((oparg_T *oap, long count, int include, int what, int other));
-int current_tagblock __ARGS((oparg_T *oap, long count_arg, int include));
-int current_par __ARGS((oparg_T *oap, long count, int include, int type));
-int current_quote __ARGS((oparg_T *oap, long count, int include, int quotechar));
-int linewhite __ARGS((linenr_T lnum));
-void find_pattern_in_path __ARGS((char_u *ptr, int dir, int len, int whole, int skip_comments, int type, long count, int action, linenr_T start_lnum, linenr_T end_lnum));
-int read_viminfo_search_pattern __ARGS((vir_T *virp, int force));
-void write_viminfo_search_pattern __ARGS((FILE *fp));
+extern int search_regcomp __ARGS((char_u *pat, int pat_save, int pat_use, int options, regmmatch_T *regmatch));
+extern char_u *get_search_pat __ARGS((void));
+extern void save_search_patterns __ARGS((void));
+extern void restore_search_patterns __ARGS((void));
+extern void free_search_patterns __ARGS((void));
+extern int ignorecase __ARGS((char_u *pat));
+extern char_u *last_search_pat __ARGS((void));
+extern void reset_search_dir __ARGS((void));
+extern void set_last_search_pat __ARGS((char_u *s, int idx, int magic, int setlast));
+extern void last_pat_prog __ARGS((regmmatch_T *regmatch));
+extern int searchit __ARGS((win_T *win, buf_T *buf, pos_T *pos, int dir, char_u *pat, long count, int options, int pat_use, linenr_T stop_lnum));
+extern int do_search __ARGS((oparg_T *oap, int dirc, char_u *pat, long count, int options));
+extern int search_for_exact_line __ARGS((buf_T *buf, pos_T *pos, int dir, char_u *pat));
+extern int searchc __ARGS((cmdarg_T *cap, int t_cmd));
+extern pos_T *findmatch __ARGS((oparg_T *oap, int initc));
+extern pos_T *findmatchlimit __ARGS((oparg_T *oap, int initc, int flags, int maxtravel));
+extern void showmatch __ARGS((int c));
+extern int findsent __ARGS((int dir, long count));
+extern int findpar __ARGS((int *pincl, int dir, long count, int what, int both));
+extern int startPS __ARGS((linenr_T lnum, int para, int both));
+extern int fwd_word __ARGS((long count, int bigword, int eol));
+extern int bck_word __ARGS((long count, int bigword, int stop));
+extern int end_word __ARGS((long count, int bigword, int stop, int empty));
+extern int bckend_word __ARGS((long count, int bigword, int eol));
+extern int current_word __ARGS((oparg_T *oap, long count, int include, int bigword));
+extern int current_sent __ARGS((oparg_T *oap, long count, int include));
+extern int current_block __ARGS((oparg_T *oap, long count, int include, int what, int other));
+extern int current_tagblock __ARGS((oparg_T *oap, long count_arg, int include));
+extern int current_par __ARGS((oparg_T *oap, long count, int include, int type));
+extern int current_quote __ARGS((oparg_T *oap, long count, int include, int quotechar));
+extern int linewhite __ARGS((linenr_T lnum));
+extern void find_pattern_in_path __ARGS((char_u *ptr, int dir, int len, int whole, int skip_comments, int type, long count, int action, linenr_T start_lnum, linenr_T end_lnum));
+extern int read_viminfo_search_pattern __ARGS((vir_T *virp, int force));
+extern void write_viminfo_search_pattern __ARGS((FILE *fp));
 /* vim: set ft=c : */
diff --git a/src/proto/spell.pro b/src/proto/spell.pro
index d94b959..d1e5ef7 100644
--- a/src/proto/spell.pro
+++ b/src/proto/spell.pro
@@ -1,26 +1,26 @@
 /* spell.c */
-int spell_check __ARGS((win_T *wp, char_u *ptr, hlf_T *attrp, int *capcol, int docount));
-int spell_move_to __ARGS((win_T *wp, int dir, int allwords, int curline, hlf_T *attrp));
-void spell_cat_line __ARGS((char_u *buf, char_u *line, int maxlen));
-char_u *did_set_spelllang __ARGS((buf_T *buf));
-void spell_free_all __ARGS((void));
-void spell_reload __ARGS((void));
-int spell_check_msm __ARGS((void));
-void put_bytes __ARGS((FILE *fd, long_u nr, int len));
-void ex_mkspell __ARGS((exarg_T *eap));
-void ex_spell __ARGS((exarg_T *eap));
-void spell_add_word __ARGS((char_u *word, int len, int bad, int index, int undo));
-void init_spell_chartab __ARGS((void));
-int spell_check_sps __ARGS((void));
-void spell_suggest __ARGS((int count));
-void ex_spellrepall __ARGS((exarg_T *eap));
-void spell_suggest_list __ARGS((garray_T *gap, char_u *word, int maxcount, int need_cap, int interactive));
-char_u *eval_soundfold __ARGS((char_u *word));
-void ex_spellinfo __ARGS((exarg_T *eap));
-void ex_spelldump __ARGS((exarg_T *eap));
-void spell_dump_compl __ARGS((buf_T *buf, char_u *pat, int ic, int *dir, int dumpflags_arg));
-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));
+extern int spell_check __ARGS((win_T *wp, char_u *ptr, hlf_T *attrp, int *capcol, int docount));
+extern int spell_move_to __ARGS((win_T *wp, int dir, int allwords, int curline, hlf_T *attrp));
+extern void spell_cat_line __ARGS((char_u *buf, char_u *line, int maxlen));
+extern char_u *did_set_spelllang __ARGS((buf_T *buf));
+extern void spell_free_all __ARGS((void));
+extern void spell_reload __ARGS((void));
+extern int spell_check_msm __ARGS((void));
+extern void put_bytes __ARGS((FILE *fd, long_u nr, int len));
+extern void ex_mkspell __ARGS((exarg_T *eap));
+extern void ex_spell __ARGS((exarg_T *eap));
+extern void spell_add_word __ARGS((char_u *word, int len, int bad, int index, int undo));
+extern void init_spell_chartab __ARGS((void));
+extern int spell_check_sps __ARGS((void));
+extern void spell_suggest __ARGS((int count));
+extern void ex_spellrepall __ARGS((exarg_T *eap));
+extern void spell_suggest_list __ARGS((garray_T *gap, char_u *word, int maxcount, int need_cap, int interactive));
+extern char_u *eval_soundfold __ARGS((char_u *word));
+extern void ex_spellinfo __ARGS((exarg_T *eap));
+extern void ex_spelldump __ARGS((exarg_T *eap));
+extern void spell_dump_compl __ARGS((buf_T *buf, char_u *pat, int ic, int *dir, int dumpflags_arg));
+extern char_u *spell_to_word_end __ARGS((char_u *start, buf_T *buf));
+extern int spell_word_start __ARGS((int startcol));
+extern void spell_expand_check_cap __ARGS((colnr_T col));
+extern int expand_spelling __ARGS((linenr_T lnum, int col, char_u *pat, char_u ***matchp));
 /* vim: set ft=c : */
diff --git a/src/proto/tag.pro b/src/proto/tag.pro
index 01388f6..9840843 100644
--- a/src/proto/tag.pro
+++ b/src/proto/tag.pro
@@ -1,12 +1,12 @@
 /* tag.c */
-int do_tag __ARGS((char_u *tag, int type, int count, int forceit, int verbose));
-void tag_freematch __ARGS((void));
-void do_tags __ARGS((exarg_T *eap));
-int find_tags __ARGS((char_u *pat, int *num_matches, char_u ***matchesp, int flags, int mincount, char_u *buf_ffname));
-void free_tag_stuff __ARGS((void));
-int get_tagfname __ARGS((tagname_T *tnp, int first, char_u *buf));
-void tagname_free __ARGS((tagname_T *tnp));
-void simplify_filename __ARGS((char_u *filename));
-int expand_tags __ARGS((int tagnames, char_u *pat, int *num_file, char_u ***file));
-int get_tags __ARGS((list_T *list, char_u *pat));
+extern int do_tag __ARGS((char_u *tag, int type, int count, int forceit, int verbose));
+extern void tag_freematch __ARGS((void));
+extern void do_tags __ARGS((exarg_T *eap));
+extern int find_tags __ARGS((char_u *pat, int *num_matches, char_u ***matchesp, int flags, int mincount, char_u *buf_ffname));
+extern void free_tag_stuff __ARGS((void));
+extern int get_tagfname __ARGS((tagname_T *tnp, int first, char_u *buf));
+extern void tagname_free __ARGS((tagname_T *tnp));
+extern void simplify_filename __ARGS((char_u *filename));
+extern int expand_tags __ARGS((int tagnames, char_u *pat, int *num_file, char_u ***file));
+extern int get_tags __ARGS((list_T *list, char_u *pat));
 /* vim: set ft=c : */
diff --git a/src/proto/term.pro b/src/proto/term.pro
index 91bb85c..7b53749 100644
--- a/src/proto/term.pro
+++ b/src/proto/term.pro
@@ -1,60 +1,60 @@
 /* term.c */
-int set_termname __ARGS((char_u *term));
-void set_mouse_termcode __ARGS((int n, char_u *s));
-void del_mouse_termcode __ARGS((int n));
-void getlinecol __ARGS((long *cp, long *rp));
-int add_termcap_entry __ARGS((char_u *name, int force));
-int term_is_8bit __ARGS((char_u *name));
-int term_is_gui __ARGS((char_u *name));
-char_u *tltoa __ARGS((unsigned long i));
-void termcapinit __ARGS((char_u *name));
-void out_flush __ARGS((void));
-void out_flush_check __ARGS((void));
-void out_trash __ARGS((void));
-void out_char __ARGS((unsigned c));
-void out_str_nf __ARGS((char_u *s));
-void out_str __ARGS((char_u *s));
-void term_windgoto __ARGS((int row, int col));
-void term_cursor_right __ARGS((int i));
-void term_append_lines __ARGS((int line_count));
-void term_delete_lines __ARGS((int line_count));
-void term_set_winpos __ARGS((int x, int y));
-void term_set_winsize __ARGS((int width, int height));
-void term_fg_color __ARGS((int n));
-void term_bg_color __ARGS((int n));
-void term_settitle __ARGS((char_u *title));
-void ttest __ARGS((int pairs));
-void add_long_to_buf __ARGS((long_u val, char_u *dst));
-void check_shellsize __ARGS((void));
-void win_new_shellsize __ARGS((void));
-void shell_resized __ARGS((void));
-void shell_resized_check __ARGS((void));
-void set_shellsize __ARGS((int width, int height, int mustset));
-void settmode __ARGS((int tmode));
-void starttermcap __ARGS((void));
-void stoptermcap __ARGS((void));
-void may_req_termresponse __ARGS((void));
-int swapping_screen __ARGS((void));
-void setmouse __ARGS((void));
-int mouse_has __ARGS((int c));
-int mouse_model_popup __ARGS((void));
-void scroll_start __ARGS((void));
-void cursor_on __ARGS((void));
-void cursor_off __ARGS((void));
-void term_cursor_shape __ARGS((void));
-void scroll_region_set __ARGS((win_T *wp, int off));
-void scroll_region_reset __ARGS((void));
-void clear_termcodes __ARGS((void));
-void add_termcode __ARGS((char_u *name, char_u *string, int flags));
-char_u *find_termcode __ARGS((char_u *name));
-char_u *get_termcode __ARGS((int i));
-void del_termcode __ARGS((char_u *name));
-void set_mouse_topline __ARGS((win_T *wp));
-int check_termcode __ARGS((int max_offset, char_u *buf, int buflen));
-char_u *replace_termcodes __ARGS((char_u *from, char_u **bufp, int from_part, int do_lt));
-int find_term_bykeys __ARGS((char_u *src));
-void show_termcodes __ARGS((void));
-int show_one_termcode __ARGS((char_u *name, char_u *code, int printit));
-char_u *translate_mapping __ARGS((char_u *str, int expmap));
-void update_tcap __ARGS((int attr));
+extern int set_termname __ARGS((char_u *term));
+extern void set_mouse_termcode __ARGS((int n, char_u *s));
+extern void del_mouse_termcode __ARGS((int n));
+extern void getlinecol __ARGS((long *cp, long *rp));
+extern int add_termcap_entry __ARGS((char_u *name, int force));
+extern int term_is_8bit __ARGS((char_u *name));
+extern int term_is_gui __ARGS((char_u *name));
+extern char_u *tltoa __ARGS((unsigned long i));
+extern void termcapinit __ARGS((char_u *name));
+extern void out_flush __ARGS((void));
+extern void out_flush_check __ARGS((void));
+extern void out_trash __ARGS((void));
+extern void out_char __ARGS((unsigned c));
+extern void out_str_nf __ARGS((char_u *s));
+extern void out_str __ARGS((char_u *s));
+extern void term_windgoto __ARGS((int row, int col));
+extern void term_cursor_right __ARGS((int i));
+extern void term_append_lines __ARGS((int line_count));
+extern void term_delete_lines __ARGS((int line_count));
+extern void term_set_winpos __ARGS((int x, int y));
+extern void term_set_winsize __ARGS((int width, int height));
+extern void term_fg_color __ARGS((int n));
+extern void term_bg_color __ARGS((int n));
+extern void term_settitle __ARGS((char_u *title));
+extern void ttest __ARGS((int pairs));
+extern void add_long_to_buf __ARGS((long_u val, char_u *dst));
+extern void check_shellsize __ARGS((void));
+extern void win_new_shellsize __ARGS((void));
+extern void shell_resized __ARGS((void));
+extern void shell_resized_check __ARGS((void));
+extern void set_shellsize __ARGS((int width, int height, int mustset));
+extern void settmode __ARGS((int tmode));
+extern void starttermcap __ARGS((void));
+extern void stoptermcap __ARGS((void));
+extern void may_req_termresponse __ARGS((void));
+extern int swapping_screen __ARGS((void));
+extern void setmouse __ARGS((void));
+extern int mouse_has __ARGS((int c));
+extern int mouse_model_popup __ARGS((void));
+extern void scroll_start __ARGS((void));
+extern void cursor_on __ARGS((void));
+extern void cursor_off __ARGS((void));
+extern void term_cursor_shape __ARGS((void));
+extern void scroll_region_set __ARGS((win_T *wp, int off));
+extern void scroll_region_reset __ARGS((void));
+extern void clear_termcodes __ARGS((void));
+extern void add_termcode __ARGS((char_u *name, char_u *string, int flags));
+extern char_u *find_termcode __ARGS((char_u *name));
+extern char_u *get_termcode __ARGS((int i));
+extern void del_termcode __ARGS((char_u *name));
+extern void set_mouse_topline __ARGS((win_T *wp));
+extern int check_termcode __ARGS((int max_offset, char_u *buf, int buflen));
+extern char_u *replace_termcodes __ARGS((char_u *from, char_u **bufp, int from_part, int do_lt));
+extern int find_term_bykeys __ARGS((char_u *src));
+extern void show_termcodes __ARGS((void));
+extern int show_one_termcode __ARGS((char_u *name, char_u *code, int printit));
+extern char_u *translate_mapping __ARGS((char_u *str, int expmap));
+extern void update_tcap __ARGS((int attr));
 /* vim: set ft=c : */
diff --git a/src/proto/termlib.pro b/src/proto/termlib.pro
index 4369ecf..464b73b 100644
--- a/src/proto/termlib.pro
+++ b/src/proto/termlib.pro
@@ -1,8 +1,8 @@
 /* termlib.c */
-int tgetent __ARGS((char *tbuf, char *term));
-int tgetflag __ARGS((char *id));
-int tgetnum __ARGS((char *id));
-char *tgetstr __ARGS((char *id, char **buf));
-char *tgoto __ARGS((char *cm, int col, int line));
-int tputs __ARGS((char *cp, int affcnt, void (*outc)(unsigned int)));
+extern int tgetent __ARGS((char *tbuf, char *term));
+extern int tgetflag __ARGS((char *id));
+extern int tgetnum __ARGS((char *id));
+extern char *tgetstr __ARGS((char *id, char **buf));
+extern char *tgoto __ARGS((char *cm, int col, int line));
+extern int tputs __ARGS((char *cp, int affcnt, void (*outc)(unsigned int)));
 /* vim: set ft=c : */
diff --git a/src/proto/ui.pro b/src/proto/ui.pro
index 8825b6a..593c1b9 100644
--- a/src/proto/ui.pro
+++ b/src/proto/ui.pro
@@ -1,61 +1,61 @@
 /* ui.c */
-void ui_write __ARGS((char_u *s, int len));
-void ui_inchar_undo __ARGS((char_u *s, int len));
-int ui_inchar __ARGS((char_u *buf, int maxlen, long wtime, int tb_change_cnt));
-int ui_char_avail __ARGS((void));
-void ui_delay __ARGS((long msec, int ignoreinput));
-void ui_suspend __ARGS((void));
-void suspend_shell __ARGS((void));
-int ui_get_shellsize __ARGS((void));
-void ui_set_shellsize __ARGS((int mustset));
-void ui_new_shellsize __ARGS((void));
-void ui_breakcheck __ARGS((void));
-void clip_init __ARGS((int can_use));
-void clip_update_selection __ARGS((void));
-void clip_own_selection __ARGS((VimClipboard *cbd));
-void clip_lose_selection __ARGS((VimClipboard *cbd));
-void clip_copy_selection __ARGS((void));
-void clip_auto_select __ARGS((void));
-int clip_isautosel __ARGS((void));
-void clip_modeless __ARGS((int button, int is_click, int is_drag));
-void clip_start_selection __ARGS((int col, int row, int repeated_click));
-void clip_process_selection __ARGS((int button, int col, int row, int_u repeated_click));
-void clip_may_redraw_selection __ARGS((int row, int col, int len));
-void clip_clear_selection __ARGS((void));
-void clip_may_clear_selection __ARGS((int row1, int row2));
-void clip_scroll_selection __ARGS((int rows));
-void clip_copy_modeless_selection __ARGS((int both));
-int clip_gen_own_selection __ARGS((VimClipboard *cbd));
-void clip_gen_lose_selection __ARGS((VimClipboard *cbd));
-void clip_gen_set_selection __ARGS((VimClipboard *cbd));
-void clip_gen_request_selection __ARGS((VimClipboard *cbd));
-int vim_is_input_buf_full __ARGS((void));
-int vim_is_input_buf_empty __ARGS((void));
-int vim_free_in_input_buf __ARGS((void));
-int vim_used_in_input_buf __ARGS((void));
-char_u *get_input_buf __ARGS((void));
-void set_input_buf __ARGS((char_u *p));
-void add_to_input_buf __ARGS((char_u *s, int len));
-void add_to_input_buf_csi __ARGS((char_u *str, int len));
-void push_raw_key __ARGS((char_u *s, int len));
-void trash_input_buf __ARGS((void));
-int read_from_input_buf __ARGS((char_u *buf, long maxlen));
-void fill_input_buf __ARGS((int exit_on_error));
-void read_error_exit __ARGS((void));
-void ui_cursor_shape __ARGS((void));
-int check_col __ARGS((int col));
-int check_row __ARGS((int row));
-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 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));
-int jump_to_mouse __ARGS((int flags, int *inclusive, int which_button));
-int mouse_comp_pos __ARGS((win_T *win, int *rowp, int *colp, linenr_T *lnump));
-win_T *mouse_find_win __ARGS((int *rowp, int *colp));
-int get_fpos_of_mouse __ARGS((pos_T *mpos));
-int vcol2col __ARGS((win_T *wp, linenr_T lnum, int vcol));
-void ui_focus_change __ARGS((int in_focus));
-void im_save_status __ARGS((long *psave));
+extern void ui_write __ARGS((char_u *s, int len));
+extern void ui_inchar_undo __ARGS((char_u *s, int len));
+extern int ui_inchar __ARGS((char_u *buf, int maxlen, long wtime, int tb_change_cnt));
+extern int ui_char_avail __ARGS((void));
+extern void ui_delay __ARGS((long msec, int ignoreinput));
+extern void ui_suspend __ARGS((void));
+extern void suspend_shell __ARGS((void));
+extern int ui_get_shellsize __ARGS((void));
+extern void ui_set_shellsize __ARGS((int mustset));
+extern void ui_new_shellsize __ARGS((void));
+extern void ui_breakcheck __ARGS((void));
+extern void clip_init __ARGS((int can_use));
+extern void clip_update_selection __ARGS((void));
+extern void clip_own_selection __ARGS((VimClipboard *cbd));
+extern void clip_lose_selection __ARGS((VimClipboard *cbd));
+extern void clip_copy_selection __ARGS((void));
+extern void clip_auto_select __ARGS((void));
+extern int clip_isautosel __ARGS((void));
+extern void clip_modeless __ARGS((int button, int is_click, int is_drag));
+extern void clip_start_selection __ARGS((int col, int row, int repeated_click));
+extern void clip_process_selection __ARGS((int button, int col, int row, int_u repeated_click));
+extern void clip_may_redraw_selection __ARGS((int row, int col, int len));
+extern void clip_clear_selection __ARGS((void));
+extern void clip_may_clear_selection __ARGS((int row1, int row2));
+extern void clip_scroll_selection __ARGS((int rows));
+extern void clip_copy_modeless_selection __ARGS((int both));
+extern int clip_gen_own_selection __ARGS((VimClipboard *cbd));
+extern void clip_gen_lose_selection __ARGS((VimClipboard *cbd));
+extern void clip_gen_set_selection __ARGS((VimClipboard *cbd));
+extern void clip_gen_request_selection __ARGS((VimClipboard *cbd));
+extern int vim_is_input_buf_full __ARGS((void));
+extern int vim_is_input_buf_empty __ARGS((void));
+extern int vim_free_in_input_buf __ARGS((void));
+extern int vim_used_in_input_buf __ARGS((void));
+extern char_u *get_input_buf __ARGS((void));
+extern void set_input_buf __ARGS((char_u *p));
+extern void add_to_input_buf __ARGS((char_u *s, int len));
+extern void add_to_input_buf_csi __ARGS((char_u *str, int len));
+extern void push_raw_key __ARGS((char_u *s, int len));
+extern void trash_input_buf __ARGS((void));
+extern int read_from_input_buf __ARGS((char_u *buf, long maxlen));
+extern void fill_input_buf __ARGS((int exit_on_error));
+extern void read_error_exit __ARGS((void));
+extern void ui_cursor_shape __ARGS((void));
+extern int check_col __ARGS((int col));
+extern int check_row __ARGS((int row));
+extern void open_app_context __ARGS((void));
+extern void x11_setup_atoms __ARGS((Display *dpy));
+extern void clip_x11_request_selection __ARGS((Widget myShell, Display *dpy, VimClipboard *cbd));
+extern void clip_x11_lose_selection __ARGS((Widget myShell, VimClipboard *cbd));
+extern int clip_x11_own_selection __ARGS((Widget myShell, VimClipboard *cbd));
+extern void clip_x11_set_selection __ARGS((VimClipboard *cbd));
+extern int jump_to_mouse __ARGS((int flags, int *inclusive, int which_button));
+extern int mouse_comp_pos __ARGS((win_T *win, int *rowp, int *colp, linenr_T *lnump));
+extern win_T *mouse_find_win __ARGS((int *rowp, int *colp));
+extern int get_fpos_of_mouse __ARGS((pos_T *mpos));
+extern int vcol2col __ARGS((win_T *wp, linenr_T lnum, int vcol));
+extern void ui_focus_change __ARGS((int in_focus));
+extern void im_save_status __ARGS((long *psave));
 /* vim: set ft=c : */
diff --git a/src/structs.h b/src/structs.h
index 1b7c826..2a9882b 100644
--- a/src/structs.h
+++ b/src/structs.h
@@ -1118,7 +1118,9 @@
 # define B_SPELL(buf)  (0)
 #endif
 
+#ifdef FEAT_QUICKFIX
 typedef struct qf_info_S qf_info_T;
+#endif
 
 /*
  * buffer: structure that holds information about one file
diff --git a/src/testdir/test61.in b/src/testdir/test61.in
index 749d8ad..172c36e 100644
--- a/src/testdir/test61.in
+++ b/src/testdir/test61.in
@@ -30,7 +30,7 @@
 :"
 :/^222/w >>test.out
 :" Delay for three seconds and go some seconds forward and backward
-:sleep 2
+:sleep 3
 Aa:set ul=100
 Ab:set ul=100
 Ac:set ul=100
