-
Notifications
You must be signed in to change notification settings - Fork 2
/
rawprintthread.cpp
86 lines (78 loc) · 1.95 KB
/
rawprintthread.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#include "rawprintthread.h"
#include "common.h"
#include "packet.h"
#include <QDebug>
extern QString rawText;
RawPrintThread::RawPrintThread()
{
stopped = false;
}
RawPrintThread::~RawPrintThread()
{
}
void RawPrintThread::stop()
{
stopped = true;
}
void RawPrintThread::run()
{
unsigned int i,k,l;
u_char *data=(u_char *)Globe::capPacket.OIndex->pkt_data;
rawText = QString("");
unsigned int spliter;
char *c;
char buf[4];
char textbuf[16+2];
memset(buf,0,4);
memset(textbuf,0,16+1);
spliter = 0;
//handle the hex content
for(i=0;i<Globe::capPacket.OIndex->header.len;i++)
{
if (spliter == 8) rawText += " ";
if (spliter == 16)
{
rawText += "\t";
// handle textbuf
c = (char *)&data[-spliter];
k=0;
for(l = 0;l < spliter;l++)
{
if (l==8) textbuf[k++] = ' ';
if(isprint(*c)) textbuf[k++]=*c;
else textbuf[k++] = '.';
c++;
}
textbuf[16+1]='\0';
// end handle textbuf
rawText += QString(textbuf);
rawText += "\n";
spliter = 0;
}
sprintf(buf,"%02X ",*data);
rawText += QString(buf);
spliter++;
data++;
} // for
//fill the gap
for(i = ((16*3) - spliter*3);i;i--) rawText += " ";
// append the textbuf
rawText += "\t";
// handle textbuf
c = (char *)&data[-spliter];
k = 0;
for(l = 0;l < spliter;l++)
{
if (l==8) textbuf[k++] = ' ';
if(isprint(*c)) textbuf[k++]=*c;
else textbuf[k++] = '.';
c++;
}
// end handle textbuf
textbuf[spliter<17?spliter:17]='\0';
rawText += QString(textbuf);
rawText += "\n";
spliter = 0;
emit RawPrintDone();
qDebug() << "emit RawPrintDone";
}