Annotation of src/usr.bin/aucat/opt.c, Revision 1.11
1.11 ! ratchov 1: /* $OpenBSD: opt.c,v 1.10 2010/07/06 01:12:45 ratchov Exp $ */
1.1 ratchov 2: /*
3: * Copyright (c) 2008 Alexandre Ratchov <alex@caoua.org>
4: *
5: * Permission to use, copy, modify, and distribute this software for any
6: * purpose with or without fee is hereby granted, provided that the above
7: * copyright notice and this permission notice appear in all copies.
8: *
9: * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10: * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11: * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12: * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13: * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14: * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15: * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16: */
17: #include <stdio.h>
18: #include <stdlib.h>
19: #include <string.h>
20:
1.10 ratchov 21: #include "dev.h"
1.1 ratchov 22: #include "conf.h"
23: #include "opt.h"
1.4 ratchov 24: #ifdef DEBUG
25: #include "dbg.h"
26: #endif
1.1 ratchov 27:
1.11 ! ratchov 28: struct opt *opt_list = NULL;
1.1 ratchov 29:
1.11 ! ratchov 30: struct opt *
! 31: opt_new(char *name, struct dev *dev, struct aparams *wpar, struct aparams *rpar,
1.8 ratchov 32: int maxweight, int mmc, int join, unsigned mode)
1.1 ratchov 33: {
1.11 ! ratchov 34: struct opt *o, **po;
1.1 ratchov 35: unsigned len;
36: char c;
37:
38: for (len = 0; name[len] != '\0'; len++) {
39: if (len == OPT_NAMEMAX) {
40: fprintf(stderr, "%s: name too long\n", name);
41: exit(1);
42: }
43: c = name[len];
44: if (c < 'a' && c > 'z' &&
45: c < 'A' && c > 'Z' &&
46: c < '0' && c > '9' &&
47: c != '_') {
48: fprintf(stderr, "%s: '%c' not allowed\n", name, c);
49: exit(1);
50: }
51: }
52: o = malloc(sizeof(struct opt));
53: if (o == NULL) {
54: perror("opt_new: malloc");
55: exit(1);
56: }
57: memcpy(o->name, name, len + 1);
1.7 ratchov 58: if (mode & MODE_RECMASK)
59: o->wpar = (mode & MODE_MON) ? *rpar : *wpar;
60: if (mode & MODE_PLAY)
61: o->rpar = *rpar;
1.1 ratchov 62: o->maxweight = maxweight;
1.3 ratchov 63: o->mmc = mmc;
1.8 ratchov 64: o->join = join;
1.7 ratchov 65: o->mode = mode;
1.11 ! ratchov 66: o->dev = dev;
! 67: for (po = &opt_list; *po != NULL; po = &(*po)->next) {
! 68: if (strcmp(o->name, (*po)->name) == 0) {
! 69: fprintf(stderr, "%s: already defined\n", o->name);
! 70: exit(1);
! 71: }
! 72: }
! 73: o->next = NULL;
! 74: *po = o;
1.4 ratchov 75: #ifdef DEBUG
76: if (debug_level >= 2) {
77: dbg_puts(o->name);
1.10 ratchov 78: dbg_puts("@");
79: dbg_puts(o->dev->path);
1.7 ratchov 80: dbg_puts(":");
1.11 ! ratchov 81: if (o->mode & MODE_REC) {
1.7 ratchov 82: dbg_puts(" rec=");
83: dbg_putu(o->wpar.cmin);
84: dbg_puts(":");
85: dbg_putu(o->wpar.cmax);
86: }
1.11 ! ratchov 87: if (o->mode & MODE_PLAY) {
1.7 ratchov 88: dbg_puts(" play=");
89: dbg_putu(o->rpar.cmin);
90: dbg_puts(":");
91: dbg_putu(o->rpar.cmax);
92: dbg_puts(" vol=");
93: dbg_putu(o->maxweight);
94: }
1.11 ! ratchov 95: if (o->mode & MODE_MON) {
1.7 ratchov 96: dbg_puts(" mon=");
97: dbg_putu(o->wpar.cmin);
98: dbg_puts(":");
99: dbg_putu(o->wpar.cmax);
100: }
1.11 ! ratchov 101: if (o->mode & (MODE_RECMASK | MODE_PLAY)) {
! 102: if (o->mmc)
! 103: dbg_puts(" mmc");
! 104: if (o->join)
! 105: dbg_puts(" join");
! 106: }
! 107: if (o->mode & MODE_MIDIIN)
! 108: dbg_puts(" midi/in");
! 109: if (o->mode & MODE_MIDIOUT)
! 110: dbg_puts(" midi/out");
1.4 ratchov 111: dbg_puts("\n");
112: }
113: #endif
1.11 ! ratchov 114: return o;
1.1 ratchov 115: }
116:
117: struct opt *
118: opt_byname(char *name)
119: {
120: struct opt *o;
121:
1.11 ! ratchov 122: for (o = opt_list; o != NULL; o = o->next) {
1.1 ratchov 123: if (strcmp(name, o->name) == 0) {
1.4 ratchov 124: #ifdef DEBUG
125: if (debug_level >= 3) {
126: dbg_puts(o->name);
127: dbg_puts(": option found\n");
128: }
129: #endif
1.1 ratchov 130: return o;
131: }
132: }
1.4 ratchov 133: #ifdef DEBUG
134: if (debug_level >= 3) {
135: dbg_puts(name);
136: dbg_puts(": option not found\n");
137: }
138: #endif
1.1 ratchov 139: return NULL;
140: }
141: