summaryrefslogtreecommitdiff
path: root/xkbbell.c
diff options
context:
space:
mode:
Diffstat (limited to 'xkbbell.c')
-rw-r--r--xkbbell.c353
1 files changed, 190 insertions, 163 deletions
diff --git a/xkbbell.c b/xkbbell.c
index cc30c8a..ac06b35 100644
--- a/xkbbell.c
+++ b/xkbbell.c
@@ -1,4 +1,3 @@
-/* $Xorg: xkbbell.c,v 1.4 2000/08/17 19:54:51 cpqbld Exp $ */
/************************************************************
Copyright (c) 1993 by Silicon Graphics Computer Systems, Inc.
@@ -24,9 +23,13 @@ OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH
THE USE OR PERFORMANCE OF THIS SOFTWARE.
********************************************************/
-/* $XFree86: xc/programs/xkbutils/xkbbell.c,v 1.4 2001/01/17 23:46:13 dawes Exp $ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
#include <stdio.h>
+#include <stdlib.h>
#include <string.h>
#include <X11/Xproto.h>
#include <X11/Xlib.h>
@@ -34,113 +37,122 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
#include <X11/XKBlib.h>
#include <X11/extensions/XI.h>
-static char *dpyName = NULL;
-static int volume = 0;
-static int devSpec = XkbUseCoreKbd;
-static int class= -1;
-static int id= -1;
-static char * bellName;
-static Atom nameAtom = None;
-static int synch= 0;
-static int win = None;
-static int force = 0;
-static int nobeep = 0;
+static char *dpyName = NULL;
+static int volume = 0;
+static int devSpec = XkbUseCoreKbd;
+static int class = -1;
+static int id = -1;
+static char *bellName;
+static Atom nameAtom = None;
+static int synch = 0;
+static int win = None;
+static int force = 0;
+static int nobeep = 0;
static int
parseArgs(int argc, char *argv[])
{
-int i;
+ int i;
- for (i=1;i<argc;i++) {
- if ( strcmp(argv[i],"-display")==0 ) {
- if ( ++i<argc ) dpyName= argv[i];
- else {
- fprintf(stderr,"Must specify a display with -display option\n");
- return 0;
- }
- }
- else if ((strcmp(argv[i],"-help")==0) || (strcmp(argv[i],"-usage")==0)){
- return 0;
- }
- else if ( strcmp(argv[i],"-synch")==0 ) {
- synch= 1;
- }
- else if ( strcmp(argv[i],"-force")==0 ) {
- force= 1;
- }
- else if ( strcmp(argv[i],"-nobeep")==0 ) {
- nobeep= 1;
- }
- else if ( strcmp(argv[i],"-dev")==0 ) {
- if ( ++i<argc ) {
- if (sscanf(argv[i]," %i ",&devSpec)!=1) {
- fprintf(stderr,"Device ID must be an integer\n");
- return 0;
- }
- }
- else {
- fprintf(stderr,"Must specify a device ID with -dev option\n");
- return 0;
- }
- }
- else if ( strcmp(argv[i],"-kf")==0 ) {
- if ( ++i<argc ) {
- if (sscanf(argv[i]," %i ",&id)!=1) {
- fprintf(stderr,"Keyboard feedback ID must be an integer\n");
- return 0;
- }
- class= KbdFeedbackClass;
- }
- else {
- fprintf(stderr,"Must specify a keyboard feedback ID for -kf\n");
- return 0;
- }
- }
- else if ( strcmp(argv[i],"-bf")==0 ) {
- if ( ++i<argc ) {
- if (sscanf(argv[i]," %i ",&id)!=1) {
- fprintf(stderr,"Bell feedback ID must be an integer\n");
- return 0;
- }
- class= BellFeedbackClass;
- }
- else {
- fprintf(stderr,"Must specify a bell feedback ID for -bf\n");
- return 0;
- }
- }
- else if ( strcmp(argv[i],"-v")==0 ) {
- if ( ++i<argc ) {
- if ((sscanf(argv[i]," %i ",&volume)!=1)||
- (volume<-100)||(volume>100)) {
- fprintf(stderr,"Volume must be in the range -100..100\n");
- return 0;
- }
- }
- else {
- fprintf(stderr,"Must specify volume for -v\n");
- return 0;
- }
- }
- else if ( strcmp(argv[i],"-w")==0 ) {
- if ( ++i<argc ) {
- if (sscanf(argv[i]," %i ",&win)!=1) {
- fprintf(stderr,"Must specify a numeric window ID\n");
- return 0;
- }
- }
- else {
- fprintf(stderr,"Must specify a window ID for -w\n");
- return 0;
- }
- }
- else {
- if ( i<argc-1 ) {
- fprintf(stderr,"Bell name must be the last argument\n");
- return 0;
- }
- bellName= argv[i];
- }
+ for (i = 1; i < argc; i++) {
+ if (strcmp(argv[i], "-display") == 0) {
+ if (++i < argc)
+ dpyName = argv[i];
+ else {
+ fprintf(stderr,
+ "Must specify a display with -display option\n");
+ return 0;
+ }
+ }
+ else if ((strcmp(argv[i], "-help") == 0) ||
+ (strcmp(argv[i], "-usage") == 0)) {
+ return 0;
+ }
+ else if (strcmp(argv[i], "-version") == 0) {
+ printf("xkbbell (%s) %s\n", PACKAGE_NAME, PACKAGE_VERSION);
+ exit(0);
+ }
+ else if (strcmp(argv[i], "-synch") == 0) {
+ synch = 1;
+ }
+ else if (strcmp(argv[i], "-force") == 0) {
+ force = 1;
+ }
+ else if (strcmp(argv[i], "-nobeep") == 0) {
+ nobeep = 1;
+ }
+ else if (strcmp(argv[i], "-dev") == 0) {
+ if (++i < argc) {
+ if (sscanf(argv[i], " %i ", &devSpec) != 1) {
+ fprintf(stderr, "Device ID must be an integer\n");
+ return 0;
+ }
+ }
+ else {
+ fprintf(stderr, "Must specify a device ID with -dev option\n");
+ return 0;
+ }
+ }
+ else if (strcmp(argv[i], "-kf") == 0) {
+ if (++i < argc) {
+ if (sscanf(argv[i], " %i ", &id) != 1) {
+ fprintf(stderr,
+ "Keyboard feedback ID must be an integer\n");
+ return 0;
+ }
+ class = KbdFeedbackClass;
+ }
+ else {
+ fprintf(stderr,
+ "Must specify a keyboard feedback ID for -kf\n");
+ return 0;
+ }
+ }
+ else if (strcmp(argv[i], "-bf") == 0) {
+ if (++i < argc) {
+ if (sscanf(argv[i], " %i ", &id) != 1) {
+ fprintf(stderr, "Bell feedback ID must be an integer\n");
+ return 0;
+ }
+ class = BellFeedbackClass;
+ }
+ else {
+ fprintf(stderr, "Must specify a bell feedback ID for -bf\n");
+ return 0;
+ }
+ }
+ else if (strcmp(argv[i], "-v") == 0) {
+ if (++i < argc) {
+ if ((sscanf(argv[i], " %i ", &volume) != 1) ||
+ (volume < -100) || (volume > 100)) {
+ fprintf(stderr, "Volume must be in the range -100..100\n");
+ return 0;
+ }
+ }
+ else {
+ fprintf(stderr, "Must specify volume for -v\n");
+ return 0;
+ }
+ }
+ else if (strcmp(argv[i], "-w") == 0) {
+ if (++i < argc) {
+ if (sscanf(argv[i], " %i ", &win) != 1) {
+ fprintf(stderr, "Must specify a numeric window ID\n");
+ return 0;
+ }
+ }
+ else {
+ fprintf(stderr, "Must specify a window ID for -w\n");
+ return 0;
+ }
+ }
+ else {
+ if (i < argc - 1) {
+ fprintf(stderr, "Bell name must be the last argument\n");
+ return 0;
+ }
+ bellName = argv[i];
+ }
}
return 1;
}
@@ -148,74 +160,89 @@ int i;
int
main(int argc, char *argv[])
{
-Display *dpy;
-int i1,i2,i3,i4,i5;
+ Display *dpy;
+
+ int i1, i2, i3, i4, i5;
-
- if (!parseArgs(argc,argv)) {
- fprintf(stderr,"Usage: %s [ <options> ] <name>\n",argv[0]);
- fprintf(stderr,"Where legal options are:\n");
- fprintf(stderr,"-help print this message\n");
- fprintf(stderr,"-usage print this message\n");
- fprintf(stderr,"-display <dpy> specifies display to use\n");
- fprintf(stderr,"-synch turn on synchronization\n");
- fprintf(stderr,"-dev <id> specifies device to use\n");
- fprintf(stderr,"-force force audible bell\n");
- fprintf(stderr,"-nobeep suppress server bell, event only\n");
- fprintf(stderr,"-bf <id> specifies bell feedback to use\n");
- fprintf(stderr,"-kf <id> specifies keyboard feedback to use\n");
- fprintf(stderr,"-v <volume> specifies volume to use\n");
- fprintf(stderr,"-w <id> specifies window to use\n");
- fprintf(stderr,"If neither device nor feedback are specified, %s uses the\n",argv[0]);
- fprintf(stderr,"default values for the core keyboard device.\n");
- return 1;
+ if (!parseArgs(argc, argv)) {
+ fprintf(stderr, "Usage: %s [ <options> ] <name>\n", argv[0]);
+ fprintf(stderr, "Where legal options are:\n"
+ "-help print this message\n"
+ "-usage print this message\n"
+ "-version print the program version\n"
+ "-display <dpy> specifies display to use\n"
+ "-synch turn on synchronization\n"
+ "-dev <id> specifies device to use\n"
+ "-force force audible bell\n"
+ "-nobeep suppress server bell, event only\n"
+ "-bf <id> specifies bell feedback to use\n"
+ "-kf <id> specifies keyboard feedback to use\n"
+ "-v <volume> specifies volume to use\n"
+ "-w <id> specifies window to use\n");
+ fprintf(stderr,
+ "If neither device nor feedback are specified, %s uses the\n"
+ "default values for the core keyboard device.\n",
+ argv[0]);
+ return 1;
}
dpy = XOpenDisplay(dpyName);
- if ( !dpy ) {
- fprintf(stderr,"Couldn't open display \"%s\"\n",XDisplayName(dpyName));
- return 1;
+ if (!dpy) {
+ fprintf(stderr, "Couldn't open display \"%s\"\n",
+ XDisplayName(dpyName));
+ return 1;
}
if (synch)
- XSynchronize(dpy,1);
- i1= XkbMajorVersion;
- i2= XkbMinorVersion;
- if ( !XkbLibraryVersion(&i1,&i2) ) {
- fprintf(stderr,"Warning! X library built with XKB version %d.%02d\n",
- i1,i2);
- fprintf(stderr," but %s was built with %d.%02d\n",argv[0],
- XkbMajorVersion,XkbMinorVersion);
- fprintf(stderr," Trying anyway\n");
+ XSynchronize(dpy, 1);
+ i1 = XkbMajorVersion;
+ i2 = XkbMinorVersion;
+ if (!XkbLibraryVersion(&i1, &i2)) {
+ fprintf(stderr, "Warning! X library built with XKB version %d.%02d\n",
+ i1, i2);
+ fprintf(stderr, " but %s was built with %d.%02d\n", argv[0],
+ XkbMajorVersion, XkbMinorVersion);
+ fprintf(stderr, " Trying anyway\n");
}
- if ( !XkbQueryExtension(dpy,&i1,&i2,&i3,&i4,&i5)>0 ) {
- if ((i4!=0)||(i5!=0))
- fprintf(stderr,"server supports incompatible XKB version %d.%02d\n",
- i4,i5);
- else fprintf(stderr,"XkbQueryExtension failed\n");
- fprintf(stderr,"Trying anyway\n");
+ if (!XkbQueryExtension(dpy, &i1, &i2, &i3, &i4, &i5) > 0) {
+ if ((i4 != 0) || (i5 != 0))
+ fprintf(stderr,
+ "server supports incompatible XKB version %d.%02d\n", i4,
+ i5);
+ else
+ fprintf(stderr, "XkbQueryExtension failed\n");
+ fprintf(stderr, "Trying anyway\n");
}
- if (force && (nameAtom!=None))
- fprintf(stderr,"Warning! Name ignored for forced bell requests\n");
- if (bellName!=NULL)
- nameAtom = XInternAtom(dpy,bellName,0);
- if ((devSpec==XkbUseCoreKbd)&&(class<0)) {
- Bool ok;
- if (force) ok= XkbForceBell(dpy,volume);
- else if (nobeep) ok= XkbBellEvent(dpy,win,volume,nameAtom);
- else ok= XkbBell(dpy,win,volume,nameAtom);
- if (!ok)
- fprintf(stderr,"XkbBell request failed\n");
+ if (force && (nameAtom != None))
+ fprintf(stderr, "Warning! Name ignored for forced bell requests\n");
+ if (bellName != NULL)
+ nameAtom = XInternAtom(dpy, bellName, 0);
+ if ((devSpec == XkbUseCoreKbd) && (class < 0)) {
+ Bool ok;
+
+ if (force)
+ ok = XkbForceBell(dpy, volume);
+ else if (nobeep)
+ ok = XkbBellEvent(dpy, win, volume, nameAtom);
+ else
+ ok = XkbBell(dpy, win, volume, nameAtom);
+ if (!ok)
+ fprintf(stderr, "XkbBell request failed\n");
}
else {
- Bool ok;
- if (class<0) class= KbdFeedbackClass;
- if (id<0) id= 0;
- if (force)
- ok= XkbForceDeviceBell(dpy,devSpec,class,id,volume);
- else if (nobeep)
- ok= XkbDeviceBellEvent(dpy,win,devSpec,class,id,volume,nameAtom);
- else ok= XkbDeviceBell(dpy,win,devSpec,class,id,volume,nameAtom);
- if (!ok)
- fprintf(stderr,"XkbDeviceBell request failed\n");
+ Bool ok;
+
+ if (class < 0)
+ class = KbdFeedbackClass;
+ if (id < 0)
+ id = 0;
+ if (force)
+ ok = XkbForceDeviceBell(dpy, devSpec, class, id, volume);
+ else if (nobeep)
+ ok = XkbDeviceBellEvent(dpy, win, devSpec, class, id, volume,
+ nameAtom);
+ else
+ ok = XkbDeviceBell(dpy, win, devSpec, class, id, volume, nameAtom);
+ if (!ok)
+ fprintf(stderr, "XkbDeviceBell request failed\n");
}
/* BAIL: */
XCloseDisplay(dpy);