10bbfda8aSnia/* 20bbfda8aSnia * Utils for translating X events between their names and numbers 30bbfda8aSnia */ 40bbfda8aSnia 50bbfda8aSnia#include "ctwm.h" 60bbfda8aSnia 70bbfda8aSnia#include <stddef.h> 80bbfda8aSnia#include <strings.h> 90bbfda8aSnia 100bbfda8aSnia#include "event_names.h" 110bbfda8aSnia 120bbfda8aSnia/* num->name lookup table (generated build-time) */ 130bbfda8aSnia#include "event_names_table.h" 140bbfda8aSnia 150bbfda8aSnia 160bbfda8aSnia 170bbfda8aSnia/* Need this for any iteration */ 180bbfda8aSniasize_t 190bbfda8aSniaevent_names_size(void) 200bbfda8aSnia{ 210bbfda8aSnia return(sizeof(event_names) / sizeof(*event_names)); 220bbfda8aSnia} 230bbfda8aSnia 240bbfda8aSnia 250bbfda8aSnia/* Return the name for any event number */ 260bbfda8aSniaconst char * 270bbfda8aSniaevent_name_by_num(int evt) 280bbfda8aSnia{ 290bbfda8aSnia /* Bounds */ 300bbfda8aSnia if(evt < 0 || evt >= event_names_size()) { 310bbfda8aSnia return NULL; 320bbfda8aSnia } 330bbfda8aSnia 340bbfda8aSnia /* Else it's whatever is[n't] there */ 350bbfda8aSnia return event_names[evt]; 360bbfda8aSnia} 370bbfda8aSnia 380bbfda8aSnia 390bbfda8aSnia/* 400bbfda8aSnia * Find the number for a name. Technically, the index of the array is a 410bbfda8aSnia * size_t. We'd need a ssize_t to allow -1 to mean "not found". But the 420bbfda8aSnia * numbers in the X definition are ints, so that's what we'll return. 430bbfda8aSnia */ 440bbfda8aSniaint 450bbfda8aSniaevent_num_by_name(const char *ename) 460bbfda8aSnia{ 470bbfda8aSnia int i; 480bbfda8aSnia 490bbfda8aSnia if(ename == NULL) { 500bbfda8aSnia return -1; 510bbfda8aSnia } 520bbfda8aSnia 530bbfda8aSnia for(i = 0 ; i < event_names_size() ; i++) { 540bbfda8aSnia if(event_names[i] != NULL && strcasecmp(ename, event_names[i]) == 0) { 550bbfda8aSnia return i; 560bbfda8aSnia } 570bbfda8aSnia } 580bbfda8aSnia 590bbfda8aSnia /* Not found */ 600bbfda8aSnia return -1; 610bbfda8aSnia} 62