// Author: Markus Sinner
// Copyright: (c) 2003 Herd Software Development
// CVS-ID: $Id$
-// Licence: wxWidgets Licence
+// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#include "wx/wxprec.h"
// 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)) )
{
*
* 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
/// 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;
-off_t wxChmInputStream::OnSysSeek(off_t seek, wxSeekMode mode)
+wxFileOffset wxChmInputStream::OnSysSeek(wxFileOffset seek, wxSeekMode mode)
{
wxString mode_str = wxEmptyString;
}
m_lasterror = wxSTREAM_NO_ERROR;
- off_t nextpos;
+ wxFileOffset nextpos;
switch ( mode )
{
{
// 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);
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;
}
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();