This is kbd.h in view mode; [Download] [Up]
/* Key-map handler Copyright (C) 1992 Joseph H. Allen This file is part of JOE (Joe's Own Editor) JOE is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 1, or (at your option) any later version. JOE is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with JOE; see the file COPYING. If not, write to the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifndef _Ikbd #define _Ikbd 1 #include "config.h" #include "scrn.h" typedef struct kmap KMAP; typedef struct kbd KBD; #define KEYS 256 typedef struct key KEY; /* A key binding */ struct key { int k; /* Flag: 0=binding, 1=submap */ union { void *bind; /* What key is bound to */ KMAP *submap; /* Sub KMAP address (for prefix keys) */ } value; }; /* A map of keycode to command/sub-map bindings */ struct kmap { KEY keys[KEYS]; /* KEYs */ }; /** A keyboard handler **/ struct kbd { KMAP *curmap; /* Current keymap */ KMAP *topmap; /* Top-level keymap */ int seq[16]; /* Current sequence of keys */ int x; /* What we're up to */ }; /* KMAP *mkkmap(void); * Create an empty keymap */ KMAP *mkkmap(); /* void rmkmap(KMAP *kmap); * Free a key map */ void rmkmap(); /* int kadd(KMAP *kmap,char *seq,void *bind); * Add a key sequence binding to a key map * * Returns 0 for success * -1 for for invalid key sequence * * A valid key sequence is one or more keys seperated with spaces. A key * is a single character or one of the following strings: * * ^? 127 (DEL) * * ^@ - ^_ Control characters * * SP 32 (space character) * * UP, DOWN, LEFT, RIGHT, * F0 - F10, DEL, INS, HOME, * END, PGUP, PGDN termcap special characters * * In addition, the last key of a key sequence may be replaced with * a range-fill of the form: <KEY> TO <KEY> * * So for example, if the sequence: ^K A TO Z * is speicified, then the key sequences * ^K A, ^K B, ^K C, ... ^K Z are all bound. */ int kadd(); /* void kcpy(KMAP *dest,KMAP *src); * Copy all of the entries in the 'src' keymap into the 'dest' keymap */ void kcpy(); /* int kdel(KMAP *kmap,char *seq); * Delete a binding from a keymap * * Returns 0 for success * -1 if the given key sequence was invalid * 1 if the given key sequence did not exist */ int kdel(); /* KBD *mkkbd(KMAP *kmap); Create a keyboard handler which uses the given keymap */ KBD *mkkbd(); /* void rmkbd(KBD *); * * Eliminate a keyboard handler */ void rmkbd(); /* void *dokey(KBD *kbd,int k); Handle a key for a KBD: Returns 0 for invalid or prefix keys Returns binding for a completed key sequence */ void *dokey(); #endif
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.