diff --git a/runtime/tools/xcmdsrv_client.c b/runtime/tools/xcmdsrv_client.c
index a0e6211..88e8380 100644
--- a/runtime/tools/xcmdsrv_client.c
+++ b/runtime/tools/xcmdsrv_client.c
@@ -29,10 +29,8 @@
 #include <X11/Intrinsic.h>
 #include <X11/Xatom.h>
 
-#define __ARGS(x) x
-
 /* Client API */
-char * sendToVim __ARGS((Display *dpy, char *name, char *cmd, int asKeys, int *code));
+char * sendToVim(Display *dpy, char *name, char *cmd, int asKeys, int *code);
 
 #ifdef MAIN
 /* A sample program */
@@ -70,15 +68,15 @@
  * Forward declarations for procedures defined later in this file:
  */
 
-static int	x_error_check __ARGS((Display *dpy, XErrorEvent *error_event));
-static int	AppendPropCarefully __ARGS((Display *display,
-		    Window window, Atom property, char *value, int length));
-static Window	LookupName __ARGS((Display *dpy, char *name,
-		    int delete, char **loose));
-static int	SendInit __ARGS((Display *dpy));
-static char	*SendEventProc __ARGS((Display *dpy, XEvent *eventPtr,
-				      int expect, int *code));
-static int	IsSerialName __ARGS((char *name));
+static int	x_error_check(Display *dpy, XErrorEvent *error_event);
+static int	AppendPropCarefully(Display *display,
+		    Window window, Atom property, char *value, int length);
+static Window	LookupName(Display *dpy, char *name,
+		    int delete, char **loose);
+static int	SendInit(Display *dpy);
+static char	*SendEventProc(Display *dpy, XEvent *eventPtr,
+				      int expect, int *code);
+static int	IsSerialName(char *name);
 
 /* Private variables */
 static Atom	registryProperty = None;
diff --git a/src/Makefile b/src/Makefile
index 9883a77..29c8680 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -1660,10 +1660,11 @@
 	hashtab.pro \
 	hangulin.pro \
 	if_cscope.pro \
-	if_xcmdsrv.pro \
+	if_lua.pro \
 	if_python.pro \
 	if_python3.pro \
 	if_ruby.pro \
+	if_xcmdsrv.pro \
 	json.pro \
 	main.pro \
 	mark.pro \
@@ -1680,6 +1681,7 @@
 	option.pro \
 	os_unix.pro \
 	popupmnu.pro \
+	pty.pro \
 	quickfix.pro \
 	regexp.pro \
 	screen.pro \
@@ -1997,6 +1999,7 @@
 	test_cursor_func \
 	test_delete \
 	test_expand \
+	test_glob2regpat \
 	test_hardcopy \
 	test_increment \
 	test_json \
diff --git a/src/blowfish.c b/src/blowfish.c
index 6bf2482..2191baf 100644
--- a/src/blowfish.c
+++ b/src/blowfish.c
@@ -56,12 +56,12 @@
 } bf_state_T;
 
 
-static void bf_e_block __ARGS((bf_state_T *state, UINT32_T *p_xl, UINT32_T *p_xr));
-static void bf_e_cblock __ARGS((bf_state_T *state, char_u *block));
-static int bf_check_tables __ARGS((UINT32_T pax[18], UINT32_T sbx[4][256], UINT32_T val));
-static int bf_self_test __ARGS((void));
-static void bf_key_init __ARGS((bf_state_T *state, char_u *password, char_u *salt, int salt_len));
-static void bf_cfb_init __ARGS((bf_state_T *state, char_u *seed, int seed_len));
+static void bf_e_block(bf_state_T *state, UINT32_T *p_xl, UINT32_T *p_xr);
+static void bf_e_cblock(bf_state_T *state, char_u *block);
+static int bf_check_tables(UINT32_T pax[18], UINT32_T sbx[4][256], UINT32_T val);
+static int bf_self_test(void);
+static void bf_key_init(bf_state_T *state, char_u *password, char_u *salt, int salt_len);
+static void bf_cfb_init(bf_state_T *state, char_u *seed, int seed_len);
 
 /* Blowfish code */
 static UINT32_T pax_init[18] = {
diff --git a/src/ex_cmds.h b/src/ex_cmds.h
index 78c0afa..89f84ed 100644
--- a/src/ex_cmds.h
+++ b/src/ex_cmds.h
@@ -85,7 +85,7 @@
 #ifdef DO_DECLARE_EXCMD
 # define EX(a, b, c, d, e)  {(char_u *)b, c, (long_u)(d), e}
 
-typedef void (*ex_func_T) __ARGS((exarg_T *eap));
+typedef void (*ex_func_T) (exarg_T *eap);
 
 static struct cmdname
 {
@@ -1739,7 +1739,7 @@
     int		useridx;	/* user command index */
 #endif
     char_u	*errmsg;	/* returned error message */
-    char_u	*(*getline) __ARGS((int, void *, int));
+    char_u	*(*getline)(int, void *, int);
     void	*cookie;	/* argument for getline() */
 #ifdef FEAT_EVAL
     struct condstack *cstack;	/* condition stack for ":if" etc. */
diff --git a/src/ex_cmds2.c b/src/ex_cmds2.c
index 2c92096..67ec84b 100644
--- a/src/ex_cmds2.c
+++ b/src/ex_cmds2.c
@@ -2999,7 +2999,7 @@
 do_in_runtimepath(name, all, callback, cookie)
     char_u	*name;
     int		all;
-    void	(*callback)__ARGS((char_u *fname, void *ck));
+    void	(*callback)(char_u *fname, void *ck);
     void	*cookie;
 {
     char_u	*rtp;
diff --git a/src/ex_getln.c b/src/ex_getln.c
index 90327d2..6afe06f 100644
--- a/src/ex_getln.c
+++ b/src/ex_getln.c
@@ -4709,7 +4709,7 @@
 	static struct expgen
 	{
 	    int		context;
-	    char_u	*((*func)__ARGS((expand_T *, int)));
+	    char_u	*((*func)(expand_T *, int));
 	    int		ic;
 	    int		escaped;
 	} tab[] =
@@ -4804,7 +4804,7 @@
     regmatch_T	*regmatch;
     int		*num_file;
     char_u	***file;
-    char_u	*((*func)__ARGS((expand_T *, int)));
+    char_u	*((*func)(expand_T *, int));
 					  /* returns a string from the list */
     int		escaped;
 {
diff --git a/src/fold.c b/src/fold.c
index b3e3a32..dcf96b9 100644
--- a/src/fold.c
+++ b/src/fold.c
@@ -2142,7 +2142,7 @@
 static int fold_changed;
 
 /* Function declarations. {{{2 */
-static linenr_T foldUpdateIEMSRecurse(garray_T *gap, int level, linenr_T startlnum, fline_T *flp, void (*getlevel)__ARGS((fline_T *)), linenr_T bot, int topflags);
+static linenr_T foldUpdateIEMSRecurse(garray_T *gap, int level, linenr_T startlnum, fline_T *flp, void (*getlevel)(fline_T *), linenr_T bot, int topflags);
 static int foldInsert(garray_T *gap, int i);
 static void foldSplit(garray_T *gap, int i, linenr_T top, linenr_T bot);
 static void foldRemove(garray_T *gap, linenr_T top, linenr_T bot);
@@ -2169,7 +2169,7 @@
     linenr_T	start;
     linenr_T	end;
     fline_T	fline;
-    void	(*getlevel)__ARGS((fline_T *));
+    void	(*getlevel)(fline_T *);
     int		level;
     fold_T	*fp;
 
@@ -2422,7 +2422,7 @@
     int		level;
     linenr_T	startlnum;
     fline_T	*flp;
-    void	(*getlevel)__ARGS((fline_T *));
+    void	(*getlevel)(fline_T *);
     linenr_T	bot;
     int		topflags;	/* flags used by containing fold */
 {
diff --git a/src/globals.h b/src/globals.h
index f252aee..103aff6 100644
--- a/src/globals.h
+++ b/src/globals.h
@@ -845,19 +845,19 @@
  * The value is set in mb_init();
  */
 /* length of char in bytes, including following composing chars */
-EXTERN int (*mb_ptr2len) __ARGS((char_u *p)) INIT(= latin_ptr2len);
+EXTERN int (*mb_ptr2len)(char_u *p) INIT(= latin_ptr2len);
 /* idem, with limit on string length */
-EXTERN int (*mb_ptr2len_len) __ARGS((char_u *p, int size)) INIT(= latin_ptr2len_len);
+EXTERN int (*mb_ptr2len_len)(char_u *p, int size) INIT(= latin_ptr2len_len);
 /* byte length of char */
-EXTERN int (*mb_char2len) __ARGS((int c)) INIT(= latin_char2len);
+EXTERN int (*mb_char2len)(int c) INIT(= latin_char2len);
 /* convert char to bytes, return the length */
-EXTERN int (*mb_char2bytes) __ARGS((int c, char_u *buf)) INIT(= latin_char2bytes);
-EXTERN int (*mb_ptr2cells) __ARGS((char_u *p)) INIT(= latin_ptr2cells);
-EXTERN int (*mb_ptr2cells_len) __ARGS((char_u *p, int size)) INIT(= latin_ptr2cells_len);
-EXTERN int (*mb_char2cells) __ARGS((int c)) INIT(= latin_char2cells);
-EXTERN int (*mb_off2cells) __ARGS((unsigned off, unsigned max_off)) INIT(= latin_off2cells);
-EXTERN int (*mb_ptr2char) __ARGS((char_u *p)) INIT(= latin_ptr2char);
-EXTERN int (*mb_head_off) __ARGS((char_u *base, char_u *p)) INIT(= latin_head_off);
+EXTERN int (*mb_char2bytes)(int c, char_u *buf) INIT(= latin_char2bytes);
+EXTERN int (*mb_ptr2cells)(char_u *p) INIT(= latin_ptr2cells);
+EXTERN int (*mb_ptr2cells_len)(char_u *p, int size) INIT(= latin_ptr2cells_len);
+EXTERN int (*mb_char2cells)(int c) INIT(= latin_char2cells);
+EXTERN int (*mb_off2cells)(unsigned off, unsigned max_off) INIT(= latin_off2cells);
+EXTERN int (*mb_ptr2char)(char_u *p) INIT(= latin_ptr2char);
+EXTERN int (*mb_head_off)(char_u *base, char_u *p) INIT(= latin_head_off);
 
 # if defined(USE_ICONV) && defined(DYNAMIC_ICONV)
 /* Pointers to functions and variables to be loaded at runtime */
diff --git a/src/gui_at_sb.h b/src/gui_at_sb.h
index 90940f5..bdce9c8 100644
--- a/src/gui_at_sb.h
+++ b/src/gui_at_sb.h
@@ -94,7 +94,7 @@
 
 extern WidgetClass vim_scrollbarWidgetClass;
 
-extern void vim_XawScrollbarSetThumb __ARGS((Widget, double, double, double));
+extern void vim_XawScrollbarSetThumb(Widget, double, double, double);
 
 typedef struct
 {
diff --git a/src/gui_beval.c b/src/gui_beval.c
index 1aeb5c8..f177fff 100644
--- a/src/gui_beval.c
+++ b/src/gui_beval.c
@@ -195,7 +195,7 @@
 gui_mch_create_beval_area(target, mesg, mesgCB, clientData)
     void	*target;
     char_u	*mesg;
-    void	(*mesgCB)__ARGS((BalloonEval *, int));
+    void	(*mesgCB)(BalloonEval *, int);
     void	*clientData;
 {
 #ifndef FEAT_GUI_GTK
diff --git a/src/gui_beval.h b/src/gui_beval.h
index 75d5a18..859c081 100644
--- a/src/gui_beval.h
+++ b/src/gui_beval.h
@@ -60,7 +60,7 @@
 #endif
     int			ts;		/* tabstop setting for this buffer */
     char_u		*msg;
-    void		(*msgCB)__ARGS((struct BalloonEvalStruct *, int));
+    void		(*msgCB)(struct BalloonEvalStruct *, int);
     void		*clientData;	/* For callback */
 #if !defined(FEAT_GUI_GTK) && !defined(FEAT_GUI_W32)
     Dimension		screen_width;	/* screen width in pixels */
diff --git a/src/gui_w32.c b/src/gui_w32.c
index a774e30..5fce6e0 100644
--- a/src/gui_w32.c
+++ b/src/gui_w32.c
@@ -4931,7 +4931,7 @@
 gui_mch_create_beval_area(target, mesg, mesgCB, clientData)
     void	*target;	/* ignored, always use s_textArea */
     char_u	*mesg;
-    void	(*mesgCB)__ARGS((BalloonEval *, int));
+    void	(*mesgCB)(BalloonEval *, int);
     void	*clientData;
 {
     /* partially stolen from gui_beval.c */
diff --git a/src/if_cscope.h b/src/if_cscope.h
index 5620eb3..b597170 100644
--- a/src/if_cscope.h
+++ b/src/if_cscope.h
@@ -44,7 +44,7 @@
 
 typedef struct {
     char *  name;
-    int     (*func) __ARGS((exarg_T *eap));
+    int     (*func)(exarg_T *eap);
     char *  help;
     char *  usage;
     int	    cansplit;		/* if supports splitting window */
diff --git a/src/if_perl.xs b/src/if_perl.xs
index 840de7d..f37f416 100644
--- a/src/if_perl.xs
+++ b/src/if_perl.xs
@@ -125,9 +125,9 @@
 /* Compatibility hacks over */
 
 static PerlInterpreter *perl_interp = NULL;
-static void xs_init __ARGS((pTHX));
-static void VIM_init __ARGS((void));
-EXTERN_C void boot_DynaLoader __ARGS((pTHX_ CV*));
+static void xs_init(pTHX);
+static void VIM_init(void);
+EXTERN_C void boot_DynaLoader(pTHX_ CV*);
 
 /*
  * For dynamic linked perl.
@@ -1090,7 +1090,7 @@
 		    item2 = av_fetch((AV *)sv, size, 0);
 
 		    if (item2 == NULL || *item2 == NULL ||
-					perl_to_vim(*item2, &item->li_tv) == FAIL)
+				    perl_to_vim(*item2, &item->li_tv) == FAIL)
 			break;
 		}
 	    }
diff --git a/src/if_sniff.h b/src/if_sniff.h
index 16cce41..50186b8 100644
--- a/src/if_sniff.h
+++ b/src/if_sniff.h
@@ -9,8 +9,8 @@
 extern int  sniff_request_waiting;
 extern int  sniff_connected;
 extern int  fd_from_sniff;
-extern void sniff_disconnect __ARGS((int immediately));
-extern void ProcessSniffRequests __ARGS((void));
-extern void ex_sniff __ARGS((exarg_T *eap));
+extern void sniff_disconnect(int immediately);
+extern void ProcessSniffRequests(void);
+extern void ex_sniff(exarg_T *eap);
 
 #endif
diff --git a/src/nbdebug.h b/src/nbdebug.h
index 9510914..d049896 100644
--- a/src/nbdebug.h
+++ b/src/nbdebug.h
@@ -44,8 +44,8 @@
 
 void		 nbdbg(char *, ...);
 
-void nbdebug_wait __ARGS((u_int wait_flags, char *wait_var, u_int wait_secs));
-void nbdebug_log_init __ARGS((char *log_var, char *level_var));
+void nbdebug_wait(u_int wait_flags, char *wait_var, u_int wait_secs);
+void nbdebug_log_init(char *log_var, char *level_var);
 
 extern FILE	*nb_debug;
 extern u_int	 nb_dlevel;		/* nb_debug verbosity level */
diff --git a/src/os_unix.c b/src/os_unix.c
index 93e7dd4..59aeddb 100644
--- a/src/os_unix.c
+++ b/src/os_unix.c
@@ -109,7 +109,7 @@
 
 static int sysmouse_open(void);
 static void sysmouse_close(void);
-static RETSIGTYPE sig_sysmouse __ARGS(SIGPROTOARG);
+static RETSIGTYPE sig_sysmouse SIGPROTOARG;
 #endif
 
 /*
@@ -190,22 +190,22 @@
 static void handle_resize(void);
 
 #if defined(SIGWINCH)
-static RETSIGTYPE sig_winch __ARGS(SIGPROTOARG);
+static RETSIGTYPE sig_winch SIGPROTOARG;
 #endif
 #if defined(SIGINT)
-static RETSIGTYPE catch_sigint __ARGS(SIGPROTOARG);
+static RETSIGTYPE catch_sigint SIGPROTOARG;
 #endif
 #if defined(SIGPWR)
-static RETSIGTYPE catch_sigpwr __ARGS(SIGPROTOARG);
+static RETSIGTYPE catch_sigpwr SIGPROTOARG;
 #endif
 #if defined(SIGALRM) && defined(FEAT_X11) \
 	&& defined(FEAT_TITLE) && !defined(FEAT_GUI_GTK)
 # define SET_SIG_ALARM
-static RETSIGTYPE sig_alarm __ARGS(SIGPROTOARG);
+static RETSIGTYPE sig_alarm SIGPROTOARG;
 /* volatile because it is used in signal handler sig_alarm(). */
 static volatile int sig_alarm_called;
 #endif
-static RETSIGTYPE deathtrap __ARGS(SIGPROTOARG);
+static RETSIGTYPE deathtrap SIGPROTOARG;
 
 static void catch_int_signal(void);
 static void set_signals(void);
@@ -1137,7 +1137,7 @@
  * volatile because it is used in signal handler sigcont_handler().
  */
 static volatile int sigcont_received;
-static RETSIGTYPE sigcont_handler __ARGS(SIGPROTOARG);
+static RETSIGTYPE sigcont_handler SIGPROTOARG;
 
 /*
  * signal handler for SIGCONT
@@ -6592,10 +6592,10 @@
 #endif /* FEAT_SYSMOUSE */
 
 #if defined(FEAT_LIBCALL) || defined(PROTO)
-typedef char_u * (*STRPROCSTR)__ARGS((char_u *));
-typedef char_u * (*INTPROCSTR)__ARGS((int));
-typedef int (*STRPROCINT)__ARGS((char_u *));
-typedef int (*INTPROCINT)__ARGS((int));
+typedef char_u * (*STRPROCSTR)(char_u *);
+typedef char_u * (*INTPROCSTR)(int);
+typedef int (*STRPROCINT)(char_u *);
+typedef int (*INTPROCINT)(int);
 
 /*
  * Call a DLL routine which takes either a string or int param
diff --git a/src/os_unix.h b/src/os_unix.h
index 4504cce..73881af 100644
--- a/src/os_unix.h
+++ b/src/os_unix.h
@@ -74,10 +74,6 @@
 # define USE_GETCWD
 #endif
 
-#ifndef __ARGS
-# define __ARGS(x) x
-#endif
-
 /* always use unlink() to remove files */
 #ifndef PROTO
 # ifdef VMS
@@ -453,7 +449,7 @@
 # ifdef HAVE_RENAME
 #  define mch_rename(src, dst) rename(src, dst)
 # else
-int mch_rename __ARGS((const char *src, const char *dest));
+int mch_rename(const char *src, const char *dest);
 # endif
 # ifndef VMS
 #  ifdef __MVS__
diff --git a/src/os_win16.c b/src/os_win16.c
index 49e6e30..efddeeb 100644
--- a/src/os_win16.c
+++ b/src/os_win16.c
@@ -84,7 +84,7 @@
 /* cproto doesn't create a prototype for main() */
 int _cdecl
 VimMain
-__ARGS((int argc, char **argv));
+    (int argc, char **argv);
 static int (_cdecl *pmain)(int, char **);
 
 #ifndef PROTO
diff --git a/src/proto.h b/src/proto.h
index 7a48dc9..63e1249 100644
--- a/src/proto.h
+++ b/src/proto.h
@@ -55,7 +55,7 @@
 #  include "winclip.pro"
 #  if (defined(__GNUC__) && !defined(__MINGW32__)) \
 	|| (defined(__BORLANDC__) && __BORLANDC__ < 0x502)
-extern int _stricoll __ARGS((char *a, char *b));
+extern int _stricoll(char *a, char *b);
 #  endif
 # endif
 # ifdef VMS
@@ -111,25 +111,25 @@
 #  ifdef __BORLANDC__
 _RTLENTRYF
 #  endif
-smsg __ARGS((char_u *, ...));
+smsg(char_u *, ...);
 
 int
 #  ifdef __BORLANDC__
 _RTLENTRYF
 #  endif
-smsg_attr __ARGS((int, char_u *, ...));
+smsg_attr(int, char_u *, ...);
 
 int
 #  ifdef __BORLANDC__
 _RTLENTRYF
 #  endif
-vim_snprintf_add __ARGS((char *, size_t, char *, ...));
+vim_snprintf_add(char *, size_t, char *, ...);
 
 int
 #  ifdef __BORLANDC__
 _RTLENTRYF
 #  endif
-vim_snprintf __ARGS((char *, size_t, char *, ...));
+vim_snprintf(char *, size_t, char *, ...);
 
 #  if defined(HAVE_STDARG_H)
 int vim_vsnprintf(char *str, size_t str_m, char *fmt, va_list ap, typval_T *tvs);
@@ -140,11 +140,11 @@
 # include "misc1.pro"
 # include "misc2.pro"
 #ifndef HAVE_STRPBRK	    /* not generated automatically from misc2.c */
-char_u *vim_strpbrk __ARGS((char_u *s, char_u *charset));
+char_u *vim_strpbrk(char_u *s, char_u *charset);
 #endif
 #ifndef HAVE_QSORT
 /* Use our own qsort(), don't define the prototype when not used. */
-void qsort __ARGS((void *base, size_t elm_count, size_t elm_size, int (*cmp)(const void *, const void *)));
+void qsort(void *base, size_t elm_count, size_t elm_size, int (*cmp)(const void *, const void *));
 #endif
 # include "move.pro"
 # if defined(FEAT_MBYTE) || defined(FEAT_XIM) || defined(FEAT_KEYMAP) \
@@ -219,9 +219,9 @@
 #   include "pty.pro"
 #  endif
 #  if !defined(HAVE_SETENV) && !defined(HAVE_PUTENV) && !defined(VMS)
-extern int putenv __ARGS((const char *string));		/* from pty.c */
+extern int putenv(const char *string);		/* from pty.c */
 #   ifdef USE_VIMPTY_GETENV
-extern char_u *vimpty_getenv __ARGS((const char_u *string));	/* from pty.c */
+extern char_u *vimpty_getenv(const char_u *string);	/* from pty.c */
 #   endif
 #  endif
 #  ifdef FEAT_GUI_W16
@@ -241,7 +241,7 @@
 #  ifdef FEAT_GUI_ATHENA
 #   include "gui_athena.pro"
 #   ifdef FEAT_BROWSE
-extern char *vim_SelFile __ARGS((Widget toplevel, char *prompt, char *init_path, int (*show_entry)(), int x, int y, guicolor_T fg, guicolor_T bg, guicolor_T scroll_fg, guicolor_T scroll_bg));
+extern char *vim_SelFile(Widget toplevel, char *prompt, char *init_path, int (*show_entry)(), int x, int y, guicolor_T fg, guicolor_T bg, guicolor_T scroll_fg, guicolor_T scroll_bg);
 #   endif
 #  endif
 #  ifdef FEAT_GUI_MAC
diff --git a/src/proto/if_lua.pro b/src/proto/if_lua.pro
index 10395d5..c33678e 100644
--- a/src/proto/if_lua.pro
+++ b/src/proto/if_lua.pro
@@ -1,11 +1,11 @@
 /* if_lua.c */
-int lua_enabled __ARGS((int verbose));
-void lua_end __ARGS((void));
-void ex_lua __ARGS((exarg_T *eap));
-void ex_luado __ARGS((exarg_T *eap));
-void ex_luafile __ARGS((exarg_T *eap));
-void lua_buffer_free __ARGS((buf_T *buf));
-void lua_window_free __ARGS((win_T *win));
-void do_luaeval __ARGS((char_u *str, typval_T *arg, typval_T *rettv));
-int set_ref_in_lua __ARGS((int copyID));
+int lua_enabled(int verbose);
+void lua_end(void);
+void ex_lua(exarg_T *eap);
+void ex_luado(exarg_T *eap);
+void ex_luafile(exarg_T *eap);
+void lua_buffer_free(buf_T *o);
+void lua_window_free(win_T *o);
+void do_luaeval(char_u *str, typval_T *arg, typval_T *rettv);
+int set_ref_in_lua(int copyID);
 /* vim: set ft=c : */
diff --git a/src/proto/pty.pro b/src/proto/pty.pro
index f2424a5..35e5c2b 100644
--- a/src/proto/pty.pro
+++ b/src/proto/pty.pro
@@ -1,3 +1,4 @@
 /* pty.c */
-int OpenPTY __ARGS((char **ttyn));
-int SetupSlavePTY __ARGS((int fd));
+int SetupSlavePTY(int fd);
+int OpenPTY(char **ttyn);
+/* vim: set ft=c : */
diff --git a/src/pty.c b/src/pty.c
index 0252093..8415057 100644
--- a/src/pty.c
+++ b/src/pty.c
@@ -228,7 +228,7 @@
 {
     int f;
     char *name;
-    RETSIGTYPE (*sigcld)__ARGS(SIGPROTOARG);
+    RETSIGTYPE (*sigcld) SIGPROTOARG;
 
     /*
      * SIGCHLD set to SIG_DFL for _getpty() because it may fork() and
diff --git a/src/regexp.c b/src/regexp.c
index 8ff30db..f954141 100644
--- a/src/regexp.c
+++ b/src/regexp.c
@@ -7226,12 +7226,6 @@
  *		      regsub stuff			       *
  ***************************************************************/
 
-/* This stuff below really confuses cc on an SGI -- webb */
-#ifdef __sgi
-# undef __ARGS
-# define __ARGS(x)  ()
-#endif
-
 /*
  * We should define ftpr as a pointer to a function returning a pointer to
  * a function returning a pointer to a function ...
diff --git a/src/structs.h b/src/structs.h
index 8c84b5a..43603aa 100644
--- a/src/structs.h
+++ b/src/structs.h
@@ -2515,7 +2515,7 @@
     char_u	*actext;	    /* accelerator text (after TAB) */
     int		priority;	    /* Menu order priority */
 #ifdef FEAT_GUI
-    void	(*cb) __ARGS((vimmenu_T *));	    /* Call-back routine */
+    void	(*cb)(vimmenu_T *);	    /* Call-back routine */
 #endif
 #ifdef FEAT_TOOLBAR
     char_u	*iconfile;	    /* name of file for icon or NULL */
diff --git a/src/syntax.c b/src/syntax.c
index f86fae5..350539d 100644
--- a/src/syntax.c
+++ b/src/syntax.c
@@ -6334,8 +6334,8 @@
 
 struct subcommand
 {
-    char    *name;				/* subcommand name */
-    void    (*func)__ARGS((exarg_T *, int));	/* function to call */
+    char    *name;			/* subcommand name */
+    void    (*func)(exarg_T *, int);	/* function to call */
 };
 
 static struct subcommand subcommands[] =
diff --git a/src/version.c b/src/version.c
index d941c94..d8cd6b3 100644
--- a/src/version.c
+++ b/src/version.c
@@ -747,6 +747,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1200,
+/**/
     1199,
 /**/
     1198,
diff --git a/src/vim.h b/src/vim.h
index b8de4ae..7fea749 100644
--- a/src/vim.h
+++ b/src/vim.h
@@ -274,15 +274,6 @@
 # include "os_unix.h"	    /* bring lots of system header files */
 #endif
 
-#ifndef __ARGS
-# define __ARGS(x) x
-#endif
-
-/* __ARGS and __PARMS are the same thing. */
-#ifndef __PARMS
-# define __PARMS(x) __ARGS(x)
-#endif
-
 /* Mark unused function arguments with UNUSED, so that gcc -Wunused-parameter
  * can be used to check for mistakes. */
 #ifdef HAVE_ATTRIBUTE_UNUSED
@@ -1641,7 +1632,7 @@
  * Include a prototype for mch_memmove(), it may not be in alloc.pro.
  */
 #ifdef VIM_MEMMOVE
-void mch_memmove __ARGS((void *, void *, size_t));
+void mch_memmove(void *, void *, size_t);
 #else
 # ifndef mch_memmove
 #  define mch_memmove(to, from, len) memmove(to, from, len)
@@ -1660,7 +1651,7 @@
 #ifdef HAVE_MEMSET
 # define vim_memset(ptr, c, size)   memset((ptr), (c), (size))
 #else
-void *vim_memset __ARGS((void *, int, size_t));
+void *vim_memset(void *, int, size_t);
 #endif
 
 #ifdef HAVE_MEMCMP
@@ -1669,7 +1660,7 @@
 # ifdef HAVE_BCMP
 #  define vim_memcmp(p1, p2, len)   bcmp((p1), (p2), (len))
 # else
-int vim_memcmp __ARGS((void *, void *, size_t));
+int vim_memcmp(void *, void *, size_t);
 #  define VIM_MEMCMP
 # endif
 #endif
diff --git a/src/xpm_w32.c b/src/xpm_w32.c
index 7241fb6..945ab7d 100644
--- a/src/xpm_w32.c
+++ b/src/xpm_w32.c
@@ -14,15 +14,6 @@
 #endif
 #include <windows.h>
 
-/* reduced def from Vim.h */
-#ifndef __ARGS
-# if defined(__STDC__) || defined(__GNUC__) || defined(WIN3264)
-#  define __ARGS(x) x
-# else
-#  define __ARGS(x) ()
-# endif
-#endif
-
 #include "xpm_w32.h"
 
 /* Engage Windows support in libXpm */
diff --git a/src/xpm_w32.h b/src/xpm_w32.h
index 3fe4475..914739b 100644
--- a/src/xpm_w32.h
+++ b/src/xpm_w32.h
@@ -3,5 +3,5 @@
  */
 
 #ifndef XPM_W32__H
-int LoadXpmImage __ARGS((char *filename, HBITMAP *hImage, HBITMAP *hShape));
+int LoadXpmImage(char *filename, HBITMAP *hImage, HBITMAP *hShape);
 #endif
