diff options
Diffstat (limited to 'xkbbell.c')
-rw-r--r-- | xkbbell.c | 353 |
1 files changed, 190 insertions, 163 deletions
@@ -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); |