Exercise: Simple GENESIS scripting exercises
--------------------------------------------

These exercises were created by Upi Bhalla for the December 1999
modeling course in Bangalore.

1. Go to Chapter 13 of BoG (Page 215.) You have alredy played around with 
something like the example script. Figure out how to use functions and
variables. If you work through the chapter you will get a decent feel for
a lot of the script language.

2. Using functions.

If your script is more than a few lines long you should probably
use functions in it. You will also need functions if you want
to execute even a slightly complicated operation from a button
or dialog.

- Write a function to create a new dialog. You will need to check if a dialog
  already exists with the same name, so that you don't overwrite an old
  dialog.

- Assign this function to the new dialog, so that you can use the
dialog itself to create new ones.

This is illustrated in ex2.g

3. Messaging is a critical concept in GENESIS. It is the means by which
objects exchange information. To get an idea of how it works, create
a form and put a graph widget in it. Type showobject xgraph. This lists
a lot of stuff, including the legal messages for the graph. You will 
normally only use message 0, which is named PLOT. 
Now create a dialog, and send a message from this dialog to the graph.
In order to run and display the results, create a button for RUN and
RESET as well, just like you did earlier. Set the RUN button to go only
10 steps, so that you can fiddle with the dialog value in between.
You will need to put in a reset command after adding any message, to 
ensure that the simulator has been properly initialised.
Now run this little model. Turn the dialog value up and down, and click
on RUN each time to see how it controls the graph value.
This is illustrated in ex3.g

4. (Fun for 1:00 AM)
Take any of the previous examples, and start to fiddle with the 
graphical elements. There are a bunch of fields relating to the
geometry and positioning of buttons etc. These are
xgeom : x coordinate of top right
ygeom : y coordinate of top right
wgeom : width
hgeom : height

Each of these fields can be set directly either as pixels, or as percentages.

setfield /form/graph ygeom 20
	// This will move the graph to 20 pixels from the top.
setfield /form/graph hgeom 40%
	// This will set the height of the graph to 40% of the parent xform.

You can also set foreground and background colours.

setfield /form/RUN offbg yellow offfg pink
	// Ugh!!

You can even set labels on most graphical widgets
setfield /form/RUN offlabel "Run really fast now"

Note that buttons make a distinction between on and off states, so you have
a proliferation of fgs and labels.

