void ui_effect_to_humanreadable(char * buf, const uint8_t effect_num, const uint8_t effect_value, const uint8_t * effect_values_mem, const module_type_t module_type) { *buf = 0; char effect[2]; uint8_t effect_value_mem = effect_values_mem[effect_num]; switch (module_type) { case module_type_mtm: case module_type_mod: switch (effect_num) { case 0: if (effect_value) strcpy(buf, "arpeggio"); break; case 0x1: strcpy(buf, "portamento up"); break; case 0x2: strcpy(buf, "portamento down"); break; case 0x3: strcpy(buf, "portamento to note"); break; case 0x4: strcpy(buf, "vibrato"); break; case 0x5: strcpy(buf, "port. to note + vol. slide"); break; case 0x6: strcpy(buf, "vibrato + vol. slide"); break; case 0x7: strcpy(buf, "tremolo"); break; case 0x8: strcpy(buf, "panning"); break; case 0x9: strcpy(buf, "sample offset"); break; case 0xa: strcpy(buf, "volume slide"); break; case 0xb: strcpy(buf, "position jump"); break; case 0xc: strcpy(buf, "set volume"); break; case 0xd: strcpy(buf, "pattern break"); break; case 0xe: switch (effect_value >> 4) { case 0x1: strcpy(buf, "fine porta up"); break; case 0x2: strcpy(buf, "fine porta down"); break; case 0x4: strcpy(buf, "set vibrato waveform"); break; case 0x6: strcpy(buf, "pattern loop"); break; case 0x7: strcpy(buf, "set tremolo waveform"); break; case 0x8: strcpy(buf, "panning"); break; case 0x9: strcpy(buf, "retrigger sample"); break; case 0xa: strcpy(buf, "fine volume up"); break; case 0xb: strcpy(buf, "fine volume down"); break; case 0xc: strcpy(buf, "note cut"); break; case 0xd: strcpy(buf, "note delay"); break; case 0xe: strcpy(buf, "pattern delay"); break; default: sprintf(buf, "UNIMPLEMENTED: %1x%2x", effect_num, effect_value); break; } break; case 0xf: strcpy(buf, "set speed"); break; } break; case module_type_stm: case module_type_s3m: switch (effect_num) { case 0: break; case 1: strcpy(buf, "set speed"); break; case 3: strcpy(buf, "pattern break"); break; case 4: if ((effect_value_mem & 0x0f) == 0x0f) strcpy(buf, "fine volslide up"); else if ((effect_value_mem & 0xf0) == 0xf0) strcpy(buf, "fine volslide down"); if ((effect_value_mem & 0x0f) == 0x00) strcpy(buf, "volume slide up"); else if ((effect_value_mem & 0xf0) == 0x00) strcpy(buf, "volume slide down"); break; case 5: if ((effect_value_mem & 0xf0) == 0xf0) strcpy(buf, "fine portamento down"); else if ((effect_value_mem & 0xf0) == 0xe0) strcpy(buf, "extrafine portamento down"); else strcpy(buf, "portamento down"); break; case 6: if ((effect_value_mem & 0xf0) == 0xf0) strcpy(buf, "fine portamento up"); else if ((effect_value_mem & 0xf0) == 0xe0) strcpy(buf, "extrafine portamento up"); else strcpy(buf, "portamento up"); break; case 7: strcpy(buf, "portamento to note"); break; case 8: strcpy(buf, "vibrato"); break; case 10: strcpy(buf, "arpeggio"); break; case 11: strcpy(buf, "vibrato + volume slide"); break; case 12: strcpy(buf, "note portamento + vol slide"); break; case 15: strcpy(buf, "sample offset"); break; case 17: strcpy(buf, "retrigger + volume slide"); break; case 18: strcpy(buf, "tremolo"); break; case 19: switch (effect_value >> 4) { case 0x3: strcpy(buf, "set vibrato waveform"); break; case 0x4: strcpy(buf, "set tremolo waveform"); break; case 0x8: strcpy(buf, "panning"); break; case 0xA: strcpy(buf, "stereo control"); break; case 0xC: strcpy(buf, "note cut"); break; case 0xD: strcpy(buf, "note delay"); break; default: ui_map_effect_num(effect, module_type, effect_num); sprintf(buf, "UNIMPLEMENTED: %s%2x", effect, effect_value); break; } break; case 20: strcpy(buf, "set tempo"); break; case 24: strcpy(buf, "panning"); break; default: ui_map_effect_num(effect, module_type, effect_num); sprintf(buf, "UNIMPLEMENTED: %s%2x", effect, effect_value); break; } break; } }
//void ui_ncurses_row_handler(player_t * player, int current_order, int current_pattern, int current_row) void ui_ncurses_row_handler(player_t * player) { if (term_resized) { ui_ncurses_windows_init(); term_resized --; } int current_row = player->current_row; int current_pattern = player->current_pattern; int current_pos_location = ui_ncurses_layout.pattern_panel.w->_maxy / 2; int i, j, k; char note[4]; char tmp[20]; char tmp2[600]; char effect[2]; char volume[3]; mvwprintw(ui_ncurses_layout.song_panel.w, 1, 0, "spd: %3d | bpm: %3d | row: %3d | pat: %3d | ord: %3d/%3d ", player->speed, player->bpm, player->current_row, player->current_pattern, player->current_order, player->module->num_orders); wrefresh(ui_ncurses_layout.song_panel.w); werase(ui_ncurses_layout.samples_panel.w); j = ui_ncurses_layout.pattern_panel.w->_begy + 1; for (j = 0; j < ui_ncurses_layout.pattern_panel.w->_maxy - 1; j++) { i = j + (current_row - current_pos_location); if ((i >= 0) && (i < player->module->patterns[current_pattern].num_rows)) { sprintf(tmp2, "%02d|", i); for (k = 0; k < player->module->num_channels; k++) { module_pattern_data_t * data = &(player->module->patterns[current_pattern].rows[i].data[k]); ui_periodindex2note(data->period_index, note, player->module->module_type == module_type_it ? 0 : 1); if (data->volume >= 0) sprintf(volume, "%02i", data->volume); else strcpy(volume, ".."); ui_map_effect_num(effect, player->module->module_type, data->effect_num); sprintf(tmp, "%s %02i %s %s%02X|", note, data->sample_num, volume, effect, data->effect_value); strcat (tmp2, tmp); } } else { for(k = 0; k < ui_ncurses_layout.pattern_panel.w->_maxx - 1; k++) tmp2[k] = ' '; tmp2[k] = 0; } if (j == current_pos_location) wattron(ui_ncurses_layout.pattern_panel.w, A_REVERSE); if ((i % 4) == 0) wattron(ui_ncurses_layout.pattern_panel.w, A_BOLD); mvwprintw(ui_ncurses_layout.pattern_panel.w, j+1, 1, tmp2); wattroff(ui_ncurses_layout.pattern_panel.w, A_REVERSE); wattroff(ui_ncurses_layout.pattern_panel.w, A_BOLD); } if (ui_ncurses_layout.use_colors) { wattron(ui_ncurses_layout.pattern_panel.w, COLOR_PAIR(UI_NCURSES_COLORPAIR_WINDOW)); wattron(ui_ncurses_layout.samples_panel.w, COLOR_PAIR(UI_NCURSES_COLORPAIR_WINDOW)); } box(ui_ncurses_layout.pattern_panel.w, 0, 0); box(ui_ncurses_layout.samples_panel.w, 0, 0); if (ui_ncurses_layout.use_colors) { wattroff(ui_ncurses_layout.pattern_panel.w, COLOR_PAIR(UI_NCURSES_COLORPAIR_WINDOW)); wattroff(ui_ncurses_layout.samples_panel.w, COLOR_PAIR(UI_NCURSES_COLORPAIR_WINDOW)); } if (ui_ncurses_layout.aux_panel.w) overwrite(ui_ncurses_layout.aux_panel.w, ui_ncurses_layout.pattern_panel.w); // Samples List for (i = 0; i < (ui_ncurses_layout.samples_panel.w->_maxy-1); i++) { if ((i + ui_ncurses_layout.samples_panel.list_offset) >= player->module->num_samples) break; k = 0; for (j = 0; j < player->module->num_channels; j++) { if (player->channels[j].sample_num == (i+1+ui_ncurses_layout.samples_panel.list_offset)) { k = 1; break; } } if (k) wattron(ui_ncurses_layout.samples_panel.w, A_BOLD); mvwprintw(ui_ncurses_layout.samples_panel.w, i+1, 1, "%2i: %s", i+1+ui_ncurses_layout.samples_panel.list_offset, player->module->samples[i+ui_ncurses_layout.samples_panel.list_offset].header.name); wattroff(ui_ncurses_layout.samples_panel.w, A_BOLD); } overwrite(ui_ncurses_layout.samples_panel.w, ui_ncurses_layout.pattern_panel.w); wrefresh(ui_ncurses_layout.pattern_panel.w); wrefresh(ui_ncurses_layout.samples_panel.w); }