]> git.saurik.com Git - wxWidgets.git/blob - demos/life/reader.cpp
ed6b875a3fe5374fec9f8fe615ffa649aac92fe3
[wxWidgets.git] / demos / life / reader.cpp
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: reader.cpp
3 // Purpose: Life! pattern reader (writer coming soon)
4 // Author: Guillermo Rodriguez Garcia, <guille@iies.es>
5 // Modified by:
6 // Created: Jan/2000
7 // Copyright: (c) 2000, Guillermo Rodriguez Garcia
8 // Licence: wxWindows licence
9 /////////////////////////////////////////////////////////////////////////////
10
11 // ==========================================================================
12 // headers, declarations, constants
13 // ==========================================================================
14
15 // For compilers that support precompilation, includes "wx/wx.h".
16 #include "wx/wxprec.h"
17
18 #ifdef __BORLANDC__
19 #pragma hdrstop
20 #endif
21
22 #ifndef WX_PRECOMP
23 #include "wx/wx.h"
24 #endif
25
26 #include "wx/txtstrm.h"
27 #include "reader.h"
28
29
30 // ==========================================================================
31 // LifeReader
32 // ==========================================================================
33
34 #define LIFE_CHECKVAL( msg ) \
35 if (!m_ok) \
36 { \
37 wxMessageBox( msg, _("Error"), wxICON_EXCLAMATION | wxOK ); \
38 return; \
39 }
40
41 LifeReader::LifeReader(wxInputStream& is)
42 {
43 wxBufferedInputStream buff_is(is);
44 wxTextInputStream text_is(buff_is);
45 wxString line, rest;
46
47 // check stream
48 m_ok = is.IsOk();
49 LIFE_CHECKVAL(_("Couldn't read any data"));
50
51 // read signature
52 m_ok = text_is.ReadLine().Contains(wxT("#Life 1.05"));
53 LIFE_CHECKVAL(_("Error reading signature. Not a Life pattern?"));
54
55 // read description
56 m_description = wxEmptyString;
57 line = text_is.ReadLine();
58 while (buff_is.IsOk() && line.StartsWith(wxT("#D"), &rest))
59 {
60 m_description += rest.Trim(false);
61 m_description += wxT("\n");
62 line = text_is.ReadLine();
63 }
64
65 m_ok = buff_is.IsOk();
66 LIFE_CHECKVAL(_("Unexpected EOF while reading description"));
67
68 // read rules
69 m_ok = line.StartsWith(wxT("#N"));
70 LIFE_CHECKVAL(_("Sorry, non-conway rules not supported yet"));
71
72 // read shape
73 while (buff_is.IsOk())
74 {
75 line = ( text_is.ReadLine() ).Trim();
76
77 if (!line.empty())
78 {
79 if (line.StartsWith(wxT("#P "), &rest))
80 m_shape.Add(rest);
81 else
82 m_shape.Add(line);
83 }
84 }
85 }
86