[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