DEFINITION MODULE CellAutoOut;
(*******************************************************************
Module CellAutoOut (Version 0.4)
Copyright (c) 1988-2006 by Andreas Fischlin, Thomas Nemecek, Olivier
Roth and ETH Zurich.
Purpose Display of 2-dimensional cellular patterns.
Typically used to plot cellular automatons.
Remarks This module is best used together with the modules
CAModBase and CAMonit.
Programming
o Design
Andreas Fischlin 01/07/1988
Thomas Nemecek 01/07/1988
Olivier Roth 01/07/1988
o Implementation
Thomas Nemecek 01/07/1988
ETH Zurich
Systems Ecology
CHN E 35.1
Universitaetstrasse 16
8092 Zurich
SWITZERLAND
URLs:
<mailto:RAMSES@env.ethz.ch>
<http://www.sysecol.ethz.ch>
<http://www.sysecol.ethz.ch/SimSoftware/RAMSES>
Last revision of definition: 01/06/2000 AF
*******************************************************************)
FROM DMWindows IMPORT Window, WindowFrame, RectArea;
FROM DMWindIO IMPORT Pattern, Color;
TYPE
CellAutoID;
Symbol = CHAR;
UnderlayMode = (underlayWhite, dontUnderlay);
CellProcess = PROCEDURE (INTEGER, INTEGER);
VAR
notExistingCA: CellAutoID;
(***********************************)
(*##### Object management #####*)
(***********************************)
PROCEDURE DeclCellOutput(VAR caID: CellAutoID; VAR outWindow: Window;
plotFrame: RectArea; numbX, numbY: INTEGER;
withGridLines: BOOLEAN);
(* caID: name of the CA
* outW: associated output window (must be open, when the procedure
* is called
* plotFrame: maximal area, which may be occupied by the grid.
* The effective area is <= plotFrame. It is put on the lower left
* corner of the plotFrame.
* numX, numY: number of cells in the width (X) and in the height (Y)
* withgridLines: determines, whether the black grid of 1 pixel width is
* drawn or not. Use FALSE if is the number of cells
* is very large.
* The new CA is automatically the currentCA. *)
PROCEDURE RemoveCellOutput(VAR caID: CellAutoID);
(* If this procedure is called the grid is erased on the screen.
* Call it every time, when the associated window is closed! *)
PROCEDURE RemoveAllCellOutputs;
PROCEDURE CellOutputExists(caID: CellAutoID): BOOLEAN;
(***********************************)
(*##### Output procedures #####*)
(***********************************)
PROCEDURE SelectCellOutput(caID: CellAutoID);
(*. selects caID as current output CA and the associated window as
* current output window.
* IMPORTANT: Use this procedure each time, when you take the control
* from DM or when another window was chosen as output window,
* otherwise the output is drawn in a false window! .*)
PROCEDURE GetCurCellOutput(VAR caID: CellAutoID);
PROCEDURE ClearCell(x,y: INTEGER);
(* erases the contents of the cell with the coordinates x, y.
* The COORDINATE SYSTEM is definded as to be 1,1 in the bottom left corner
* of the CA. The x-axis is showing at right, the y-axis upwards.
* This procedure only calls FillCell with pattern light. *)
PROCEDURE FillCell(x,y: INTEGER; pattern: Pattern; col: Color);
(* fills the contents of the cell with the coordinates x, y with
* the "pattern" and 'color'. *)
PROCEDURE DrawInCell(x, y: INTEGER; sym: Symbol;
underlay: UnderlayMode);
(* writes the symbol sym in the middle of the cell with
* the coordinates x, y.
* 'underlay' defines, if the cell where the character is written
* is underlaid with a white area in the middle or not. *)
PROCEDURE DoForAllCells(doCellProc: CellProcess);
(*. allows executing of procedures with all cells of the current CA .*)
(**************************************)
(*##### Auxiliary procedures #####*)
(**************************************)
PROCEDURE CalcCellArea(x,y: INTEGER): RectArea;
(* calculates the area of the cell x,y without gridLines.
* This procedure allows to use Procedures
* like e.g. RectClicked. *)
PROCEDURE CalcCellMiddle(x, y: INTEGER;
VAR xCoord,yCoord: INTEGER);
(* calculates the middle of the cell x,y in absolute coordinates.
* The values are round off. *)
PROCEDURE GetPlotFrame(caID: CellAutoID): RectArea;
(*. returnes the effective area of the grid included the border
* lines. .*)
END CellAutoOut.