Blame libxklavier/xklavier_dump.c

Packit 7e555f
/*
Packit 7e555f
 * Copyright (C) 2002-2006 Sergey V. Udaltsov <svu@gnome.org>
Packit 7e555f
 *
Packit 7e555f
 * This library is free software; you can redistribute it and/or
Packit 7e555f
 * modify it under the terms of the GNU Lesser General Public
Packit 7e555f
 * License as published by the Free Software Foundation; either
Packit 7e555f
 * version 2 of the License, or (at your option) any later version.
Packit 7e555f
 *
Packit 7e555f
 * This library is distributed in the hope that it will be useful,
Packit 7e555f
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 7e555f
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit 7e555f
 * Lesser General Public License for more details.
Packit 7e555f
 *
Packit 7e555f
 * You should have received a copy of the GNU Lesser General Public
Packit 7e555f
 * License along with this library; if not, write to the
Packit 7e555f
 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Packit 7e555f
 * Boston, MA 02111-1307, USA.
Packit 7e555f
 */
Packit 7e555f
Packit 7e555f
#include <string.h>
Packit 7e555f
Packit 7e555f
#include "xklavier_private.h"
Packit 7e555f
#include "xklavier_private_xkb.h"
Packit 7e555f
Packit 7e555f
#ifdef LIBXKBFILE_PRESENT
Packit 7e555f
#if 0
Packit 7e555f
static void
Packit 7e555f
_XkbModsRecDump(FILE * fs, XkbModsRec * mods)
Packit 7e555f
{
Packit 7e555f
	fprintf(fs, "flags: 0x%X\n", mods->mask);
Packit 7e555f
	fprintf(fs, "real_mods: 0x%X\n", mods->real_mods);
Packit 7e555f
	fprintf(fs, "vmods: 0x%X\n", mods->vmods);
Packit 7e555f
}
Packit 7e555f
Packit 7e555f
static void
Packit 7e555f
_XkbControlsDump(FILE * fs, XkbControlsPtr ctrls)
Packit 7e555f
{
Packit 7e555f
	gint i;
Packit 7e555f
	gchar buf[1024];
Packit 7e555f
	fprintf(fs, "mk_dflt_btn: %d\n", ctrls->mk_dflt_btn);
Packit 7e555f
	fprintf(fs, "num_groups: %d\n", ctrls->num_groups);
Packit 7e555f
	fprintf(fs, "groups_wrap: %d\n", ctrls->groups_wrap);
Packit 7e555f
	fprintf(fs, "internal: \n");
Packit 7e555f
	_XkbModsRecDump(fs, &ctrls->internal);
Packit 7e555f
	fprintf(fs, "ignore_lock: \n");
Packit 7e555f
	_XkbModsRecDump(fs, &ctrls->ignore_lock);
Packit 7e555f
	fprintf(fs, "enabled_ctrls: 0x%X\n", ctrls->enabled_ctrls);
Packit 7e555f
	fprintf(fs, "repeat_delay: %d\n", ctrls->repeat_delay);
Packit 7e555f
	fprintf(fs, "repeat_interval: %d\n", ctrls->repeat_interval);
Packit 7e555f
	fprintf(fs, "slow_keys_delay: %d\n", ctrls->slow_keys_delay);
Packit 7e555f
	fprintf(fs, "debounce_delay: %d\n", ctrls->debounce_delay);
Packit 7e555f
	fprintf(fs, "mk_delay: %d\n", ctrls->mk_delay);
Packit 7e555f
	fprintf(fs, "mk_interval: %d\n", ctrls->mk_interval);
Packit 7e555f
	fprintf(fs, "mk_time_to_max: %d\n", ctrls->mk_time_to_max);
Packit 7e555f
	fprintf(fs, "mk_max_speed: %d\n", ctrls->mk_max_speed);
Packit 7e555f
	fprintf(fs, "mk_curve: %d\n", ctrls->mk_curve);
Packit 7e555f
	fprintf(fs, "ax_options: %d\n", ctrls->ax_options);
Packit 7e555f
	fprintf(fs, "ax_timeout: %d\n", ctrls->ax_timeout);
Packit 7e555f
	fprintf(fs, "axt_opts_mask: 0x%X\n", ctrls->axt_opts_mask);
Packit 7e555f
	fprintf(fs, "axt_opts_values: 0x%X\n", ctrls->axt_opts_values);
Packit 7e555f
	fprintf(fs, "axt_ctrls_mask: 0x%X\n", ctrls->axt_ctrls_mask);
Packit 7e555f
	fprintf(fs, "axt_ctrls_values: 0x%X\n", ctrls->axt_ctrls_values);
Packit 7e555f
	fprintf(fs, "axt_ctrls_values: 0x%X\n", ctrls->axt_ctrls_values);
Packit 7e555f
	fprintf(fs, "per_key_repeat:\n");
Packit 7e555f
	buf[0] = 0;
Packit 7e555f
	for (i = 0; i < XkbPerKeyBitArraySize; i++) {
Packit 7e555f
		gchar b[5];
Packit 7e555f
		snprintf(b, sizeof(b), "%d ", ctrls->per_key_repeat[i]);
Packit 7e555f
		strcat(buf, b);
Packit 7e555f
	}
Packit 7e555f
	fprintf(fs, "  %s\n", buf);
Packit 7e555f
}
Packit 7e555f
#endif
Packit 7e555f
Packit 7e555f
static const gchar *action_type_names[] = {
Packit 7e555f
	"XkbSA_NoAction",
Packit 7e555f
	"XkbSA_SetMods",
Packit 7e555f
	"XkbSA_LatchMods",
Packit 7e555f
	"XkbSA_LockMods",
Packit 7e555f
	"XkbSA_SetGroup",
Packit 7e555f
	"XkbSA_LatchGroup",
Packit 7e555f
	"XkbSA_LockGroup",
Packit 7e555f
	"XkbSA_MovePtr",
Packit 7e555f
	"XkbSA_PtrBtn",
Packit 7e555f
	"XkbSA_LockPtrBtn",
Packit 7e555f
	"XkbSA_SetPtrDflt",
Packit 7e555f
	"XkbSA_ISOLock",
Packit 7e555f
	"XkbSA_Terminate",
Packit 7e555f
	"XkbSA_SwitchScreen",
Packit 7e555f
	"XkbSA_SetControls",
Packit 7e555f
	"XkbSA_LockControls",
Packit 7e555f
	"XkbSA_ActionMessage",
Packit 7e555f
	"XkbSA_RedirectKey",
Packit 7e555f
	"XkbSA_DeviceBtn",
Packit 7e555f
	"XkbSA_LockDeviceBtn",
Packit 7e555f
	"XkbSA_DeviceValuator"
Packit 7e555f
};
Packit 7e555f
Packit 7e555f
static void
Packit 7e555f
xkb_action_dump(FILE * fs, gint level, XkbAction * act)
Packit 7e555f
{
Packit 7e555f
	XkbGroupAction *ga;
Packit 7e555f
	fprintf(fs, "%*stype: %d(%s)\n", level, "", act->type,
Packit 7e555f
		action_type_names[act->type]);
Packit 7e555f
	switch (act->type) {
Packit 7e555f
	case XkbSA_SetGroup:
Packit 7e555f
	case XkbSA_LatchGroup:
Packit 7e555f
	case XkbSA_LockGroup:
Packit 7e555f
		ga = (XkbGroupAction *) act;
Packit 7e555f
		fprintf(fs, "%*sXkbGroupAction: \n", level, "");
Packit 7e555f
		fprintf(fs, "%*sflags: %d\n", level, "", ga->flags);
Packit 7e555f
		fprintf(fs, "%*sgroup_XXX: %d\n", level, "",
Packit 7e555f
			ga->group_XXX);
Packit 7e555f
		break;
Packit 7e555f
	}
Packit 7e555f
}
Packit 7e555f
Packit 7e555f
static void
Packit 7e555f
xkb_behavior_dump(FILE * fs, gint level, XkbBehavior * b)
Packit 7e555f
{
Packit 7e555f
	fprintf(fs, "%*stype: %d\n", level, "", b->type);
Packit 7e555f
	fprintf(fs, "%*sdata: %d\n", level, "", b->data);
Packit 7e555f
}
Packit 7e555f
Packit 7e555f
static void
Packit 7e555f
xkb_server_map_dump(FILE * fs, gint level, XkbServerMapPtr server,
Packit 7e555f
		    XkbDescPtr kbd)
Packit 7e555f
{
Packit 7e555f
	gint i;
Packit 7e555f
	XkbAction *pa = server->acts;
Packit 7e555f
	XkbBehavior *pb = server->behaviors;
Packit 7e555f
	fprintf(fs, "%*snum_acts: %d\n", level, "", server->num_acts);
Packit 7e555f
	fprintf(fs, "%*ssize_acts: %d\n", level, "", server->size_acts);
Packit 7e555f
	if (server->acts != NULL) {
Packit 7e555f
		for (i = 0; i < server->num_acts; i++) {
Packit 7e555f
			fprintf(fs, "%*sacts[%d]:\n", level, "", i);
Packit 7e555f
			xkb_action_dump(fs, level + 2, pa++);
Packit 7e555f
		}
Packit 7e555f
	} else
Packit 7e555f
		fprintf(fs, "%*sNO acts\n", level, "");
Packit 7e555f
Packit 7e555f
	if (server->key_acts != NULL) {
Packit 7e555f
		for (i = 0; i <= kbd->max_key_code; i++) {
Packit 7e555f
			fprintf(fs,
Packit 7e555f
				"%*skey_acts[%d]: offset %d, total %d\n",
Packit 7e555f
				level, "", i, server->key_acts[i],
Packit 7e555f
				XkbKeyNumSyms(kbd, i));
Packit 7e555f
		}
Packit 7e555f
	} else
Packit 7e555f
		fprintf(fs, "%*sNO key_acts\n", level, "");
Packit 7e555f
Packit 7e555f
	for (i = 0; i < XkbNumVirtualMods; i++) {
Packit 7e555f
		fprintf(fs, "%*svmod[%d]: %X\n", level, "", i,
Packit 7e555f
			server->vmods[i]);
Packit 7e555f
	}
Packit 7e555f
Packit 7e555f
	if (server->behaviors != NULL) {
Packit 7e555f
		for (i = 0; i <= kbd->max_key_code; i++) {
Packit 7e555f
			fprintf(fs, "%*sbehaviors[%d]:\n", level, "", i);
Packit 7e555f
			xkb_behavior_dump(fs, level + 2, pb++);
Packit 7e555f
		}
Packit 7e555f
	} else
Packit 7e555f
		fprintf(fs, "%*sNO behaviors\n", level, "");
Packit 7e555f
Packit 7e555f
	if (server->explicit != NULL) {
Packit 7e555f
		for (i = 0; i <= kbd->max_key_code; i++) {
Packit 7e555f
			fprintf(fs, "%*sexplicit[%d]: %d\n", level, "", i,
Packit 7e555f
				server->explicit[i]);
Packit 7e555f
		}
Packit 7e555f
	} else
Packit 7e555f
		fprintf(fs, "%*sNO explicit\n", level, "");
Packit 7e555f
Packit 7e555f
	if (server->vmodmap != NULL) {
Packit 7e555f
		for (i = 0; i <= kbd->max_key_code; i++) {
Packit 7e555f
			fprintf(fs, "%*svmodmap[%d]: %d\n", level, "", i,
Packit 7e555f
				server->vmodmap[i]);
Packit 7e555f
		}
Packit 7e555f
	} else
Packit 7e555f
		fprintf(fs, "%*sNO vmodmap\n", level, "");
Packit 7e555f
}
Packit 7e555f
Packit 7e555f
static void
Packit 7e555f
xkb_key_type_dump(FILE * fs, gint level, XkbKeyTypePtr type,
Packit 7e555f
		  XklEngine * engine)
Packit 7e555f
{
Packit 7e555f
	gchar *z =
Packit 7e555f
	    type->name ==
Packit 7e555f
	    None ? NULL : XGetAtomName(xkl_engine_get_display(engine),
Packit 7e555f
				       type->name);
Packit 7e555f
	fprintf(fs, "%*sname: 0x%X(%s)\n", level, "", (gint) type->name,
Packit 7e555f
		z);
Packit 7e555f
	if (z != NULL)
Packit 7e555f
		XFree(z);
Packit 7e555f
}
Packit 7e555f
Packit 7e555f
static void
Packit 7e555f
xkb_sym_map_dump(FILE * fs, gint level, XkbSymMapPtr ksm)
Packit 7e555f
{
Packit 7e555f
	gint i;
Packit 7e555f
	fprintf(fs, "%*skt_index: ", level, "");
Packit 7e555f
	for (i = 0; i < XkbNumKbdGroups; i++) {
Packit 7e555f
		fprintf(fs, "%d ", ksm->kt_index[i]);
Packit 7e555f
	}
Packit 7e555f
	fprintf(fs, "\n%*sgroup_info: %d\n", level, "", ksm->group_info);
Packit 7e555f
	fprintf(fs, "%*swidth: %d\n", level, "", ksm->width);
Packit 7e555f
	fprintf(fs, "%*soffset: %d\n", level, "", ksm->offset);
Packit 7e555f
}
Packit 7e555f
Packit 7e555f
static void
Packit 7e555f
xkb_client_map_dump(FILE * fs, gint level, XkbClientMapPtr map,
Packit 7e555f
		    XkbDescPtr kbd, XklEngine * engine)
Packit 7e555f
{
Packit 7e555f
	gint i;
Packit 7e555f
	fprintf(fs, "%*ssize_types: %d\n", level, "", map->size_types);
Packit 7e555f
	fprintf(fs, "%*snum_types: %d\n", level, "", map->num_types);
Packit 7e555f
	if (map->types != NULL) {
Packit 7e555f
		XkbKeyTypePtr type = map->types;
Packit 7e555f
		for (i = 0; i < map->num_types; i++) {
Packit 7e555f
			fprintf(fs, "%*stypes[%d]:\n", level, "", i);
Packit 7e555f
			xkb_key_type_dump(fs, level + 2, type++, engine);
Packit 7e555f
		}
Packit 7e555f
	} else
Packit 7e555f
		fprintf(fs, "%*sNO types\n", level, "");
Packit 7e555f
Packit 7e555f
	fprintf(fs, "%*ssize_syms: %d\n", level, "", map->size_syms);
Packit 7e555f
	fprintf(fs, "%*snum_syms: %d\n", level, "", map->num_syms);
Packit 7e555f
	if (map->syms != NULL) {
Packit 7e555f
		for (i = 0; i < map->num_syms; i++)
Packit 7e555f
			fprintf(fs, "%*ssyms[%d]:0x%lX(%s)\n", level, "",
Packit 7e555f
				i, map->syms[i],
Packit 7e555f
				XKeysymToString(map->syms[i]));
Packit 7e555f
	} else
Packit 7e555f
		fprintf(fs, "%*sNO syms\n", level, "");
Packit 7e555f
	if (map->key_sym_map != NULL) {
Packit 7e555f
		XkbSymMapPtr ksm = map->key_sym_map;
Packit 7e555f
		for (i = 0; i <= kbd->max_key_code; i++) {
Packit 7e555f
			fprintf(fs, "%*skey_sym_map[%d]:\n", level, "", i);
Packit 7e555f
			xkb_sym_map_dump(fs, level + 2, ksm++);
Packit 7e555f
		}
Packit 7e555f
	} else
Packit 7e555f
		fprintf(fs, "%*sNO key_sym_map\n", level, "");
Packit 7e555f
}
Packit 7e555f
Packit 7e555f
static void
Packit 7e555f
xkb_desc_dump(FILE * fs, gint level, XkbDescPtr kbd, XklEngine * engine)
Packit 7e555f
{
Packit 7e555f
	fprintf(fs, "%*sflags: 0x%X\n", level, "", kbd->flags);
Packit 7e555f
	fprintf(fs, "%*sdevice_spec: %d\n", level, "", kbd->device_spec);
Packit 7e555f
	fprintf(fs, "%*smin_key_code: %d\n", level, "", kbd->min_key_code);
Packit 7e555f
	fprintf(fs, "%*smax_key_code: %d\n", level, "", kbd->max_key_code);
Packit 7e555f
#if 0
Packit 7e555f
	if (kbd->ctrls != NULL) {
Packit 7e555f
		fprintf(fs, "ctrls:\n");
Packit 7e555f
		_XkbControlsDump(fs, kbd->ctrls);
Packit 7e555f
	} else
Packit 7e555f
		fprintf(fs, "NO server\n");
Packit 7e555f
#endif
Packit 7e555f
	if (kbd->server != NULL) {
Packit 7e555f
		fprintf(fs, "%*sserver:\n", level, "");
Packit 7e555f
		xkb_server_map_dump(fs, level + 2, kbd->server, kbd);
Packit 7e555f
	} else
Packit 7e555f
		fprintf(fs, "%*sNO server\n", level, "");
Packit 7e555f
Packit 7e555f
	if (kbd->map != NULL) {
Packit 7e555f
		fprintf(fs, "%*smap:\n", level, "");
Packit 7e555f
		xkb_client_map_dump(fs, level + 2, kbd->map, kbd, engine);
Packit 7e555f
	} else
Packit 7e555f
		fprintf(fs, "%*sNO map\n", level, "");
Packit 7e555f
	fprintf(fs, "XKB libraries not present\n");
Packit 7e555f
}
Packit 7e555f
Packit 7e555f
void
Packit 7e555f
xkl_engine_dump_xkb_desc(XklEngine * engine, const gchar * file_name,
Packit 7e555f
			 XkbDescPtr kbd)
Packit 7e555f
{
Packit 7e555f
	FILE *fs = fopen(file_name, "w+");
Packit 7e555f
	if (fs != NULL) {
Packit 7e555f
		xkb_desc_dump(fs, 0,
Packit 7e555f
			      kbd == NULL ? xkl_engine_backend(engine,
Packit 7e555f
							       XklXkb,
Packit 7e555f
							       cached_desc)
Packit 7e555f
			      : kbd, engine);
Packit 7e555f
		fclose(fs);
Packit 7e555f
	}
Packit 7e555f
Packit 7e555f
}
Packit 7e555f
#endif