]> git.saurik.com Git - wxWidgets.git/blobdiff - src/html/chm.cpp
Don't call StartingKey if the key was F2
[wxWidgets.git] / src / html / chm.cpp
index f42dd16085b8287317232188861bfd67079e2f14..bf73b40bd61b85e281d517b8b9391e46f0df1b1a 100644 (file)
@@ -4,7 +4,7 @@
 // Author:      Markus Sinner
 // Copyright:   (c) 2003 Herd Software Development
 // CVS-ID:      $Id$
-// Licence:     wxWidgets Licence
+// Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
 #include "wx/wxprec.h"
@@ -122,7 +122,7 @@ wxChmTools::wxChmTools(const wxFileName &archive)
     //     strdup() [libmspack-20030726], which would cause crashes in
     //     Unicode build when mb_str() returns temporary buffer
     m_chmFileNameANSI = strdup((const char*)m_chmFileName.mb_str(wxConvFile));
-    
+
     // Open the archive and store it in class:
     if ( (chmh = chmd->open(chmd, (char*)m_chmFileNameANSI)) )
     {
@@ -204,7 +204,7 @@ bool wxChmTools::Contains(const wxString& pattern)
  *
  * Finds the next file descibed by a pattern in the archive, starting
  * the file given by second parameter
- * 
+ *
  * @param pattern   The file-pattern to search for. May contain '*' and/or '?'
  * @param startfrom The filename which the search should start after
  * @returns         The full pathname of the found file
@@ -377,13 +377,13 @@ protected:
     /// See wxInputStream
     virtual size_t OnSysRead(void *buffer, size_t bufsize);
     /// See wxInputStream
-    virtual off_t OnSysSeek(off_t seek, wxSeekMode mode);
+    virtual wxFileOffset OnSysSeek(wxFileOffset seek, wxSeekMode mode);
     /// See wxInputStream
-    virtual off_t OnSysTell() const { return m_pos; }
+    virtual wxFileOffset OnSysTell() const { return m_pos; }
 
 private:
     size_t m_size;
-    off_t m_pos;
+    wxFileOffset m_pos;
     bool m_simulateHHP;
 
     char * m_content;
@@ -501,7 +501,7 @@ size_t wxChmInputStream::OnSysRead(void *buffer, size_t bufsize)
 
 
 
-off_t wxChmInputStream::OnSysSeek(off_t seek, wxSeekMode mode)
+wxFileOffset wxChmInputStream::OnSysSeek(wxFileOffset seek, wxSeekMode mode)
 {
     wxString mode_str = wxEmptyString;
 
@@ -512,7 +512,7 @@ off_t wxChmInputStream::OnSysSeek(off_t seek, wxSeekMode mode)
     }
     m_lasterror = wxSTREAM_NO_ERROR;
 
-    off_t nextpos;
+    wxFileOffset nextpos;
 
     switch ( mode )
     {
@@ -595,7 +595,9 @@ wxChmInputStream::CreateHHPStream()
         {
             // Read #SYSTEM-Code and length
             i->Read(&code, 2);
+            code = wxUINT16_SWAP_ON_BE( code ) ;
             i->Read(&len, 2);
+            len = wxUINT16_SWAP_ON_BE( len ) ;
             // data
             buf = malloc(len);
             i->Read(buf, len);
@@ -625,7 +627,19 @@ wxChmInputStream::CreateHHPStream()
                     out->Write( (const void *) tmp, strlen(tmp));
                     tmp = NULL;
                     break;
-                case 4: // STRUCT
+                case 4: // STRUCT SYSTEM INFO
+                    tmp = NULL ;
+                    if ( len >= 28 )
+                    {
+                        char *structptr = (char*) buf ;
+                        // LCID at position 0
+                        wxUint32 dummy = *((wxUint32 *)(structptr+0)) ;
+                        wxUint32 lcid = wxUINT32_SWAP_ON_BE( dummy ) ;
+                        wxString msg ;
+                        msg.Printf(_T("Language=0x%X\r\n"),lcid) ;
+                        out->Write(msg.c_str() , msg.Length() ) ;
+                    }
+                    break ;
                 default:
                     tmp=NULL;
             }
@@ -659,7 +673,7 @@ wxChmInputStream::CreateHHPStream()
             tmp = "Index File=*.hhk\r\n";
             out->Write((const void *) tmp, strlen(tmp));
         }
-
+        
         // Now copy the Data from the memory
         out->SeekO(0, wxFromEnd);
         m_size = out->TellO();