void option_talk_value(const struct settings_list *setting, int value, bool enqueue) { if ((setting->flags & F_BOOL_SETTING) == F_BOOL_SETTING) { bool val = (value==1); talk_id(val? setting->bool_setting->lang_yes : setting->bool_setting->lang_no, enqueue); } #if 0 /* probably dont need this one */ else if ((setting->flags & F_FILENAME) == F_FILENAME) { } #endif else if (((setting->flags & F_INT_SETTING) == F_INT_SETTING) || ((setting->flags & F_TABLE_SETTING) == F_TABLE_SETTING)) { const struct int_setting *int_info = setting->int_setting; const struct table_setting *tbl_info = setting->table_setting; int unit; int32_t (*get_talk_id)(int, int); if ((setting->flags & F_INT_SETTING) == F_INT_SETTING) { unit = int_info->unit; get_talk_id = int_info->get_talk_id; } else { unit = tbl_info->unit; get_talk_id = tbl_info->get_talk_id; } if (get_talk_id) talk_id(get_talk_id(value, unit), enqueue); else talk_value(value, unit, enqueue); } else if ((setting->flags & F_T_SOUND) == F_T_SOUND) { int talkunit = UNIT_INT; const char *unit = sound_unit(setting->sound_setting->setting); if (!strcmp(unit, "dB")) talkunit = UNIT_DB; else if (!strcmp(unit, "%")) talkunit = UNIT_PERCENT; else if (!strcmp(unit, "Hz")) talkunit = UNIT_HERTZ; talk_value(value, talkunit, false); } else if ((setting->flags & F_CHOICE_SETTING) == F_CHOICE_SETTING) { if (setting->flags & F_CHOICETALKS) { talk_id(setting->choice_setting->talks[value], enqueue); } else { talk_id(P2ID(setting->choice_setting->desc[value]), enqueue); } } }
void splash(int ticks, const char *str) { #if !defined(SIMULATOR) || CONFIG_CODEC == SWCODEC long id; /* fmt may be a so called virtual pointer. See settings.h. */ if((id = P2ID((const unsigned char*)str)) >= 0) /* If fmt specifies a voicefont ID, and voice menus are enabled, then speak it. */ cond_talk_ids_fq(id); #endif splashf(ticks, "%s", P2STR((const unsigned char*)str)); }
/* * Move the cursor to a particular id, * target: where you want it to be */ static void put_cursor(int m, int target) { int voice_id; menus[m].cursor = target; menu_draw(m); /* "say" the entry under the cursor */ if(global_settings.talk_menu) { voice_id = P2ID(menus[m].items[menus[m].cursor].desc); if (voice_id >= 0) /* valid ID given? */ talk_id(voice_id, false); /* say it */ } }
static void talk_text_message(const struct text_message * message, bool enqueue) { int line; if(message) { for(line=0; line<message->nb_lines; line++) { long id = P2ID((unsigned char *)message->message_lines[line]); if(id>=0) { talk_id(id, enqueue); enqueue = true; } } } }
/* Format a large-range value for output, using the appropriate unit so that * the displayed value is in the range 1 <= display < 1000 (1024 for "binary" * units) if possible, and 3 significant digits are shown. If a buffer is * given, the result is snprintf()'d into that buffer, otherwise the result is * voiced.*/ char *output_dyn_value(char *buf, int buf_size, int value, const unsigned char * const *units, bool bin_scale) { int scale = bin_scale ? 1024 : 1000; int fraction = 0; int unit_no = 0; char tbuf[5]; while (value >= scale) { fraction = value % scale; value /= scale; unit_no++; } if (bin_scale) fraction = fraction * 1000 / 1024; if (value >= 100 || !unit_no) tbuf[0] = '\0'; else if (value >= 10) snprintf(tbuf, sizeof(tbuf), "%01d", fraction / 100); else snprintf(tbuf, sizeof(tbuf), "%02d", fraction / 10); if (buf) { if (strlen(tbuf)) snprintf(buf, buf_size, "%d%s%s%s", value, str(LANG_POINT), tbuf, P2STR(units[unit_no])); else snprintf(buf, buf_size, "%d%s", value, P2STR(units[unit_no])); } else { talk_fractional(tbuf, value, P2ID(units[unit_no])); } return buf; }