Пример #1
0
Файл: ui.c Проект: vlohacks/misc
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;
    }
        
       
}
Пример #2
0
//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);    
    
}