Пример #1
0
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;
}
Пример #2
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);
}