diff --git a/src/if_tcl.c b/src/if_tcl.c
index a5b80d4..c4f85fa 100644
--- a/src/if_tcl.c
+++ b/src/if_tcl.c
@@ -67,10 +67,10 @@
  */
 
 #include "vim.h"
-#undef EXTERN			/* tcl.h defines it too */
+#undef EXTERN			// tcl.h defines it too
 
 #ifdef DYNAMIC_TCL
-# define USE_TCL_STUBS /* use tcl's stubs mechanism */
+# define USE_TCL_STUBS // use tcl's stubs mechanism
 #endif
 
 #include <tcl.h>
@@ -106,7 +106,7 @@
 #define VIMOUT	((ClientData)1)
 #define VIMERR	((ClientData)2)
 
-/* This appears to be new in Tcl 8.4. */
+// This appears to be new in Tcl 8.4.
 #ifndef CONST84
 # define CONST84
 #endif
@@ -123,9 +123,9 @@
     struct ref	*next;
 
     Tcl_Interp	*interp;
-    Tcl_Command cmd;	    /* Tcl command that represents this object */
-    Tcl_Obj	*delcmd;    /* Tcl command to call when object is being del. */
-    void	*vimobj;    /* Vim window or buffer (win_T* or buf_T*) */
+    Tcl_Command cmd;	    // Tcl command that represents this object
+    Tcl_Obj	*delcmd;    // Tcl command to call when object is being del.
+    void	*vimobj;    // Vim window or buffer (win_T* or buf_T*)
 };
 static char * tclgetbuffer _ANSI_ARGS_((Tcl_Interp *interp, buf_T *buf));
 static char * tclgetwindow _ANSI_ARGS_((Tcl_Interp *interp, win_T *win));
@@ -142,11 +142,11 @@
 static void tclerrmsg _ANSI_ARGS_((char *text));
 static void tclupdatevars _ANSI_ARGS_((void));
 
-static struct ref refsdeleted;	/* dummy object for deleted ref list */
+static struct ref refsdeleted;	// dummy object for deleted ref list
 
-/*****************************************************************************
- * TCL interface manager
- ****************************************************************************/
+//////////////////////////////////////////////////////////////////////////////
+// TCL interface manager
+////////////////////////////////////////////////////////////////////////////
 
 #if defined(DYNAMIC_TCL) || defined(PROTO)
 # ifndef DYNAMIC_TCL_DLL
@@ -156,7 +156,7 @@
 #  define DYNAMIC_TCL_VER "8.3"
 # endif
 
-# ifndef  DYNAMIC_TCL /* Just generating prototypes */
+# ifndef  DYNAMIC_TCL // Just generating prototypes
 typedef int HANDLE;
 # endif
 
@@ -230,7 +230,7 @@
     }
     return OK;
 }
-#endif /* defined(DYNAMIC_TCL) || defined(PROTO) */
+#endif // defined(DYNAMIC_TCL) || defined(PROTO)
 
 #ifdef DYNAMIC_TCL
 static char *find_executable_arg = NULL;
@@ -270,7 +270,7 @@
 		Tcl_DeleteInterp(interp);
 		stubs_initialized = TRUE;
 	    }
-	    /* FIXME: When Tcl_InitStubs() was failed, how delete interp? */
+	    // FIXME: When Tcl_InitStubs() was failed, how delete interp?
 	}
     }
     return stubs_initialized;
@@ -289,9 +289,9 @@
 #endif
 }
 
-/****************************************************************************
-  Tcl commands
- ****************************************************************************/
+/////////////////////////////////////////////////////////////////////////////
+// Tcl commands
+////////////////////////////////////////////////////////////////////////////
 
 /*
  * Replace standard "exit" command.
@@ -321,7 +321,7 @@
 	case 2:
 	    if (Tcl_GetIntFromObj(interp, objv[1], &value) != TCL_OK)
 		break;
-	    /* FALLTHROUGH */
+	    // FALLTHROUGH
 	case 1:
 	    tclinfo.exitvalue = value;
 
@@ -402,7 +402,7 @@
 	Tcl_SetResult(interp, _("invalid buffer number"), TCL_STATIC);
 	return TCL_ERROR;
     }
-    Tcl_ResetResult(interp); /* clear error from Tcl_GetIntFromObj */
+    Tcl_ResetResult(interp); // clear error from Tcl_GetIntFromObj
 
     err = Tcl_GetIndexFromObj(interp, objv[1], bcmdoptions, "option", 0, &idx);
     if (err != TCL_OK)
@@ -576,7 +576,7 @@
 	     * Get line number of last line.
 	     */
 	    opt = 1;
-	    /* fallthrough */
+	    // fallthrough
 	case BUF_COUNT:
 	    /*
 	     * Get number of lines in buffer.
@@ -639,7 +639,7 @@
 			err = TCL_ERROR;
 		}
 	    }
-	    else {  /* objc == 3 */
+	    else {  // objc == 3
 		line = (char *)ml_get_buf(buf, (linenr_T)val1, FALSE);
 		Tcl_SetResult(interp, line, TCL_VOLATILE);
 	    }
@@ -725,7 +725,7 @@
 		}
 		if (i < lc)
 		{
-		    /* append lines */
+		    // append lines
 		    do
 		    {
 			line = Tcl_GetStringFromObj(lv[i], NULL);
@@ -738,7 +738,7 @@
 		}
 		else if (n <= val2)
 		{
-		    /* did not replace all lines, delete */
+		    // did not replace all lines, delete
 		    i = n;
 		    do
 		    {
@@ -747,13 +747,13 @@
 			++n;
 		    } while (n <= val2);
 		}
-		lc -= val2 - val1 + 1;	/* number of lines to be replaced */
+		lc -= val2 - val1 + 1;	// number of lines to be replaced
 		mark_adjust((linenr_T)val1, (linenr_T)val2, (long)MAXLNUM,
 								    (long)lc);
 		changed_lines((linenr_T)val1, 0, (linenr_T)val2 + 1, (long)lc);
 		break;
     setListError:
-		u_undo(1);  /* ??? */
+		u_undo(1);  // ???
 		Tcl_SetResult(interp, _("cannot set line(s)"), TCL_STATIC);
 		err = TCL_ERROR;
 	    }
@@ -838,7 +838,7 @@
 
 	case BUF_INSERT:
 	    opt = 1;
-	    /* fallthrough */
+	    // fallthrough
 	case BUF_APPEND:
 	    if (objc != 4)
 	    {
@@ -1078,7 +1078,7 @@
 		if (err != TCL_OK)
 		    break;
 	    }
-	    else {  /* objc == 4 */
+	    else {  // objc == 4
 		err = tclgetlinenum(interp, objv[2], &val1, win->w_buffer);
 		if (err != TCL_OK)
 		    break;
@@ -1086,7 +1086,7 @@
 		if (err != TCL_OK)
 		    break;
 	    }
-	    /* TODO: should check column */
+	    // TODO: should check column
 	    win->w_cursor.lnum = val1;
 	    win->w_cursor.col = col2vim(val2);
 	    win->w_set_curswant = TRUE;
@@ -1145,9 +1145,9 @@
     return tclvimexpr(interp, objc, objv, 1);
 }
 
-/****************************************************************************
-  Support functions for Tcl commands
- ****************************************************************************/
+/////////////////////////////////////////////////////////////////////////////
+// Support functions for Tcl commands
+////////////////////////////////////////////////////////////////////////////
 
 /*
  * Get a line number from 'obj' and convert it to vim's range.
@@ -1215,7 +1215,7 @@
 	if (win->w_buffer == buf)
 	    return win;
     }
-    return curwin;  /* keep current window context */
+    return curwin;  // keep current window context
 }
 
 /*
@@ -1267,7 +1267,7 @@
 	--emsg_off;
     err = vimerror(interp);
 
-    /* If the ex command created a new Tcl interpreter, remove it */
+    // If the ex command created a new Tcl interpreter, remove it
     if (tclinfo.interp)
 	tcldelthisinterp();
     memcpy(&tclinfo, &saveinfo, sizeof(tcl_info));
@@ -1325,7 +1325,7 @@
     {
 	if (isnum)
 	{
-	    sval = NULL;    /* avoid compiler warning */
+	    sval = NULL;    // avoid compiler warning
 	    err = Tcl_GetIndexFromObj(interp, objv[objn], optkw, "", 0, &idx);
 	    if (err != TCL_OK)
 	    {
@@ -1440,11 +1440,11 @@
     static char *
 tclgetref(
     Tcl_Interp	*interp,
-    void	**refstartP,	/* ptr to w_tcl_ref/b_tcl-ref member of
-				   win_T/buf_T struct */
-    char	*prefix,	/* "win" or "buf" */
-    void	*vimobj,	/* win_T* or buf_T* */
-    Tcl_ObjCmdProc *proc)	/* winselfcmd or bufselfcmd */
+    void	**refstartP,	// ptr to w_tcl_ref/b_tcl-ref member of
+				// win_T/buf_T struct
+    char	*prefix,	// "win" or "buf"
+    void	*vimobj,	// win_T* or buf_T*
+    Tcl_ObjCmdProc *proc)	// winselfcmd or bufselfcmd
 {
     struct ref *ref, *unused = NULL;
     static char name[VARNAME_SIZE];
@@ -1481,7 +1481,7 @@
 	    (*refstartP) = (void *)ref;
 	}
 
-	/* This might break on some exotic systems... */
+	// This might break on some exotic systems...
 	vim_snprintf(name, sizeof(name), "::vim::%s_%lx",
 					       prefix, (unsigned long)vimobj);
 	cmd = Tcl_CreateObjCommand(interp, name, proc,
@@ -1534,23 +1534,23 @@
 	}
 	reflist = reflist->next;
     }
-    /* This should never happen.  Famous last word? */
+    // This should never happen.  Famous last word?
     emsg(_("E280: TCL FATAL ERROR: reflist corrupt!? Please report this to vim-dev@vim.org"));
     Tcl_SetResult(interp, _("cannot register callback command: buffer/window reference not found"), TCL_STATIC);
     return TCL_ERROR;
 }
 
 
-/*******************************************
-    I/O Channel
-********************************************/
+////////////////////////////////////////////
+//    I/O Channel
+////////////////////////////////////////////
 
     static int
 tcl_channel_close(ClientData instance, Tcl_Interp *interp UNUSED)
 {
     int		err = 0;
 
-    /* currently does nothing */
+    // currently does nothing
 
     if (instance != VIMOUT && instance != VIMERR)
     {
@@ -1568,7 +1568,7 @@
     int		*errptr)
 {
 
-    /* input is currently not supported */
+    // input is currently not supported
 
     Tcl_SetErrno(EINVAL);
     if (errptr)
@@ -1586,10 +1586,9 @@
     char_u	*str;
     int		result;
 
-    /* The buffer is not guaranteed to be 0-terminated, and we don't if
-     * there is enough room to add a '\0'.  So we have to create a copy
-     * of the buffer...
-     */
+    // The buffer is not guaranteed to be 0-terminated, and we don't if
+    // there is enough room to add a '\0'.  So we have to create a copy
+    // of the buffer...
     str = vim_strnsave((char_u *)buf, bufsiz);
     if (!str)
     {
@@ -1635,43 +1634,43 @@
 
 static Tcl_ChannelType tcl_channel_type =
 {
-    "vimmessage",	/* typeName */
-    TCL_CHANNEL_VERSION_2, /* version */
-    tcl_channel_close,	/* closeProc */
-    tcl_channel_input,	/* inputProc */
-    tcl_channel_output,	/* outputProc */
-    NULL,		/* seekProc */
-    NULL,		/* setOptionProc */
-    NULL,		/* getOptionProc */
-    tcl_channel_watch,	/* watchProc */
-    tcl_channel_gethandle, /* getHandleProc */
-    NULL,		/* close2Proc */
-    NULL,		/* blockModeProc */
+    "vimmessage",	// typeName
+    TCL_CHANNEL_VERSION_2, // version
+    tcl_channel_close,	// closeProc
+    tcl_channel_input,	// inputProc
+    tcl_channel_output,	// outputProc
+    NULL,		// seekProc
+    NULL,		// setOptionProc
+    NULL,		// getOptionProc
+    tcl_channel_watch,	// watchProc
+    tcl_channel_gethandle, // getHandleProc
+    NULL,		// close2Proc
+    NULL,		// blockModeProc
 #ifdef TCL_CHANNEL_VERSION_2
-    NULL,		/* flushProc */
-    NULL,		/* handlerProc */
+    NULL,		// flushProc
+    NULL,		// handlerProc
 #endif
-/* The following should not be necessary since TCL_CHANNEL_VERSION_2 was
- * set above */
+// The following should not be necessary since TCL_CHANNEL_VERSION_2 was
+// set above
 #ifdef TCL_CHANNEL_VERSION_3
-    NULL,		/* wideSeekProc */
+    NULL,		// wideSeekProc
 #endif
 #ifdef TCL_CHANNEL_VERSION_4
-    NULL,		/* threadActionProc */
+    NULL,		// threadActionProc
 #endif
 #ifdef TCL_CHANNEL_VERSION_5
-    NULL		/* truncateProc */
+    NULL		// truncateProc
 #endif
 };
 
-/**********************************
-  Interface to vim
- **********************************/
+///////////////////////////////////
+// Interface to vim
+//////////////////////////////////
 
     static void
 tclupdatevars(void)
 {
-    char varname[VARNAME_SIZE];	/* must be writeable */
+    char varname[VARNAME_SIZE];	// must be writeable
     char *name;
 
     strcpy(varname, VAR_RANGE1);
@@ -1699,7 +1698,7 @@
     static int
 tclinit(exarg_T *eap)
 {
-    char varname[VARNAME_SIZE];	/* Tcl_LinkVar requires writeable varname */
+    char varname[VARNAME_SIZE];	// Tcl_LinkVar requires writeable varname
     char *name;
 
 #ifdef DYNAMIC_TCL
@@ -1715,9 +1714,9 @@
 	Tcl_Interp *interp;
 	static Tcl_Channel ch1, ch2;
 
-	/* Create replacement channels for stdout and stderr; this has to be
-	 * done each time an interpreter is created since the channels are closed
-	 * when the interpreter is deleted */
+	// Create replacement channels for stdout and stderr; this has to be
+	// done each time an interpreter is created since the channels are closed
+	// when the interpreter is deleted
 	ch1 = Tcl_CreateChannel(&tcl_channel_type, "vimout", VIMOUT, TCL_WRITABLE);
 	ch2 = Tcl_CreateChannel(&tcl_channel_type, "vimerr", VIMERR, TCL_WRITABLE);
 	Tcl_SetStdChannel(ch1, TCL_STDOUT);
@@ -1732,7 +1731,7 @@
 	    return FAIL;
 	}
 #if 0
-	/* VIM sure is interactive */
+	// VIM sure is interactive
 	Tcl_SetVar(interp, "tcl_interactive", "1", TCL_GLOBAL_ONLY);
 #endif
 
@@ -1745,12 +1744,12 @@
 	Tcl_SetChannelOption(interp, ch2, "-translation", "lf");
 #endif
 
-	/* replace standard Tcl exit command */
+	// replace standard Tcl exit command
 	Tcl_DeleteCommand(interp, "exit");
 	Tcl_CreateObjCommand(interp, "exit", exitcmd,
 	    (ClientData)NULL, (Tcl_CmdDeleteProc *)NULL);
 
-	/* new commands, in ::vim namespace */
+	// new commands, in ::vim namespace
 	Tcl_CreateObjCommand(interp, "::vim::buffer", buffercmd,
 	    (ClientData)NULL, (Tcl_CmdDeleteProc *)NULL);
 	Tcl_CreateObjCommand(interp, "::vim::window", windowcmd,
@@ -1764,12 +1763,12 @@
 	Tcl_CreateObjCommand(interp, "::vim::expr", exprcmd,
 	   (ClientData)NULL, (Tcl_CmdDeleteProc *)NULL);
 
-	/* "lbase" variable */
+	// "lbase" variable
 	tclinfo.lbase = 1;
 	strcpy(varname, VAR_LBASE);
 	Tcl_LinkVar(interp, varname, (char *)&tclinfo.lbase, TCL_LINK_INT);
 
-	/* "range" variable */
+	// "range" variable
 	tclinfo.range_start = eap->line1;
 	strcpy(varname, VAR_RANGE1);
 	Tcl_LinkVar(interp, varname, (char *)&tclinfo.range_start, TCL_LINK_INT|TCL_LINK_READ_ONLY);
@@ -1779,7 +1778,7 @@
 	strcpy(varname, VAR_RANGE3);
 	Tcl_LinkVar(interp, varname, (char *)&tclinfo.range_end, TCL_LINK_INT|TCL_LINK_READ_ONLY);
 
-	/* "current" variable */
+	// "current" variable
 	tclinfo.curbuf = Tcl_Alloc(VARNAME_SIZE);
 	tclinfo.curwin = Tcl_Alloc(VARNAME_SIZE);
 	name = tclgetbuffer(interp, curbuf);
@@ -1795,7 +1794,7 @@
     }
     else
     {
-	/* Interpreter already exists, just update variables */
+	// Interpreter already exists, just update variables
 	tclinfo.range_start = row2tcl(eap->line1);
 	tclinfo.range_end = row2tcl(eap->line2);
 	tclupdatevars();
@@ -1841,15 +1840,14 @@
     if (!Tcl_InterpDeleted(tclinfo.interp))
 	Tcl_DeleteInterp(tclinfo.interp);
     Tcl_Release(tclinfo.interp);
-    /* The interpreter is now gets deleted.  All registered commands (esp.
-     * window and buffer commands) are deleted, triggering their deletion
-     * callback, which deletes all refs pointing to this interpreter.
-     * We could garbage-collect the unused ref structs in all windows and
-     * buffers, but unless the user creates hundreds of sub-interpreters
-     * all referring to lots of windows and buffers, this is hardly worth
-     * the effort.  Unused refs are recycled by other interpreters, and
-     * all refs are free'd when the window/buffer gets closed by vim.
-     */
+    // The interpreter is now gets deleted.  All registered commands (esp.
+    // window and buffer commands) are deleted, triggering their deletion
+    // callback, which deletes all refs pointing to this interpreter.
+    // We could garbage-collect the unused ref structs in all windows and
+    // buffers, but unless the user creates hundreds of sub-interpreters
+    // all referring to lots of windows and buffers, this is hardly worth
+    // the effort.  Unused refs are recycled by other interpreters, and
+    // all refs are free'd when the window/buffer gets closed by vim.
 
     tclinfo.interp = NULL;
     Tcl_Free(tclinfo.curbuf);
@@ -1862,9 +1860,9 @@
 {
     int newerr = OK;
 
-    if (Tcl_InterpDeleted(tclinfo.interp)     /* True if we intercepted Tcl's exit command */
+    if (Tcl_InterpDeleted(tclinfo.interp)     // True if we intercepted Tcl's exit command
 #if (TCL_MAJOR_VERSION == 8 && TCL_MINOR_VERSION >= 5) || TCL_MAJOR_VERSION > 8
-	|| Tcl_LimitExceeded(tclinfo.interp)  /* True if the interpreter cannot continue */
+	|| Tcl_LimitExceeded(tclinfo.interp)  // True if the interpreter cannot continue
 #endif
 	)
     {
@@ -1954,7 +1952,7 @@
 {
     char	*script, *line;
     int		err, rs, re, lnum;
-    char	var_lnum[VARNAME_SIZE]; /* must be writeable memory */
+    char	var_lnum[VARNAME_SIZE]; // must be writeable memory
     char	var_line[VARNAME_SIZE];
     linenr_T	first_line = 0;
     linenr_T	last_line = 0;
@@ -2035,7 +2033,7 @@
     char	*result;
 
 #ifdef DYNAMIC_TCL
-    /* TODO: this code currently crashes Vim on exit */
+    // TODO: this code currently crashes Vim on exit
     if (exiting)
 	return;
 #endif
@@ -2070,7 +2068,7 @@
     struct ref *reflist;
 
 #ifdef DYNAMIC_TCL
-    if (!stubs_initialized)	/* Not using Tcl, nothing to do. */
+    if (!stubs_initialized)	// Not using Tcl, nothing to do.
 	return;
 #endif
 
@@ -2089,7 +2087,7 @@
     struct ref *reflist;
 
 #ifdef DYNAMIC_TCL
-    if (!stubs_initialized)	/* Not using Tcl, nothing to do. */
+    if (!stubs_initialized)	// Not using Tcl, nothing to do.
 	return;
 #endif
 
@@ -2102,4 +2100,4 @@
     }
 }
 
-/* The End */
+// The End
