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