int luaGetBuffer(lua_State *l) { const char *name = lua_tostring(l, -4); size_t offset = (size_t)lua_tointeger(l, -3); const char *dataType = lua_tostring(l, -2); Enums::DataType dt = Enums::getType(dataType); int card = Enums::getCardinality(dt); Enums::DataType bdt = Enums::getBasicType(dt); IBuffer *buff = RESOURCEMANAGER->getBuffer(name); if (buff == NULL) { NAU_THROW("Lua getBuffer: invalid buffer: %s", name); return 0; } int size = Enums::getSize(dt); void *arr = malloc(size); size_t count = buff->getData(offset, size , arr); if (size != count) { NAU_THROW("Lua getBuffer: buffer %s offset %d, out of bounds", name, (unsigned int)offset); return 0; } luaGetValues(l, arr, card, bdt); return 0; }
void DlgDbgBuffers::setBufferData(){ gridBufferValues->ClearGrid(); if (currentBuffer == NO_BUFFER) { return; } int lines = bufferSettingsList[currentBuffer].lines; int page = bufferSettingsList[currentBuffer].currentPage; int lineSize = bufferSettingsList[currentBuffer].lineSize; int columns = bufferSettingsList[currentBuffer].types.size(); void *bufferValues; int pageSize = lineSize * lines; int pageOffset = page * pageSize; bufferValues = malloc(pageSize); IBuffer *b = bufferSettingsList[currentBuffer].bufferPtr; //#ifdef GLINTERCEPTDEBUG // gliSetIsGLIActive(false); //#endif int dataRead = b->getData(pageOffset, pageSize, bufferValues); //#ifdef GLINTERCEPTDEBUG // gliSetIsGLIActive(true); //#endif setSpinners(lines, columns, page, lineSize, bufferSettingsList[currentBuffer].size); int pointerIndex; std::string value; char rowLabel[32]; int k = gridBufferValues->GetNumberRows(); if (k < lines+1) gridBufferValues->AppendRows(lines+1-k); if (k > lines + 1) gridBufferValues->DeleteRows(lines + 1, k - lines - 1); k = gridBufferValues->GetNumberCols(); if ( k < columns) gridBufferValues->AppendCols(columns-k); pointerIndex = 0; for (int col = 0; col < columns; ++col) { Enums::DataType t = bufferSettingsList[currentBuffer].types[col]; std::string s = DataType[t]; gridBufferValues->SetCellValue(0, col, wxT(""+s)); gridBufferValues->ShowCol(col); } for (int col = columns; col < MAX_COLUMNS; ++col) { gridBufferValues->HideCol(col); } for (int row = 0; row < lines; ++row){ sprintf(rowLabel, "%d", row + page*lines); gridBufferValues->SetRowLabelValue(row + 1, wxString(rowLabel)); for (int col = 0; col < columns; ++col){ if (pointerIndex < dataRead){ void *ptr = (char *)bufferValues + pointerIndex; value = Enums::pointerToString(bufferSettingsList[currentBuffer].types[col], ptr); } else{ value = ""; } gridBufferValues->SetCellValue(row + 1, col, value); pointerIndex += Enums::getSize(bufferSettingsList[currentBuffer].types[col]); } } free(bufferValues); }