summaryrefslogtreecommitdiffstats
path: root/contrib/ncurses/ncurses/base/lib_driver.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/ncurses/ncurses/base/lib_driver.c')
-rw-r--r--contrib/ncurses/ncurses/base/lib_driver.c22
1 files changed, 18 insertions, 4 deletions
diff --git a/contrib/ncurses/ncurses/base/lib_driver.c b/contrib/ncurses/ncurses/base/lib_driver.c
index 4048760..6301a58 100644
--- a/contrib/ncurses/ncurses/base/lib_driver.c
+++ b/contrib/ncurses/ncurses/base/lib_driver.c
@@ -1,5 +1,5 @@
/****************************************************************************
- * Copyright (c) 2008-2009,2010 Free Software Foundation, Inc. *
+ * Copyright (c) 2008-2010,2012 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
@@ -33,7 +33,7 @@
#include <curses.priv.h>
-MODULE_ID("$Id: lib_driver.c,v 1.3 2010/12/20 00:29:17 tom Exp $")
+MODULE_ID("$Id: lib_driver.c,v 1.4 2012/09/22 19:32:46 tom Exp $")
typedef struct DriverEntry {
const char *name;
@@ -43,9 +43,9 @@ typedef struct DriverEntry {
static DRIVER_ENTRY DriverTable[] =
{
#ifdef __MINGW32__
- {"win", &_nc_WIN_DRIVER},
+ {"win32con", &_nc_WIN_DRIVER},
#endif
- {"tinfo", &_nc_TINFO_DRIVER}
+ {"tinfo", &_nc_TINFO_DRIVER} /* must be last */
};
NCURSES_EXPORT(int)
@@ -63,6 +63,20 @@ _nc_get_driver(TERMINAL_CONTROL_BLOCK * TCB, const char *name, int *errret)
for (i = 0; i < SIZEOF(DriverTable); i++) {
res = DriverTable[i].driver;
+ /*
+ * Use "#" (a character which cannot begin a terminal's name) to
+ * select specific driver from the table.
+ *
+ * In principle, we could have more than one non-terminfo driver,
+ * e.g., "win32gui".
+ */
+ if (name != 0 && *name == '#') {
+ size_t n = strlen(name + 1);
+ if (n != 0
+ && strncmp(name + 1, DriverTable[i].name, n)) {
+ continue;
+ }
+ }
if (res->CanHandle(TCB, name, errret)) {
use = res;
break;
OpenPOWER on IntegriCloud