------------------ SCOUT (SCreen layOUT) QUICK REFERENCE ---------------------

Warning: this documentation isn't quite finished yet...


-- SYNTAX --------------------------------------------------------------------

Definitions are followed by the semi-colon;

Attributes within a window field list can be separated by white space or
commas or both (note the last item must not be followed by a comma).

# UNIX shell style one-line comments

Variables must be declared before use (even ones that already exist in Eden)
Redeclaration of type is not possible

Name space: can access Eden variables directly.



-- DATA TYPES ----------------------------------------------------------------

string: "guides and scouts"
integer: 123
real: 123.4
point: {10, 20}, or box . nw, or...
box: [{10, 20}, point2], or [[{10, 20}, height, width], or...
frame: (box1, [p1, {30, 1}], box42)
window: {type: DONALD, box: b, pict: "FIGURE1" border:5}
display: <window1 / donald3>


-- WINDOW ATTRIBUTES ---------------------------------------------------------

type: TEXT, DONALD, ARCA, IMAGE or TEXTBOX

frame: a frame: a list of boxes which the text will flow through        (TEXT)
box: a box: the geometry                        (DONALD, ARCA, IMAGE, TEXTBOX)

string: a string: the contents                                 (TEXT, TEXTBOX)
pict: a string: the picture used                         (DONALD, ARCA, IMAGE)

xmin, ymin, xmax, ymax: an integer: drawing coordinate system         (DONALD)
font: a string: "{family size style}"...                       (TEXT, TEXTBOX)
  family = times, courier or helvetica,
  size = in points (1/72th inch)
  style = normal, bold, roman, italic, underline, overstrike
    (multiple styles are possible: "{times 12 {bold italic}}")
alignment: NOADJ, LEFT, RIGHT, EXPAND or CENTRE                (TEXT, TEXTBOX)
bgcolour or bgcolor: a string                                      (all types)
fgcolour or fgcolor: a string                                      (all types)
bdcolour or bdcolor or bordercolor or bordercolour: a string       (all types)
border: an integer                                                 (all types)
relief: a string ("raised", "sunken", "flat", "ridge" or "groove") (all types)
sensitive: ON, OFF, MOTION, ENTER, LEAVE or a sum of these         (all types)


-- SENSITIVE -----------------------------------------------------------------

OFF: user actions inside window cause no redefinition

ON: mouse actions inside window cause redefinition:
      windowname_mouse = {button, type, state, x, y}           (DONALD, IMAGE)
      windowname_mouse_boxnumber = {button, type, state, x, y}          (TEXT)

	button: button number,
	type: 4=pressed, 5=released,
	state: shift +1, capslock +2, control +4, meta +8, was-pressed +256
	x, y: mouse coordinates (in the window's coordinate system)

    key strokes inside window cause redefinition:
      windowname_key = {key, type, state, x, y}                (DONALD, IMAGE)
      windowname_key_boxnumber = {key, type, state, x, y}               (TEXT)

	key: ascii code of key pressed
	type, state, x, y: as above

MOTION: mouse motion inside window causes redefinition
      windowname_mousePos = {x, y}                             (DONALD, IMAGE)
      windowname_mousePos_boxnumber = {x, y}                            (TEXT)

ENTER: mouse motion into the window causes redefinition
      windowname_mouseEnter = 1;                               (DONALD, IMAGE)
      windowname_mouseEnter_boxnumber = 1;                              (TEXT)

LEAVE: mouse motion out of the window causes redefinition
      windowname_mouseLeave = 1;                               (DONALD, IMAGE)
      windowname_mouseLeave_boxnumber = 1;                              (TEXT)


-- FUNCTIONS -----------------------------------------------------------------

ImageFile(type, filename)
ImageScale(source, xscale, yscale)
if condition then expression1 else expression2 endif
strcat(string, string)
substr(string, integer, integer)
itos(integer)
strlen(string)
shift(box, integer, integer)
intersect(box, box)
centre(box, box)
enclose(box, box)
reduce(box, box)

?
append(frame, integer, box)
insert(list, position, expression)
delete(list, position)
delete(frame, integer)


-- EXAMPLES ------------------------------------------------------------------

%scout
window ash = {
  type: TEXT
  string: "Ash"
  frame: ([{10, 10}, {100, 100}])
  sensitive: MOTION
};
screen = <ash>;

... need more examples...


-- MORE INFORMATION ----------------------------------------------------------

See http://www.dcs.warwick.ac.uk/modelling/ for more detail.
