From 8b7c2b5d4f79cf600df60a583accd04fb273c300 Mon Sep 17 00:00:00 2001 From: Paul LeoNerd Evans Date: Tue, 7 Oct 2008 03:17:06 +0100 Subject: Support a list of potential backend drivers --- termkey.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/termkey.c b/termkey.c index f7087e0..6c246a4 100644 --- a/termkey.c +++ b/termkey.c @@ -8,6 +8,11 @@ #include +static struct termkey_driver *drivers[] = { + &termkey_driver_csi, + NULL, +}; + termkey_t *termkey_new_full(int fd, int flags, size_t buffsize, int waittime) { termkey_t *tk = malloc(sizeof(*tk)); @@ -59,9 +64,19 @@ termkey_t *termkey_new_full(int fd, int flags, size_t buffsize, int waittime) for(i = 0; i < tk->nkeynames; i++) tk->keynames[i] = NULL; - tk->driver = termkey_driver_csi; + for(i = 0; drivers[i]; i++) { + void *driver_info = (*drivers[i]->new_driver)(tk); + if(!driver_info) + continue; + + tk->driver = *(drivers[i]); + tk->driver_info = driver_info; + } - tk->driver_info = (*tk->driver.new_driver)(tk); + if(!tk->driver_info) { + fprintf(stderr, "Unable to find a terminal driver\n"); + return NULL; + } // Special built-in names termkey_register_keyname(tk, TERMKEY_SYM_NONE, "NONE"); -- cgit v1.2.3-70-g09d2