Deleted Added
full compact
mixer.c (153953) mixer.c (177195)
1/*
2 * This is an example of a mixer program for Linux
3 *
4 * updated 1/1/93 to add stereo, level query, broken
5 * devmask kludge - cmetz@thor.tjhsst.edu
6 *
7 * (C) Craig Metz and Hannu Savolainen 1993.
8 *
9 * You may do anything you wish with this program.
10 *
11 * ditto for my modifications (John-Mark Gurney, 1997)
12 */
13
14#include <sys/cdefs.h>
1/*
2 * This is an example of a mixer program for Linux
3 *
4 * updated 1/1/93 to add stereo, level query, broken
5 * devmask kludge - cmetz@thor.tjhsst.edu
6 *
7 * (C) Craig Metz and Hannu Savolainen 1993.
8 *
9 * You may do anything you wish with this program.
10 *
11 * ditto for my modifications (John-Mark Gurney, 1997)
12 */
13
14#include <sys/cdefs.h>
15__FBSDID("$FreeBSD: head/usr.sbin/mixer/mixer.c 153953 2006-01-01 20:19:49Z ariff $");
15__FBSDID("$FreeBSD: head/usr.sbin/mixer/mixer.c 177195 2008-03-15 01:09:47Z jkim $");
16
17#include <err.h>
18#include <fcntl.h>
16
17#include <err.h>
18#include <fcntl.h>
19#include <libgen.h>
20#include <limits.h>
19#include <stdio.h>
20#include <string.h>
21#include <stdlib.h>
22#include <unistd.h>
23#include <sys/soundcard.h>
24
25const char *names[SOUND_MIXER_NRDEVICES] = SOUND_DEVICE_NAMES;
26
27void usage(int devmask, int recmask);
28int res_name(const char *name, int mask);
21#include <stdio.h>
22#include <string.h>
23#include <stdlib.h>
24#include <unistd.h>
25#include <sys/soundcard.h>
26
27const char *names[SOUND_MIXER_NRDEVICES] = SOUND_DEVICE_NAMES;
28
29void usage(int devmask, int recmask);
30int res_name(const char *name, int mask);
29void print_recsrc(int recsrc, int shortflag);
31void print_recsrc(int recsrc, int recmask, int shortflag);
30
31void
32usage(int devmask, int recmask)
33{
34 int i, n;
35
36 printf("usage: mixer [-f device] [-s | -S] [dev [+|-][voll[:[+|-]volr]] ...\n"
37 " mixer [-f device] [-s | -S] recsrc ...\n"
38 " mixer [-f device] [-s | -S] {^|+|-|=}rec rdev ... \n");
32
33void
34usage(int devmask, int recmask)
35{
36 int i, n;
37
38 printf("usage: mixer [-f device] [-s | -S] [dev [+|-][voll[:[+|-]volr]] ...\n"
39 " mixer [-f device] [-s | -S] recsrc ...\n"
40 " mixer [-f device] [-s | -S] {^|+|-|=}rec rdev ... \n");
39 printf(" devices: ");
40 for (i = 0, n = 0; i < SOUND_MIXER_NRDEVICES; i++)
41 if ((1 << i) & devmask) {
42 if (n)
43 printf(", ");
44 printf("%s", names[i]);
45 n = 1;
46 }
47 printf("\n rec devices: ");
48 for (i = 0, n = 0; i < SOUND_MIXER_NRDEVICES; i++)
49 if ((1 << i) & recmask) {
50 if (n)
51 printf(", ");
52 printf("%s", names[i]);
53 n = 1;
54 }
41 if (devmask != 0) {
42 printf(" devices: ");
43 for (i = 0, n = 0; i < SOUND_MIXER_NRDEVICES; i++)
44 if ((1 << i) & devmask) {
45 if (n)
46 printf(", ");
47 printf("%s", names[i]);
48 n = 1;
49 }
50 }
51 if (recmask != 0) {
52 printf("\n rec devices: ");
53 for (i = 0, n = 0; i < SOUND_MIXER_NRDEVICES; i++)
54 if ((1 << i) & recmask) {
55 if (n)
56 printf(", ");
57 printf("%s", names[i]);
58 n = 1;
59 }
60 }
55 printf("\n");
56 exit(1);
57}
58
59int
60res_name(const char *name, int mask)
61{
62 int foo;
63
64 for (foo = 0; foo < SOUND_MIXER_NRDEVICES; foo++)
65 if ((1 << foo) & mask && !strcmp(names[foo], name))
66 break;
67
68 return foo == SOUND_MIXER_NRDEVICES ? -1 : foo;
69}
70
71void
61 printf("\n");
62 exit(1);
63}
64
65int
66res_name(const char *name, int mask)
67{
68 int foo;
69
70 for (foo = 0; foo < SOUND_MIXER_NRDEVICES; foo++)
71 if ((1 << foo) & mask && !strcmp(names[foo], name))
72 break;
73
74 return foo == SOUND_MIXER_NRDEVICES ? -1 : foo;
75}
76
77void
72print_recsrc(int recsrc, int shortflag)
78print_recsrc(int recsrc, int recmask, int shortflag)
73{
74 int i, n = 0;
75
79{
80 int i, n = 0;
81
82 if (recmask == 0)
83 return;
84
76 if (!shortflag)
77 printf("Recording source: ");
78
79 for (i = 0; i < SOUND_MIXER_NRDEVICES; i++)
80 if ((1 << i) & recsrc) {
81 if (shortflag) {
82 if (n)
83 printf(" +rec ");

--- 6 unchanged lines hidden (view full) ---

90 }
91 if (!shortflag)
92 printf("\n");
93}
94
95int
96main(int argc, char *argv[])
97{
85 if (!shortflag)
86 printf("Recording source: ");
87
88 for (i = 0; i < SOUND_MIXER_NRDEVICES; i++)
89 if ((1 << i) & recsrc) {
90 if (shortflag) {
91 if (n)
92 printf(" +rec ");

--- 6 unchanged lines hidden (view full) ---

99 }
100 if (!shortflag)
101 printf("\n");
102}
103
104int
105main(int argc, char *argv[])
106{
107 char mixer[PATH_MAX] = "/dev/mixer";
108 char *name, *eptr;
98 int foo, bar, baz, dev;
99 int devmask = 0, recmask = 0, recsrc = 0, orecsrc;
100 int dusage = 0, drecsrc = 0, shortflag = 0, Shortflag = 0;
101 int l = 0, r = 0, t = 0;
102 char lstr[5], rstr[5];
109 int foo, bar, baz, dev;
110 int devmask = 0, recmask = 0, recsrc = 0, orecsrc;
111 int dusage = 0, drecsrc = 0, shortflag = 0, Shortflag = 0;
112 int l = 0, r = 0, t = 0;
113 char lstr[5], rstr[5];
103 int n = 0, lrel = 0, rrel = 0;
104 int ch;
114 int n, lrel = 0, rrel = 0;
115 char ch;
105
116
106 char *name;
117 if ((name = strdup(basename(argv[0]))) == NULL)
118 err(1, "strdup()");
119 if (strncmp(name, "mixer", 5) == 0 && name[5] != '\0') {
120 n = strtol(name + 5, &eptr, 10) - 1;
121 if (n > 0 && *eptr == '\0')
122 snprintf(mixer, PATH_MAX - 1, "/dev/mixer%d", n);
123 }
124 free(name);
125 name = mixer;
107
126
108 name = "/dev/mixer";
109
110 if (!strcmp(argv[0], "mixer2"))
111 name = "/dev/mixer1";
112 else if (!strcmp(argv[0], "mixer3"))
113 name = "/dev/mixer2";
114
115 while ((ch = getopt(argc, argv, "f:sS")) != -1)
116 switch (ch) {
117 case 'f':
118 name = optarg;
119 break;
120 case 's':
121 shortflag = 1;
122 break;
123 case 'S':
124 Shortflag = 1;
125 break;
126 default:
127 n = 1;
128 for (;;) {
129 if (n >= argc || *argv[n] != '-')
130 break;
131 if (strlen(argv[n]) != 2) {
132 if (strcmp(argv[n] + 1, "rec") != 0)
127 dusage = 1;
133 dusage = 1;
134 break;
128 }
135 }
129 argc -= (optind - 1);
130 argv += (optind - 1);
136 ch = *(argv[n] + 1);
137 if (ch == 'f' && n < argc - 1) {
138 name = argv[n + 1];
139 n += 2;
140 } else if (ch == 's') {
141 shortflag = 1;
142 n++;
143 } else if (ch == 'S') {
144 Shortflag = 1;
145 n++;
146 } else {
147 dusage = 1;
148 break;
149 }
150 }
151 if (shortflag && Shortflag)
152 dusage = 1;
131
153
154 argc -= n - 1;
155 argv += n - 1;
156
132 if ((baz = open(name, O_RDWR)) < 0)
133 err(1, "%s", name);
134 if (ioctl(baz, SOUND_MIXER_READ_DEVMASK, &devmask) == -1)
135 err(1, "SOUND_MIXER_READ_DEVMASK");
136 if (ioctl(baz, SOUND_MIXER_READ_RECMASK, &recmask) == -1)
137 err(1, "SOUND_MIXER_READ_RECMASK");
138 if (ioctl(baz, SOUND_MIXER_READ_RECSRC, &recsrc) == -1)
139 err(1, "SOUND_MIXER_READ_RECSRC");

--- 14 unchanged lines hidden (view full) ---

154 printf("%s %d:%d ", names[foo], bar & 0x7f,
155 (bar >> 8) & 0x7f);
156 else
157 printf("Mixer %-8s is currently set to %3d:%d\n",
158 names[foo], bar & 0x7f, (bar >> 8) & 0x7f);
159 }
160 if (ioctl(baz, SOUND_MIXER_READ_RECSRC, &recsrc) == -1)
161 err(1, "SOUND_MIXER_READ_RECSRC");
157 if ((baz = open(name, O_RDWR)) < 0)
158 err(1, "%s", name);
159 if (ioctl(baz, SOUND_MIXER_READ_DEVMASK, &devmask) == -1)
160 err(1, "SOUND_MIXER_READ_DEVMASK");
161 if (ioctl(baz, SOUND_MIXER_READ_RECMASK, &recmask) == -1)
162 err(1, "SOUND_MIXER_READ_RECMASK");
163 if (ioctl(baz, SOUND_MIXER_READ_RECSRC, &recsrc) == -1)
164 err(1, "SOUND_MIXER_READ_RECSRC");

--- 14 unchanged lines hidden (view full) ---

179 printf("%s %d:%d ", names[foo], bar & 0x7f,
180 (bar >> 8) & 0x7f);
181 else
182 printf("Mixer %-8s is currently set to %3d:%d\n",
183 names[foo], bar & 0x7f, (bar >> 8) & 0x7f);
184 }
185 if (ioctl(baz, SOUND_MIXER_READ_RECSRC, &recsrc) == -1)
186 err(1, "SOUND_MIXER_READ_RECSRC");
162 print_recsrc(recsrc, shortflag || Shortflag);
187 print_recsrc(recsrc, recmask, shortflag || Shortflag);
163 return(0);
164 }
165
166 argc--; argv++;
167
168 while ((argc > 0) && (dusage == 0)) {
169 if (!strcmp("recsrc", *argv)) {
170 drecsrc = 1;

--- 112 unchanged lines hidden (view full) ---

283 }
284
285 if (dusage) {
286 close(baz);
287 usage(devmask, recmask);
288 /* Not reached */
289 }
290
188 return(0);
189 }
190
191 argc--; argv++;
192
193 while ((argc > 0) && (dusage == 0)) {
194 if (!strcmp("recsrc", *argv)) {
195 drecsrc = 1;

--- 112 unchanged lines hidden (view full) ---

308 }
309
310 if (dusage) {
311 close(baz);
312 usage(devmask, recmask);
313 /* Not reached */
314 }
315
291 if (orecsrc != recsrc)
316 if (orecsrc != recsrc) {
292 if (ioctl(baz, SOUND_MIXER_WRITE_RECSRC, &recsrc) == -1)
293 err(1, "SOUND_MIXER_WRITE_RECSRC");
317 if (ioctl(baz, SOUND_MIXER_WRITE_RECSRC, &recsrc) == -1)
318 err(1, "SOUND_MIXER_WRITE_RECSRC");
294
295 if (drecsrc) {
296 if (ioctl(baz, SOUND_MIXER_READ_RECSRC, &recsrc) == -1)
297 err(1, "SOUND_MIXER_READ_RECSRC");
319 if (ioctl(baz, SOUND_MIXER_READ_RECSRC, &recsrc) == -1)
320 err(1, "SOUND_MIXER_READ_RECSRC");
298 print_recsrc(recsrc, shortflag || Shortflag);
299 }
321 }
322
323 if (drecsrc)
324 print_recsrc(recsrc, recmask, shortflag || Shortflag);
300
301 close(baz);
302
303 exit(0);
304}
325
326 close(baz);
327
328 exit(0);
329}