]> ncurses.scripts.mit.edu Git - ncurses.git/blobdiff - ncurses/base/keyok.c
ncurses 5.6
[ncurses.git] / ncurses / base / keyok.c
index e3b4be297c17aa96960c774b9d5a6329317c989e..4c9950600c33830ba295fbb237894e03cd918988 100644 (file)
@@ -1,5 +1,5 @@
 /****************************************************************************
- * Copyright (c) 1998,2000 Free Software Foundation, Inc.                   *
+ * Copyright (c) 1998-2000,2006 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            *
@@ -32,7 +32,7 @@
 
 #include <curses.priv.h>
 
-MODULE_ID("$Id: keyok.c,v 1.5 2000/12/10 02:43:26 tom Exp $")
+MODULE_ID("$Id: keyok.c,v 1.6 2006/06/17 18:18:43 tom Exp $")
 
 /*
  * Enable (or disable) ncurses' interpretation of a keycode by adding (or
@@ -52,21 +52,24 @@ keyok(int c, bool flag)
     char *s;
 
     T((T_CALLED("keyok(%d,%d)"), c, flag));
-    if (flag) {
-       while ((s = _nc_expand_try(SP->_key_ok, c, &count, 0)) != 0
-              && _nc_remove_key(&(SP->_key_ok), c)) {
-           _nc_add_to_try(&(SP->_keytry), s, c);
-           free(s);
-           code = OK;
-           count = 0;
-       }
-    } else {
-       while ((s = _nc_expand_try(SP->_keytry, c, &count, 0)) != 0
-              && _nc_remove_key(&(SP->_keytry), c)) {
-           _nc_add_to_try(&(SP->_key_ok), s, c);
-           free(s);
-           code = OK;
-           count = 0;
+    if (c >= 0) {
+       unsigned ch = (unsigned) c;
+       if (flag) {
+           while ((s = _nc_expand_try(SP->_key_ok, ch, &count, 0)) != 0
+                  && _nc_remove_key(&(SP->_key_ok), ch)) {
+               _nc_add_to_try(&(SP->_keytry), s, ch);
+               free(s);
+               code = OK;
+               count = 0;
+           }
+       } else {
+           while ((s = _nc_expand_try(SP->_keytry, ch, &count, 0)) != 0
+                  && _nc_remove_key(&(SP->_keytry), ch)) {
+               _nc_add_to_try(&(SP->_key_ok), s, ch);
+               free(s);
+               code = OK;
+               count = 0;
+           }
        }
     }
     returnCode(code);