[Midnightbsd-cvs] src [10463] trunk/usr.sbin/mixer/mixer.c: update the mixer
laffer1 at midnightbsd.org
laffer1 at midnightbsd.org
Wed Jun 6 19:58:35 EDT 2018
Revision: 10463
http://svnweb.midnightbsd.org/src/?rev=10463
Author: laffer1
Date: 2018-06-06 19:58:34 -0400 (Wed, 06 Jun 2018)
Log Message:
-----------
update the mixer
Modified Paths:
--------------
trunk/usr.sbin/mixer/Makefile
trunk/usr.sbin/mixer/mixer.8
trunk/usr.sbin/mixer/mixer.c
Property Changed:
----------------
trunk/usr.sbin/mixer/mixer.8
Modified: trunk/usr.sbin/mixer/Makefile
===================================================================
--- trunk/usr.sbin/mixer/Makefile 2018-06-06 23:57:19 UTC (rev 10462)
+++ trunk/usr.sbin/mixer/Makefile 2018-06-06 23:58:34 UTC (rev 10463)
@@ -1,8 +1,7 @@
-# $FreeBSD: src/usr.sbin/mixer/Makefile,v 1.10 2001/07/20 06:20:00 obrien Exp $
+# $MidnightBSD$
+# $FreeBSD: stable/10/usr.sbin/mixer/Makefile 201390 2010-01-02 11:07:44Z ed $
PROG= mixer
MAN= mixer.8
-WARNS?= 2
-
.include <bsd.prog.mk>
Modified: trunk/usr.sbin/mixer/mixer.8
===================================================================
--- trunk/usr.sbin/mixer/mixer.8 2018-06-06 23:57:19 UTC (rev 10462)
+++ trunk/usr.sbin/mixer/mixer.8 2018-06-06 23:58:34 UTC (rev 10463)
@@ -1,5 +1,6 @@
+.\" $MidnightBSD$
.\" Copyright (c) 1997
-.\" Mike Pritchard <mpp at FreeBSD.ORG>. All rights reserved.
+.\" Mike Pritchard <mpp at FreeBSD.org>. All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
@@ -25,9 +26,9 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD: src/usr.sbin/mixer/mixer.8,v 1.25 2007/05/09 05:33:54 maxim Exp $
+.\" $FreeBSD: stable/10/usr.sbin/mixer/mixer.8 213573 2010-10-08 12:40:16Z uqs $
.\"
-.Dd April 13, 2005
+.Dd March 14, 2008
.Dt MIXER 8
.Os
.Sh NAME
@@ -71,10 +72,10 @@
also be used to start and stop recording from the soundcard.
The list
of mixer devices that may be modified are:
-.Pp
.Bd -ragged -offset indent
vol, bass, treble, synth, pcm, speaker, line, mic, cd, mix,
-pcm2, rec, igain, ogain, line1, line2, and line3.
+pcm2, rec, igain, ogain, line1, line2, line3, dig1, dig2, dig3,
+phin, phout, video, radio, and monitor.
.Ed
.Pp
Not all mixer devices are available.
Property changes on: trunk/usr.sbin/mixer/mixer.8
___________________________________________________________________
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Modified: trunk/usr.sbin/mixer/mixer.c
===================================================================
--- trunk/usr.sbin/mixer/mixer.c 2018-06-06 23:57:19 UTC (rev 10462)
+++ trunk/usr.sbin/mixer/mixer.c 2018-06-06 23:58:34 UTC (rev 10463)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
/*
* This is an example of a mixer program for Linux
*
@@ -12,10 +13,12 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/usr.sbin/mixer/mixer.c,v 1.23 2006/01/01 20:19:49 ariff Exp $");
+__FBSDID("$FreeBSD: stable/10/usr.sbin/mixer/mixer.c 317796 2017-05-04 14:55:07Z pfg $");
#include <err.h>
#include <fcntl.h>
+#include <libgen.h>
+#include <limits.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
@@ -22,73 +25,77 @@
#include <unistd.h>
#include <sys/soundcard.h>
-const char *names[SOUND_MIXER_NRDEVICES] = SOUND_DEVICE_NAMES;
+static const char *names[SOUND_MIXER_NRDEVICES] = SOUND_DEVICE_NAMES;
-void usage(int devmask, int recmask);
-int res_name(const char *name, int mask);
-void print_recsrc(int recsrc, int shortflag);
+static void usage(int devmask, int recmask);
+static int res_name(const char *name, int mask);
+static void print_recsrc(int recsrc, int recmask, int sflag);
-void
+static void
usage(int devmask, int recmask)
{
- int i, n;
+ int i, n;
printf("usage: mixer [-f device] [-s | -S] [dev [+|-][voll[:[+|-]volr]] ...\n"
- " mixer [-f device] [-s | -S] recsrc ...\n"
- " mixer [-f device] [-s | -S] {^|+|-|=}rec rdev ... \n");
- printf(" devices: ");
- for (i = 0, n = 0; i < SOUND_MIXER_NRDEVICES; i++)
- if ((1 << i) & devmask) {
- if (n)
- printf(", ");
- printf("%s", names[i]);
- n = 1;
- }
- printf("\n rec devices: ");
- for (i = 0, n = 0; i < SOUND_MIXER_NRDEVICES; i++)
- if ((1 << i) & recmask) {
- if (n)
- printf(", ");
- printf("%s", names[i]);
- n = 1;
- }
+ " mixer [-f device] [-s | -S] recsrc ...\n"
+ " mixer [-f device] [-s | -S] {^|+|-|=}rec rdev ...\n");
+ if (devmask != 0) {
+ printf(" devices: ");
+ for (i = 0, n = 0; i < SOUND_MIXER_NRDEVICES; i++)
+ if ((1 << i) & devmask) {
+ if (n)
+ printf(", ");
+ printf("%s", names[i]);
+ n++;
+ }
+ }
+ if (recmask != 0) {
+ printf("\n rec devices: ");
+ for (i = 0, n = 0; i < SOUND_MIXER_NRDEVICES; i++)
+ if ((1 << i) & recmask) {
+ if (n)
+ printf(", ");
+ printf("%s", names[i]);
+ n++;
+ }
+ }
printf("\n");
exit(1);
}
-int
+static int
res_name(const char *name, int mask)
{
- int foo;
+ int foo;
for (foo = 0; foo < SOUND_MIXER_NRDEVICES; foo++)
- if ((1 << foo) & mask && !strcmp(names[foo], name))
+ if ((1 << foo) & mask && strcmp(names[foo], name) == 0)
break;
- return foo == SOUND_MIXER_NRDEVICES ? -1 : foo;
+ return (foo == SOUND_MIXER_NRDEVICES ? -1 : foo);
}
-void
-print_recsrc(int recsrc, int shortflag)
+static void
+print_recsrc(int recsrc, int recmask, int sflag)
{
- int i, n = 0;
+ int i, n;
- if (!shortflag)
+ if (recmask == 0)
+ return;
+
+ if (!sflag)
printf("Recording source: ");
- for (i = 0; i < SOUND_MIXER_NRDEVICES; i++)
+ for (i = 0, n = 0; i < SOUND_MIXER_NRDEVICES; i++)
if ((1 << i) & recsrc) {
- if (shortflag) {
- if (n)
- printf(" +rec ");
- else
- printf("=rec ");
- } else if (n)
+ if (sflag)
+ printf("%srec ", n ? " +" : "=");
+ else if (n)
printf(", ");
printf("%s", names[i]);
- n = 1;
+ n++;
}
- if (!shortflag)
+ if (!sflag)
printf("\n");
}
@@ -95,40 +102,54 @@
int
main(int argc, char *argv[])
{
- int foo, bar, baz, dev;
- int devmask = 0, recmask = 0, recsrc = 0, orecsrc;
- int dusage = 0, drecsrc = 0, shortflag = 0, Shortflag = 0;
- int l = 0, r = 0, t = 0;
- char lstr[5], rstr[5];
- int n = 0, lrel = 0, rrel = 0;
- int ch;
+ char mixer[PATH_MAX] = "/dev/mixer";
+ char lstr[8], rstr[8];
+ char *name, *eptr;
+ int devmask = 0, recmask = 0, recsrc = 0, orecsrc;
+ int dusage = 0, drecsrc = 0, sflag = 0, Sflag = 0;
+ int l, r, lrel, rrel;
+ int ch, foo, bar, baz, dev, m, n, t;
- char *name;
+ if ((name = strdup(basename(argv[0]))) == NULL)
+ err(1, "strdup()");
+ if (strncmp(name, "mixer", 5) == 0 && name[5] != '\0') {
+ n = strtol(name + 5, &eptr, 10) - 1;
+ if (n > 0 && *eptr == '\0')
+ snprintf(mixer, PATH_MAX - 1, "/dev/mixer%d", n);
+ }
+ free(name);
+ name = mixer;
- name = "/dev/mixer";
-
- if (!strcmp(argv[0], "mixer2"))
- name = "/dev/mixer1";
- else if (!strcmp(argv[0], "mixer3"))
- name = "/dev/mixer2";
-
- while ((ch = getopt(argc, argv, "f:sS")) != -1)
- switch (ch) {
- case 'f':
- name = optarg;
- break;
- case 's':
- shortflag = 1;
- break;
- case 'S':
- Shortflag = 1;
- break;
- default:
+ n = 1;
+ for (;;) {
+ if (n >= argc || *argv[n] != '-')
+ break;
+ if (strlen(argv[n]) != 2) {
+ if (strcmp(argv[n] + 1, "rec") != 0)
dusage = 1;
+ break;
}
- argc -= (optind - 1);
- argv += (optind - 1);
+ ch = *(argv[n] + 1);
+ if (ch == 'f' && n < argc - 1) {
+ name = argv[n + 1];
+ n += 2;
+ } else if (ch == 's') {
+ sflag = 1;
+ n++;
+ } else if (ch == 'S') {
+ Sflag = 1;
+ n++;
+ } else {
+ dusage = 1;
+ break;
+ }
+ }
+ if (sflag && Sflag)
+ dusage = 1;
+ argc -= n - 1;
+ argv += n - 1;
+
if ((baz = open(name, O_RDWR)) < 0)
err(1, "%s", name);
if (ioctl(baz, SOUND_MIXER_READ_DEVMASK, &devmask) == -1)
@@ -139,38 +160,41 @@
err(1, "SOUND_MIXER_READ_RECSRC");
orecsrc = recsrc;
- if ((argc == 1) && (dusage == 0)) {
- for (foo = 0; foo < SOUND_MIXER_NRDEVICES; foo++) {
- if (!((1 << foo) & devmask))
+ if (argc == 1 && dusage == 0) {
+ for (foo = 0, n = 0; foo < SOUND_MIXER_NRDEVICES; foo++) {
+ if (!((1 << foo) & devmask))
continue;
- if (ioctl(baz, MIXER_READ(foo),&bar)== -1) {
+ if (ioctl(baz, MIXER_READ(foo),&bar) == -1) {
warn("MIXER_READ");
continue;
}
- if (Shortflag)
- printf("%s:%d:%d ", names[foo], bar & 0x7f,
- (bar >> 8) & 0x7f);
- else if (shortflag)
- printf("%s %d:%d ", names[foo], bar & 0x7f,
- (bar >> 8) & 0x7f);
- else
- printf("Mixer %-8s is currently set to %3d:%d\n",
- names[foo], bar & 0x7f, (bar >> 8) & 0x7f);
+ if (Sflag || sflag) {
+ printf("%s%s%c%d:%d", n ? " " : "",
+ names[foo], Sflag ? ':' : ' ',
+ bar & 0x7f, (bar >> 8) & 0x7f);
+ n++;
+ } else
+ printf("Mixer %-8s is currently set to "
+ "%3d:%d\n", names[foo], bar & 0x7f,
+ (bar >> 8) & 0x7f);
}
- if (ioctl(baz, SOUND_MIXER_READ_RECSRC, &recsrc) == -1)
- err(1, "SOUND_MIXER_READ_RECSRC");
- print_recsrc(recsrc, shortflag || Shortflag);
- return(0);
+ if (n && recmask)
+ printf(" ");
+ print_recsrc(recsrc, recmask, Sflag || sflag);
+ return (0);
}
- argc--; argv++;
+ argc--;
+ argv++;
- while ((argc > 0) && (dusage == 0)) {
- if (!strcmp("recsrc", *argv)) {
+ n = 0;
+ while (argc > 0 && dusage == 0) {
+ if (strcmp("recsrc", *argv) == 0) {
drecsrc = 1;
- argc--; argv++;
+ argc--;
+ argv++;
continue;
- } else if (argc > 1 && !strcmp("rec", *argv + 1)) {
+ } else if (strcmp("rec", *argv + 1) == 0) {
if (**argv != '+' && **argv != '-' &&
**argv != '=' && **argv != '^') {
warnx("unknown modifier: %c", **argv);
@@ -177,12 +201,17 @@
dusage = 1;
break;
}
+ if (argc <= 1) {
+ warnx("no recording device specified");
+ dusage = 1;
+ break;
+ }
if ((dev = res_name(argv[1], recmask)) == -1) {
warnx("unknown recording device: %s", argv[1]);
dusage = 1;
break;
}
- switch(**argv) {
+ switch (**argv) {
case '+':
recsrc |= (1 << dev);
break;
@@ -197,61 +226,63 @@
break;
}
drecsrc = 1;
- argc -= 2; argv += 2;
+ argc -= 2;
+ argv += 2;
continue;
}
- if ((t = sscanf(*argv, "%d:%d", &l, &r)) > 0) {
+ if ((t = sscanf(*argv, "%d:%d", &l, &r)) > 0)
dev = 0;
- }
- else if((dev = res_name(*argv, devmask)) == -1) {
+ else if ((dev = res_name(*argv, devmask)) == -1) {
warnx("unknown device: %s", *argv);
dusage = 1;
break;
}
-#define issign(c) (((c) == '+') || ((c) == '-'))
-
+ lrel = rrel = 0;
if (argc > 1) {
- n = sscanf(argv[1], "%7[^:]:%7s", lstr, rstr);
- if (n > 0) {
- if (issign(lstr[0]))
+ m = sscanf(argv[1], "%7[^:]:%7s", lstr, rstr);
+ if (m > 0) {
+ if (*lstr == '+' || *lstr == '-')
lrel = rrel = 1;
- l = atoi(lstr);
+ l = strtol(lstr, NULL, 10);
}
- if (n > 1) {
- rrel = 0;
- if (issign(rstr[0]))
+ if (m > 1) {
+ if (*rstr == '+' || *rstr == '-')
rrel = 1;
- r = atoi(rstr);
+ r = strtol(rstr, NULL, 10);
}
}
- switch(argc > 1 ? n : t) {
+ switch (argc > 1 ? m : t) {
case 0:
- if (ioctl(baz, MIXER_READ(dev),&bar)== -1) {
+ if (ioctl(baz, MIXER_READ(dev), &bar) == -1) {
warn("MIXER_READ");
- argc--; argv++;
+ argc--;
+ argv++;
continue;
}
- if (Shortflag)
- printf("%s:%d:%d ", names[dev], bar & 0x7f,
- (bar >> 8) & 0x7f);
- else if (shortflag)
- printf("%s %d:%d ", names[dev], bar & 0x7f,
- (bar >> 8) & 0x7f);
- else
- printf("Mixer %-8s is currently set to %3d:%d\n",
- names[dev], bar & 0x7f, (bar >> 8) & 0x7f);
+ if (Sflag || sflag) {
+ printf("%s%s%c%d:%d", n ? " " : "",
+ names[dev], Sflag ? ':' : ' ',
+ bar & 0x7f, (bar >> 8) & 0x7f);
+ n++;
+ } else
+ printf("Mixer %-8s is currently set to "
+ "%3d:%d\n", names[dev], bar & 0x7f,
+ (bar >> 8) & 0x7f);
- argc--; argv++;
+ argc--;
+ argv++;
break;
case 1:
r = l;
+ /* FALLTHROUGH */
case 2:
- if (ioctl(baz, MIXER_READ(dev),&bar)== -1) {
+ if (ioctl(baz, MIXER_READ(dev), &bar) == -1) {
warn("MIXER_READ");
- argc--; argv++;
+ argc--;
+ argv++;
continue;
}
@@ -269,15 +300,17 @@
else if (r > 100)
r = 100;
- if (!Shortflag)
- printf("Setting the mixer %s from %d:%d to %d:%d.\n",
- names[dev], bar & 0x7f, (bar >> 8) & 0x7f, l, r);
+ if (!Sflag)
+ printf("Setting the mixer %s from %d:%d to "
+ "%d:%d.\n", names[dev], bar & 0x7f,
+ (bar >> 8) & 0x7f, l, r);
l |= r << 8;
if (ioctl(baz, MIXER_WRITE(dev), &l) == -1)
warn("WRITE_MIXER");
- argc -= 2; argv += 2;
+ argc -= 2;
+ argv += 2;
break;
}
}
@@ -285,20 +318,20 @@
if (dusage) {
close(baz);
usage(devmask, recmask);
- /* Not reached */
+ /* NOTREACHED */
}
- if (orecsrc != recsrc)
+ if (orecsrc != recsrc) {
if (ioctl(baz, SOUND_MIXER_WRITE_RECSRC, &recsrc) == -1)
err(1, "SOUND_MIXER_WRITE_RECSRC");
-
- if (drecsrc) {
if (ioctl(baz, SOUND_MIXER_READ_RECSRC, &recsrc) == -1)
err(1, "SOUND_MIXER_READ_RECSRC");
- print_recsrc(recsrc, shortflag || Shortflag);
}
+ if (drecsrc)
+ print_recsrc(recsrc, recmask, Sflag || sflag);
+
close(baz);
- exit(0);
+ return (0);
}
More information about the Midnightbsd-cvs
mailing list