#include <iostream>
#include <fstream>
//#include <ios>
#include <iomanip>
#include <cctype>
using namespace std;
void hd( istream&, ostream& );
void printline( ostream&, long, char*, int);
const int char_in_line = 16;
int main( int argc, char *argv[])
{
int retval = 0;
if ( argc < 2 )
hd( cin, cout);
else
for ( int i = 1; i < argc; ++i )
{
ifstream inp(argv[i]);
if ( !inp )
{
cerr << "Can't open file " << argv[i] << " for read" << endl;
++retval;
}
else
{
hd( inp, cout);
}
}
return 0;
}
void hd( istream& inp, ostream& outp)
{
char buffer[char_in_line];
long addr = 0L;
int cnt = 0;
// inp.unsetf(ios_base::skipws);
while ( inp.get(buffer[cnt++]) )
{
if ( 16 == cnt )
{
printline( outp, addr, buffer, cnt);
addr += cnt;
cnt = 0;
}
}
printline( outp, addr, buffer, cnt);
}
void printline( ostream& out, long addr, char *buffer, int cnt)
{
if ( 0 == cnt )
return;
out << hex << setw(8) << setfill('0') << addr << " ";
for ( int i = 0; i < cnt; ++i)
out << ' ' << setw(2) << setfill('0')
<< hex << (buffer[i] & 0xff);
for ( int i = cnt; i < char_in_line; ++i)
out << " ";
out << " ";
for ( int i = 0; i < cnt; ++i)
out << (isgraph(buffer[i]) ? buffer[i] : '.');
out << endl;
}