1/* 2 * Utils for translating X events between their names and numbers 3 */ 4 5#include "ctwm.h" 6 7#include <stddef.h> 8#include <strings.h> 9 10#include "event_names.h" 11 12/* num->name lookup table (generated build-time) */ 13#include "event_names_table.h" 14 15 16 17/* Need this for any iteration */ 18size_t 19event_names_size(void) 20{ 21 return(sizeof(event_names) / sizeof(*event_names)); 22} 23 24 25/* Return the name for any event number */ 26const char * 27event_name_by_num(int evt) 28{ 29 /* Bounds */ 30 if(evt < 0 || evt >= event_names_size()) { 31 return NULL; 32 } 33 34 /* Else it's whatever is[n't] there */ 35 return event_names[evt]; 36} 37 38 39/* 40 * Find the number for a name. Technically, the index of the array is a 41 * size_t. We'd need a ssize_t to allow -1 to mean "not found". But the 42 * numbers in the X definition are ints, so that's what we'll return. 43 */ 44int 45event_num_by_name(const char *ename) 46{ 47 int i; 48 49 if(ename == NULL) { 50 return -1; 51 } 52 53 for(i = 0 ; i < event_names_size() ; i++) { 54 if(event_names[i] != NULL && strcasecmp(ename, event_names[i]) == 0) { 55 return i; 56 } 57 } 58 59 /* Not found */ 60 return -1; 61} 62