where = punc_vars; while ((where->var_id != -1) && (!rv)) { if (where->var_id == var_id)
rv = where; else
where++;
} return rv;
}
/* handlers for setting vars */ int spk_set_num_var(int input, struct st_var_header *var, int how)
{ int val; int *p_val = var->p_val; char buf[32]; char *cp; struct var_t *var_data = var->data;
if (!var_data) return -ENODATA;
val = var_data->u.n.value; switch (how) { case E_NEW_DEFAULT: if (input < var_data->u.n.low || input > var_data->u.n.high) return -ERANGE;
var_data->u.n.default_val = input; return 0; case E_DEFAULT:
val = var_data->u.n.default_val; break; case E_SET:
val = input; break; case E_INC:
val += input; break; case E_DEC:
val -= input; break;
}
if (val < var_data->u.n.low || val > var_data->u.n.high) return -ERANGE;
var_data->u.n.value = val; if (var->var_type == VAR_TIME && p_val) {
*p_val = msecs_to_jiffies(val); return 0;
} if (p_val)
*p_val = val; if (var->var_id == PUNC_LEVEL) {
spk_punc_mask = spk_punc_masks[val];
} if (var_data->u.n.multiplier != 0)
val *= var_data->u.n.multiplier;
val += var_data->u.n.offset;
if (!synth) return 0; if (synth->synth_adjust && synth->synth_adjust(synth, var)) return 0; if (var->var_id < FIRST_SYNTH_VAR) return 0;
if (!var_data->u.n.synth_fmt) return 0; if (var->var_id == PITCH)
cp = spk_pitch_buff; else
cp = buf; if (!var_data->u.n.out_str)
sprintf(cp, var_data->u.n.synth_fmt, (int)val); else
sprintf(cp, var_data->u.n.synth_fmt,
var_data->u.n.out_str[val]);
synth_printf("%s", cp); return 0;
}
EXPORT_SYMBOL_GPL(spk_set_num_var);
int spk_set_string_var(constchar *page, struct st_var_header *var, int len)
{ struct var_t *var_data = var->data;
if (!var_data) return -ENODATA; if (len > MAXVARLEN) return -E2BIG; if (!len) { if (!var_data->u.s.default_val) return 0; if (!var->p_val)
var->p_val = var_data->u.s.default_val; if (var->p_val != var_data->u.s.default_val)
strcpy((char *)var->p_val, var_data->u.s.default_val); return -ERESTART;
} elseif (var->p_val) {
strcpy((char *)var->p_val, page);
} else { return -E2BIG;
} return 0;
}
/* * spk_set_mask_bits sets or clears the punc/delim/repeat bits, * if input is null uses the defaults. * values for how: 0 clears bits of chars supplied, * 1 clears allk, 2 sets bits for chars
*/ int spk_set_mask_bits(constchar *input, constint which, constint how)
{
u_char *cp; short mask = spk_punc_info[which].mask;
if (how & 1) { for (cp = (u_char *)spk_punc_info[3].value; *cp; cp++)
spk_chartab[*cp] &= ~mask;
}
cp = (u_char *)input; if (!cp) {
cp = spk_punc_info[which].value;
} else { for (; *cp; cp++) { if (*cp < SPACE) break; if (mask < PUNC) { if (!(spk_chartab[*cp] & PUNC)) break;
} elseif (spk_chartab[*cp] & B_NUM) { break;
}
} if (*cp) return -EINVAL;
cp = (u_char *)input;
} if (how & 2) { for (; *cp; cp++) if (*cp > SPACE)
spk_chartab[*cp] |= mask;
} else { for (; *cp; cp++) if (*cp > SPACE)
spk_chartab[*cp] &= ~mask;
} return 0;
}
char *spk_s2uchar(char *start, char *dest)
{ int val;
/* Do not replace with kstrtoul: here we need start to be updated */
val = simple_strtoul(skip_spaces(start), &start, 10); if (*start == ',')
start++;
*dest = (u_char)val; return start;
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.