patch 8.1.0743: giving error messages is not flexible

Problem:    Giving error messages is not flexible.
Solution:   Add semsg().  Change argument from "char_u *" to "char *", also
            for msg() and get rid of most MSG macros. (Ozaki Kiichi, closes
            #3302)  Also make emsg() accept a "char *" argument.  Get rid of
            an enormous number of type casts.
diff --git a/src/term.c b/src/term.c
index 131e31b..cccc94c 100644
--- a/src/term.c
+++ b/src/term.c
@@ -92,7 +92,7 @@
 static int term_7to8bit(char_u *p);
 
 #ifdef HAVE_TGETENT
-static char_u *tgetent_error(char_u *, char_u *);
+static char *tgetent_error(char_u *, char_u *);
 
 /*
  * Here is our own prototype for tgetstr(), any prototypes from the include
@@ -1357,7 +1357,7 @@
     t = termgui_mch_get_color(name);
 
     if (t == INVALCOLOR)
-	EMSG2(_("E254: Cannot allocate color %s"), name);
+	semsg(_("E254: Cannot allocate color %s"), name);
     return t;
 }
 
@@ -1696,14 +1696,14 @@
 #endif
 
     static void
-report_term_error(char_u *error_msg, char_u *term)
+report_term_error(char *error_msg, char_u *term)
 {
     struct builtin_term *termp;
 
     mch_errmsg("\r\n");
     if (error_msg != NULL)
     {
-	mch_errmsg((char *)error_msg);
+	mch_errmsg(error_msg);
 	mch_errmsg("\r\n");
     }
     mch_errmsg("'");
@@ -1756,7 +1756,7 @@
     int		termcap_cleared = FALSE;
 #endif
     int		width = 0, height = 0;
-    char_u	*error_msg = NULL;
+    char	*error_msg = NULL;
     char_u	*bs_p, *del_p;
 
     /* In silect mode (ex -s) we don't use the 'term' option. */
@@ -2191,7 +2191,7 @@
  * Call tgetent()
  * Return error message if it fails, NULL if it's OK.
  */
-    static char_u *
+    static char *
 tgetent_error(char_u *tbuf, char_u *term)
 {
     int	    i;
@@ -2210,13 +2210,13 @@
 
 	if (i < 0)
 # ifdef TGETENT_ZERO_ERR
-	    return (char_u *)_("E557: Cannot open termcap file");
+	    return _("E557: Cannot open termcap file");
 	if (i == 0)
 # endif
 #ifdef TERMINFO
-	    return (char_u *)_("E558: Terminal entry not found in terminfo");
+	    return _("E558: Terminal entry not found in terminfo");
 #else
-	    return (char_u *)_("E559: Terminal entry not found in termcap");
+	    return _("E559: Terminal entry not found in termcap");
 #endif
     }
     return NULL;
@@ -2282,7 +2282,7 @@
     char_u  tbuf[TBUFSZ];
     char_u  tstrbuf[TBUFSZ];
     char_u  *tp = tstrbuf;
-    char_u  *error_msg = NULL;
+    char    *error_msg = NULL;
 #endif
 
 /*
@@ -2369,10 +2369,10 @@
     {
 #ifdef HAVE_TGETENT
 	if (error_msg != NULL)
-	    EMSG(error_msg);
+	    emsg(error_msg);
 	else
 #endif
-	    EMSG2(_("E436: No \"%s\" entry in termcap"), name);
+	    semsg(_("E436: No \"%s\" entry in termcap"), name);
     }
     return FAIL;
 }
@@ -3055,7 +3055,7 @@
      * MUST have "cm": cursor motion.
      */
     if (*T_CM == NUL)
-	EMSG(_("E437: terminal capability \"cm\" required"));
+	emsg(_("E437: terminal capability \"cm\" required"));
 
     /*
      * if "cs" defined, use a scroll region, it's faster.
@@ -6153,7 +6153,7 @@
 	    if (STRNICMP(src, "<SID>", 5) == 0)
 	    {
 		if (current_sctx.sc_sid <= 0)
-		    EMSG(_(e_usingsid));
+		    emsg(_(e_usingsid));
 		else
 		{
 		    src += 5;