X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/085cedfc6d4bf43c6feac2150cad47aea37b106f..d2a07ad8fcc5d1afe2faeda4744e66735deedd71:/h/fmt_scan.h diff --git a/h/fmt_scan.h b/h/fmt_scan.h index b2ec6704..50b597e1 100644 --- a/h/fmt_scan.h +++ b/h/fmt_scan.h @@ -81,6 +81,21 @@ struct format { * prototypes used by the format engine */ +/* + * These are the definitions used by the callbacks for fmt_scan() + */ + +typedef char * (*formataddr_cb)(char *, char *); +typedef char * (*concataddr_cb)(char *, char *); +typedef void (*trace_cb)(void *, struct format *, int, char *, char *); + +struct fmt_callbacks { + formataddr_cb formataddr; + concataddr_cb concataddr; + trace_cb trace_func; + void * trace_context; +}; + /* * Create a new format string. Arguments are: * @@ -140,12 +155,20 @@ int fmt_compile (char *fstring, struct format **fmt, int reset); * dat[3] - %(width) * dat[4] - %(unseen) * + * callbacks - A set of a callback functions used by the format engine. + * Can be NULL. If structure elements are NULL, a default + * function will be used. Callback structure elements are: + * + * formataddr - A callback for the %(formataddr) instruction + * concataddr - A callback for the %(concataddr) instruction + * trace - Called for every format instruction executed + * * The return value is a pointer to the next format instruction to * execute, which is currently always NULL. */ struct format *fmt_scan (struct format *format, char *scanl, size_t max, - int width, int *dat); + int width, int *dat, struct fmt_callbacks *callbacks); /* * Free a format structure and/or component hash table. Arguments are: