sndioctl: Use a dedicated routine to print single mixer entry

This commit is contained in:
Alexandre Ratchov 2020-05-05 06:33:25 +02:00
parent b3a1b52f6a
commit e4b2fc0b6e
1 changed files with 42 additions and 13 deletions

View File

@ -49,8 +49,9 @@ int ismono(struct info *);
void print_node(struct sioctl_node *, int); void print_node(struct sioctl_node *, int);
void print_desc(struct info *, int); void print_desc(struct info *, int);
void print_num(struct info *); void print_num(struct info *);
void print_ent(struct info *, char *);
void print_val(struct info *, int); void print_val(struct info *, int);
void print_par(struct info *, int, char *); void print_par(struct info *, int);
int parse_name(char **, char *); int parse_name(char **, char *);
int parse_unit(char **, int *); int parse_unit(char **, int *);
int parse_val(char **, float *); int parse_val(char **, float *);
@ -377,6 +378,36 @@ print_num(struct info *p)
} }
} }
/*
* print a single control
*/
void
print_ent(struct info *e, char *comment)
{
if (e->desc.group[0] != 0) {
printf("%s", e->desc.group);
printf("/");
}
print_node(&e->desc.node0, 0);
printf(".%s=", e->desc.func);
switch (e->desc.type) {
case SIOCTL_NONE:
printf("<removed>\n");
break;
case SIOCTL_VEC:
case SIOCTL_LIST:
print_node(&e->desc.node1, 0);
printf(":");
/* FALLTHROUGH */
case SIOCTL_SW:
case SIOCTL_NUM:
print_num(e);
}
if (comment)
printf("\t# %s", comment);
printf("\n");
}
/* /*
* print parameter value * print parameter value
*/ */
@ -415,7 +446,7 @@ print_val(struct info *p, int mono)
* print ``<parameter>=<value>'' string (including '\n') * print ``<parameter>=<value>'' string (including '\n')
*/ */
void void
print_par(struct info *p, int mono, char *comment) print_par(struct info *p, int mono)
{ {
if (!n_flag) { if (!n_flag) {
if (p->desc.group[0] != 0) { if (p->desc.group[0] != 0) {
@ -429,8 +460,6 @@ print_par(struct info *p, int mono, char *comment)
print_desc(p, mono); print_desc(p, mono);
else else
print_val(p, mono); print_val(p, mono);
if (comment)
printf(" # %s", comment);
printf("\n"); printf("\n");
} }
@ -707,7 +736,7 @@ cmd(char *line)
if (nent == 0) { if (nent == 0) {
/* XXX: use print_node()-like routine */ /* XXX: use print_node()-like routine */
fprintf(stderr, "%s[%d]: invalid value\n", vstr, vunit); fprintf(stderr, "%s[%d]: invalid value\n", vstr, vunit);
print_par(g, 0, NULL); print_par(g, 0);
exit(1); exit(1);
} }
comma = 1; comma = 1;
@ -774,15 +803,15 @@ list(void)
if (i_flag) { if (i_flag) {
if (v_flag) { if (v_flag) {
for (p = g; p != NULL; p = nextpar(p)) for (p = g; p != NULL; p = nextpar(p))
print_par(p, 0, NULL); print_par(p, 0);
} else } else
print_par(g, 1, NULL); print_par(g, 1);
} else { } else {
if (v_flag || !ismono(g)) { if (v_flag || !ismono(g)) {
for (p = g; p != NULL; p = nextpar(p)) for (p = g; p != NULL; p = nextpar(p))
print_par(p, 0, NULL); print_par(p, 0);
} else } else
print_par(g, 1, NULL); print_par(g, 1);
} }
} }
} }
@ -807,7 +836,7 @@ ondesc(void *arg, struct sioctl_desc *d, int curval)
for (pi = &infolist; (i = *pi) != NULL; pi = &i->next) { for (pi = &infolist; (i = *pi) != NULL; pi = &i->next) {
if (d->addr == i->desc.addr) { if (d->addr == i->desc.addr) {
if (m_flag) if (m_flag)
print_par(i, 0, "deleted"); print_ent(i, "deleted");
*pi = i->next; *pi = i->next;
free(i); free(i);
break; break;
@ -824,7 +853,7 @@ ondesc(void *arg, struct sioctl_desc *d, int curval)
cmp = cmpdesc(d, &i->desc); cmp = cmpdesc(d, &i->desc);
if (cmp == 0) { if (cmp == 0) {
fprintf(stderr, "fatal: duplicate control:\n"); fprintf(stderr, "fatal: duplicate control:\n");
print_par(i, 0, "duplicate"); print_ent(i, "duplicate");
exit(1); exit(1);
} }
if (cmp < 0) if (cmp < 0)
@ -842,7 +871,7 @@ ondesc(void *arg, struct sioctl_desc *d, int curval)
i->next = *pi; i->next = *pi;
*pi = i; *pi = i;
if (m_flag) if (m_flag)
print_par(i, 0, "added"); print_ent(i, "added");
} }
/* /*
@ -858,7 +887,7 @@ onctl(void *arg, unsigned addr, unsigned val)
continue; continue;
i->curval = val; i->curval = val;
if (m_flag) if (m_flag)
print_par(i, 0, "changed"); print_ent(i, "changed");
} }
} }