diff --git a/src/regexp.c b/src/regexp.c
index b761641..041928a 100644
--- a/src/regexp.c
+++ b/src/regexp.c
@@ -334,11 +334,11 @@
 
 /* Used for an error (down from) vim_regcomp(): give the error message, set
  * rc_did_emsg and return NULL */
-#define EMSG_RET_NULL(m) return (EMSG(m), rc_did_emsg = TRUE, (void *)NULL)
-#define IEMSG_RET_NULL(m) return (IEMSG(m), rc_did_emsg = TRUE, (void *)NULL)
-#define EMSG_RET_FAIL(m) return (EMSG(m), rc_did_emsg = TRUE, FAIL)
-#define EMSG2_RET_NULL(m, c) return (EMSG2((m), (c) ? "" : "\\"), rc_did_emsg = TRUE, (void *)NULL)
-#define EMSG2_RET_FAIL(m, c) return (EMSG2((m), (c) ? "" : "\\"), rc_did_emsg = TRUE, FAIL)
+#define EMSG_RET_NULL(m) return (emsg((m)), rc_did_emsg = TRUE, (void *)NULL)
+#define IEMSG_RET_NULL(m) return (iemsg((m)), rc_did_emsg = TRUE, (void *)NULL)
+#define EMSG_RET_FAIL(m) return (emsg((m)), rc_did_emsg = TRUE, FAIL)
+#define EMSG2_RET_NULL(m, c) return (semsg((const char *)(m), (c) ? "" : "\\"), rc_did_emsg = TRUE, (void *)NULL)
+#define EMSG2_RET_FAIL(m, c) return (semsg((const char *)(m), (c) ? "" : "\\"), rc_did_emsg = TRUE, FAIL)
 #define EMSG_ONE_RET_NULL EMSG2_RET_NULL(_("E369: invalid item in %s%%[]"), reg_magic == MAGIC_ALL)
 
 
@@ -1304,7 +1304,7 @@
 		break;
 	if (*p == NUL)
 	{
-	    EMSG(_("E65: Illegal back reference"));
+	    emsg(_("E65: Illegal back reference"));
 	    rc_did_emsg = TRUE;
 	    return FALSE;
 	}
@@ -1902,7 +1902,7 @@
 	else
 	    sprintf((char *)IObuff, _("E62: Nested %s%c"),
 		reg_magic == MAGIC_ALL ? "" : "\\", no_Magic(peekchr()));
-	EMSG_RET_NULL(IObuff);
+	EMSG_RET_NULL((char *)IObuff);
     }
 
     return ret;
@@ -2078,7 +2078,7 @@
 	sprintf((char *)IObuff, _("E64: %s%c follows nothing"),
 		(c == '*' ? reg_magic >= MAGIC_ON : reg_magic == MAGIC_ALL)
 		? "" : "\\", c);
-	EMSG_RET_NULL(IObuff);
+	EMSG_RET_NULL((char *)IObuff);
 	/* NOTREACHED */
 
       case Magic('~'):		/* previous substitute pattern */
@@ -3406,7 +3406,7 @@
     {
 	sprintf((char *)IObuff, _("E554: Syntax error in %s{...}"),
 					  reg_magic == MAGIC_ALL ? "" : "\\");
-	EMSG_RET_FAIL(IObuff);
+	EMSG_RET_FAIL((char *)IObuff);
     }
 
     /*
@@ -3826,7 +3826,7 @@
     /* Be paranoid... */
     if (prog == NULL || line == NULL)
     {
-	EMSG(_(e_null));
+	emsg(_(e_null));
 	goto theend;
     }
 
@@ -5241,7 +5241,7 @@
 		     * a regstar_T on the regstack. */
 		    if ((long)((unsigned)regstack.ga_len >> 10) >= p_mmp)
 		    {
-			EMSG(_(e_maxmempat));
+			emsg(_(e_maxmempat));
 			status = RA_FAIL;
 		    }
 		    else if (ga_grow(&regstack, sizeof(regstar_T)) == FAIL)
@@ -5286,7 +5286,7 @@
 	    /* Need a bit of room to store extra positions. */
 	    if ((long)((unsigned)regstack.ga_len >> 10) >= p_mmp)
 	    {
-		EMSG(_(e_maxmempat));
+		emsg(_(e_maxmempat));
 		status = RA_FAIL;
 	    }
 	    else if (ga_grow(&regstack, sizeof(regbehind_T)) == FAIL)
@@ -5338,7 +5338,7 @@
 	    break;
 
 	  default:
-	    EMSG(_(e_re_corr));
+	    emsg(_(e_re_corr));
 #ifdef DEBUG
 	    printf("Illegal op code %d\n", op);
 #endif
@@ -5748,7 +5748,7 @@
 	     * We get here only if there's trouble -- normally "case END" is
 	     * the terminating point.
 	     */
-	    EMSG(_(e_re_corr));
+	    emsg(_(e_re_corr));
 #ifdef DEBUG
 	    printf("Premature EOL\n");
 #endif
@@ -5772,7 +5772,7 @@
 
     if ((long)((unsigned)regstack.ga_len >> 10) >= p_mmp)
     {
-	EMSG(_(e_maxmempat));
+	emsg(_(e_maxmempat));
 	return NULL;
     }
     if (ga_grow(&regstack, sizeof(regitem_T)) == FAIL)
@@ -6185,7 +6185,7 @@
 	break;
 
       default:			/* Oh dear.  Called inappropriately. */
-	EMSG(_(e_re_corr));
+	emsg(_(e_re_corr));
 #ifdef DEBUG
 	printf("Called regrepeat with op code %d\n", OP(p));
 #endif
@@ -6236,7 +6236,7 @@
 
     if (UCHARAT(((bt_regprog_T *)prog)->program) != REGMAGIC)
     {
-	EMSG(_(e_re_corr));
+	emsg(_(e_re_corr));
 	return TRUE;
     }
     return FALSE;
@@ -7487,7 +7487,7 @@
     /* Be paranoid... */
     if ((source == NULL && expr == NULL) || dest == NULL)
     {
-	EMSG(_(e_null));
+	emsg(_(e_null));
 	return 0;
     }
     if (prog_magic_wrong())
@@ -7790,7 +7790,7 @@
 		    else if (*s == NUL) /* we hit NUL. */
 		    {
 			if (copy)
-			    EMSG(_(e_re_damg));
+			    emsg(_(e_re_damg));
 			goto exit;
 		    }
 		    else
@@ -8120,13 +8120,13 @@
 	    regexp_engine = expr[4] - '0';
 	    expr += 5;
 #ifdef DEBUG
-	    smsg((char_u *)"New regexp mode selected (%d): %s",
+	    smsg("New regexp mode selected (%d): %s",
 					   regexp_engine, regname[newengine]);
 #endif
 	}
 	else
 	{
-	    EMSG(_("E864: \\%#= can only be followed by 0, 1, or 2. The automatic engine will be used "));
+	    emsg(_("E864: \\%#= can only be followed by 0, 1, or 2. The automatic engine will be used "));
 	    regexp_engine = AUTOMATIC_ENGINE;
 	}
     }
@@ -8158,7 +8158,7 @@
 		fclose(f);
 	    }
 	    else
-		EMSG2("(NFA) Could not open \"%s\" to write !!!",
+		semsg("(NFA) Could not open \"%s\" to write !!!",
 			BT_REGEXP_DEBUG_LOG_NAME);
 	}
 #endif
@@ -8241,7 +8241,7 @@
     // Cannot use the same prog recursively, it contains state.
     if (rmp->regprog->re_in_use)
     {
-	EMSG(_(e_recursive));
+	emsg(_(e_recursive));
 	return FALSE;
     }
     rmp->regprog->re_in_use = TRUE;
@@ -8365,7 +8365,7 @@
     // Cannot use the same prog recursively, it contains state.
     if (rmp->regprog->re_in_use)
     {
-	EMSG(_(e_recursive));
+	emsg(_(e_recursive));
 	return FALSE;
     }
     rmp->regprog->re_in_use = TRUE;
