Changeset 68:043d5db57474

Show
Ignore:
Timestamp:
02/23/11 16:19:11 (15 months ago)
Author:
Thibaut Girka <thib@…>
Branch:
default
Tags:
tip
Message:
Fix index_series implementation (still incomplete)
Files:
1 modified

Legend:

Unmodified
Added
Removed
  • scn2k/scn2k_textimpl.cc

    r59 r68  
    410410        if (cmd.args.size() >= 7) 
    411411        { 
    412                 int val = cmd.args[0].value; 
    413                 int offset = cmd.args[1].value; 
    414                 int r_min = cmd.args[2].value; 
    415                 int v_min = cmd.args[3].value; 
    416                 int v_max = cmd.args[4].value; 
    417                 int r_max = cmd.args[5].value; 
    418                 int mode = cmd.args[6].value; 
    419                 // rldev : mode == 1,3 : 'acceralating curve', 2,3: 'decelerating curve' 
    420                 // 耇数の匕数リスト(r_minからmodeたでのリスト)も぀こずもあり、その堎合は 
    421                 // "cancel out in some way" らしい 
    422                 if (mode == 1 || mode == 3) 
    423                         val += offset; 
    424                 else if (mode == 2 || mode == 4) 
    425                         val -= offset; 
    426 if (cmd.args.size() != 7) 
    427         fprintf(stderr,"\n%d/%d: cmd 01-04:0320 : XXXX NOT SUPPORTED LIST : DOUBLE RANGE CONVERSION!   XXXXXXXXXXX\n",cmd.scn,cmd.pos); 
    428                 if (val < v_min) 
    429                         val = v_min; 
    430                 if (val > v_max) 
    431                         val = v_max; 
    432                 val = (r_max-r_min)*(val-v_min)/(v_max-v_min) + r_min; 
     412                int i, val; 
     413                int x, startval; 
     414                int start, end, endval, mode; 
     415 
     416                //TODO: why index and offset, and not x? 
     417                x = cmd.args[0].value + cmd.args[1].value; 
     418                startval = cmd.args[2].value; 
     419                start = end = 0; 
     420                val = endval = startval; 
     421                for (i=3; i < cmd.args.size(); i += 4) 
     422                { 
     423                        startval = endval; 
     424                        start = cmd.args[i].value; 
     425                        end = cmd.args[i + 1].value; 
     426                        endval = cmd.args[i + 2].value; 
     427                        int mode = cmd.args[i + 3].value; 
     428                        if (start <= x && x <= end) 
     429                        { 
     430                                // rldev : mode == 1,3 : 'acceralating curve', 2,3: 'decelerating curve' 
     431                                // 耇数の匕数リスト(r_minからmodeたでのリスト)も぀こずもあり、その堎合は 
     432                                // "cancel out in some way" らしい 
     433                                // Assume mode 0, as we only know of it 
     434                                // TODO: find out how other mode works (exp/log?) 
     435                                // TODO: "When two ranges overlap, they appear to cancel out in some way" 
     436                                val = startval + (endval - startval) * (x - start) / (end - start); 
     437                        } 
     438                } 
     439                if (i != cmd.args.size()) 
     440                        fprintf(stderr, "\n%d/%d: cmd 01-04:0320 : WARNING: %d unconsumed arguments\n", cmd.scn, cmd.pos, cmd.args.size() - i); 
     441                if (x > end) 
     442                        x = endval; 
    433443                cmd.SetSysvar(val); 
    434444        } 
     445        else 
     446                fprintf(stderr, "\n%d/%d: cmd 01-04:0320 : Not enough arguments?!\n", cmd.scn, cmd.pos); 
    435447} 
    436448