Diffstat (limited to 'noncore/apps/opie-reader/plucker.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | noncore/apps/opie-reader/plucker.cpp | 1179 |
1 files changed, 47 insertions, 1132 deletions
diff --git a/noncore/apps/opie-reader/plucker.cpp b/noncore/apps/opie-reader/plucker.cpp index eb039de..e49e35f 100644 --- a/noncore/apps/opie-reader/plucker.cpp +++ b/noncore/apps/opie-reader/plucker.cpp @@ -1,1241 +1,156 @@ +#include "useqpe.h" #include <stdio.h> #include <string.h> #include <qmessagebox.h> #include <qpixmap.h> +#ifdef USEQPE #include <qpe/qcopenvelope_qws.h> +#endif #ifdef LOCALPICTURES #include <qscrollview.h> #endif +#ifdef USEQPE #include <qpe/global.h> -#include <qclipboard.h> #include <qpe/qpeapplication.h> +#else +#include <qapplication.h> +#endif +#include <qclipboard.h> #include "plucker.h" #include "Aportis.h" #include "Palm2QImage.h" -#include "name.h" -CPlucker::CPlucker() : -#ifdef LOCALPICTURES - m_viewer(NULL), - m_picture(NULL), -#endif - expandedtextbuffer(NULL), - compressedtextbuffer(NULL), - urls(NULL) - { /*printf("constructing:%x\n",fin);*/ } - -void CPlucker::Expand(UInt16 reclen, UInt8 type, UInt8* buffer, UInt16 buffersize) +struct CPlucker_dataRecord { - if (type%2 == 0) - { - fread(buffer, reclen, sizeof(char), fin); - } - else - { - fread(compressedtextbuffer, reclen, sizeof(char), fin); - switch (ntohs(hdr0.version)) - { - case 2: - UnZip(reclen, buffer, buffersize); - break; - case 1: - UnDoc(reclen, buffer, buffersize); - break; - } - } -} + UInt16 uid; + UInt16 nParagraphs; + UInt16 size; + UInt8 type; + UInt8 reserved; +}; -int CPlucker::OpenFile(const char *src) +int CPlucker::HeaderSize() { - m_lastBreak = 0; - if (!Cpdb::openfile(src)) - { - return -1; - } - -//printf("Okay %u\n", 4); - - if (memcmp(&head.type, "DataPlkr", 8) != 0) return -1; - -// qDebug("Cool - this IS plucker"); - - EOPPhase = 0; - gotorecordnumber(0); - fread(&hdr0, 1, sizeof(hdr0), fin); -//printf("Okay %u\n", 5); - buffersize = 32*1024; - compressedtextbuffer = new UInt8[buffersize]; - expandedtextbuffer = new UInt8[buffersize]; - - qDebug("Total number of records:%u", ntohs(head.recordList.numRecords)); - - unsigned int nrecs = ntohs(hdr0.nRecords); - qDebug("Version %u, no. recs %u", ntohs(hdr0.version), nrecs); - UInt16 homerecid = 1; - UInt16 urlid = 0; - bool urlsfound = false; - for (unsigned int i = 0; i < nrecs; i++) - { - UInt16 id, name; - fread(&name, 1, sizeof(name), fin); - fread(&id, 1, sizeof(id), fin); - qDebug("N:%d, I:%d", ntohs(name), ntohs(id)); - if (ntohs(name) == 0) homerecid = ntohs(id); - if (ntohs(name) == 2) - { - urlsfound = true; - urlid = id; - qDebug("Found url index:%d", ntohs(urlid)); - } -// qDebug("%x", id); - } - - textlength = 0; - for (int recptr = 1; recptr < ntohs(head.recordList.numRecords); recptr++) - { - CPlucker_dataRecord thisHdr; - gotorecordnumber(recptr); - fread(&thisHdr, 1, sizeof(thisHdr), fin); - if (ntohs(thisHdr.uid) == homerecid) - { - m_homepos = textlength; - qDebug("Home pos found after %u records", recptr); - break; - } - if (thisHdr.type < 2) textlength += ntohs(thisHdr.size); - } - textlength = 0; - - if (urlsfound) - { - unsigned short recptr = finduid(ntohs(urlid)); - if (recptr != 0) - { - CPlucker_dataRecord thisHdr; - gotorecordnumber(recptr); - fread(&thisHdr, 1, sizeof(thisHdr), fin); - fread(&urlid, 1, sizeof(urlid), fin); - fread(&urlid, 1, sizeof(urlid), fin); - qDebug("urls are in %d", ntohs(urlid)); - recptr = finduid(ntohs(urlid)); - if (recptr != 0) - { - gotorecordnumber(recptr); - fread(&thisHdr, 1, sizeof(thisHdr), fin); - qDebug("Found urls:%x",thisHdr.type); - UInt16 reclen = recordlength(recptr) - sizeof(thisHdr); - gotorecordnumber(recptr); - fread(&thisHdr, 1, sizeof(thisHdr), fin); - urlsize = ntohs(thisHdr.size); - urls = new char[urlsize]; - Expand(reclen, thisHdr.type, (UInt8*)urls, urlsize); - } - } - } -/* - for (int recptr = 1; recptr < ntohs(head.recordList.numRecords); recptr++) - { - CPlucker_dataRecord thisHdr; - gotorecordnumber(recptr); - fread(&thisHdr, 1, sizeof(thisHdr), fin); - if (thisHdr.uid == urlid) - { - qDebug("Found urls:%x",thisHdr.type); - UInt16 reclen = recordlength(recptr) - sizeof(thisHdr); - gotorecordnumber(recptr); - fread(&thisHdr, 1, sizeof(thisHdr), fin); - urlsize = ntohs(thisHdr.size); - urls = new char[urlsize]; - Expand(reclen, thisHdr.type, (UInt8*)urls, urlsize); - break; - } - } -*/ - home(); -#ifdef LOCALPICTURES - if (m_viewer == NULL) - { - m_viewer = new QScrollView(NULL); - m_picture = new QWidget(m_viewer->viewport()); - m_viewer->addChild(m_picture); - } -#endif - return 0; - + return sizeof(CPlucker_dataRecord); } -void CPlucker::sizes(unsigned long& _file, unsigned long& _text) +void CPlucker::GetHeader(UInt16& uid, UInt16& nParagraphs, UInt32& size, UInt8& type, UInt8& reserved) { - qDebug("Sizes called:%u",textlength); - _file = file_length; - if (textlength == 0) - { - for (int recptr = 1; recptr < ntohs(head.recordList.numRecords); recptr++) - { - CPlucker_dataRecord thisHdr; - gotorecordnumber(recptr); - fread(&thisHdr, 1, sizeof(thisHdr), fin); - if (thisHdr.type < 2) textlength += ntohs(thisHdr.size); - } - } - _text = textlength; -//ntohl(hdr0.size); + CPlucker_dataRecord thishdr; + fread(&thishdr, 1, HeaderSize(), fin); + uid = ntohs(thishdr.uid); + nParagraphs = ntohs(thishdr.nParagraphs); + size = ntohs(thishdr.size); + type = thishdr.type; + reserved = thishdr.reserved; } +CPlucker::CPlucker() + { /*printf("constructing:%x\n",fin);*/ } -char* CPlucker::geturl(UInt16 i) -{ - if (urls == NULL) return NULL; - char* ptr = urls; - int rn = 1; - while (ptr - urls < urlsize) - { - if (rn == i) return ptr; - ptr += strlen(ptr)+1; - rn++; - } - return NULL; -} - -CPlucker::~CPlucker() +bool CPlucker::CorrectDecoder() { - if (expandedtextbuffer != NULL) delete [] expandedtextbuffer; - if (compressedtextbuffer != NULL) delete [] compressedtextbuffer; - if (urls != NULL) delete [] urls; -#ifdef LOCALPICTURES - if (m_viewer != NULL) delete m_viewer; -#endif + return (memcmp(&head.type, "DataPlkr", 8) == 0); } int CPlucker::bgetch() { int ch = EOF; if (bufferpos >= buffercontent) { if (!m_continuous) return EOF; if (bufferrec >= ntohs(head.recordList.numRecords) - 1) return EOF; -// qDebug("Passing through %u", currentpos); +//// qDebug("Passing through %u", currentpos); if (!expand(bufferrec+1)) return EOF; mystyle.unset(); + if (m_ParaOffsets[m_nextParaIndex] == 0) + { + while (m_ParaOffsets[m_nextParaIndex+1] == 0) + { +// qDebug("Skipping extraspace:%d", m_ParaAttrs[m_nextParaIndex]&7); + m_nextParaIndex++; + } + } + mystyle.setExtraSpace((m_ParaAttrs[m_nextParaIndex]&7)*2); +// qDebug("Using extraspace:%d", m_ParaAttrs[m_nextParaIndex]&7); ch = 10; EOPPhase = 4; } else if (bufferpos == m_nextPara) { while (bufferpos == m_nextPara) { UInt16 attr = m_ParaAttrs[m_nextParaIndex]; m_nextParaIndex++; +// qDebug("Skipping extraspace:%d", m_ParaAttrs[m_nextParaIndex]&7); if (m_nextParaIndex == m_nParas) { m_nextPara = -1; } else { m_nextPara += m_ParaOffsets[m_nextParaIndex]; } } mystyle.unset(); + mystyle.setExtraSpace((m_ParaAttrs[m_nextParaIndex]&7)*2); +// qDebug("Using extraspace:%d", m_ParaAttrs[m_nextParaIndex]&7); if (m_lastBreak == locate()) { currentpos++; ch = expandedtextbuffer[bufferpos++]; } else { ch = 10; } } else { currentpos++; ch = expandedtextbuffer[bufferpos++]; } return ch; } -int CPlucker::getch() +tchar CPlucker::getch(bool fast) { mystyle.clearPicture(); - if (EOPPhase > 0) { int ch = 10; switch (EOPPhase) { case 4: - mystyle.setPicture(hRule(100,5)); + if (!fast) mystyle.setPicture(false, hRule(100,5)); mystyle.setCentreJustify(); ch = '#'; break; case 3: mystyle.setFontSize(3); ch = 10; break; case 2: ch = 10; break; case 1: mystyle.unset(); default: ch = 10; } EOPPhase--; return ch; } - - int ch = bgetch(); - while (ch == 0) - { - ch = bgetch(); -// qDebug("Function:%x", ch); - switch (ch) - { - case 0x38: -// qDebug("Break:%u", locate()); - if (m_lastBreak == locate()) - { - ch = bgetch(); - } - else - { - ch = 10; - } - m_lastBreak = locate(); - break; - case 0x0a: - case 0x0c: - { - unsigned long ln = 0; - int skip = ch & 7; - for (int i = 0; i < 2; i++) - { - int ch = bgetch(); - ln = (ln << 8) + ch; -// qDebug("ch:%d, ln:%u", ch, ln); - } - if (skip == 2) - { - ln <<= 16; - } - else - { - for (int i = 0; i < 2; i++) - { - int ch = bgetch(); - ln = (ln << 8) + ch; -// qDebug("ch:%d, ln:%u", ch, ln); - } - } -// qDebug("ln:%u", ln); - mystyle.setLink(true); - mystyle.setData(ln); -// mystyle.setColour(255, 0, 0); - bool hasseen = false; - for (CList<unsigned long>::iterator it = visited.begin(); it != visited.end(); it++) - { - if (*it == ln) - { - hasseen = true; - break; - } - } - if (hasseen) - { - mystyle.setStrikethru(); - } - else - { - mystyle.setUnderline(); - } - ch = bgetch(); - } - break; - case 0x08: - ch = bgetch(); -// mystyle.setColour(0, 0, 0); - mystyle.unsetUnderline(); - mystyle.unsetStrikethru(); - mystyle.setLink(false); - mystyle.setData(0); - break; - case 0x40: - mystyle.setItalic(); - ch = bgetch(); - break; - case 0x48: - mystyle.unsetItalic(); - ch = bgetch(); - break; - case 0x11: - { - ch = bgetch(); -// qDebug("Font:%d",ch); - switch (ch) - { - case 0: - mystyle.unsetMono(); - mystyle.unsetBold(); - mystyle.setFontSize(0); - break; - case 1: - mystyle.unsetMono(); - mystyle.setBold(); - mystyle.setFontSize(3); - break; - case 2: - mystyle.unsetMono(); - mystyle.setBold(); - mystyle.setFontSize(2); - break; - case 3: - mystyle.unsetMono(); - mystyle.setBold(); -// mystyle.unsetBold(); - mystyle.setFontSize(1); - break; - case 4: - mystyle.unsetMono(); - mystyle.setBold(); -// mystyle.unsetBold(); - mystyle.setFontSize(0); - break; - case 5: - mystyle.unsetMono(); - mystyle.setBold(); - mystyle.setFontSize(0); - break; - case 6: - mystyle.unsetMono(); - mystyle.setBold(); - mystyle.setFontSize(0); - break; - case 7: - mystyle.unsetMono(); - mystyle.setBold(); - mystyle.setFontSize(0); - break; - case 8: // should be fixed width - qDebug("Trying fixed width"); - mystyle.unsetBold(); - mystyle.setFontSize(0); - mystyle.setMono(); - break; - default: - mystyle.unsetBold(); - mystyle.unsetMono(); - mystyle.setFontSize(0); - break; - } - ch = bgetch(); - } - break; - case 0x29: - ch = bgetch(); - switch (ch) - { - case 0: - mystyle.setLeftJustify(); -// qDebug("left"); - break; - case 1: - mystyle.setRightJustify(); -// qDebug("right"); - break; - case 2: - mystyle.setCentreJustify(); -// qDebug("centre"); - break; - case 3: - mystyle.setFullJustify(); -// qDebug("full"); - break; - - } - ch = bgetch(); - break; - case 0x53: - { - int r = bgetch(); - int g = bgetch(); - int b = bgetch(); - mystyle.setColour(r,g,b); - ch = bgetch(); - } - break; - case 0x1a: - case 0x5c: - { - bool hasalternate = (ch == 0x5c); - UInt16 ir = bgetch(); - ir = (ir << 8) + bgetch(); - if (hasalternate) - { - qDebug("Alternate image:%x", ir); - UInt16 ir2 = bgetch(); - ir2 = (ir2 << 8) + bgetch(); - mystyle.setPicture(expandimg(ir2, true), true, ir); -#ifdef LOCALPICTURES - UInt32 ln = ir; - ln <<= 16; - mystyle.setLink(true); - mystyle.setData(ln); -#endif - } - else - { - mystyle.setPicture(expandimg(ir)); - } - if (mystyle.getLink()) qDebug("Picture link!"); - ch = '#'; - } -// ch = bgetch(); - break; - case 0x33: - { - UInt8 h = bgetch(); - UInt8 wc = bgetch(); - UInt8 pc = bgetch(); - UInt16 w = wc; -// qDebug("h,w,pc [%u, %u, %u]", h, w, pc); - if (w == 0) - { - w = (240*(unsigned long)pc)/100; - } - if (w == 0) w = 320; - mystyle.setPicture(hRule(w,h,mystyle.Red(),mystyle.Green(),mystyle.Blue())); -// if (mystyle.getLink()) qDebug("hRule link!"); - ch = '#'; - } - break; - case 0x60: - mystyle.setUnderline(); - ch = bgetch(); - break; - case 0x68: - mystyle.unsetUnderline(); - ch = bgetch(); - break; - case 0x22: - ch = bgetch(); - mystyle.setLeftMargin(ch); -// qDebug("Left margin:%d", ch); - ch = bgetch(); - mystyle.setRightMargin(ch); -// qDebug("Right margin:%d", ch); - ch = bgetch(); - break; - case 0x70: - mystyle.setStrikethru(); - ch = bgetch(); - break; - case 0x78: - mystyle.unsetStrikethru(); - ch = bgetch(); - break; - case 0x83: - case 0x85: - default: - qDebug("Function:%x NOT IMPLEMENTED", ch); - { - int skip = ch & 7; - for (int i = 0; i < skip; i++) - { - ch = bgetch(); -// qDebug("Arg %d, %d", i, ch); - } - ch = bgetch(); - } - } - } - - if (m_lastIsBreak && !mystyle.isMono()) - { - while (ch == ' ') - { - ch = getch(); - } - } - - m_lastIsBreak = (ch == 10); - - return ch; -} - -void CPlucker::getch(int& ch, CStyle& sty) -{ - ch = getch(); - sty = mystyle; -} - -unsigned int CPlucker::locate() -{ - return currentpos; -/* - UInt16 thisrec = 1; - unsigned long locpos = 0; - gotorecordnumber(thisrec); - CPlucker_dataRecord thisHdr; - while (thisrec < bufferrec) - { - fread(&thisHdr, 1, sizeof(thisHdr), fin); - if (thisHdr.type < 2) locpos += ntohs(thisHdr.size); - thisrec++; - gotorecordnumber(thisrec); - } - return locpos+bufferpos; -*/ -} - -void CPlucker::locate(unsigned int n) -{ - UInt16 thisrec = 0; - unsigned long locpos = 0; - unsigned long bs = 0; - CPlucker_dataRecord thisHdr; - do - { - thisrec++; - locpos += bs; - gotorecordnumber(thisrec); - fread(&thisHdr, 1, sizeof(thisHdr), fin); - if (thisHdr.type < 2) - { - bs = ntohs(thisHdr.size); - } - else - { - bs = 0; - } - } while (locpos + bs <= n); - currentpos = locpos; - expand(thisrec); -#ifdef _FAST - while (currentpos < n && bufferpos < buffercontent) bgetch(); -#else - while (currentpos < n && bufferpos < buffercontent) getch(); -#endif + return getch_base(fast); } -bool CPlucker::hyperlink(unsigned int n) +QImage* CPlucker::imagefromdata(UInt8* imgbuffer, UInt32 imgsize) { - visited.push_front(n); - UInt16 tuid = (n >> 16); - n &= 0xffff; -// qDebug("Hyper:<%u,%u>", tuid, n); - UInt16 thisrec = 1; - currentpos = 0; - gotorecordnumber(thisrec); - CPlucker_dataRecord thisHdr; - while (1) - { - fread(&thisHdr, 1, sizeof(thisHdr), fin); - if (tuid == ntohs(thisHdr.uid)) break; - if (thisHdr.type < 2) currentpos += ntohs(thisHdr.size); -// qDebug("hyper-cp:%u", currentpos); - thisrec++; - if (thisrec >= ntohs(head.recordList.numRecords)) - { - if (urls == NULL) - { - QMessageBox::information(NULL, - PROGNAME, - QString("No external links\nin this pluck") - ); - } - else - { - char *turl = geturl(tuid); - if (turl == NULL) - { - QMessageBox::information(NULL, - PROGNAME, - QString("Couldn't find link") - ); - } - else - { - QString wrd(turl); - QClipboard* cb = QApplication::clipboard(); - cb->setText(wrd); - if (wrd.length() > 10) - { - Global::statusMessage(wrd.left(8) + ".."); - } - } - } - return false; - } - gotorecordnumber(thisrec); - } - if (thisHdr.type > 1) - { - if (thisHdr.type == 4) - { - QMessageBox::information(NULL, - PROGNAME, - QString("Mailto links\nnot yet supported (2)")); - } - else - { -#ifdef LOCALPICTURES - if (thisHdr.type > 3) - { -#endif - QMessageBox::information(NULL, - PROGNAME, - QString("External links\nnot yet supported (2)") - ); -#ifdef LOCALPICTURES - } - else - { - showimg(tuid); - } -#endif - } - return false; - } -/* - if (thisHdr.type == 2 || thisHdr.type == 3) - { - expandimg(thisrec); - - } -*/ - else - { - expand(thisrec); - if (n != 0) - { - if (n >= m_nParas) - { - QMessageBox::information(NULL, - PROGNAME, - QString("Error in link\nPara # too big") - ); - return false; - } - unsigned int noff = 0; - for (int i = 0; i < n; i++) noff += m_ParaOffsets[i]; - n = noff; - } - if (n > ntohs(thisHdr.size)) - { - QMessageBox::information(NULL, - PROGNAME, - QString("Error in link\nOffset too big") - ); - return false; - } - qDebug("Hyper:<%u,%u>", tuid, n); - while (bufferpos < n && bufferpos < buffercontent) getch(); - } - return true; -} -/* -bool CPlucker::hyperlink(unsigned int n) -{ - visited.push_front(n); - UInt16 tuid = (n >> 16); - n &= 0xffff; -// qDebug("Hyper:<%u,%u>", tuid, n); - UInt16 thisrec = finduid(tuid); - if (thisrec == 0) - { - if (urls == NULL) - { - QMessageBox::information(NULL, - PROGNAME, - QString("No external links\nin this pluck") - ); - } - else - { - char *turl = geturl(tuid); - if (turl == NULL) - { - QMessageBox::information(NULL, - PROGNAME, - QString("Couldn't find link") - ); - } - else - { - QString wrd(turl); - QClipboard* cb = QApplication::clipboard(); - cb->setText(wrd); - if (wrd.length() > 10) - { - Global::statusMessage(wrd.left(8) + ".."); - } - } - } - return false; - } - else - { - currentpos = 0; - gotorecordnumber(thisrec); - CPlucker_dataRecord thisHdr; - fread(&thisHdr, 1, sizeof(thisHdr), fin); - - if (thisHdr.type > 1) - { - if (thisHdr.type == 4) - { - QMessageBox::information(NULL, - PROGNAME, - QString("Mailto links\nnot yet supported (2)")); - } - else - { -#ifdef LOCALPICTURES - if (thisHdr.type > 3) - { -#endif - QMessageBox::information(NULL, - PROGNAME, - QString("External links\nnot yet supported (2)") - ); -#ifdef LOCALPICTURES - } - else - { - showimg(tuid); - } -#endif - } - return false; - } -// if (thisHdr.type == 2 || thisHdr.type == 3) -// { -// expandimg(thisrec); -// } - else - { - expand(thisrec); - if (n != 0) - { - if (n >= m_nParas) - { - QMessageBox::information(NULL, - PROGNAME, - QString("Error in link\nPara # too big") - ); - return false; - } - unsigned int noff = 0; - for (int i = 0; i < n; i++) noff += m_ParaOffsets[i]; - n = noff; - } - if (n > ntohs(thisHdr.size)) - { - QMessageBox::information(NULL, - PROGNAME, - QString("Error in link\nOffset too big") - ); - return false; - } - qDebug("Hyper:<%u,%u>", tuid, n); - while (bufferpos < n && bufferpos < buffercontent) getch(); - } - return true; - } -} -*/ -bool CPlucker::expand(int thisrec) -{ - mystyle.unset(); - size_t reclen = recordlength(thisrec); - gotorecordnumber(thisrec); - CPlucker_dataRecord thisHdr; - while (1) - { - fread(&thisHdr, 1, sizeof(thisHdr), fin); -// qDebug("This (%d) type is %d, uid is %u", thisrec, thisHdr.type, ntohs(thisHdr.uid)); - if (thisHdr.type < 2) break; - qDebug("Skipping paragraph of type %d", thisHdr.type); - if (++thisrec >= ntohs(head.recordList.numRecords) - 1) return false; - reclen = recordlength(thisrec); - gotorecordnumber(thisrec); - } - m_nParas = ntohs(thisHdr.nParagraphs); -// qDebug("It has %u paragraphs and is %u bytes", ntohs(thisHdr.nParagraphs), ntohs(thisHdr.size)); - uid = ntohs(thisHdr.uid); - for (int i = 0; i < m_nParas; i++) - { - UInt16 ubytes, attrs; - fread(&ubytes, 1, sizeof(ubytes), fin); - fread(&attrs, 1, sizeof(attrs), fin); - m_ParaOffsets[i] = ntohs(ubytes); - m_ParaAttrs[i] = ntohs(attrs); -// qDebug("Bytes %u, Attr %x", ntohs(ubytes), attrs); - } - if (m_nParas > 0) - { - m_nextPara = m_ParaOffsets[0]; -// qDebug("First offset = %u", m_nextPara); - m_nextParaIndex = 0; - } - else - { - m_nextPara = -1; - } - - reclen -= sizeof(thisHdr)+4*m_nParas; - - buffercontent = ntohs(thisHdr.size); - - Expand(reclen, thisHdr.type, expandedtextbuffer, buffercontent); - bufferpos = 0; - bufferrec = thisrec; -// qDebug("BC:%u, HS:%u", buffercontent, ntohs(thisHdr.size)); - return true; -} - -void CPlucker::UnZip(size_t reclen, UInt8* tgtbuffer, UInt16 bsize) -{ - z_stream zstream; - memset(&zstream,sizeof(zstream),0); - zstream.next_in = compressedtextbuffer; - zstream.next_out = tgtbuffer; - zstream.avail_out = bsize; - zstream.avail_in = reclen; - - int keylen = 0; - - zstream.zalloc = Z_NULL; - zstream.zfree = Z_NULL; - zstream.opaque = Z_NULL; - -// printf("Initialising\n"); - - inflateInit(&zstream); - int err = 0; - do { - if ( zstream.avail_in == 0 && 0 < keylen ) { - zstream.next_in = compressedtextbuffer + keylen; - zstream.avail_in = reclen - keylen; - keylen = 0; - } - zstream.next_out = tgtbuffer; - zstream.avail_out = bsize; - - err = inflate( &zstream, Z_SYNC_FLUSH ); - -// qDebug("err:%d - %u", err, zstream.avail_in); - - } while ( err == Z_OK ); - - inflateEnd(&zstream); -} - -void CPlucker::UnDoc(size_t reclen, UInt8* tgtbuffer, UInt16 bsize) -{ -// UInt16 headerSize; - UInt16 docSize; - UInt16 i; - UInt16 j; - UInt16 k; - - UInt8 *inBuf = compressedtextbuffer; - UInt8 *outBuf = tgtbuffer; - -// headerSize = sizeof( Header ) + record->paragraphs * sizeof( Paragraph ); - docSize = reclen; - - j = 0; - k = 0; - while ( j < docSize ) { - i = 0; - while ( i < bsize && j < docSize ) { - UInt16 c; - - c = (UInt16) inBuf[ j++ ]; - if ( 0 < c && c < 9 ) { - while ( 0 < c-- ) - outBuf[ i++ ] = inBuf[ j++ ]; - } - else if ( c < 0x80 ) - outBuf[ i++ ] = c; - else if ( 0xc0 <= c ) { - outBuf[ i++ ] = ' '; - outBuf[ i++ ] = c ^ 0x80; - } - else { - Int16 m; - Int16 n; - - c <<= 8; - c += inBuf[ j++ ]; - - m = ( c & 0x3fff ) >> COUNT_BITS; - n = c & ( ( 1 << COUNT_BITS ) - 1 ); - n += 2; - - do { - outBuf[ i ] = outBuf[ i - m ]; - i++; - } while ( 0 < n-- ); - } - } - k += bsize; - } -} - -void CPlucker::home() -{ - currentpos = 0; - expand(1); -} - -CList<Bkmk>* CPlucker::getbkmklist() -{ -/* - CPlucker_dataRecord thisHdr; - - for (int i = 1; i < ntohs(head.recordList.numRecords); i++) - { - gotorecordnumber(i); - fread(&thisHdr, 1, sizeof(thisHdr), fin); - if (thisHdr.type == 8) - { - UInt16 n; - fread(&n, 1, sizeof(n), fin); - n = ntohs(n); - qDebug("Found %u bookmarks", n); - } - qDebug("Found:%d, %u", i , thisHdr.type); - } -*/ - return NULL; -} - -QImage* CPlucker::getimg(UInt16 tgt) -{ -// static int imageno; -// char* file = "tmp1"; -// sprintf(file, "image%04u.tbmp", imageno++); -// qDebug("Image:%u", tgt); - CPlucker_dataRecord thisHdr; - size_t reclen; - UInt16 thisrec = finduid(tgt); - reclen = recordlength(thisrec); - gotorecordnumber(thisrec); - fread(&thisHdr, 1, sizeof(thisHdr), fin); -/* - UInt16 thisrec = 0; - do - { - hthisrec++; - reclen = recordlength(thisrec); - gotorecordnumber(thisrec); -// qDebug("thisrec:%u.%u", ftell(fin),thisrec); - fread(&thisHdr, 1, sizeof(thisHdr), fin); - } - while (ntohs(thisHdr.uid) != tgt); -*/ - reclen -= sizeof(thisHdr); - - UInt16 imgsize = ntohs(thisHdr.size); - UInt8* imgbuffer = new UInt8[imgsize]; - -// qDebug("type:%u", thisHdr.type); - Expand(reclen, thisHdr.type, imgbuffer, imgsize); - QImage* qimage = Palm2QImage(imgbuffer, imgsize); - delete [] imgbuffer; - return qimage; } - -#include <qnamespace.h> - -QPixmap* CPlucker::expandimg(UInt16 tgt, bool border) -{ - QImage* qimage = getimg(tgt); - if (qimage == NULL) return NULL; - QPixmap* image = new QPixmap(0,0); - QPixmap* ret; -// qDebug("New image"); - image->convertFromImage(*qimage); - delete qimage; - if (border) - { - ret = new QPixmap(image->width()+4, image->height()+4); - ret->fill(Qt::red); - bitBlt(ret, 2, 2, image, 0, 0, -1, -1);//, Qt::RasterOp::CopyROP); - delete image; - } - else - { - ret = image; - } - return ret; -} - -#ifdef _BUFFERPICS -#include <qmap.h> -#endif - -QPixmap* CPlucker::getPicture(unsigned long tgt) -{ -#ifdef _BUFFERPICS - static QMap<unsigned long, QPixmap> pix; - QMap<unsigned long, QPixmap>::Iterator t = pix.find(tgt); - if (t == pix.end()) - { - pix[tgt] = *expandimg(tgt); - return &pix[tgt]; - } - else - return &(t.data()); -#else - return expandimg(tgt); -#endif -} - -#ifdef LOCALPICTURES -#include <unistd.h> -#include <qpe/global.h> -void CPlucker::showimg(UInt16 tgt) -{ - qDebug("Crassssssh!"); - QPixmap* qimage = expandimg(tgt); - m_picture->setFixedSize(qimage->size()); - m_picture->setBackgroundPixmap(*qimage); - delete qimage; - m_viewer->show(); - -/* - char tmp[] = "uqtreader.XXXXXX"; - QImage* qimage = getimg(tgt); - QPixmap* image = new QPixmap(0,0); -// qDebug("New image"); - image->convertFromImage(*qimage); - delete qimage; - char tmpfile[sizeof(tmp)+1]; - strcpy(tmpfile,tmp); - int f = mkstemp(tmpfile); - close(f); - qDebug("TMPFILE:%s", tmpfile); - if (image->save(tmpfile,"PNG")) - { - QCopEnvelope e("QPE/Application/showimg", "setDocument(QString)"); - e << QString(tmpfile); - } - Global::statusMessage("Opening image"); - sleep(5); - delete image; - unlink(tmpfile); -*/ -} - -#endif - -void CPlucker::setSaveData(unsigned char*& data, unsigned short& len, unsigned char* src, unsigned short srclen) -{ - unsigned short sz = 0; - for (CList<unsigned long>::iterator it = visited.begin(); it != visited.end(); it++) - { - sz++; - } - size_t newlen = srclen+sizeof(sz)+sz*sizeof(unsigned long); - unsigned char* newdata = new unsigned char[newlen]; - unsigned char* pdata = newdata; - memcpy(newdata, src, srclen); - newdata += srclen; - memcpy(newdata, &sz, sizeof(sz)); - newdata += sizeof(sz); - for (CList<unsigned long>::iterator it = visited.begin(); it != visited.end(); it++) - { - unsigned long t = *it; - qDebug("[%u]", t); - memcpy(newdata, &t, sizeof(t)); - newdata += sizeof(t); - } - m_nav.setSaveData(data, len, pdata, newlen); - delete [] pdata; -} - -void CPlucker::putSaveData(unsigned char*& src, unsigned short& srclen) -{ - unsigned short sz; - if (srclen >= sizeof(sz)) - { - memcpy(&sz, src, sizeof(sz)); - src += sizeof(sz); - srclen -= sizeof(sz); - } - for (int i = 0; i < sz; i++) - { - unsigned long t; - if (srclen >= sizeof(t)) - { - memcpy(&t, src, sizeof(t)); - qDebug("[%u]", t); - visited.push_front(t); - src += sizeof(t); - srclen -= sizeof(t); - } - else - { - QMessageBox::warning(NULL, PROGNAME, "File data mismatch\nMight fix itself"); - break; - } - } - m_nav.putSaveData(src, srclen); -} - -unsigned short CPlucker::finduid(unsigned short urlid) -{ -// qDebug("Finding %u", urlid); - unsigned short jmin = 1, jmax = ntohs(head.recordList.numRecords); - unsigned short jmid = (jmin+jmax) >> 1; - while (jmax - jmin > 1) - { - CPlucker_dataRecord thisHdr; - gotorecordnumber(jmid); - fread(&thisHdr, 1, sizeof(thisHdr), fin); - unsigned short luid = ntohs(thisHdr.uid); -// qDebug("%u %u %u : %u", jmin, jmid, jmax, urlid); - if (luid == urlid) - { - return jmid; - } - if (luid < urlid) - { - jmin = jmid; - } - else - { - jmax = jmid; - } - jmid = (jmin+jmax) >> 1; - } - CPlucker_dataRecord thisHdr; - gotorecordnumber(jmin); - fread(&thisHdr, 1, sizeof(thisHdr), fin); - unsigned short luid = ntohs(thisHdr.uid); - qDebug("jmin at end:%u,%u", jmin, luid); - if (luid == urlid) - { - return jmin; - } - gotorecordnumber(jmax); - fread(&thisHdr, 1, sizeof(thisHdr), fin); - luid = ntohs(thisHdr.uid); - qDebug("jmax at end:%u,%u", jmax, luid); - if (luid == urlid) - { - return jmax; - } - qDebug("Couldn't find %u", urlid); - return 0; // Not found! -} |