Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
N
nx-libs
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
1
Issues
1
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
dimbor
nx-libs
Commits
fccef5fc
Unverified
Commit
fccef5fc
authored
Nov 09, 2018
by
Mike Gabriel
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'uli42-pr/xkb_1.3.0.0' into 3.6.x
Attributes GH PR #717:
https://github.com/ArcticaProject/nx-libs/pull/717
parents
122db3fd
3965f24b
Hide whitespace changes
Inline
Side-by-side
Showing
33 changed files
with
3116 additions
and
1075 deletions
+3116
-1075
Makefile
Makefile
+13
-4
control
debian/control
+1
-0
Imake.tmpl
nx-X11/config/cf/Imake.tmpl
+8
-0
code-versions.txt
nx-X11/programs/Xserver/code-versions.txt
+1
-1
Events.c
nx-X11/programs/Xserver/hw/nxagent/Events.c
+22
-4
Keyboard.c
nx-X11/programs/Xserver/hw/nxagent/Keyboard.c
+36
-227
xkbfile.h
nx-X11/programs/Xserver/include/xkbfile.h
+17
-15
xkbsrv.h
nx-X11/programs/Xserver/include/xkbsrv.h
+2
-1
Imakefile
nx-X11/programs/Xserver/xkb/Imakefile
+9
-9
XKBMAlloc.c
nx-X11/programs/Xserver/xkb/XKBMAlloc.c
+1
-1
XKBMisc.c
nx-X11/programs/Xserver/xkb/XKBMisc.c
+5
-2
ddxBeep.c
nx-X11/programs/Xserver/xkb/ddxBeep.c
+1
-0
ddxInit.c
nx-X11/programs/Xserver/xkb/ddxInit.c
+0
-45
ddxKeyClick.c
nx-X11/programs/Xserver/xkb/ddxKeyClick.c
+0
-49
ddxKillSrv.c
nx-X11/programs/Xserver/xkb/ddxKillSrv.c
+0
-5
ddxList.c
nx-X11/programs/Xserver/xkb/ddxList.c
+35
-20
ddxLoad.c
nx-X11/programs/Xserver/xkb/ddxLoad.c
+13
-337
ddxPrivate.c
nx-X11/programs/Xserver/xkb/ddxPrivate.c
+0
-5
ddxVT.c
nx-X11/programs/Xserver/xkb/ddxVT.c
+0
-5
maprules.c
nx-X11/programs/Xserver/xkb/maprules.c
+5
-11
xkb.c
nx-X11/programs/Xserver/xkb/xkb.c
+123
-175
xkbAccessX.c
nx-X11/programs/Xserver/xkb/xkbAccessX.c
+2
-4
xkbActions.c
nx-X11/programs/Xserver/xkb/xkbActions.c
+0
-4
xkbEvents.c
nx-X11/programs/Xserver/xkb/xkbEvents.c
+4
-0
xkbInit.c
nx-X11/programs/Xserver/xkb/xkbInit.c
+1
-10
xkbLEDs.c
nx-X11/programs/Xserver/xkb/xkbLEDs.c
+12
-12
xkbPrKeyEv.c
nx-X11/programs/Xserver/xkb/xkbPrKeyEv.c
+0
-4
xkbUtils.c
nx-X11/programs/Xserver/xkb/xkbUtils.c
+3
-3
xkbfmisc.c
nx-X11/programs/Xserver/xkb/xkbfmisc.c
+418
-38
xkbout.c
nx-X11/programs/Xserver/xkb/xkbout.c
+1047
-0
xkbtext.c
nx-X11/programs/Xserver/xkb/xkbtext.c
+1325
-0
xkmread.c
nx-X11/programs/Xserver/xkb/xkmread.c
+10
-84
nx-libs.spec
nx-libs.spec
+2
-0
No files found.
Makefile
View file @
fccef5fc
...
@@ -33,6 +33,15 @@ IMAKE_FONT_DEFINES ?= $(shell pkg-config --modversion xfont2 1>/dev/null 2>/dev/
...
@@ -33,6 +33,15 @@ IMAKE_FONT_DEFINES ?= $(shell pkg-config --modversion xfont2 1>/dev/null 2>/dev/
# Support older libXext versions.
# Support older libXext versions.
XEXT_EXTRA_DEFINES
?=
$(
shell
pkg-config
--exists
'xextproto < 7.1.0'
1>/dev/null 2>/dev/null
&&
echo
"-DLEGACY_XEXT_PROTO"
)
XEXT_EXTRA_DEFINES
?=
$(
shell
pkg-config
--exists
'xextproto < 7.1.0'
1>/dev/null 2>/dev/null
&&
echo
"-DLEGACY_XEXT_PROTO"
)
# check if the xkbcomp devel pkg is available - we need it for the next step
ifneq
($(shell
pkg-config
--exists
xkbcomp
&&
echo
yes),
yes)
$(error
required
xkbcomp
devel
package
missing)
endif
# the system's directory with the xkb data files (this needs to be
# independent of Imake's ProjectRoot or the configure prefix.)
XKB_SYS_DEFINES
?=
-DSystemXkbConfigDir
=
$(
shell
pkg-config xkbcomp
--variable
=
xkbconfigdir
)
-DSystemXkbBinDir
=
$(
shell
pkg-config xkbcomp
--variable
=
prefix
)
/bin
IMAKE_DEFINES
?=
IMAKE_DEFINES
?=
NX_VERSION_MAJOR
=
$(
shell
./version.sh 1
)
NX_VERSION_MAJOR
=
$(
shell
./version.sh 1
)
...
@@ -100,7 +109,7 @@ version:
...
@@ -100,7 +109,7 @@ version:
build-env
:
version
build-env
:
version
# prepare Makefiles and the nx-X11 symlinking magic
# prepare Makefiles and the nx-X11 symlinking magic
${
MAKE
}
-j1
-C
nx-X11 BuildIncludes
FONT_DEFINES
=
"
$(FONT_DEFINES)
"
XEXT_EXTRA_DEFINES
=
"
$(XEXT_EXTRA_DEFINES)
"
IMAKE_DEFINES
=
"
$(IMAKE_DEFINES)
$(IMAKE_FONT_DEFINES)
"
${
MAKE
}
-j1
-C
nx-X11 BuildIncludes
FONT_DEFINES
=
"
$(FONT_DEFINES)
"
XEXT_EXTRA_DEFINES
=
"
$(XEXT_EXTRA_DEFINES)
"
IMAKE_DEFINES
=
"
$(IMAKE_DEFINES)
$(IMAKE_FONT_DEFINES)
$(XKB_SYS_DEFINES)
"
# set up environment for libNX_X11 build (X11 header files)
# set up environment for libNX_X11 build (X11 header files)
mkdir
-p
nx-X11/exports/include/nx-X11/
mkdir
-p
nx-X11/exports/include/nx-X11/
...
@@ -125,7 +134,7 @@ clean-env: version
...
@@ -125,7 +134,7 @@ clean-env: version
[ -d exports/include/nx-X11/Xtrans ] && $(RM_DIR) exports/include/nx-X11/Xtrans/ ||
:
[ -d exports/include/nx-X11/Xtrans ] && $(RM_DIR) exports/include/nx-X11/Xtrans/ ||
:
[
-d
exports/include/nx-X11/
]
&&
$(RM_DIR)
exports/include/nx-X11/
||
:
[
-d
exports/include/nx-X11/
]
&&
$(RM_DIR)
exports/include/nx-X11/
||
:
${MAKE}
-j1
-C
nx-X11
clean
FONT_DEFINES
=
"
$(FONT_DEFINES)
"
XEXT_EXTRA_DEFINES
=
"
$(XEXT_EXTRA_DEFINES)
"
IMAKE_DEFINES
=
"
$(IMAKE_DEFINES)
$(IMAKE_FONT_DEFINES)
"
${MAKE}
-j1
-C
nx-X11
clean
FONT_DEFINES
=
"
$(FONT_DEFINES)
"
XEXT_EXTRA_DEFINES
=
"
$(XEXT_EXTRA_DEFINES)
"
IMAKE_DEFINES
=
"
$(IMAKE_DEFINES)
$(IMAKE_FONT_DEFINES)
$(XKB_SYS_DEFINES)
"
build-lite
:
build-lite
:
cd
nxcomp
&&
autoreconf
-vfsi
&&
(
${
CONFIGURE
}
)
&&
${
MAKE
}
cd
nxcomp
&&
autoreconf
-vfsi
&&
(
${
CONFIGURE
}
)
&&
${
MAKE
}
...
@@ -149,8 +158,8 @@ build-full: build-env
...
@@ -149,8 +158,8 @@ build-full: build-env
# build nxagent fourth
# build nxagent fourth
./mesa-quilt
push
-a
./mesa-quilt
push
-a
${MAKE}
-j1
-C
nx-X11
BuildDependsOnly
FONT_DEFINES
=
"
$(FONT_DEFINES)
"
XEXT_EXTRA_DEFINES
=
"
$(XEXT_EXTRA_DEFINES)
"
IMAKE_DEFINES
=
"
$(IMAKE_DEFINES)
$(IMAKE_FONT_DEFINES)
"
${MAKE}
-j1
-C
nx-X11
BuildDependsOnly
FONT_DEFINES
=
"
$(FONT_DEFINES)
"
XEXT_EXTRA_DEFINES
=
"
$(XEXT_EXTRA_DEFINES)
"
IMAKE_DEFINES
=
"
$(IMAKE_DEFINES)
$(IMAKE_FONT_DEFINES)
$(XKB_SYS_DEFINES)
"
${MAKE}
-C
nx-X11
World
USRLIBDIR
=
"
$(USRLIBDIR)
"
SHLIBDIR
=
"
$(SHLIBDIR)
"
FONT_DEFINES
=
"
$(FONT_DEFINES)
"
XFONTLIB
=
"
$(XFONTLIB)
"
XEXT_EXTRA_DEFINES
=
"
$(XEXT_EXTRA_DEFINES)
"
IMAKE_DEFINES
=
"
$(IMAKE_DEFINES)
$(IMAKE_FONT_DEFINES)
"
${MAKE}
-C
nx-X11
World
USRLIBDIR
=
"
$(USRLIBDIR)
"
SHLIBDIR
=
"
$(SHLIBDIR)
"
FONT_DEFINES
=
"
$(FONT_DEFINES)
"
XFONTLIB
=
"
$(XFONTLIB)
"
XEXT_EXTRA_DEFINES
=
"
$(XEXT_EXTRA_DEFINES)
"
IMAKE_DEFINES
=
"
$(IMAKE_DEFINES)
$(IMAKE_FONT_DEFINES)
$(XKB_SYS_DEFINES)
"
# build nxproxy fifth
# build nxproxy fifth
cd
nxproxy
&&
autoreconf
-vfsi
&&
(${CONFIGURE})
&&
${MAKE}
cd
nxproxy
&&
autoreconf
-vfsi
&&
(${CONFIGURE})
&&
${MAKE}
...
...
debian/control
View file @
fccef5fc
...
@@ -27,6 +27,7 @@ Build-Depends:
...
@@ -27,6 +27,7 @@ Build-Depends:
libxtst-dev,
libxtst-dev,
pkg-config,
pkg-config,
quilt (>= 0.46-7~),
quilt (>= 0.46-7~),
x11-xkb-utils,
x11proto-core-dev,
x11proto-core-dev,
xutils-dev,
xutils-dev,
zlib1g-dev,
zlib1g-dev,
...
...
nx-X11/config/cf/Imake.tmpl
View file @
fccef5fc
...
@@ -784,6 +784,12 @@ TCLIBDIR = TclLibDir
...
@@ -784,6 +784,12 @@ TCLIBDIR = TclLibDir
#ifndef SystemUsrIncDir
#ifndef SystemUsrIncDir
#define SystemUsrIncDir /usr/include
#define SystemUsrIncDir /usr/include
#endif
#endif
#ifndef SystemXkbConfigDir
#define SystemXkbConfigDir /usr/share/X11/xkb
#endif
#ifndef SystemXkbBinDir
#define SystemXkbBinDir /usr/bin
#endif
#ifndef ShLibDir
#ifndef ShLibDir
#define ShLibDir UsrLibDir
#define ShLibDir UsrLibDir
...
@@ -1660,6 +1666,8 @@ TCLIBDIR = TclLibDir
...
@@ -1660,6 +1666,8 @@ TCLIBDIR = TclLibDir
VARLIBDIR = VarLibDir /* xdm runtime files */
VARLIBDIR = VarLibDir /* xdm runtime files */
SYSTEMUSRLIBDIR = SystemUsrLibDir /* system's "/usr/lib" */
SYSTEMUSRLIBDIR = SystemUsrLibDir /* system's "/usr/lib" */
SYSTEMUSRINCDIR = SystemUsrIncDir /* system's "/usr/include" */
SYSTEMUSRINCDIR = SystemUsrIncDir /* system's "/usr/include" */
SYSTEMXKBCONFDIR = SystemXkbConfigDir /* system's "/usr/share/xkb" */
SYSTEMXKBBINDIR = SystemXkbBinDir /* system's "/usr/bin" */
SHLIBDIR = ShLibDir /* shared libraries */
SHLIBDIR = ShLibDir /* shared libraries */
LINTLIBDIR = LintlibDir /* lint libraries */
LINTLIBDIR = LintlibDir /* lint libraries */
MANPATH = ManPath /* top of manual page tree */
MANPATH = ManPath /* top of manual page tree */
...
...
nx-X11/programs/Xserver/code-versions.txt
View file @
fccef5fc
...
@@ -19,4 +19,4 @@ render 6.9/7.0
...
@@ -19,4 +19,4 @@ render 6.9/7.0
Xext 7.1/1.1
Xext 7.1/1.1
xfixes 1.4.2
xfixes 1.4.2
Xi 1.3.0.0
Xi 1.3.0.0
xkb
7.1/1.1
xkb
1.3.0.0
nx-X11/programs/Xserver/hw/nxagent/Events.c
View file @
fccef5fc
...
@@ -2782,7 +2782,8 @@ int nxagentHandleXkbKeyboardStateEvent(XEvent *X)
...
@@ -2782,7 +2782,8 @@ int nxagentHandleXkbKeyboardStateEvent(XEvent *X)
{
{
XkbEvent
*
xkbev
=
(
XkbEvent
*
)
X
;
XkbEvent
*
xkbev
=
(
XkbEvent
*
)
X
;
if
(
xkbev
->
type
==
nxagentXkbInfo
.
EventBase
+
XkbEventCode
&&
if
(
nxagentXkbInfo
.
EventBase
!=
-
1
&&
xkbev
->
type
==
nxagentXkbInfo
.
EventBase
+
XkbEventCode
&&
xkbev
->
any
.
xkb_type
==
XkbStateNotify
)
xkbev
->
any
.
xkb_type
==
XkbStateNotify
)
{
{
#ifdef TEST
#ifdef TEST
...
@@ -2890,9 +2891,21 @@ int nxagentHandleXFixesSelectionNotify(XEvent *X)
...
@@ -2890,9 +2891,21 @@ int nxagentHandleXFixesSelectionNotify(XEvent *X)
XFixesSelectionEvent
*
xfixesEvent
=
(
XFixesSelectionEvent
*
)
X
;
XFixesSelectionEvent
*
xfixesEvent
=
(
XFixesSelectionEvent
*
)
X
;
if
(
nxagentXFixesInfo
.
Initialized
==
0
||
if
(
nxagentXFixesInfo
.
Initialized
==
0
)
xfixesEvent
->
type
!=
(
nxagentXFixesInfo
.
EventBase
+
XFixesSelectionNotify
))
{
return
0
;
#ifdef DEBUG
fprintf
(
stderr
,
"nxagentHandleXFixesSelectionNotify: XFixes not initialized - doing nothing.
\n
"
);
#endif
return
0
;
}
if
(
xfixesEvent
->
type
!=
(
nxagentXFixesInfo
.
EventBase
+
XFixesSelectionNotify
))
{
#ifdef DEBUG
fprintf
(
stderr
,
"nxagentHandleXFixesSelectionNotify: event type is [%d] - doing nothing.
\n
"
,
xfixesEvent
->
type
);
#endif
return
0
;
}
#ifdef TEST
#ifdef TEST
fprintf
(
stderr
,
"nxagentHandleXFixesSelectionNotify: Handling event.
\n
"
);
fprintf
(
stderr
,
"nxagentHandleXFixesSelectionNotify: Handling event.
\n
"
);
...
@@ -3815,6 +3828,11 @@ int nxagentInitXkbKeyboardState(void)
...
@@ -3815,6 +3828,11 @@ int nxagentInitXkbKeyboardState(void)
XkbEvent
*
xkbev
=
(
XkbEvent
*
)
&
X
;
XkbEvent
*
xkbev
=
(
XkbEvent
*
)
&
X
;
if
(
nxagentXkbInfo
.
EventBase
==
-
1
)
{
return
1
;
}
#ifdef TEST
#ifdef TEST
fprintf
(
stderr
,
"%s: Initializing XKB state.
\n
"
,
__func__
);
fprintf
(
stderr
,
"%s: Initializing XKB state.
\n
"
,
__func__
);
#endif
#endif
...
...
nx-X11/programs/Xserver/hw/nxagent/Keyboard.c
View file @
fccef5fc
...
@@ -42,15 +42,12 @@ is" without express or implied warranty.
...
@@ -42,15 +42,12 @@ is" without express or implied warranty.
#include <string.h>
#include <string.h>
#include <stdlib.h>
#include <stdlib.h>
#include "X.h"
#include "Xproto.h"
#include "keysym.h"
#include "keysym.h"
#include "screenint.h"
#include "screenint.h"
#include "inputstr.h"
#include "inputstr.h"
#include "misc.h"
#include "misc.h"
#include "scrnintstr.h"
#include "scrnintstr.h"
#include "servermd.h"
#include "servermd.h"
#include "dixstruct.h"
#include "extnsionst.h"
#include "extnsionst.h"
#include "Agent.h"
#include "Agent.h"
...
@@ -67,10 +64,6 @@ is" without express or implied warranty.
...
@@ -67,10 +64,6 @@ is" without express or implied warranty.
#ifdef XKB
#ifdef XKB
#include "globals.h"
#include "property.h"
#include "Init.h"
#include <nx-X11/extensions/XKB.h>
#include <nx-X11/extensions/XKB.h>
/*
/*
...
@@ -142,37 +135,6 @@ extern Status XkbGetControls(
...
@@ -142,37 +135,6 @@ extern Status XkbGetControls(
#endif
#endif
);
);
#ifndef XKB_BASE_DIRECTORY
#define XKB_BASE_DIRECTORY "/usr/share/X11/xkb"
#endif
#ifndef XKB_ALTERNATE_BASE_DIRECTORY
#define XKB_ALTERNATE_BASE_DIRECTORY "/usr/X11R6/lib/X11/xkb"
#endif
#ifndef XKB_CONFIG_FILE_NX
#define XKB_CONFIG_FILE_NX "/etc/nxagent/nxagent.keyboard"
#endif
#ifndef XKB_CONFIG_FILE_X2GO
#define XKB_CONFIG_FILE_X2GO "/etc/x2go/x2goagent.keyboard"
#endif
#ifndef XKB_DFLT_RULES_FILE
#define XKB_DFLT_RULES_FILE "xfree86"
#endif
#ifndef XKB_ALTS_RULES_FILE
#define XKB_ALTS_RULES_FILE "xorg"
#endif
#ifndef XKB_DFLT_KB_LAYOUT
#define XKB_DFLT_KB_LAYOUT "us"
#endif
#ifndef XKB_DFLT_KB_MODEL
#define XKB_DFLT_KB_MODEL "pc102"
#endif
#ifndef XKB_DFLT_KB_VARIANT
#define XKB_DFLT_KB_VARIANT NULL
#endif
#ifndef XKB_DFLT_KB_OPTIONS
#define XKB_DFLT_KB_OPTIONS NULL
#endif
extern
int
XkbDfltRepeatDelay
;
extern
int
XkbDfltRepeatDelay
;
extern
int
XkbDfltRepeatInterval
;
extern
int
XkbDfltRepeatInterval
;
...
@@ -199,8 +161,6 @@ XkbWrapperRec nxagentXkbWrapper;
...
@@ -199,8 +161,6 @@ XkbWrapperRec nxagentXkbWrapper;
extern
char
*
nxagentKeyboard
;
extern
char
*
nxagentKeyboard
;
static
char
*
nxagentXkbGetRules
(
void
);
unsigned
int
nxagentAltMetaMask
;
unsigned
int
nxagentAltMetaMask
;
unsigned
int
nxagentAltMask
;
unsigned
int
nxagentAltMask
;
unsigned
int
nxagentMetaMask
;
unsigned
int
nxagentMetaMask
;
...
@@ -500,104 +460,6 @@ static int nxagentRestoreKeyboardDeviceData(DeviceIntPtr devBackup, DeviceIntPtr
...
@@ -500,104 +460,6 @@ static int nxagentRestoreKeyboardDeviceData(DeviceIntPtr devBackup, DeviceIntPtr
static
int
nxagentFreeKeyboardDeviceData
(
DeviceIntPtr
dev
);
static
int
nxagentFreeKeyboardDeviceData
(
DeviceIntPtr
dev
);
static
void
nxagentCheckXkbBaseDirectory
(
void
)
{
/*
* Set XkbBaseDirectory global
* variable appropriately.
*/
#ifdef TEST
fprintf
(
stderr
,
"nxagentCheckXkbBaseDirectory: "
"Before calling _NXGetXkbBasePath:
\n
"
);
fprintf
(
stderr
,
"nxagentCheckXkbBaseDirectory: "
"XkbBaseDirectory variable [%s].
\n
"
,
XkbBaseDirectory
);
#endif
XkbBaseDirectory
=
_NXGetXkbBasePath
(
XkbBaseDirectory
);
#ifdef TEST
fprintf
(
stderr
,
"nxagentCheckXkbBaseDirectory: "
"After calling _NXGetXkbBasePath:
\n
"
);
fprintf
(
stderr
,
"nxagentCheckXkbBaseDirectory: "
"XkbBaseDirectory variable [%s].
\n
"
,
XkbBaseDirectory
);
#endif
return
;
}
static
char
*
nxagentXkbGetRules
()
{
int
ret
;
char
*
path
;
struct
stat
buf
;
#ifdef TEST
fprintf
(
stderr
,
"nxagentXkbGetRules: XkbBaseDirectory [%s].
\n
"
,
XkbBaseDirectory
);
#endif
if
(
-
1
==
asprintf
(
&
path
,
"%s/rules/%s"
,
XkbBaseDirectory
,
XKB_DFLT_RULES_FILE
))
{
FatalError
(
"nxagentXkbGetRules: malloc failed."
);
}
#ifdef TEST
fprintf
(
stderr
,
"nxagentXkbGetRules: checking rules file [%s]
\n
"
,
path
);
#endif
ret
=
stat
(
path
,
&
buf
);
if
(
ret
==
0
)
{
free
(
path
);
#ifdef TEST
fprintf
(
stderr
,
"nxagentXkbGetRules: returning default rules file [%s]
\n
"
,
XKB_DFLT_RULES_FILE
);
#endif
return
XKB_DFLT_RULES_FILE
;
}
#ifdef TEST
fprintf
(
stderr
,
"nxagentXkbGetRules: WARNING! Failed to stat file [%s]: %s.
\n
"
,
path
,
strerror
(
ret
));
#endif
free
(
path
);
path
=
NULL
;
if
(
-
1
==
asprintf
(
&
path
,
"%s/rules/%s"
,
XkbBaseDirectory
,
XKB_ALTS_RULES_FILE
))
{
FatalError
(
"nxagentXkbGetRules: malloc failed."
);
}
#ifdef TEST
fprintf
(
stderr
,
"nxagentXkbGetRules: checking rules file [%s]
\n
"
,
path
);
#endif
ret
=
stat
(
path
,
&
buf
);
if
(
ret
==
0
)
{
free
(
path
);
#ifdef TEST
fprintf
(
stderr
,
"nxagentXkbGetRules: returning alternative rules file [%s]
\n
"
,
XKB_ALTS_RULES_FILE
);
#endif
return
XKB_ALTS_RULES_FILE
;
}
#ifdef WARNING
fprintf
(
stderr
,
"nxagentXkbGetRules: WARNING! Failed to stat file [%s]: %s.
\n
"
,
path
,
strerror
(
ret
));
#endif
free
(
path
);
#ifdef TEST
fprintf
(
stderr
,
"nxagentXkbGetRules: returning default rules file [%s]
\n
"
,
XKB_DFLT_RULES_FILE
);
#endif
return
XKB_DFLT_RULES_FILE
;
}
void
nxagentBell
(
int
volume
,
DeviceIntPtr
pDev
,
void
*
ctrl
,
int
cls
)
void
nxagentBell
(
int
volume
,
DeviceIntPtr
pDev
,
void
*
ctrl
,
int
cls
)
{
{
XBell
(
nxagentDisplay
,
volume
);
XBell
(
nxagentDisplay
,
volume
);
...
@@ -708,7 +570,6 @@ int nxagentKeyboardProc(DeviceIntPtr pDev, int onoff)
...
@@ -708,7 +570,6 @@ int nxagentKeyboardProc(DeviceIntPtr pDev, int onoff)
int
i
,
j
;
int
i
,
j
;
XKeyboardState
values
;
XKeyboardState
values
;
char
*
model
=
NULL
,
*
layout
=
NULL
;
char
*
model
=
NULL
,
*
layout
=
NULL
;
int
free_model
=
0
,
free_layout
=
0
;
XkbDescPtr
xkb
=
NULL
;
XkbDescPtr
xkb
=
NULL
;
switch
(
onoff
)
switch
(
onoff
)
...
@@ -831,6 +692,18 @@ N/A
...
@@ -831,6 +692,18 @@ N/A
keySyms
.
mapWidth
=
mapWidth
;
keySyms
.
mapWidth
=
mapWidth
;
keySyms
.
map
=
keymap
;
keySyms
.
map
=
keymap
;
if
(
XkbQueryExtension
(
nxagentDisplay
,
&
nxagentXkbInfo
.
Opcode
,
&
nxagentXkbInfo
.
EventBase
,
&
nxagentXkbInfo
.
ErrorBase
,
&
nxagentXkbInfo
.
MajorVersion
,
&
nxagentXkbInfo
.
MinorVersion
)
==
0
)
{
ErrorF
(
"Unable to initialize XKEYBOARD extension.
\n
"
);
goto
XkbError
;
}
#ifdef XKB
#ifdef XKB
/*
/*
...
@@ -839,8 +712,6 @@ N/A
...
@@ -839,8 +712,6 @@ N/A
* variable is checked.
* variable is checked.
*/
*/
nxagentCheckXkbBaseDirectory
();
if
(
noXkbExtension
)
{
if
(
noXkbExtension
)
{
#ifdef TEST
#ifdef TEST
fprintf
(
stderr
,
"nxagentKeyboardProc: No XKB extension.
\n
"
);
fprintf
(
stderr
,
"nxagentKeyboardProc: No XKB extension.
\n
"
);
...
@@ -852,18 +723,6 @@ XkbError:
...
@@ -852,18 +723,6 @@ XkbError:
fprintf
(
stderr
,
"nxagentKeyboardProc: XKB error.
\n
"
);
fprintf
(
stderr
,
"nxagentKeyboardProc: XKB error.
\n
"
);
#endif
#endif
XkbFreeKeyboard
(
xkb
,
XkbAllComponentsMask
,
True
);
xkb
=
NULL
;
if
(
free_model
)
{
free_model
=
0
;
free
(
model
);
}
if
(
free_layout
)
{
free_layout
=
0
;
free
(
layout
);
}
#endif
#endif
XGetKeyboardControl
(
nxagentDisplay
,
&
values
);
XGetKeyboardControl
(
nxagentDisplay
,
&
values
);
...
@@ -885,7 +744,7 @@ XkbError:
...
@@ -885,7 +744,7 @@ XkbError:
#ifdef XKB
#ifdef XKB
}
else
{
/* if (noXkbExtension) */
}
else
{
/* if (noXkbExtension) */
XkbComponentNamesRec
names
=
{
0
};
XkbComponentNamesRec
names
=
{
0
};
char
*
rules
,
*
variants
,
*
options
;
char
*
rules
=
NULL
,
*
variants
=
NULL
,
*
options
=
NULL
;
/* use xkb default */
#ifdef TEST
#ifdef TEST
fprintf
(
stderr
,
"nxagentKeyboardProc: Using XKB extension.
\n
"
);
fprintf
(
stderr
,
"nxagentKeyboardProc: Using XKB extension.
\n
"
);
...
@@ -895,9 +754,6 @@ XkbError:
...
@@ -895,9 +754,6 @@ XkbError:
fprintf
(
stderr
,
"nxagentKeyboardProc: nxagentKeyboard is [%s].
\n
"
,
nxagentKeyboard
?
nxagentKeyboard
:
"NULL"
);
fprintf
(
stderr
,
"nxagentKeyboardProc: nxagentKeyboard is [%s].
\n
"
,
nxagentKeyboard
?
nxagentKeyboard
:
"NULL"
);
#endif
#endif
rules
=
nxagentXkbGetRules
();
/*
/*
from nxagent changelog:
from nxagent changelog:
2.0.22:
2.0.22:
...
@@ -920,11 +776,8 @@ XkbError:
...
@@ -920,11 +776,8 @@ XkbError:
goto
XkbError
;
goto
XkbError
;
}
}
free_model
=
1
;
model
=
strndup
(
nxagentKeyboard
,
i
);
model
=
strndup
(
nxagentKeyboard
,
i
);
layout
=
strdup
(
&
nxagentKeyboard
[
i
+
1
]);
free_layout
=
1
;
layout
=
strdup
(
&
nxagentKeyboard
[
i
+
1
]);
/*
/*
* There is no description for pc105 on Solaris.
* There is no description for pc105 on Solaris.
...
@@ -953,71 +806,30 @@ XkbError:
...
@@ -953,71 +806,30 @@ XkbError:
}
}
else
else
{
{
layout
=
XKB_DFLT_KB_LAYOUT
;
model
=
XKB_DFLT_KB_MODEL
;
#ifdef TEST
#ifdef TEST
fprintf
(
stderr
,
"nxagentKeyboardProc: Using default keyboard: model [%s] layout [%s].
\n
"
,
fprintf
(
stderr
,
"nxagentKeyboardProc: Using default keyboard: model [%s] layout [%s].
\n
"
,
model
,
layout
);
model
,
layout
);
#endif
#endif
}
}
variants
=
XKB_DFLT_KB_VARIANT
;
options
=
XKB_DFLT_KB_OPTIONS
;
#ifdef TEST
#ifdef TEST
fprintf
(
stderr
,
"nxagentKeyboardProc: Init XKB extension.
\n
"
);
fprintf
(
stderr
,
"nxagentKeyboardProc: Init XKB extension.
\n
"
);
#endif
#endif
if
(
XkbQueryExtension
(
nxagentDisplay
,
&
nxagentXkbInfo
.
Opcode
,
&
nxagentXkbInfo
.
EventBase
,
&
nxagentXkbInfo
.
ErrorBase
,
&
nxagentXkbInfo
.
MajorVersion
,
&
nxagentXkbInfo
.
MinorVersion
)
==
0
)
{
ErrorF
(
"Unable to initialize XKEYBOARD extension.
\n
"
);
goto
XkbError
;
}
xkb
=
XkbGetKeyboard
(
nxagentDisplay
,
XkbGBN_AllComponentsMask
,
XkbUseCoreKbd
);
xkb
=
XkbGetKeyboard
(
nxagentDisplay
,
XkbGBN_AllComponentsMask
,
XkbUseCoreKbd
);
nxagentKeycodeConversionSetup
();
nxagentKeycodeConversionSetup
();
if
(
xkb
==
NULL
||
xkb
->
geom
==
NULL
)
if
(
xkb
&&
xkb
->
geom
)
{
{
#ifdef TEST
XkbGetControls
(
nxagentDisplay
,
XkbAllControlsMask
,
xkb
);
fprintf
(
stderr
,
"nxagentKeyboardProc: No current keyboard.
\n
"
);
if
(
xkb
==
NULL
)
{
fprintf
(
stderr
,
"nxagentKeyboardProc: xkb is null.
\n
"
);
}
else
{
fprintf
(
stderr
,
"nxagentKeyboardProc: xkb->geom is null.
\n
"
);
}
fprintf
(
stderr
,
"nxagentKeyboardProc: Going to set rules and init device.
\n
"
);
#endif
#ifdef DEBUG
fprintf
(
stderr
,
"nxagentKeyboardProc: Going to set rules and init device: "
"[rules='%s',model='%s',layout='%s',variants='%s',options='%s'].
\n
"
,
rules
,
model
,
layout
,
variants
,
options
);
#endif
XkbSetRulesDflts
(
rules
,
model
,
layout
,
variants
,
options
);
XkbInitKeyboardDeviceStruct
((
void
*
)
pDev
,
&
names
,
&
keySyms
,
modmap
,
nxagentBell
,
nxagentChangeKeyboardControl
);
if
(
!
nxagentKeyboard
||
strcmp
(
nxagentKeyboard
,
"query"
)
==
0
)
{
goto
XkbError
;
}
goto
XkbEnd
;
}
}
#ifdef TEST
XkbGetControls
(
nxagentDisplay
,
XkbAllControlsMask
,
xkb
);
else
{
fprintf
(
stderr
,
"nxagentKeyboardProc: No current keyboard.
\n
"
);
}
#endif
#ifdef DEBUG
#ifdef DEBUG
fprintf
(
stderr
,
"nxagentKeyboardProc: Going to set rules and init device: "
fprintf
(
stderr
,
"nxagentKeyboardProc: Going to set rules and init device: "
...
@@ -1029,33 +841,30 @@ XkbError:
...
@@ -1029,33 +841,30 @@ XkbError:
XkbInitKeyboardDeviceStruct
((
void
*
)
pDev
,
&
names
,
&
keySyms
,
modmap
,
XkbInitKeyboardDeviceStruct
((
void
*
)
pDev
,
&
names
,
&
keySyms
,
modmap
,
nxagentBell
,
nxagentChangeKeyboardControl
);
nxagentBell
,
nxagentChangeKeyboardControl
);
if
(
!
nxagentKeyboard
||
if
(
nxagentKeyboard
&&
strcmp
(
nxagentKeyboard
,
"query"
)
==
0
)
(
nxagentKeyboard
&&
(
strcmp
(
nxagentKeyboard
,
"query"
)
==
0
)))
{
{
goto
XkbError
;
goto
XkbError
;
}
}
XkbEnd:
if
(
xkb
&&
xkb
->
geom
)
if
(
nxagentOption
(
Shadow
)
==
1
&&
pDev
&&
pDev
->
key
)
{
NXShadowInitKeymap
(
&
(
pDev
->
key
->
curKeySyms
));
}
if
(
free_model
)
{
{
free_model
=
0
;
XkbDDXChangeControls
(
pDev
,
xkb
->
ctrls
,
xkb
->
ctrls
);
free
(
model
);
}
}
if
(
free_layout
)
if
(
nxagentOption
(
Shadow
)
==
1
&&
pDev
&&
pDev
->
key
)
{
{
free_layout
=
0
;
NXShadowInitKeymap
(
&
(
pDev
->
key
->
curKeySyms
));
free
(
layout
);
}
}
}
XkbFreeKeyboard
(
xkb
,
XkbAllComponentsMask
,
True
);
if
(
xkb
)
xkb
=
NULL
;
{
XkbFreeKeyboard
(
xkb
,
XkbAllComponentsMask
,
True
);
xkb
=
NULL
;
}
}
free
(
model
);
free
(
layout
);
#endif
#endif
#ifdef WATCH
#ifdef WATCH
...
...
nx-X11/programs/Xserver/include/xkbfile.h
View file @
fccef5fc
...
@@ -10,19 +10,19 @@
...
@@ -10,19 +10,19 @@
fee is hereby granted, provided that the above copyright
fee is hereby granted, provided that the above copyright
notice appear in all copies and that both that copyright
notice appear in all copies and that both that copyright
notice and this permission notice appear in supporting
notice and this permission notice appear in supporting
documentation, and that the name of Silicon Graphics not be
documentation, and that the name of Silicon Graphics not be
used in advertising or publicity pertaining to distribution
used in advertising or publicity pertaining to distribution
of the software without specific prior written permission.
of the software without specific prior written permission.
Silicon Graphics makes no representation about the suitability
Silicon Graphics makes no representation about the suitability
of this software for any purpose. It is provided "as is"
of this software for any purpose. It is provided "as is"
without any express or implied warranty.
without any express or implied warranty.
SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON
AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON
GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH
OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH
THE USE OR PERFORMANCE OF THIS SOFTWARE.
THE USE OR PERFORMANCE OF THIS SOFTWARE.
...
@@ -83,9 +83,9 @@ typedef void (*XkbFileAddOnFunc)(
...
@@ -83,9 +83,9 @@ typedef void (*XkbFileAddOnFunc)(
#define _XkbErrXReqFailure 25
#define _XkbErrXReqFailure 25
#define _XkbErrBadImplementation 26
#define _XkbErrBadImplementation 26
extern
c
har
*
_XkbErrMessages
[];
extern
c
onst
char
*
_XkbErrMessages
[];
extern
unsigned
_XkbErrCode
;
extern
unsigned
_XkbErrCode
;
extern
c
har
*
_XkbErrLocation
;
extern
c
onst
char
*
_XkbErrLocation
;
extern
unsigned
_XkbErrData
;
extern
unsigned
_XkbErrData
;
/***====================================================================***/
/***====================================================================***/
...
@@ -233,12 +233,14 @@ extern Bool XkbLookupGroupAndLevel(
...
@@ -233,12 +233,14 @@ extern Bool XkbLookupGroupAndLevel(
/***====================================================================***/
/***====================================================================***/
extern
char
*
XkbAtomGetString
(
/***====================================================================***/
Display
*
/* dpy */
,
Atom
/* atm */
);
extern
Atom
XkbInternAtom
(
extern
Atom
XkbInternAtom
(
Display
*
/* dpy */
,
Display
*
/* dpy */
,
char
*
/* name */
,
char
*
/* name */
,
Bool
/* onlyIfExists */
Bool
/* onlyIfExists */
);
);
...
@@ -272,7 +274,7 @@ typedef struct _XkbDrawable {
...
@@ -272,7 +274,7 @@ typedef struct _XkbDrawable {
XkbSectionPtr
section
;
XkbSectionPtr
section
;
}
u
;
}
u
;
struct
_XkbDrawable
*
next
;
struct
_XkbDrawable
*
next
;
}
XkbDrawableRec
,
*
XkbDrawablePtr
;
}
XkbDrawableRec
,
*
XkbDrawablePtr
;
extern
XkbDrawablePtr
extern
XkbDrawablePtr
XkbGetOrderedDrawables
(
XkbGetOrderedDrawables
(
...
...
nx-X11/programs/Xserver/include/xkbsrv.h
View file @
fccef5fc
...
@@ -267,7 +267,8 @@ extern int XkbEventBase;
...
@@ -267,7 +267,8 @@ extern int XkbEventBase;
extern
int
XkbDisableLockActions
;
extern
int
XkbDisableLockActions
;
extern
char
*
XkbBaseDirectory
;
extern
char
*
XkbBaseDirectory
;
extern
char
*
XkbBinDirectory
;
extern
char
*
XkbBinDirectory
;
extern
char
*
XkbInitialMap
;
extern
int
_XkbClientMajor
;
extern
int
_XkbClientMinor
;
extern
unsigned
int
XkbXIUnsupported
;
extern
unsigned
int
XkbXIUnsupported
;
extern
Bool
noXkbExtension
;
extern
Bool
noXkbExtension
;
...
...
nx-X11/programs/Xserver/xkb/Imakefile
View file @
fccef5fc
...
@@ -18,21 +18,21 @@ XKB_DDXDEFS = XkbServerDefines
...
@@ -18,21 +18,21 @@ XKB_DDXDEFS = XkbServerDefines
NX_DEFINES = -DNXAGENT_SERVER
NX_DEFINES = -DNXAGENT_SERVER
#endif
#endif
DDX_SRCS = ddxBeep.c ddxCtrls.c ddxFakeBtn.c ddxFakeMtn.c
ddxInit.c
\
DDX_SRCS = ddxBeep.c ddxCtrls.c ddxFakeBtn.c ddxFakeMtn.c \
ddxK
eyClick.c ddxK
illSrv.c ddxLEDs.c ddxVT.c ddxLoad.c \
ddxKillSrv.c ddxLEDs.c ddxVT.c ddxLoad.c \
ddxList.c ddxDevBtn.c ddxPrivate.c
ddxList.c ddxDevBtn.c ddxPrivate.c
DDX_OBJS = ddxBeep.o ddxCtrls.o ddxFakeBtn.o ddxFakeMtn.o
ddxInit.o
\
DDX_OBJS = ddxBeep.o ddxCtrls.o ddxFakeBtn.o ddxFakeMtn.o \
ddxK
eyClick.o ddxK
illSrv.o ddxLEDs.o ddxVT.o ddxLoad.o \
ddxKillSrv.o ddxLEDs.o ddxVT.o ddxLoad.o \
ddxList.o ddxDevBtn.o ddxPrivate.o
ddxList.o ddxDevBtn.o ddxPrivate.o
SRCS = xkb.c xkbUtils.c xkbEvents.c xkbAccessX.c xkbSwap.c \
SRCS = xkb.c xkbUtils.c xkbEvents.c xkbAccessX.c xkbSwap.c \
xkbLEDs.c xkbInit.c xkbActions.c xkbPrKeyEv.c \
xkbLEDs.c xkbInit.c xkbActions.c xkbPrKeyEv.c \
xkmread.c xkbfmisc.c xkberrs.c maprules.c \
xkmread.c xkb
text.c xkb
fmisc.c xkberrs.c maprules.c \
XKBMisc.c XKBMAlloc.c XKBAlloc.c XKBGAlloc.c \
XKBMisc.c XKBMAlloc.c XKBAlloc.c XKBGAlloc.c
xkbout.c
\
$(XKBXI_SRCS) $(DDX_SRCS)
$(XKBXI_SRCS) $(DDX_SRCS)
OBJS = xkb.o xkbUtils.o xkbEvents.o xkbAccessX.o xkbSwap.o \
OBJS = xkb.o xkbUtils.o xkbEvents.o xkbAccessX.o xkbSwap.o \
xkbLEDs.o xkbInit.o xkbActions.o xkbPrKeyEv.o \
xkbLEDs.o xkbInit.o xkbActions.o xkbPrKeyEv.o \
xkmread.o xkbfmisc.o xkberrs.o maprules.o \
xkmread.o xkb
text.o xkb
fmisc.o xkberrs.o maprules.o \
XKBMisc.o XKBMAlloc.o XKBAlloc.o XKBGAlloc.o \
XKBMisc.o XKBMAlloc.o XKBAlloc.o XKBGAlloc.o
xkbout.o
\
$(XKBXI_OBJS) $(DDX_OBJS)
$(XKBXI_OBJS) $(DDX_OBJS)
INCLUDES = -I../include -I$(XINCLUDESRC) -I$(EXTINCSRC) -I$(SERVERSRC)/Xext \
INCLUDES = -I../include -I$(XINCLUDESRC) -I$(EXTINCSRC) -I$(SERVERSRC)/Xext \
-I$(SERVERSRC)/mi $(XF86INCLUDES) \
-I$(SERVERSRC)/mi $(XF86INCLUDES) \
...
@@ -40,7 +40,7 @@ XKB_DDXDEFS = XkbServerDefines
...
@@ -40,7 +40,7 @@ XKB_DDXDEFS = XkbServerDefines
LINTLIBS = ../dix/llib-ldix.ln ../os/llib-los.ln
LINTLIBS = ../dix/llib-ldix.ln ../os/llib-los.ln
DEFINES = $(XKB_DDXDEFS) $(NX_DEFINES)
DEFINES = $(XKB_DDXDEFS) $(NX_DEFINES)
XKB_DEFINES = -DXKB_BASE_DIRECTORY=\"$(
LIBDIR)/xkb
\" $(XKB_DISABLE)
XKB_DEFINES = -DXKB_BASE_DIRECTORY=\"$(
SYSTEMXKBCONFDIR)\" -DXKB_BIN_DIRECTORY=\"$(SYSTEMXKBBINDIR)\" -DXKB_DFLT_RULES_FILE=\"base\" -DXKB_DFLT_KB_LAYOUT=\"us\" -DXKB_DFLT_KB_MODEL=\"pc102
\" $(XKB_DISABLE)
NormalLibraryObjectRule()
NormalLibraryObjectRule()
NormalLibraryTarget(xkb,$(OBJS))
NormalLibraryTarget(xkb,$(OBJS))
...
...
nx-X11/programs/Xserver/xkb/XKBMAlloc.c
View file @
fccef5fc
...
@@ -396,7 +396,7 @@ KeyCode matchingKeys[XkbMaxKeyCount],nMatchingKeys;
...
@@ -396,7 +396,7 @@ KeyCode matchingKeys[XkbMaxKeyCount],nMatchingKeys;
}
}
if
(
nResize
>
0
)
{
if
(
nResize
>
0
)
{
int
nextMatch
;
int
nextMatch
;
xkb
->
map
->
size_syms
=
(
nTotal
*
1
2
)
/
10
;
xkb
->
map
->
size_syms
=
(
nTotal
*
1
5
)
/
10
;
newSyms
=
_XkbTypedCalloc
(
xkb
->
map
->
size_syms
,
KeySym
);
newSyms
=
_XkbTypedCalloc
(
xkb
->
map
->
size_syms
,
KeySym
);
if
(
newSyms
==
NULL
)
if
(
newSyms
==
NULL
)
return
BadAlloc
;
return
BadAlloc
;
...
...
nx-X11/programs/Xserver/xkb/XKBMisc.c
View file @
fccef5fc
...
@@ -366,8 +366,11 @@ unsigned changed,tmp;
...
@@ -366,8 +366,11 @@ unsigned changed,tmp;
unsigned
int
new_vmodmask
;
unsigned
int
new_vmodmask
;
changed
|=
XkbKeyActionsMask
;
changed
|=
XkbKeyActionsMask
;
pActs
=
XkbResizeKeyActions
(
xkb
,
key
,
nSyms
);
pActs
=
XkbResizeKeyActions
(
xkb
,
key
,
nSyms
);
if
(
!
pActs
)
if
(
!
pActs
)
{
if
(
nSyms
>
IBUF_SIZE
)
free
(
interps
);
return
False
;
return
False
;
}
new_vmodmask
=
0
;
new_vmodmask
=
0
;
for
(
n
=
0
;
n
<
nSyms
;
n
++
)
{
for
(
n
=
0
;
n
<
nSyms
;
n
++
)
{
if
(
interps
[
n
])
{
if
(
interps
[
n
])
{
...
@@ -470,7 +473,7 @@ register int i;
...
@@ -470,7 +473,7 @@ register int i;
int
width
,
nOldGroups
,
oldWidth
,
newTypes
[
XkbNumKbdGroups
];
int
width
,
nOldGroups
,
oldWidth
,
newTypes
[
XkbNumKbdGroups
];
if
((
!
xkb
)
||
(
!
XkbKeycodeInRange
(
xkb
,
key
))
||
(
!
xkb
->
map
)
||
if
((
!
xkb
)
||
(
!
XkbKeycodeInRange
(
xkb
,
key
))
||
(
!
xkb
->
map
)
||
(
!
xkb
->
map
->
types
)
||
((
groups
&
XkbAllGroupsMask
)
==
0
)
||
(
!
xkb
->
map
->
types
)
||
(
!
newTypesIn
)
||
(
(
groups
&
XkbAllGroupsMask
)
==
0
)
||
(
nGroups
>
XkbNumKbdGroups
))
{
(
nGroups
>
XkbNumKbdGroups
))
{
return
BadMatch
;
return
BadMatch
;
}
}
...
...
nx-X11/programs/Xserver/xkb/ddxBeep.c
View file @
fccef5fc
...
@@ -38,6 +38,7 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
...
@@ -38,6 +38,7 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
#include <xkbsrv.h>
#include <xkbsrv.h>
#include <nx-X11/extensions/XI.h>
#include <nx-X11/extensions/XI.h>
/*#define FALLING_TONE 1*/
/*#define FALLING_TONE 1*/
/*#define RISING_TONE 1*/
/*#define RISING_TONE 1*/
#define FALLING_TONE 10
#define FALLING_TONE 10
...
...
nx-X11/programs/Xserver/xkb/ddxInit.c
deleted
100644 → 0
View file @
122db3fd
/************************************************************
Copyright (c) 1993 by Silicon Graphics Computer Systems, Inc.
Permission to use, copy, modify, and distribute this
software and its documentation for any purpose and without
fee is hereby granted, provided that the above copyright
notice appear in all copies and that both that copyright
notice and this permission notice appear in supporting
documentation, and that the name of Silicon Graphics not be
used in advertising or publicity pertaining to distribution
of the software without specific prior written permission.
Silicon Graphics makes no representation about the suitability
of this software for any purpose. It is provided "as is"
without any express or implied warranty.
SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON
GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH
THE USE OR PERFORMANCE OF THIS SOFTWARE.
********************************************************/
#ifdef HAVE_DIX_CONFIG_H
#include <dix-config.h>
#endif
#include <stdio.h>
#include <nx-X11/X.h>
#include <nx-X11/Xproto.h>
#include <nx-X11/keysym.h>
#include "inputstr.h"
#include "scrnintstr.h"
#include "windowstr.h"
#include <xkbsrv.h>
#include <nx-X11/extensions/XI.h>
int
XkbDDXInitDevice
(
DeviceIntPtr
dev
)
{
return
1
;
}
nx-X11/programs/Xserver/xkb/ddxKeyClick.c
deleted
100644 → 0
View file @
122db3fd
/************************************************************
Copyright (c) 1993 by Silicon Graphics Computer Systems, Inc.
Permission to use, copy, modify, and distribute this
software and its documentation for any purpose and without
fee is hereby granted, provided that the above copyright
notice appear in all copies and that both that copyright
notice and this permission notice appear in supporting
documentation, and that the name of Silicon Graphics not be
used in advertising or publicity pertaining to distribution
of the software without specific prior written permission.
Silicon Graphics makes no representation about the suitability
of this software for any purpose. It is provided "as is"
without any express or implied warranty.
SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON
GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH
THE USE OR PERFORMANCE OF THIS SOFTWARE.
********************************************************/
#ifdef HAVE_DIX_CONFIG_H
#include <dix-config.h>
#endif
#include <stdio.h>
#include <nx-X11/X.h>
#include <nx-X11/Xproto.h>
#include <nx-X11/keysym.h>
#include "inputstr.h"
#include "scrnintstr.h"
#include "windowstr.h"
#include <xkbsrv.h>
#include <nx-X11/extensions/XI.h>
void
XkbDDXKeyClick
(
DeviceIntPtr
pXDev
,
int
keycode
,
int
synthetic
)
{
#ifdef DEBUG
if
(
xkbDebugFlags
)
ErrorF
(
"Click.
\n
"
);
#endif
return
;
}
nx-X11/programs/Xserver/xkb/ddxKillSrv.c
View file @
fccef5fc
...
@@ -28,10 +28,6 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
...
@@ -28,10 +28,6 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
#include <dix-config.h>
#include <dix-config.h>
#endif
#endif
#ifdef HAVE_XORG_CONFIG_H
#include <xorg-config.h>
#endif
#include <stdio.h>
#include <stdio.h>
#include <nx-X11/X.h>
#include <nx-X11/X.h>
#include <nx-X11/Xproto.h>
#include <nx-X11/Xproto.h>
...
@@ -40,7 +36,6 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
...
@@ -40,7 +36,6 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
#include "scrnintstr.h"
#include "scrnintstr.h"
#include "windowstr.h"
#include "windowstr.h"
#include <xkbsrv.h>
#include <xkbsrv.h>
#include <nx-X11/extensions/XI.h>
int
int
XkbDDXTerminateServer
(
DeviceIntPtr
dev
,
KeyCode
key
,
XkbAction
*
act
)
XkbDDXTerminateServer
(
DeviceIntPtr
dev
,
KeyCode
key
,
XkbAction
*
act
)
...
...
nx-X11/programs/Xserver/xkb/ddxList.c
View file @
fccef5fc
...
@@ -162,36 +162,46 @@ char tmpname[PATH_MAX];
...
@@ -162,36 +162,46 @@ char tmpname[PATH_MAX];
#endif
#endif
if
(
XkbBaseDirectory
!=
NULL
)
{
if
(
XkbBaseDirectory
!=
NULL
)
{
if
((
list
->
pattern
[
what
][
0
]
==
'*'
)
&&
(
list
->
pattern
[
what
][
1
]
==
'\0'
))
{
if
((
list
->
pattern
[
what
][
0
]
==
'*'
)
&&
(
list
->
pattern
[
what
][
1
]
==
'\0'
))
{
buf
=
Xprintf
(
"%s/%s.dir"
,
XkbBaseDirectory
,
componentDirs
[
what
]);
if
(
asprintf
(
&
buf
,
"%s/%s.dir"
,
XkbBaseDirectory
,
in
=
fopen
(
buf
,
"r"
);
componentDirs
[
what
])
==
-
1
)
free
(
buf
);
buf
=
NULL
;
buf
=
NULL
;
else
in
=
fopen
(
buf
,
"r"
);
}
}
if
(
!
in
)
{
if
(
!
in
)
{
haveDir
=
False
;
haveDir
=
False
;
buf
=
Xprintf
(
free
(
buf
);
if
(
asprintf
(
&
buf
,
"'%s/xkbcomp' '-R%s/%s' -w %ld -l -vlfhpR '%s'"
W32_tmparg
,
"'%s/xkbcomp' '-R%s/%s' -w %ld -l -vlfhpR '%s'"
W32_tmparg
,
XkbBinDirectory
,
XkbBaseDirectory
,
componentDirs
[
what
],(
long
)
XkbBinDirectory
,
XkbBaseDirectory
,
componentDirs
[
what
],
((
xkbDebugFlags
<
2
)
?
1
:
((
xkbDebugFlags
>
10
)
?
10
:
xkbDebugFlags
)),
(
long
)
((
xkbDebugFlags
<
2
)
?
1
:
((
xkbDebugFlags
>
10
)
?
10
:
xkbDebugFlags
)),
file
W32_tmpfile
file
W32_tmpfile
);
)
==
-
1
)
buf
=
NULL
;
}
}
}
}
else
{
else
{
if
((
list
->
pattern
[
what
][
0
]
==
'*'
)
&&
(
list
->
pattern
[
what
][
1
]
==
'\0'
))
{
if
((
list
->
pattern
[
what
][
0
]
==
'*'
)
&&
(
list
->
pattern
[
what
][
1
]
==
'\0'
))
{
buf
=
Xprintf
(
"%s.dir"
,
componentDirs
[
what
]);
if
(
asprintf
(
&
buf
,
"%s.dir"
,
componentDirs
[
what
])
==
-
1
)
in
=
fopen
(
buf
,
"r"
);
buf
=
NULL
;
free
(
buf
);
else
in
=
fopen
(
buf
,
"r"
);
buf
=
NULL
;
buf
=
NULL
;
}
}
if
(
!
in
)
{
if
(
!
in
)
{
haveDir
=
False
;
haveDir
=
False
;
buf
=
Xprintf
(
free
(
buf
);
if
(
asprintf
(
&
buf
,
"xkbcomp -R%s -w %ld -l -vlfhpR '%s'"
W32_tmparg
,
"xkbcomp -R%s -w %ld -l -vlfhpR '%s'"
W32_tmparg
,
componentDirs
[
what
],(
long
)
componentDirs
[
what
],
((
xkbDebugFlags
<
2
)
?
1
:
((
xkbDebugFlags
>
10
)
?
10
:
xkbDebugFlags
)),
(
long
)
((
xkbDebugFlags
<
2
)
?
1
:
((
xkbDebugFlags
>
10
)
?
10
:
xkbDebugFlags
)),
file
W32_tmpfile
file
W32_tmpfile
);
)
==
-
1
)
buf
=
NULL
;
}
}
}
}
status
=
Success
;
status
=
Success
;
...
@@ -211,14 +221,20 @@ char tmpname[PATH_MAX];
...
@@ -211,14 +221,20 @@ char tmpname[PATH_MAX];
}
}
if
(
!
in
)
if
(
!
in
)
{
{
if
(
buf
!=
NULL
)
free
(
buf
);
free
(
buf
);
#ifdef WIN32
#ifdef WIN32
unlink
(
tmpname
);
unlink
(
tmpname
);
#endif
#endif
return
BadImplementation
;
return
BadImplementation
;
}
}
list
->
nFound
[
what
]
=
0
;
list
->
nFound
[
what
]
=
0
;
if
(
buf
)
{
free
(
buf
);
buf
=
NULL
;
}
buf
=
malloc
(
PATH_MAX
*
sizeof
(
char
));
if
(
!
buf
)
return
BadAlloc
;
while
((
status
==
Success
)
&&
((
tmp
=
fgets
(
buf
,
PATH_MAX
,
in
))
!=
NULL
))
{
while
((
status
==
Success
)
&&
((
tmp
=
fgets
(
buf
,
PATH_MAX
,
in
))
!=
NULL
))
{
unsigned
flags
;
unsigned
flags
;
register
unsigned
int
i
;
register
unsigned
int
i
;
...
@@ -263,7 +279,7 @@ char tmpname[PATH_MAX];
...
@@ -263,7 +279,7 @@ char tmpname[PATH_MAX];
#ifndef WIN32
#ifndef WIN32
if
(
haveDir
)
if
(
haveDir
)
fclose
(
in
);
fclose
(
in
);
else
if
((
rval
=
p
close
(
in
))
!=
0
)
{
else
if
((
rval
=
P
close
(
in
))
!=
0
)
{
if
(
xkbDebugFlags
)
if
(
xkbDebugFlags
)
ErrorF
(
"xkbcomp returned exit code %d
\n
"
,
rval
);
ErrorF
(
"xkbcomp returned exit code %d
\n
"
,
rval
);
}
}
...
@@ -271,8 +287,7 @@ char tmpname[PATH_MAX];
...
@@ -271,8 +287,7 @@ char tmpname[PATH_MAX];
fclose
(
in
);
fclose
(
in
);
unlink
(
tmpname
);
unlink
(
tmpname
);
#endif
#endif
if
(
buf
!=
NULL
)
free
(
buf
);
free
(
buf
);
return
status
;
return
status
;
}
}
...
...
nx-X11/programs/Xserver/xkb/ddxLoad.c
View file @
fccef5fc
...
@@ -178,310 +178,6 @@ Win32System(const char *cmdline)
...
@@ -178,310 +178,6 @@ Win32System(const char *cmdline)
# endif
# endif
#endif
#endif
#ifdef NXAGENT_SERVER
#define NX_XKB_BASE_DIRECTORY "/usr/lib/X11/xkb"
#define NX_XKB_ALTERNATE_BASE_DIRECTORY "/usr/share/X11/xkb"
#define NX_XKB_RULES_BASE_FILE "rules/base"
#define NX_ALT_XKBCOMP_PATH "/usr/bin"
static
char
_NXXkbBasePath
[
PATH_MAX
];
static
char
_NXXkbCompPath
[
PATH_MAX
];
static
int
NXVerifyXkbBaseDirectory
(
const
char
*
dirPath
)
{
int
size
;
char
*
rulesBaseFilePath
;
struct
stat
rulesBaseFileStat
;
/*
* If rules/base file
* is not present inside
* the Xkb Base Directory,
* we suppose that the
* path is not valid.
*/
size
=
strlen
(
dirPath
)
+
strlen
(
"/"
)
+
strlen
(
NX_XKB_RULES_BASE_FILE
)
+
1
;
if
((
rulesBaseFilePath
=
malloc
((
size
+
1
)
*
sizeof
(
char
)))
==
NULL
)
{
FatalError
(
"NXVerifyXkbBaseDirectory: malloc failed.
\n
"
);
}
strcpy
(
rulesBaseFilePath
,
dirPath
);
strcat
(
rulesBaseFilePath
,
"/"
);
strcat
(
rulesBaseFilePath
,
NX_XKB_RULES_BASE_FILE
);
#ifdef TEST
fprintf
(
stderr
,
"NXVerifyXkbBaseDirectory: Looking for [%s] file.
\n
"
,
rulesBaseFilePath
);
#endif
if
(
stat
(
rulesBaseFilePath
,
&
rulesBaseFileStat
)
!=
0
)
{
#ifdef TEST
fprintf
(
stderr
,
"NXVerifyXkbBaseDirectory: Xkb Base Directory [%s] is not valid (can't find file [%s]).
\n
"
,
dirPath
,
rulesBaseFilePath
);
#endif
free
(
rulesBaseFilePath
);
return
0
;
}
#ifdef TEST
fprintf
(
stderr
,
"NXVerifyXkbBaseDirectory: Xkb Base Directory [%s] is valid.
\n
"
,
dirPath
);
#endif
free
(
rulesBaseFilePath
);
return
1
;
}
/*
* This function returns the directory
* containing the configuration files.
* This directory is referred by Xkb-
* BaseDirectory variable (generally
* it contains the hardcoded path at
* compile time). If the directory
* does not exist, the function will
* try a set of well known directories.
*/
char
*
_NXGetXkbBasePath
(
const
char
*
path
)
{
/*
* Check the xkb base directory only once.
*/
if
(
*
_NXXkbBasePath
!=
'\0'
)
{
return
_NXXkbBasePath
;
}
if
(
NXVerifyXkbBaseDirectory
(
XkbBaseDirectory
)
==
1
)
{
if
(
strlen
(
XkbBaseDirectory
)
+
1
>
PATH_MAX
)
{
#ifdef TEST
fprintf
(
stderr
,
"_NXGetXkbBasePath: WARNING! Maximum length of xkb base path exceeded.
\n
"
);
#endif
goto
_NXGetXkbBasePathError
;
}
strcpy
(
_NXXkbBasePath
,
XkbBaseDirectory
);
#ifdef TEST
fprintf
(
stderr
,
"_NXGetXkbBasePath: Using NX xkb base directory path [%s].
\n
"
,
_NXXkbBasePath
);
#endif
return
_NXXkbBasePath
;
}
if
(
NXVerifyXkbBaseDirectory
(
NX_XKB_BASE_DIRECTORY
)
==
1
)
{
if
(
strlen
(
NX_XKB_BASE_DIRECTORY
)
+
1
>
PATH_MAX
)
{
#ifdef TEST
fprintf
(
stderr
,
"_NXGetXkbBasePath: WARNING! Maximum length of xkb base path exceeded.
\n
"
);
#endif
goto
_NXGetXkbBasePathError
;
}
strcpy
(
_NXXkbBasePath
,
NX_XKB_BASE_DIRECTORY
);
#ifdef TEST
fprintf
(
stderr
,
"_NXGetXkbBasePath: Using NX xkb base directory path [%s].
\n
"
,
_NXXkbBasePath
);
#endif
return
_NXXkbBasePath
;
}
if
(
NXVerifyXkbBaseDirectory
(
NX_XKB_ALTERNATE_BASE_DIRECTORY
)
==
1
)
{
if
(
strlen
(
NX_XKB_ALTERNATE_BASE_DIRECTORY
)
+
1
>
PATH_MAX
)
{
#ifdef TEST
fprintf
(
stderr
,
"_NXGetXkbBasePath: WARNING! Maximum length of xkb base path exceeded.
\n
"
);
#endif
goto
_NXGetXkbBasePathError
;
}
strcpy
(
_NXXkbBasePath
,
NX_XKB_ALTERNATE_BASE_DIRECTORY
);
#ifdef TEST
fprintf
(
stderr
,
"_NXGetXkbBasePath: Using NX xkb base directory path [%s].
\n
"
,
_NXXkbBasePath
);
#endif
return
_NXXkbBasePath
;
}
_NXGetXkbBasePathError:
if
(
strlen
(
path
)
+
1
>
PATH_MAX
)
{
#ifdef TEST
fprintf
(
stderr
,
"_NXGetXkbBasePath: WARNING! Maximum length of xkb base path exceeded.
\n
"
);
#endif
}
strcpy
(
_NXXkbBasePath
,
path
);
#ifdef TEST
fprintf
(
stderr
,
"_NXGetXkbBasePath: Using default xkb base path [%s].
\n
"
,
_NXXkbBasePath
);
#endif
return
_NXXkbBasePath
;
}
static
int
NXVerifyXkbCompPath
(
char
*
path
)
{
char
*
xkbCompPath
;
int
xkbCompPathSize
;
struct
stat
xkbCompPathStat
;
if
(
path
==
NULL
)
{
return
0
;
}
xkbCompPathSize
=
strlen
(
path
)
+
strlen
(
"/"
)
+
strlen
(
"xkbcomp"
)
+
1
;
if
((
xkbCompPath
=
malloc
((
xkbCompPathSize
+
1
)
*
sizeof
(
char
)))
==
NULL
)
{
FatalError
(
"NXVerifyXkbCompPath: WARNING! malloc failed.
\n
"
);
return
0
;
}
strcpy
(
xkbCompPath
,
path
);
strcat
(
xkbCompPath
,
"/"
);
strcat
(
xkbCompPath
,
"xkbcomp"
);
if
(
stat
(
xkbCompPath
,
&
xkbCompPathStat
)
!=
0
)
{
#ifdef NX_TRANS_TEST
fprintf
(
stderr
,
"NXVerifyXkbCompPath: WARNING! Failed to stat xkbcomp path [%s].
\n
"
,
xkbCompPath
);
#endif
free
(
xkbCompPath
);
return
0
;
}
free
(
xkbCompPath
);
return
1
;
}
/*
* This function returns the directory
* containing the xkbcomp executable.
* The function will first try to locate
* the executable in the hardcoded path
* (the same path as the "base" xkb one)
* and, if the xkbcomp file couldn't be
* found, the function will not include
* an explicit path and will rely on the
* PATH environment to list the directory.
*/
char
*
_NXGetXkbCompPath
(
const
char
*
path
)
{
char
*
xkbCompPath
;
/*
* Check the xkbcomp executable
* directory only once.
*/
if
(
*
_NXXkbCompPath
!=
'\0'
)
{
return
_NXXkbCompPath
;
}
xkbCompPath
=
_NXGetXkbBasePath
(
path
);
if
(
NXVerifyXkbCompPath
(
xkbCompPath
)
==
1
)
{
if
(
strlen
(
xkbCompPath
)
+
1
>
PATH_MAX
)
{
#ifdef TEST
fprintf
(
stderr
,
"_NXGetXkbCompPath: WARNING! Maximum length of xkbcomp path exceeded.
\n
"
);
#endif
goto
_NXGetXkbCompPathError
;
}
strcpy
(
_NXXkbCompPath
,
xkbCompPath
);
#ifdef TEST
fprintf
(
stderr
,
"_NXGetXkbCompPath: Using xkbcomp path [%s].
\n
"
,
_NXXkbCompPath
);
#endif
return
_NXXkbCompPath
;
}
xkbCompPath
=
NX_ALT_XKBCOMP_PATH
;
if
(
NXVerifyXkbCompPath
(
xkbCompPath
)
==
1
)
{
if
(
strlen
(
xkbCompPath
)
+
1
>
PATH_MAX
)
{
#ifdef TEST
fprintf
(
stderr
,
"_NXGetXkbCompPath: WARNING! Maximum length of xkbcomp path exceeded.
\n
"
);
#endif
goto
_NXGetXkbCompPathError
;
}
strcpy
(
_NXXkbCompPath
,
xkbCompPath
);
#ifdef TEST
fprintf
(
stderr
,
"_NXGetXkbCompPath: Using NX xkbcomp path [%s].
\n
"
,
_NXXkbCompPath
);
#endif
return
_NXXkbCompPath
;
}
_NXGetXkbCompPathError:
if
(
strlen
(
path
)
+
1
>
PATH_MAX
)
{
#ifdef TEST
fprintf
(
stderr
,
"_NXGetXkbCompPath: WARNING! Maximum length of xkbcomp path exceeded.
\n
"
);
#endif
}
strcpy
(
_NXXkbCompPath
,
path
);
#ifdef TEST
fprintf
(
stderr
,
"_NXGetXkbCompPath: Using default xkbcomp path [%s].
\n
"
,
_NXXkbCompPath
);
#endif
return
_NXXkbCompPath
;
}
#endif
static
void
static
void
OutputDirectory
(
OutputDirectory
(
char
*
outdir
,
char
*
outdir
,
...
@@ -547,38 +243,26 @@ char *cmd = NULL,file[PATH_MAX],xkm_output_dir[PATH_MAX],*map,*outFile;
...
@@ -547,38 +243,26 @@ char *cmd = NULL,file[PATH_MAX],xkm_output_dir[PATH_MAX],*map,*outFile;
XkbEnsureSafeMapName
(
outFile
);
XkbEnsureSafeMapName
(
outFile
);
OutputDirectory
(
xkm_output_dir
,
sizeof
(
xkm_output_dir
));
OutputDirectory
(
xkm_output_dir
,
sizeof
(
xkm_output_dir
));
#ifdef NXAGENT_SERVER
if
(
_NXGetXkbCompPath
(
XkbBaseDirectory
)
!=
NULL
)
{
#else
if
(
XkbBaseDirectory
!=
NULL
)
{
if
(
XkbBaseDirectory
!=
NULL
)
{
#endif
#ifdef NXAGENT_SERVER
char
*
xkbbasedir
=
_NXGetXkbBasePath
(
XkbBaseDirectory
);
char
*
xkbbindir
=
_NXGetXkbCompPath
(
XkbBinDirectory
);
#else
char
*
xkbbasedir
=
XkbBaseDirectory
;
char
*
xkbbasedir
=
XkbBaseDirectory
;
char
*
xkbbindir
=
XkbBinDirectory
;
char
*
xkbbindir
=
XkbBinDirectory
;
#endif
cmd
=
Xprintf
(
"
\"
%s"
PATHSEPARATOR
"xkbcomp
\"
-w %d
\"
-R%s
\"
-xkm %s%s -em1 %s -emp %s -eml %s keymap/%s
\"
%s%s.xkm
\"
"
,
if
(
asprintf
(
&
cmd
,
"
\"
%s"
PATHSEPARATOR
"xkbcomp
\"
-w %d
\"
-R%s
\"
-xkm %s%s -em1 %s -emp %s -eml %s keymap/%s
\"
%s%s.xkm
\"
"
,
xkbbindir
,
xkbbindir
,
((
xkbDebugFlags
<
2
)
?
1
:
((
xkbDebugFlags
>
10
)
?
10
:
(
int
)
xkbDebugFlags
)),
((
xkbDebugFlags
<
2
)
?
1
:
((
xkbDebugFlags
>
10
)
?
10
:
(
int
)
xkbDebugFlags
)),
xkbbasedir
,(
map
?
"-m "
:
""
),(
map
?
map
:
""
),
xkbbasedir
,(
map
?
"-m "
:
""
),(
map
?
map
:
""
),
PRE_ERROR_MSG
,
ERROR_PREFIX
,
POST_ERROR_MSG1
,
file
,
PRE_ERROR_MSG
,
ERROR_PREFIX
,
POST_ERROR_MSG1
,
file
,
xkm_output_dir
,
outFile
);
xkm_output_dir
,
outFile
)
==
-
1
)
cmd
=
NULL
;
}
}
else
{
else
{
cmd
=
Xprintf
(
"xkbcomp -w %d -xkm %s%s -em1 %s -emp %s -eml %s keymap/%s
\"
%s%s.xkm
\"
"
,
if
(
asprintf
(
&
cmd
,
"xkbcomp -w %d -xkm %s%s -em1 %s -emp %s -eml %s keymap/%s
\"
%s%s.xkm
\"
"
,
((
xkbDebugFlags
<
2
)
?
1
:
((
xkbDebugFlags
>
10
)
?
10
:
(
int
)
xkbDebugFlags
)),
((
xkbDebugFlags
<
2
)
?
1
:
((
xkbDebugFlags
>
10
)
?
10
:
(
int
)
xkbDebugFlags
)),
(
map
?
"-m "
:
""
),(
map
?
map
:
""
),
(
map
?
"-m "
:
""
),(
map
?
map
:
""
),
PRE_ERROR_MSG
,
ERROR_PREFIX
,
POST_ERROR_MSG1
,
file
,
PRE_ERROR_MSG
,
ERROR_PREFIX
,
POST_ERROR_MSG1
,
file
,
xkm_output_dir
,
outFile
);
xkm_output_dir
,
outFile
)
==
-
1
)
cmd
=
NULL
;
}
}
#ifdef DEBUG
#ifdef DEBUG
if
(
xkbDebugFlags
)
{
if
(
xkbDebugFlags
)
{
...
@@ -643,12 +327,7 @@ char tmpname[PATH_MAX];
...
@@ -643,12 +327,7 @@ char tmpname[PATH_MAX];
(
void
)
mktemp
(
tmpname
);
(
void
)
mktemp
(
tmpname
);
#endif
#endif
#ifdef NXAGENT_SERVER
if
(
_NXGetXkbCompPath
(
XkbBaseDirectory
)
!=
NULL
)
{
#else
if
(
XkbBaseDirectory
!=
NULL
)
{
if
(
XkbBaseDirectory
!=
NULL
)
{
#endif
#ifndef WIN32
#ifndef WIN32
char
*
xkmfile
=
"-"
;
char
*
xkmfile
=
"-"
;
#else
#else
...
@@ -656,21 +335,17 @@ char tmpname[PATH_MAX];
...
@@ -656,21 +335,17 @@ char tmpname[PATH_MAX];
for xkbcomp. xkbcomp does not read from stdin. */
for xkbcomp. xkbcomp does not read from stdin. */
char
*
xkmfile
=
tmpname
;
char
*
xkmfile
=
tmpname
;
#endif
#endif
#ifdef NXAGENT_SERVER
char
*
xkbbasedir
=
_NXGetXkbBasePath
(
XkbBaseDirectory
);
char
*
xkbbindir
=
_NXGetXkbCompPath
(
XkbBinDirectory
);
#else
char
*
xkbbasedir
=
XkbBaseDirectory
;
char
*
xkbbasedir
=
XkbBaseDirectory
;
char
*
xkbbindir
=
XkbBinDirectory
;
char
*
xkbbindir
=
XkbBinDirectory
;
#endif
buf
=
Xprintf
(
if
(
asprintf
(
&
buf
,
"
\"
%s"
PATHSEPARATOR
"xkbcomp
\"
-w %d
\"
-R%s
\"
-xkm
\"
%s
\"
-em1 %s -emp %s -eml %s
\"
%s%s.xkm
\"
"
,
"
\"
%s"
PATHSEPARATOR
"xkbcomp
\"
-w %d
\"
-R%s
\"
-xkm
\"
%s
\"
-em1 %s -emp %s -eml %s
\"
%s%s.xkm
\"
"
,
xkbbindir
,
xkbbindir
,
((
xkbDebugFlags
<
2
)
?
1
:
((
xkbDebugFlags
>
10
)
?
10
:
(
int
)
xkbDebugFlags
)),
((
xkbDebugFlags
<
2
)
?
1
:
((
xkbDebugFlags
>
10
)
?
10
:
(
int
)
xkbDebugFlags
)),
xkbbasedir
,
xkmfile
,
xkbbasedir
,
xkmfile
,
PRE_ERROR_MSG
,
ERROR_PREFIX
,
POST_ERROR_MSG1
,
PRE_ERROR_MSG
,
ERROR_PREFIX
,
POST_ERROR_MSG1
,
xkm_output_dir
,
keymap
);
xkm_output_dir
,
keymap
)
==
-
1
)
buf
=
NULL
;
}
}
else
{
else
{
#ifndef WIN32
#ifndef WIN32
...
@@ -678,12 +353,13 @@ char tmpname[PATH_MAX];
...
@@ -678,12 +353,13 @@ char tmpname[PATH_MAX];
#else
#else
char
*
xkmfile
=
tmpname
;
char
*
xkmfile
=
tmpname
;
#endif
#endif
buf
=
Xprintf
(
if
(
asprintf
(
&
buf
,
"xkbcomp -w %d -xkm
\"
%s
\"
-em1 %s -emp %s -eml %s
\"
%s%s.xkm
\"
"
,
"xkbcomp -w %d -xkm
\"
%s
\"
-em1 %s -emp %s -eml %s
\"
%s%s.xkm
\"
"
,
((
xkbDebugFlags
<
2
)
?
1
:
((
xkbDebugFlags
>
10
)
?
10
:
(
int
)
xkbDebugFlags
)),
((
xkbDebugFlags
<
2
)
?
1
:
((
xkbDebugFlags
>
10
)
?
10
:
(
int
)
xkbDebugFlags
)),
xkmfile
,
xkmfile
,
PRE_ERROR_MSG
,
ERROR_PREFIX
,
POST_ERROR_MSG1
,
PRE_ERROR_MSG
,
ERROR_PREFIX
,
POST_ERROR_MSG1
,
xkm_output_dir
,
keymap
);
xkm_output_dir
,
keymap
)
==
-
1
)
buf
=
NULL
;
}
}
#ifdef TEST
#ifdef TEST
...
...
nx-X11/programs/Xserver/xkb/ddxPrivate.c
View file @
fccef5fc
...
@@ -3,11 +3,6 @@
...
@@ -3,11 +3,6 @@
#include <dix-config.h>
#include <dix-config.h>
#endif
#endif
#ifdef HAVE_XORG_CONFIG_H
#include <xorg-config.h>
#endif
#include <stdio.h>
#include <nx-X11/X.h>
#include <nx-X11/X.h>
#include "windowstr.h"
#include "windowstr.h"
#include <xkbsrv.h>
#include <xkbsrv.h>
...
...
nx-X11/programs/Xserver/xkb/ddxVT.c
View file @
fccef5fc
...
@@ -28,10 +28,6 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
...
@@ -28,10 +28,6 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
#include <dix-config.h>
#include <dix-config.h>
#endif
#endif
#ifdef HAVE_XORG_CONFIG_H
#include <xorg-config.h>
#endif
#include <stdio.h>
#include <stdio.h>
#include <nx-X11/X.h>
#include <nx-X11/X.h>
#include <nx-X11/Xproto.h>
#include <nx-X11/Xproto.h>
...
@@ -40,7 +36,6 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
...
@@ -40,7 +36,6 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
#include "scrnintstr.h"
#include "scrnintstr.h"
#include "windowstr.h"
#include "windowstr.h"
#include <xkbsrv.h>
#include <xkbsrv.h>
#include <nx-X11/extensions/XI.h>
int
int
XkbDDXSwitchScreen
(
DeviceIntPtr
dev
,
KeyCode
key
,
XkbAction
*
act
)
XkbDDXSwitchScreen
(
DeviceIntPtr
dev
,
KeyCode
key
,
XkbAction
*
act
)
...
...
nx-X11/programs/Xserver/xkb/maprules.c
View file @
fccef5fc
...
@@ -58,12 +58,6 @@
...
@@ -58,12 +58,6 @@
#define PR_DEBUG2(s,a,b)
#define PR_DEBUG2(s,a,b)
#endif
#endif
#ifdef NEED_STRCASECMP
extern
int
_XkbStrCaseCmp
(
char
*
s1
,
char
*
s2
);
#else
#define _XkbStrCaseCmp strcasecmp
#endif
/***====================================================================***/
/***====================================================================***/
#define DFLT_LINE_SIZE 128
#define DFLT_LINE_SIZE 128
...
@@ -1088,20 +1082,20 @@ int len,headingtype,extra_ndx = 0;
...
@@ -1088,20 +1082,20 @@ int len,headingtype,extra_ndx = 0;
for
(
;
GetInputLine
(
file
,
&
line
,
False
);
line
.
num_line
=
0
)
{
for
(
;
GetInputLine
(
file
,
&
line
,
False
);
line
.
num_line
=
0
)
{
if
(
line
.
line
[
0
]
==
'!'
)
{
if
(
line
.
line
[
0
]
==
'!'
)
{
tok
=
strtok
(
&
(
line
.
line
[
1
]),
"
\t
"
);
tok
=
strtok
(
&
(
line
.
line
[
1
]),
"
\t
"
);
if
(
_XkbStrCaseC
mp
(
tok
,
"model"
)
==
0
)
if
(
strcasec
mp
(
tok
,
"model"
)
==
0
)
headingtype
=
HEAD_MODEL
;
headingtype
=
HEAD_MODEL
;
else
if
(
_XkbStrCaseC
mp
(
tok
,
"layout"
)
==
0
)
else
if
(
strcasec
mp
(
tok
,
"layout"
)
==
0
)
headingtype
=
HEAD_LAYOUT
;
headingtype
=
HEAD_LAYOUT
;
else
if
(
_XkbStrCaseC
mp
(
tok
,
"variant"
)
==
0
)
else
if
(
strcasec
mp
(
tok
,
"variant"
)
==
0
)
headingtype
=
HEAD_VARIANT
;
headingtype
=
HEAD_VARIANT
;
else
if
(
_XkbStrCaseC
mp
(
tok
,
"option"
)
==
0
)
else
if
(
strcasec
mp
(
tok
,
"option"
)
==
0
)
headingtype
=
HEAD_OPTION
;
headingtype
=
HEAD_OPTION
;
else
{
else
{
int
i
;
int
i
;
headingtype
=
HEAD_EXTRA
;
headingtype
=
HEAD_EXTRA
;
extra_ndx
=
-
1
;
extra_ndx
=
-
1
;
for
(
i
=
0
;(
i
<
rules
->
num_extra
)
&&
(
extra_ndx
<
0
);
i
++
)
{
for
(
i
=
0
;(
i
<
rules
->
num_extra
)
&&
(
extra_ndx
<
0
);
i
++
)
{
if
(
!
_XkbStrCaseC
mp
(
tok
,
rules
->
extra_names
[
i
]))
if
(
!
strcasec
mp
(
tok
,
rules
->
extra_names
[
i
]))
extra_ndx
=
i
;
extra_ndx
=
i
;
}
}
if
(
extra_ndx
<
0
)
{
if
(
extra_ndx
<
0
)
{
...
...
nx-X11/programs/Xserver/xkb/xkb.c
View file @
fccef5fc
...
@@ -47,13 +47,6 @@ static int XkbKeyboardErrorCode;
...
@@ -47,13 +47,6 @@ static int XkbKeyboardErrorCode;
CARD32
xkbDebugFlags
=
0
;
CARD32
xkbDebugFlags
=
0
;
static
CARD32
xkbDebugCtrls
=
0
;
static
CARD32
xkbDebugCtrls
=
0
;
#ifndef XKB_SRV_UNSUPPORTED_XI_FEATURES
#define XKB_SRV_UNSUPPORTED_XI_FEATURES XkbXI_KeyboardsMask
#endif
unsigned
XkbXIUnsupported
=
XKB_SRV_UNSUPPORTED_XI_FEATURES
;
static
RESTYPE
RT_XKBCLIENT
;
static
RESTYPE
RT_XKBCLIENT
;
/***====================================================================***/
/***====================================================================***/
...
@@ -168,11 +161,6 @@ ProcXkbUseExtension(ClientPtr client)
...
@@ -168,11 +161,6 @@ ProcXkbUseExtension(ClientPtr client)
}
}
else
supported
=
1
;
else
supported
=
1
;
#ifdef XKB_SWAPPING_BUSTED
if
(
client
->
swapped
)
supported
=
0
;
#endif
if
((
supported
)
&&
(
!
(
client
->
xkbClientFlags
&
_XkbClientInitialized
)))
{
if
((
supported
)
&&
(
!
(
client
->
xkbClientFlags
&
_XkbClientInitialized
)))
{
client
->
xkbClientFlags
=
_XkbClientInitialized
;
client
->
xkbClientFlags
=
_XkbClientInitialized
;
client
->
vMajor
=
stuff
->
wantedMajor
;
client
->
vMajor
=
stuff
->
wantedMajor
;
...
@@ -2891,7 +2879,6 @@ ProcXkbGetNamedIndicator(ClientPtr client)
...
@@ -2891,7 +2879,6 @@ ProcXkbGetNamedIndicator(ClientPtr client)
register
int
i
=
0
;
register
int
i
=
0
;
XkbSrvLedInfoPtr
sli
;
XkbSrvLedInfoPtr
sli
;
XkbIndicatorMapPtr
map
=
NULL
;
XkbIndicatorMapPtr
map
=
NULL
;
Bool
supported
;
REQUEST
(
xkbGetNamedIndicatorReq
);
REQUEST
(
xkbGetNamedIndicatorReq
);
REQUEST_SIZE_MATCH
(
xkbGetNamedIndicatorReq
);
REQUEST_SIZE_MATCH
(
xkbGetNamedIndicatorReq
);
...
@@ -2906,25 +2893,15 @@ ProcXkbGetNamedIndicator(ClientPtr client)
...
@@ -2906,25 +2893,15 @@ ProcXkbGetNamedIndicator(ClientPtr client)
if
(
!
sli
)
if
(
!
sli
)
return
BadAlloc
;
return
BadAlloc
;
supported
=
True
;
i
=
0
;
if
(
XkbXIUnsupported
&
XkbXI_IndicatorsMask
)
{
map
=
NULL
;
if
((
dev
!=
(
DeviceIntPtr
)
LookupKeyboardDevice
())
||
if
((
sli
->
names
)
&&
(
sli
->
maps
))
{
((
sli
->
flags
&
XkbSLI_IsDefault
)
==
0
))
{
for
(
i
=
0
;
i
<
XkbNumIndicators
;
i
++
)
{
supported
=
False
;
if
(
stuff
->
indicator
==
sli
->
names
[
i
])
{
}
map
=
&
sli
->
maps
[
i
];
}
break
;
}
if
(
supported
)
{
}
i
=
0
;
map
=
NULL
;
if
((
sli
->
names
)
&&
(
sli
->
maps
))
{
for
(
i
=
0
;
i
<
XkbNumIndicators
;
i
++
)
{
if
(
stuff
->
indicator
==
sli
->
names
[
i
])
{
map
=
&
sli
->
maps
[
i
];
break
;
}
}
}
}
}
rep
.
type
=
X_Reply
;
rep
.
type
=
X_Reply
;
...
@@ -2932,7 +2909,7 @@ ProcXkbGetNamedIndicator(ClientPtr client)
...
@@ -2932,7 +2909,7 @@ ProcXkbGetNamedIndicator(ClientPtr client)
rep
.
sequenceNumber
=
client
->
sequence
;
rep
.
sequenceNumber
=
client
->
sequence
;
rep
.
deviceID
=
dev
->
id
;
rep
.
deviceID
=
dev
->
id
;
rep
.
indicator
=
stuff
->
indicator
;
rep
.
indicator
=
stuff
->
indicator
;
if
(
(
map
!=
NULL
)
&&
(
supported
)
)
{
if
(
map
!=
NULL
)
{
rep
.
found
=
True
;
rep
.
found
=
True
;
rep
.
on
=
((
sli
->
effectiveState
&
(
1
<<
i
))
!=
0
);
rep
.
on
=
((
sli
->
effectiveState
&
(
1
<<
i
))
!=
0
);
rep
.
realIndicator
=
((
sli
->
physIndicators
&
(
1
<<
i
))
!=
0
);
rep
.
realIndicator
=
((
sli
->
physIndicators
&
(
1
<<
i
))
!=
0
);
...
@@ -2960,7 +2937,7 @@ ProcXkbGetNamedIndicator(ClientPtr client)
...
@@ -2960,7 +2937,7 @@ ProcXkbGetNamedIndicator(ClientPtr client)
rep
.
realMods
=
0
;
rep
.
realMods
=
0
;
rep
.
virtualMods
=
0
;
rep
.
virtualMods
=
0
;
rep
.
ctrls
=
0
;
rep
.
ctrls
=
0
;
rep
.
supported
=
supported
;
rep
.
supported
=
True
;
}
}
if
(
client
->
swapped
)
{
if
(
client
->
swapped
)
{
swapl
(
&
rep
.
length
);
swapl
(
&
rep
.
length
);
...
@@ -2971,21 +2948,6 @@ ProcXkbGetNamedIndicator(ClientPtr client)
...
@@ -2971,21 +2948,6 @@ ProcXkbGetNamedIndicator(ClientPtr client)
}
}
WriteToClient
(
client
,
SIZEOF
(
xkbGetNamedIndicatorReply
),
&
rep
);
WriteToClient
(
client
,
SIZEOF
(
xkbGetNamedIndicatorReply
),
&
rep
);
if
(
!
supported
)
{
xkbExtensionDeviceNotify
edev
;
bzero
(
&
edev
,
sizeof
(
xkbExtensionDeviceNotify
));
edev
.
reason
=
XkbXI_UnsupportedFeatureMask
;
edev
.
ledClass
=
stuff
->
ledClass
;
edev
.
ledID
=
stuff
->
ledID
;
edev
.
ledsDefined
=
sli
->
namesPresent
|
sli
->
mapsPresent
;
edev
.
ledState
=
sli
->
effectiveState
;
edev
.
firstBtn
=
0
;
edev
.
nBtns
=
0
;
edev
.
unsupported
=
XkbXIUnsupported
&
XkbXI_IndicatorsMask
;
edev
.
supported
=
XkbXI_AllFeaturesMask
&
(
~
XkbXIUnsupported
);
XkbSendExtensionDeviceNotify
(
dev
,
client
,
&
edev
);
}
return
client
->
noClientException
;
return
client
->
noClientException
;
}
}
...
@@ -3020,24 +2982,6 @@ ProcXkbSetNamedIndicator(ClientPtr client)
...
@@ -3020,24 +2982,6 @@ ProcXkbSetNamedIndicator(ClientPtr client)
if
(
!
sli
)
if
(
!
sli
)
return
BadAlloc
;
return
BadAlloc
;
if
(
XkbXIUnsupported
&
XkbXI_IndicatorsMask
)
{
if
((
dev
!=
(
DeviceIntPtr
)
LookupKeyboardDevice
())
||
((
sli
->
flags
&
XkbSLI_IsDefault
)
==
0
))
{
bzero
(
&
ed
,
sizeof
(
xkbExtensionDeviceNotify
));
ed
.
reason
=
XkbXI_UnsupportedFeatureMask
;
ed
.
ledClass
=
stuff
->
ledClass
;
ed
.
ledID
=
stuff
->
ledID
;
ed
.
ledsDefined
=
sli
->
namesPresent
|
sli
->
mapsPresent
;
ed
.
ledState
=
sli
->
effectiveState
;
ed
.
firstBtn
=
0
;
ed
.
nBtns
=
0
;
ed
.
unsupported
=
XkbXIUnsupported
&
XkbXI_IndicatorsMask
;
ed
.
supported
=
XkbXI_AllFeaturesMask
&
(
~
XkbXIUnsupported
);
XkbSendExtensionDeviceNotify
(
dev
,
client
,
&
ed
);
return
client
->
noClientException
;
}
}
statec
=
mapc
=
namec
=
0
;
statec
=
mapc
=
namec
=
0
;
map
=
NULL
;
map
=
NULL
;
if
(
sli
->
names
&&
sli
->
maps
)
{
if
(
sli
->
names
&&
sli
->
maps
)
{
...
@@ -3052,7 +2996,8 @@ ProcXkbSetNamedIndicator(ClientPtr client)
...
@@ -3052,7 +2996,8 @@ ProcXkbSetNamedIndicator(ClientPtr client)
if
(
!
stuff
->
createMap
)
if
(
!
stuff
->
createMap
)
return
client
->
noClientException
;
return
client
->
noClientException
;
for
(
led
=
0
,
map
=
NULL
;(
led
<
XkbNumIndicators
)
&&
(
map
==
NULL
);
led
++
)
{
for
(
led
=
0
,
map
=
NULL
;(
led
<
XkbNumIndicators
)
&&
(
map
==
NULL
);
led
++
)
{
if
((
sli
->
names
[
led
]
==
None
)
&&
(
!
XkbIM_InUse
(
&
sli
->
maps
[
led
])))
{
if
((
sli
->
names
)
&&
(
sli
->
maps
)
&&
(
sli
->
names
[
led
]
==
None
)
&&
(
!
XkbIM_InUse
(
&
sli
->
maps
[
led
])))
{
map
=
&
sli
->
maps
[
led
];
map
=
&
sli
->
maps
[
led
];
sli
->
names
[
led
]
=
stuff
->
indicator
;
sli
->
names
[
led
]
=
stuff
->
indicator
;
break
;
break
;
...
@@ -3258,121 +3203,124 @@ char * desc;
...
@@ -3258,121 +3203,124 @@ char * desc;
swapl
(
&
rep
->
indicators
);
swapl
(
&
rep
->
indicators
);
}
}
start
=
desc
=
(
char
*
)
malloc
(
length
);
start
=
desc
=
(
char
*
)
calloc
(
1
,
length
);
if
(
!
start
)
if
(
!
start
)
return
BadAlloc
;
return
BadAlloc
;
if
(
which
&
XkbKeycodesNameMask
)
{
if
(
xkb
->
names
)
{
*
((
CARD32
*
)
desc
)
=
xkb
->
names
->
keycodes
;
if
(
which
&
XkbKeycodesNameMask
)
{
if
(
client
->
swapped
)
{
*
((
CARD32
*
)
desc
)
=
xkb
->
names
->
keycodes
;
if
(
client
->
swapped
)
{
swapl
((
int
*
)
desc
);
swapl
((
int
*
)
desc
);
}
}
desc
+=
4
;
desc
+=
4
;
}
}
if
(
which
&
XkbGeometryNameMask
)
{
if
(
which
&
XkbGeometryNameMask
)
{
*
((
CARD32
*
)
desc
)
=
xkb
->
names
->
geometry
;
*
((
CARD32
*
)
desc
)
=
xkb
->
names
->
geometry
;
if
(
client
->
swapped
)
{
if
(
client
->
swapped
)
{
swapl
((
int
*
)
desc
);
swapl
((
int
*
)
desc
);
}
}
desc
+=
4
;
desc
+=
4
;
}
}
if
(
which
&
XkbSymbolsNameMask
)
{
if
(
which
&
XkbSymbolsNameMask
)
{
*
((
CARD32
*
)
desc
)
=
xkb
->
names
->
symbols
;
*
((
CARD32
*
)
desc
)
=
xkb
->
names
->
symbols
;
if
(
client
->
swapped
)
{
if
(
client
->
swapped
)
{
swapl
((
int
*
)
desc
);
swapl
((
int
*
)
desc
);
}
}
desc
+=
4
;
desc
+=
4
;
}
}
if
(
which
&
XkbPhysSymbolsNameMask
)
{
if
(
which
&
XkbPhysSymbolsNameMask
)
{
register
CARD32
*
atm
=
(
CARD32
*
)
desc
;
register
CARD32
*
atm
=
(
CARD32
*
)
desc
;
atm
[
0
]
=
(
CARD32
)
xkb
->
names
->
phys_symbols
;
atm
[
0
]
=
(
CARD32
)
xkb
->
names
->
phys_symbols
;
if
(
client
->
swapped
)
{
if
(
client
->
swapped
)
{
swapl
(
&
atm
[
0
]);
swapl
(
&
atm
[
0
]);
}
}
desc
+=
4
;
desc
+=
4
;
}
}
if
(
which
&
XkbTypesNameMask
)
{
if
(
which
&
XkbTypesNameMask
)
{
*
((
CARD32
*
)
desc
)
=
(
CARD32
)
xkb
->
names
->
types
;
*
((
CARD32
*
)
desc
)
=
(
CARD32
)
xkb
->
names
->
types
;
if
(
client
->
swapped
)
{
if
(
client
->
swapped
)
{
swapl
((
int
*
)
desc
);
swapl
((
int
*
)
desc
);
}
}
desc
+=
4
;
desc
+=
4
;
}
}
if
(
which
&
XkbCompatNameMask
)
{
if
(
which
&
XkbCompatNameMask
)
{
*
((
CARD32
*
)
desc
)
=
(
CARD32
)
xkb
->
names
->
compat
;
*
((
CARD32
*
)
desc
)
=
(
CARD32
)
xkb
->
names
->
compat
;
if
(
client
->
swapped
)
{
if
(
client
->
swapped
)
{
swapl
((
int
*
)
desc
);
swapl
((
int
*
)
desc
);
}
}
desc
+=
4
;
desc
+=
4
;
}
}
if
(
which
&
XkbKeyTypeNamesMask
)
{
if
(
which
&
XkbKeyTypeNamesMask
)
{
register
CARD32
*
atm
=
(
CARD32
*
)
desc
;
register
CARD32
*
atm
=
(
CARD32
*
)
desc
;
register
XkbKeyTypePtr
type
=
xkb
->
map
->
types
;
register
XkbKeyTypePtr
type
=
xkb
->
map
->
types
;
for
(
i
=
0
;
i
<
xkb
->
map
->
num_types
;
i
++
,
atm
++
,
type
++
)
{
for
(
i
=
0
;
i
<
xkb
->
map
->
num_types
;
i
++
,
atm
++
,
type
++
)
{
*
atm
=
(
CARD32
)
type
->
name
;
*
atm
=
(
CARD32
)
type
->
name
;
if
(
client
->
swapped
)
{
if
(
client
->
swapped
)
{
swapl
(
atm
);
swapl
(
atm
);
}
}
}
}
desc
=
(
char
*
)
atm
;
desc
=
(
char
*
)
atm
;
}
}
if
(
which
&
XkbKTLevelNamesMask
)
{
if
(
which
&
XkbKTLevelNamesMask
&&
xkb
->
map
)
{
XkbKeyTypePtr
type
=
xkb
->
map
->
types
;
XkbKeyTypePtr
type
=
xkb
->
map
->
types
;
register
CARD32
*
atm
;
register
CARD32
*
atm
;
for
(
i
=
0
;
i
<
rep
->
nTypes
;
i
++
,
type
++
)
{
for
(
i
=
0
;
i
<
rep
->
nTypes
;
i
++
,
type
++
)
{
*
desc
++
=
type
->
num_levels
;
*
desc
++
=
type
->
num_levels
;
}
}
desc
+=
XkbPaddedSize
(
rep
->
nTypes
)
-
rep
->
nTypes
;
desc
+=
XkbPaddedSize
(
rep
->
nTypes
)
-
rep
->
nTypes
;
atm
=
(
CARD32
*
)
desc
;
atm
=
(
CARD32
*
)
desc
;
type
=
xkb
->
map
->
types
;
type
=
xkb
->
map
->
types
;
for
(
i
=
0
;
i
<
xkb
->
map
->
num_types
;
i
++
,
type
++
)
{
for
(
i
=
0
;
i
<
xkb
->
map
->
num_types
;
i
++
,
type
++
)
{
register
unsigned
l
;
register
unsigned
l
;
if
(
type
->
level_names
)
{
if
(
type
->
level_names
)
{
for
(
l
=
0
;
l
<
type
->
num_levels
;
l
++
,
atm
++
)
{
for
(
l
=
0
;
l
<
type
->
num_levels
;
l
++
,
atm
++
)
{
*
atm
=
type
->
level_names
[
l
];
*
atm
=
type
->
level_names
[
l
];
if
(
client
->
swapped
)
{
if
(
client
->
swapped
)
{
swapl
(
atm
);
swapl
(
atm
);
}
}
}
}
desc
+=
type
->
num_levels
*
4
;
desc
+=
type
->
num_levels
*
4
;
}
}
}
}
}
}
if
(
which
&
XkbIndicatorNamesMask
)
{
if
(
which
&
XkbIndicatorNamesMask
)
{
desc
=
_XkbWriteAtoms
(
desc
,
xkb
->
names
->
indicators
,
XkbNumIndicators
,
desc
=
_XkbWriteAtoms
(
desc
,
xkb
->
names
->
indicators
,
XkbNumIndicators
,
client
->
swapped
);
client
->
swapped
);
}
}
if
(
which
&
XkbVirtualModNamesMask
)
{
if
(
which
&
XkbVirtualModNamesMask
)
{
desc
=
_XkbWriteAtoms
(
desc
,
xkb
->
names
->
vmods
,
XkbNumVirtualMods
,
desc
=
_XkbWriteAtoms
(
desc
,
xkb
->
names
->
vmods
,
XkbNumVirtualMods
,
client
->
swapped
);
client
->
swapped
);
}
}
if
(
which
&
XkbGroupNamesMask
)
{
if
(
which
&
XkbGroupNamesMask
)
{
desc
=
_XkbWriteAtoms
(
desc
,
xkb
->
names
->
groups
,
XkbNumKbdGroups
,
desc
=
_XkbWriteAtoms
(
desc
,
xkb
->
names
->
groups
,
XkbNumKbdGroups
,
client
->
swapped
);
client
->
swapped
);
}
}
if
(
which
&
XkbKeyNamesMask
)
{
if
(
which
&
XkbKeyNamesMask
)
{
for
(
i
=
0
;
i
<
rep
->
nKeys
;
i
++
,
desc
+=
sizeof
(
XkbKeyNameRec
))
{
for
(
i
=
0
;
i
<
rep
->
nKeys
;
i
++
,
desc
+=
sizeof
(
XkbKeyNameRec
))
{
*
((
XkbKeyNamePtr
)
desc
)
=
xkb
->
names
->
keys
[
i
+
rep
->
firstKey
];
*
((
XkbKeyNamePtr
)
desc
)
=
xkb
->
names
->
keys
[
i
+
rep
->
firstKey
];
}
}
}
}
if
(
which
&
XkbKeyAliasesMask
)
{
if
(
which
&
XkbKeyAliasesMask
)
{
XkbKeyAliasPtr
pAl
;
XkbKeyAliasPtr
pAl
;
pAl
=
xkb
->
names
->
key_aliases
;
pAl
=
xkb
->
names
->
key_aliases
;
for
(
i
=
0
;
i
<
rep
->
nKeyAliases
;
i
++
,
pAl
++
,
desc
+=
2
*
XkbKeyNameLength
)
{
for
(
i
=
0
;
i
<
rep
->
nKeyAliases
;
i
++
,
pAl
++
,
desc
+=
2
*
XkbKeyNameLength
)
{
*
((
XkbKeyAliasPtr
)
desc
)
=
*
pAl
;
*
((
XkbKeyAliasPtr
)
desc
)
=
*
pAl
;
}
}
}
}
if
((
which
&
XkbRGNamesMask
)
&&
(
rep
->
nRadioGroups
>
0
))
{
if
((
which
&
XkbRGNamesMask
)
&&
(
rep
->
nRadioGroups
>
0
))
{
register
CARD32
*
atm
=
(
CARD32
*
)
desc
;
register
CARD32
*
atm
=
(
CARD32
*
)
desc
;
for
(
i
=
0
;
i
<
rep
->
nRadioGroups
;
i
++
,
atm
++
)
{
for
(
i
=
0
;
i
<
rep
->
nRadioGroups
;
i
++
,
atm
++
)
{
*
atm
=
(
CARD32
)
xkb
->
names
->
radio_groups
[
i
];
*
atm
=
(
CARD32
)
xkb
->
names
->
radio_groups
[
i
];
if
(
client
->
swapped
)
{
if
(
client
->
swapped
)
{
swapl
(
atm
);
swapl
(
atm
);
}
}
}
}
desc
+=
rep
->
nRadioGroups
*
4
;
desc
+=
rep
->
nRadioGroups
*
4
;
}
}
}
if
((
desc
-
start
)
!=
(
length
))
{
if
((
desc
-
start
)
!=
(
length
))
{
ErrorF
(
"BOGUS LENGTH in write names, expected %d, got %ld
\n
"
,
ErrorF
(
"BOGUS LENGTH in write names, expected %d, got %ld
\n
"
,
length
,
(
unsigned
long
)(
desc
-
start
));
length
,
(
unsigned
long
)(
desc
-
start
));
...
@@ -4722,7 +4670,7 @@ char * wire;
...
@@ -4722,7 +4670,7 @@ char * wire;
if
(
XkbAddGeomProperty
(
geom
,
name
,
val
)
==
NULL
)
{
if
(
XkbAddGeomProperty
(
geom
,
name
,
val
)
==
NULL
)
{
free
(
name
);
free
(
name
);
free
(
val
);
free
(
val
);
return
BadAlloc
;
return
BadAlloc
;
}
}
free
(
name
);
free
(
name
);
free
(
val
);
free
(
val
);
...
@@ -5070,7 +5018,7 @@ ProcXkbGetKbdByName(ClientPtr client)
...
@@ -5070,7 +5018,7 @@ ProcXkbGetKbdByName(ClientPtr client)
xkbGetIndicatorMapReply
irep
=
{
0
};
xkbGetIndicatorMapReply
irep
=
{
0
};
xkbGetNamesReply
nrep
=
{
0
};
xkbGetNamesReply
nrep
=
{
0
};
xkbGetGeometryReply
grep
=
{
0
};
xkbGetGeometryReply
grep
=
{
0
};
XkbComponentNamesRec
names
;
XkbComponentNamesRec
names
=
{
0
}
;
XkbDescPtr
xkb
;
XkbDescPtr
xkb
;
unsigned
char
*
str
;
unsigned
char
*
str
;
char
mapFile
[
PATH_MAX
];
char
mapFile
[
PATH_MAX
];
...
@@ -5610,7 +5558,7 @@ char * str;
...
@@ -5610,7 +5558,7 @@ char * str;
wanted
&=
~
XkbXI_ButtonActionsMask
;
wanted
&=
~
XkbXI_ButtonActionsMask
;
if
((
!
dev
->
kbdfeed
)
&&
(
!
dev
->
leds
))
if
((
!
dev
->
kbdfeed
)
&&
(
!
dev
->
leds
))
wanted
&=
~
XkbXI_IndicatorsMask
;
wanted
&=
~
XkbXI_IndicatorsMask
;
wanted
&=
~
XkbXI
Unsupported
;
wanted
&=
~
XkbXI
_KeyboardsMask
;
nameLen
=
XkbSizeCountedString
(
dev
->
name
);
nameLen
=
XkbSizeCountedString
(
dev
->
name
);
rep
.
type
=
X_Reply
;
rep
.
type
=
X_Reply
;
...
@@ -5618,8 +5566,8 @@ char * str;
...
@@ -5618,8 +5566,8 @@ char * str;
rep
.
sequenceNumber
=
client
->
sequence
;
rep
.
sequenceNumber
=
client
->
sequence
;
rep
.
length
=
nameLen
/
4
;
rep
.
length
=
nameLen
/
4
;
rep
.
present
=
wanted
;
rep
.
present
=
wanted
;
rep
.
supported
=
XkbXI_AllDeviceFeaturesMask
&
(
~
XkbXI
Unsupported
);
rep
.
supported
=
XkbXI_AllDeviceFeaturesMask
&
(
~
XkbXI
_KeyboardsMask
);
rep
.
unsupported
=
XkbXI
Unsupported
;
rep
.
unsupported
=
XkbXI
_KeyboardsMask
;
rep
.
firstBtnWanted
=
rep
.
nBtnsWanted
=
0
;
rep
.
firstBtnWanted
=
rep
.
nBtnsWanted
=
0
;
rep
.
firstBtnRtrn
=
rep
.
nBtnsRtrn
=
0
;
rep
.
firstBtnRtrn
=
rep
.
nBtnsRtrn
=
0
;
if
(
dev
->
button
)
if
(
dev
->
button
)
...
...
nx-X11/programs/Xserver/xkb/xkbAccessX.c
View file @
fccef5fc
...
@@ -132,9 +132,7 @@ xEvent xE;
...
@@ -132,9 +132,7 @@ xEvent xE;
}
}
#endif
#endif
if
(
_XkbIsPressEvent
(
type
))
if
(
!
_XkbIsPressEvent
(
type
)
&&
isRepeat
)
XkbDDXKeyClick
(
keybd
,
keyCode
,
TRUE
);
else
if
(
isRepeat
)
XkbLastRepeatEvent
=
(
void
*
)
&
xE
;
XkbLastRepeatEvent
=
(
void
*
)
&
xE
;
XkbProcessKeyboardEvent
(
&
xE
,
keybd
,
1L
);
XkbProcessKeyboardEvent
(
&
xE
,
keybd
,
1L
);
XkbLastRepeatEvent
=
NULL
;
XkbLastRepeatEvent
=
NULL
;
...
@@ -607,7 +605,7 @@ Bool ignoreKeyEvent = FALSE;
...
@@ -607,7 +605,7 @@ Bool ignoreKeyEvent = FALSE;
ev
.
keycode
=
key
;
ev
.
keycode
=
key
;
ev
.
slowKeysDelay
=
ctrls
->
slow_keys_delay
;
ev
.
slowKeysDelay
=
ctrls
->
slow_keys_delay
;
ev
.
debounceDelay
=
ctrls
->
debounce_delay
;
ev
.
debounceDelay
=
ctrls
->
debounce_delay
;
if
(
BitIsOn
(
keybd
->
key
->
down
,
key
)
|
(
xkbi
->
mouseKey
==
key
))
{
if
(
BitIsOn
(
keybd
->
key
->
down
,
key
)
|
|
(
xkbi
->
mouseKey
==
key
))
{
ev
.
detail
=
XkbAXN_SKRelease
;
ev
.
detail
=
XkbAXN_SKRelease
;
beep_type
=
_BEEP_SLOW_RELEASE
;
beep_type
=
_BEEP_SLOW_RELEASE
;
}
}
...
...
nx-X11/programs/Xserver/xkb/xkbActions.c
View file @
fccef5fc
...
@@ -996,7 +996,6 @@ _XkbFilterSwitchScreen( XkbSrvInfoPtr xkbi,
...
@@ -996,7 +996,6 @@ _XkbFilterSwitchScreen( XkbSrvInfoPtr xkbi,
return
1
;
return
1
;
}
}
#ifdef XFree86Server
static
int
static
int
_XkbFilterXF86Private
(
XkbSrvInfoPtr
xkbi
,
_XkbFilterXF86Private
(
XkbSrvInfoPtr
xkbi
,
XkbFilterPtr
filter
,
XkbFilterPtr
filter
,
...
@@ -1018,7 +1017,6 @@ _XkbFilterXF86Private( XkbSrvInfoPtr xkbi,
...
@@ -1018,7 +1017,6 @@ _XkbFilterXF86Private( XkbSrvInfoPtr xkbi,
}
}
return
1
;
return
1
;
}
}
#endif
#ifdef XINPUT
#ifdef XINPUT
...
@@ -1248,12 +1246,10 @@ xkbDeviceInfoPtr xkbPrivPtr = XKBDEVICEINFO(dev);
...
@@ -1248,12 +1246,10 @@ xkbDeviceInfoPtr xkbPrivPtr = XKBDEVICEINFO(dev);
sendEvent
=
_XkbFilterDeviceBtn
(
xkbi
,
filter
,
key
,
&
act
);
sendEvent
=
_XkbFilterDeviceBtn
(
xkbi
,
filter
,
key
,
&
act
);
break
;
break
;
#endif
#endif
#ifdef XFree86Server
case
XkbSA_XFree86Private
:
case
XkbSA_XFree86Private
:
filter
=
_XkbNextFreeFilter
();
filter
=
_XkbNextFreeFilter
();
sendEvent
=
_XkbFilterXF86Private
(
xkbi
,
filter
,
key
,
&
act
);
sendEvent
=
_XkbFilterXF86Private
(
xkbi
,
filter
,
key
,
&
act
);
break
;
break
;
#endif
}
}
}
}
}
}
...
...
nx-X11/programs/Xserver/xkb/xkbEvents.c
View file @
fccef5fc
...
@@ -207,6 +207,10 @@ int i;
...
@@ -207,6 +207,10 @@ int i;
CARD32
changedControls
;
CARD32
changedControls
;
changedControls
=
0
;
changedControls
=
0
;
if
(
!
kbd
||
!
kbd
->
kbdfeed
)
return
0
;
if
(
old
->
enabled_ctrls
!=
new
->
enabled_ctrls
)
if
(
old
->
enabled_ctrls
!=
new
->
enabled_ctrls
)
changedControls
|=
XkbControlsEnabledMask
;
changedControls
|=
XkbControlsEnabledMask
;
if
((
old
->
repeat_delay
!=
new
->
repeat_delay
)
||
if
((
old
->
repeat_delay
!=
new
->
repeat_delay
)
||
...
...
nx-X11/programs/Xserver/xkb/xkbInit.c
View file @
fccef5fc
...
@@ -54,13 +54,6 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
...
@@ -54,13 +54,6 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
#define CREATE_ATOM(s) MakeAtom(s,sizeof(s)-1,1)
#define CREATE_ATOM(s) MakeAtom(s,sizeof(s)-1,1)
#if defined(ultrix) || defined(__alpha) || defined(__alpha__)
#define LED_COMPOSE 2
#define LED_CAPS 3
#define LED_SCROLL 4
#define LED_NUM 5
#define PHYS_LEDS 0x1f
#else
#ifdef sun
#ifdef sun
#define LED_NUM 1
#define LED_NUM 1
#define LED_SCROLL 2
#define LED_SCROLL 2
...
@@ -73,7 +66,6 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
...
@@ -73,7 +66,6 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
#define LED_SCROLL 3
#define LED_SCROLL 3
#define PHYS_LEDS 0x07
#define PHYS_LEDS 0x07
#endif
#endif
#endif
#define MAX_TOC 16
#define MAX_TOC 16
typedef
struct
_SrvXkmInfo
{
typedef
struct
_SrvXkmInfo
{
...
@@ -115,6 +107,7 @@ typedef struct _SrvXkmInfo {
...
@@ -115,6 +107,7 @@ typedef struct _SrvXkmInfo {
char
*
XkbBaseDirectory
=
XKB_BASE_DIRECTORY
;
char
*
XkbBaseDirectory
=
XKB_BASE_DIRECTORY
;
char
*
XkbBinDirectory
=
XKB_BIN_DIRECTORY
;
char
*
XkbBinDirectory
=
XKB_BIN_DIRECTORY
;
static
int
XkbWantAccessX
=
0
;
static
int
XkbWantAccessX
=
0
;
static
XkbFileInfo
*
_XkbInitFileInfo
=
NULL
;
static
XkbFileInfo
*
_XkbInitFileInfo
=
NULL
;
...
@@ -550,8 +543,6 @@ XkbEventCauseRec cause;
...
@@ -550,8 +543,6 @@ XkbEventCauseRec cause;
XkbInitIndicatorMap
(
xkbi
,
&
file
);
XkbInitIndicatorMap
(
xkbi
,
&
file
);
XkbDDXInitDevice
(
pXDev
);
if
(
!
(
file
.
xkbinfo
.
defined
&
XkmSymbolsMask
))
{
if
(
!
(
file
.
xkbinfo
.
defined
&
XkmSymbolsMask
))
{
XkbUpdateKeyTypesFromCore
(
pXDev
,
xkb
->
min_key_code
,
XkbNumKeys
(
xkb
),
XkbUpdateKeyTypesFromCore
(
pXDev
,
xkb
->
min_key_code
,
XkbNumKeys
(
xkb
),
&
changes
);
&
changes
);
...
...
nx-X11/programs/Xserver/xkb/xkbLEDs.c
View file @
fccef5fc
...
@@ -274,13 +274,13 @@ unsigned oldState;
...
@@ -274,13 +274,13 @@ unsigned oldState;
changes
->
indicators
.
state_changes
|=
affected
;
changes
->
indicators
.
state_changes
|=
affected
;
}
}
ed
->
reason
|=
(
XkbXI_IndicatorStateMask
&
(
~
XkbXI
Unsupported
));
ed
->
reason
|=
(
XkbXI_IndicatorStateMask
&
(
~
XkbXI
_KeyboardsMask
));
ed
->
ledClass
=
sli
->
class
;
ed
->
ledClass
=
sli
->
class
;
ed
->
ledID
=
sli
->
id
;
ed
->
ledID
=
sli
->
id
;
ed
->
ledsDefined
=
sli
->
namesPresent
|
sli
->
mapsPresent
;
ed
->
ledsDefined
=
sli
->
namesPresent
|
sli
->
mapsPresent
;
ed
->
ledState
=
sli
->
effectiveState
;
ed
->
ledState
=
sli
->
effectiveState
;
ed
->
unsupported
|=
XkbXI
Unsupported
&
XkbXI_IndicatorStateMask
;
ed
->
unsupported
|=
XkbXI
_KeyboardsMask
&
XkbXI_IndicatorStateMask
;
ed
->
supported
=
XkbXI_AllFeaturesMask
&
(
~
XkbXI
Unsupported
);
ed
->
supported
=
XkbXI_AllFeaturesMask
&
(
~
XkbXI
_KeyboardsMask
);
if
(
changes
!=&
my_changes
)
changes
=
NULL
;
if
(
changes
!=&
my_changes
)
changes
=
NULL
;
if
(
ed
!=&
my_ed
)
ed
=
NULL
;
if
(
ed
!=&
my_ed
)
ed
=
NULL
;
...
@@ -745,13 +745,13 @@ xkbExtensionDeviceNotify my_ed;
...
@@ -745,13 +745,13 @@ xkbExtensionDeviceNotify my_ed;
changes
->
names
.
changed_indicators
|=
changed_names
;
changes
->
names
.
changed_indicators
|=
changed_names
;
}
}
ed
->
reason
|=
(
XkbXI_IndicatorNamesMask
&
(
~
XkbXI
Unsupported
));
ed
->
reason
|=
(
XkbXI_IndicatorNamesMask
&
(
~
XkbXI
_KeyboardsMask
));
ed
->
ledClass
=
sli
->
class
;
ed
->
ledClass
=
sli
->
class
;
ed
->
ledID
=
sli
->
id
;
ed
->
ledID
=
sli
->
id
;
ed
->
ledsDefined
=
sli
->
namesPresent
|
sli
->
mapsPresent
;
ed
->
ledsDefined
=
sli
->
namesPresent
|
sli
->
mapsPresent
;
ed
->
ledState
=
sli
->
effectiveState
;
ed
->
ledState
=
sli
->
effectiveState
;
ed
->
unsupported
|=
XkbXIUnsupported
&
XkbXI_IndicatorName
sMask
;
ed
->
unsupported
=
XkbXI_Keyboard
sMask
;
ed
->
supported
=
XkbXI_AllFeaturesMask
&
(
~
XkbXI
Unsupported
);
ed
->
supported
=
XkbXI_AllFeaturesMask
&
(
~
XkbXI
_KeyboardsMask
);
if
(
changes
!=&
my_changes
)
changes
=
NULL
;
if
(
changes
!=&
my_changes
)
changes
=
NULL
;
if
(
ed
!=&
my_ed
)
ed
=
NULL
;
if
(
ed
!=&
my_ed
)
ed
=
NULL
;
...
@@ -823,13 +823,13 @@ xkbExtensionDeviceNotify my_ed;
...
@@ -823,13 +823,13 @@ xkbExtensionDeviceNotify my_ed;
XkbCheckIndicatorMaps
(
dev
,
sli
,
changed_maps
);
XkbCheckIndicatorMaps
(
dev
,
sli
,
changed_maps
);
ed
->
reason
|=
(
XkbXI_IndicatorMapsMask
&
(
~
XkbXI
Unsupported
));
ed
->
reason
|=
(
XkbXI_IndicatorMapsMask
&
(
~
XkbXI
_KeyboardsMask
));
ed
->
ledClass
=
sli
->
class
;
ed
->
ledClass
=
sli
->
class
;
ed
->
ledID
=
sli
->
id
;
ed
->
ledID
=
sli
->
id
;
ed
->
ledsDefined
=
sli
->
namesPresent
|
sli
->
mapsPresent
;
ed
->
ledsDefined
=
sli
->
namesPresent
|
sli
->
mapsPresent
;
ed
->
ledState
=
sli
->
effectiveState
;
ed
->
ledState
=
sli
->
effectiveState
;
ed
->
unsupported
|=
XkbXI
Unsupported
&
XkbXI_IndicatorMapsMask
;
ed
->
unsupported
|=
XkbXI
_KeyboardsMask
&
XkbXI_IndicatorMapsMask
;
ed
->
supported
=
XkbXI_AllFeaturesMask
&
(
~
XkbXI
Unsupported
);
ed
->
supported
=
XkbXI_AllFeaturesMask
&
(
~
XkbXI
_KeyboardsMask
);
XkbUpdateLedAutoState
(
dev
,
sli
,
changed_maps
,
ed
,
changes
,
cause
);
XkbUpdateLedAutoState
(
dev
,
sli
,
changed_maps
,
ed
,
changes
,
cause
);
...
@@ -904,13 +904,13 @@ Bool kb_changed;
...
@@ -904,13 +904,13 @@ Bool kb_changed;
if
((
kbd
==
dev
)
&&
(
sli
->
flags
&
XkbSLI_IsDefault
))
if
((
kbd
==
dev
)
&&
(
sli
->
flags
&
XkbSLI_IsDefault
))
changes
->
indicators
.
state_changes
|=
affected
;
changes
->
indicators
.
state_changes
|=
affected
;
if
(
affected
)
{
if
(
affected
)
{
ed
->
reason
|=
(
XkbXI_IndicatorStateMask
&
(
~
XkbXI
Unsupported
));
ed
->
reason
|=
(
XkbXI_IndicatorStateMask
&
(
~
XkbXI
_KeyboardsMask
));
ed
->
ledClass
=
sli
->
class
;
ed
->
ledClass
=
sli
->
class
;
ed
->
ledID
=
sli
->
id
;
ed
->
ledID
=
sli
->
id
;
ed
->
ledsDefined
=
sli
->
namesPresent
|
sli
->
mapsPresent
;
ed
->
ledsDefined
=
sli
->
namesPresent
|
sli
->
mapsPresent
;
ed
->
ledState
=
sli
->
effectiveState
;
ed
->
ledState
=
sli
->
effectiveState
;
ed
->
unsupported
|=
XkbXI
Unsupported
&
XkbXI_IndicatorStateMask
;
ed
->
unsupported
|=
XkbXI
_KeyboardsMask
&
XkbXI_IndicatorStateMask
;
ed
->
supported
=
XkbXI_AllFeaturesMask
&
(
~
XkbXI
Unsupported
);
ed
->
supported
=
XkbXI_AllFeaturesMask
&
(
~
XkbXI
_KeyboardsMask
);
}
}
if
(
kb_changed
)
{
if
(
kb_changed
)
{
...
...
nx-X11/programs/Xserver/xkb/xkbPrKeyEv.c
View file @
fccef5fc
...
@@ -149,11 +149,7 @@ unsigned ndx;
...
@@ -149,11 +149,7 @@ unsigned ndx;
break
;
break
;
default:
default:
ErrorF
(
"unknown key behavior 0x%04x
\n
"
,
behavior
.
type
);
ErrorF
(
"unknown key behavior 0x%04x
\n
"
,
behavior
.
type
);
#if defined(MetroLink)
return
;
#else
break
;
break
;
#endif
}
}
}
}
XkbHandleActions
(
keybd
,
keybd
,
xE
,
count
);
XkbHandleActions
(
keybd
,
keybd
,
xE
,
count
);
...
...
nx-X11/programs/Xserver/xkb/xkbUtils.c
View file @
fccef5fc
...
@@ -711,11 +711,11 @@ unsigned char grp;
...
@@ -711,11 +711,11 @@ unsigned char grp;
grp
=
state
->
locked_group
;
grp
=
state
->
locked_group
;
if
(
grp
>=
ctrls
->
num_groups
)
if
(
grp
>=
ctrls
->
num_groups
)
state
->
locked_group
=
XkbAdjustGroup
(
grp
,
ctrls
);
state
->
locked_group
=
XkbAdjustGroup
(
XkbCharToInt
(
grp
)
,
ctrls
);
grp
=
state
->
locked_group
+
state
->
base_group
+
state
->
latched_group
;
grp
=
state
->
locked_group
+
state
->
base_group
+
state
->
latched_group
;
if
(
grp
>=
ctrls
->
num_groups
)
if
(
grp
>=
ctrls
->
num_groups
)
state
->
group
=
XkbAdjustGroup
(
grp
,
ctrls
);
state
->
group
=
XkbAdjustGroup
(
XkbCharToInt
(
grp
)
,
ctrls
);
else
state
->
group
=
grp
;
else
state
->
group
=
grp
;
XkbComputeCompatState
(
xkbi
);
XkbComputeCompatState
(
xkbi
);
return
;
return
;
...
@@ -763,7 +763,7 @@ XkbSrvLedInfoPtr sli;
...
@@ -763,7 +763,7 @@ XkbSrvLedInfoPtr sli;
if
(
cause
!=
NULL
)
{
if
(
cause
!=
NULL
)
{
xkbControlsNotify
cn
;
xkbControlsNotify
cn
;
cn
.
numGroups
=
ctrls
->
num_groups
;
cn
.
numGroups
=
ctrls
->
num_groups
;
cn
.
changedControls
|
=
XkbControlsEnabledMask
;
cn
.
changedControls
=
XkbControlsEnabledMask
;
cn
.
enabledControls
=
ctrls
->
enabled_ctrls
;
cn
.
enabledControls
=
ctrls
->
enabled_ctrls
;
cn
.
enabledControlChanges
=
(
ctrls
->
enabled_ctrls
^
old
);
cn
.
enabledControlChanges
=
(
ctrls
->
enabled_ctrls
^
old
);
cn
.
keycode
=
cause
->
kc
;
cn
.
keycode
=
cause
->
kc
;
...
...
nx-X11/programs/Xserver/xkb/xkbfmisc.c
View file @
fccef5fc
...
@@ -46,18 +46,185 @@
...
@@ -46,18 +46,185 @@
#include "xkbgeom.h"
#include "xkbgeom.h"
#include "xkb.h"
#include "xkb.h"
unsigned
_XkbKSCheckCase
(
KeySym
ks
)
{
unsigned
set
,
rtrn
;
set
=
(
ks
&
(
~
0xff
))
>>
8
;
rtrn
=
0
;
switch
(
set
)
{
case
0
:
/* latin 1 */
if
(((
ks
>=
XK_A
)
&&
(
ks
<=
XK_Z
))
||
((
ks
>=
XK_Agrave
)
&&
(
ks
<=
XK_THORN
)
&&
(
ks
!=
XK_multiply
)))
{
rtrn
|=
_XkbKSUpper
;
}
if
(((
ks
>=
XK_a
)
&&
(
ks
<=
XK_z
))
||
((
ks
>=
XK_agrave
)
&&
(
ks
<=
XK_ydiaeresis
)))
{
rtrn
|=
_XkbKSLower
;
}
break
;
case
1
:
/* latin 2 */
if
(((
ks
>=
XK_Aogonek
)
&&
(
ks
<=
XK_Zabovedot
)
&&
(
ks
!=
XK_breve
))
||
((
ks
>=
XK_Racute
)
&&
(
ks
<=
XK_Tcedilla
)))
{
rtrn
|=
_XkbKSUpper
;
}
if
(((
ks
>=
XK_aogonek
)
&&
(
ks
<=
XK_zabovedot
)
&&
(
ks
!=
XK_caron
))
||
((
ks
>=
XK_racute
)
&&
(
ks
<=
XK_tcedilla
)))
{
rtrn
|=
_XkbKSLower
;
}
break
;
case
2
:
/* latin 3 */
if
(((
ks
>=
XK_Hstroke
)
&&
(
ks
<=
XK_Jcircumflex
))
||
((
ks
>=
XK_Cabovedot
)
&&
(
ks
<=
XK_Scircumflex
)))
{
rtrn
|=
_XkbKSUpper
;
}
if
(((
ks
>=
XK_hstroke
)
&&
(
ks
<=
XK_jcircumflex
))
||
((
ks
>=
XK_cabovedot
)
&&
(
ks
<=
XK_scircumflex
)))
{
rtrn
|=
_XkbKSLower
;
}
break
;
case
3
:
/* latin 4 */
if
(((
ks
>=
XK_Rcedilla
)
&&
(
ks
<=
XK_Tslash
))
||
(
ks
==
XK_ENG
)
||
((
ks
>=
XK_Amacron
)
&&
(
ks
<=
XK_Umacron
)))
{
rtrn
|=
_XkbKSUpper
;
}
if
(((
ks
>=
XK_rcedilla
)
&&
(
ks
<=
XK_tslash
))
||
(
ks
==
XK_eng
)
||
((
ks
>=
XK_amacron
)
&&
(
ks
<=
XK_umacron
)))
{
rtrn
|=
_XkbKSLower
;
}
break
;
case
18
:
/* latin 8 */
if
((
ks
==
XK_Babovedot
)
||
((
ks
>=
XK_Dabovedot
)
&&
(
ks
<=
XK_Wacute
))
||
((
ks
>=
XK_Ygrave
)
&&
(
ks
<=
XK_Fabovedot
))
||
(
ks
==
XK_Mabovedot
)
||
(
ks
==
XK_Pabovedot
)
||
(
ks
==
XK_Sabovedot
)
||
(
ks
==
XK_Wdiaeresis
)
||
((
ks
>=
XK_Wcircumflex
)
&&
(
ks
<=
XK_Ycircumflex
)))
{
rtrn
|=
_XkbKSUpper
;
}
if
((
ks
==
XK_babovedot
)
||
(
ks
==
XK_dabovedot
)
||
(
ks
==
XK_fabovedot
)
||
(
ks
==
XK_mabovedot
)
||
((
ks
>=
XK_wgrave
)
&&
(
ks
<=
XK_wacute
))
||
(
ks
==
XK_ygrave
)
||
((
ks
>=
XK_wdiaeresis
)
&&
(
ks
<=
XK_ycircumflex
)))
{
rtrn
|=
_XkbKSLower
;
}
break
;
case
19
:
/* latin 9 */
if
((
ks
==
XK_OE
)
||
(
ks
==
XK_Ydiaeresis
))
{
rtrn
|=
_XkbKSUpper
;
}
if
(
ks
==
XK_oe
)
{
rtrn
|=
_XkbKSLower
;
}
break
;
}
return
rtrn
;
}
/***===================================================================***/
Bool
XkbLookupGroupAndLevel
(
XkbDescPtr
xkb
,
int
key
,
int
*
mods_inout
,
int
*
grp_inout
,
int
*
lvl_rtrn
)
{
int
nG
,
eG
;
if
((
!
xkb
)
||
(
!
XkbKeycodeInRange
(
xkb
,
key
))
||
(
!
grp_inout
))
return
False
;
nG
=
XkbKeyNumGroups
(
xkb
,
key
);
eG
=
*
grp_inout
;
if
(
nG
==
0
)
{
*
grp_inout
=
0
;
if
(
lvl_rtrn
!=
NULL
)
*
lvl_rtrn
=
0
;
return
False
;
}
else
if
(
nG
==
1
)
{
eG
=
0
;
}
else
if
(
eG
>=
nG
)
{
unsigned
gI
=
XkbKeyGroupInfo
(
xkb
,
key
);
switch
(
XkbOutOfRangeGroupAction
(
gI
))
{
default:
eG
%=
nG
;
break
;
case
XkbClampIntoRange
:
eG
=
nG
-
1
;
break
;
case
XkbRedirectIntoRange
:
eG
=
XkbOutOfRangeGroupNumber
(
gI
);
if
(
eG
>=
nG
)
eG
=
0
;
break
;
}
}
*
grp_inout
=
eG
;
if
(
mods_inout
!=
NULL
)
{
XkbKeyTypePtr
type
;
int
preserve
;
type
=
XkbKeyKeyType
(
xkb
,
key
,
eG
);
if
(
lvl_rtrn
!=
NULL
)
*
lvl_rtrn
=
0
;
preserve
=
0
;
if
(
type
->
map
)
{
/* find the shift level */
register
int
i
;
register
XkbKTMapEntryPtr
entry
;
for
(
i
=
0
,
entry
=
type
->
map
;
i
<
type
->
map_count
;
i
++
,
entry
++
)
{
if
((
entry
->
active
)
&&
(((
*
mods_inout
)
&
type
->
mods
.
mask
)
==
entry
->
mods
.
mask
)){
if
(
lvl_rtrn
!=
NULL
)
*
lvl_rtrn
=
entry
->
level
;
if
(
type
->
preserve
)
preserve
=
type
->
preserve
[
i
].
mask
;
break
;
}
}
}
(
*
mods_inout
)
&=
~
(
type
->
mods
.
mask
&
(
~
preserve
));
}
return
True
;
}
/***===================================================================***/
/***===================================================================***/
static
Bool
static
Bool
XkbWriteSectionFromName
(
FILE
*
file
,
char
*
sectionName
,
char
*
name
)
XkbWriteSectionFromName
(
FILE
*
file
,
char
*
sectionName
,
char
*
name
)
{
{
fprintf
(
file
,
" xkb_%-20s { include
\"
%s
\"
};
\n
"
,
sectionName
,
name
);
fprintf
(
file
,
" xkb_%-20s { include
\"
%s
\"
};
\n
"
,
sectionName
,
name
);
ErrorF
(
" xkb_%-20s { include
\"
%s
\"
};
\n
"
,
sectionName
,
name
);
return
True
;
return
True
;
}
}
#define NEED_DESC(n) ((!n)||((n)[0]=='+')||((n)[0]=='|')||(strchr((n),'%')))
#define NEED_DESC(n) ((!n)||((n)[0]=='+')||((n)[0]=='|')||(strchr((n),'%')))
#define COMPLETE(n) ((n)&&(!NEED_DESC(n)))
#define COMPLETE(n) ((n)&&(!NEED_DESC(n)))
/* ARGSUSED */
static
void
_AddIncl
(
FILE
*
file
,
XkbFileInfo
*
result
,
Bool
topLevel
,
Bool
showImplicit
,
int
index
,
void
*
priv
)
{
if
((
priv
)
&&
(
strcmp
((
char
*
)
priv
,
"%"
)
!=
0
))
fprintf
(
file
,
" include
\"
%s
\"\n
"
,(
char
*
)
priv
);
return
;
}
Bool
Bool
XkbWriteXKBKeymapForNames
(
FILE
*
file
,
XkbWriteXKBKeymapForNames
(
FILE
*
file
,
XkbComponentNamesPtr
names
,
XkbComponentNamesPtr
names
,
...
@@ -66,29 +233,230 @@ XkbWriteXKBKeymapForNames( FILE * file,
...
@@ -66,29 +233,230 @@ XkbWriteXKBKeymapForNames( FILE * file,
unsigned
want
,
unsigned
want
,
unsigned
need
)
unsigned
need
)
{
{
if
(
!
names
||
(
!
names
->
keycodes
&&
!
names
->
types
&&
!
names
->
compat
&&
char
*
name
;
!
names
->
symbols
&&
!
names
->
geometry
))
const
char
*
tmp
;
return
False
;
unsigned
complete
;
XkbNamesPtr
old_names
;
fprintf
(
file
,
"xkb_keymap
\"
%s
\"
{
\n
"
,
names
->
keymap
?
names
->
keymap
:
int
multi_section
;
"default"
);
unsigned
wantNames
,
wantConfig
,
wantDflts
;
XkbFileInfo
finfo
;
if
(
names
->
keycodes
)
XkbWriteSectionFromName
(
file
,
"keycodes"
,
names
->
keycodes
);
bzero
(
&
finfo
,
sizeof
(
XkbFileInfo
));
if
(
names
->
types
)
XkbWriteSectionFromName
(
file
,
"types"
,
names
->
types
);
complete
=
0
;
if
(
names
->
compat
)
if
((
name
=
names
->
keymap
)
==
NULL
)
name
=
"default"
;
XkbWriteSectionFromName
(
file
,
"compatibility"
,
names
->
compat
);
if
(
COMPLETE
(
names
->
keycodes
))
complete
|=
XkmKeyNamesMask
;
if
(
names
->
symbols
)
if
(
COMPLETE
(
names
->
types
))
complete
|=
XkmTypesMask
;
XkbWriteSectionFromName
(
file
,
"symbols"
,
names
->
symbols
);
if
(
COMPLETE
(
names
->
compat
))
complete
|=
XkmCompatMapMask
;
if
(
names
->
geometry
)
if
(
COMPLETE
(
names
->
symbols
))
complete
|=
XkmSymbolsMask
;
XkbWriteSectionFromName
(
file
,
"geometry"
,
names
->
geometry
);
if
(
COMPLETE
(
names
->
geometry
))
complete
|=
XkmGeometryMask
;
want
|=
(
complete
|
need
);
fprintf
(
file
,
"};
\n
"
);
if
(
want
&
XkmSymbolsMask
)
want
|=
XkmKeyNamesMask
|
XkmTypesMask
;
if
(
want
==
0
)
return
False
;
if
(
xkb
!=
NULL
)
{
old_names
=
xkb
->
names
;
finfo
.
type
=
0
;
finfo
.
defined
=
0
;
finfo
.
xkb
=
xkb
;
if
(
!
XkbDetermineFileType
(
&
finfo
,
XkbXKBFile
,
NULL
))
return
False
;
}
else
old_names
=
NULL
;
wantConfig
=
want
&
(
~
complete
);
if
(
xkb
!=
NULL
)
{
if
(
wantConfig
&
XkmTypesMask
)
{
if
((
!
xkb
->
map
)
||
(
xkb
->
map
->
num_types
<
XkbNumRequiredTypes
))
wantConfig
&=
~
XkmTypesMask
;
}
if
(
wantConfig
&
XkmCompatMapMask
)
{
if
((
!
xkb
->
compat
)
||
(
xkb
->
compat
->
num_si
<
1
))
wantConfig
&=
~
XkmCompatMapMask
;
}
if
(
wantConfig
&
XkmSymbolsMask
)
{
if
((
!
xkb
->
map
)
||
(
!
xkb
->
map
->
key_sym_map
))
wantConfig
&=
~
XkmSymbolsMask
;
}
if
(
wantConfig
&
XkmIndicatorsMask
)
{
if
(
!
xkb
->
indicators
)
wantConfig
&=
~
XkmIndicatorsMask
;
}
if
(
wantConfig
&
XkmKeyNamesMask
)
{
if
((
!
xkb
->
names
)
||
(
!
xkb
->
names
->
keys
))
wantConfig
&=
~
XkmKeyNamesMask
;
}
if
((
wantConfig
&
XkmGeometryMask
)
&&
(
!
xkb
->
geom
))
wantConfig
&=
~
XkmGeometryMask
;
}
else
{
wantConfig
=
0
;
}
complete
|=
wantConfig
;
wantDflts
=
0
;
wantNames
=
want
&
(
~
complete
);
if
((
xkb
!=
NULL
)
&&
(
old_names
!=
NULL
))
{
if
(
wantNames
&
XkmTypesMask
)
{
if
(
old_names
->
types
!=
None
)
{
tmp
=
NameForAtom
(
old_names
->
types
);
names
->
types
=
Xstrdup
(
tmp
);
}
else
{
wantDflts
|=
XkmTypesMask
;
}
complete
|=
XkmTypesMask
;
}
if
(
wantNames
&
XkmCompatMapMask
)
{
if
(
old_names
->
compat
!=
None
)
{
tmp
=
NameForAtom
(
old_names
->
compat
);
names
->
compat
=
Xstrdup
(
tmp
);
}
else
wantDflts
|=
XkmCompatMapMask
;
complete
|=
XkmCompatMapMask
;
}
if
(
wantNames
&
XkmSymbolsMask
)
{
if
(
old_names
->
symbols
==
None
)
return
False
;
tmp
=
NameForAtom
(
old_names
->
symbols
);
names
->
symbols
=
Xstrdup
(
tmp
);
complete
|=
XkmSymbolsMask
;
}
if
(
wantNames
&
XkmKeyNamesMask
)
{
if
(
old_names
->
keycodes
!=
None
)
{
tmp
=
NameForAtom
(
old_names
->
keycodes
);
names
->
keycodes
=
Xstrdup
(
tmp
);
}
else
wantDflts
|=
XkmKeyNamesMask
;
complete
|=
XkmKeyNamesMask
;
}
if
(
wantNames
&
XkmGeometryMask
)
{
if
(
old_names
->
geometry
==
None
)
return
False
;
tmp
=
NameForAtom
(
old_names
->
geometry
);
names
->
geometry
=
Xstrdup
(
tmp
);
complete
|=
XkmGeometryMask
;
wantNames
&=
~
XkmGeometryMask
;
}
}
if
(
complete
&
XkmCompatMapMask
)
complete
|=
XkmIndicatorsMask
|
XkmVirtualModsMask
;
else
if
(
complete
&
(
XkmSymbolsMask
|
XkmTypesMask
))
complete
|=
XkmVirtualModsMask
;
if
(
need
&
(
~
complete
))
return
False
;
if
((
complete
&
XkmSymbolsMask
)
&&
((
XkmKeyNamesMask
|
XkmTypesMask
)
&
(
~
complete
)))
return
False
;
multi_section
=
1
;
if
(((
complete
&
XkmKeymapRequired
)
==
XkmKeymapRequired
)
&&
((
complete
&
(
~
XkmKeymapLegal
))
==
0
))
{
fprintf
(
file
,
"xkb_keymap
\"
%s
\"
{
\n
"
,
name
);
}
else
if
(((
complete
&
XkmSemanticsRequired
)
==
XkmSemanticsRequired
)
&&
((
complete
&
(
~
XkmSemanticsLegal
))
==
0
))
{
fprintf
(
file
,
"xkb_semantics
\"
%s
\"
{
\n
"
,
name
);
}
else
if
(((
complete
&
XkmLayoutRequired
)
==
XkmLayoutRequired
)
&&
((
complete
&
(
~
XkmLayoutLegal
))
==
0
))
{
fprintf
(
file
,
"xkb_layout
\"
%s
\"
{
\n
"
,
name
);
}
else
if
(
XkmSingleSection
(
complete
&
(
~
XkmVirtualModsMask
)))
{
multi_section
=
0
;
}
else
{
return
False
;
}
wantNames
=
complete
&
(
~
(
wantConfig
|
wantDflts
));
name
=
names
->
keycodes
;
if
(
wantConfig
&
XkmKeyNamesMask
)
XkbWriteXKBKeycodes
(
file
,
&
finfo
,
False
,
False
,
_AddIncl
,
name
);
else
if
(
wantDflts
&
XkmKeyNamesMask
)
fprintf
(
stderr
,
"Default symbols not implemented yet!
\n
"
);
else
if
(
wantNames
&
XkmKeyNamesMask
)
XkbWriteSectionFromName
(
file
,
"keycodes"
,
name
);
name
=
names
->
types
;
if
(
wantConfig
&
XkmTypesMask
)
XkbWriteXKBKeyTypes
(
file
,
&
finfo
,
False
,
False
,
_AddIncl
,
name
);
else
if
(
wantDflts
&
XkmTypesMask
)
fprintf
(
stderr
,
"Default types not implemented yet!
\n
"
);
else
if
(
wantNames
&
XkmTypesMask
)
XkbWriteSectionFromName
(
file
,
"types"
,
name
);
name
=
names
->
compat
;
if
(
wantConfig
&
XkmCompatMapMask
)
XkbWriteXKBCompatMap
(
file
,
&
finfo
,
False
,
False
,
_AddIncl
,
name
);
else
if
(
wantDflts
&
XkmCompatMapMask
)
fprintf
(
stderr
,
"Default interps not implemented yet!
\n
"
);
else
if
(
wantNames
&
XkmCompatMapMask
)
XkbWriteSectionFromName
(
file
,
"compatibility"
,
name
);
name
=
names
->
symbols
;
if
(
wantConfig
&
XkmSymbolsMask
)
XkbWriteXKBSymbols
(
file
,
&
finfo
,
False
,
False
,
_AddIncl
,
name
);
else
if
(
wantNames
&
XkmSymbolsMask
)
XkbWriteSectionFromName
(
file
,
"symbols"
,
name
);
name
=
names
->
geometry
;
if
(
wantConfig
&
XkmGeometryMask
)
XkbWriteXKBGeometry
(
file
,
&
finfo
,
False
,
False
,
_AddIncl
,
name
);
else
if
(
wantNames
&
XkmGeometryMask
)
XkbWriteSectionFromName
(
file
,
"geometry"
,
name
);
if
(
multi_section
)
fprintf
(
file
,
"};
\n
"
);
return
True
;
return
True
;
}
}
/***====================================================================***/
/*ARGSUSED*/
Status
XkbMergeFile
(
XkbDescPtr
xkb
,
XkbFileInfo
finfo
)
{
return
BadImplementation
;
}
/***====================================================================***/
int
XkbFindKeycodeByName
(
XkbDescPtr
xkb
,
char
*
name
,
Bool
use_aliases
)
{
register
int
i
;
if
((
!
xkb
)
||
(
!
xkb
->
names
)
||
(
!
xkb
->
names
->
keys
))
return
0
;
for
(
i
=
xkb
->
min_key_code
;
i
<=
xkb
->
max_key_code
;
i
++
)
{
if
(
strncmp
(
xkb
->
names
->
keys
[
i
].
name
,
name
,
XkbKeyNameLength
)
==
0
)
return
i
;
}
if
(
!
use_aliases
)
return
0
;
if
(
xkb
->
geom
&&
xkb
->
geom
->
key_aliases
)
{
XkbKeyAliasPtr
a
;
a
=
xkb
->
geom
->
key_aliases
;
for
(
i
=
0
;
i
<
xkb
->
geom
->
num_key_aliases
;
i
++
,
a
++
)
{
if
(
strncmp
(
name
,
a
->
alias
,
XkbKeyNameLength
)
==
0
)
return
XkbFindKeycodeByName
(
xkb
,
a
->
real
,
False
);
}
}
if
(
xkb
->
names
&&
xkb
->
names
->
key_aliases
)
{
XkbKeyAliasPtr
a
;
a
=
xkb
->
names
->
key_aliases
;
for
(
i
=
0
;
i
<
xkb
->
names
->
num_key_aliases
;
i
++
,
a
++
)
{
if
(
strncmp
(
name
,
a
->
alias
,
XkbKeyNameLength
)
==
0
)
return
XkbFindKeycodeByName
(
xkb
,
a
->
real
,
False
);
}
}
return
0
;
}
unsigned
unsigned
XkbConvertGetByNameComponents
(
Bool
toXkm
,
unsigned
orig
)
XkbConvertGetByNameComponents
(
Bool
toXkm
,
unsigned
orig
)
{
{
...
@@ -115,6 +483,34 @@ unsigned rtrn;
...
@@ -115,6 +483,34 @@ unsigned rtrn;
return
rtrn
;
return
rtrn
;
}
}
unsigned
XkbConvertXkbComponents
(
Bool
toXkm
,
unsigned
orig
)
{
unsigned
rtrn
;
rtrn
=
0
;
if
(
toXkm
)
{
if
(
orig
&
XkbClientMapMask
)
rtrn
|=
XkmTypesMask
|
XkmSymbolsMask
;
if
(
orig
&
XkbServerMapMask
)
rtrn
|=
XkmTypesMask
|
XkmSymbolsMask
;
if
(
orig
&
XkbCompatMapMask
)
rtrn
|=
XkmCompatMapMask
;
if
(
orig
&
XkbIndicatorMapMask
)
rtrn
|=
XkmIndicatorsMask
;
if
(
orig
&
XkbNamesMask
)
rtrn
|=
XkmKeyNamesMask
;
if
(
orig
&
XkbGeometryMask
)
rtrn
|=
XkmGeometryMask
;
}
else
{
if
(
orig
!=
0
)
rtrn
|=
XkbNamesMask
;
if
(
orig
&
XkmTypesMask
)
rtrn
|=
XkbClientMapMask
;
if
(
orig
&
XkmCompatMapMask
)
rtrn
|=
XkbCompatMapMask
|
XkbIndicatorMapMask
;
if
(
orig
&
XkmSymbolsMask
)
rtrn
|=
XkbClientMapMask
|
XkbServerMapMask
;
if
(
orig
&
XkmIndicatorsMask
)
rtrn
|=
XkbIndicatorMapMask
;
if
(
orig
&
XkmKeyNamesMask
)
rtrn
|=
XkbNamesMask
|
XkbIndicatorMapMask
;
if
(
orig
&
XkmGeometryMask
)
rtrn
|=
XkbGeometryMask
;
}
return
rtrn
;
}
Bool
Bool
XkbDetermineFileType
(
XkbFileInfoPtr
finfo
,
int
format
,
int
*
opts_missing
)
XkbDetermineFileType
(
XkbFileInfoPtr
finfo
,
int
format
,
int
*
opts_missing
)
{
{
...
@@ -245,19 +641,3 @@ XkbNameMatchesPattern(char *name,char *ptrn)
...
@@ -245,19 +641,3 @@ XkbNameMatchesPattern(char *name,char *ptrn)
/* if we get here, the pattern is exhausted (-:just like me:-) */
/* if we get here, the pattern is exhausted (-:just like me:-) */
return
(
name
[
0
]
==
'\0'
);
return
(
name
[
0
]
==
'\0'
);
}
}
#ifdef NEED_STRCASECMP
_X_HIDDEN
int
_XkbStrCaseCmp
(
char
*
str1
,
char
*
str2
)
{
const
u_char
*
us1
=
(
const
u_char
*
)
str1
,
*
us2
=
(
const
u_char
*
)
str2
;
while
(
tolower
(
*
us1
)
==
tolower
(
*
us2
))
{
if
(
*
us1
++
==
'\0'
)
return
(
0
);
us2
++
;
}
return
(
tolower
(
*
us1
)
-
tolower
(
*
us2
));
}
#endif
nx-X11/programs/Xserver/xkb/xkbout.c
0 → 100644
View file @
fccef5fc
/************************************************************
Copyright (c) 1994 by Silicon Graphics Computer Systems, Inc.
Permission to use, copy, modify, and distribute this
software and its documentation for any purpose and without
fee is hereby granted, provided that the above copyright
notice appear in all copies and that both that copyright
notice and this permission notice appear in supporting
documentation, and that the name of Silicon Graphics not be
used in advertising or publicity pertaining to distribution
of the software without specific prior written permission.
Silicon Graphics makes no representation about the suitability
of this software for any purpose. It is provided "as is"
without any express or implied warranty.
SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON
GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH
THE USE OR PERFORMANCE OF THIS SOFTWARE.
********************************************************/
#ifdef HAVE_DIX_CONFIG_H
#include <dix-config.h>
#endif
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <nx-X11/Xfuncs.h>
#include <nx-X11/X.h>
#include <nx-X11/keysym.h>
#include <nx-X11/Xproto.h>
#include "misc.h"
#include "inputstr.h"
#include "dix.h"
#include "xkbstr.h"
#include <xkbsrv.h>
#include "xkbgeom.h"
#include <xkbfile.h>
#define VMOD_HIDE_VALUE 0
#define VMOD_SHOW_VALUE 1
#define VMOD_COMMENT_VALUE 2
static
Bool
WriteXKBVModDecl
(
FILE
*
file
,
Display
*
dpy
,
XkbDescPtr
xkb
,
int
showValue
)
{
register
int
i
,
nMods
;
Atom
*
vmodNames
;
if
(
xkb
==
NULL
)
return
False
;
if
(
xkb
->
names
!=
NULL
)
vmodNames
=
xkb
->
names
->
vmods
;
else
vmodNames
=
NULL
;
for
(
i
=
nMods
=
0
;
i
<
XkbNumVirtualMods
;
i
++
)
{
if
((
vmodNames
!=
NULL
)
&&
(
vmodNames
[
i
]
!=
None
))
{
if
(
nMods
==
0
)
fprintf
(
file
,
" virtual_modifiers "
);
else
fprintf
(
file
,
","
);
fprintf
(
file
,
"%s"
,
XkbAtomText
(
dpy
,
vmodNames
[
i
],
XkbXKBFile
));
if
((
showValue
!=
VMOD_HIDE_VALUE
)
&&
(
xkb
->
server
)
&&
(
xkb
->
server
->
vmods
[
i
]
!=
XkbNoModifierMask
))
{
if
(
showValue
==
VMOD_COMMENT_VALUE
)
{
fprintf
(
file
,
"/* = %s */"
,
XkbModMaskText
(
xkb
->
server
->
vmods
[
i
],
XkbXKBFile
));
}
else
{
fprintf
(
file
,
"= %s"
,
XkbModMaskText
(
xkb
->
server
->
vmods
[
i
],
XkbXKBFile
));
}
}
nMods
++
;
}
}
if
(
nMods
>
0
)
fprintf
(
file
,
";
\n\n
"
);
return
True
;
}
/***====================================================================***/
static
Bool
WriteXKBAction
(
FILE
*
file
,
XkbFileInfo
*
result
,
XkbAnyAction
*
action
)
{
XkbDescPtr
xkb
;
Display
*
dpy
;
xkb
=
result
->
xkb
;
dpy
=
xkb
->
dpy
;
fprintf
(
file
,
"%s"
,
XkbActionText
(
dpy
,
xkb
,(
XkbAction
*
)
action
,
XkbXKBFile
));
return
True
;
}
/***====================================================================***/
Bool
XkbWriteXKBKeycodes
(
FILE
*
file
,
XkbFileInfo
*
result
,
Bool
topLevel
,
Bool
showImplicit
,
XkbFileAddOnFunc
addOn
,
void
*
priv
)
{
Atom
kcName
;
register
unsigned
i
;
XkbDescPtr
xkb
;
Display
*
dpy
;
char
*
alternate
;
xkb
=
result
->
xkb
;
dpy
=
xkb
->
dpy
;
if
((
!
xkb
)
||
(
!
xkb
->
names
)
||
(
!
xkb
->
names
->
keys
))
{
_XkbLibError
(
_XkbErrMissingNames
,
"XkbWriteXKBKeycodes"
,
0
);
return
False
;
}
kcName
=
xkb
->
names
->
keycodes
;
if
(
kcName
!=
None
)
fprintf
(
file
,
"xkb_keycodes
\"
%s
\"
{
\n
"
,
XkbAtomText
(
dpy
,
kcName
,
XkbXKBFile
));
else
fprintf
(
file
,
"xkb_keycodes {
\n
"
);
fprintf
(
file
,
" minimum = %d;
\n
"
,
xkb
->
min_key_code
);
fprintf
(
file
,
" maximum = %d;
\n
"
,
xkb
->
max_key_code
);
for
(
i
=
xkb
->
min_key_code
;
i
<=
xkb
->
max_key_code
;
i
++
)
{
if
(
xkb
->
names
->
keys
[
i
].
name
[
0
]
!=
'\0'
)
{
if
(
XkbFindKeycodeByName
(
xkb
,
xkb
->
names
->
keys
[
i
].
name
,
True
)
!=
i
)
alternate
=
"alternate "
;
else
alternate
=
""
;
fprintf
(
file
,
" %s%6s = %d;
\n
"
,
alternate
,
XkbKeyNameText
(
xkb
->
names
->
keys
[
i
].
name
,
XkbXKBFile
),
i
);
}
}
if
(
xkb
->
indicators
!=
NULL
)
{
for
(
i
=
0
;
i
<
XkbNumIndicators
;
i
++
)
{
char
*
type
;
if
(
xkb
->
indicators
->
phys_indicators
&
(
1
<<
i
))
type
=
" "
;
else
type
=
" virtual "
;
if
(
xkb
->
names
->
indicators
[
i
]
!=
None
)
{
fprintf
(
file
,
"%sindicator %d =
\"
%s
\"
;
\n
"
,
type
,
i
+
1
,
XkbAtomText
(
dpy
,
xkb
->
names
->
indicators
[
i
],
XkbXKBFile
));
}
}
}
if
(
xkb
->
names
->
key_aliases
!=
NULL
)
{
XkbKeyAliasPtr
pAl
;
pAl
=
xkb
->
names
->
key_aliases
;
for
(
i
=
0
;
i
<
xkb
->
names
->
num_key_aliases
;
i
++
,
pAl
++
)
{
fprintf
(
file
,
" alias %6s = %6s;
\n
"
,
XkbKeyNameText
(
pAl
->
alias
,
XkbXKBFile
),
XkbKeyNameText
(
pAl
->
real
,
XkbXKBFile
));
}
}
if
(
addOn
)
(
*
addOn
)(
file
,
result
,
topLevel
,
showImplicit
,
XkmKeyNamesIndex
,
priv
);
fprintf
(
file
,
"};
\n\n
"
);
return
True
;
}
Bool
XkbWriteXKBKeyTypes
(
FILE
*
file
,
XkbFileInfo
*
result
,
Bool
topLevel
,
Bool
showImplicit
,
XkbFileAddOnFunc
addOn
,
void
*
priv
)
{
Display
*
dpy
;
register
unsigned
i
,
n
;
XkbKeyTypePtr
type
;
XkbKTMapEntryPtr
entry
;
XkbDescPtr
xkb
;
xkb
=
result
->
xkb
;
dpy
=
xkb
->
dpy
;
if
((
!
xkb
)
||
(
!
xkb
->
map
)
||
(
!
xkb
->
map
->
types
))
{
_XkbLibError
(
_XkbErrMissingTypes
,
"XkbWriteXKBKeyTypes"
,
0
);
return
False
;
}
if
(
xkb
->
map
->
num_types
<
XkbNumRequiredTypes
)
{
_XkbLibError
(
_XkbErrMissingReqTypes
,
"XkbWriteXKBKeyTypes"
,
0
);
return
0
;
}
if
((
xkb
->
names
==
NULL
)
||
(
xkb
->
names
->
types
==
None
))
fprintf
(
file
,
"xkb_types {
\n\n
"
);
else
fprintf
(
file
,
"xkb_types
\"
%s
\"
{
\n\n
"
,
XkbAtomText
(
dpy
,
xkb
->
names
->
types
,
XkbXKBFile
));
WriteXKBVModDecl
(
file
,
dpy
,
xkb
,
(
showImplicit
?
VMOD_COMMENT_VALUE
:
VMOD_HIDE_VALUE
));
type
=
xkb
->
map
->
types
;
for
(
i
=
0
;
i
<
xkb
->
map
->
num_types
;
i
++
,
type
++
)
{
fprintf
(
file
,
" type
\"
%s
\"
{
\n
"
,
XkbAtomText
(
dpy
,
type
->
name
,
XkbXKBFile
));
fprintf
(
file
,
" modifiers= %s;
\n
"
,
XkbVModMaskText
(
dpy
,
xkb
,
type
->
mods
.
real_mods
,
type
->
mods
.
vmods
,
XkbXKBFile
));
entry
=
type
->
map
;
for
(
n
=
0
;
n
<
type
->
map_count
;
n
++
,
entry
++
)
{
char
*
str
;
str
=
XkbVModMaskText
(
dpy
,
xkb
,
entry
->
mods
.
real_mods
,
entry
->
mods
.
vmods
,
XkbXKBFile
);
fprintf
(
file
,
" map[%s]= Level%d;
\n
"
,
str
,
entry
->
level
+
1
);
if
((
type
->
preserve
)
&&
((
type
->
preserve
[
n
].
real_mods
)
||
(
type
->
preserve
[
n
].
vmods
)))
{
fprintf
(
file
,
" preserve[%s]= "
,
str
);
fprintf
(
file
,
"%s;
\n
"
,
XkbVModMaskText
(
dpy
,
xkb
,
type
->
preserve
[
n
].
real_mods
,
type
->
preserve
[
n
].
vmods
,
XkbXKBFile
));
}
}
if
(
type
->
level_names
!=
NULL
)
{
Atom
*
name
=
type
->
level_names
;
for
(
n
=
0
;
n
<
type
->
num_levels
;
n
++
,
name
++
)
{
if
((
*
name
)
==
None
)
continue
;
fprintf
(
file
,
" level_name[Level%d]=
\"
%s
\"
;
\n
"
,
n
+
1
,
XkbAtomText
(
dpy
,
*
name
,
XkbXKBFile
));
}
}
fprintf
(
file
,
" };
\n
"
);
}
if
(
addOn
)
(
*
addOn
)(
file
,
result
,
topLevel
,
showImplicit
,
XkmTypesIndex
,
priv
);
fprintf
(
file
,
"};
\n\n
"
);
return
True
;
}
static
Bool
WriteXKBIndicatorMap
(
FILE
*
file
,
XkbFileInfo
*
result
,
Atom
name
,
XkbIndicatorMapPtr
led
,
XkbFileAddOnFunc
addOn
,
void
*
priv
)
{
XkbDescPtr
xkb
;
xkb
=
result
->
xkb
;
fprintf
(
file
,
" indicator
\"
%s
\"
{
\n
"
,
NameForAtom
(
name
));
if
(
led
->
flags
&
XkbIM_NoExplicit
)
fprintf
(
file
,
" !allowExplicit;
\n
"
);
if
(
led
->
flags
&
XkbIM_LEDDrivesKB
)
fprintf
(
file
,
" indicatorDrivesKeyboard;
\n
"
);
if
(
led
->
which_groups
!=
0
)
{
if
(
led
->
which_groups
!=
XkbIM_UseEffective
)
{
fprintf
(
file
,
" whichGroupState= %s;
\n
"
,
XkbIMWhichStateMaskText
(
led
->
which_groups
,
XkbXKBFile
));
}
fprintf
(
file
,
" groups= 0x%02x;
\n
"
,
led
->
groups
);
}
if
(
led
->
which_mods
!=
0
)
{
if
(
led
->
which_mods
!=
XkbIM_UseEffective
)
{
fprintf
(
file
,
" whichModState= %s;
\n
"
,
XkbIMWhichStateMaskText
(
led
->
which_mods
,
XkbXKBFile
));
}
fprintf
(
file
,
" modifiers= %s;
\n
"
,
XkbVModMaskText
(
xkb
->
dpy
,
xkb
,
led
->
mods
.
real_mods
,
led
->
mods
.
vmods
,
XkbXKBFile
));
}
if
(
led
->
ctrls
!=
0
)
{
fprintf
(
file
,
" controls= %s;
\n
"
,
XkbControlsMaskText
(
led
->
ctrls
,
XkbXKBFile
));
}
if
(
addOn
)
(
*
addOn
)(
file
,
result
,
False
,
True
,
XkmIndicatorsIndex
,
priv
);
fprintf
(
file
,
" };
\n
"
);
return
True
;
}
Bool
XkbWriteXKBCompatMap
(
FILE
*
file
,
XkbFileInfo
*
result
,
Bool
topLevel
,
Bool
showImplicit
,
XkbFileAddOnFunc
addOn
,
void
*
priv
)
{
Display
*
dpy
;
register
unsigned
i
;
XkbSymInterpretPtr
interp
;
XkbDescPtr
xkb
;
xkb
=
result
->
xkb
;
dpy
=
xkb
->
dpy
;
if
((
!
xkb
)
||
(
!
xkb
->
compat
)
||
(
!
xkb
->
compat
->
sym_interpret
))
{
_XkbLibError
(
_XkbErrMissingCompatMap
,
"XkbWriteXKBCompatMap"
,
0
);
return
False
;
}
if
((
xkb
->
names
==
NULL
)
||
(
xkb
->
names
->
compat
==
None
))
fprintf
(
file
,
"xkb_compatibility {
\n\n
"
);
else
fprintf
(
file
,
"xkb_compatibility
\"
%s
\"
{
\n\n
"
,
XkbAtomText
(
dpy
,
xkb
->
names
->
compat
,
XkbXKBFile
));
WriteXKBVModDecl
(
file
,
dpy
,
xkb
,
(
showImplicit
?
VMOD_COMMENT_VALUE
:
VMOD_HIDE_VALUE
));
fprintf
(
file
,
" interpret.useModMapMods= AnyLevel;
\n
"
);
fprintf
(
file
,
" interpret.repeat= False;
\n
"
);
fprintf
(
file
,
" interpret.locking= False;
\n
"
);
interp
=
xkb
->
compat
->
sym_interpret
;
for
(
i
=
0
;
i
<
xkb
->
compat
->
num_si
;
i
++
,
interp
++
)
{
fprintf
(
file
,
" interpret %s+%s(%s) {
\n
"
,
((
interp
->
sym
==
NoSymbol
)
?
"Any"
:
XkbKeysymText
(
interp
->
sym
,
XkbXKBFile
)),
XkbSIMatchText
(
interp
->
match
,
XkbXKBFile
),
XkbModMaskText
(
interp
->
mods
,
XkbXKBFile
));
if
(
interp
->
virtual_mod
!=
XkbNoModifier
)
{
fprintf
(
file
,
" virtualModifier= %s;
\n
"
,
XkbVModIndexText
(
dpy
,
xkb
,
interp
->
virtual_mod
,
XkbXKBFile
));
}
if
(
interp
->
match
&
XkbSI_LevelOneOnly
)
fprintf
(
file
,
" useModMapMods=level1;
\n
"
);
if
(
interp
->
flags
&
XkbSI_LockingKey
)
fprintf
(
file
,
" locking= True;
\n
"
);
if
(
interp
->
flags
&
XkbSI_AutoRepeat
)
fprintf
(
file
,
" repeat= True;
\n
"
);
fprintf
(
file
,
" action= "
);
WriteXKBAction
(
file
,
result
,
&
interp
->
act
);
fprintf
(
file
,
";
\n
"
);
fprintf
(
file
,
" };
\n
"
);
}
for
(
i
=
0
;
i
<
XkbNumKbdGroups
;
i
++
)
{
XkbModsPtr
gc
;
gc
=
&
xkb
->
compat
->
groups
[
i
];
if
((
gc
->
real_mods
==
0
)
&&
(
gc
->
vmods
==
0
))
continue
;
fprintf
(
file
,
" group %d = %s;
\n
"
,
i
+
1
,
XkbVModMaskText
(
xkb
->
dpy
,
xkb
,
gc
->
real_mods
,
gc
->
vmods
,
XkbXKBFile
));
}
if
(
xkb
->
indicators
)
{
for
(
i
=
0
;
i
<
XkbNumIndicators
;
i
++
)
{
XkbIndicatorMapPtr
map
=
&
xkb
->
indicators
->
maps
[
i
];
if
((
map
->
flags
!=
0
)
||
(
map
->
which_groups
!=
0
)
||
(
map
->
groups
!=
0
)
||
(
map
->
which_mods
!=
0
)
||
(
map
->
mods
.
real_mods
!=
0
)
||
(
map
->
mods
.
vmods
!=
0
)
||
(
map
->
ctrls
!=
0
))
{
WriteXKBIndicatorMap
(
file
,
result
,
xkb
->
names
->
indicators
[
i
],
map
,
addOn
,
priv
);
}
}
}
if
(
addOn
)
(
*
addOn
)(
file
,
result
,
topLevel
,
showImplicit
,
XkmCompatMapIndex
,
priv
);
fprintf
(
file
,
"};
\n\n
"
);
return
True
;
}
Bool
XkbWriteXKBSymbols
(
FILE
*
file
,
XkbFileInfo
*
result
,
Bool
topLevel
,
Bool
showImplicit
,
XkbFileAddOnFunc
addOn
,
void
*
priv
)
{
Display
*
dpy
;
register
unsigned
i
,
tmp
;
XkbDescPtr
xkb
;
XkbClientMapPtr
map
;
XkbServerMapPtr
srv
;
Bool
showActions
;
xkb
=
result
->
xkb
;
map
=
xkb
->
map
;
srv
=
xkb
->
server
;
dpy
=
xkb
->
dpy
;
if
((
!
xkb
)
||
(
!
map
)
||
(
!
map
->
syms
)
||
(
!
map
->
key_sym_map
))
{
_XkbLibError
(
_XkbErrMissingSymbols
,
"XkbWriteXKBSymbols"
,
0
);
return
False
;
}
if
((
!
xkb
->
names
)
||
(
!
xkb
->
names
->
keys
))
{
_XkbLibError
(
_XkbErrMissingNames
,
"XkbWriteXKBSymbols"
,
0
);
return
False
;
}
if
((
xkb
->
names
==
NULL
)
||
(
xkb
->
names
->
symbols
==
None
))
fprintf
(
file
,
"xkb_symbols {
\n\n
"
);
else
fprintf
(
file
,
"xkb_symbols
\"
%s
\"
{
\n\n
"
,
XkbAtomText
(
dpy
,
xkb
->
names
->
symbols
,
XkbXKBFile
));
for
(
tmp
=
i
=
0
;
i
<
XkbNumKbdGroups
;
i
++
)
{
if
(
xkb
->
names
->
groups
[
i
]
!=
None
)
{
fprintf
(
file
,
" name[group%d]=
\"
%s
\"
;
\n
"
,
i
+
1
,
XkbAtomText
(
dpy
,
xkb
->
names
->
groups
[
i
],
XkbXKBFile
));
tmp
++
;
}
}
if
(
tmp
>
0
)
fprintf
(
file
,
"
\n
"
);
for
(
i
=
xkb
->
min_key_code
;
i
<=
xkb
->
max_key_code
;
i
++
)
{
Bool
simple
;
if
((
int
)
XkbKeyNumSyms
(
xkb
,
i
)
<
1
)
continue
;
if
(
XkbFindKeycodeByName
(
xkb
,
xkb
->
names
->
keys
[
i
].
name
,
True
)
!=
i
)
continue
;
simple
=
True
;
fprintf
(
file
,
" key %6s {"
,
XkbKeyNameText
(
xkb
->
names
->
keys
[
i
].
name
,
XkbXKBFile
));
if
(
srv
->
explicit
)
{
if
(((
srv
->
explicit
[
i
]
&
XkbExplicitKeyTypesMask
)
!=
0
)
||
(
showImplicit
))
{
int
typeNdx
,
g
;
Bool
multi
;
char
*
comment
=
" "
;
if
((
srv
->
explicit
[
i
]
&
XkbExplicitKeyTypesMask
)
==
0
)
comment
=
"//"
;
multi
=
False
;
typeNdx
=
XkbKeyKeyTypeIndex
(
xkb
,
i
,
0
);
for
(
g
=
1
;(
g
<
XkbKeyNumGroups
(
xkb
,
i
))
&&
(
!
multi
);
g
++
)
{
if
(
XkbKeyKeyTypeIndex
(
xkb
,
i
,
g
)
!=
typeNdx
)
multi
=
True
;
}
if
(
multi
)
{
for
(
g
=
0
;
g
<
XkbKeyNumGroups
(
xkb
,
i
);
g
++
)
{
typeNdx
=
XkbKeyKeyTypeIndex
(
xkb
,
i
,
g
);
if
(
srv
->
explicit
[
i
]
&
(
1
<<
g
))
{
fprintf
(
file
,
"
\n
%s type[group%d]=
\"
%s
\"
,"
,
comment
,
g
+
1
,
XkbAtomText
(
dpy
,
map
->
types
[
typeNdx
].
name
,
XkbXKBFile
));
}
else
if
(
showImplicit
)
{
fprintf
(
file
,
"
\n
// type[group%d]=
\"
%s
\"
,"
,
g
+
1
,
XkbAtomText
(
dpy
,
map
->
types
[
typeNdx
].
name
,
XkbXKBFile
));
}
}
}
else
{
fprintf
(
file
,
"
\n
%s type=
\"
%s
\"
,"
,
comment
,
XkbAtomText
(
dpy
,
map
->
types
[
typeNdx
].
name
,
XkbXKBFile
));
}
simple
=
False
;
}
if
(((
srv
->
explicit
[
i
]
&
XkbExplicitAutoRepeatMask
)
!=
0
)
&&
(
xkb
->
ctrls
!=
NULL
))
{
if
(
xkb
->
ctrls
->
per_key_repeat
[
i
/
8
]
&
(
1
<<
(
i
%
8
)))
fprintf
(
file
,
"
\n
repeat= Yes,"
);
else
fprintf
(
file
,
"
\n
repeat= No,"
);
simple
=
False
;
}
if
((
xkb
->
server
!=
NULL
)
&&
(
xkb
->
server
->
vmodmap
!=
NULL
)
&&
(
xkb
->
server
->
vmodmap
[
i
]
!=
0
))
{
if
((
srv
->
explicit
[
i
]
&
XkbExplicitVModMapMask
)
!=
0
)
{
fprintf
(
file
,
"
\n
virtualMods= %s,"
,
XkbVModMaskText
(
dpy
,
xkb
,
0
,
xkb
->
server
->
vmodmap
[
i
],
XkbXKBFile
));
}
else
if
(
showImplicit
)
{
fprintf
(
file
,
"
\n
// virtualMods= %s,"
,
XkbVModMaskText
(
dpy
,
xkb
,
0
,
xkb
->
server
->
vmodmap
[
i
],
XkbXKBFile
));
}
}
}
switch
(
XkbOutOfRangeGroupAction
(
XkbKeyGroupInfo
(
xkb
,
i
)))
{
case
XkbClampIntoRange
:
fprintf
(
file
,
"
\n
groupsClamp,"
);
break
;
case
XkbRedirectIntoRange
:
fprintf
(
file
,
"
\n
groupsRedirect= Group%d,"
,
XkbOutOfRangeGroupNumber
(
XkbKeyGroupInfo
(
xkb
,
i
))
+
1
);
break
;
}
if
(
srv
->
behaviors
!=
NULL
)
{
unsigned
type
;
type
=
srv
->
behaviors
[
i
].
type
&
XkbKB_OpMask
;
if
(
type
!=
XkbKB_Default
)
{
simple
=
False
;
fprintf
(
file
,
"
\n
%s,"
,
XkbBehaviorText
(
xkb
,
&
srv
->
behaviors
[
i
],
XkbXKBFile
));
}
}
if
((
srv
->
explicit
==
NULL
)
||
showImplicit
||
((
srv
->
explicit
[
i
]
&
XkbExplicitInterpretMask
)
!=
0
))
showActions
=
XkbKeyHasActions
(
xkb
,
i
);
else
showActions
=
False
;
if
(((
unsigned
)
XkbKeyNumGroups
(
xkb
,
i
)
>
1
)
||
showActions
)
simple
=
False
;
if
(
simple
)
{
KeySym
*
syms
;
unsigned
s
;
syms
=
XkbKeySymsPtr
(
xkb
,
i
);
fprintf
(
file
,
" [ "
);
for
(
s
=
0
;
s
<
XkbKeyGroupWidth
(
xkb
,
i
,
XkbGroup1Index
);
s
++
)
{
if
(
s
!=
0
)
fprintf
(
file
,
", "
);
fprintf
(
file
,
"%15s"
,
XkbKeysymText
(
*
syms
++
,
XkbXKBFile
));
}
fprintf
(
file
,
" ] };
\n
"
);
}
else
{
unsigned
g
,
s
;
KeySym
*
syms
;
XkbAction
*
acts
;
syms
=
XkbKeySymsPtr
(
xkb
,
i
);
acts
=
XkbKeyActionsPtr
(
xkb
,
i
);
for
(
g
=
0
;
g
<
XkbKeyNumGroups
(
xkb
,
i
);
g
++
)
{
if
(
g
!=
0
)
fprintf
(
file
,
","
);
fprintf
(
file
,
"
\n
symbols[Group%d]= [ "
,
g
+
1
);
for
(
s
=
0
;
s
<
XkbKeyGroupWidth
(
xkb
,
i
,
g
);
s
++
)
{
if
(
s
!=
0
)
fprintf
(
file
,
", "
);
fprintf
(
file
,
"%15s"
,
XkbKeysymText
(
syms
[
s
],
XkbXKBFile
));
}
fprintf
(
file
,
" ]"
);
syms
+=
XkbKeyGroupsWidth
(
xkb
,
i
);
if
(
showActions
)
{
fprintf
(
file
,
",
\n
actions[Group%d]= [ "
,
g
+
1
);
for
(
s
=
0
;
s
<
XkbKeyGroupWidth
(
xkb
,
i
,
g
);
s
++
)
{
if
(
s
!=
0
)
fprintf
(
file
,
", "
);
WriteXKBAction
(
file
,
result
,(
XkbAnyAction
*
)
&
acts
[
s
]);
}
fprintf
(
file
,
" ]"
);
acts
+=
XkbKeyGroupsWidth
(
xkb
,
i
);
}
}
fprintf
(
file
,
"
\n
};
\n
"
);
}
}
if
(
map
&&
map
->
modmap
)
{
for
(
i
=
xkb
->
min_key_code
;
i
<=
xkb
->
max_key_code
;
i
++
)
{
if
(
map
->
modmap
[
i
]
!=
0
)
{
register
int
n
,
bit
;
for
(
bit
=
1
,
n
=
0
;
n
<
XkbNumModifiers
;
n
++
,
bit
<<=
1
)
{
if
(
map
->
modmap
[
i
]
&
bit
)
{
char
buf
[
5
];
memcpy
(
buf
,
xkb
->
names
->
keys
[
i
].
name
,
4
);
buf
[
4
]
=
'\0'
;
fprintf
(
file
,
" modifier_map %s { <%s> };
\n
"
,
XkbModIndexText
(
n
,
XkbXKBFile
),
buf
);
}
}
}
}
}
if
(
addOn
)
(
*
addOn
)(
file
,
result
,
topLevel
,
showImplicit
,
XkmSymbolsIndex
,
priv
);
fprintf
(
file
,
"};
\n\n
"
);
return
True
;
}
static
Bool
WriteXKBOutline
(
FILE
*
file
,
XkbShapePtr
shape
,
XkbOutlinePtr
outline
,
int
lastRadius
,
int
first
,
int
indent
)
{
register
int
i
;
XkbPointPtr
pt
;
char
*
iStr
;
fprintf
(
file
,
"%s"
,
iStr
=
XkbIndentText
(
first
));
if
(
first
!=
indent
)
iStr
=
XkbIndentText
(
indent
);
if
(
outline
->
corner_radius
!=
lastRadius
)
{
fprintf
(
file
,
"corner= %s,"
,
XkbGeomFPText
(
outline
->
corner_radius
,
XkbMessage
));
if
(
shape
!=
NULL
)
{
fprintf
(
file
,
"
\n
%s"
,
iStr
);
}
}
if
(
shape
)
{
if
(
outline
==
shape
->
approx
)
fprintf
(
file
,
"approx= "
);
else
if
(
outline
==
shape
->
primary
)
fprintf
(
file
,
"primary= "
);
}
fprintf
(
file
,
"{"
);
for
(
pt
=
outline
->
points
,
i
=
0
;
i
<
outline
->
num_points
;
i
++
,
pt
++
)
{
if
(
i
==
0
)
fprintf
(
file
,
" "
);
else
if
((
i
%
4
)
==
0
)
fprintf
(
file
,
",
\n
%s "
,
iStr
);
else
fprintf
(
file
,
", "
);
fprintf
(
file
,
"[ %3s, %3s ]"
,
XkbGeomFPText
(
pt
->
x
,
XkbXKBFile
),
XkbGeomFPText
(
pt
->
y
,
XkbXKBFile
));
}
fprintf
(
file
,
" }"
);
return
True
;
}
static
Bool
WriteXKBDoodad
(
FILE
*
file
,
Display
*
dpy
,
unsigned
indent
,
XkbGeometryPtr
geom
,
XkbDoodadPtr
doodad
)
{
register
char
*
i_str
;
XkbShapePtr
shape
;
XkbColorPtr
color
;
i_str
=
XkbIndentText
(
indent
);
fprintf
(
file
,
"%s%s
\"
%s
\"
{
\n
"
,
i_str
,
XkbDoodadTypeText
(
doodad
->
any
.
type
,
XkbMessage
),
XkbAtomText
(
dpy
,
doodad
->
any
.
name
,
XkbMessage
));
fprintf
(
file
,
"%s top= %s;
\n
"
,
i_str
,
XkbGeomFPText
(
doodad
->
any
.
top
,
XkbXKBFile
));
fprintf
(
file
,
"%s left= %s;
\n
"
,
i_str
,
XkbGeomFPText
(
doodad
->
any
.
left
,
XkbXKBFile
));
fprintf
(
file
,
"%s priority= %d;
\n
"
,
i_str
,
doodad
->
any
.
priority
);
switch
(
doodad
->
any
.
type
)
{
case
XkbOutlineDoodad
:
case
XkbSolidDoodad
:
if
(
doodad
->
shape
.
angle
!=
0
)
{
fprintf
(
file
,
"%s angle= %s;
\n
"
,
i_str
,
XkbGeomFPText
(
doodad
->
shape
.
angle
,
XkbXKBFile
));
}
if
(
doodad
->
shape
.
color_ndx
!=
0
)
{
fprintf
(
file
,
"%s color=
\"
%s
\"
;
\n
"
,
i_str
,
XkbShapeDoodadColor
(
geom
,
&
doodad
->
shape
)
->
spec
);
}
shape
=
XkbShapeDoodadShape
(
geom
,
&
doodad
->
shape
);
fprintf
(
file
,
"%s shape=
\"
%s
\"
;
\n
"
,
i_str
,
XkbAtomText
(
dpy
,
shape
->
name
,
XkbXKBFile
));
break
;
case
XkbTextDoodad
:
if
(
doodad
->
text
.
angle
!=
0
)
{
fprintf
(
file
,
"%s angle= %s;
\n
"
,
i_str
,
XkbGeomFPText
(
doodad
->
text
.
angle
,
XkbXKBFile
));
}
if
(
doodad
->
text
.
width
!=
0
)
{
fprintf
(
file
,
"%s width= %s;
\n
"
,
i_str
,
XkbGeomFPText
(
doodad
->
text
.
width
,
XkbXKBFile
));
}
if
(
doodad
->
text
.
height
!=
0
)
{
fprintf
(
file
,
"%s height= %s;
\n
"
,
i_str
,
XkbGeomFPText
(
doodad
->
text
.
height
,
XkbXKBFile
));
}
if
(
doodad
->
text
.
color_ndx
!=
0
)
{
color
=
XkbTextDoodadColor
(
geom
,
&
doodad
->
text
);
fprintf
(
file
,
"%s color=
\"
%s
\"
;
\n
"
,
i_str
,
XkbStringText
(
color
->
spec
,
XkbXKBFile
));
}
fprintf
(
file
,
"%s XFont=
\"
%s
\"
;
\n
"
,
i_str
,
XkbStringText
(
doodad
->
text
.
font
,
XkbXKBFile
));
fprintf
(
file
,
"%s text=
\"
%s
\"
;
\n
"
,
i_str
,
XkbStringText
(
doodad
->
text
.
text
,
XkbXKBFile
));
break
;
case
XkbIndicatorDoodad
:
shape
=
XkbIndicatorDoodadShape
(
geom
,
&
doodad
->
indicator
);
color
=
XkbIndicatorDoodadOnColor
(
geom
,
&
doodad
->
indicator
);
fprintf
(
file
,
"%s onColor=
\"
%s
\"
;
\n
"
,
i_str
,
XkbStringText
(
color
->
spec
,
XkbXKBFile
));
color
=
XkbIndicatorDoodadOffColor
(
geom
,
&
doodad
->
indicator
);
fprintf
(
file
,
"%s offColor=
\"
%s
\"
;
\n
"
,
i_str
,
XkbStringText
(
color
->
spec
,
XkbXKBFile
));
fprintf
(
file
,
"%s shape=
\"
%s
\"
;
\n
"
,
i_str
,
XkbAtomText
(
dpy
,
shape
->
name
,
XkbXKBFile
));
break
;
case
XkbLogoDoodad
:
fprintf
(
file
,
"%s logoName=
\"
%s
\"
;
\n
"
,
i_str
,
XkbStringText
(
doodad
->
logo
.
logo_name
,
XkbXKBFile
));
if
(
doodad
->
shape
.
angle
!=
0
)
{
fprintf
(
file
,
"%s angle= %s;
\n
"
,
i_str
,
XkbGeomFPText
(
doodad
->
logo
.
angle
,
XkbXKBFile
));
}
if
(
doodad
->
shape
.
color_ndx
!=
0
)
{
fprintf
(
file
,
"%s color=
\"
%s
\"
;
\n
"
,
i_str
,
XkbLogoDoodadColor
(
geom
,
&
doodad
->
logo
)
->
spec
);
}
shape
=
XkbLogoDoodadShape
(
geom
,
&
doodad
->
logo
);
fprintf
(
file
,
"%s shape=
\"
%s
\"
;
\n
"
,
i_str
,
XkbAtomText
(
dpy
,
shape
->
name
,
XkbXKBFile
));
break
;
}
fprintf
(
file
,
"%s};
\n
"
,
i_str
);
return
True
;
}
/*ARGSUSED*/
static
Bool
WriteXKBOverlay
(
FILE
*
file
,
Display
*
dpy
,
unsigned
indent
,
XkbGeometryPtr
geom
,
XkbOverlayPtr
ol
)
{
register
char
*
i_str
;
int
r
,
k
,
nOut
;
XkbOverlayRowPtr
row
;
XkbOverlayKeyPtr
key
;
i_str
=
XkbIndentText
(
indent
);
if
(
ol
->
name
!=
None
)
{
fprintf
(
file
,
"%soverlay
\"
%s
\"
{
\n
"
,
i_str
,
XkbAtomText
(
dpy
,
ol
->
name
,
XkbMessage
));
}
else
fprintf
(
file
,
"%soverlay {
\n
"
,
i_str
);
for
(
nOut
=
r
=
0
,
row
=
ol
->
rows
;
r
<
ol
->
num_rows
;
r
++
,
row
++
)
{
for
(
k
=
0
,
key
=
row
->
keys
;
k
<
row
->
num_keys
;
k
++
,
key
++
)
{
char
*
over
,
*
under
;
over
=
XkbKeyNameText
(
key
->
over
.
name
,
XkbXKBFile
);
under
=
XkbKeyNameText
(
key
->
under
.
name
,
XkbXKBFile
);
if
(
nOut
==
0
)
fprintf
(
file
,
"%s %6s=%6s"
,
i_str
,
under
,
over
);
else
if
((
nOut
%
4
)
==
0
)
fprintf
(
file
,
",
\n
%s %6s=%6s"
,
i_str
,
under
,
over
);
else
fprintf
(
file
,
", %6s=%6s"
,
under
,
over
);
nOut
++
;
}
}
fprintf
(
file
,
"
\n
%s};
\n
"
,
i_str
);
return
True
;
}
static
Bool
WriteXKBSection
(
FILE
*
file
,
Display
*
dpy
,
XkbSectionPtr
s
,
XkbGeometryPtr
geom
)
{
register
int
i
;
XkbRowPtr
row
;
int
dfltKeyColor
=
0
;
fprintf
(
file
,
" section
\"
%s
\"
{
\n
"
,
XkbAtomText
(
dpy
,
s
->
name
,
XkbXKBFile
));
if
(
s
->
rows
&&
(
s
->
rows
->
num_keys
>
0
))
{
dfltKeyColor
=
s
->
rows
->
keys
[
0
].
color_ndx
;
fprintf
(
file
,
" key.color=
\"
%s
\"
;
\n
"
,
XkbStringText
(
geom
->
colors
[
dfltKeyColor
].
spec
,
XkbXKBFile
));
}
fprintf
(
file
,
" priority= %d;
\n
"
,
s
->
priority
);
fprintf
(
file
,
" top= %s;
\n
"
,
XkbGeomFPText
(
s
->
top
,
XkbXKBFile
));
fprintf
(
file
,
" left= %s;
\n
"
,
XkbGeomFPText
(
s
->
left
,
XkbXKBFile
));
fprintf
(
file
,
" width= %s;
\n
"
,
XkbGeomFPText
(
s
->
width
,
XkbXKBFile
));
fprintf
(
file
,
" height= %s;
\n
"
,
XkbGeomFPText
(
s
->
height
,
XkbXKBFile
));
if
(
s
->
angle
!=
0
)
{
fprintf
(
file
,
" angle= %s;
\n
"
,
XkbGeomFPText
(
s
->
angle
,
XkbXKBFile
));
}
for
(
i
=
0
,
row
=
s
->
rows
;
i
<
s
->
num_rows
;
i
++
,
row
++
)
{
fprintf
(
file
,
" row {
\n
"
);
fprintf
(
file
,
" top= %s;
\n
"
,
XkbGeomFPText
(
row
->
top
,
XkbXKBFile
));
fprintf
(
file
,
" left= %s;
\n
"
,
XkbGeomFPText
(
row
->
left
,
XkbXKBFile
));
if
(
row
->
vertical
)
fprintf
(
file
,
" vertical;
\n
"
);
if
(
row
->
num_keys
>
0
)
{
register
int
k
;
register
XkbKeyPtr
key
;
int
forceNL
=
0
;
int
nThisLine
=
0
;
fprintf
(
file
,
" keys {
\n
"
);
for
(
k
=
0
,
key
=
row
->
keys
;
k
<
row
->
num_keys
;
k
++
,
key
++
)
{
XkbShapePtr
shape
;
if
(
key
->
color_ndx
!=
dfltKeyColor
)
forceNL
=
1
;
if
(
k
==
0
)
{
fprintf
(
file
,
" "
);
nThisLine
=
0
;
}
else
if
(((
nThisLine
%
2
)
==
1
)
||
(
forceNL
))
{
fprintf
(
file
,
",
\n
"
);
forceNL
=
nThisLine
=
0
;
}
else
{
fprintf
(
file
,
", "
);
nThisLine
++
;
}
shape
=
XkbKeyShape
(
geom
,
key
);
fprintf
(
file
,
"{ %6s,
\"
%s
\"
, %3s"
,
XkbKeyNameText
(
key
->
name
.
name
,
XkbXKBFile
),
XkbAtomText
(
dpy
,
shape
->
name
,
XkbXKBFile
),
XkbGeomFPText
(
key
->
gap
,
XkbXKBFile
));
if
(
key
->
color_ndx
!=
dfltKeyColor
)
{
fprintf
(
file
,
", color=
\"
%s
\"
"
,
XkbKeyColor
(
geom
,
key
)
->
spec
);
forceNL
=
1
;
}
fprintf
(
file
,
" }"
);
}
fprintf
(
file
,
"
\n
};
\n
"
);
}
fprintf
(
file
,
" };
\n
"
);
}
if
(
s
->
doodads
!=
NULL
)
{
XkbDoodadPtr
doodad
;
for
(
i
=
0
,
doodad
=
s
->
doodads
;
i
<
s
->
num_doodads
;
i
++
,
doodad
++
)
{
WriteXKBDoodad
(
file
,
dpy
,
8
,
geom
,
doodad
);
}
}
if
(
s
->
overlays
!=
NULL
)
{
XkbOverlayPtr
ol
;
for
(
i
=
0
,
ol
=
s
->
overlays
;
i
<
s
->
num_overlays
;
i
++
,
ol
++
)
{
WriteXKBOverlay
(
file
,
dpy
,
8
,
geom
,
ol
);
}
}
fprintf
(
file
,
" }; // End of
\"
%s
\"
section
\n\n
"
,
XkbAtomText
(
dpy
,
s
->
name
,
XkbXKBFile
));
return
True
;
}
Bool
XkbWriteXKBGeometry
(
FILE
*
file
,
XkbFileInfo
*
result
,
Bool
topLevel
,
Bool
showImplicit
,
XkbFileAddOnFunc
addOn
,
void
*
priv
)
{
Display
*
dpy
;
register
unsigned
i
,
n
;
XkbDescPtr
xkb
;
XkbGeometryPtr
geom
;
xkb
=
result
->
xkb
;
if
((
!
xkb
)
||
(
!
xkb
->
geom
))
{
_XkbLibError
(
_XkbErrMissingGeometry
,
"XkbWriteXKBGeometry"
,
0
);
return
False
;
}
dpy
=
xkb
->
dpy
;
geom
=
xkb
->
geom
;
if
(
geom
->
name
==
None
)
fprintf
(
file
,
"xkb_geometry {
\n\n
"
);
else
fprintf
(
file
,
"xkb_geometry
\"
%s
\"
{
\n\n
"
,
XkbAtomText
(
dpy
,
geom
->
name
,
XkbXKBFile
));
fprintf
(
file
,
" width= %s;
\n
"
,
XkbGeomFPText
(
geom
->
width_mm
,
XkbXKBFile
));
fprintf
(
file
,
" height= %s;
\n\n
"
,
XkbGeomFPText
(
geom
->
height_mm
,
XkbXKBFile
));
if
(
geom
->
key_aliases
!=
NULL
)
{
XkbKeyAliasPtr
pAl
;
pAl
=
geom
->
key_aliases
;
for
(
i
=
0
;
i
<
geom
->
num_key_aliases
;
i
++
,
pAl
++
)
{
fprintf
(
file
,
" alias %6s = %6s;
\n
"
,
XkbKeyNameText
(
pAl
->
alias
,
XkbXKBFile
),
XkbKeyNameText
(
pAl
->
real
,
XkbXKBFile
));
}
fprintf
(
file
,
"
\n
"
);
}
if
(
geom
->
base_color
!=
NULL
)
fprintf
(
file
,
" baseColor=
\"
%s
\"
;
\n
"
,
XkbStringText
(
geom
->
base_color
->
spec
,
XkbXKBFile
));
if
(
geom
->
label_color
!=
NULL
)
fprintf
(
file
,
" labelColor=
\"
%s
\"
;
\n
"
,
XkbStringText
(
geom
->
label_color
->
spec
,
XkbXKBFile
));
if
(
geom
->
label_font
!=
NULL
)
fprintf
(
file
,
" xfont=
\"
%s
\"
;
\n
"
,
XkbStringText
(
geom
->
label_font
,
XkbXKBFile
));
if
((
geom
->
num_colors
>
0
)
&&
(
showImplicit
))
{
XkbColorPtr
color
;
for
(
color
=
geom
->
colors
,
i
=
0
;
i
<
geom
->
num_colors
;
i
++
,
color
++
)
{
fprintf
(
file
,
"// color[%d]=
\"
%s
\"\n
"
,
i
,
XkbStringText
(
color
->
spec
,
XkbXKBFile
));
}
fprintf
(
file
,
"
\n
"
);
}
if
(
geom
->
num_properties
>
0
)
{
XkbPropertyPtr
prop
;
for
(
prop
=
geom
->
properties
,
i
=
0
;
i
<
geom
->
num_properties
;
i
++
,
prop
++
)
{
fprintf
(
file
,
" %s=
\"
%s
\"
;
\n
"
,
prop
->
name
,
XkbStringText
(
prop
->
value
,
XkbXKBFile
));
}
fprintf
(
file
,
"
\n
"
);
}
if
(
geom
->
num_shapes
>
0
)
{
XkbShapePtr
shape
;
XkbOutlinePtr
outline
;
int
lastR
;
for
(
shape
=
geom
->
shapes
,
i
=
0
;
i
<
geom
->
num_shapes
;
i
++
,
shape
++
)
{
lastR
=
0
;
fprintf
(
file
,
" shape
\"
%s
\"
{"
,
XkbAtomText
(
dpy
,
shape
->
name
,
XkbXKBFile
));
outline
=
shape
->
outlines
;
if
(
shape
->
num_outlines
>
1
)
{
for
(
n
=
0
;
n
<
shape
->
num_outlines
;
n
++
,
outline
++
)
{
if
(
n
==
0
)
fprintf
(
file
,
"
\n
"
);
else
fprintf
(
file
,
",
\n
"
);
WriteXKBOutline
(
file
,
shape
,
outline
,
lastR
,
8
,
8
);
lastR
=
outline
->
corner_radius
;
}
fprintf
(
file
,
"
\n
};
\n
"
);
}
else
{
WriteXKBOutline
(
file
,
NULL
,
outline
,
lastR
,
1
,
8
);
fprintf
(
file
,
" };
\n
"
);
}
}
}
if
(
geom
->
num_sections
>
0
)
{
XkbSectionPtr
section
;
for
(
section
=
geom
->
sections
,
i
=
0
;
i
<
geom
->
num_sections
;
i
++
,
section
++
){
WriteXKBSection
(
file
,
dpy
,
section
,
geom
);
}
}
if
(
geom
->
num_doodads
>
0
)
{
XkbDoodadPtr
doodad
;
for
(
i
=
0
,
doodad
=
geom
->
doodads
;
i
<
geom
->
num_doodads
;
i
++
,
doodad
++
)
{
WriteXKBDoodad
(
file
,
dpy
,
4
,
geom
,
doodad
);
}
}
if
(
addOn
)
(
*
addOn
)(
file
,
result
,
topLevel
,
showImplicit
,
XkmGeometryIndex
,
priv
);
fprintf
(
file
,
"};
\n\n
"
);
return
True
;
}
/*ARGSUSED*/
Bool
XkbWriteXKBSemantics
(
FILE
*
file
,
XkbFileInfo
*
result
,
Bool
topLevel
,
Bool
showImplicit
,
XkbFileAddOnFunc
addOn
,
void
*
priv
)
{
Bool
ok
;
fprintf
(
file
,
"xkb_semantics {
\n
"
);
ok
=
XkbWriteXKBKeyTypes
(
file
,
result
,
False
,
False
,
addOn
,
priv
);
ok
=
ok
&&
XkbWriteXKBCompatMap
(
file
,
result
,
False
,
False
,
addOn
,
priv
);
fprintf
(
file
,
"};
\n
"
);
return
ok
;
}
/*ARGSUSED*/
Bool
XkbWriteXKBLayout
(
FILE
*
file
,
XkbFileInfo
*
result
,
Bool
topLevel
,
Bool
showImplicit
,
XkbFileAddOnFunc
addOn
,
void
*
priv
)
{
Bool
ok
;
XkbDescPtr
xkb
;
xkb
=
result
->
xkb
;
fprintf
(
file
,
"xkb_layout {
\n
"
);
ok
=
XkbWriteXKBKeycodes
(
file
,
result
,
False
,
showImplicit
,
addOn
,
priv
);
ok
=
ok
&&
XkbWriteXKBKeyTypes
(
file
,
result
,
False
,
showImplicit
,
addOn
,
priv
);
ok
=
ok
&&
XkbWriteXKBSymbols
(
file
,
result
,
False
,
showImplicit
,
addOn
,
priv
);
if
(
xkb
->
geom
)
ok
=
ok
&&
XkbWriteXKBGeometry
(
file
,
result
,
False
,
showImplicit
,
addOn
,
priv
);
fprintf
(
file
,
"};
\n
"
);
return
ok
;
}
/*ARGSUSED*/
Bool
XkbWriteXKBKeymap
(
FILE
*
file
,
XkbFileInfo
*
result
,
Bool
topLevel
,
Bool
showImplicit
,
XkbFileAddOnFunc
addOn
,
void
*
priv
)
{
Bool
ok
;
XkbDescPtr
xkb
;
xkb
=
result
->
xkb
;
fprintf
(
file
,
"xkb_keymap {
\n
"
);
ok
=
XkbWriteXKBKeycodes
(
file
,
result
,
False
,
showImplicit
,
addOn
,
priv
);
ok
=
ok
&&
XkbWriteXKBKeyTypes
(
file
,
result
,
False
,
showImplicit
,
addOn
,
priv
);
ok
=
ok
&&
XkbWriteXKBCompatMap
(
file
,
result
,
False
,
showImplicit
,
addOn
,
priv
);
ok
=
ok
&&
XkbWriteXKBSymbols
(
file
,
result
,
False
,
showImplicit
,
addOn
,
priv
);
if
(
xkb
->
geom
)
ok
=
ok
&&
XkbWriteXKBGeometry
(
file
,
result
,
False
,
showImplicit
,
addOn
,
priv
);
fprintf
(
file
,
"};
\n
"
);
return
ok
;
}
Bool
XkbWriteXKBFile
(
FILE
*
out
,
XkbFileInfo
*
result
,
Bool
showImplicit
,
XkbFileAddOnFunc
addOn
,
void
*
priv
)
{
Bool
ok
=
False
;
Bool
(
*
func
)(
FILE
*
/* file */
,
XkbFileInfo
*
/* result */
,
Bool
/* topLevel */
,
Bool
/* showImplicit */
,
XkbFileAddOnFunc
/* addOn */
,
void
*
/* priv */
)
=
NULL
;
switch
(
result
->
type
)
{
case
XkmSemanticsFile
:
func
=
XkbWriteXKBSemantics
;
break
;
case
XkmLayoutFile
:
func
=
XkbWriteXKBLayout
;
break
;
case
XkmKeymapFile
:
func
=
XkbWriteXKBKeymap
;
break
;
case
XkmTypesIndex
:
func
=
XkbWriteXKBKeyTypes
;
break
;
case
XkmCompatMapIndex
:
func
=
XkbWriteXKBCompatMap
;
break
;
case
XkmSymbolsIndex
:
func
=
XkbWriteXKBSymbols
;
break
;
case
XkmKeyNamesIndex
:
func
=
XkbWriteXKBKeycodes
;
break
;
case
XkmGeometryFile
:
case
XkmGeometryIndex
:
func
=
XkbWriteXKBGeometry
;
break
;
case
XkmVirtualModsIndex
:
case
XkmIndicatorsIndex
:
_XkbLibError
(
_XkbErrBadImplementation
,
XkbConfigText
(
result
->
type
,
XkbMessage
),
0
);
return
False
;
}
if
(
out
==
NULL
)
{
_XkbLibError
(
_XkbErrFileCannotOpen
,
"XkbWriteXkbFile"
,
0
);
ok
=
False
;
}
else
if
(
func
)
{
ok
=
(
*
func
)(
out
,
result
,
True
,
showImplicit
,
addOn
,
priv
);
}
return
ok
;
}
nx-X11/programs/Xserver/xkb/xkbtext.c
0 → 100644
View file @
fccef5fc
/************************************************************
Copyright (c) 1994 by Silicon Graphics Computer Systems, Inc.
Permission to use, copy, modify, and distribute this
software and its documentation for any purpose and without
fee is hereby granted, provided that the above copyright
notice appear in all copies and that both that copyright
notice and this permission notice appear in supporting
documentation, and that the name of Silicon Graphics not be
used in advertising or publicity pertaining to distribution
of the software without specific prior written permission.
Silicon Graphics makes no representation about the suitability
of this software for any purpose. It is provided "as is"
without any express or implied warranty.
SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON
GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH
THE USE OR PERFORMANCE OF THIS SOFTWARE.
********************************************************/
#ifdef HAVE_DIX_CONFIG_H
#include <dix-config.h>
#endif
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <nx-X11/Xos.h>
#include <nx-X11/X.h>
#include <nx-X11/Xproto.h>
#include "misc.h"
#include "inputstr.h"
#include "dix.h"
#include "xkbstr.h"
#include <xkbsrv.h>
#include "xkbgeom.h"
/***====================================================================***/
#define BUFFER_SIZE 512
static
char
textBuffer
[
BUFFER_SIZE
];
static
int
tbNext
=
0
;
static
char
*
tbGetBuffer
(
unsigned
size
)
{
char
*
rtrn
;
if
(
size
>=
BUFFER_SIZE
)
return
NULL
;
if
((
BUFFER_SIZE
-
tbNext
)
<=
size
)
tbNext
=
0
;
rtrn
=
&
textBuffer
[
tbNext
];
tbNext
+=
size
;
return
rtrn
;
}
/***====================================================================***/
char
*
XkbAtomText
(
Display
*
dpy
,
Atom
atm
,
unsigned
format
)
{
const
char
*
atmstr
;
char
*
rtrn
,
*
tmp
;
atmstr
=
NameForAtom
(
atm
);
if
(
atmstr
!=
NULL
)
{
int
len
;
len
=
strlen
(
atmstr
)
+
1
;
if
(
len
>
BUFFER_SIZE
)
len
=
BUFFER_SIZE
-
2
;
rtrn
=
tbGetBuffer
(
len
);
strncpy
(
rtrn
,
atmstr
,
len
);
rtrn
[
len
]
=
'\0'
;
}
else
{
rtrn
=
tbGetBuffer
(
1
);
rtrn
[
0
]
=
'\0'
;
}
if
(
format
==
XkbCFile
)
{
for
(
tmp
=
rtrn
;
*
tmp
!=
'\0'
;
tmp
++
)
{
if
((
tmp
==
rtrn
)
&&
(
!
isalpha
(
*
tmp
)))
*
tmp
=
'_'
;
else
if
(
!
isalnum
(
*
tmp
))
*
tmp
=
'_'
;
}
}
return
XkbStringText
(
rtrn
,
format
);
}
/***====================================================================***/
char
*
XkbVModIndexText
(
Display
*
dpy
,
XkbDescPtr
xkb
,
unsigned
ndx
,
unsigned
format
)
{
register
int
len
;
register
Atom
*
vmodNames
;
char
*
rtrn
;
const
char
*
tmp
;
char
numBuf
[
20
];
if
(
xkb
&&
xkb
->
names
)
vmodNames
=
xkb
->
names
->
vmods
;
else
vmodNames
=
NULL
;
tmp
=
NULL
;
if
(
ndx
>=
XkbNumVirtualMods
)
tmp
=
"illegal"
;
else
if
(
vmodNames
&&
(
vmodNames
[
ndx
]
!=
None
))
tmp
=
NameForAtom
(
vmodNames
[
ndx
]);
if
(
tmp
==
NULL
)
{
sprintf
(
numBuf
,
"%d"
,
ndx
);
tmp
=
numBuf
;
}
len
=
strlen
(
tmp
)
+
1
;
if
(
format
==
XkbCFile
)
len
+=
4
;
if
(
len
>=
BUFFER_SIZE
)
len
=
BUFFER_SIZE
-
1
;
rtrn
=
tbGetBuffer
(
len
);
if
(
format
==
XkbCFile
)
{
strcpy
(
rtrn
,
"vmod_"
);
strncpy
(
&
rtrn
[
5
],
tmp
,
len
-
4
);
}
else
strncpy
(
rtrn
,
tmp
,
len
);
return
rtrn
;
}
char
*
XkbVModMaskText
(
Display
*
dpy
,
XkbDescPtr
xkb
,
unsigned
modMask
,
unsigned
mask
,
unsigned
format
)
{
register
int
i
,
bit
;
int
len
;
char
*
mm
,
*
rtrn
;
char
*
str
,
buf
[
BUFFER_SIZE
];
if
((
modMask
==
0
)
&&
(
mask
==
0
))
{
rtrn
=
tbGetBuffer
(
5
);
if
(
format
==
XkbCFile
)
sprintf
(
rtrn
,
"0"
);
else
sprintf
(
rtrn
,
"none"
);
return
rtrn
;
}
if
(
modMask
!=
0
)
mm
=
XkbModMaskText
(
modMask
,
format
);
else
mm
=
NULL
;
str
=
buf
;
buf
[
0
]
=
'\0'
;
if
(
mask
)
{
char
*
tmp
;
for
(
i
=
0
,
bit
=
1
;
i
<
XkbNumVirtualMods
;
i
++
,
bit
<<=
1
)
{
if
(
mask
&
bit
)
{
tmp
=
XkbVModIndexText
(
dpy
,
xkb
,
i
,
format
);
len
=
strlen
(
tmp
)
+
1
+
(
str
==
buf
?
0
:
1
);
if
(
format
==
XkbCFile
)
len
+=
4
;
if
((
str
-
(
buf
+
len
))
<=
BUFFER_SIZE
)
{
if
(
str
!=
buf
)
{
if
(
format
==
XkbCFile
)
*
str
++=
'|'
;
else
*
str
++=
'+'
;
len
--
;
}
}
if
(
format
==
XkbCFile
)
sprintf
(
str
,
"%sMask"
,
tmp
);
else
strcpy
(
str
,
tmp
);
str
=
&
str
[
len
-
1
];
}
}
str
=
buf
;
}
else
str
=
NULL
;
if
(
mm
)
len
=
strlen
(
mm
);
else
len
=
0
;
if
(
str
)
len
+=
strlen
(
str
)
+
(
mm
==
NULL
?
0
:
1
);
if
(
len
>=
BUFFER_SIZE
)
len
=
BUFFER_SIZE
-
1
;
rtrn
=
tbGetBuffer
(
len
+
1
);
rtrn
[
0
]
=
'\0'
;
if
(
mm
!=
NULL
)
{
i
=
strlen
(
mm
);
if
(
i
>
len
)
i
=
len
;
strcpy
(
rtrn
,
mm
);
}
else
{
i
=
0
;
}
if
(
str
!=
NULL
)
{
if
(
mm
!=
NULL
)
{
if
(
format
==
XkbCFile
)
strcat
(
rtrn
,
"|"
);
else
strcat
(
rtrn
,
"+"
);
}
strncat
(
rtrn
,
str
,
len
-
i
);
}
rtrn
[
len
]
=
'\0'
;
return
rtrn
;
}
static
char
*
modNames
[
XkbNumModifiers
]
=
{
"Shift"
,
"Lock"
,
"Control"
,
"Mod1"
,
"Mod2"
,
"Mod3"
,
"Mod4"
,
"Mod5"
};
char
*
XkbModIndexText
(
unsigned
ndx
,
unsigned
format
)
{
char
*
rtrn
;
char
buf
[
100
];
if
(
format
==
XkbCFile
)
{
if
(
ndx
<
XkbNumModifiers
)
sprintf
(
buf
,
"%sMapIndex"
,
modNames
[
ndx
]);
else
if
(
ndx
==
XkbNoModifier
)
sprintf
(
buf
,
"XkbNoModifier"
);
else
sprintf
(
buf
,
"0x%02x"
,
ndx
);
}
else
{
if
(
ndx
<
XkbNumModifiers
)
strcpy
(
buf
,
modNames
[
ndx
]);
else
if
(
ndx
==
XkbNoModifier
)
strcpy
(
buf
,
"none"
);
else
sprintf
(
buf
,
"ILLEGAL_%02x"
,
ndx
);
}
rtrn
=
tbGetBuffer
(
strlen
(
buf
)
+
1
);
strcpy
(
rtrn
,
buf
);
return
rtrn
;
}
char
*
XkbModMaskText
(
unsigned
mask
,
unsigned
format
)
{
register
int
i
,
bit
;
char
buf
[
64
],
*
rtrn
;
if
((
mask
&
0xff
)
==
0xff
)
{
if
(
format
==
XkbCFile
)
strcpy
(
buf
,
"0xff"
);
else
strcpy
(
buf
,
"all"
);
}
else
if
((
mask
&
0xff
)
==
0
)
{
if
(
format
==
XkbCFile
)
strcpy
(
buf
,
"0"
);
else
strcpy
(
buf
,
"none"
);
}
else
{
char
*
str
=
buf
;
buf
[
0
]
=
'\0'
;
for
(
i
=
0
,
bit
=
1
;
i
<
XkbNumModifiers
;
i
++
,
bit
<<=
1
)
{
if
(
mask
&
bit
)
{
if
(
str
!=
buf
)
{
if
(
format
==
XkbCFile
)
*
str
++=
'|'
;
else
*
str
++=
'+'
;
}
strcpy
(
str
,
modNames
[
i
]);
str
=
&
str
[
strlen
(
str
)];
if
(
format
==
XkbCFile
)
{
strcpy
(
str
,
"Mask"
);
str
+=
4
;
}
}
}
}
rtrn
=
tbGetBuffer
(
strlen
(
buf
)
+
1
);
strcpy
(
rtrn
,
buf
);
return
rtrn
;
}
/***====================================================================***/
/*ARGSUSED*/
char
*
XkbConfigText
(
unsigned
config
,
unsigned
format
)
{
static
char
*
buf
;
buf
=
tbGetBuffer
(
32
);
switch
(
config
)
{
case
XkmSemanticsFile
:
strcpy
(
buf
,
"Semantics"
);
break
;
case
XkmLayoutFile
:
strcpy
(
buf
,
"Layout"
);
break
;
case
XkmKeymapFile
:
strcpy
(
buf
,
"Keymap"
);
break
;
case
XkmGeometryFile
:
case
XkmGeometryIndex
:
strcpy
(
buf
,
"Geometry"
);
break
;
case
XkmTypesIndex
:
strcpy
(
buf
,
"Types"
);
break
;
case
XkmCompatMapIndex
:
strcpy
(
buf
,
"CompatMap"
);
break
;
case
XkmSymbolsIndex
:
strcpy
(
buf
,
"Symbols"
);
break
;
case
XkmIndicatorsIndex
:
strcpy
(
buf
,
"Indicators"
);
break
;
case
XkmKeyNamesIndex
:
strcpy
(
buf
,
"KeyNames"
);
break
;
case
XkmVirtualModsIndex
:
strcpy
(
buf
,
"VirtualMods"
);
break
;
default:
sprintf
(
buf
,
"unknown(%d)"
,
config
);
break
;
}
return
buf
;
}
/***====================================================================***/
char
*
XkbKeysymText
(
KeySym
sym
,
unsigned
format
)
{
static
char
buf
[
32
],
*
rtrn
;
if
(
sym
==
NoSymbol
)
strcpy
(
rtrn
=
buf
,
"NoSymbol"
);
else
sprintf
(
rtrn
=
buf
,
"0x%lx"
,
(
long
)
sym
);
return
rtrn
;
}
char
*
XkbKeyNameText
(
char
*
name
,
unsigned
format
)
{
char
*
buf
;
if
(
format
==
XkbCFile
)
{
buf
=
tbGetBuffer
(
5
);
memcpy
(
buf
,
name
,
4
);
buf
[
4
]
=
'\0'
;
}
else
{
int
len
;
buf
=
tbGetBuffer
(
7
);
buf
[
0
]
=
'<'
;
memcpy
(
&
buf
[
1
],
name
,
4
);
buf
[
5
]
=
'\0'
;
len
=
strlen
(
buf
);
buf
[
len
++
]
=
'>'
;
buf
[
len
]
=
'\0'
;
}
return
buf
;
}
/***====================================================================***/
static
char
*
siMatchText
[
5
]
=
{
"NoneOf"
,
"AnyOfOrNone"
,
"AnyOf"
,
"AllOf"
,
"Exactly"
};
char
*
XkbSIMatchText
(
unsigned
type
,
unsigned
format
)
{
static
char
buf
[
40
];
char
*
rtrn
;
switch
(
type
&
XkbSI_OpMask
)
{
case
XkbSI_NoneOf
:
rtrn
=
siMatchText
[
0
];
break
;
case
XkbSI_AnyOfOrNone
:
rtrn
=
siMatchText
[
1
];
break
;
case
XkbSI_AnyOf
:
rtrn
=
siMatchText
[
2
];
break
;
case
XkbSI_AllOf
:
rtrn
=
siMatchText
[
3
];
break
;
case
XkbSI_Exactly
:
rtrn
=
siMatchText
[
4
];
break
;
default:
sprintf
(
buf
,
"0x%x"
,
type
&
XkbSI_OpMask
);
return
buf
;
}
if
(
format
==
XkbCFile
)
{
if
(
type
&
XkbSI_LevelOneOnly
)
sprintf
(
buf
,
"XkbSI_LevelOneOnly|XkbSI_%s"
,
rtrn
);
else
sprintf
(
buf
,
"XkbSI_%s"
,
rtrn
);
rtrn
=
buf
;
}
return
rtrn
;
}
/***====================================================================***/
static
char
*
imWhichNames
[]
=
{
"base"
,
"latched"
,
"locked"
,
"effective"
,
"compat"
};
char
*
XkbIMWhichStateMaskText
(
unsigned
use_which
,
unsigned
format
)
{
int
len
;
unsigned
i
,
bit
,
tmp
;
char
*
buf
;
if
(
use_which
==
0
)
{
buf
=
tbGetBuffer
(
2
);
strcpy
(
buf
,
"0"
);
return
buf
;
}
tmp
=
use_which
&
XkbIM_UseAnyMods
;
for
(
len
=
i
=
0
,
bit
=
1
;
tmp
!=
0
;
i
++
,
bit
<<=
1
)
{
if
(
tmp
&
bit
)
{
tmp
&=
~
bit
;
len
+=
strlen
(
imWhichNames
[
i
])
+
1
;
if
(
format
==
XkbCFile
)
len
+=
9
;
}
}
buf
=
tbGetBuffer
(
len
+
1
);
tmp
=
use_which
&
XkbIM_UseAnyMods
;
for
(
len
=
i
=
0
,
bit
=
1
;
tmp
!=
0
;
i
++
,
bit
<<=
1
)
{
if
(
tmp
&
bit
)
{
tmp
&=
~
bit
;
if
(
format
==
XkbCFile
)
{
if
(
len
!=
0
)
buf
[
len
++
]
=
'|'
;
sprintf
(
&
buf
[
len
],
"XkbIM_Use%s"
,
imWhichNames
[
i
]);
buf
[
len
+
9
]
=
toupper
(
buf
[
len
+
9
]);
}
else
{
if
(
len
!=
0
)
buf
[
len
++
]
=
'+'
;
sprintf
(
&
buf
[
len
],
"%s"
,
imWhichNames
[
i
]);
}
len
+=
strlen
(
&
buf
[
len
]);
}
}
return
buf
;
}
char
*
XkbAccessXDetailText
(
unsigned
state
,
unsigned
format
)
{
char
*
buf
,
*
prefix
;
buf
=
tbGetBuffer
(
32
);
if
(
format
==
XkbMessage
)
prefix
=
""
;
else
prefix
=
"XkbAXN_"
;
switch
(
state
){
case
XkbAXN_SKPress
:
sprintf
(
buf
,
"%sSKPress"
,
prefix
);
break
;
case
XkbAXN_SKAccept
:
sprintf
(
buf
,
"%sSKAccept"
,
prefix
);
break
;
case
XkbAXN_SKRelease
:
sprintf
(
buf
,
"%sSKRelease"
,
prefix
);
break
;
case
XkbAXN_SKReject
:
sprintf
(
buf
,
"%sSKReject"
,
prefix
);
break
;
case
XkbAXN_BKAccept
:
sprintf
(
buf
,
"%sBKAccept"
,
prefix
);
break
;
case
XkbAXN_BKReject
:
sprintf
(
buf
,
"%sBKReject"
,
prefix
);
break
;
case
XkbAXN_AXKWarning
:
sprintf
(
buf
,
"%sAXKWarning"
,
prefix
);
break
;
default:
sprintf
(
buf
,
"ILLEGAL"
);
break
;
}
return
buf
;
}
static
char
*
nknNames
[]
=
{
"keycodes"
,
"geometry"
,
"deviceID"
};
#define NUM_NKN (sizeof(nknNames)/sizeof(char *))
char
*
XkbNKNDetailMaskText
(
unsigned
detail
,
unsigned
format
)
{
char
*
buf
,
*
prefix
,
*
suffix
;
register
int
i
;
register
unsigned
bit
;
int
len
,
plen
,
slen
;
if
((
detail
&
XkbAllNewKeyboardEventsMask
)
==
0
)
{
char
*
tmp
=
""
;
if
(
format
==
XkbCFile
)
tmp
=
"0"
;
else
if
(
format
==
XkbMessage
)
tmp
=
"none"
;
buf
=
tbGetBuffer
(
strlen
(
tmp
)
+
1
);
strcpy
(
buf
,
tmp
);
return
buf
;
}
else
if
((
detail
&
XkbAllNewKeyboardEventsMask
)
==
XkbAllNewKeyboardEventsMask
){
char
*
tmp
;
if
(
format
==
XkbCFile
)
tmp
=
"XkbAllNewKeyboardEventsMask"
;
else
tmp
=
"all"
;
buf
=
tbGetBuffer
(
strlen
(
tmp
)
+
1
);
strcpy
(
buf
,
tmp
);
return
buf
;
}
if
(
format
==
XkbMessage
)
{
prefix
=
""
;
suffix
=
""
;
slen
=
plen
=
0
;
}
else
{
prefix
=
"XkbNKN_"
;
plen
=
7
;
if
(
format
==
XkbCFile
)
suffix
=
"Mask"
;
else
suffix
=
""
;
slen
=
strlen
(
suffix
);
}
for
(
len
=
0
,
i
=
0
,
bit
=
1
;
i
<
NUM_NKN
;
i
++
,
bit
<<=
1
)
{
if
(
detail
&
bit
)
{
if
(
len
!=
0
)
len
+=
1
;
/* room for '+' or '|' */
len
+=
plen
+
slen
+
strlen
(
nknNames
[
i
]);
}
}
buf
=
tbGetBuffer
(
len
+
1
);
buf
[
0
]
=
'\0'
;
for
(
len
=
0
,
i
=
0
,
bit
=
1
;
i
<
NUM_NKN
;
i
++
,
bit
<<=
1
)
{
if
(
detail
&
bit
)
{
if
(
len
!=
0
)
{
if
(
format
==
XkbCFile
)
buf
[
len
++
]
=
'|'
;
else
buf
[
len
++
]
=
'+'
;
}
if
(
plen
)
{
strcpy
(
&
buf
[
len
],
prefix
);
len
+=
plen
;
}
strcpy
(
&
buf
[
len
],
nknNames
[
i
]);
len
+=
strlen
(
nknNames
[
i
]);
if
(
slen
)
{
strcpy
(
&
buf
[
len
],
suffix
);
len
+=
slen
;
}
}
}
buf
[
len
++
]
=
'\0'
;
return
buf
;
}
static
char
*
ctrlNames
[]
=
{
"repeatKeys"
,
"slowKeys"
,
"bounceKeys"
,
"stickyKeys"
,
"mouseKeys"
,
"mouseKeysAccel"
,
"accessXKeys"
,
"accessXTimeout"
,
"accessXFeedback"
,
"audibleBell"
,
"overlay1"
,
"overlay2"
,
"ignoreGroupLock"
};
char
*
XkbControlsMaskText
(
unsigned
ctrls
,
unsigned
format
)
{
int
len
;
unsigned
i
,
bit
,
tmp
;
char
*
buf
;
if
(
ctrls
==
0
)
{
buf
=
tbGetBuffer
(
5
);
if
(
format
==
XkbCFile
)
strcpy
(
buf
,
"0"
);
else
strcpy
(
buf
,
"none"
);
return
buf
;
}
tmp
=
ctrls
&
XkbAllBooleanCtrlsMask
;
for
(
len
=
i
=
0
,
bit
=
1
;
tmp
!=
0
;
i
++
,
bit
<<=
1
)
{
if
(
tmp
&
bit
)
{
tmp
&=
~
bit
;
len
+=
strlen
(
ctrlNames
[
i
])
+
1
;
if
(
format
==
XkbCFile
)
len
+=
7
;
}
}
buf
=
tbGetBuffer
(
len
+
1
);
tmp
=
ctrls
&
XkbAllBooleanCtrlsMask
;
for
(
len
=
i
=
0
,
bit
=
1
;
tmp
!=
0
;
i
++
,
bit
<<=
1
)
{
if
(
tmp
&
bit
)
{
tmp
&=
~
bit
;
if
(
format
==
XkbCFile
)
{
if
(
len
!=
0
)
buf
[
len
++
]
=
'|'
;
sprintf
(
&
buf
[
len
],
"Xkb%sMask"
,
ctrlNames
[
i
]);
buf
[
len
+
3
]
=
toupper
(
buf
[
len
+
3
]);
}
else
{
if
(
len
!=
0
)
buf
[
len
++
]
=
'+'
;
sprintf
(
&
buf
[
len
],
"%s"
,
ctrlNames
[
i
]);
}
len
+=
strlen
(
&
buf
[
len
]);
}
}
return
buf
;
}
/***====================================================================***/
char
*
XkbStringText
(
char
*
str
,
unsigned
format
)
{
char
*
buf
;
register
char
*
in
,
*
out
;
int
len
;
Bool
ok
;
if
(
str
==
NULL
)
{
buf
=
tbGetBuffer
(
2
);
buf
[
0
]
=
'\0'
;
return
buf
;
}
else
if
(
format
==
XkbXKMFile
)
return
str
;
for
(
ok
=
True
,
len
=
0
,
in
=
str
;
*
in
!=
'\0'
;
in
++
,
len
++
)
{
if
(
!
isprint
(
*
in
))
{
ok
=
False
;
switch
(
*
in
)
{
case
'\n'
:
case
'\t'
:
case
'\v'
:
case
'\b'
:
case
'\r'
:
case
'\f'
:
len
++
;
break
;
default:
len
+=
4
;
break
;
}
}
}
if
(
ok
)
return
str
;
buf
=
tbGetBuffer
(
len
+
1
);
for
(
in
=
str
,
out
=
buf
;
*
in
!=
'\0'
;
in
++
)
{
if
(
isprint
(
*
in
))
*
out
++=
*
in
;
else
{
*
out
++=
'\\'
;
if
(
*
in
==
'\n'
)
*
out
++=
'n'
;
else
if
(
*
in
==
'\t'
)
*
out
++=
't'
;
else
if
(
*
in
==
'\v'
)
*
out
++=
'v'
;
else
if
(
*
in
==
'\b'
)
*
out
++=
'b'
;
else
if
(
*
in
==
'\r'
)
*
out
++=
'r'
;
else
if
(
*
in
==
'\f'
)
*
out
++=
'f'
;
else
if
((
*
in
==
'\033'
)
&&
(
format
==
XkbXKMFile
))
{
*
out
++=
'e'
;
}
else
{
*
out
++=
'0'
;
sprintf
(
out
,
"%o"
,
*
in
);
while
(
*
out
!=
'\0'
)
out
++
;
}
}
}
*
out
++=
'\0'
;
return
buf
;
}
/***====================================================================***/
char
*
XkbGeomFPText
(
int
val
,
unsigned
format
)
{
int
whole
,
frac
;
char
*
buf
;
buf
=
tbGetBuffer
(
12
);
if
(
format
==
XkbCFile
)
{
sprintf
(
buf
,
"%d"
,
val
);
}
else
{
whole
=
val
/
XkbGeomPtsPerMM
;
frac
=
val
%
XkbGeomPtsPerMM
;
if
(
frac
!=
0
)
sprintf
(
buf
,
"%d.%d"
,
whole
,
frac
);
else
sprintf
(
buf
,
"%d"
,
whole
);
}
return
buf
;
}
char
*
XkbDoodadTypeText
(
unsigned
type
,
unsigned
format
)
{
char
*
buf
;
if
(
format
==
XkbCFile
)
{
buf
=
tbGetBuffer
(
24
);
if
(
type
==
XkbOutlineDoodad
)
strcpy
(
buf
,
"XkbOutlineDoodad"
);
else
if
(
type
==
XkbSolidDoodad
)
strcpy
(
buf
,
"XkbSolidDoodad"
);
else
if
(
type
==
XkbTextDoodad
)
strcpy
(
buf
,
"XkbTextDoodad"
);
else
if
(
type
==
XkbIndicatorDoodad
)
strcpy
(
buf
,
"XkbIndicatorDoodad"
);
else
if
(
type
==
XkbLogoDoodad
)
strcpy
(
buf
,
"XkbLogoDoodad"
);
else
sprintf
(
buf
,
"UnknownDoodad%d"
,
type
);
}
else
{
buf
=
tbGetBuffer
(
12
);
if
(
type
==
XkbOutlineDoodad
)
strcpy
(
buf
,
"outline"
);
else
if
(
type
==
XkbSolidDoodad
)
strcpy
(
buf
,
"solid"
);
else
if
(
type
==
XkbTextDoodad
)
strcpy
(
buf
,
"text"
);
else
if
(
type
==
XkbIndicatorDoodad
)
strcpy
(
buf
,
"indicator"
);
else
if
(
type
==
XkbLogoDoodad
)
strcpy
(
buf
,
"logo"
);
else
sprintf
(
buf
,
"unknown%d"
,
type
);
}
return
buf
;
}
static
char
*
actionTypeNames
[
XkbSA_NumActions
]
=
{
"NoAction"
,
"SetMods"
,
"LatchMods"
,
"LockMods"
,
"SetGroup"
,
"LatchGroup"
,
"LockGroup"
,
"MovePtr"
,
"PtrBtn"
,
"LockPtrBtn"
,
"SetPtrDflt"
,
"ISOLock"
,
"Terminate"
,
"SwitchScreen"
,
"SetControls"
,
"LockControls"
,
"ActionMessage"
,
"RedirectKey"
,
"DeviceBtn"
,
"LockDeviceBtn"
};
char
*
XkbActionTypeText
(
unsigned
type
,
unsigned
format
)
{
static
char
buf
[
32
];
char
*
rtrn
;
if
(
type
<=
XkbSA_LastAction
)
{
rtrn
=
actionTypeNames
[
type
];
if
(
format
==
XkbCFile
)
{
sprintf
(
buf
,
"XkbSA_%s"
,
rtrn
);
return
buf
;
}
return
rtrn
;
}
sprintf
(
buf
,
"Private"
);
return
buf
;
}
/***====================================================================***/
static
int
TryCopyStr
(
char
*
to
,
char
*
from
,
int
*
pLeft
)
{
register
int
len
;
if
(
*
pLeft
>
0
)
{
len
=
strlen
(
from
);
if
(
len
<
((
*
pLeft
)
-
3
))
{
strcat
(
to
,
from
);
*
pLeft
-=
len
;
return
True
;
}
}
*
pLeft
=
-
1
;
return
False
;
}
/*ARGSUSED*/
static
Bool
CopyNoActionArgs
(
Display
*
dpy
,
XkbDescPtr
xkb
,
XkbAction
*
action
,
char
*
buf
,
int
*
sz
)
{
return
True
;
}
static
Bool
CopyModActionArgs
(
Display
*
dpy
,
XkbDescPtr
xkb
,
XkbAction
*
action
,
char
*
buf
,
int
*
sz
)
{
XkbModAction
*
act
;
unsigned
tmp
;
act
=
&
action
->
mods
;
tmp
=
XkbModActionVMods
(
act
);
TryCopyStr
(
buf
,
"modifiers="
,
sz
);
if
(
act
->
flags
&
XkbSA_UseModMapMods
)
TryCopyStr
(
buf
,
"modMapMods"
,
sz
);
else
if
(
act
->
real_mods
||
tmp
)
{
TryCopyStr
(
buf
,
XkbVModMaskText
(
dpy
,
xkb
,
act
->
real_mods
,
tmp
,
XkbXKBFile
),
sz
);
}
else
TryCopyStr
(
buf
,
"none"
,
sz
);
if
(
act
->
type
==
XkbSA_LockMods
)
return
True
;
if
(
act
->
flags
&
XkbSA_ClearLocks
)
TryCopyStr
(
buf
,
",clearLocks"
,
sz
);
if
(
act
->
flags
&
XkbSA_LatchToLock
)
TryCopyStr
(
buf
,
",latchToLock"
,
sz
);
return
True
;
}
/*ARGSUSED*/
static
Bool
CopyGroupActionArgs
(
Display
*
dpy
,
XkbDescPtr
xkb
,
XkbAction
*
action
,
char
*
buf
,
int
*
sz
)
{
XkbGroupAction
*
act
;
char
tbuf
[
32
];
act
=
&
action
->
group
;
TryCopyStr
(
buf
,
"group="
,
sz
);
if
(
act
->
flags
&
XkbSA_GroupAbsolute
)
sprintf
(
tbuf
,
"%d"
,
XkbSAGroup
(
act
)
+
1
);
else
if
(
XkbSAGroup
(
act
)
<
0
)
sprintf
(
tbuf
,
"%d"
,
XkbSAGroup
(
act
));
else
sprintf
(
tbuf
,
"+%d"
,
XkbSAGroup
(
act
));
TryCopyStr
(
buf
,
tbuf
,
sz
);
if
(
act
->
type
==
XkbSA_LockGroup
)
return
True
;
if
(
act
->
flags
&
XkbSA_ClearLocks
)
TryCopyStr
(
buf
,
",clearLocks"
,
sz
);
if
(
act
->
flags
&
XkbSA_LatchToLock
)
TryCopyStr
(
buf
,
",latchToLock"
,
sz
);
return
True
;
}
/*ARGSUSED*/
static
Bool
CopyMovePtrArgs
(
Display
*
dpy
,
XkbDescPtr
xkb
,
XkbAction
*
action
,
char
*
buf
,
int
*
sz
)
{
XkbPtrAction
*
act
;
int
x
,
y
;
char
tbuf
[
32
];
act
=
&
action
->
ptr
;
x
=
XkbPtrActionX
(
act
);
y
=
XkbPtrActionY
(
act
);
if
((
act
->
flags
&
XkbSA_MoveAbsoluteX
)
||
(
x
<
0
))
sprintf
(
tbuf
,
"x=%d"
,
x
);
else
sprintf
(
tbuf
,
"x=+%d"
,
x
);
TryCopyStr
(
buf
,
tbuf
,
sz
);
if
((
act
->
flags
&
XkbSA_MoveAbsoluteY
)
||
(
y
<
0
))
sprintf
(
tbuf
,
",y=%d"
,
y
);
else
sprintf
(
tbuf
,
",y=+%d"
,
y
);
TryCopyStr
(
buf
,
tbuf
,
sz
);
if
(
act
->
flags
&
XkbSA_NoAcceleration
)
TryCopyStr
(
buf
,
",!accel"
,
sz
);
return
True
;
}
/*ARGSUSED*/
static
Bool
CopyPtrBtnArgs
(
Display
*
dpy
,
XkbDescPtr
xkb
,
XkbAction
*
action
,
char
*
buf
,
int
*
sz
)
{
XkbPtrBtnAction
*
act
;
char
tbuf
[
32
];
act
=
&
action
->
btn
;
TryCopyStr
(
buf
,
"button="
,
sz
);
if
((
act
->
button
>
0
)
&&
(
act
->
button
<
6
))
{
sprintf
(
tbuf
,
"%d"
,
act
->
button
);
TryCopyStr
(
buf
,
tbuf
,
sz
);
}
else
TryCopyStr
(
buf
,
"default"
,
sz
);
if
(
act
->
count
>
0
)
{
sprintf
(
tbuf
,
",count=%d"
,
act
->
count
);
TryCopyStr
(
buf
,
tbuf
,
sz
);
}
if
(
action
->
type
==
XkbSA_LockPtrBtn
)
{
switch
(
act
->
flags
&
(
XkbSA_LockNoUnlock
|
XkbSA_LockNoLock
))
{
case
XkbSA_LockNoLock
:
sprintf
(
tbuf
,
",affect=unlock"
);
break
;
case
XkbSA_LockNoUnlock
:
sprintf
(
tbuf
,
",affect=lock"
);
break
;
case
XkbSA_LockNoUnlock
|
XkbSA_LockNoLock
:
sprintf
(
tbuf
,
",affect=neither"
);
break
;
default:
sprintf
(
tbuf
,
",affect=both"
);
break
;
}
TryCopyStr
(
buf
,
tbuf
,
sz
);
}
return
True
;
}
/*ARGSUSED*/
static
Bool
CopySetPtrDfltArgs
(
Display
*
dpy
,
XkbDescPtr
xkb
,
XkbAction
*
action
,
char
*
buf
,
int
*
sz
)
{
XkbPtrDfltAction
*
act
;
char
tbuf
[
32
];
act
=
&
action
->
dflt
;
if
(
act
->
affect
==
XkbSA_AffectDfltBtn
)
{
TryCopyStr
(
buf
,
"affect=button,button="
,
sz
);
if
((
act
->
flags
&
XkbSA_DfltBtnAbsolute
)
||
(
XkbSAPtrDfltValue
(
act
)
<
0
))
sprintf
(
tbuf
,
"%d"
,
XkbSAPtrDfltValue
(
act
));
else
sprintf
(
tbuf
,
"+%d"
,
XkbSAPtrDfltValue
(
act
));
TryCopyStr
(
buf
,
tbuf
,
sz
);
}
return
True
;
}
static
Bool
CopyISOLockArgs
(
Display
*
dpy
,
XkbDescPtr
xkb
,
XkbAction
*
action
,
char
*
buf
,
int
*
sz
)
{
XkbISOAction
*
act
;
char
tbuf
[
64
];
act
=
&
action
->
iso
;
if
(
act
->
flags
&
XkbSA_ISODfltIsGroup
)
{
TryCopyStr
(
tbuf
,
"group="
,
sz
);
if
(
act
->
flags
&
XkbSA_GroupAbsolute
)
sprintf
(
tbuf
,
"%d"
,
XkbSAGroup
(
act
)
+
1
);
else
if
(
XkbSAGroup
(
act
)
<
0
)
sprintf
(
tbuf
,
"%d"
,
XkbSAGroup
(
act
));
else
sprintf
(
tbuf
,
"+%d"
,
XkbSAGroup
(
act
));
TryCopyStr
(
buf
,
tbuf
,
sz
);
}
else
{
unsigned
tmp
;
tmp
=
XkbModActionVMods
(
act
);
TryCopyStr
(
buf
,
"modifiers="
,
sz
);
if
(
act
->
flags
&
XkbSA_UseModMapMods
)
TryCopyStr
(
buf
,
"modMapMods"
,
sz
);
else
if
(
act
->
real_mods
||
tmp
)
{
if
(
act
->
real_mods
)
{
TryCopyStr
(
buf
,
XkbModMaskText
(
act
->
real_mods
,
XkbXKBFile
),
sz
);
if
(
tmp
)
TryCopyStr
(
buf
,
"+"
,
sz
);
}
if
(
tmp
)
TryCopyStr
(
buf
,
XkbVModMaskText
(
dpy
,
xkb
,
0
,
tmp
,
XkbXKBFile
),
sz
);
}
else
TryCopyStr
(
buf
,
"none"
,
sz
);
}
TryCopyStr
(
buf
,
",affect="
,
sz
);
if
((
act
->
affect
&
XkbSA_ISOAffectMask
)
==
0
)
TryCopyStr
(
buf
,
"all"
,
sz
);
else
{
int
nOut
=
0
;
if
((
act
->
affect
&
XkbSA_ISONoAffectMods
)
==
0
)
{
TryCopyStr
(
buf
,
"mods"
,
sz
);
nOut
++
;
}
if
((
act
->
affect
&
XkbSA_ISONoAffectGroup
)
==
0
)
{
sprintf
(
tbuf
,
"%sgroups"
,(
nOut
>
0
?
"+"
:
""
));
TryCopyStr
(
buf
,
tbuf
,
sz
);
nOut
++
;
}
if
((
act
->
affect
&
XkbSA_ISONoAffectPtr
)
==
0
)
{
sprintf
(
tbuf
,
"%spointer"
,(
nOut
>
0
?
"+"
:
""
));
TryCopyStr
(
buf
,
tbuf
,
sz
);
nOut
++
;
}
if
((
act
->
affect
&
XkbSA_ISONoAffectCtrls
)
==
0
)
{
sprintf
(
tbuf
,
"%scontrols"
,(
nOut
>
0
?
"+"
:
""
));
TryCopyStr
(
buf
,
tbuf
,
sz
);
nOut
++
;
}
}
return
True
;
}
/*ARGSUSED*/
static
Bool
CopySwitchScreenArgs
(
Display
*
dpy
,
XkbDescPtr
xkb
,
XkbAction
*
action
,
char
*
buf
,
int
*
sz
)
{
XkbSwitchScreenAction
*
act
;
char
tbuf
[
32
];
act
=
&
action
->
screen
;
if
((
act
->
flags
&
XkbSA_SwitchAbsolute
)
||
(
XkbSAScreen
(
act
)
<
0
))
sprintf
(
tbuf
,
"screen=%d"
,
XkbSAScreen
(
act
));
else
sprintf
(
tbuf
,
"screen=+%d"
,
XkbSAScreen
(
act
));
TryCopyStr
(
buf
,
tbuf
,
sz
);
if
(
act
->
flags
&
XkbSA_SwitchApplication
)
TryCopyStr
(
buf
,
",!same"
,
sz
);
else
TryCopyStr
(
buf
,
",same"
,
sz
);
return
True
;
}
/*ARGSUSED*/
static
Bool
CopySetLockControlsArgs
(
Display
*
dpy
,
XkbDescPtr
xkb
,
XkbAction
*
action
,
char
*
buf
,
int
*
sz
)
{
XkbCtrlsAction
*
act
;
unsigned
tmp
;
char
tbuf
[
32
];
act
=
&
action
->
ctrls
;
tmp
=
XkbActionCtrls
(
act
);
TryCopyStr
(
buf
,
"controls="
,
sz
);
if
(
tmp
==
0
)
TryCopyStr
(
buf
,
"none"
,
sz
);
else
if
((
tmp
&
XkbAllBooleanCtrlsMask
)
==
XkbAllBooleanCtrlsMask
)
TryCopyStr
(
buf
,
"all"
,
sz
);
else
{
int
nOut
=
0
;
if
(
tmp
&
XkbRepeatKeysMask
)
{
sprintf
(
tbuf
,
"%sRepeatKeys"
,(
nOut
>
0
?
"+"
:
""
));
TryCopyStr
(
buf
,
tbuf
,
sz
);
nOut
++
;
}
if
(
tmp
&
XkbSlowKeysMask
)
{
sprintf
(
tbuf
,
"%sSlowKeys"
,(
nOut
>
0
?
"+"
:
""
));
TryCopyStr
(
buf
,
tbuf
,
sz
);
nOut
++
;
}
if
(
tmp
&
XkbBounceKeysMask
)
{
sprintf
(
tbuf
,
"%sBounceKeys"
,(
nOut
>
0
?
"+"
:
""
));
TryCopyStr
(
buf
,
tbuf
,
sz
);
nOut
++
;
}
if
(
tmp
&
XkbStickyKeysMask
)
{
sprintf
(
tbuf
,
"%sStickyKeys"
,(
nOut
>
0
?
"+"
:
""
));
TryCopyStr
(
buf
,
tbuf
,
sz
);
nOut
++
;
}
if
(
tmp
&
XkbMouseKeysMask
)
{
sprintf
(
tbuf
,
"%sMouseKeys"
,(
nOut
>
0
?
"+"
:
""
));
TryCopyStr
(
buf
,
tbuf
,
sz
);
nOut
++
;
}
if
(
tmp
&
XkbMouseKeysAccelMask
)
{
sprintf
(
tbuf
,
"%sMouseKeysAccel"
,(
nOut
>
0
?
"+"
:
""
));
TryCopyStr
(
buf
,
tbuf
,
sz
);
nOut
++
;
}
if
(
tmp
&
XkbAccessXKeysMask
)
{
sprintf
(
tbuf
,
"%sAccessXKeys"
,(
nOut
>
0
?
"+"
:
""
));
TryCopyStr
(
buf
,
tbuf
,
sz
);
nOut
++
;
}
if
(
tmp
&
XkbAccessXTimeoutMask
)
{
sprintf
(
tbuf
,
"%sAccessXTimeout"
,(
nOut
>
0
?
"+"
:
""
));
TryCopyStr
(
buf
,
tbuf
,
sz
);
nOut
++
;
}
if
(
tmp
&
XkbAccessXFeedbackMask
)
{
sprintf
(
tbuf
,
"%sAccessXFeedback"
,(
nOut
>
0
?
"+"
:
""
));
TryCopyStr
(
buf
,
tbuf
,
sz
);
nOut
++
;
}
if
(
tmp
&
XkbAudibleBellMask
)
{
sprintf
(
tbuf
,
"%sAudibleBell"
,(
nOut
>
0
?
"+"
:
""
));
TryCopyStr
(
buf
,
tbuf
,
sz
);
nOut
++
;
}
if
(
tmp
&
XkbOverlay1Mask
)
{
sprintf
(
tbuf
,
"%sOverlay1"
,(
nOut
>
0
?
"+"
:
""
));
TryCopyStr
(
buf
,
tbuf
,
sz
);
nOut
++
;
}
if
(
tmp
&
XkbOverlay2Mask
)
{
sprintf
(
tbuf
,
"%sOverlay2"
,(
nOut
>
0
?
"+"
:
""
));
TryCopyStr
(
buf
,
tbuf
,
sz
);
nOut
++
;
}
if
(
tmp
&
XkbIgnoreGroupLockMask
)
{
sprintf
(
tbuf
,
"%sIgnoreGroupLock"
,(
nOut
>
0
?
"+"
:
""
));
TryCopyStr
(
buf
,
tbuf
,
sz
);
nOut
++
;
}
}
return
True
;
}
/*ARGSUSED*/
static
Bool
CopyActionMessageArgs
(
Display
*
dpy
,
XkbDescPtr
xkb
,
XkbAction
*
action
,
char
*
buf
,
int
*
sz
)
{
XkbMessageAction
*
act
;
unsigned
all
;
char
tbuf
[
32
];
act
=
&
action
->
msg
;
all
=
XkbSA_MessageOnPress
|
XkbSA_MessageOnRelease
;
TryCopyStr
(
buf
,
"report="
,
sz
);
if
((
act
->
flags
&
all
)
==
0
)
TryCopyStr
(
buf
,
"none"
,
sz
);
else
if
((
act
->
flags
&
all
)
==
all
)
TryCopyStr
(
buf
,
"all"
,
sz
);
else
if
(
act
->
flags
&
XkbSA_MessageOnPress
)
TryCopyStr
(
buf
,
"KeyPress"
,
sz
);
else
TryCopyStr
(
buf
,
"KeyRelease"
,
sz
);
sprintf
(
tbuf
,
",data[0]=0x%02x"
,
act
->
message
[
0
]);
TryCopyStr
(
buf
,
tbuf
,
sz
);
sprintf
(
tbuf
,
",data[1]=0x%02x"
,
act
->
message
[
1
]);
TryCopyStr
(
buf
,
tbuf
,
sz
);
sprintf
(
tbuf
,
",data[2]=0x%02x"
,
act
->
message
[
2
]);
TryCopyStr
(
buf
,
tbuf
,
sz
);
sprintf
(
tbuf
,
",data[3]=0x%02x"
,
act
->
message
[
3
]);
TryCopyStr
(
buf
,
tbuf
,
sz
);
sprintf
(
tbuf
,
",data[4]=0x%02x"
,
act
->
message
[
4
]);
TryCopyStr
(
buf
,
tbuf
,
sz
);
sprintf
(
tbuf
,
",data[5]=0x%02x"
,
act
->
message
[
5
]);
TryCopyStr
(
buf
,
tbuf
,
sz
);
return
True
;
}
static
Bool
CopyRedirectKeyArgs
(
Display
*
dpy
,
XkbDescPtr
xkb
,
XkbAction
*
action
,
char
*
buf
,
int
*
sz
)
{
XkbRedirectKeyAction
*
act
;
char
tbuf
[
32
],
*
tmp
;
unsigned
kc
;
unsigned
vmods
,
vmods_mask
;
act
=
&
action
->
redirect
;
kc
=
act
->
new_key
;
vmods
=
XkbSARedirectVMods
(
act
);
vmods_mask
=
XkbSARedirectVModsMask
(
act
);
if
(
xkb
&&
xkb
->
names
&&
xkb
->
names
->
keys
&&
(
kc
<=
xkb
->
max_key_code
)
&&
(
xkb
->
names
->
keys
[
kc
].
name
[
0
]
!=
'\0'
))
{
char
*
kn
;
kn
=
XkbKeyNameText
(
xkb
->
names
->
keys
[
kc
].
name
,
XkbXKBFile
);
sprintf
(
tbuf
,
"key=%s"
,
kn
);
}
else
sprintf
(
tbuf
,
"key=%d"
,
kc
);
TryCopyStr
(
buf
,
tbuf
,
sz
);
if
((
act
->
mods_mask
==
0
)
&&
(
vmods_mask
==
0
))
return
True
;
if
((
act
->
mods_mask
==
XkbAllModifiersMask
)
&&
(
vmods_mask
==
XkbAllVirtualModsMask
))
{
tmp
=
XkbVModMaskText
(
dpy
,
xkb
,
act
->
mods
,
vmods
,
XkbXKBFile
);
TryCopyStr
(
buf
,
",mods="
,
sz
);
TryCopyStr
(
buf
,
tmp
,
sz
);
}
else
{
if
((
act
->
mods_mask
&
act
->
mods
)
||
(
vmods_mask
&
vmods
))
{
tmp
=
XkbVModMaskText
(
dpy
,
xkb
,
act
->
mods_mask
&
act
->
mods
,
vmods_mask
&
vmods
,
XkbXKBFile
);
TryCopyStr
(
buf
,
",mods= "
,
sz
);
TryCopyStr
(
buf
,
tmp
,
sz
);
}
if
((
act
->
mods_mask
&
(
~
act
->
mods
))
||
(
vmods_mask
&
(
~
vmods
)))
{
tmp
=
XkbVModMaskText
(
dpy
,
xkb
,
act
->
mods_mask
&
(
~
act
->
mods
),
vmods_mask
&
(
~
vmods
),
XkbXKBFile
);
TryCopyStr
(
buf
,
",clearMods= "
,
sz
);
TryCopyStr
(
buf
,
tmp
,
sz
);
}
}
return
True
;
}
/*ARGSUSED*/
static
Bool
CopyDeviceBtnArgs
(
Display
*
dpy
,
XkbDescPtr
xkb
,
XkbAction
*
action
,
char
*
buf
,
int
*
sz
)
{
XkbDeviceBtnAction
*
act
;
char
tbuf
[
32
];
act
=
&
action
->
devbtn
;
sprintf
(
tbuf
,
"device= %d"
,
act
->
device
);
TryCopyStr
(
buf
,
tbuf
,
sz
);
TryCopyStr
(
buf
,
",button="
,
sz
);
sprintf
(
tbuf
,
"%d"
,
act
->
button
);
TryCopyStr
(
buf
,
tbuf
,
sz
);
if
(
act
->
count
>
0
)
{
sprintf
(
tbuf
,
",count=%d"
,
act
->
count
);
TryCopyStr
(
buf
,
tbuf
,
sz
);
}
if
(
action
->
type
==
XkbSA_LockDeviceBtn
)
{
switch
(
act
->
flags
&
(
XkbSA_LockNoUnlock
|
XkbSA_LockNoLock
))
{
case
XkbSA_LockNoLock
:
sprintf
(
tbuf
,
",affect=unlock"
);
break
;
case
XkbSA_LockNoUnlock
:
sprintf
(
tbuf
,
",affect=lock"
);
break
;
case
XkbSA_LockNoUnlock
|
XkbSA_LockNoLock
:
sprintf
(
tbuf
,
",affect=neither"
);
break
;
default:
sprintf
(
tbuf
,
",affect=both"
);
break
;
}
TryCopyStr
(
buf
,
tbuf
,
sz
);
}
return
True
;
}
/*ARGSUSED*/
static
Bool
CopyOtherArgs
(
Display
*
dpy
,
XkbDescPtr
xkb
,
XkbAction
*
action
,
char
*
buf
,
int
*
sz
)
{
XkbAnyAction
*
act
;
char
tbuf
[
32
];
act
=
&
action
->
any
;
sprintf
(
tbuf
,
"type=0x%02x"
,
act
->
type
);
TryCopyStr
(
buf
,
tbuf
,
sz
);
sprintf
(
tbuf
,
",data[0]=0x%02x"
,
act
->
data
[
0
]);
TryCopyStr
(
buf
,
tbuf
,
sz
);
sprintf
(
tbuf
,
",data[1]=0x%02x"
,
act
->
data
[
1
]);
TryCopyStr
(
buf
,
tbuf
,
sz
);
sprintf
(
tbuf
,
",data[2]=0x%02x"
,
act
->
data
[
2
]);
TryCopyStr
(
buf
,
tbuf
,
sz
);
sprintf
(
tbuf
,
",data[3]=0x%02x"
,
act
->
data
[
3
]);
TryCopyStr
(
buf
,
tbuf
,
sz
);
sprintf
(
tbuf
,
",data[4]=0x%02x"
,
act
->
data
[
4
]);
TryCopyStr
(
buf
,
tbuf
,
sz
);
sprintf
(
tbuf
,
",data[5]=0x%02x"
,
act
->
data
[
5
]);
TryCopyStr
(
buf
,
tbuf
,
sz
);
sprintf
(
tbuf
,
",data[6]=0x%02x"
,
act
->
data
[
6
]);
TryCopyStr
(
buf
,
tbuf
,
sz
);
return
True
;
}
typedef
Bool
(
*
actionCopy
)(
Display
*
/* dpy */
,
XkbDescPtr
/* xkb */
,
XkbAction
*
/* action */
,
char
*
/* buf */
,
int
*
/* sz */
);
static
actionCopy
copyActionArgs
[
XkbSA_NumActions
]
=
{
CopyNoActionArgs
/* NoAction */
,
CopyModActionArgs
/* SetMods */
,
CopyModActionArgs
/* LatchMods */
,
CopyModActionArgs
/* LockMods */
,
CopyGroupActionArgs
/* SetGroup */
,
CopyGroupActionArgs
/* LatchGroup */
,
CopyGroupActionArgs
/* LockGroup */
,
CopyMovePtrArgs
/* MovePtr */
,
CopyPtrBtnArgs
/* PtrBtn */
,
CopyPtrBtnArgs
/* LockPtrBtn */
,
CopySetPtrDfltArgs
/* SetPtrDflt */
,
CopyISOLockArgs
/* ISOLock */
,
CopyNoActionArgs
/* Terminate */
,
CopySwitchScreenArgs
/* SwitchScreen */
,
CopySetLockControlsArgs
/* SetControls */
,
CopySetLockControlsArgs
/* LockControls */
,
CopyActionMessageArgs
/* ActionMessage*/
,
CopyRedirectKeyArgs
/* RedirectKey */
,
CopyDeviceBtnArgs
/* DeviceBtn */
,
CopyDeviceBtnArgs
/* LockDeviceBtn*/
};
#define ACTION_SZ 256
char
*
XkbActionText
(
Display
*
dpy
,
XkbDescPtr
xkb
,
XkbAction
*
action
,
unsigned
format
)
{
char
buf
[
ACTION_SZ
],
*
tmp
;
int
sz
;
if
(
format
==
XkbCFile
)
{
sprintf
(
buf
,
"{ %20s, { 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x } }"
,
XkbActionTypeText
(
action
->
type
,
XkbCFile
),
action
->
any
.
data
[
0
],
action
->
any
.
data
[
1
],
action
->
any
.
data
[
2
],
action
->
any
.
data
[
3
],
action
->
any
.
data
[
4
],
action
->
any
.
data
[
5
],
action
->
any
.
data
[
6
]);
}
else
{
sprintf
(
buf
,
"%s("
,
XkbActionTypeText
(
action
->
type
,
XkbXKBFile
));
sz
=
ACTION_SZ
-
strlen
(
buf
)
+
2
;
/* room for close paren and NULL */
if
(
action
->
type
<
(
unsigned
)
XkbSA_NumActions
)
(
*
copyActionArgs
[
action
->
type
])(
dpy
,
xkb
,
action
,
buf
,
&
sz
);
else
CopyOtherArgs
(
dpy
,
xkb
,
action
,
buf
,
&
sz
);
TryCopyStr
(
buf
,
")"
,
&
sz
);
}
tmp
=
tbGetBuffer
(
strlen
(
buf
)
+
1
);
if
(
tmp
!=
NULL
)
strcpy
(
tmp
,
buf
);
return
tmp
;
}
char
*
XkbBehaviorText
(
XkbDescPtr
xkb
,
XkbBehavior
*
behavior
,
unsigned
format
)
{
char
buf
[
256
],
*
tmp
;
if
(
format
==
XkbCFile
)
{
if
(
behavior
->
type
==
XkbKB_Default
)
sprintf
(
buf
,
"{ 0, 0 }"
);
else
sprintf
(
buf
,
"{ %3d, 0x%02x }"
,
behavior
->
type
,
behavior
->
data
);
}
else
{
unsigned
type
,
permanent
;
type
=
behavior
->
type
&
XkbKB_OpMask
;
permanent
=
((
behavior
->
type
&
XkbKB_Permanent
)
!=
0
);
if
(
type
==
XkbKB_Lock
)
{
sprintf
(
buf
,
"lock= %s"
,(
permanent
?
"Permanent"
:
"True"
));
}
else
if
(
type
==
XkbKB_RadioGroup
)
{
int
g
;
char
*
tmp
;
g
=
((
behavior
->
data
)
&
(
~
XkbKB_RGAllowNone
))
+
1
;
if
(
XkbKB_RGAllowNone
&
behavior
->
data
)
{
sprintf
(
buf
,
"allowNone,"
);
tmp
=
&
buf
[
strlen
(
buf
)];
}
else
tmp
=
buf
;
if
(
permanent
)
sprintf
(
tmp
,
"permanentRadioGroup= %d"
,
g
);
else
sprintf
(
tmp
,
"radioGroup= %d"
,
g
);
}
else
if
((
type
==
XkbKB_Overlay1
)
||
(
type
==
XkbKB_Overlay2
))
{
int
ndx
,
kc
;
char
*
kn
;
ndx
=
((
type
==
XkbKB_Overlay1
)
?
1
:
2
);
kc
=
behavior
->
data
;
if
((
xkb
)
&&
(
xkb
->
names
)
&&
(
xkb
->
names
->
keys
))
kn
=
XkbKeyNameText
(
xkb
->
names
->
keys
[
kc
].
name
,
XkbXKBFile
);
else
{
static
char
tbuf
[
8
];
sprintf
(
tbuf
,
"%d"
,
kc
);
kn
=
tbuf
;
}
if
(
permanent
)
sprintf
(
buf
,
"permanentOverlay%d= %s"
,
ndx
,
kn
);
else
sprintf
(
buf
,
"overlay%d= %s"
,
ndx
,
kn
);
}
}
tmp
=
tbGetBuffer
(
strlen
(
buf
)
+
1
);
if
(
tmp
!=
NULL
)
strcpy
(
tmp
,
buf
);
return
tmp
;
}
/***====================================================================***/
char
*
XkbIndentText
(
unsigned
size
)
{
static
char
buf
[
32
];
register
int
i
;
if
(
size
>
31
)
size
=
31
;
for
(
i
=
0
;
i
<
size
;
i
++
)
{
buf
[
i
]
=
' '
;
}
buf
[
size
]
=
'\0'
;
return
buf
;
}
nx-X11/programs/Xserver/xkb/xkmread.c
View file @
fccef5fc
...
@@ -152,89 +152,6 @@ int count,nRead=0;
...
@@ -152,89 +152,6 @@ int count,nRead=0;
return
nRead
;
return
nRead
;
}
}
unsigned
_XkbKSCheckCase
(
KeySym
ks
)
{
unsigned
set
,
rtrn
;
set
=
(
ks
&
(
~
0xff
))
>>
8
;
rtrn
=
0
;
switch
(
set
)
{
case
0
:
/* latin 1 */
if
(((
ks
>=
XK_A
)
&&
(
ks
<=
XK_Z
))
||
((
ks
>=
XK_Agrave
)
&&
(
ks
<=
XK_THORN
)
&&
(
ks
!=
XK_multiply
)))
{
rtrn
|=
_XkbKSUpper
;
}
if
(((
ks
>=
XK_a
)
&&
(
ks
<=
XK_z
))
||
((
ks
>=
XK_agrave
)
&&
(
ks
<=
XK_ydiaeresis
)))
{
rtrn
|=
_XkbKSLower
;
}
break
;
case
1
:
/* latin 2 */
if
(((
ks
>=
XK_Aogonek
)
&&
(
ks
<=
XK_Zabovedot
)
&&
(
ks
!=
XK_breve
))
||
((
ks
>=
XK_Racute
)
&&
(
ks
<=
XK_Tcedilla
)))
{
rtrn
|=
_XkbKSUpper
;
}
if
(((
ks
>=
XK_aogonek
)
&&
(
ks
<=
XK_zabovedot
)
&&
(
ks
!=
XK_caron
))
||
((
ks
>=
XK_racute
)
&&
(
ks
<=
XK_tcedilla
)))
{
rtrn
|=
_XkbKSLower
;
}
break
;
case
2
:
/* latin 3 */
if
(((
ks
>=
XK_Hstroke
)
&&
(
ks
<=
XK_Jcircumflex
))
||
((
ks
>=
XK_Cabovedot
)
&&
(
ks
<=
XK_Scircumflex
)))
{
rtrn
|=
_XkbKSUpper
;
}
if
(((
ks
>=
XK_hstroke
)
&&
(
ks
<=
XK_jcircumflex
))
||
((
ks
>=
XK_cabovedot
)
&&
(
ks
<=
XK_scircumflex
)))
{
rtrn
|=
_XkbKSLower
;
}
break
;
case
3
:
/* latin 4 */
if
(((
ks
>=
XK_Rcedilla
)
&&
(
ks
<=
XK_Tslash
))
||
(
ks
==
XK_ENG
)
||
((
ks
>=
XK_Amacron
)
&&
(
ks
<=
XK_Umacron
)))
{
rtrn
|=
_XkbKSUpper
;
}
if
(((
ks
>=
XK_rcedilla
)
&&
(
ks
<=
XK_tslash
))
||
(
ks
==
XK_eng
)
||
((
ks
>=
XK_amacron
)
&&
(
ks
<=
XK_umacron
)))
{
rtrn
|=
_XkbKSLower
;
}
break
;
case
18
:
/* latin 8 */
if
((
ks
==
XK_Babovedot
)
||
((
ks
>=
XK_Dabovedot
)
&&
(
ks
<=
XK_Wacute
))
||
((
ks
>=
XK_Ygrave
)
&&
(
ks
<=
XK_Fabovedot
))
||
(
ks
==
XK_Mabovedot
)
||
(
ks
==
XK_Pabovedot
)
||
(
ks
==
XK_Sabovedot
)
||
(
ks
==
XK_Wdiaeresis
)
||
((
ks
>=
XK_Wcircumflex
)
&&
(
ks
<=
XK_Ycircumflex
)))
{
rtrn
|=
_XkbKSUpper
;
}
if
((
ks
==
XK_babovedot
)
||
(
ks
==
XK_dabovedot
)
||
(
ks
==
XK_fabovedot
)
||
(
ks
==
XK_mabovedot
)
||
((
ks
>=
XK_wgrave
)
&&
(
ks
<=
XK_wacute
))
||
(
ks
==
XK_ygrave
)
||
((
ks
>=
XK_wdiaeresis
)
&&
(
ks
<=
XK_ycircumflex
)))
{
rtrn
|=
_XkbKSLower
;
}
break
;
case
19
:
/* latin 9 */
if
((
ks
==
XK_OE
)
||
(
ks
==
XK_Ydiaeresis
))
{
rtrn
|=
_XkbKSUpper
;
}
if
(
ks
==
XK_oe
)
{
rtrn
|=
_XkbKSLower
;
}
break
;
}
return
rtrn
;
}
/***====================================================================***/
/***====================================================================***/
static
int
static
int
...
@@ -1226,10 +1143,14 @@ int nRead;
...
@@ -1226,10 +1143,14 @@ int nRead;
*
loaded_rtrn
|=
XkmGeometryMask
;
*
loaded_rtrn
|=
XkmGeometryMask
;
break
;
break
;
default:
default:
_XkbLibError
(
_XkbErrBadImplementation
,
XkbConfigText
(
tmpTOC
.
type
,
XkbMessage
),
0
);
nRead
=
0
;
nRead
=
0
;
break
;
break
;
}
}
if
(
nRead
!=
tmpTOC
.
size
)
{
if
(
nRead
!=
tmpTOC
.
size
)
{
_XkbLibError
(
_XkbErrBadLength
,
XkbConfigText
(
tmpTOC
.
type
,
XkbMessage
),
nRead
-
tmpTOC
.
size
);
return
0
;
return
0
;
}
}
return
(
nRead
>=
0
);
return
(
nRead
>=
0
);
...
@@ -1264,6 +1185,8 @@ char name[100];
...
@@ -1264,6 +1185,8 @@ char name[100];
return
Xstrdup
(
name
);
return
Xstrdup
(
name
);
break
;
break
;
default:
default:
_XkbLibError
(
_XkbErrBadImplementation
,
XkbConfigText
(
tmpTOC
.
type
,
XkbMessage
),
0
);
break
;
break
;
}
}
return
NULL
;
return
NULL
;
...
@@ -1329,6 +1252,8 @@ unsigned which= need|want;
...
@@ -1329,6 +1252,8 @@ unsigned which= need|want;
tmp
=
ReadXkmGeometry
(
file
,
result
);
tmp
=
ReadXkmGeometry
(
file
,
result
);
break
;
break
;
default:
default:
_XkbLibError
(
_XkbErrBadImplementation
,
XkbConfigText
(
tmpTOC
.
type
,
XkbMessage
),
0
);
tmp
=
0
;
tmp
=
0
;
break
;
break
;
}
}
...
@@ -1338,7 +1263,8 @@ unsigned which= need|want;
...
@@ -1338,7 +1263,8 @@ unsigned which= need|want;
result
->
defined
|=
(
1
<<
toc
[
i
].
type
);
result
->
defined
|=
(
1
<<
toc
[
i
].
type
);
}
}
if
(
nRead
!=
tmpTOC
.
size
)
{
if
(
nRead
!=
tmpTOC
.
size
)
{
return
0
;
_XkbLibError
(
_XkbErrBadLength
,
XkbConfigText
(
tmpTOC
.
type
,
XkbMessage
),
nRead
-
tmpTOC
.
size
);
}
}
}
}
return
which
;
return
which
;
...
...
nx-libs.spec
View file @
fccef5fc
...
@@ -32,6 +32,8 @@ BuildRequires: pkgconfig
...
@@ -32,6 +32,8 @@ BuildRequires: pkgconfig
%if 0%{?suse_version} && 0%{?suse_version} < 1210
%if 0%{?suse_version} && 0%{?suse_version} < 1210
BuildRequires: xorg-x11-util-devel
BuildRequires: xorg-x11-util-devel
%else
%else
# we need xkbcomp.pc
BuildRequires: xorg-x11-xkb-utils-devel
BuildRequires: imake
BuildRequires: imake
%endif
%endif
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment