=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/mixerctl/mixerctl.c,v retrieving revision 1.8 retrieving revision 1.9 diff -c -r1.8 -r1.9 *** src/usr.bin/mixerctl/mixerctl.c 2002/05/29 18:33:39 1.8 --- src/usr.bin/mixerctl/mixerctl.c 2002/12/03 22:27:42 1.9 *************** *** 1,4 **** ! /* $OpenBSD: mixerctl.c,v 1.8 2002/05/29 18:33:39 deraadt Exp $ */ /* $NetBSD: mixerctl.c,v 1.11 1998/04/27 16:55:23 augustss Exp $ */ /* --- 1,4 ---- ! /* $OpenBSD: mixerctl.c,v 1.9 2002/12/03 22:27:42 pvalchev Exp $ */ /* $NetBSD: mixerctl.c,v 1.11 1998/04/27 16:55:23 augustss Exp $ */ /* *************** *** 35,40 **** --- 35,45 ---- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ + + /* + * mixerctl(1) - a program to control audio mixing. + */ + #include #include #include *************** *** 50,60 **** void prfield(struct field *p, char *sep, int prvalset); int rdfield(struct field *p, char *q); int main(int argc, char **argv); FILE *out = stdout; - char *prog; - struct field { char *name; mixer_ctrl_t *valp; --- 55,64 ---- void prfield(struct field *p, char *sep, int prvalset); int rdfield(struct field *p, char *q); int main(int argc, char **argv); + void usage(void); FILE *out = stdout; struct field { char *name; mixer_ctrl_t *valp; *************** *** 66,102 **** mixer_devinfo_t *infos; char * ! catstr(p, q) ! char *p; ! char *q; { int len; char *r; len = strlen(p) + 1 + strlen(q) + 1; ! r = malloc(len); strlcpy(r, p, len); strlcat(r, ".", len); strlcat(r, q, len); ! return r; } struct field * ! findfield(name) ! char *name; { int i; for(i = 0; fields[i].name; i++) if (strcmp(fields[i].name, name) == 0) return &fields[i]; ! return 0; } void ! prfield(p, sep, prvalset) ! struct field *p; ! char *sep; ! int prvalset; { mixer_ctrl_t *m; int i, n; --- 70,101 ---- mixer_devinfo_t *infos; char * ! catstr(char *p, char *q) { int len; char *r; len = strlen(p) + 1 + strlen(q) + 1; ! if ((r = malloc(len)) == NULL) ! err(1, "malloc()"); strlcpy(r, p, len); strlcat(r, ".", len); strlcat(r, q, len); ! return (r); } struct field * ! findfield(char *name) { int i; for(i = 0; fields[i].name; i++) if (strcmp(fields[i].name, name) == 0) return &fields[i]; ! return (0); } void ! prfield(struct field *p, char *sep, int prvalset) { mixer_ctrl_t *m; int i, n; *************** *** 139,153 **** fprintf(out, " %s", p->infp->un.v.units.name); break; default: - printf("\n"); errx(1, "Invalid format."); } } int ! rdfield(p, q) ! struct field *p; ! char *q; { mixer_ctrl_t *m; int v, v0, v1, mask; --- 138,149 ---- fprintf(out, " %s", p->infp->un.v.units.name); break; default: errx(1, "Invalid format."); } } int ! rdfield(struct field *p, char *q) { mixer_ctrl_t *m; int v, v0, v1, mask; *************** *** 162,187 **** break; if (i < p->infp->un.e.num_mem) m->un.ord = p->infp->un.e.member[i].ord; ! else { ! warnx("Bad enum value %s", q); ! return 0; ! } break; case AUDIO_MIXER_SET: mask = 0; for(v = 0; q && *q; q = s) { ! s = strchr(q, ','); ! if (s) *s++ = 0; for (i = 0; i < p->infp->un.s.num_mem; i++) if (strcmp(p->infp->un.s.member[i].label.name, q) == 0) break; ! if (i < p->infp->un.s.num_mem) { mask |= p->infp->un.s.member[i].mask; ! } else { ! warnx("Bad set value %s", q); ! return 0; ! } } m->un.mask = mask; break; --- 158,178 ---- break; if (i < p->infp->un.e.num_mem) m->un.ord = p->infp->un.e.member[i].ord; ! else ! errx(1, "Bad enum value %s", q); break; case AUDIO_MIXER_SET: mask = 0; for(v = 0; q && *q; q = s) { ! if (s = strchr(q, ',')) *s++ = 0; for (i = 0; i < p->infp->un.s.num_mem; i++) if (strcmp(p->infp->un.s.member[i].label.name, q) == 0) break; ! if (i < p->infp->un.s.num_mem) mask |= p->infp->un.s.member[i].mask; ! else ! errx(1, "Bad set value %s", q); } m->un.mask = mask; break; *************** *** 197,206 **** m->un.value.level[0] = v; break; } ! } else { ! warnx("Bad number %s", q); ! return 0; ! } } else { if (sscanf(q, "%d,%d", &v0, &v1) == 2) { switch (*q) { --- 188,195 ---- m->un.value.level[0] = v; break; } ! } else ! errx(1, "Bad number %s", q); } else { if (sscanf(q, "%d,%d", &v0, &v1) == 2) { switch (*q) { *************** *** 230,256 **** m->un.value.level[1] += v; break; default: ! m->un.value.level[0] = ! m->un.value.level[1] = v; break; } ! } else { ! warnx("Bad numbers %s", q); ! return 0; ! } } break; default: errx(1, "Invalid format."); } p->changed = 1; ! return 1; } int ! main(argc, argv) ! int argc; ! char **argv; { int fd, i, j, ch, pos; int aflag = 0, wflag = 0, vflag = 0; --- 219,241 ---- m->un.value.level[1] += v; break; default: ! m->un.value.level[0] = v; ! m->un.value.level[1] = v; break; } ! } else ! errx(1, "Bad numbers %s", q); } break; default: errx(1, "Invalid format."); } p->changed = 1; ! return (1); } int ! main(int argc, char **argv) { int fd, i, j, ch, pos; int aflag = 0, wflag = 0, vflag = 0; *************** *** 258,271 **** char *sep = "="; mixer_devinfo_t dinfo; mixer_ctrl_t val; ! int ndev; ! file = getenv("MIXERDEVICE"); ! if (file == 0) ! file = "/dev/mixer"; - prog = *argv; - while ((ch = getopt(argc, argv, "af:nvw")) != -1) { switch(ch) { case 'a': --- 243,253 ---- char *sep = "="; mixer_devinfo_t dinfo; mixer_ctrl_t val; ! int ndev = 0; ! if ((file = getenv("MIXERDEVICE")) == 0 || *file == '\0') ! file = "/dev/mixer"; while ((ch = getopt(argc, argv, "af:nvw")) != -1) { switch(ch) { case 'a': *************** *** 285,317 **** break; case '?': default: ! usage: ! fprintf(out, "%s [-f file] [-v] [-n] name ...\n", prog); ! fprintf(out, "%s [-f file] [-v] [-n] -w name=value ...\n", prog); ! fprintf(out, "%s [-f file] [-v] [-n] -a\n", prog); ! exit(0); } } argc -= optind; argv += optind; ! fd = open(file, wflag? O_RDWR : O_RDONLY); ! if (fd < 0) err(1, "%s", file); ! for(ndev = 0; ; ndev++) { ! dinfo.index = ndev; ! if (ioctl(fd, AUDIO_MIXER_DEVINFO, &dinfo) < 0) ! break; } ! if (ndev == 0) errx(1, "no mixer devices configured"); ! rfields = calloc(ndev, sizeof *rfields); ! fields = calloc(ndev, sizeof *fields); ! infos = calloc(ndev, sizeof *infos); ! values = calloc(ndev, sizeof *values); for(i = 0; i < ndev; i++) { infos[i].index = i; --- 267,295 ---- break; case '?': default: ! usage(); } } argc -= optind; argv += optind; ! if ((fd = open(file, wflag ? O_RDWR : O_RDONLY)) < 0) err(1, "%s", file); ! for(;;) { ! dinfo.index = ndev++; ! if (ioctl(fd, AUDIO_MIXER_DEVINFO, &dinfo) < 0) ! break; } ! if (!ndev) errx(1, "no mixer devices configured"); ! if ((rfields = calloc(ndev, sizeof *rfields)) == NULL || ! (fields = calloc(ndev, sizeof *fields)) == NULL || ! (infos = calloc(ndev, sizeof *infos)) == NULL || ! (values = calloc(ndev, sizeof *values)) == NULL) ! err(1, "calloc()"); for(i = 0; i < ndev; i++) { infos[i].index = i; *************** *** 359,365 **** fields[i].name); } ! if (argc == 0 && aflag && !wflag) { for(i = 0; fields[i].name; i++) { prfield(&fields[i], sep, vflag); fprintf(out, "\n"); --- 337,343 ---- fields[i].name); } ! if (!argc && aflag && !wflag) { for(i = 0; fields[i].name; i++) { prfield(&fields[i], sep, vflag); fprintf(out, "\n"); *************** *** 370,377 **** while(argc--) { char *q; ! q = strchr(*argv, '='); ! if (q) { *q++ = 0; p = findfield(*argv); if (p == 0) --- 348,354 ---- while(argc--) { char *q; ! if (q = strchr(*argv, '=')) { *q++ = 0; p = findfield(*argv); if (p == 0) *************** *** 391,399 **** } } } ! } else { warnx("No `=' in %s", *argv); - } argv++; } } else { --- 368,375 ---- } } } ! } else warnx("No `=' in %s", *argv); argv++; } } else { *************** *** 407,412 **** } } } else ! goto usage; exit(0); } --- 383,402 ---- } } } else ! usage(); exit(0); + } + + void + usage(void) + { + extern char *__progname; /* from crt0.o */ + + fprintf(stderr, + "usage: %s [-f file] [-n] [-v] name ...\n" + " %s [-f file] [-n] [-v] -w name=value ...\n" + " %s [-f file] [-n] [-v] -a\n", __progname, + __progname, __progname); + + exit(1); }