Ticket #8255: scummvm-debuggerstate.diff

File scummvm-debuggerstate.diff, 4.2 KB (added by SF/mankeli, 21 years ago)

Object state modifying in debugger

  • scumm/debugger.cpp

     
    5353
    5454        if (entry)
    5555                errStr = strdup(entry);
    56        
     56
    5757        _s = s;
    5858        s->_debugger = this;
    5959        _frame_countdown = 1;
     
    113113                _s->_debuggerDialog->setCompletionCallback(0, 0);
    114114        }
    115115#endif
    116        
     116
    117117        _s->_debugger = NULL;
    118118        _s = NULL;
    119119        _detach_now = false;
     
    124124        if (_frame_countdown == 0)
    125125                return;
    126126        --_frame_countdown;
    127        
     127
    128128        if (!_frame_countdown) {
    129129                // Pause sound output
    130130                bool old_soundsPaused = _s->_sound->_soundsPaused;
    131131                _s->_sound->pauseSounds(true);
    132                
     132
    133133                // Enter debugger
    134134                enter();
    135                
     135
    136136                _s->_sound->pauseSounds(old_soundsPaused);      // Resume previous sound state
    137                
     137
    138138                if (_detach_now)        // Detach if we're finished with the debugger
    139139                        detach();
    140140        }
     
    144144#if USE_CONSOLE
    145145bool ScummDebugger::debuggerInputCallback(ConsoleDialog *console, const char *input, void *refCon) {
    146146        ScummDebugger *debugger = (ScummDebugger *)refCon;
    147        
     147
    148148        return debugger->RunCommand(input);
    149149}
    150150
     
    167167        _dvars[_dvar_count].type = type;
    168168        _dvars[_dvar_count].variable = pointer;
    169169        _dvars[_dvar_count].optional = optional;
    170        
     170
    171171        _dvar_count++;
    172172}
    173173
     
    175175        assert(_dcmd_count < (int)sizeof(_dcmds));
    176176        strcpy(_dcmds[_dcmd_count].name, cmdname);
    177177        _dcmds[_dcmd_count].function = pointer;
    178        
     178
    179179        _dcmd_count++;
    180180}
    181181
    182 // Main Debugger Loop 
     182// Main Debugger Loop
    183183void ScummDebugger::enter() {
    184184#if USE_CONSOLE
    185185        if (!_s->_debuggerDialog) {
     
    194194                free(errStr);
    195195                errStr = NULL;
    196196        }
    197        
     197
    198198        _s->_debuggerDialog->setInputeCallback(debuggerInputCallback, this);
    199199        _s->_debuggerDialog->setCompletionCallback(debuggerCompletionCallback,
    200200                                                                                           this);
     
    206206        // Or maybe instead of choosing between a console dialog and stdio,
    207207        // we should move that choice into the ConsoleDialog class - that is,
    208208        // the console dialog code could be #ifdef'ed to not print to the dialog
    209         // but rather to stdio. This way, we could also reuse the command history 
     209        // but rather to stdio. This way, we could also reuse the command history
    210210        // and tab completion of the console. It would still require a lot of
    211211        // work, but at least no dependency on a 3rd party library...
    212212
     
    236236        int i = 0, num_params = 0;
    237237        const char *param[256];
    238238        char *input = strdup(inputOrig);        // One of the rare occasions using strdup is OK (although avoiding strtok might be more elegant here).
    239        
     239
    240240        // Parse out any params
    241241        char *tok = strtok(input, " ");
    242242        if (tok) {
     
    280280                                                        } else {
    281281                                                                var[element] = atoi(param[1]);
    282282                                                                Debug_Printf("(int)%s = %d\n", param[0], var[element]);
    283                                                                
     283
    284284                                                        }
    285285                                                }
    286                                         }               
     286                                        }
    287287                                        break;
    288288
    289289                                        default:
     
    310310                                                                Debug_Printf("%s is out of range (array is %d elements big)\n", param[0], _dvars[i].optional);
    311311                                                        } else {
    312312                                                                Debug_Printf("(int)%s = %d\n", param[0], var[element]);
    313                                                                
     313
    314314                                                        }
    315315                                                }
    316316                                        }
     
    650650                _s->removeObjectFromRoom(obj);
    651651                _s->clearDrawObjectQueue();
    652652                _s->runInventoryScript(obj);
     653
     654        } else if (!strcmp(argv[2], "state")) {
     655                _s->putState(obj, atoi(argv[3]));
     656                //is BgNeedsRedraw enough?
     657                _s->_BgNeedsRedraw = TRUE;
    653658        } else {
    654                 Debug_Printf("Unknown object command '%s'\nRight now the only command is pickup", argv[2]); //change when adding commands
     659                  Debug_Printf("Unknown object command '%s'\nUse <pickup | state> as command\n", argv[2]);
    655660        }
    656661
    657662        return true;
     
    765770                                                                coords.ul.x, coords.ul.y, coords.ll.x, coords.ll.y,
    766771                                                                coords.ur.x, coords.ur.y, coords.lr.x, coords.lr.y,
    767772                                                                flags, mask, scale);
    768        
     773
    769774        // Draw the box
    770775        drawBox(box);
    771776}
     
    787792
    788793        if (x2 < x1)
    789794                SWAP(x2, x1);
    790        
     795
    791796        // Clip x1 / x2
    792797        const int left = scumm->_screenStartStrip * 8;
    793798        const int right = scumm->_screenEndStrip * 8;
     
    795800                x1 = left;
    796801        if (x2 >= right)
    797802                x2 = right - 1;
    798        
     803
    799804
    800805        ptr = vs->screenPtr + x1 + y * scumm->_screenWidth;
    801806
     
    912917                15162, 15676, 16190,    64, 16961, 17475, 17989, 18503,
    913918                   73, 19274,    76,    77, 20302, 20816, 21330,    84
    914919        };
    915                
     920
    916921        const char *notes = "cdefgabC";
    917922        int i, base, draft;
    918923