#include "keymap.h" RAVEN_key_pair RAVEN_key_pair_create(RAVEN_SYS_KEY syskey,RAVEN_KEY_CODE rekey) { RAVEN_key_pair kp={rekey,syskey}; return kp; } RAVEN_key_map *RAVEN_key_map_create() { RAVEN_key_map *keymap; keymap=(RAVEN_key_map *)malloc(sizeof(RAVEN_key_map)); keymap->numpairs=0; keymap->keypairs=NULL; return keymap; } void RAVEN_key_map_destroy(RAVEN_key_map *keymap) { if (keymap->keypairs!=NULL) free(keymap->keypairs); free(keymap); } void RAVEN_key_map_add_pair(RAVEN_key_map *keymap,RAVEN_key_pair keypair) { RAVEN_key_pair *tempbuf; if (keymap->keypairs) { keymap->numpairs++; tempbuf=realloc(keymap->keypairs,sizeof(RAVEN_key_pair)*keymap->numpairs); keymap->keypairs=tempbuf; } else { keymap->numpairs++; keymap->keypairs=malloc(sizeof(RAVEN_key_pair)); } keymap->keypairs[keymap->numpairs-1]=keypair; } RAVEN_KEY_CODE RAVEN_key_map_get_code(RAVEN_key_map *keymap,RAVEN_SYS_KEY syskey) { register int i; if (!keymap->keypairs) return 0; if (keymap->numpairs==0) return 0; for (i=0; inumpairs; ++i) { if (keymap->keypairs[i].syskey==syskey) return keymap->keypairs[i].rekey; } return 0; } int kpcompare(const void *v0,const void *v1) { const RAVEN_key_pair *k0,*k1; k0=(RAVEN_key_pair *)v0; k1=(RAVEN_key_pair *)v1; if(k0->syskeysyskey) return -1; else if(k0->syskey==k1->syskey) return 0; else return 1; } void RAVEN_key_map_sort(RAVEN_key_map *keymap) { qsort(keymap->keypairs,keymap->numpairs,sizeof(RAVEN_key_pair),kpcompare); }