18c9fbc29Smrg/************************************************************
28c9fbc29Smrg Copyright (c) 1994 by Silicon Graphics Computer Systems, Inc.
38c9fbc29Smrg
48c9fbc29Smrg Permission to use, copy, modify, and distribute this
58c9fbc29Smrg software and its documentation for any purpose and without
68c9fbc29Smrg fee is hereby granted, provided that the above copyright
78c9fbc29Smrg notice appear in all copies and that both that copyright
88c9fbc29Smrg notice and this permission notice appear in supporting
94cd6a3aeSmrg documentation, and that the name of Silicon Graphics not be
104cd6a3aeSmrg used in advertising or publicity pertaining to distribution
118c9fbc29Smrg of the software without specific prior written permission.
124cd6a3aeSmrg Silicon Graphics makes no representation about the suitability
138c9fbc29Smrg of this software for any purpose. It is provided "as is"
148c9fbc29Smrg without any express or implied warranty.
154cd6a3aeSmrg
164cd6a3aeSmrg SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
174cd6a3aeSmrg SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
188c9fbc29Smrg AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON
194cd6a3aeSmrg GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
204cd6a3aeSmrg DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
214cd6a3aeSmrg DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
228c9fbc29Smrg OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION  WITH
238c9fbc29Smrg THE USE OR PERFORMANCE OF THIS SOFTWARE.
248c9fbc29Smrg
258c9fbc29Smrg ********************************************************/
268c9fbc29Smrg
278c9fbc29Smrg#ifndef _XKMFORMAT_H_
288c9fbc29Smrg#define	_XKMFORMAT_H_ 1
298c9fbc29Smrg
308c9fbc29Smrg#include <X11/extensions/XKB.h>
318c9fbc29Smrg#include <X11/extensions/XKBproto.h>
328c9fbc29Smrg#include <X11/extensions/XKM.h>
338c9fbc29Smrg
348c9fbc29Smrgtypedef	struct _xkmFileInfo {
358c9fbc29Smrg	CARD8		type;
368c9fbc29Smrg	CARD8		min_kc;
378c9fbc29Smrg	CARD8		max_kc;
388c9fbc29Smrg	CARD8		num_toc;
3954044362Smrg	CARD16		present;
4054044362Smrg	CARD16		pad;
418c9fbc29Smrg} xkmFileInfo;
428c9fbc29Smrg#define	sz_xkmFileInfo	8
438c9fbc29Smrg
448c9fbc29Smrgtypedef	struct _xkmSectionInfo {
4554044362Smrg	CARD16		type;
4654044362Smrg	CARD16		format;
4754044362Smrg	CARD16		size;
4854044362Smrg	CARD16		offset;
498c9fbc29Smrg} xkmSectionInfo;
508c9fbc29Smrg#define	sz_xkmSectionInfo	8
518c9fbc29Smrg
528c9fbc29Smrgtypedef struct _xkmKeyTypeDesc {
538c9fbc29Smrg	CARD8		realMods;
548c9fbc29Smrg	CARD8		numLevels;
5554044362Smrg	CARD16		virtualMods;
568c9fbc29Smrg	CARD8		nMapEntries;
578c9fbc29Smrg	CARD8		nLevelNames;
588c9fbc29Smrg	CARD8		preserve;
598c9fbc29Smrg	CARD8		pad;
608c9fbc29Smrg} xkmKeyTypeDesc;
618c9fbc29Smrg#define	sz_xkmKeyTypeDesc	8
628c9fbc29Smrg
638c9fbc29Smrgtypedef struct _xkmKTMapEntryDesc {
648c9fbc29Smrg	CARD8		level;
658c9fbc29Smrg	CARD8		realMods;
6654044362Smrg	CARD16		virtualMods;
678c9fbc29Smrg} xkmKTMapEntryDesc;
688c9fbc29Smrg#define	sz_xkmKTMapEntryDesc	4
698c9fbc29Smrg
708c9fbc29Smrgtypedef struct _xkmModsDesc {
718c9fbc29Smrg	CARD8		realMods;
728c9fbc29Smrg	CARD8		pad;
7354044362Smrg	CARD16		virtualMods;
748c9fbc29Smrg} xkmModsDesc;
758c9fbc29Smrg#define	sz_xkmModsDesc	4
768c9fbc29Smrg
778c9fbc29Smrgtypedef struct _xkmVModMapDesc {
788c9fbc29Smrg	CARD8		key;
798c9fbc29Smrg	CARD8		pad;
8054044362Smrg	CARD16		vmods;
818c9fbc29Smrg} xkmVModMapDesc;
828c9fbc29Smrg#define	sz_xkmVModMapDesc	4
838c9fbc29Smrg
848c9fbc29Smrgtypedef struct _xkmSymInterpretDesc {
8554044362Smrg	CARD32		sym;
868c9fbc29Smrg	CARD8		mods;
878c9fbc29Smrg	CARD8		match;
888c9fbc29Smrg	CARD8		virtualMod;
898c9fbc29Smrg	CARD8		flags;
908c9fbc29Smrg	CARD8		actionType;
918c9fbc29Smrg	CARD8		actionData[7];
928c9fbc29Smrg} xkmSymInterpretDesc;
938c9fbc29Smrg#define	sz_xkmSymInterpretDesc	16
948c9fbc29Smrg
958c9fbc29Smrgtypedef struct _xkmBehaviorDesc {
968c9fbc29Smrg	CARD8		type;
978c9fbc29Smrg	CARD8		data;
9854044362Smrg	CARD16		pad;
998c9fbc29Smrg} xkmBehaviorDesc;
1008c9fbc29Smrg#define	sz_xkmBehaviorDesc	4
1018c9fbc29Smrg
1028c9fbc29Smrgtypedef struct _xkmActionDesc {
1038c9fbc29Smrg	CARD8		type;
1048c9fbc29Smrg	CARD8		data[7];
1058c9fbc29Smrg} xkmActionDesc;
1068c9fbc29Smrg#define	sz_xkmActionDesc	8
1078c9fbc29Smrg
1088c9fbc29Smrg#define	XkmKeyHasTypes		(0x0f)
1098c9fbc29Smrg#define	XkmKeyHasGroup1Type	(1<<0)
1108c9fbc29Smrg#define	XkmKeyHasGroup2Type	(1<<1)
1118c9fbc29Smrg#define	XkmKeyHasGroup3Type	(1<<2)
1128c9fbc29Smrg#define	XkmKeyHasGroup4Type	(1<<3)
1138c9fbc29Smrg#define	XkmKeyHasActions	(1<<4)
1148c9fbc29Smrg#define	XkmKeyHasBehavior	(1<<5)
1158c9fbc29Smrg#define	XkmRepeatingKey		(1<<6)
1168c9fbc29Smrg#define	XkmNonRepeatingKey	(1<<7)
1178c9fbc29Smrg
1188c9fbc29Smrgtypedef struct _xkmKeySymMapDesc {
1198c9fbc29Smrg	CARD8		width;
1208c9fbc29Smrg	CARD8		num_groups;
1218c9fbc29Smrg	CARD8		modifier_map;
1228c9fbc29Smrg	CARD8		flags;
1238c9fbc29Smrg} xkmKeySymMapDesc;
1248c9fbc29Smrg#define sz_xkmKeySymMapDesc	4
1258c9fbc29Smrg
1268c9fbc29Smrgtypedef struct _xkmIndicatorMapDesc {
1278c9fbc29Smrg	CARD8		indicator;
1288c9fbc29Smrg	CARD8		flags;
1298c9fbc29Smrg	CARD8		which_mods;
1308c9fbc29Smrg	CARD8		real_mods;
13154044362Smrg	CARD16		vmods;
1328c9fbc29Smrg	CARD8		which_groups;
1338c9fbc29Smrg	CARD8		groups;
13454044362Smrg	CARD32		ctrls;
1358c9fbc29Smrg} xkmIndicatorMapDesc;
1368c9fbc29Smrg#define sz_xkmIndicatorMapDesc	12
1378c9fbc29Smrg
1388c9fbc29Smrgtypedef struct _xkmGeometryDesc {
13954044362Smrg	CARD16		width_mm;
14054044362Smrg	CARD16		height_mm;
1418c9fbc29Smrg	CARD8		base_color_ndx;
1428c9fbc29Smrg	CARD8		label_color_ndx;
14354044362Smrg	CARD16		num_properties;
14454044362Smrg	CARD16		num_colors;
14554044362Smrg	CARD16		num_shapes;
14654044362Smrg	CARD16		num_sections;
14754044362Smrg	CARD16		num_doodads;
14854044362Smrg	CARD16		num_key_aliases;
14954044362Smrg	CARD16		pad1;
1508c9fbc29Smrg} xkmGeometryDesc;
1518c9fbc29Smrg#define	sz_xkmGeometryDesc	20
1528c9fbc29Smrg
1538c9fbc29Smrgtypedef struct _xkmPointDesc {
15454044362Smrg	INT16		x;
15554044362Smrg	INT16		y;
1568c9fbc29Smrg} xkmPointDesc;
1578c9fbc29Smrg#define	sz_xkmPointDesc		4
1588c9fbc29Smrg
1598c9fbc29Smrgtypedef	struct _xkmOutlineDesc {
1608c9fbc29Smrg	CARD8		num_points;
1618c9fbc29Smrg	CARD8		corner_radius;
16254044362Smrg	CARD16		pad;
1638c9fbc29Smrg} xkmOutlineDesc;
1648c9fbc29Smrg#define	sz_xkmOutlineDesc	4
1658c9fbc29Smrg
1668c9fbc29Smrgtypedef struct _xkmShapeDesc {
1678c9fbc29Smrg	CARD8		num_outlines;
1688c9fbc29Smrg	CARD8		primary_ndx;
1698c9fbc29Smrg	CARD8		approx_ndx;
1708c9fbc29Smrg	CARD8		pad;
1714cd6a3aeSmrg} xkmShapeDesc;
1728c9fbc29Smrg#define	sz_xkmShapeDesc	4
1738c9fbc29Smrg
1748c9fbc29Smrgtypedef struct _xkmSectionDesc {
17554044362Smrg	INT16		top;
17654044362Smrg	INT16		left;
17754044362Smrg	CARD16		width;
17854044362Smrg	CARD16		height;
17954044362Smrg	INT16		angle;
1808c9fbc29Smrg	CARD8		priority;
1818c9fbc29Smrg	CARD8		num_rows;
1828c9fbc29Smrg	CARD8		num_doodads;
1838c9fbc29Smrg	CARD8		num_overlays;
18454044362Smrg	CARD16		pad2;
1858c9fbc29Smrg} xkmSectionDesc;
1868c9fbc29Smrg#define	sz_xkmSectionDesc	16
1878c9fbc29Smrg
1888c9fbc29Smrgtypedef struct _xkmRowDesc {
18954044362Smrg	INT16		top;
19054044362Smrg	INT16		left;
1918c9fbc29Smrg	CARD8		num_keys;
1928c9fbc29Smrg	BOOL		vertical;
19354044362Smrg	CARD16		pad;
1948c9fbc29Smrg} xkmRowDesc;
1958c9fbc29Smrg#define	sz_xkmRowDesc		8
1968c9fbc29Smrg
1978c9fbc29Smrgtypedef struct _xkmKeyDesc {
1988c9fbc29Smrg	CARD8		name[XkbKeyNameLength];
19954044362Smrg	INT16		gap;
2008c9fbc29Smrg	CARD8		shape_ndx;
2018c9fbc29Smrg	CARD8		color_ndx;
2028c9fbc29Smrg} xkmKeyDesc;
2038c9fbc29Smrg#define	sz_xkmKeyDesc		8
2048c9fbc29Smrg
2058c9fbc29Smrgtypedef struct _xkmOverlayDesc {
2068c9fbc29Smrg	CARD8		num_rows;
2078c9fbc29Smrg	CARD8		pad1;
20854044362Smrg	CARD16		pad2;
2098c9fbc29Smrg} xkmOverlayDesc;
2108c9fbc29Smrg#define	sz_xkmOverlayDesc	4
2118c9fbc29Smrg
2128c9fbc29Smrgtypedef struct _xkmOverlayRowDesc {
2138c9fbc29Smrg	CARD8		row_under;
2148c9fbc29Smrg	CARD8		num_keys;
21554044362Smrg	CARD16		pad;
2168c9fbc29Smrg} xkmOverlayRowDesc;
2178c9fbc29Smrg#define	sz_xkmOverlayRowDesc	4
2188c9fbc29Smrg
2198c9fbc29Smrgtypedef struct _xkmOverlayKeyDesc {
2208c9fbc29Smrg	char		over[XkbKeyNameLength];
2218c9fbc29Smrg	char		under[XkbKeyNameLength];
2228c9fbc29Smrg} xkmOverlayKeyDesc;
2238c9fbc29Smrg#define sz_xkmOverlayKeyDesc	8
2248c9fbc29Smrg
2258c9fbc29Smrgtypedef struct _xkmShapeDoodadDesc {
2268c9fbc29Smrg	CARD8		type;
2278c9fbc29Smrg	CARD8		priority;
22854044362Smrg	INT16		top;
22954044362Smrg	INT16		left;
23054044362Smrg	INT16		angle;
2318c9fbc29Smrg	CARD8		color_ndx;
2328c9fbc29Smrg	CARD8		shape_ndx;
23354044362Smrg	CARD16		pad;
23454044362Smrg	CARD32		pad1;
2358c9fbc29Smrg} xkmShapeDoodadDesc;
2368c9fbc29Smrg#define	sz_xkmShapeDoodadDesc	16
2378c9fbc29Smrg
2388c9fbc29Smrgtypedef struct _xkmTextDoodadDesc {
2398c9fbc29Smrg	CARD8	 	type;
2408c9fbc29Smrg	CARD8	 	priority;
24154044362Smrg	INT16	 	top;
24254044362Smrg	INT16	 	left;
24354044362Smrg	INT16	 	angle;
24454044362Smrg	CARD16		width;
24554044362Smrg	CARD16		height;
2468c9fbc29Smrg	CARD8	 	color_ndx;
2478c9fbc29Smrg	CARD8		pad1;
24854044362Smrg	CARD16		pad2;
2498c9fbc29Smrg} xkmTextDoodadDesc;
2508c9fbc29Smrg#define	sz_xkmTextDoodadDesc	16
2518c9fbc29Smrg
2528c9fbc29Smrgtypedef struct _xkmIndicatorDoodadDesc {
2538c9fbc29Smrg	CARD8		type;
2548c9fbc29Smrg	CARD8		priority;
25554044362Smrg	INT16		top;
25654044362Smrg	INT16		left;
2578c9fbc29Smrg	CARD8		shape_ndx;
2588c9fbc29Smrg	CARD8		on_color_ndx;
2598c9fbc29Smrg	CARD8		off_color_ndx;
2608c9fbc29Smrg	CARD8		pad1;
26154044362Smrg	CARD16		pad2;
26254044362Smrg	CARD32		pad3;
2638c9fbc29Smrg} xkmIndicatorDoodadDesc;
2648c9fbc29Smrg#define	sz_xkmIndicatorDoodadDesc	16
2658c9fbc29Smrg
2668c9fbc29Smrgtypedef struct _xkmLogoDoodadDesc {
2678c9fbc29Smrg	CARD8		type;
2688c9fbc29Smrg	CARD8		priority;
26954044362Smrg	INT16		top;
27054044362Smrg	INT16		left;
27154044362Smrg	INT16		angle;
2728c9fbc29Smrg	CARD8		color_ndx;
2738c9fbc29Smrg	CARD8		shape_ndx;
27454044362Smrg	CARD16		pad;
27554044362Smrg	CARD32		pad1;
2768c9fbc29Smrg} xkmLogoDoodadDesc;
2778c9fbc29Smrg#define	sz_xkmLogoDoodadDesc	16
2788c9fbc29Smrg
2798c9fbc29Smrgtypedef struct _xkmAnyDoodadDesc {
2808c9fbc29Smrg	CARD8		type;
2818c9fbc29Smrg	CARD8		priority;
28254044362Smrg	INT16		top;
28354044362Smrg	INT16		left;
28454044362Smrg	CARD16		pad1;
28554044362Smrg	CARD32		pad2;
28654044362Smrg	CARD32		pad3;
2878c9fbc29Smrg} xkmAnyDoodadDesc;
2888c9fbc29Smrg#define	sz_xkmAnyDoodadDesc		16
2898c9fbc29Smrg
2908c9fbc29Smrgtypedef union _xkmDoodadDesc {
2918c9fbc29Smrg	xkmAnyDoodadDesc	any;
2928c9fbc29Smrg	xkmShapeDoodadDesc	shape;
2938c9fbc29Smrg	xkmTextDoodadDesc	text;
2948c9fbc29Smrg	xkmIndicatorDoodadDesc	indicator;
2958c9fbc29Smrg	xkmLogoDoodadDesc	logo;
2968c9fbc29Smrg} xkmDoodadDesc;
2978c9fbc29Smrg#define	sz_xkmDoodadDesc		16
2988c9fbc29Smrg
2998c9fbc29Smrg#endif /* _XKMFORMAT_H_ */
300