Pass driver_info as explicit void* parameter into driver methods

This commit is contained in:
Paul LeoNerd Evans 2008-11-08 17:47:57 +00:00
parent 9969e197ba
commit e880602944
4 changed files with 18 additions and 18 deletions

View File

@ -130,9 +130,9 @@ abort_free_csi:
return NULL;
}
static void free_driver(void *private)
static void free_driver(void *info)
{
termkey_csi *csi = private;
termkey_csi *csi = info;
free(csi->csifuncs); csi->csifuncs = NULL;
@ -286,12 +286,12 @@ static termkey_result getkey_ss3(termkey_t *tk, termkey_csi *csi, size_t introle
return TERMKEY_RES_KEY;
}
static termkey_result getkey(termkey_t *tk, termkey_key *key, int force)
static termkey_result getkey(termkey_t *tk, void *info, termkey_key *key, int force)
{
if(tk->buffcount == 0)
return tk->is_closed ? TERMKEY_RES_EOF : TERMKEY_RES_NONE;
termkey_csi *csi = tk->driver_info;
termkey_csi *csi = info;
// Now we're sure at least 1 byte is valid
unsigned char b0 = CHARAT(0);

View File

@ -77,7 +77,7 @@ abort_free_ti:
return NULL;
}
static void start_driver(termkey_t *tk)
static void start_driver(termkey_t *tk, void *info)
{
/* The terminfo database will contain keys in application cursor key mode.
* We may need to enable that mode
@ -88,7 +88,7 @@ static void start_driver(termkey_t *tk)
}
}
static void stop_driver(termkey_t *tk)
static void stop_driver(termkey_t *tk, void *info)
{
if(keypad_local) {
// Can't call putp or tputs because they suck and don't give us fd control
@ -96,15 +96,15 @@ static void stop_driver(termkey_t *tk)
}
}
static void free_driver(void *private)
static void free_driver(void *info)
{
}
#define CHARAT(i) (tk->buffer[tk->buffstart + (i)])
static termkey_result getkey(termkey_t *tk, termkey_key *key, int force)
static termkey_result getkey(termkey_t *tk, void *info, termkey_key *key, int force)
{
termkey_ti *ti = tk->driver_info;
termkey_ti *ti = info;
if(tk->buffcount == 0)
return tk->is_closed ? TERMKEY_RES_EOF : TERMKEY_RES_NONE;

View File

@ -9,10 +9,10 @@
struct termkey_driver
{
void *(*new_driver)(termkey_t *tk, const char *term);
void (*free_driver)(void *);
void (*start_driver)(termkey_t *tk);
void (*stop_driver)(termkey_t *tk);
termkey_result (*getkey)(termkey_t *tk, termkey_key *key, int force);
void (*free_driver)(void *info);
void (*start_driver)(termkey_t *tk, void *info);
void (*stop_driver)(termkey_t *tk, void *info);
termkey_result (*getkey)(termkey_t *tk, void *info, termkey_key *key, int force);
};
struct keyinfo {

View File

@ -186,7 +186,7 @@ termkey_t *termkey_new_full(int fd, int flags, size_t buffsize, int waittime)
}
if(tk->driver.start_driver)
(*tk->driver.start_driver)(tk);
(*tk->driver.start_driver)(tk, tk->driver_info);
return tk;
@ -221,7 +221,7 @@ void termkey_free(termkey_t *tk)
void termkey_destroy(termkey_t *tk)
{
if(tk->driver.stop_driver)
(*tk->driver.stop_driver)(tk);
(*tk->driver.stop_driver)(tk, tk->driver_info);
if(tk->restore_termios_valid)
tcsetattr(tk->fd, TCSANOW, &tk->restore_termios);
@ -375,7 +375,7 @@ static termkey_result getkey_simple(termkey_t *tk, termkey_key *key, int force)
tk->buffcount--;
// Run the full driver
termkey_result metakey_result = (*tk->driver.getkey)(tk, key, force);
termkey_result metakey_result = (*tk->driver.getkey)(tk, tk->driver_info, key, force);
tk->buffstart--;
tk->buffcount++;
@ -497,12 +497,12 @@ static termkey_result getkey_simple(termkey_t *tk, termkey_key *key, int force)
termkey_result termkey_getkey(termkey_t *tk, termkey_key *key)
{
return (*tk->driver.getkey)(tk, key, 0);
return (*tk->driver.getkey)(tk, tk->driver_info, key, 0);
}
termkey_result termkey_getkey_force(termkey_t *tk, termkey_key *key)
{
return (*tk->driver.getkey)(tk, key, 1);
return (*tk->driver.getkey)(tk, tk->driver_info, key, 1);
}
termkey_result termkey_waitkey(termkey_t *tk, termkey_key *key)