244
static void timedQueryCB(XtPointer, XtIntervalId *);
247
queryCB(w, gp, call_data)
247
queryCB(Widget w, XtPointer gp, XtPointer call_data)
252
249
GlobalDataPtr g = (GlobalDataPtr) gp;
252
XtRemoveTimeOut(g->queryTimerID);
254
254
AuFreeDeviceAttributes(g->aud, g->numDevices, g->da);
255
255
g->da = AuListDevices(g->aud, 0, NULL, &g->numDevices, NULL);
260
inputModeCB(w, gp, call_data)
259
g->queryTimerID = XtAppAddTimeOut(XtWidgetToApplicationContext(g->top),
260
g->queryInterval, timedQueryCB, gp);
264
timedQueryCB(XtPointer gp, XtIntervalId *queryIntervalID)
266
GlobalDataPtr g = (GlobalDataPtr) gp;
268
queryCB(g->top, gp, NULL);
272
inputModeCB(Widget w, XtPointer gp, XtPointer call_data)
265
274
GlobalDataPtr g = (GlobalDataPtr) gp;
266
275
AuDeviceAttributes *da = &g->da[g->deviceNum];
305
311
queryCB(w, g, call_data);
314
static void set_device_by_name(GlobalDataPtr g, const char *name);
309
menuCB(w, gp, call_data)
317
menuCB(Widget w, XtPointer gp, XtPointer call_data)
314
319
GlobalDataPtr g = (GlobalDataPtr) gp;
318
322
XtVaGetValues(w, XtNlabel, &string, NULL);
319
323
XtVaSetValues(g->device, XtNlabel, string, NULL);
321
for (i = 0; i < g->numDevices; i++)
322
if (!strcmp(string, AuDeviceDescription(&g->da[i])->data))
324
set_device_by_name(g, string);
326
325
queryCB(w, g, call_data);
331
setGain(w, gp, valuep)
330
setGain(Widget w, XtPointer gp, XtPointer valuep)
336
332
GlobalDataPtr g = (GlobalDataPtr) gp;
337
333
AuDeviceAttributes *da = &g->da[g->deviceNum];
452
443
XtVaSetValues(g->device, XtNresizable, False, NULL);
446
static AuInt32 parse_hex(const char *s)
450
sscanf (s, "%lx", &val);
454
static AuBool is_decimal_number(const char *s)
462
if ((s[i] < '0') || (s[i] > '9'))
468
static AuDeviceID parse_device_id(const char *s)
470
if ((s[0] == '0') && ((s[1] == 'x') || (s[1] == 'X')))
475
static void set_device_by_id(GlobalDataPtr g, AuDeviceID id)
478
AuDeviceAttributes *d;
480
for (i=0; i<g->numDevices; i++) {
481
d = AuServerDevice(g->aud, i);
482
if ((AuDeviceValueMask(d) & AuCompCommonIDMask) &&
483
id == d->common.id) {
490
static void set_device_by_name(GlobalDataPtr g, const char *name)
494
for (i = 0; i < g->numDevices; i++)
495
if (!strcmp(name, AuDeviceDescription(&g->da[i])->data)) {
502
main(int argc, char **argv)
460
504
GlobalDataRec globals;
461
505
GlobalDataPtr g = &globals;
462
506
XtAppContext appContext;
463
507
char *audioServer = NULL;
509
AuDeviceID initialDevice = AuNone;
510
char *initialDeviceName = NULL;
465
512
g->top = XtVaAppInitialize(&appContext, APP_CLASS, NULL, ZERO,
466
513
&argc, argv, defaultResources, NULL, 0);
469
if (!strncmp(argv[1], "-a", 2))
470
audioServer = argv[2];
515
g->queryInterval = DEFAULT_QUERY_INTERVAL;
517
for (i = 1; i < argc; i++) {
518
if (!strncmp(argv[i], "-a", 2)) {
519
audioServer = argv[++i];
520
} else if (!strncmp(argv[i], "-dev", 4)) {
521
initialDeviceName = argv[++i];
522
initialDevice = parse_device_id(initialDeviceName);
523
} else if (!strncmp(argv[i], "-in", 3)) {
524
int tmp = atoi(argv[++i]);
526
g->queryInterval = tmp * 1000;
529
fatalError(USAGE, NULL);
476
533
if (!(g->aud = AuOpenServer(audioServer, 0, NULL, 0, NULL, NULL)))
477
fatalError("Can't connect to audio server");
534
fatalError("Can't connect to audio server", NULL);
479
536
if(!(g->restoreValues = calloc(AuServerNumDevices(g->aud), sizeof(int))))
480
fatalError("Out of memory");
537
fatalError("Out of memory", NULL);
482
539
createWidgets(g);
483
540
XtRealizeWidget(g->top);
486
543
AuXtAppAddAudioHandler(appContext, g->aud);
488
545
g->deviceNum = 0;
547
if (initialDevice != AuNone) {
548
set_device_by_id(g, initialDevice);
549
} else if (initialDeviceName) {
550
if (is_decimal_number(initialDeviceName)) {
551
g->deviceNum = atoi(initialDeviceName);
552
if (g->deviceNum >= g->numDevices) {
553
fprintf(stderr, "cannot activate device %d, there are only %d"
554
" devices (0 to %d)\n",
555
g->deviceNum, g->numDevices, g->numDevices - 1);
559
set_device_by_name(g, initialDeviceName);
565
g->queryTimerID = XtAppAddTimeOut(appContext, g->queryInterval,
491
568
XtAppMainLoop(appContext);
493
570
free(g->restoreValues);