Graphics Support
----------------

Brandy includes limited graphics support under operating systems
other than RISC OS. At the moment it only works for the DOS
version of the program. It includes only a subset of the
facilities provided by the RISC OS VDU drivers but it should be
enough for now.
 
The graphics support is based around a target-independent graphics
library called 'jlib' written by Jonathan Griffiths. This was
chosen as it can be compiled to work under DOS, Windows and Linux
with both svgalib and X. It provides the same interface in all
these environments. The disadvantage of the library is that it can
only work in one fixed resolution. This is set when the library
is compiled. The resolution chosen was 800 by 600 pixels with 256
colours. Roughly speaking this means that Brandy can only support
the standard screen modes found in RISC OS 3.1.

The graphic support includes all of the Basic graphics statements
with some restrictions and a small number of the VDU 23 commands.
The graphics 'plot action' set by VDU 18 is limited to just
setting the colour of a pixel, that is, VDU 18,0,... It is not
possible to, for example, plot points by exclusive or'ing the old
and new pixels. This is a limitation set by the library. Features
such as the extended colour fill patterns and plotting dotted
lines are not supported. The standard RISC OS palettes in 2, 4, 16
and 256 colour modes are emulated and both colour and greyscale
palettes are possible. Modes can be set using either MODE <number>,
MODE <string> or MODE <x size>, <y size>, <depth>.


Jlib
----
Jlib was written by Jonathan Cox. At the time of writing it
is available from the web site:

	http://matrix.crosswinds.net/~jlib/

If you wish to recompile Brandy and include the graphics support
you will need to download the source code of jlib and recompile
the library. Please refer the section 'Recompiling Jlib' below.


Using Graphics under DOS
------------------------
The only way for a DOS program to plot any graphics is to take
over the whole screen. What Brandy does is work with the screen in
what could be called normal 'text' mode and to switch to full
screen when either the Basic statement CLG is used or a 'PLOT'
command is issued (either directly or via another statement such
as MOVE). It will remain in full screen mode until a 'MODE'
command is used when it will switch back to 'text' mode. When
running in a DOS box under Windows it may or may not be possible
to switch between full screen DOS graphics and Windows depending
on the whim of Windows.

An alternative is to use the command line option '-g'. This will
switch the interpreter to full screen graphics mode when it
starts. It will remain like this until the program is ended,
including over mode changes. However if a RISC OS screen mode that
does not support graphics is chosen, say MODE 3, the program will
then switch to text mode and go back to graphics mode when a
screen mode that supports graphics is selected.


Caveats
-------
There are a number of issues with the graphics code at present.

1)  'RECTANGLE ... TO' and 'RECTANGLE FILL ... TO' do not work
    if the source and destination areas overlap. This is an issue
    with the graphics library.

2)  When in graphics mode, scrolling the screen down, that is,
    moving the screen contents down a line, does not work properly.
    The cause of this is the same as in 1).

3)  The ellipse code can only plot an ellipse whose semi major
    axis lies parallel to the X axis. This is a limitation of the
    graphics library.

4)  Clearing the screen sometimes leaves some rubbish down the
    right-hand side of the screen in modes that are less than
    800 pixels wide. This appears to be a bug in the library.

5)  The text screen size is always reset to 80 by 25 when the
    program switches from full screen graphics to text mode.
    
There are a number of points to be aware of that seem to be
the consequence of trying to mix DOS graphics and WIndows.

As noted above, the program runs has to take over the whole
screen before any graphics can be plotted. This does not work
very well. Problems seen include not always being
able to swap back to Windows by pressing alt-Enter, Windows
terminating the program when it take back control of the
screen unilaterally, Windows resetting the palette to the
Windows default palette, output from DOS commands overwriting
what is on the screen and the location of what the program
thinks is the top left-hand corner of the screen changing so
that all output appears in the wrong place. The moral seems
to be that it works but do not be suprised if it goes wrong.


Other Operating Systems
-----------------------
JLIB is platform independent and so in theory it should not be a
problem to create a version of the interpreter that support
graphics that run under other operating systems. In practice it is
more complex. The Linux version using svgalib, for example, does
not initialise properly. Even if worked, there are issues of
security here: many people do not like svgalib as programs that
use it have to have root priviledges. For many this is out of the
question. As Brandy is a programming environment, giving it this
kind of authority would not be clever. Still, the pieces are there
is somebody wishes to pick them up and fit them together.

There is a mythical 'X' version of the program, that is, it
exists as an idea. Zero X programming experience is the reason
why it has not been written yet.


Recompiling Jlib
~~~~~~~~~~~~~~~~
The graphics library jlib is a pre-requisite for Brandy's graphics
support. It will be necessary to download it from the web site:

	http://matrix.crosswinds.net/~jlib/

It comes in source form and will have to be compiled before use.
The instructions for this are contained in the jlib documentation.

Notes:
1)  The DJGPP version of the library is the one to create.

2)  The code should be compiled to use a screen resolution of
    800 by 600. Brandy's graphics support has never been tested
    with anything else. The screen size is not hard coded into
    Brandy's code but it is best to assume it will not work.
 