We are hiring ! See our job offers.
Raw File
There are two main hooks in the original logo where we put our changes
for the wx GUI.  One of these was for the graphics.  This system which
was used was part of the exist logo method for implementing graphics
on different platforms.  If you look at the top of graphics.c, there
are a whole group of #ifdef, #includes, checking for each platform.
As can be seen, we included wxGraphics.h if HAVE_WX is defined.  This
macro is defined during configuration if the --wx option is enabled
during configuration.  All of the definitions in the header point to
function definitions particular to our WX implementation.  This right
here is sufficient to take care of all of the turtle graphics
functionality.  All of the corresponding functions defined in this
header are defined in wxTurtleGraphics.cpp

The other main hook was for our terminal.  There are only a few places
where anything is done for this.  Most of the I/O for the terminal is
done through calls to putc and getc, so instead of calling these
routines, we have them call getFromWX and printToScreen instead which
are defined in wxMain.cpp.  The files which call getc where we
do this are files.c and parse.c.  We define putc to be printToScreen
in the header globals.h as they did for other platforms, but it is
only used in parse.c. We also defined wx_fgets as a replacement for
fgets which is called in coms.c and wrksp.c, as well as flushFile as a
replacement for fflush called in a few files.  Both of these are also
defined in wxMain.cpp.

By defining these basic I/O functions and the graphics functions, the
original logo is basically untouched.  The main graphics routines as
mentioned before are in wxTurtleGraphics.cpp.  Here, the class
TurtleCanvas is defined.  In this file, we have a bunch of extern "C"
routines which are called from graphics.c.  These post messages to the
GUI thread and have operations handled for them in the TurtleCanvas
class.  Some of these are routines for drawing lines, getting the size
of the current GUI screen, and other similar things.

The Main terminal routines are defined in both wxMain.cpp and
wxTerminal.cpp.  Again, there are extern "C" routines defined in
wxMain.cpp.  The terminal printing function adds a character to
printing buffer and signals the GUI to print it.  Then the handling
routine printText in the class wxTerminal in wxTerminal.cpp handles
the actual drawing of the text to the GUI.  Similarly, the GUI takes
in all of the input entered by way of the onChar handler, and when an
enter is pressed, it makes it available to the logo interpreter.  When
the interpreter calls getc, it retrieves a character from this
available buffer.  If nothing is available at the time, it is put to
sleep and woken up by the GUI when something is made available.
back to top