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