summaryrefslogtreecommitdiff
authorpohly <pohly>2005-05-08 16:12:13 (UTC)
committer pohly <pohly>2005-05-08 16:12:13 (UTC)
commit2ccb0ad8b77eb3c62914f5df5b1bba3becb83617 (patch) (unidiff)
treea75b6a2da7ab019dac3c078830d24bc491692d3d
parent21a9e96cebeb6e729d129cd75544ac54ae4d09f4 (diff)
downloadopie-2ccb0ad8b77eb3c62914f5df5b1bba3becb83617.zip
opie-2ccb0ad8b77eb3c62914f5df5b1bba3becb83617.tar.gz
opie-2ccb0ad8b77eb3c62914f5df5b1bba3becb83617.tar.bz2
bugfix by tim: off-by-one error when returning to a document (previous page)
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/apps/opie-reader/plucker_base.cpp3
1 files changed, 2 insertions, 1 deletions
diff --git a/noncore/apps/opie-reader/plucker_base.cpp b/noncore/apps/opie-reader/plucker_base.cpp
index 51c7fa7..81614f5 100644
--- a/noncore/apps/opie-reader/plucker_base.cpp
+++ b/noncore/apps/opie-reader/plucker_base.cpp
@@ -259,82 +259,83 @@ void CPlucker_base::locate(unsigned int n)
259 recptr--; 259 recptr--;
260 gotorecordnumber(recptr); 260 gotorecordnumber(recptr);
261 //qDebug("recptr:%u", recptr); 261 //qDebug("recptr:%u", recptr);
262 GetHeader(thishdr_uid, thishdr_nParagraphs, thishdr_size, thishdr_type, thishdr_reserved); 262 GetHeader(thishdr_uid, thishdr_nParagraphs, thishdr_size, thishdr_type, thishdr_reserved);
263 if (thishdr_type < 2) 263 if (thishdr_type < 2)
264 { 264 {
265 textlength -= thishdr_size; 265 textlength -= thishdr_size;
266 } 266 }
267 } 267 }
268 } 268 }
269 else 269 else
270 { 270 {
271 UInt16 thishdr_uid, thishdr_nParagraphs; 271 UInt16 thishdr_uid, thishdr_nParagraphs;
272 UInt32 thishdr_size = buffercontent; 272 UInt32 thishdr_size = buffercontent;
273 UInt8 thishdr_type, thishdr_reserved; 273 UInt8 thishdr_type, thishdr_reserved;
274 while (n > textlength + thishdr_size && recptr < ntohs(head.recordList.numRecords)-1) 274 while (n > textlength + thishdr_size && recptr < ntohs(head.recordList.numRecords)-1)
275 { 275 {
276 textlength += thishdr_size; 276 textlength += thishdr_size;
277 recptr++; 277 recptr++;
278 gotorecordnumber(recptr); 278 gotorecordnumber(recptr);
279 GetHeader(thishdr_uid, thishdr_nParagraphs, thishdr_size, thishdr_type, thishdr_reserved); 279 GetHeader(thishdr_uid, thishdr_nParagraphs, thishdr_size, thishdr_type, thishdr_reserved);
280 if (!(thishdr_type < 2)) 280 if (!(thishdr_type < 2))
281 { 281 {
282 thishdr_size = 0; 282 thishdr_size = 0;
283 } 283 }
284 } 284 }
285 } 285 }
286 286
287 */ 287 */
288 UInt16 thisrec = 0; 288 UInt16 thisrec = 0;
289 unsigned long locpos = 0; 289 unsigned long locpos = 0;
290 unsigned long bs = 0; 290 unsigned long bs = 0;
291 unsigned int np1 = n+1;
291 UInt16 thishdr_uid, thishdr_nParagraphs; 292 UInt16 thishdr_uid, thishdr_nParagraphs;
292 UInt32 thishdr_size; 293 UInt32 thishdr_size;
293 UInt8 thishdr_type, thishdr_reserved; 294 UInt8 thishdr_type, thishdr_reserved;
294 do 295 do
295 { 296 {
296 thisrec++; 297 thisrec++;
297 locpos += bs; 298 locpos += bs;
298 gotorecordnumber(thisrec); 299 gotorecordnumber(thisrec);
299 GetHeader(thishdr_uid, thishdr_nParagraphs, thishdr_size, thishdr_type, thishdr_reserved); 300 GetHeader(thishdr_uid, thishdr_nParagraphs, thishdr_size, thishdr_type, thishdr_reserved);
300 if (thishdr_type < 2) 301 if (thishdr_type < 2)
301 { 302 {
302 bs = thishdr_size; 303 bs = thishdr_size;
303 } 304 }
304 else 305 else
305 { 306 {
306 bs = 0; 307 bs = 0;
307 } 308 }
308 } while (locpos + bs < n); 309 } while (locpos + bs < np1);
309 310
310 // qDebug("Time(2): %u", clock()-start); 311 // qDebug("Time(2): %u", clock()-start);
311 /* 312 /*
312 if (recptr != thisrec) 313 if (recptr != thisrec)
313 { 314 {
314 qDebug("Disaster:recptr:%u thisrec:%u", recptr, thisrec); 315 qDebug("Disaster:recptr:%u thisrec:%u", recptr, thisrec);
315 UInt16 thishdr_uid, thishdr_nParagraphs; 316 UInt16 thishdr_uid, thishdr_nParagraphs;
316 UInt32 thishdr_size = buffercontent; 317 UInt32 thishdr_size = buffercontent;
317 UInt8 thishdr_type, thishdr_reserved; 318 UInt8 thishdr_type, thishdr_reserved;
318 for (recptr = 1; recptr < ntohs(head.recordList.numRecords); recptr++) 319 for (recptr = 1; recptr < ntohs(head.recordList.numRecords); recptr++)
319 { 320 {
320 gotorecordnumber(recptr); 321 gotorecordnumber(recptr);
321 GetHeader(thishdr_uid, thishdr_nParagraphs, thishdr_size, thishdr_type, thishdr_reserved); 322 GetHeader(thishdr_uid, thishdr_nParagraphs, thishdr_size, thishdr_type, thishdr_reserved);
322 // 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); 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);
323 } 324 }
324 //QApplication::exit ( 100 ); 325 //QApplication::exit ( 100 );
325 } 326 }
326 */ 327 */
327 currentpos = locpos; 328 currentpos = locpos;
328 expand(thisrec); 329 expand(thisrec);
329 while (currentpos < n && bufferpos < buffercontent) getch_base(true); 330 while (currentpos < n && bufferpos < buffercontent) getch_base(true);
330 331
331 /* // This is faster but the alignment attribute doesn't get set 8^( 332 /* // This is faster but the alignment attribute doesn't get set 8^(
332 bufferpos = n-locpos; 333 bufferpos = n-locpos;
333 currentpos = n; 334 currentpos = n;
334 while (bufferpos >= m_nextPara && m_nextPara >= 0) 335 while (bufferpos >= m_nextPara && m_nextPara >= 0)
335 { 336 {
336 UInt16 attr = m_ParaAttrs[m_nextParaIndex]; 337 UInt16 attr = m_ParaAttrs[m_nextParaIndex];
337 m_nextParaIndex++; 338 m_nextParaIndex++;
338 if (m_nextParaIndex == m_nParas) 339 if (m_nextParaIndex == m_nParas)
339 { 340 {
340 m_nextPara = -1; 341 m_nextPara = -1;