interim commit

This commit is contained in:
2009-11-14 08:01:57 +00:00
parent e384e1d044
commit 5e21877849
8 changed files with 1253 additions and 24 deletions

View File

@ -1,6 +1,6 @@
AM_CPPFLAGS = -I$(top_srcdir)/include
AM_CPPFLAGS = -I$(top_srcdir)/include -DNDEBUG
bin_PROGRAMS = chr str sll map lda fio pio sio time
bin_PROGRAMS = chr str sll map lda fio pio sio time rex
LDFLAGS = -L../../lib/cmn
LDADD = -lqsecmn
@ -14,3 +14,9 @@ fio_SOURCES = fio.c
pio_SOURCES = pio.c
sio_SOURCES = sio.c
time_SOURCES = time.c
rex_SOURCES = rex.cpp
rex_CXXFLAGS = -I/usr/lib/wx/include/gtk2-unicode-release-2.8 -I/usr/include/wx-2.8 -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES -D__WXGTK__ -pthread
#rex_LDFLAGS = -pthread -Wl,-Bsymbolic-functions -lwx_gtk2u_richtext-2.8 -lwx_gtk2u_aui-2.8 -lwx_gtk2u_xrc-2.8 -lwx_gtk2u_qa-2.8 -lwx_gtk2u_html-2.8 -lwx_gtk2u_adv-2.8 -lwx_gtk2u_core-2.8 -lwx_baseu_xml-2.8 -lwx_baseu_net-2.8 -lwx_baseu-2.8
rex_LDFLAGS = -pthread -Wl,-Bsymbolic-functions -lwx_gtk2ud_richtext-2.8 -lwx_gtk2ud_aui-2.8 -lwx_gtk2ud_xrc-2.8 -lwx_gtk2ud_qa-2.8 -lwx_gtk2ud_html-2.8 -lwx_gtk2ud_adv-2.8 -lwx_gtk2ud_core-2.8 -lwx_baseud_xml-2.8 -lwx_baseud_net-2.8 -lwx_baseud-2.8

View File

@ -34,7 +34,7 @@ build_triplet = @build@
host_triplet = @host@
bin_PROGRAMS = chr$(EXEEXT) str$(EXEEXT) sll$(EXEEXT) map$(EXEEXT) \
lda$(EXEEXT) fio$(EXEEXT) pio$(EXEEXT) sio$(EXEEXT) \
time$(EXEEXT)
time$(EXEEXT) rex$(EXEEXT)
subdir = samples/cmn
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@ -71,6 +71,13 @@ am_pio_OBJECTS = pio.$(OBJEXT)
pio_OBJECTS = $(am_pio_OBJECTS)
pio_LDADD = $(LDADD)
pio_DEPENDENCIES =
am_rex_OBJECTS = rex-rex.$(OBJEXT)
rex_OBJECTS = $(am_rex_OBJECTS)
rex_LDADD = $(LDADD)
rex_DEPENDENCIES =
rex_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
--mode=link $(CXXLD) $(rex_CXXFLAGS) $(CXXFLAGS) \
$(rex_LDFLAGS) $(LDFLAGS) -o $@
am_sio_OBJECTS = sio.$(OBJEXT)
sio_OBJECTS = $(am_sio_OBJECTS)
sio_LDADD = $(LDADD)
@ -99,12 +106,21 @@ CCLD = $(CC)
LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
$(LDFLAGS) -o $@
CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
--mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
CXXLD = $(CXX)
CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
--mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
$(LDFLAGS) -o $@
SOURCES = $(chr_SOURCES) $(fio_SOURCES) $(lda_SOURCES) $(map_SOURCES) \
$(pio_SOURCES) $(sio_SOURCES) $(sll_SOURCES) $(str_SOURCES) \
$(time_SOURCES)
DIST_SOURCES = $(chr_SOURCES) $(fio_SOURCES) $(lda_SOURCES) \
$(map_SOURCES) $(pio_SOURCES) $(sio_SOURCES) $(sll_SOURCES) \
$(pio_SOURCES) $(rex_SOURCES) $(sio_SOURCES) $(sll_SOURCES) \
$(str_SOURCES) $(time_SOURCES)
DIST_SOURCES = $(chr_SOURCES) $(fio_SOURCES) $(lda_SOURCES) \
$(map_SOURCES) $(pio_SOURCES) $(rex_SOURCES) $(sio_SOURCES) \
$(sll_SOURCES) $(str_SOURCES) $(time_SOURCES)
ETAGS = etags
CTAGS = ctags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@ -244,7 +260,7 @@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
AM_CPPFLAGS = -I$(top_srcdir)/include
AM_CPPFLAGS = -I$(top_srcdir)/include -DNDEBUG
LDADD = -lqsecmn
chr_SOURCES = chr.c
str_SOURCES = str.c
@ -255,10 +271,15 @@ fio_SOURCES = fio.c
pio_SOURCES = pio.c
sio_SOURCES = sio.c
time_SOURCES = time.c
rex_SOURCES = rex.cpp
rex_CXXFLAGS = -I/usr/lib/wx/include/gtk2-unicode-release-2.8 -I/usr/include/wx-2.8 -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES -D__WXGTK__ -pthread
#rex_LDFLAGS = -pthread -Wl,-Bsymbolic-functions -lwx_gtk2u_richtext-2.8 -lwx_gtk2u_aui-2.8 -lwx_gtk2u_xrc-2.8 -lwx_gtk2u_qa-2.8 -lwx_gtk2u_html-2.8 -lwx_gtk2u_adv-2.8 -lwx_gtk2u_core-2.8 -lwx_baseu_xml-2.8 -lwx_baseu_net-2.8 -lwx_baseu-2.8
rex_LDFLAGS = -pthread -Wl,-Bsymbolic-functions -lwx_gtk2ud_richtext-2.8 -lwx_gtk2ud_aui-2.8 -lwx_gtk2ud_xrc-2.8 -lwx_gtk2ud_qa-2.8 -lwx_gtk2ud_html-2.8 -lwx_gtk2ud_adv-2.8 -lwx_gtk2ud_core-2.8 -lwx_baseud_xml-2.8 -lwx_baseud_net-2.8 -lwx_baseud-2.8
all: all-am
.SUFFIXES:
.SUFFIXES: .c .lo .o .obj
.SUFFIXES: .c .cpp .lo .o .obj
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
@ -331,6 +352,9 @@ map$(EXEEXT): $(map_OBJECTS) $(map_DEPENDENCIES)
pio$(EXEEXT): $(pio_OBJECTS) $(pio_DEPENDENCIES)
@rm -f pio$(EXEEXT)
$(LINK) $(pio_OBJECTS) $(pio_LDADD) $(LIBS)
rex$(EXEEXT): $(rex_OBJECTS) $(rex_DEPENDENCIES)
@rm -f rex$(EXEEXT)
$(rex_LINK) $(rex_OBJECTS) $(rex_LDADD) $(LIBS)
sio$(EXEEXT): $(sio_OBJECTS) $(sio_DEPENDENCIES)
@rm -f sio$(EXEEXT)
$(LINK) $(sio_OBJECTS) $(sio_LDADD) $(LIBS)
@ -355,6 +379,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/map.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pio.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rex-rex.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sio.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sll.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/str.Po@am__quote@
@ -381,6 +406,41 @@ distclean-compile:
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
.cpp.o:
@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $<
.cpp.obj:
@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
.cpp.lo:
@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $<
rex-rex.o: rex.cpp
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rex_CXXFLAGS) $(CXXFLAGS) -MT rex-rex.o -MD -MP -MF $(DEPDIR)/rex-rex.Tpo -c -o rex-rex.o `test -f 'rex.cpp' || echo '$(srcdir)/'`rex.cpp
@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/rex-rex.Tpo $(DEPDIR)/rex-rex.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='rex.cpp' object='rex-rex.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rex_CXXFLAGS) $(CXXFLAGS) -c -o rex-rex.o `test -f 'rex.cpp' || echo '$(srcdir)/'`rex.cpp
rex-rex.obj: rex.cpp
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rex_CXXFLAGS) $(CXXFLAGS) -MT rex-rex.obj -MD -MP -MF $(DEPDIR)/rex-rex.Tpo -c -o rex-rex.obj `if test -f 'rex.cpp'; then $(CYGPATH_W) 'rex.cpp'; else $(CYGPATH_W) '$(srcdir)/rex.cpp'; fi`
@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/rex-rex.Tpo $(DEPDIR)/rex-rex.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='rex.cpp' object='rex-rex.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rex_CXXFLAGS) $(CXXFLAGS) -c -o rex-rex.obj `if test -f 'rex.cpp'; then $(CYGPATH_W) 'rex.cpp'; else $(CYGPATH_W) '$(srcdir)/rex.cpp'; fi`
mostlyclean-libtool:
-rm -f *.lo

347
qse/samples/cmn/rex.cpp Normal file
View File

@ -0,0 +1,347 @@
#include <qse/cmn/rex.h>
#include <qse/cmn/str.h>
#include <qse/cmn/stdio.h>
#include <wx/wx.h>
#include <wx/cmdline.h>
#include <string.h>
#include <locale.h>
class MyApp: public wxApp
{
public:
virtual bool OnInit();
virtual int OnExit();
virtual int OnRun();
virtual void OnInitCmdLine(wxCmdLineParser& parser);
virtual bool OnCmdLineParsed(wxCmdLineParser& parser);
wxString matPattern;
wxString matString;
};
DECLARE_APP(MyApp)
class MyFrame: public wxFrame
{
public:
MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size);
~MyFrame ()
{
if (rex) qse_rex_close (rex);
}
void OnQuit(wxCommandEvent& event);
void OnAbout(wxCommandEvent& event);
void OnComp(wxCommandEvent& event);
void OnPaint (wxPaintEvent& event);
DECLARE_EVENT_TABLE()
protected:
qse_rex_t* rex;
qse_rex_node_t* start;
void drawArrow (wxDC& dc, qse_rex_node_t* f, qse_rex_node_t* t);
void drawNode (wxDC& dc, qse_rex_node_t* n);
void drawChain (wxDC& dc, qse_rex_node_t* n);
int nodex, nodey;
};
enum
{
ID_Quit = 1,
ID_Comp,
ID_About,
};
BEGIN_EVENT_TABLE(MyFrame, wxFrame)
EVT_MENU(ID_Quit, MyFrame::OnQuit)
EVT_MENU(ID_Comp, MyFrame::OnComp)
EVT_MENU(ID_About, MyFrame::OnAbout)
EVT_PAINT(MyFrame::OnPaint)
END_EVENT_TABLE()
IMPLEMENT_APP(MyApp)
bool MyApp::OnInit()
{
if (!wxApp::OnInit()) return false;
MyFrame *frame = new MyFrame(
_T("\uB108 \uBB50\uAC00 \uC798\uB0AC\uC5B4?"),
wxPoint(50,50), wxSize(450,340)
);
frame->Show(TRUE);
SetTopWindow(frame);
return TRUE;
}
int MyApp::OnExit()
{
// clean up
return 0;
}
int MyApp::OnRun()
{
int exitcode = wxApp::OnRun();
//wxTheClipboard->Flush();
return exitcode;
}
void MyApp::OnInitCmdLine(wxCmdLineParser& parser)
{
static const wxCmdLineEntryDesc g_cmdLineDesc [] =
{
{ wxCMD_LINE_SWITCH, wxT("h"), wxT("help"),
wxT("displays help on the command line parameters"),
wxCMD_LINE_VAL_NONE, wxCMD_LINE_OPTION_HELP },
//{ wxCMD_LINE_SWITCH, wxT("t"), wxT("test"),
// wxT("test switch"),
// wxCMD_LINE_VAL_NONE, wxCMD_LINE_OPTION_MANDATORY },
{ wxCMD_LINE_PARAM, NULL, NULL, wxT("pattern"),
wxCMD_LINE_VAL_STRING, wxCMD_LINE_OPTION_MANDATORY },
{ wxCMD_LINE_PARAM, NULL, NULL, wxT("string"),
wxCMD_LINE_VAL_STRING, wxCMD_LINE_OPTION_MANDATORY },
{ wxCMD_LINE_NONE }
};
parser.SetDesc (g_cmdLineDesc);
// must refuse '/' as parameter starter or cannot use "/path" style paths
parser.SetSwitchChars (wxT("-"));
}
bool MyApp::OnCmdLineParsed(wxCmdLineParser& parser)
{
//silent_mode = parser.Found(wxT("s"));
// to get at your unnamed parameters use
/*
wxArrayString files;
for (int i = 0; i < parser.GetParamCount(); i++)
{
files.Add(parser.GetParam(i));
}
*/
if (parser.GetParamCount() != 2)
{
wxMessageBox(_T("Usage: XXXXXXXXXXXXXXXXXXXXXXXXXXXXx"),
_T("Error"), wxOK | wxICON_INFORMATION, NULL);
return false;
}
matPattern = parser.GetParam(0);
matString = parser.GetParam(1);
// and other command line parameters
// then do what you need with them.
return true;
}
MyFrame::MyFrame (
const wxString& title, const wxPoint& pos, const wxSize& size)
: wxFrame((wxFrame *)NULL, -1, title, pos, size), rex (NULL)
{
wxMenu *menuFile = new wxMenu;
menuFile->Append( ID_About, _T("&About...") );
menuFile->Append( ID_Comp, _T("&Compile...") );
menuFile->AppendSeparator();
menuFile->Append( ID_Quit, _T("E&xit") );
wxMenuBar *menuBar = new wxMenuBar;
menuBar->Append( menuFile, _T("&File") );
SetMenuBar( menuBar );
/*
wxPanel *panel = new wxPanel(this, -1);
wxFlexGridSizer* fgs = new wxFlexGridSizer (1, 2);
wxButton* but = new wxButton (panel, wxID_ANY, _T("XXXX"));
wxTextCtrl* textctrl = new wxTextCtrl(panel, -1, wxT(""), wxPoint(-1, -1),
wxSize(250, 150));
fgs->Add (but);
fgs->Add (textctrl, 1, wxEXPAND);
panel->SetSizer (fgs);
*/
CreateStatusBar();
SetStatusText( _T("Welcome to wxWidgets!") );
SetSize (wxSize (700,500));
}
void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event))
{
Close(TRUE);
}
void MyFrame::OnComp(wxCommandEvent& WXUNUSED(event))
{
if (rex == NULL)
{
rex = qse_rex_open (QSE_NULL, 0, QSE_NULL);
if (rex == NULL)
{
wxMessageBox(_T("Cannot open rex"),
_T("Error"), wxOK | wxICON_INFORMATION, this);
return;
}
}
//const qse_char_t* x = QSE_T("y(abc|def|xyz|1234)x");
//const qse_char_t* x = QSE_T("(abc|def|xyz|1234)x");
//const qse_char_t* x = QSE_T("y(abc|def|xyz|1234");
//const qse_char_t* x = QSE_T("(abc|abcdefg)");
const qse_char_t* x = QSE_T("a*b?c*defg");
//((MyApp*)wxTheApp)->matPattern;
MyApp& app = wxGetApp();
start = qse_rex_comp (rex, app.matPattern.wx_str(), app.matPattern.Len());
if (start == QSE_NULL)
{
wxMessageBox(_T("Cannot compile rex"),
_T("Error"), wxOK | wxICON_INFORMATION, this);
return;
}
//const qse_char_t* text = QSE_T("abcyabcxxx");
const qse_char_t* text = QSE_T("abcdefg");
qse_rex_exec (rex,
app.matString.wx_str(),app.matString.Len(),
app.matString.wx_str(),app.matString.Len());
Refresh ();
}
void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event))
{
wxMessageBox(_T("This is a wxWidgets Hello world sample"),
_T("\uB108 \uBB50\uAC00 \uC798\uB0AC\uC5B4?"), wxOK | wxICON_INFORMATION, this);
}
void MyFrame::drawArrow (wxDC& dc, qse_rex_node_t* f, qse_rex_node_t* t)
{
}
void MyFrame::drawNode (wxDC& dc, qse_rex_node_t* n)
{
if (n->id == QSE_REX_NODE_BRANCH)
{
dc.DrawText (_T("<BR>"), nodex, nodey);
}
else if (n->id == QSE_REX_NODE_CHAR)
{
qse_char_t x[2];
x[0] = n->u.c;
x[1] = QSE_T('\0');
dc.DrawText (x, nodex, nodey);
}
else if (n->id == QSE_REX_NODE_START)
{
dc.DrawText (_T("<ST>"), nodex, nodey);
}
else if (n->id == QSE_REX_NODE_END)
{
dc.DrawText (_T("<E>"), nodex, nodey);
}
else if (n->id == QSE_REX_NODE_GROUP)
{
dc.DrawText (_T("<G>"), nodex, nodey);
}
else if (n->id == QSE_REX_NODE_GROUPEND)
{
dc.DrawText (_T("<GE>"), nodex, nodey);
}
else if (n->id == QSE_REX_NODE_NOP)
{
dc.DrawText (_T("<NOP>"), nodex, nodey);
}
}
void MyFrame::drawChain (wxDC& dc, qse_rex_node_t* n)
{
qse_rex_node_t* t = n;
while (t != QSE_NULL)
{
if (t->id == QSE_REX_NODE_BRANCH)
{
drawNode (dc, t);
nodex += 50;
int oldx = nodex;
drawChain (dc, t->u.b.left);
nodex = oldx;
nodey += 50;
drawChain (dc, t->u.b.right);
}
else
{
drawNode (dc, t);
nodex += 50;
}
if (t->id == QSE_REX_NODE_GROUP)
t = t->u.g.head;
else if (t->id == QSE_REX_NODE_GROUPEND)
t = t->u.ge.group->next;
else t = t->next;
}
}
void MyFrame::OnPaint(wxPaintEvent& event)
{
wxPaintDC dc(this);
//wxClientDC dc (this);
dc.SetPen(*wxBLACK_PEN);
dc.SetBrush(*wxGREY_BRUSH);
// Get window dimensions
wxSize sz = GetClientSize();
#if 0
// Our rectangle dimensions
wxCoord w = 100, h = 50;
// Center the rectangle on the window, but never
// draw at a negative position.
int x = wxMax (0, (sz.x - w) / 2);
int y = wxMax (0, (sz.y - h) / 2);
wxRect rectToDraw(x, y, w, h);
// For efficiency, do not draw if not exposed
if (IsExposed(rectToDraw)) dc.DrawRectangle(rectToDraw);
#endif
if (start)
{
nodex = 5; nodey = 5;
drawChain (dc, start);
}
}