static Proto* LoadFunction (lua_State* L, ZIO* Z, int swap) { Proto* tf=luaF_newproto(L); tf->source=LoadString(L,Z,swap); tf->lineDefined=LoadInt(L,Z,swap); tf->numparams=LoadInt(L,Z,swap); tf->is_vararg=LoadByte(L,Z); tf->maxstacksize=LoadInt(L,Z,swap); LoadLocals(L,tf,Z,swap); LoadLines(L,tf,Z,swap); LoadConstants(L,tf,Z,swap); LoadCode(L,tf,Z,swap); return tf; }
static Proto* LoadFunction (LoadState* S, TString* p) { Proto* f=luaF_newproto(S->L); f->source=LoadString(S); if (f->source==NULL) f->source=p; f->lineDefined=LoadInt(S); f->nups=LoadByte(S); f->numparams=LoadByte(S); f->is_vararg=LoadByte(S); f->maxstacksize=LoadByte(S); LoadLines(S,f); LoadLocals(S,f); LoadUpvalues(S,f); LoadConstants(S,f); LoadCode(S,f); #ifndef TRUST_BINARIES if (!luaG_checkcode(f)) luaG_runerror(S->L,"bad code in %s",S->name); #endif return f; }
static Proto* LoadFunction(LoadState* S, TString* p) { Proto* f=luaF_newproto(S->L); setptvalue2s(S->L,S->L->top,f); incr_top(S->L); f->source=LoadString(S); if (f->source==NULL) f->source=p; f->linedefined=LoadInt(S); f->lastlinedefined=LoadInt(S); f->nups=LoadByte(S); f->numparams=LoadByte(S); f->is_vararg=LoadByte(S); f->maxstacksize=LoadByte(S); LoadLines(S,f); LoadLocals(S,f); LoadUpvalues(S,f); LoadConstants(S,f); LoadCode(S,f); IF (!luaG_checkcode(f), "bad code"); S->L->top--; return f; }
LRESULT CALLBACK WatchWndProc(HWND hwnd, UINT iMessage, WPARAM wParam, LPARAM lParam) { WATCHDATA *ptr; static POINT menupos; static char buf[256]; RECT r, *pr; WINDOWPOS wp; HD_ITEM hie; HD_LAYOUT hdl; NMHDR *h; DRAWITEMSTRUCT *dr; HBITMAP hbmp; HDC hMemDC; TCHeader tch; TV_ITEM item; TV_INSERTSTRUCT t; static int sizingbottom; int offset; DEBUG_INFO *dbg; NM_TREEVIEW *nmt; VARINFO *var; HWND win; int level; int offset1; int doit; int i; CHARRANGE charrange; switch (iMessage) { case WM_SYSCOMMAND: if (wParam == SC_CLOSE) { PostMessage(hwnd, WM_CLOSE, 0, 0); return 0; } break; case WM_NOTIFY: ptr = (WATCHDATA *)GetWindowLong(hwnd, 0); h = (NMHDR*)lParam; switch (h->code) { case NM_RCLICK: { if (ptr->DID != DID_LOCALSWND) { HMENU menu = LoadMenuGeneric(hInstance, "WATCHMENU"); HMENU popup = GetSubMenu(menu, 0); TV_HITTESTINFO t; HTREEITEM titem; GetCursorPos(&t.pt); ScreenToClient(ptr->hwndWatchTree, &t.pt); titem = TreeView_HitTest(ptr->hwndWatchTree, &t); if (!titem || TreeView_GetParent(ptr->hwndWatchTree, titem)) { EnableMenuItem(popup, IDM_DELETEWATCH, MF_GRAYED); } InsertBitmapsInMenu(popup); GetCursorPos(&menupos); TrackPopupMenuEx(popup, TPM_BOTTOMALIGN | TPM_LEFTBUTTON, menupos.x, menupos.y, hwndFrame, NULL); DestroyMenu(menu); lastWatch = ptr->DID; } SetFocus(ptr->hwndWatchTree); } return 0; case TVN_ITEMEXPANDING: nmt = (LPNMTREEVIEW)h; if (nmt->action) { ExpandPointer((VARINFO*)nmt->itemNew.lParam, nmt->action, ptr); } return 0; case TCN_EDITQUERY: nmt = (LPNMTREEVIEW)h; item.mask = TVIF_PARAM; item.hItem = (HTREEITEM)nmt->itemNew.hItem; TreeView_GetItem(ptr->hwndWatchTree, &item); var = (VARINFO*)item.lParam; if (var->editable) { WatchValue(ptr->watchinfo_list[var->watchindex].dbg_info, buf, var, TRUE); return buf; } return 0; case TCN_EDITDONE: nmt = (LPNMTREEVIEW)h; item.mask = TVIF_PARAM; item.hItem = (HTREEITEM)nmt->itemNew.hItem; TreeView_GetItem(ptr->hwndWatchTree, &item); var = (VARINFO*)item.lParam; ChangeData(var, nmt->itemNew.pszText, ptr); RefreshItems(ptr); return 0; } break; case WM_CREATE: ptr = (WATCHDATA *)calloc(sizeof(WATCHDATA),1); SetWindowLong(hwnd, 0, (long)ptr); GetClientRect(hwnd, &r); tch.colText1 = "Item"; tch.colText2 = "Value"; tch.colBmp1 = itemBitmap; tch.colBmp2 = valueBitmap; ptr->hwndWatchTree = CreateextTreeWindow(hwnd, WS_DLGFRAME | TCS_LINE | WS_VISIBLE, &r, &tch); return 0; case WM_ADDWATCHINDIRECT: ptr = (WATCHDATA *)GetWindowLong(hwnd, 0); win = (HWND)wParam; doit = FALSE; SendMessage(win, EM_EXGETSEL, (WPARAM)0, (LPARAM) &charrange); if (charrange.cpMin == charrange.cpMax) { doit = SendMessage(win, WM_WORDUNDERPOINT, (WPARAM)&rightclickPos, (LPARAM)buf); if (!doit) { PostMessage(hwndFrame, WM_COMMAND, IDM_ADDWATCH, 0); break; } } else { if (charrange.cpMax - charrange.cpMin < sizeof(buf) ||charrange.cpMin - charrange.cpMax < sizeof(buf)) { SendMessage(win, EM_GETSELTEXT, 0, (LPARAM)buf); doit = TRUE ; } } if (doit) { var = EvalExpr(&dbg, activeScope, (char*) buf, TRUE); if (var) { AddItem(dbg, var, activeScope->address, ptr); SelectWindow(ptr->DID); break ; } } ExtendedMessageBox("Error", MB_SETFOREGROUND | MB_SYSTEMMODAL, "Symbol does not exist in this scope"); break; case WM_ADDWATCH: ptr = (WATCHDATA *)GetWindowLong(hwnd, 0); offset = wParam; if (!offset) { DeleteAllItems(ptr); } else { var = EvalExpr(&dbg, activeScope, (char*) lParam, TRUE); if (var) { AddItem(dbg, var, activeScope->address, ptr); SelectWindow(ptr->DID); } } break; case WM_INITIALSTACK: ptr = (WATCHDATA *)GetWindowLong(hwnd, 0); ptr->refreshNeeded = TRUE; break; case WM_COMMAND: ptr = (WATCHDATA *)GetWindowLong(hwnd, 0); switch (wParam) { case ID_SETADDRESS: if (ptr->DID == DID_LOCALSWND) LoadLocals(ptr); if (ptr->refreshNeeded) ReloadVars(ptr); else RefreshItems(ptr); ptr->refreshNeeded = FALSE; InvalidateRect(ptr->hwndWatchTree, 0, 0); break; case IDM_DELETEWATCH: DeleteItem(&menupos, ptr); break; case IDM_DELETEALLWATCH: DeleteAllItems(ptr); break; } break; case WM_DESTROY: ptr = (WATCHDATA *)GetWindowLong(hwnd, 0); TreeView_DeleteAllItems(ptr->hwndWatchTree); DestroyWindow(ptr->hwndWatchTree); DeleteObject(valueBitmap); DeleteObject(itemBitmap); break; case WM_SIZE: ptr = (WATCHDATA *)GetWindowLong(hwnd, 0); r.left = 0; r.right = LOWORD(lParam); r.top = 0; r.bottom = HIWORD(lParam); MoveWindow(ptr->hwndWatchTree, r.left, r.top, r.right - r.left, r.bottom - r.top, 0); return 0; case WM_CLOSE: break; case WM_ACTIVATEME: ptr = (WATCHDATA *)GetWindowLong(hwnd, 0); if (ptr->DID != DID_LOCALSWND) lastWatch = ptr->DID; SendMessage(GetParent(hwnd), WM_ACTIVATEME, 0, 0); break; } return DefWindowProc(hwnd, iMessage, wParam, lParam); }