$NetBSD: patch-ac,v 1.1.1.1 2001/02/10 14:18:35 hubertf Exp $ --- cmp3volume.c.orig Fri Feb 9 15:54:18 2001 +++ cmp3volume.c Fri Feb 9 23:45:24 2001 @@ -3,7 +3,11 @@ */ #include "cmp3funcs.h" -#include +#if defined(__NetBSD__) +#include +#else +#include +#endif static int mixernum, /* ID number for the mixer */ vol; /* Current volume level */ @@ -12,6 +16,63 @@ * Initialize volume control * Returns: nothing ****************************************************************************/ +#if defined(__NetBSD__) + +int device_id; +mixer_ctrl_t *m, *values; + +extern void initvol() +{ + int i, ndev; + char *mixer_device; + mixer_devinfo_t dinfo, *infos; + + mixer_device = getenv("MIXERDEVICE"); + if (mixer_device == NULL) + mixer_device = "/dev/mixer0"; + + if ((mixernum=open(mixer_device, O_RDWR)) < 0) { + fprintf(stderr, "open mixer device: %s", strerror(errno)); + enditall(SIGSEGV); + } + + for (ndev = 0; ; ndev++) { + dinfo.index = ndev; + if (ioctl(mixernum, AUDIO_MIXER_DEVINFO, &dinfo) < 0) + break; + } + infos = calloc(ndev, sizeof *infos); + values = calloc(ndev, sizeof *values); + + for (i = 0; i < ndev; i++) { + infos[i].index = i; + ioctl(mixernum, AUDIO_MIXER_DEVINFO, &infos[i]); + } + + for (i = 0; i < ndev; i++) { + if (infos[i].type == AUDIO_MIXER_VALUE) { + values[i].dev = i; + values[i].type = infos[i].type; + } + if (strcmp(infos[i].label.name, AudioNdac) == 0) { + device_id = i; + break; + } + } + + values[device_id].un.value.num_channels = 2; + + m = &values[device_id]; + ioctl(mixernum, AUDIO_MIXER_READ, m); + vol = m->un.value.level[0] * 100 / AUDIO_MAX_GAIN; + mvprintw(3,COLS/2-1,"-"); + mvprintw(LINES-7,COLS/2-1,"-"); + mvprintw((LINES-8)-(vol*(LINES-12)/100),COLS/2-1,"*"); + return; +} + +#else + extern void initvol() { if ((mixernum=open("/dev/mixer", O_RDWR)) < 0) { @@ -26,6 +87,8 @@ return; } +#endif + extern void endvol() { close(mixernum); @@ -57,6 +120,23 @@ * Although I hate users in general, we should probably do it. * Returns: nothing ****************************************************************************/ +#if defined(__NetBSD__) + +extern void volup() +{ + mvprintw((LINES-8)-(vol*(LINES-12)/100),COLS/2-1," "); + vol += 3; + if (vol > 100) + vol = 100; + m = &values[device_id]; + ioctl(mixernum, AUDIO_MIXER_WRITE, m); + m->un.value.level[0] = m->un.value.level[1] = vol * AUDIO_MAX_GAIN / 100; + mvprintw((LINES-8)-(vol*(LINES-12)/100), COLS/2-1, "*"); + return; +} + +#else + extern void volup() { int i; @@ -71,10 +151,29 @@ return; } +#endif + /**************************************************************************** * It's too loud junior, turn it down! * Returns: nothing ****************************************************************************/ +#if defined(__NetBSD__) + +extern void voldown() +{ + mvprintw((LINES-8)-(vol*(LINES-12)/100),COLS/2-1," "); + vol -= 3; + if (vol < 0) + vol = 0; + m = &values[device_id]; + ioctl(mixernum, AUDIO_MIXER_WRITE, m); + m->un.value.level[0] = m->un.value.level[1] = vol * AUDIO_MAX_GAIN / 100; + mvprintw((LINES-8)-(vol*(LINES-12)/100), COLS/2-1, "*"); + return; +} + +#else + extern void voldown() { int i; @@ -89,4 +188,6 @@ return; } +#endif + /* EOF */ \ No newline at end of file