diff --git a/src/gui_w32.c b/src/gui_w32.c
index 5fce6e0..6a0e0a3 100644
--- a/src/gui_w32.c
+++ b/src/gui_w32.c
@@ -2246,7 +2246,7 @@
  * Get IM status.  When IM is on, return not 0.  Else return 0.
  */
     int
-im_get_status()
+im_get_status(void)
 {
     int		status = 0;
     HIMC	hImc;
@@ -4525,10 +4525,7 @@
 } signicon_t;
 
     void
-gui_mch_drawsign(row, col, typenr)
-    int		row;
-    int		col;
-    int		typenr;
+gui_mch_drawsign(int row, int col, int typenr)
 {
     signicon_t *sign;
     int x, y, w, h;
@@ -4605,8 +4602,7 @@
 }
 
     void *
-gui_mch_register_sign(signfile)
-    char_u	*signfile;
+gui_mch_register_sign(char_u *signfile)
 {
     signicon_t	sign, *psign;
     char_u	*ext;
@@ -4661,8 +4657,7 @@
 }
 
     void
-gui_mch_destroy_sign(sign)
-    void *sign;
+gui_mch_destroy_sign(void *sign)
 {
     if (sign)
     {
@@ -4766,10 +4761,7 @@
 }
 
     static void
-make_tooltip(beval, text, pt)
-    BalloonEval *beval;
-    char *text;
-    POINT pt;
+make_tooltip(BalloonEval *beval, char *text, POINT pt)
 {
     TOOLINFO	*pti;
     int		ToolInfoSize;
@@ -4833,19 +4825,18 @@
 }
 
     static void
-delete_tooltip(beval)
-    BalloonEval	*beval;
+delete_tooltip(BalloonEval *beval)
 {
     PostMessage(beval->balloon, WM_CLOSE, 0, 0);
 }
 
 /*ARGSUSED*/
     static VOID CALLBACK
-BevalTimerProc(hwnd, uMsg, idEvent, dwTime)
-    HWND    hwnd;
-    UINT    uMsg;
-    UINT_PTR    idEvent;
-    DWORD   dwTime;
+BevalTimerProc(
+    HWND    hwnd,
+    UINT    uMsg,
+    UINT_PTR    idEvent,
+    DWORD   dwTime)
 {
     POINT	pt;
     RECT	rect;
@@ -4883,8 +4874,7 @@
 
 /*ARGSUSED*/
     void
-gui_mch_disable_beval_area(beval)
-    BalloonEval	*beval;
+gui_mch_disable_beval_area(BalloonEval *beval)
 {
     // TRACE0("gui_mch_disable_beval_area {{{");
     KillTimer(s_textArea, BevalTimerId);
@@ -4893,8 +4883,7 @@
 
 /*ARGSUSED*/
     void
-gui_mch_enable_beval_area(beval)
-    BalloonEval	*beval;
+gui_mch_enable_beval_area(BalloonEval *beval)
 {
     // TRACE0("gui_mch_enable_beval_area |||");
     if (beval == NULL)
@@ -4905,9 +4894,7 @@
 }
 
     void
-gui_mch_post_balloon(beval, mesg)
-    BalloonEval	*beval;
-    char_u	*mesg;
+gui_mch_post_balloon(BalloonEval *beval, char_u *mesg)
 {
     POINT   pt;
     // TRACE0("gui_mch_post_balloon {{{");
@@ -4928,11 +4915,11 @@
 
 /*ARGSUSED*/
     BalloonEval *
-gui_mch_create_beval_area(target, mesg, mesgCB, clientData)
-    void	*target;	/* ignored, always use s_textArea */
-    char_u	*mesg;
-    void	(*mesgCB)(BalloonEval *, int);
-    void	*clientData;
+gui_mch_create_beval_area(
+    void	*target,	/* ignored, always use s_textArea */
+    char_u	*mesg,
+    void	(*mesgCB)(BalloonEval *, int),
+    void	*clientData)
 {
     /* partially stolen from gui_beval.c */
     BalloonEval	*beval;
@@ -5010,8 +4997,7 @@
 }
 
     void
-gui_mch_destroy_beval_area(beval)
-    BalloonEval	*beval;
+gui_mch_destroy_beval_area(BalloonEval *beval)
 {
     vim_free(beval);
 }
