Hi guys Dont know if this is the correct forum for this (I tracked you down via David's name, claiming ownership of the binarypwiparser.cpp file below) but here goes:
I don't see much activity surrounding pwi2html except a lot of spam messages on the home page; however today I really needed to recover some Pocket Word files (*.PWI) and discovered: (a) pwi2html ... :-) !!! (b) it doesn't work ... :-( ! on my ubuntu Breezy system, on PWI files created on Ipaq running Windows Mobile 2005 There are 2 problems. (1) it always hangs, burning 100% CPU. Output file not created. This happens in binarypwiparser.cpp because while scanning paragraphs the start_offset unexpectedly becomes -ve. I suppose this might be due to a change in the PWI contents on Mobile 2005? After adding a fix for this i.e. break out of the loop when the offset < 0, I can successfully do WPI -> HTML conversion. BUT another problem: (2) files created in the default output 'openoffice' format sxw cannot be loaded into openoffice2. The conversion to HTML is ok, which I can live with. Has anyone else experienced this? Can anyone suggest what might be wrong with the OpenOffice conversion? ------------------------------- (temporary) fix for binaryparser.cpp This is a larger patch than you might expect because it also fixes lots of broken code that is only invoked if you #define VERBOSE=1 (as you might do if debugging ... :-) ) The (trivially) interesting stuff is near line 138 ------------------------------ --- binarypwiparser.cpp.broken 2006-09-21 16:52:35.000000000 +0100 +++ binarypwiparser.cpp 2006-09-21 16:52:49.000000000 +0100 @@ -17,6 +17,8 @@ * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ +//#define VERBOSE 1 + #include "binarypwiparser.h" #include "paragraph.h" #include <iostream> @@ -68,7 +72,7 @@ this->inputStream->seekg(0xa, std::ios_base::cur); #if VERBOSE - std::cerr << "Font table starts at offset 0x" << hex << input.tellg() << std::endl; + std::cerr << "Font table starts at offset 0x" << hex << inputStream->tellg() << std::endl; #endif // Skip font table @@ -76,7 +80,7 @@ #if VERBOSE - cerr << "Font table ends at offset 0x" << hex << input.tellg() << endl; + cerr << "Font table ends at offset 0x" << hex << inputStream->tellg() << endl; #endif // Skip to paragraph count 1 this->inputStream->seekg(0xba, std::ios_base::cur); @@ -101,7 +105,7 @@ this->inputStream->seekg(0x6, std::ios_base::cur); - //cerr << "Paragraph index starts at offset 0x" << hex << input.tellg() << endl; + //cerr << "Paragraph index starts at offset 0x" << hex << inputStream->tellg() << endl; #if 0 @@ -120,7 +124,7 @@ this->inputStream->seekg(paragraph_count * PARAGRAPH_ENTRY_SIZE, std::ios_base::cur); #endif - //cerr << "Paragraph index ends at offset 0x" << hex << input.tellg() << endl; + //cerr << "Paragraph index ends at offset 0x" << hex << inputStream->tellg() << endl; this->inputStream->seekg(2, std::ios_base::cur); @@ -134,6 +138,10 @@ #if VERBOSE std::cerr << "Paragraph " << std::dec << i << " starts at offset 0x" << std::hex << this->inputStream->tellg() << std::endl; #endif + if (this->inputStream->tellg() < 0) { + std::cerr << "WARNING: abandoned paragraphs when start_offset became -ve" << std::endl; + break; + } string crtString; unsigned code = read16(); @@ -178,7 +186,7 @@ // this->inputStream->seekg(4 - ((this->inputStream->tellg() - start_offset) & 3), std::ios_base::cur); // FIXME: what is this ? #if VERBOSE - cerr << "Paragraph " << dec << i << " ends at offset 0x" << hex << input.tellg() << endl; + cerr << "Paragraph " << dec << i << " ends at offset 0x" << hex << inputStream->tellg() << endl; #endif } @@ -191,7 +199,7 @@ ; #if VERBOSE - cerr << "Decoding ends at offset 0x" << hex << input.tellg() << endl; + cerr << "Decoding ends at offset 0x" << hex << inputStream->tellg() << endl; #endif } @@ -411,7 +419,7 @@ */ void BinaryPwiParser::align(std::streampos start_offset) { //cerr << "Start offset: 0x" << hex << start_offset << endl; - //cerr << "Current offset: 0x" << hex << input.tellg() << endl; + //cerr << "Current offset: 0x" << hex << inputStream->tellg() << endl; unsigned align = 4 - ((this->inputStream->tellg() - start_offset) & 3); //cerr << "Align: " << dec << align << endl; this->inputStream->seekg(align, std::ios_base::cur); -- _______________________________________________ Surf the Web in a faster, safer and easier way: Download Opera 9 at http://www.opera.com Powered by Outblaze ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys -- and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV _______________________________________________ Synce-devel mailing list Synce-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/synce-devel