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/proto/buffer.pro b/src/proto/buffer.pro
index 91494db..5e1aa7a 100644
--- a/src/proto/buffer.pro
+++ b/src/proto/buffer.pro
@@ -8,7 +8,7 @@
 void buf_freeall(buf_T *buf, int flags);
 void goto_buffer(exarg_T *eap, int start, int dir, int count);
 void handle_swap_exists(bufref_T *old_curbuf);
-char_u *do_bufdel(int command, char_u *arg, int addr_count, int start_bnr, int end_bnr, int forceit);
+char *do_bufdel(int command, char_u *arg, int addr_count, int start_bnr, int end_bnr, int forceit);
 int do_buffer(int action, int start, int dir, int count, int forceit);
 void set_curbuf(buf_T *buf, int action);
 void enter_buffer(buf_T *buf);
diff --git a/src/proto/digraph.pro b/src/proto/digraph.pro
index 37dc2b2..06b3341 100644
--- a/src/proto/digraph.pro
+++ b/src/proto/digraph.pro
@@ -5,7 +5,7 @@
 int getdigraph(int char1, int char2, int meta_char);
 void putdigraph(char_u *str);
 void listdigraphs(int use_headers);
-char_u *keymap_init(void);
+char *keymap_init(void);
 void ex_loadkeymap(exarg_T *eap);
 void keymap_clear(garray_T *kmap);
 /* vim: set ft=c : */
diff --git a/src/proto/ex_docmd.pro b/src/proto/ex_docmd.pro
index ed42f1c..8f3852a 100644
--- a/src/proto/ex_docmd.pro
+++ b/src/proto/ex_docmd.pro
@@ -4,15 +4,15 @@
 int do_cmdline(char_u *cmdline, char_u *(*fgetline)(int, void *, int), void *cookie, int flags);
 int getline_equal(char_u *(*fgetline)(int, void *, int), void *cookie, char_u *(*func)(int, void *, int));
 void *getline_cookie(char_u *(*fgetline)(int, void *, int), void *cookie);
-int parse_command_modifiers(exarg_T *eap, char_u **errormsg, int skip_only);
-int parse_cmd_address(exarg_T *eap, char_u **errormsg, int silent);
+int parse_command_modifiers(exarg_T *eap, char **errormsg, int skip_only);
+int parse_cmd_address(exarg_T *eap, char **errormsg, int silent);
 int checkforcmd(char_u **pp, char *cmd, int len);
 int modifier_len(char_u *cmd);
 int cmd_exists(char_u *name);
 char_u *set_one_cmd_context(expand_T *xp, char_u *buff);
 char_u *skip_range(char_u *cmd, int *ctx);
 void ex_ni(exarg_T *eap);
-int expand_filename(exarg_T *eap, char_u **cmdlinep, char_u **errormsgp);
+int expand_filename(exarg_T *eap, char_u **cmdlinep, char **errormsgp);
 void separate_nextcmd(exarg_T *eap);
 int get_bad_opt(char_u *p, exarg_T *eap);
 int ends_excmd(int c);
@@ -61,7 +61,7 @@
 void exec_normal_cmd(char_u *cmd, int remap, int silent);
 void exec_normal(int was_typed, int use_vpeekc, int may_use_terminal_loop);
 int find_cmdline_var(char_u *src, int *usedlen);
-char_u *eval_vars(char_u *src, char_u *srcstart, int *usedlen, linenr_T *lnump, char_u **errormsg, int *escaped);
+char_u *eval_vars(char_u *src, char_u *srcstart, int *usedlen, linenr_T *lnump, char **errormsg, int *escaped);
 char_u *expand_sfile(char_u *arg);
 int put_eol(FILE *fd);
 int put_line(FILE *fd, char *s);
diff --git a/src/proto/ex_eval.pro b/src/proto/ex_eval.pro
index 9274bce..34301e2 100644
--- a/src/proto/ex_eval.pro
+++ b/src/proto/ex_eval.pro
@@ -7,7 +7,7 @@
 void free_global_msglist(void);
 void do_errthrow(struct condstack *cstack, char_u *cmdname);
 int do_intthrow(struct condstack *cstack);
-char_u *get_exception_string(void *value, except_type_T type, char_u *cmdname, int *should_free);
+char *get_exception_string(void *value, except_type_T type, char_u *cmdname, int *should_free);
 void discard_current_exception(void);
 void report_make_pending(int pending, void *value);
 void report_resume_pending(int pending, void *value);
diff --git a/src/proto/ex_getln.pro b/src/proto/ex_getln.pro
index a2d7a9f..298c630 100644
--- a/src/proto/ex_getln.pro
+++ b/src/proto/ex_getln.pro
@@ -4,7 +4,7 @@
 char_u *getcmdline_prompt(int firstc, char_u *prompt, int attr, int xp_context, char_u *xp_arg);
 int text_locked(void);
 void text_locked_msg(void);
-char_u *get_text_locked_msg(void);
+char *get_text_locked_msg(void);
 int curbuf_locked(void);
 int allbuf_locked(void);
 char_u *getexline(int c, void *cookie, int indent);
diff --git a/src/proto/hardcopy.pro b/src/proto/hardcopy.pro
index 4791f4a..615f088 100644
--- a/src/proto/hardcopy.pro
+++ b/src/proto/hardcopy.pro
@@ -1,6 +1,6 @@
 /* hardcopy.c */
-char_u *parse_printoptions(void);
-char_u *parse_printmbfont(void);
+char *parse_printoptions(void);
+char *parse_printmbfont(void);
 int prt_header_height(void);
 int prt_use_number(void);
 int prt_get_unit(int idx);
diff --git a/src/proto/mbyte.pro b/src/proto/mbyte.pro
index 2ba9f1c..5b97d55 100644
--- a/src/proto/mbyte.pro
+++ b/src/proto/mbyte.pro
@@ -1,6 +1,6 @@
 /* mbyte.c */
 int enc_canon_props(char_u *name);
-char_u *mb_init(void);
+char *mb_init(void);
 int bomb_size(void);
 void remove_bom(char_u *s);
 int mb_get_class(char_u *p);
diff --git a/src/proto/message.pro b/src/proto/message.pro
index f8b6f68..9feeefb 100644
--- a/src/proto/message.pro
+++ b/src/proto/message.pro
@@ -10,13 +10,10 @@
 int emsg_not_now(void);
 void ignore_error_for_testing(char_u *error);
 void do_perror(char *msg);
-int emsg(char_u *s);
-int emsg2(char_u *s, char_u *a1);
-int emsg3(char_u *s, char_u *a1, char_u *a2);
-int emsgn(char_u *s, long n);
-void iemsg(char_u *s);
-void iemsg2(char_u *s, char_u *a1);
-void iemsgn(char_u *s, long n);
+int emsg(char *s);
+int semsg(const char *s, ...);
+void iemsg(char *s);
+void siemsg(const char *s, ...);
 void internal_error(char *where);
 void emsg_invreg(int name);
 char_u *msg_trunc_attr(char_u *s, int force, int attr);
diff --git a/src/proto/misc2.pro b/src/proto/misc2.pro
index 644fe2a..7d33de8 100644
--- a/src/proto/misc2.pro
+++ b/src/proto/misc2.pro
@@ -87,7 +87,7 @@
 int same_directory(char_u *f1, char_u *f2);
 int vim_chdirfile(char_u *fname, char *trigger_autocmd);
 int vim_stat(const char *name, stat_T *stp);
-char_u *parse_shape_opt(int what);
+char *parse_shape_opt(int what);
 int get_shape_idx(int mouse);
 void update_mouseshape(int shape_idx);
 void *vim_findfile_init(char_u *path, char_u *filename, char_u *stopdirs, int level, int free_visited, int find_what, void *search_ctx_arg, int tagfile, char_u *rel_fname);
diff --git a/src/proto/option.pro b/src/proto/option.pro
index b198c75..3da51c6 100644
--- a/src/proto/option.pro
+++ b/src/proto/option.pro
@@ -21,13 +21,13 @@
 int set_term_option_alloced(char_u **p);
 int was_set_insecurely(char_u *opt, int opt_flags);
 void set_string_option_direct(char_u *name, int opt_idx, char_u *val, int opt_flags, int set_sid);
-char_u *check_colorcolumn(win_T *wp);
-char_u *check_stl_option(char_u *s);
+char *check_colorcolumn(win_T *wp);
+char *check_stl_option(char_u *s);
 void set_term_option_sctx_idx(char *name, int opt_idx);
 int get_option_value(char_u *name, long *numval, char_u **stringval, int opt_flags);
 int get_option_value_strict(char_u *name, long *numval, char_u **stringval, int opt_type, void *from);
 char_u *option_iter_next(void **option, int opt_type);
-char_u *set_option_value(char_u *name, long number, char_u *string, int opt_flags);
+char *set_option_value(char_u *name, long number, char_u *string, int opt_flags);
 char_u *get_term_code(char_u *tname);
 char_u *get_highlight_default(void);
 char_u *get_encoding_default(void);
diff --git a/src/proto/spell.pro b/src/proto/spell.pro
index ed0c495..485d7d1 100644
--- a/src/proto/spell.pro
+++ b/src/proto/spell.pro
@@ -10,7 +10,7 @@
 void count_common_word(slang_T *lp, char_u *word, int len, int count);
 int byte_in_str(char_u *str, int n);
 int init_syl_tab(slang_T *slang);
-char_u *did_set_spelllang(win_T *wp);
+char *did_set_spelllang(win_T *wp);
 int captype(char_u *word, char_u *end);
 void spell_delete_wordlist(void);
 void spell_free_all(void);