#pragma hdrstop
#endif
+#ifndef WX_PRECOMP
+# include "wx/setup.h"
+#endif
+
+#if wxUSE_PNM
+
#include "wx/image.h"
#include "wx/log.h"
#include "wx/txtstrm.h"
-#ifdef __WXMSW__
-#include <windows.h>
-#endif
-
//-----------------------------------------------------------------------------
// wxBMPHandler
//-----------------------------------------------------------------------------
#if wxUSE_STREAMS
- //#include <stream.h> // for cout
-
void Skip_Comment(wxInputStream &stream)
{
wxString line;
wxTextInputStream text_stream(stream);
- if (stream.Peek()==_T('#'))
+ if (stream.Peek()==T('#'))
{
text_stream >> line;
Skip_Comment(stream);
* Read the PNM header
*/
- wxTextInputStream text_stream(stream);
+ wxBufferedInputStream buf_stream(stream);
+ wxTextInputStream text_stream(buf_stream);
- Skip_Comment(stream);
- if (stream.GetC()==_T('P')) c=stream.GetC();
+ Skip_Comment(buf_stream);
+ if (buf_stream.GetC()==T('P')) c=buf_stream.GetC();
switch (c)
{
- case _T('2'):
- wxLogError(_T("Loading Grey Ascii PNM image is not yet implemented."));
+ case T('2'):
+ wxLogError(T("Loading Grey Ascii PNM image is not yet implemented."));
return FALSE;
- case _T('5'):
- wxLogError(_T("Loading Grey Raw PNM image is not yet implemented."));
+ case T('5'):
+ wxLogError(T("Loading Grey Raw PNM image is not yet implemented."));
return FALSE;
- case _T('3'): case _T('6'): break;
+ case T('3'): case T('6'): break;
default :
- wxLogError(_T("Loading PNM image : file not recognized."));
+ wxLogError(T("Loading PNM image : file not recognized."));
return FALSE;
}
text_stream >> line; // for the \n
- Skip_Comment(stream);
+ Skip_Comment(buf_stream);
text_stream >> width >> height ;
- Skip_Comment(stream);
+ Skip_Comment(buf_stream);
text_stream >> maxval;
- //cout << width << " " << height << " " << maxval << endl;
+ //cout << line << " " << width << " " << height << " " << maxval << endl;
image->Create( width, height );
unsigned char *ptr = image->GetData();
if (!ptr)
{
- wxLogError( _T("Cannot allocate RAM for RGB data in PNM file.") );
+ wxLogError( T("Cannot allocate RAM for RGB data in PNM file.") );
return FALSE;
}
- if (c=='3') // Ascii RBG
+ if (c=='3') // Ascii RBG
{
wxUint32 value, size=3*width*height;
for (wxUint32 i=0; i<size; ++i)
value=text_stream.Read32();
*ptr++=(unsigned char)value;
- if (stream.LastError()!=wxSTREAM_NOERROR)
+ if (buf_stream.LastError()!=wxSTREAM_NOERROR)
{
- wxLogError(_T("Loading PNM image : file seems truncated."));
+ wxLogError(T("Loading PNM image : file seems truncated."));
return FALSE;
}
}
}
if (c=='6') // Raw RGB
- stream.Read( ptr, 3*width*height );
+ buf_stream.Read( ptr, 3*width*height );
image->SetMask( FALSE );
- return (stream.LastError()==wxStream_NOERROR || stream.LastError()==wxStream_EOF);
+ return (buf_stream.LastError()==wxStream_NOERROR || buf_stream.LastError()==wxStream_EOF);
}
bool wxPNMHandler::SaveFile( wxImage *image, wxOutputStream& stream, bool WXUNUSED(verbose) )
return (stream.LastError()==wxStream_NOERROR);
}
-#endif // wxUSE_STREAMS
+bool wxPNMHandler::CanRead( wxInputStream& stream )
+{
+ off_t pos=stream.TellI();
+
+ Skip_Comment(stream);
+
+ if (stream.GetC()==T('P'))
+ switch (stream.GetC())
+ {
+ case T('3'): case T('6'):
+ stream.SeekI(pos);
+ return TRUE;
+ }
+ stream.SeekI(pos);
+ return FALSE;
+}
+
+
+#endif // wxUSE_STREAMS
+#endif // wxUSE_PNM