summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/apps/opie-reader/plucker_base.cpp6
1 files changed, 4 insertions, 2 deletions
diff --git a/noncore/apps/opie-reader/plucker_base.cpp b/noncore/apps/opie-reader/plucker_base.cpp
index 81614f5..849edfc 100644
--- a/noncore/apps/opie-reader/plucker_base.cpp
+++ b/noncore/apps/opie-reader/plucker_base.cpp
@@ -1,447 +1,449 @@
1#include <stdio.h> 1#include <stdio.h>
2#include <string.h> 2#include <string.h>
3#include <qmessagebox.h> 3#include <qmessagebox.h>
4#include <qpixmap.h> 4#include <qpixmap.h>
5#ifdef USEQPE 5#ifdef USEQPE
6#include <qpe/qcopenvelope_qws.h> 6#include <qpe/qcopenvelope_qws.h>
7#endif /* USEQPE */ 7#endif /* USEQPE */
8#ifdef LOCALPICTURES 8#ifdef LOCALPICTURES
9#include <qscrollview.h> 9#include <qscrollview.h>
10#endif 10#endif
11#ifdef USEQPE 11#ifdef USEQPE
12#include <qpe/global.h> 12#include <qpe/global.h>
13#endif /* USEQPE */ 13#endif /* USEQPE */
14#include <qclipboard.h> 14#include <qclipboard.h>
15#ifndef USEQPE 15#ifndef USEQPE
16#include <qapplication.h> 16#include <qapplication.h>
17#else /* USEQPE */ 17#else /* USEQPE */
18#include <qpe/qpeapplication.h> 18#include <qpe/qpeapplication.h>
19#endif /* USEQPE */ 19#endif /* USEQPE */
20#include <qimage.h> 20#include <qimage.h>
21 21
22#include "plucker_base.h" 22#include "plucker_base.h"
23#include "Aportis.h" 23#include "Aportis.h"
24#include "hrule.h" 24#include "hrule.h"
25#include "decompress.h" 25#include "decompress.h"
26 26
27const UInt8 CPlucker_base::continuation_bit = 1; 27const UInt8 CPlucker_base::continuation_bit = 1;
28 28
29CPlucker_base::CPlucker_base() : 29CPlucker_base::CPlucker_base() :
30#ifdef LOCALPICTURES 30#ifdef LOCALPICTURES
31 m_viewer(NULL), 31 m_viewer(NULL),
32 m_picture(NULL), 32 m_picture(NULL),
33#endif 33#endif
34 expandedtextbuffer(NULL), 34 expandedtextbuffer(NULL),
35 compressedtextbuffer(NULL), 35 compressedtextbuffer(NULL),
36 bufferrec(-1), 36 bufferrec(-1),
37 m_offset(0) 37 m_offset(0)
38 //, urls(NULL) 38 //, urls(NULL)
39{ /*printf("constructing:%x\n",fin);*/ } 39{ /*printf("constructing:%x\n",fin);*/ }
40 40
41 41
42void CPlucker_base::Expand(UInt32 reclen, UInt8 type, UInt8* buffer, UInt32 buffersize) 42void CPlucker_base::Expand(UInt32 reclen, UInt8 type, UInt8* buffer, UInt32 buffersize)
43{ 43{
44unsuspend(); 44unsuspend();
45 if ((type%2 == 0) && (type != 14)) 45 if ((type%2 == 0) && (type != 14))
46 { 46 {
47 fread(buffer, reclen, sizeof(char), fin); 47 size_t bytes_read = fread(buffer, reclen, sizeof(char), fin);
48 buffer[bytes_read] = '\0';
48 } 49 }
49 else 50 else
50 { 51 {
51 UInt8* readbuffer = NULL; 52 UInt8* readbuffer = NULL;
52 if (reclen > compressedbuffersize) 53 if (reclen > compressedbuffersize)
53 { 54 {
54 readbuffer = new UInt8[reclen]; 55 readbuffer = new UInt8[reclen];
55 } 56 }
56 else 57 else
57 { 58 {
58 readbuffer = compressedtextbuffer; 59 readbuffer = compressedtextbuffer;
59 } 60 }
60 if (readbuffer != NULL) 61 if (readbuffer != NULL)
61 { 62 {
62 fread(readbuffer, reclen, sizeof(char), fin); 63 fread(readbuffer, reclen, sizeof(char), fin);
63 (*m_decompress)(readbuffer, reclen, buffer, buffersize); 64 size_t bytes_read = (*m_decompress)(readbuffer, reclen, buffer, buffersize);
65 buffer[bytes_read] = '\0';
64 if (reclen > compressedbuffersize) 66 if (reclen > compressedbuffersize)
65 { 67 {
66 delete [] readbuffer; 68 delete [] readbuffer;
67 } 69 }
68 } 70 }
69 } 71 }
70} 72}
71 73
72void CPlucker_base::sizes(unsigned long& _file, unsigned long& _text) 74void CPlucker_base::sizes(unsigned long& _file, unsigned long& _text)
73{ 75{
74 _file = file_length; 76 _file = file_length;
75 if (textlength == 0) 77 if (textlength == 0)
76 { 78 {
77 for (int recptr = 1; recptr < ntohs(head.recordList.numRecords); recptr++) 79 for (int recptr = 1; recptr < ntohs(head.recordList.numRecords); recptr++)
78 { 80 {
79 gotorecordnumber(recptr); 81 gotorecordnumber(recptr);
80 UInt16 thishdr_uid, thishdr_nParagraphs; 82 UInt16 thishdr_uid, thishdr_nParagraphs;
81 UInt32 thishdr_size; 83 UInt32 thishdr_size;
82 UInt8 thishdr_type, thishdr_reserved; 84 UInt8 thishdr_type, thishdr_reserved;
83 GetHeader(thishdr_uid, thishdr_nParagraphs, thishdr_size, thishdr_type, thishdr_reserved); 85 GetHeader(thishdr_uid, thishdr_nParagraphs, thishdr_size, thishdr_type, thishdr_reserved);
84 if (thishdr_type < 2) textlength += thishdr_size; 86 if (thishdr_type < 2) textlength += thishdr_size;
85 } 87 }
86 } 88 }
87 _text = textlength; 89 _text = textlength;
88 //ntohl(hdr0.size); 90 //ntohl(hdr0.size);
89} 91}
90 92
91char* CPlucker_base::geturl(UInt16 tgt) 93char* CPlucker_base::geturl(UInt16 tgt)
92{ 94{
93 char * pRet = NULL; 95 char * pRet = NULL;
94 gotorecordnumber(0); 96 gotorecordnumber(0);
95 fread(&hdr0, 1, 6, fin); 97 fread(&hdr0, 1, 6, fin);
96 unsigned int nrecs = ntohs(hdr0.nRecords); 98 unsigned int nrecs = ntohs(hdr0.nRecords);
97 //qDebug("Version %u, no. recs %u", ntohs(hdr0.version), nrecs); 99 //qDebug("Version %u, no. recs %u", ntohs(hdr0.version), nrecs);
98 UInt16 urlid = 0; 100 UInt16 urlid = 0;
99 bool urlsfound = false; 101 bool urlsfound = false;
100 char* urls = NULL; 102 char* urls = NULL;
101 size_t urlsize = 0; 103 size_t urlsize = 0;
102 for (unsigned int i = 0; i < nrecs; i++) 104 for (unsigned int i = 0; i < nrecs; i++)
103 { 105 {
104 UInt16 id, name; 106 UInt16 id, name;
105 fread(&name, 1, sizeof(name), fin); 107 fread(&name, 1, sizeof(name), fin);
106 fread(&id, 1, sizeof(id), fin); 108 fread(&id, 1, sizeof(id), fin);
107 //qDebug("N:%d, I:%d", ntohs(name), ntohs(id)); 109 //qDebug("N:%d, I:%d", ntohs(name), ntohs(id));
108 if (ntohs(name) == 2) 110 if (ntohs(name) == 2)
109 { 111 {
110 urlsfound = true; 112 urlsfound = true;
111 urlid = id; 113 urlid = id;
112 //qDebug("Found url index:%d", ntohs(urlid)); 114 //qDebug("Found url index:%d", ntohs(urlid));
113 } 115 }
114 ////qDebug("%x", id); 116 ////qDebug("%x", id);
115 } 117 }
116 if (urlsfound) 118 if (urlsfound)
117 { 119 {
118 unsigned short recptr = finduid(ntohs(urlid)); 120 unsigned short recptr = finduid(ntohs(urlid));
119 if (recptr != 0) 121 if (recptr != 0)
120 { 122 {
121 gotorecordnumber(recptr); 123 gotorecordnumber(recptr);
122 UInt16 thishdr_uid, thishdr_nParagraphs; 124 UInt16 thishdr_uid, thishdr_nParagraphs;
123 UInt32 thishdr_size; 125 UInt32 thishdr_size;
124 UInt8 thishdr_type, thishdr_reserved; 126 UInt8 thishdr_type, thishdr_reserved;
125 GetHeader(thishdr_uid, thishdr_nParagraphs, thishdr_size, thishdr_type, thishdr_reserved); 127 GetHeader(thishdr_uid, thishdr_nParagraphs, thishdr_size, thishdr_type, thishdr_reserved);
126 UInt16 urlctr = 0; 128 UInt16 urlctr = 0;
127 while (1) 129 while (1)
128 { 130 {
129 UInt16 tctr; 131 UInt16 tctr;
130 fread(&tctr, 1, sizeof(tctr), fin); 132 fread(&tctr, 1, sizeof(tctr), fin);
131 fread(&urlid, 1, sizeof(urlid), fin); 133 fread(&urlid, 1, sizeof(urlid), fin);
132 tctr = ntohs(tctr); 134 tctr = ntohs(tctr);
133 //qDebug("tgt:%u urlctr:%u tctr:%u", tgt, urlctr, tctr); 135 //qDebug("tgt:%u urlctr:%u tctr:%u", tgt, urlctr, tctr);
134 if (tctr >= tgt) 136 if (tctr >= tgt)
135 { 137 {
136 break; 138 break;
137 } 139 }
138 urlctr = tctr; 140 urlctr = tctr;
139 } 141 }
140 //qDebug("urls are in %d", ntohs(urlid)); 142 //qDebug("urls are in %d", ntohs(urlid));
141 recptr = finduid(ntohs(urlid)); 143 recptr = finduid(ntohs(urlid));
142 if (recptr != 0) 144 if (recptr != 0)
143 { 145 {
144 UInt32 reclen = recordlength(recptr) - HeaderSize(); 146 UInt32 reclen = recordlength(recptr) - HeaderSize();
145 gotorecordnumber(recptr); 147 gotorecordnumber(recptr);
146 GetHeader(thishdr_uid, thishdr_nParagraphs, thishdr_size, thishdr_type, thishdr_reserved); 148 GetHeader(thishdr_uid, thishdr_nParagraphs, thishdr_size, thishdr_type, thishdr_reserved);
147 //qDebug("Found urls:%x",thishdr_type); 149 //qDebug("Found urls:%x",thishdr_type);
148 urlsize = thishdr_size; 150 urlsize = thishdr_size;
149 urls = new char[urlsize]; 151 urls = new char[urlsize];
150 Expand(reclen, thishdr_type, (UInt8*)urls, urlsize); 152 Expand(reclen, thishdr_type, (UInt8*)urls, urlsize);
151 char* ptr = urls; 153 char* ptr = urls;
152 int rn = urlctr+1; 154 int rn = urlctr+1;
153 while (ptr - urls < urlsize) 155 while (ptr - urls < urlsize)
154 { 156 {
155 if (rn == tgt) 157 if (rn == tgt)
156 { 158 {
157 //qDebug("URL:%s", ptr); 159 //qDebug("URL:%s", ptr);
158 int len = strlen(ptr)+1; 160 int len = strlen(ptr)+1;
159 pRet = new char[len]; 161 pRet = new char[len];
160 memcpy(pRet, ptr, len); 162 memcpy(pRet, ptr, len);
161 break; 163 break;
162 } 164 }
163 ptr += strlen(ptr)+1; 165 ptr += strlen(ptr)+1;
164 rn++; 166 rn++;
165 } 167 }
166 delete [] urls; 168 delete [] urls;
167 } 169 }
168 } 170 }
169 } 171 }
170 else 172 else
171 { 173 {
172 pRet = NULL; 174 pRet = NULL;
173 } 175 }
174 return pRet; 176 return pRet;
175} 177}
176 178
177CPlucker_base::~CPlucker_base() 179CPlucker_base::~CPlucker_base()
178{ 180{
179 if (expandedtextbuffer != NULL) delete [] expandedtextbuffer; 181 if (expandedtextbuffer != NULL) delete [] expandedtextbuffer;
180 if (compressedtextbuffer != NULL) delete [] compressedtextbuffer; 182 if (compressedtextbuffer != NULL) delete [] compressedtextbuffer;
181#ifdef LOCALPICTURES 183#ifdef LOCALPICTURES
182 if (m_viewer != NULL) delete m_viewer; 184 if (m_viewer != NULL) delete m_viewer;
183#endif 185#endif
184} 186}
185 187
186int CPlucker_base::getch() { return getch(false); } 188int CPlucker_base::getch() { return getch(false); }
187 189
188void CPlucker_base::getch(tchar& ch, CStyle& sty, unsigned long& pos) 190void CPlucker_base::getch(tchar& ch, CStyle& sty, unsigned long& pos)
189{ 191{
190 pos = locate(); 192 pos = locate();
191 ch = getch(false); 193 ch = getch(false);
192 sty = mystyle; 194 sty = mystyle;
193} 195}
194 196
195unsigned int CPlucker_base::locate() 197unsigned int CPlucker_base::locate()
196{ 198{
197 return currentpos; 199 return currentpos;
198 /* 200 /*
199 UInt16 thisrec = 1; 201 UInt16 thisrec = 1;
200 unsigned long locpos = 0; 202 unsigned long locpos = 0;
201 gotorecordnumber(thisrec); 203 gotorecordnumber(thisrec);
202 UInt16 thishdr_uid, thishdr_nParagraphs; 204 UInt16 thishdr_uid, thishdr_nParagraphs;
203 UInt32 thishdr_size; 205 UInt32 thishdr_size;
204 UInt8 thishdr_type, thishdr_reserved; 206 UInt8 thishdr_type, thishdr_reserved;
205 while (thisrec < bufferrec) 207 while (thisrec < bufferrec)
206 { 208 {
207 GetHeader(thishdr_uid, thishdr_nParagraphs, thishdr_size, thishdr_type, thishdr_reserved); 209 GetHeader(thishdr_uid, thishdr_nParagraphs, thishdr_size, thishdr_type, thishdr_reserved);
208 if (thishdr_type < 2) locpos += thishdr_size; 210 if (thishdr_type < 2) locpos += thishdr_size;
209 thisrec++; 211 thisrec++;
210 gotorecordnumber(thisrec); 212 gotorecordnumber(thisrec);
211 } 213 }
212 return locpos+bufferpos; 214 return locpos+bufferpos;
213 */ 215 */
214} 216}
215 217
216void CPlucker_base::locate(unsigned int n) 218void CPlucker_base::locate(unsigned int n)
217{ 219{
218 220
219 // clock_t start = clock(); 221 // clock_t start = clock();
220 if (n >= currentpos-bufferpos && n < currentpos - bufferpos + buffercontent) 222 if (n >= currentpos-bufferpos && n < currentpos - bufferpos + buffercontent)
221 { 223 {
222 currentpos -= bufferpos; 224 currentpos -= bufferpos;
223 expand(bufferrec); 225 expand(bufferrec);
224 while (currentpos < n && bufferpos < buffercontent) getch_base(true); 226 while (currentpos < n && bufferpos < buffercontent) getch_base(true);
225 return; 227 return;
226 } 228 }
227 /* 229 /*
228 230
229 UInt32 textlength = currentpos - bufferpos; 231 UInt32 textlength = currentpos - bufferpos;
230 UInt16 recptr = bufferrec; 232 UInt16 recptr = bufferrec;
231 if (n < textlength/2) 233 if (n < textlength/2)
232 { 234 {
233 textlength = 0; 235 textlength = 0;
234 UInt16 thishdr_uid, thishdr_nParagraphs; 236 UInt16 thishdr_uid, thishdr_nParagraphs;
235 UInt32 thishdr_size = buffercontent; 237 UInt32 thishdr_size = buffercontent;
236 UInt8 thishdr_type, thishdr_reserved; 238 UInt8 thishdr_type, thishdr_reserved;
237 for (recptr = 1; recptr < ntohs(head.recordList.numRecords); recptr++) 239 for (recptr = 1; recptr < ntohs(head.recordList.numRecords); recptr++)
238 { 240 {
239 gotorecordnumber(recptr); 241 gotorecordnumber(recptr);
240 GetHeader(thishdr_uid, thishdr_nParagraphs, thishdr_size, thishdr_type, thishdr_reserved); 242 GetHeader(thishdr_uid, thishdr_nParagraphs, thishdr_size, thishdr_type, thishdr_reserved);
241 if (thishdr_type < 2) 243 if (thishdr_type < 2)
242 { 244 {
243 textlength += thishdr_size; 245 textlength += thishdr_size;
244 if (textlength > n) 246 if (textlength > n)
245 { 247 {
246 textlength -= thishdr_size; 248 textlength -= thishdr_size;
247 break; 249 break;
248 } 250 }
249 } 251 }
250 } 252 }
251 } 253 }
252 else if (n < textlength) 254 else if (n < textlength)
253 { 255 {
254 UInt16 thishdr_uid, thishdr_nParagraphs; 256 UInt16 thishdr_uid, thishdr_nParagraphs;
255 UInt32 thishdr_size; 257 UInt32 thishdr_size;
256 UInt8 thishdr_type, thishdr_reserved; 258 UInt8 thishdr_type, thishdr_reserved;
257 while (n < textlength && recptr > 1) 259 while (n < textlength && recptr > 1)
258 { 260 {
259 recptr--; 261 recptr--;
260 gotorecordnumber(recptr); 262 gotorecordnumber(recptr);
261 //qDebug("recptr:%u", recptr); 263 //qDebug("recptr:%u", recptr);
262 GetHeader(thishdr_uid, thishdr_nParagraphs, thishdr_size, thishdr_type, thishdr_reserved); 264 GetHeader(thishdr_uid, thishdr_nParagraphs, thishdr_size, thishdr_type, thishdr_reserved);
263 if (thishdr_type < 2) 265 if (thishdr_type < 2)
264 { 266 {
265 textlength -= thishdr_size; 267 textlength -= thishdr_size;
266 } 268 }
267 } 269 }
268 } 270 }
269 else 271 else
270 { 272 {
271 UInt16 thishdr_uid, thishdr_nParagraphs; 273 UInt16 thishdr_uid, thishdr_nParagraphs;
272 UInt32 thishdr_size = buffercontent; 274 UInt32 thishdr_size = buffercontent;
273 UInt8 thishdr_type, thishdr_reserved; 275 UInt8 thishdr_type, thishdr_reserved;
274 while (n > textlength + thishdr_size && recptr < ntohs(head.recordList.numRecords)-1) 276 while (n > textlength + thishdr_size && recptr < ntohs(head.recordList.numRecords)-1)
275 { 277 {
276 textlength += thishdr_size; 278 textlength += thishdr_size;
277 recptr++; 279 recptr++;
278 gotorecordnumber(recptr); 280 gotorecordnumber(recptr);
279 GetHeader(thishdr_uid, thishdr_nParagraphs, thishdr_size, thishdr_type, thishdr_reserved); 281 GetHeader(thishdr_uid, thishdr_nParagraphs, thishdr_size, thishdr_type, thishdr_reserved);
280 if (!(thishdr_type < 2)) 282 if (!(thishdr_type < 2))
281 { 283 {
282 thishdr_size = 0; 284 thishdr_size = 0;
283 } 285 }
284 } 286 }
285 } 287 }
286 288
287 */ 289 */
288 UInt16 thisrec = 0; 290 UInt16 thisrec = 0;
289 unsigned long locpos = 0; 291 unsigned long locpos = 0;
290 unsigned long bs = 0; 292 unsigned long bs = 0;
291 unsigned int np1 = n+1; 293 unsigned int np1 = n+1;
292 UInt16 thishdr_uid, thishdr_nParagraphs; 294 UInt16 thishdr_uid, thishdr_nParagraphs;
293 UInt32 thishdr_size; 295 UInt32 thishdr_size;
294 UInt8 thishdr_type, thishdr_reserved; 296 UInt8 thishdr_type, thishdr_reserved;
295 do 297 do
296 { 298 {
297 thisrec++; 299 thisrec++;
298 locpos += bs; 300 locpos += bs;
299 gotorecordnumber(thisrec); 301 gotorecordnumber(thisrec);
300 GetHeader(thishdr_uid, thishdr_nParagraphs, thishdr_size, thishdr_type, thishdr_reserved); 302 GetHeader(thishdr_uid, thishdr_nParagraphs, thishdr_size, thishdr_type, thishdr_reserved);
301 if (thishdr_type < 2) 303 if (thishdr_type < 2)
302 { 304 {
303 bs = thishdr_size; 305 bs = thishdr_size;
304 } 306 }
305 else 307 else
306 { 308 {
307 bs = 0; 309 bs = 0;
308 } 310 }
309 } while (locpos + bs < np1); 311 } while (locpos + bs < np1);
310 312
311 // qDebug("Time(2): %u", clock()-start); 313 // qDebug("Time(2): %u", clock()-start);
312 /* 314 /*
313 if (recptr != thisrec) 315 if (recptr != thisrec)
314 { 316 {
315 qDebug("Disaster:recptr:%u thisrec:%u", recptr, thisrec); 317 qDebug("Disaster:recptr:%u thisrec:%u", recptr, thisrec);
316 UInt16 thishdr_uid, thishdr_nParagraphs; 318 UInt16 thishdr_uid, thishdr_nParagraphs;
317 UInt32 thishdr_size = buffercontent; 319 UInt32 thishdr_size = buffercontent;
318 UInt8 thishdr_type, thishdr_reserved; 320 UInt8 thishdr_type, thishdr_reserved;
319 for (recptr = 1; recptr < ntohs(head.recordList.numRecords); recptr++) 321 for (recptr = 1; recptr < ntohs(head.recordList.numRecords); recptr++)
320 { 322 {
321 gotorecordnumber(recptr); 323 gotorecordnumber(recptr);
322 GetHeader(thishdr_uid, thishdr_nParagraphs, thishdr_size, thishdr_type, thishdr_reserved); 324 GetHeader(thishdr_uid, thishdr_nParagraphs, thishdr_size, thishdr_type, thishdr_reserved);
323 // qDebug("UID:%u Paras:%u Size:%u Type:%u Reserved:%u", thishdr_uid, thishdr_nParagraphs, thishdr_size, (unsigned int)thishdr_type, (unsigned int)thishdr_reserved); 325 // qDebug("UID:%u Paras:%u Size:%u Type:%u Reserved:%u", thishdr_uid, thishdr_nParagraphs, thishdr_size, (unsigned int)thishdr_type, (unsigned int)thishdr_reserved);
324 } 326 }
325 //QApplication::exit ( 100 ); 327 //QApplication::exit ( 100 );
326 } 328 }
327 */ 329 */
328 currentpos = locpos; 330 currentpos = locpos;
329 expand(thisrec); 331 expand(thisrec);
330 while (currentpos < n && bufferpos < buffercontent) getch_base(true); 332 while (currentpos < n && bufferpos < buffercontent) getch_base(true);
331 333
332 /* // This is faster but the alignment attribute doesn't get set 8^( 334 /* // This is faster but the alignment attribute doesn't get set 8^(
333 bufferpos = n-locpos; 335 bufferpos = n-locpos;
334 currentpos = n; 336 currentpos = n;
335 while (bufferpos >= m_nextPara && m_nextPara >= 0) 337 while (bufferpos >= m_nextPara && m_nextPara >= 0)
336 { 338 {
337 UInt16 attr = m_ParaAttrs[m_nextParaIndex]; 339 UInt16 attr = m_ParaAttrs[m_nextParaIndex];
338 m_nextParaIndex++; 340 m_nextParaIndex++;
339 if (m_nextParaIndex == m_nParas) 341 if (m_nextParaIndex == m_nParas)
340 { 342 {
341 m_nextPara = -1; 343 m_nextPara = -1;
342 } 344 }
343 else 345 else
344 { 346 {
345 m_nextPara += m_ParaOffsets[m_nextParaIndex]; 347 m_nextPara += m_ParaOffsets[m_nextParaIndex];
346 } 348 }
347 } 349 }
348 */ 350 */
349} 351}
350 352
351bool CPlucker_base::expand(int thisrec) 353bool CPlucker_base::expand(int thisrec)
352{ 354{
353 mystyle.unset(); 355 mystyle.unset();
354 if (bufferrec != thisrec) 356 if (bufferrec != thisrec)
355 { 357 {
356 size_t reclen = recordlength(thisrec); 358 size_t reclen = recordlength(thisrec);
357 gotorecordnumber(thisrec); 359 gotorecordnumber(thisrec);
358 UInt16 thishdr_uid, thishdr_nParagraphs; 360 UInt16 thishdr_uid, thishdr_nParagraphs;
359 UInt32 thishdr_size; 361 UInt32 thishdr_size;
360 UInt8 thishdr_type, thishdr_reserved; 362 UInt8 thishdr_type, thishdr_reserved;
361 while (1) 363 while (1)
362 { 364 {
363 GetHeader(thishdr_uid, thishdr_nParagraphs, thishdr_size, thishdr_type, thishdr_reserved); 365 GetHeader(thishdr_uid, thishdr_nParagraphs, thishdr_size, thishdr_type, thishdr_reserved);
364 //qDebug("This (%d) type is %d, uid is %u", thisrec, thishdr_type, thishdr_uid); 366 //qDebug("This (%d) type is %d, uid is %u", thisrec, thishdr_type, thishdr_uid);
365 if (thishdr_type < 2) break; 367 if (thishdr_type < 2) break;
366 //qDebug("Skipping paragraph of type %d", thishdr_type); 368 //qDebug("Skipping paragraph of type %d", thishdr_type);
367 if (++thisrec >= ntohs(head.recordList.numRecords) - 1) return false; 369 if (++thisrec >= ntohs(head.recordList.numRecords) - 1) return false;
368 reclen = recordlength(thisrec); 370 reclen = recordlength(thisrec);
369 gotorecordnumber(thisrec); 371 gotorecordnumber(thisrec);
370 } 372 }
371 m_nParas = thishdr_nParagraphs; 373 m_nParas = thishdr_nParagraphs;
372 m_bufferisreserved = (thishdr_reserved != 0); 374 m_bufferisreserved = (thishdr_reserved != 0);
373 //qDebug("It has %u paragraphs and is %u bytes", thishdr_nParagraphs, thishdr_size); 375 //qDebug("It has %u paragraphs and is %u bytes", thishdr_nParagraphs, thishdr_size);
374 uid = thishdr_uid; 376 uid = thishdr_uid;
375 // gotorecordnumber(thisrec); 377 // gotorecordnumber(thisrec);
376 // fread(expandedtextbuffer,1,10,fin); 378 // fread(expandedtextbuffer,1,10,fin);
377 for (int i = 0; i < m_nParas; i++) 379 for (int i = 0; i < m_nParas; i++)
378 { 380 {
379 UInt16 ubytes, attrs; 381 UInt16 ubytes, attrs;
380 fread(&ubytes, 1, sizeof(ubytes), fin); 382 fread(&ubytes, 1, sizeof(ubytes), fin);
381 fread(&attrs, 1, sizeof(attrs), fin); 383 fread(&attrs, 1, sizeof(attrs), fin);
382 m_ParaOffsets[i] = ntohs(ubytes); 384 m_ParaOffsets[i] = ntohs(ubytes);
383 m_ParaAttrs[i] = ntohs(attrs); 385 m_ParaAttrs[i] = ntohs(attrs);
384 ////qDebug("Bytes %u, Attr %x", ntohs(ubytes), ntohs(attrs)); 386 ////qDebug("Bytes %u, Attr %x", ntohs(ubytes), ntohs(attrs));
385 } 387 }
386 388
387 reclen -= HeaderSize()+4*m_nParas; 389 reclen -= HeaderSize()+4*m_nParas;
388 390
389 buffercontent = thishdr_size; 391 buffercontent = thishdr_size;
390 392
391 if (thishdr_size > buffersize) 393 if (thishdr_size > buffersize)
392 { 394 {
393 delete [] expandedtextbuffer; 395 delete [] expandedtextbuffer;
394 buffersize = thishdr_size; 396 buffersize = thishdr_size;
395 expandedtextbuffer = new UInt8[buffersize]; 397 expandedtextbuffer = new UInt8[buffersize];
396 } 398 }
397 Expand(reclen, thishdr_type, expandedtextbuffer, buffercontent); 399 Expand(reclen, thishdr_type, expandedtextbuffer, buffercontent);
398 bufferrec = thisrec; 400 bufferrec = thisrec;
399 } 401 }
400 402
401 403
402 if (m_nParas > 0) 404 if (m_nParas > 0)
403 { 405 {
404 m_nextPara = m_ParaOffsets[0]; 406 m_nextPara = m_ParaOffsets[0];
405 //qDebug("First offset = %u", m_nextPara); 407 //qDebug("First offset = %u", m_nextPara);
406 m_nextParaIndex = 0; 408 m_nextParaIndex = 0;
407 } 409 }
408 else 410 else
409 { 411 {
410 m_nextPara = -1; 412 m_nextPara = -1;
411 } 413 }
412 bufferpos = 0; 414 bufferpos = 0;
413 //qDebug("BC:%u, HS:%u", buffercontent, thishdr_size); 415 //qDebug("BC:%u, HS:%u", buffercontent, thishdr_size);
414 return true; 416 return true;
415} 417}
416/* 418/*
417void CPlucker_base::UnZip(UInt8* compressedbuffer, size_t reclen, UInt8* tgtbuffer, size_t bsize) 419void CPlucker_base::UnZip(UInt8* compressedbuffer, size_t reclen, UInt8* tgtbuffer, size_t bsize)
418{ 420{
419 z_stream zstream; 421 z_stream zstream;
420 memset(&zstream,sizeof(zstream),0); 422 memset(&zstream,sizeof(zstream),0);
421 zstream.next_in = compressedbuffer; 423 zstream.next_in = compressedbuffer;
422 zstream.next_out = tgtbuffer; 424 zstream.next_out = tgtbuffer;
423 zstream.avail_out = bsize; 425 zstream.avail_out = bsize;
424 zstream.avail_in = reclen; 426 zstream.avail_in = reclen;
425 427
426 int keylen = 0; 428 int keylen = 0;
427 429
428 zstream.zalloc = Z_NULL; 430 zstream.zalloc = Z_NULL;
429 zstream.zfree = Z_NULL; 431 zstream.zfree = Z_NULL;
430 zstream.opaque = Z_NULL; 432 zstream.opaque = Z_NULL;
431 433
432 // printf("Initialising\n"); 434 // printf("Initialising\n");
433 435
434 inflateInit(&zstream); 436 inflateInit(&zstream);
435 int err = 0; 437 int err = 0;
436 do { 438 do {
437 if ( zstream.avail_in == 0 && 0 < keylen ) { 439 if ( zstream.avail_in == 0 && 0 < keylen ) {
438 zstream.next_in = compressedbuffer + keylen; 440 zstream.next_in = compressedbuffer + keylen;
439 zstream.avail_in = reclen - keylen; 441 zstream.avail_in = reclen - keylen;
440 keylen = 0; 442 keylen = 0;
441 } 443 }
442 zstream.next_out = tgtbuffer; 444 zstream.next_out = tgtbuffer;
443 zstream.avail_out = bsize; 445 zstream.avail_out = bsize;
444 446
445 err = inflate( &zstream, Z_SYNC_FLUSH ); 447 err = inflate( &zstream, Z_SYNC_FLUSH );
446 448
447 ////qDebug("err:%d - %u", err, zstream.avail_in); 449 ////qDebug("err:%d - %u", err, zstream.avail_in);