-#define mdoc_perr(m, l, p, t) \
- mdoc_err((m), (l), (p), 1, (t))
-#define mdoc_pwarn(m, l, p, t) \
- mdoc_err((m), (l), (p), 0, (t))
-#define mdoc_nerr(m, n, t) \
- mdoc_err((m), (n)->line, (n)->pos, 1, (t))
-#define mdoc_nwarn(m, n, t) \
- mdoc_err((m), (n)->line, (n)->pos, 0, (t))
-
-int mdoc_err(struct mdoc *, int, int, int, enum merr);
-int mdoc_verr(struct mdoc *, int, int, const char *, ...);
-int mdoc_vwarn(struct mdoc *, int, int, const char *, ...);
-
+#define mdoc_pmsg(m, l, p, t) \
+ (*(m)->msg)((t), (m)->data, (l), (p), NULL)
+#define mdoc_nmsg(m, n, t) \
+ (*(m)->msg)((t), (m)->data, (n)->line, (n)->pos, NULL)
+int mdoc_vmsg(struct mdoc *, enum mandocerr,
+ int, int, const char *, ...);