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} |