bool V8PerContextDebugData::setContextDebugData(v8::Handle<v8::Context> context, const char* worldName, int debugId)
{
    if (!debugData(context)->IsUndefined())
        return false;
    v8::HandleScope scope(context->GetIsolate());
    v8::Handle<v8::Value> debugData = createDebugData(worldName, debugId, context->GetIsolate());
    setDebugData(context, debugData);
    return true;
}
bool wxLuaSocketBase::ReadDebugData(wxLuaDebugData& value)
{
    wxLuaDebugData debugData(true);

    wxInt32 idx, idxMax = 0;
    bool ok = ReadInt32(idxMax);

    wxLuaSocketDebugMsg(m_name + wxT(" wxLuaSocketBase::ReadDebugData"), wxString::Format(wxT("items %d"), idxMax));

    for (idx = 0; ok && (idx < idxMax); ++idx)
    {
        wxInt32 bufferLength = 0;
        ok = Read((char*)&bufferLength, sizeof(wxInt32)) == sizeof(wxInt32);

        if (ok && (bufferLength > 0))
        {
            char *pBuffer = new char[bufferLength];
            char *pMemory = pBuffer;
            ok = Read(pMemory, bufferLength) == bufferLength;
            if (!ok) break;

            wxInt32 nReference = *(wxInt32 *) pMemory;
            pMemory += sizeof(wxInt32);

            wxInt32 nIndex = *(wxInt32 *) pMemory;
            pMemory += sizeof(wxInt32);

            wxInt32 flag = *(wxInt32 *) pMemory;
            pMemory += sizeof(wxInt32);

            wxInt32 keyType = *(wxInt32 *) pMemory;
            pMemory += sizeof(wxInt32);

            wxInt32 valueType = *(wxInt32 *) pMemory;
            pMemory += sizeof(wxInt32);

            const char *pKeyPtr = pMemory;
            pMemory += strlen(pKeyPtr) + 1;
            const char *pValuePtr = pMemory;
            pMemory += strlen(pValuePtr) + 1;
            const char *pSourcePtr = pMemory;

            wxLuaDebugItem *pItem = new wxLuaDebugItem(lua2wx(pKeyPtr), keyType,
                                                       lua2wx(pValuePtr), valueType,
                                                       lua2wx(pSourcePtr),
                                                       nReference,
                                                       nIndex,
                                                       flag);
            debugData.Add(pItem);

            delete[] pBuffer;
        }
    }

    if (ok) value = debugData;
    return ok;
}
示例#3
0
bool wxLuaDebugTarget::EnumerateTable(int tableRef, int nIndex, long nItemNode)
{
    wxLuaDebugData debugData(true);

    EnterLuaCriticalSection();
    debugData.EnumerateTable(m_wxlState.GetLuaState(), tableRef, nIndex, m_references);
    LeaveLuaCriticalSection();

    return NotifyTableEnumeration(nItemNode, debugData);
}
示例#4
0
bool wxLuaDebugTarget::EnumerateStackEntry(int stackRef)
{
    wxLuaDebugData debugData(true);

    EnterLuaCriticalSection();
    debugData.EnumerateStackEntry(m_wxlState.GetLuaState(), stackRef, m_references);
    LeaveLuaCriticalSection();

    return NotifyStackEntryEnumeration(stackRef, debugData);
}
示例#5
0
bool wxLuaDebugTarget::EnumerateStack()
{
    wxLuaDebugData debugData(true);

    EnterLuaCriticalSection();
    debugData.EnumerateStack(m_wxlState.GetLuaState());
    LeaveLuaCriticalSection();

    return NotifyStackEnumeration(debugData);
}
int V8PerContextDebugData::contextDebugId(v8::Handle<v8::Context> context)
{
    v8::HandleScope scope(context->GetIsolate());
    v8::Handle<v8::Value> data = debugData(context);

    if (!data->IsString())
        return -1;
    v8::String::Utf8Value utf8(data);
    char* comma = strnstr(*utf8, ",", utf8.length());
    if (!comma)
        return -1;
    return atoi(comma + 1);
}
示例#7
0
文件: BOFH.cpp 项目: orbisvicis/prime
void
shHero::useBOFHPower ()
{
    shMenu *menu = I->newMenu ("[~]# _", 0);
    int choice;

    menu->addIntItem ('b', "buff up", 8);
    menu->addIntItem ('d', "diagnostics", 12);
    menu->addIntItem ('i', "identify items", 1);
    menu->addIntItem ('l', "gain level", 2);
    menu->addIntItem ('h', "fully heal, restore psi", 18);
    menu->addIntItem ('f', "create feature", 10);
    menu->addIntItem ('m', "create monster", 3);
    menu->addIntItem ('o', "create object", 4);
    menu->addIntItem ('r', "reveal map", 5);
    menu->addIntItem ('G', "debug file", 17);
    menu->addIntItem ('s', "monster spoilers", 6);
    menu->addIntItem ('t', "transport", 7);
    menu->addIntItem ('T', "level transport", 9);
    menu->addIntItem ('e', "excavate", 19);
    //menu->addIntItem ('R', "show RoomIDs", 11);
    menu->addIntItem ('D', "switch room darkness", 16);
    menu->addIntItem ('M', "choose mutations", 15);
    menu->addIntItem ('F', "alter story flag", 13);
    menu->addIntItem ('v', "toggle invisibility", 14);
    menu->addIntItem ('B', "switch body", 20);

    menu->getIntResult (&choice);
    delete menu;

    shCreature *h = mCreature;
    switch (choice) {
    case 1:
        identifyObjects (-1, 0);
        break;
    case 2:
        h->mXP += 1000;
        h->levelUp ();
        break;
    case 3: wish_up_monster (); break;
    case 4:
    {
        char *desc = GetBuf ();
        I->getStr (desc, 80, "Create what object?");
        if (!strlen (desc))  return;
        shObject *obj = createObject (desc);
        if (obj) {
            if (!h->intr (kBlind)) {
                obj->set (obj::known_appearance);
            }
            if (!h->addObjectToInventory (obj)) {
                I->p ("The object slips from your hands!");
                Level->putObject (obj, h->mX, h->mY);
            }
        } else {
            I->p ("%s not found in object list.", desc);
        }
        break;
    }
    case 5:
        Level->reveal (0);
        for (int x = 0; x < MAPMAXCOLUMNS; ++x) {
            for (int y = 0; y < MAPMAXROWS; ++y) {
                Level->mVisibility[x][y] = 1;
                Level->setLit (x, y);
            }
        }
        I->drawScreen ();
        I->p ("Map revealed.");
        break;
    case 6:
        monsterSpoilers ();
        break;
    case 7:
    {
        int x = -1, y = -1;
        bool success;
        if (I->getSquare ("Transport to what location?", &x, &y, -1))
            success = trn::BOFH (h, x, y);
        else
            break;
        if (!success)
            I->p ("Transport failed - site too densely occupied.");
        break;
    }
    case 8:
    {
        const char *zappo = "optimized (20 charges) disintegration ray gun";
        h->mMaxHP += 100;
        h->mHP = h->mMaxHP;
        h->addObjectToInventory (createObject (zappo));
        break;
    }
    case 9:
    {
        shMenu *lmenu = I->newMenu ("Warp to what level?", 0);
        shMapLevel *L;
        for (int i = 1; i < Maze.count (); i++) {
            L = Maze.get (i);
            char let = i <= 26 ? i + 'a' - 1 : i + 'A' - 27;
            lmenu->addPtrItem (let, L->mName, L, 1);
        }
        lmenu->getPtrResult ((const void **) &L);
        delete lmenu;
        if (L)  Level->warpCreature (h, L);
        break;
    }
    case 10:
    {
        shFeature::Type t;
        int x = h->mX, y = h->mY;
        shMenu *fmenu = I->newMenu ("Create what kind of feature?", 0);
        fmenu->addIntItem ('a', "acid pit trap", shFeature::kAcidPit, 1);
        fmenu->addIntItem ('p', "pit trap", shFeature::kPit, 1);
        fmenu->addIntItem ('s', "sewage pit trap", shFeature::kSewagePit, 1);
        fmenu->addIntItem ('r', "radiation trap", shFeature::kRadTrap, 1);
        fmenu->addIntItem ('A', "ACME sign", shFeature::kACMESign, 1);
        fmenu->addIntItem ('g', "floor grating", shFeature::kFloorGrating, 1);
        fmenu->addIntItem ('h', "hole", shFeature::kHole, 1);
        fmenu->addIntItem ('t', "trap door", shFeature::kTrapDoor, 1);
        fmenu->addIntItem ('v', "vat of sludge", shFeature::kVat, 1);
        fmenu->addIntItem ('d', "door", shFeature::kDoorOpen, 1);
        fmenu->getIntResult ((int *) &t);
        delete fmenu;
        if (!t) {
            return;
        }
        if (0 == I->getSquare ("Put it where? (select a location)",
                               &x, &y, -1))
        {
            return;
        }
        switch (t) {
        case shFeature::kVat:
            Level->addVat (x, y);
            break;
        case shFeature::kDoorOpen:
            Level->addFeature (buildDoor (x, y));
            break;
        default:
            Level->addTrap (x, y, t);
            break;
        }
        break;
    }
    case 11:
        showRooms ();
        return;
    case 12:
    {
        shCreature *c;
        int x = h->mX, y = h->mY;
        if (I->getSquare ("Diagnose whom?", &x, &y, -1)) {
            if ((c = Level->getCreature (x, y))) {
                c->doDiagnostics (0);
            } else {
                I->p ("There is no one here.");
            }
        }
        return;
    }
    case 13:
    {
        char name[50];
        int val;
        I->getStr (name, 30, "Check what story flag?");
        if (strlen (name) == 0) {
            I->p ("Cancelled.");
            return;
        }
        val = getStoryFlag(name);
        if (!val) I->p ("Such story flag has not been set.");
        else      I->p ("Flag has value %d.", val);
        if (I->yn ("Alter it?")) {
            char number[15];
            I->getStr (number, 10, "To what value?");
            int read = sscanf(number, "%d", &val);
            if (strlen (number) == 0 or !read) {
                I->p ("Cancelled.");
                return;
            }
            setStoryFlag(name, val);
            I->p ("Flag set.");
        }
        break;
    }
    case 14:
        h->mInnateIntrinsics.toggle (kInvisible);
        h->computeIntrinsics ();
        break;
    case 15:
    {
        shMenu *fmenu = I->newMenu ("Toggle mutations:", shMenu::kMultiPick);
        char letter = 'a';
        for (int power = kNoMutantPower; power < kMaxHeroPower; ++power)
            /* List implemented but not activated persistent powers. */
            if (MutantPowers[power].mFunc and
                h->mMutantPowers[power] != MUT_POWER_ON)
            {
                fmenu->addIntItem (letter++, MutantPowers[power].mName,
                    power, 1, h->mMutantPowers[power] > 0);
                if (letter == 'z' + 1)  letter = 'A';
                /* Remove powers.  Selected entries will be added back. */
                h->mMutantPowers[power] = 0;
            }
        int input;
        do {
            int index;
            input = fmenu->getIntResult (&index);
            if (index)  h->mMutantPowers[index] = 1;
        } while (input);
        delete fmenu;
        break;
    }
    case 16:
        switchDarkness ();
        break;
    case 17:
        debugData ();
        break;
    case 18:
    {   /* Unblind, restore health and psi drain. */
        int lost;
        if ((lost = h->mAbil.temp (abil::Psi)) < 0)
            h->mAbil.temp_mod (abil::Psi, -lost);

        h->fullHealing (100, 0);
        shCreature::TimeOut *t = h->getTimeOut (BLINDED);
        if (t) {
            t->mWhen = 0;
            h->checkTimeOuts ();
        }
        break;
    }
    case 19:
    {
        int x = h->mX, y = h->mY;
        if (!I->getSquare ("Where? (select a location)", &x, &y, -1))  return;
        Level->dig (x, y);
        break;
    }
    case 20:
    {
        int x = h->mX, y = h->mY;
        if (!I->getSquare ("With whom? (select a creature)", &x, &y, -1)) {
            I->nevermind ();
            return;
        }
        shCreature *c = Level->getCreature (x, y);
        if (!c or c->isHero ()) {
            I->nevermind ();
            return;
        }
        Hero.mCreature = c;
        break;
    }
    }
    I->drawScreen ();
}
示例#8
0
// This function shouldn't modify any internal variables without using a
// critical section since the wxLuaDebuggerCServer calls it from the thread.
int wxLuaDebuggerBase::HandleDebuggeeEvent(int event_type)
{
    wxCHECK_MSG(GetSocketBase(), event_type, wxT("Invalid socket"));

    //wxLuaDebuggerEvent d(wxEVT_WXLUA_DEBUGGER_PRINT, this);
    //d.SetMessage(wxT("wxLuaDebugger : ") + wxLuaSocketCmdEventMsg(event_type));
    //SendEvent(d);

    switch (event_type)
    {
        case wxLUA_DEBUGGEE_EVENT_BREAK:
        {
            wxString fileName;
            wxInt32  lineNumber = 0;

            if (CheckSocketRead(
                GetSocketBase()->ReadString(fileName) &&
                GetSocketBase()->ReadInt32(lineNumber),
                wxT("Debugger wxLUA_DEBUGGEE_EVENT_BREAK")))
            {
                wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_BREAK, this, lineNumber, fileName);
                SendEvent(debugEvent);
            }
            else return -1;

            break;
        }
        case wxLUA_DEBUGGEE_EVENT_PRINT:
        {
            wxString strMessage;

            if (CheckSocketRead(
                GetSocketBase()->ReadString(strMessage),
                wxT("Debugger wxLUA_DEBUGGEE_EVENT_PRINT")))
            {
                wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_PRINT, this);
                debugEvent.SetMessage(strMessage);
                SendEvent(debugEvent);
            }
            else return -1;

            break;
        }
        case wxLUA_DEBUGGEE_EVENT_ERROR:
        {
            wxString strMessage;

            if (CheckSocketRead(
                GetSocketBase()->ReadString(strMessage),
                wxT("Debugger wxLUA_DEBUGGEE_EVENT_ERROR")))
            {
                wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_ERROR, this);
                debugEvent.SetMessage(strMessage);
                SendEvent(debugEvent);
            }
            else return -1;

            break;
        }
        case wxLUA_DEBUGGEE_EVENT_EXIT:
        {
            wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_EXIT, this);
            wxPostEvent(this, debugEvent);
            break;
        }
        case wxLUA_DEBUGGEE_EVENT_STACK_ENUM:
        {
            wxLuaDebugData debugData(true);

            if (CheckSocketRead(
                GetSocketBase()->ReadDebugData(debugData),
                wxT("Debugger wxLUA_DEBUGGEE_EVENT_STACK_ENUM")))
            {
                wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_STACK_ENUM, this);
                debugEvent.SetDebugData(-1, debugData);
                SendEvent(debugEvent);
            }
            else return -1;

            break;
        }
        case wxLUA_DEBUGGEE_EVENT_STACK_ENTRY_ENUM:
        {
            wxInt32 stackRef = 0;
            wxLuaDebugData debugData(true);

            if (CheckSocketRead(
                GetSocketBase()->ReadInt32(stackRef) &&
                GetSocketBase()->ReadDebugData(debugData),
                wxT("Debugger wxLUA_DEBUGGEE_EVENT_STACK_ENTRY_ENUM")))
            {
                wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_STACK_ENTRY_ENUM, this);
                debugEvent.SetDebugData(stackRef, debugData);
                SendEvent(debugEvent);
            }
            else return -1;

            break;
        }
        case wxLUA_DEBUGGEE_EVENT_TABLE_ENUM:
        {
            long itemNode = 0;
            wxLuaDebugData debugData(true);

            if (CheckSocketRead(
                GetSocketBase()->ReadLong(itemNode) &&
                GetSocketBase()->ReadDebugData(debugData),
                wxT("Debugger wxLUA_DEBUGGEE_EVENT_TABLE_ENUM")))
            {
                wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_TABLE_ENUM, this);
                debugEvent.SetDebugData(itemNode, debugData);
                SendEvent(debugEvent);
            }
            else return -1;

            break;
        }
        case wxLUA_DEBUGGEE_EVENT_EVALUATE_EXPR:
        {
            wxInt32 exprRef = 0;
            wxString strResult;

            if (CheckSocketRead(
                GetSocketBase()->ReadInt32(exprRef) &&
                GetSocketBase()->ReadString(strResult),
                wxT("Debugger wxLUA_DEBUGGEE_EVENT_EVALUATE_EXPR")))
            {
                wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_EVALUATE_EXPR, this);
                debugEvent.SetMessage(strResult);
                debugEvent.SetDebugData(exprRef);
                SendEvent(debugEvent);
            }
            else return -1;

            break;
        }
        default : return -1; // don't know this event?
    }

    return event_type;
}