Add some debug prints to the C side

This commit is contained in:
Lassi Kortela 2023-02-15 14:38:26 +02:00
parent 541f2e1769
commit 1792ddc8ae
1 changed files with 53 additions and 0 deletions

View File

@ -5,6 +5,8 @@
* functions to lookup and execute events. * functions to lookup and execute events.
*/ */
#include <stdarg.h>
#include "unroff.h" #include "unroff.h"
#define NUM_VEC_EVENTS 6 #define NUM_VEC_EVENTS 6
@ -42,6 +44,28 @@ static char *event_names[] = {
"character event", "character event",
}; };
int debug_flag = 0;
void debug_printf(const char *format, ...) {
va_list ap;
if (!debug_flag) return;
va_start(ap, format);
vfprintf(stderr, format, ap);
va_end(ap);
}
void debug_string(const char *bytes, int nbytes) {
char *string;
if (!debug_flag) return;
string = safe_malloc(nbytes + 1);
memcpy(string, bytes, nbytes);
string[nbytes] = '\0';
debug_printf("%s", string);
free(string);
}
static Object make_event_object(Object x) { static Object make_event_object(Object x) {
switch (TYPE(x)) { switch (TYPE(x)) {
case T_Null: case T_Null:
@ -64,6 +88,9 @@ static Object store_event(Table *tp, char *key, int size, Object obj,
Elem *oldp; Elem *oldp;
Object ret = False; Object ret = False;
debug_printf("store_event ");
debug_string(key, size);
debug_printf("\n");
if ((oldp = table_lookup(tp, key, size)) != 0) if ((oldp = table_lookup(tp, key, size)) != 0)
ret = get_object(oldp->obj); ret = get_object(oldp->obj);
if (!Nullp(obj)) { if (!Nullp(obj)) {
@ -184,9 +211,35 @@ Object p_chardef(Object key) {
return def_char_event(chars, key, Null); return def_char_event(chars, key, Null);
} }
const char *event_name(Event e) {
switch (e) {
#define ENAME(x) case x: return #x;
ENAME(EV_REQUEST);
ENAME(EV_MACRO);
ENAME(EV_STRING);
ENAME(EV_NUMREG);
ENAME(EV_SPECIAL);
ENAME(EV_ESCAPE);
ENAME(EV_CHAR);
ENAME(EV_EQUATION);
ENAME(EV_SENTENCE);
ENAME(EV_LINE);
ENAME(EV_PROLOG);
ENAME(EV_EPILOG);
ENAME(EV_OPTION);
ENAME(EV_START);
ENAME(EV_EXIT);
#undef ENAME
}
return "???";
}
Elem *event_lookup(Event e, char *key, int size) { Elem *event_lookup(Event e, char *key, int size) {
Elem *p; Elem *p;
debug_printf("event_lookup %s ", event_name(e));
debug_string(key, size);
debug_printf("\n");
if (key && size == 0) { if (key && size == 0) {
switch(e) { switch(e) {
case EV_REQUEST: case EV_REQUEST: