From 310a2c101b32a5e71a616027b6a1b788a341bc02 Mon Sep 17 00:00:00 2001 From: manuel Date: Tue, 5 Mar 2013 17:39:48 +0100 Subject: initial GPLv2 release --- wxbufferex.cpp | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 wxbufferex.cpp (limited to 'wxbufferex.cpp') diff --git a/wxbufferex.cpp b/wxbufferex.cpp new file mode 100644 index 0000000..78bd167 --- /dev/null +++ b/wxbufferex.cpp @@ -0,0 +1,80 @@ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + * Authors: Manuel Mausz (manuel@mausz.at) + * Christian Raschko (c.raschko@netcore.at) + */ + +// Header +#include "wxbufferex.h" + +//Libraries +#include + +//------------------------------------------------------------------------------ +// Hex dump on the stream. +void wxMemoryBufferEx::HexDump(wxOutputStream &strm) +{ + wxTextOutputStream out(strm); + const size_t colums = 16; + size_t size = GetDataLen(); + + //print all data + for(size_t i = 0; i < ((size % colums == 0) ? (size / colums) : (size / colums) + 1); i++) + { + //address + out << wxString::Format(_T("%.4x "), i * colums); + + //print hex table + for(size_t j = 0; j < colums; j++) + { + if(j == colums/2) + out << _T(" "); + + if(j + i*colums >= size) + { + out << _T(" "); + } + else + { + wxByte *pos = static_cast(GetData()); + pos += (j + i * colums); + out << wxString::Format(_T(" %.2x"), *pos); + } + } + + //seperator + out << _T(" "); + + //print ascii + for(size_t j = 0; j < colums; j++) + { + if(j == colums/2) + out << _T(" "); + if(j + i*colums >= size) + { + out << _T(" "); + } + else + { + wxByte *pos = static_cast(GetData()); + pos += ( j + i * colums); + out << wxString::Format(_T("%c"), (wxIsprint(*pos) ? *pos : '.')); + } + } + + out << endl; + } +} + -- cgit v1.2.3