Deleted Added
full compact
mixer.c (60741) mixer.c (64657)
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#ifndef lint
15static const char rcsid[] =
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#ifndef lint
15static const char rcsid[] =
16 "$FreeBSD: head/usr.sbin/mixer/mixer.c 60741 2000-05-20 23:25:08Z jkh $";
16 "$FreeBSD: head/usr.sbin/mixer/mixer.c 64657 2000-08-15 05:42:39Z sobomax $";
17#endif /* not lint */
18
19#include <err.h>
20#include <fcntl.h>
21#include <stdio.h>
22#include <string.h>
23#include <stdlib.h>
24#include <unistd.h>

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

30int res_name(const char *name, int mask);
31void print_recsrc(int recsrc);
32
33void
34usage(int devmask, int recmask)
35{
36 int i, n;
37
17#endif /* not lint */
18
19#include <err.h>
20#include <fcntl.h>
21#include <stdio.h>
22#include <string.h>
23#include <stdlib.h>
24#include <unistd.h>

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

30int res_name(const char *name, int mask);
31void print_recsrc(int recsrc);
32
33void
34usage(int devmask, int recmask)
35{
36 int i, n;
37
38 printf("usage: mixer [-s] [[dev [voll[:volr]] | recsrc | {^|+|-|=}rec recdev] ... ]\n");
38 printf("usage: mixer [-f device] [-s] [[dev [voll[:volr]] | recsrc | {^|+|-|=}rec recdev] ... ]\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(names[i]);
45 n = 1;
46 }

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

86
87int
88main(int argc, char *argv[])
89{
90 int foo, bar, baz, dev;
91 int devmask = 0, recmask = 0, recsrc = 0, orecsrc;
92 int dusage = 0, drecsrc = 0, shortflag = 0;
93 int l, r;
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(names[i]);
45 n = 1;
46 }

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

86
87int
88main(int argc, char *argv[])
89{
90 int foo, bar, baz, dev;
91 int devmask = 0, recmask = 0, recsrc = 0, orecsrc;
92 int dusage = 0, drecsrc = 0, shortflag = 0;
93 int l, r;
94 char ch;
94
95 char *name;
96
97 name = strdup("/dev/mixer");
98
99 if (!strcmp(argv[0], "mixer2"))
100 name = strdup("/dev/mixer1");
101 else if (!strcmp(argv[0], "mixer3"))
102 name = strdup("/dev/mixer2");
103
95
96 char *name;
97
98 name = strdup("/dev/mixer");
99
100 if (!strcmp(argv[0], "mixer2"))
101 name = strdup("/dev/mixer1");
102 else if (!strcmp(argv[0], "mixer3"))
103 name = strdup("/dev/mixer2");
104
104 if (argc > 1 && strcmp(argv[1], "-s") == 0) {
105 shortflag = 1;
106 argc -= 1; argv += 1;
107 }
108 if (argc > 2 && strcmp(argv[1], "-f") == 0) {
109 name = strdup(argv[2]);
110 argc -= 2; argv += 2;
111 }
105 while ((ch = getopt(argc, argv, "f:s")) != -1)
106 switch (ch) {
107 case 'f':
108 name = strdup(optarg);
109 break;
110 case 's':
111 shortflag = 1;
112 break;
113 default:
114 dusage = 1;
115 }
116 argc -= (optind - 1);
117 argv += (optind - 1);
112
113 if ((baz = open(name, O_RDWR)) < 0)
114 err(1, "%s", name);
115 free(name);
116 if (ioctl(baz, SOUND_MIXER_READ_DEVMASK, &devmask) == -1)
117 err(1, "SOUND_MIXER_READ_DEVMASK");
118 if (ioctl(baz, SOUND_MIXER_READ_RECMASK, &recmask) == -1)
119 err(1, "SOUND_MIXER_READ_RECMASK");
120 if (ioctl(baz, SOUND_MIXER_READ_RECSRC, &recsrc) == -1)
121 err(1, "SOUND_MIXER_READ_RECSRC");
122 orecsrc = recsrc;
123
118
119 if ((baz = open(name, O_RDWR)) < 0)
120 err(1, "%s", name);
121 free(name);
122 if (ioctl(baz, SOUND_MIXER_READ_DEVMASK, &devmask) == -1)
123 err(1, "SOUND_MIXER_READ_DEVMASK");
124 if (ioctl(baz, SOUND_MIXER_READ_RECMASK, &recmask) == -1)
125 err(1, "SOUND_MIXER_READ_RECMASK");
126 if (ioctl(baz, SOUND_MIXER_READ_RECSRC, &recsrc) == -1)
127 err(1, "SOUND_MIXER_READ_RECSRC");
128 orecsrc = recsrc;
129
124 if (argc == 1) {
130 if ((argc == 1) && (dusage == 0)) {
125 for (foo = 0; foo < SOUND_MIXER_NRDEVICES; foo++) {
126 if (!((1 << foo) & devmask))
127 continue;
128 if (ioctl(baz, MIXER_READ(foo),&bar)== -1) {
129 warn("MIXER_READ");
130 continue;
131 }
132 if (shortflag)
133 printf("%s %d:%d ", names[foo], bar & 0x7f, (bar >> 8) & 0x7f);
134 else
135 printf("Mixer %-8s is currently set to %3d:%d\n", names[foo], bar & 0x7f, (bar >> 8) & 0x7f);
136 }
137 return(0);
138 }
139
140 argc--; argv++;
141
131 for (foo = 0; foo < SOUND_MIXER_NRDEVICES; foo++) {
132 if (!((1 << foo) & devmask))
133 continue;
134 if (ioctl(baz, MIXER_READ(foo),&bar)== -1) {
135 warn("MIXER_READ");
136 continue;
137 }
138 if (shortflag)
139 printf("%s %d:%d ", names[foo], bar & 0x7f, (bar >> 8) & 0x7f);
140 else
141 printf("Mixer %-8s is currently set to %3d:%d\n", names[foo], bar & 0x7f, (bar >> 8) & 0x7f);
142 }
143 return(0);
144 }
145
146 argc--; argv++;
147
142 while (argc) {
148 while ((argc) && (dusage == 0)) {
143 if (!strcmp("recsrc", *argv)) {
144 drecsrc = 1;
145 argc--; argv++;
146 continue;
147 } else if (argc > 1 && !strcmp("rec", *argv + 1)) {
148 if (**argv != '+' && **argv != '-' &&
149 **argv != '=' && **argv != '^') {
149 if (!strcmp("recsrc", *argv)) {
150 drecsrc = 1;
151 argc--; argv++;
152 continue;
153 } else if (argc > 1 && !strcmp("rec", *argv + 1)) {
154 if (**argv != '+' && **argv != '-' &&
155 **argv != '=' && **argv != '^') {
156 warnx("unknown modifier: %c", **argv);
150 dusage = 1;
157 dusage = 1;
151 argc -= 1; argv += 1;
152 continue;
158 break;
153 }
154 if ((dev = res_name(argv[1], recmask)) == -1) {
159 }
160 if ((dev = res_name(argv[1], recmask)) == -1) {
161 warnx("unknown recording device: %s", argv[1]);
155 dusage = 1;
162 dusage = 1;
156 argc -= 1; argv += 1;
157 continue;
163 break;
158 }
159 switch(**argv) {
160 case '+':
161 recsrc |= (1 << dev);
162 break;
163 case '-':
164 recsrc &= ~(1 << dev);
165 break;

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

171 break;
172 }
173 drecsrc = 1;
174 argc -= 2; argv += 2;
175 continue;
176 }
177
178 if ((dev = res_name(*argv, devmask)) == -1) {
164 }
165 switch(**argv) {
166 case '+':
167 recsrc |= (1 << dev);
168 break;
169 case '-':
170 recsrc &= ~(1 << dev);
171 break;

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

177 break;
178 }
179 drecsrc = 1;
180 argc -= 2; argv += 2;
181 continue;
182 }
183
184 if ((dev = res_name(*argv, devmask)) == -1) {
185 warnx("unknown device: %s", *argv);
179 dusage = 1;
186 dusage = 1;
180 argc--; argv++;
181 continue;
187 break;
182 }
183
184 switch(argc > 1 ? sscanf(argv[1], "%d:%d", &l, &r) : 0) {
185 case 0:
186 if (ioctl(baz, MIXER_READ(dev),&bar)== -1) {
187 warn("MIXER_READ");
188 argc--; argv++;
189 continue;

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

215 if (ioctl(baz, MIXER_WRITE(dev), &l) == -1)
216 warn("WRITE_MIXER");
217
218 argc -= 2; argv += 2;
219 break;
220 }
221 }
222
188 }
189
190 switch(argc > 1 ? sscanf(argv[1], "%d:%d", &l, &r) : 0) {
191 case 0:
192 if (ioctl(baz, MIXER_READ(dev),&bar)== -1) {
193 warn("MIXER_READ");
194 argc--; argv++;
195 continue;

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

221 if (ioctl(baz, MIXER_WRITE(dev), &l) == -1)
222 warn("WRITE_MIXER");
223
224 argc -= 2; argv += 2;
225 break;
226 }
227 }
228
229 if (dusage) {
230 close(baz);
231 usage(devmask, recmask);
232 /* Not reached */
233 }
234
223 if (orecsrc != recsrc)
224 if (ioctl(baz, SOUND_MIXER_WRITE_RECSRC, &recsrc) == -1)
225 err(1, "SOUND_MIXER_WRITE_RECSRC");
226
227 if (drecsrc) {
228 if (ioctl(baz, SOUND_MIXER_READ_RECSRC, &recsrc) == -1)
229 err(1, "SOUND_MIXER_READ_RECSRC");
230 print_recsrc(recsrc);
231 }
232
233 close(baz);
234
235 if (orecsrc != recsrc)
236 if (ioctl(baz, SOUND_MIXER_WRITE_RECSRC, &recsrc) == -1)
237 err(1, "SOUND_MIXER_WRITE_RECSRC");
238
239 if (drecsrc) {
240 if (ioctl(baz, SOUND_MIXER_READ_RECSRC, &recsrc) == -1)
241 err(1, "SOUND_MIXER_READ_RECSRC");
242 print_recsrc(recsrc);
243 }
244
245 close(baz);
246
235 if (dusage)
236 usage(devmask, recmask);
237
238 exit(0);
239}
247 exit(0);
248}