/*
    FILE:        canvas.h
    PURPOSE:    Defines the public routines for manipulating the canvas.
    AUTHOR:        Kevin Waite 
    VERSION:    1.00  (10-May-91)

Copyright 1991, 1992, 2002, 2003 Tunde Cockshott, Kevin Waite, David England. 

Contact David England d.england@livjm.ac.uk
School of Computing and Maths Sciences,
Liverpool John Moores University 
Liverpool L3 3AF
United Kingdom
Phone +44 151 231 2271

Wet and Sticky is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Wet and Sticky is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Wet and Sticky; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 * Boston, MA 02110-1301, USA 

*/


extern int number_of_repaints_needed();
/*  Returns the number of cells needing to repainted.  */

extern void need_to_repaint (/* POINT */);
/*  Requests that the cell at the given point be repainted
    at the next update as it has been modified.  */

extern void next_cell_for_repaint (/* *CELL_PTR, POINT_PTR  */);
/*  Returns a pointer to a cell that needs to be updated as well
    as the location of that cell on the canvas.   If there are
    no more cells to be redrawn then the pointer will be NIL.  */

extern void next_cell_point (/* POINT_PTR */);
/*  Sets the POINT giving the coordinate location of the next
    cell on the canvas to be visited.  There is an even probability
    of each cell being visited.  */

extern CELL_PTR get_cell (/* POINT */);
/*  This function returns a pointer to the cell at the
    given address on the canvas.  */

extern DIRECTION anti_clockwise_from (/*  DIRECTION  */);
/*  Returns the direction found going clockwise from the
    given direction.  */ 

extern DIRECTION clockwise_from (/*  DIRECTION  */);
/*  Returns the direction found going clockwise from the
    given direction.  */ 

extern BOOLEAN neighbour (/* POINT, DIRECTION, POINT_PTR */);
/*  Set bPoint to the coordinate of the point that can
    be found by going one place in the given direction 
    from aPoint.  The direction can be NORTH, EAST, WEST
    or SOUTH.  If bPoint will be off the canvas then the
    function returns FALSE otherwise TRUE.  */

extern void initialise_canvas();
/*  Before it can be used the canvas needs to be initialised to 
    a default state.  This involves setting each of the cells to
    have no paint and for gravity to be uniformly down.  Each cell
    has the default absorbancy value.  */

extern void blob( /* int */);
/* This routine puts a square blob of black paint
   of the given side length centred on the canvas.
   This is used for test purposes.  */

extern void load_file(/*char *, int *, int * */);
/* Load a file from a portable pixmap into the canvas */
