// ansiTerm.h -- ANSI terminal widget API #ifndef ANSITERM_H #define ANSITERM_H #include "../../core/dvxWgt.h" typedef struct { WidgetT *(*create)(WidgetT *parent, int32_t cols, int32_t rows); void (*write)(WidgetT *w, const uint8_t *data, int32_t len); void (*clear)(WidgetT *w); void (*setComm)(WidgetT *w, void *ctx, int32_t (*readFn)(void *, uint8_t *, int32_t), int32_t (*writeFn)(void *, const uint8_t *, int32_t)); void (*setScrollback)(WidgetT *w, int32_t maxLines); void (*poll)(WidgetT *w); int32_t (*repaint)(WidgetT *w, int32_t *outY, int32_t *outH); } AnsiTermApiT; static inline const AnsiTermApiT *dvxAnsiTermApi(void) { static const AnsiTermApiT *sApi; if (!sApi) { sApi = (const AnsiTermApiT *)wgtGetApi("ansiterm"); } return sApi; } #define wgtAnsiTerm(parent, cols, rows) dvxAnsiTermApi()->create(parent, cols, rows) #define wgtAnsiTermWrite(w, data, len) dvxAnsiTermApi()->write(w, data, len) #define wgtAnsiTermClear(w) dvxAnsiTermApi()->clear(w) #define wgtAnsiTermSetComm(w, ctx, readFn, writeFn) dvxAnsiTermApi()->setComm(w, ctx, readFn, writeFn) #define wgtAnsiTermSetScrollback(w, maxLines) dvxAnsiTermApi()->setScrollback(w, maxLines) #define wgtAnsiTermPoll(w) dvxAnsiTermApi()->poll(w) #define wgtAnsiTermRepaint(w, outY, outH) dvxAnsiTermApi()->repaint(w, outY, outH) #endif // ANSITERM_H