std::string VLDDexporter::CommandProcessor::RunCommands(InputProcessor& data){
	// let's run filters on the input data //
	_FilterInputData(data);

	// run the routine with the loaded parameters //
	// output spreadsheet //
	BasicExcel xls;

	// workbook sheets:
	// hot files, hot functions, summary, leaked blocks
	xls.New(4);

	// create hot files sheet //
	BasicExcelWorksheet* hotfilessheet = xls.GetWorksheet(0);
	hotfilessheet->Rename("Hot files");

	// hot functions sheet //
	BasicExcelWorksheet* hotfunctions = xls.GetWorksheet(1);
	hotfunctions->Rename("Hot functions");

	// summary sheet //
	//BasicExcelWorksheet* summarysheet = xls.GetWorksheet(2);
	//summarysheet->Rename("Summary");

	// leaked blocks //
	//BasicExcelWorksheet* leakedblocks = xls.GetWorksheet(3);
	//leakedblocks->Rename("Leaked blocks");


	XLSFormatManager fmt_mgr(xls);

	// create required fonts //
	ExcelFont fontheader;
	fontheader._weight = FW_BOLD;
	//fontheader._color_index = 
	ExcelFont fontdata;
	fontheader._weight = FW_NORMAL;

	CellFormat fmtheader(fmt_mgr);
	fmtheader.set_font(fontheader);

	CellFormat fmtdata(fmt_mgr);
	fmtdata.set_font(fontdata);

	int Row = 0;
	int Col = 0;

	// hot files //
	for(Col = 0; Col < 4; Col++){
		// get current cell //
		BasicExcelCell* cell = hotfilessheet->Cell(Row, Col);

		switch(Col){
		case 0: { cell->Set("File"); } break;
		case 1: { cell->Set("Blame count"); } break;
		case 2: { cell->Set("Lines"); } break;
		case 3: { cell->Set("Blame gathering function"); } break;
		}


		cell->SetFormat(fmtheader);
	}
	// set proper widths //
	hotfilessheet->SetColWidth(0, 24000);
	hotfilessheet->SetColWidth(1, 5000);
	hotfilessheet->SetColWidth(2, 6000);
	hotfilessheet->SetColWidth(3, 10000);

	// output data //
	for(size_t i = 0; i < data.LeakingFiles.size(); i++){
		// increase row //
		Row++;

		CallstackFileEntry* file = data.LeakingFiles[i].get();

		for(Col = 0; Col < 4; Col++){
			// get current cell //
			BasicExcelCell* cell = hotfilessheet->Cell(Row, Col);


			switch(Col){
			case 0: { cell->Set(file->PathOrName.c_str()); } break;
			case 1: { cell->SetInteger(file->BlameCount); } break;
			case 2: 
				{
					string lines;

					for(size_t a = 0; a < file->LeakLines.size(); a++){
						if(a != 0)
							lines += ", ";
						stringstream converter;
						converter << file->LeakLines[a];
						string tmpstr = "";
						converter >> tmpstr;
						lines += tmpstr;
					}
					cell->Set(lines.c_str()); 
				}
				break;
			case 3: { cell->Set(file->FunctionsInfile[0]->Name.c_str()); } break;
			}


			cell->SetFormat(fmtdata);
		}
	}

	Row = 0;
	Col = 0;
	// output hot functions //
	for(Col = 0; Col < 4; Col++){
		// get current cell //
		BasicExcelCell* cell = hotfunctions->Cell(Row, Col);

		switch(Col){
		case 0: { cell->Set("Function"); } break;
		case 1: { cell->Set("Blame count"); } break;
		case 2: { cell->Set("File"); } break;
		case 3: { cell->Set("Line"); } break;
		}


		cell->SetFormat(fmtheader);
	}

	// set proper widths //
	hotfunctions->SetColWidth(0, 32000);
	hotfunctions->SetColWidth(1, 5000);
	hotfunctions->SetColWidth(2, 24000);

	// output data //
	for(size_t i = 0; i < data.LeakingFunctions.size(); i++){
		// increase row //
		Row++;

		CallstackFunction* func = data.LeakingFunctions[i].get();

		for(Col = 0; Col < 4; Col++){
			// get current cell //
			BasicExcelCell* cell = hotfunctions->Cell(Row, Col);

			switch(Col){
			case 0: { cell->Set(func->Name.c_str()); } break;
			case 1: { cell->SetInteger(func->BlameCount); } break;
			case 2: { cell->Set(func->ContainedInFile->PathOrName.c_str()); } break;
			case 3: { cell->SetInteger(func->Line); } break;
			}


			cell->SetFormat(fmtdata);
		}

	}

	string finaloutput = OutputFilePath+OutputFile;

	// delete old first //
	wstringstream sstream;
	sstream << finaloutput.c_str();
	wstring path;
	sstream >> path;

	DeleteFile((L"\\\\?\\"+path).c_str());

	// save file //
	xls.SaveAs(finaloutput.c_str());

	// return the created output //
	return OutputFilePath+OutputFile;
}