IFSGEN v1.0 (c) January 1991 Written with AMOS (c) 1990 Mandarin/Jawx By Andrew Kreibich SEE END OF FILE FOR ADDITIONAL DOCS/CHANGES FOR LATER VERSIONS This file refers to IFSgen and IFSgenDEM. The DEM version is identical to the real thing except that all saves have been disabled. You can save yourself a lot of time (and your pictures) by registering. See DISTRIBUTION, below. Note: To toggle Wbench screen use left-Amiga-A (Alt-N and M will not work) To quit without using the quit menu press Ctrl-C. ######################### MEMORY REQUIREMENTS ######################### My machine is an A500 with 1 meg of ram. I forked out a lot of hard earned cash for the extra half meg and I intend getting some use out of it! Therefore when I write programmes I usually use up plenty of memory in order to get more speed where possible. I have not tried this programme on a 512k machine, so I don't know if it would run. It will almost certainly not run on a 512k machine if workbench is loaded and may still cause some problems when you have generated a lot of triangles or when the programme tries to open the palette tool. If you have been using it for a while and especially if you have been changing from mono to colour and back a lot then you will probably end up with fragmented memory which could result in strange things happening or your machine crashing. I will try to fix this in version 3 if I get enough response from people who are having this problem. (it only happens to me very rarely so I haven't bothered to do anything about it). ################ DISTRIBUTION ################ THIS PROGRAMME IS SHAREWARE! This means that my wallet would appreciate a little feedback for all my efforts! You may distribute the DEM version of this software to anyone providing you observe the following conditions. YOU MAY NOT DISTRIBUTE THE FULL VERSION OF IFSgen TO ANYONE ELSE WHO HAS NOT REGISTERED WITH ME. (give them the DEM version instead!) (a) You don't make any money from it (apart from a nominal copying fee) without my prior written permission. (b) You may not include any part of it in any commercial release (including SHAREWARE or one of its variations) without my prior written permission. (c) You give me credit for any of my routines in your doc. files and/or the programme you use them in. (FEED MY EGO!) (d) You distribute this entire doc. file with the programme and also the .IFS and .IFF files in the drawer. The only exception to this is if it is on a magazine's coverdisk and you need the space. In this case you may delete the .IFF files, but NOT the .IFS files, everyone else please leave them alone. (e) You may use the demonstration version on the coverdisk of a magazine providing you include all files with the exception of the .IFF files (see (d)). (f) You write back and let me know what you think of it along with a SHAREWARE donation (min $20 Australian) To Andrew Kreibich Box 333 Wantirna South Victoria Australia. 3152 If you register and send $20 (Australian dollars please, our banks charge a fortune to convert), I will try and make any changes you suggest and I will send you the latest upgrade (with all features enabled), the AMOS source and some other AMOS routines and games I am working on. AMOS programmers can also get a copy of the palette procedure which this programme uses. This can be inserted into your own programmes with minimum of fuss. Let me know if you want it. FREE to anyone who registers! Naturally if you think I have done a really fantastic job on this and you cannot help but show your appreciation by sending more than $20 (Australian Dollars!) etc. then I will happily accept it! If you have the full version and you have registered: Thanks! If you have the full version and you have not registered: Then someone gave it to you illegally! Please register and do something anatomically unpleasant to the pirate who gave (sold?) it to you! WHAT IS IFSGEN? *************** Ifsgen is a programme to generate and display iterated function systems. (IFS's). These are a type of fractal which exploit the self-similar nature of some shapes to produce a code (the IFS code) which can be used to regenerate the image. One advantage of this is that a typical IFS code is about 1/500th the size of the original image's code. An example of a self-similar shape is a fern frond. Each 'branch' of the frond is a smaller copy of the entire frond. What is an IFS code? ********************* (You can skip this bit if you wish) The ifs code is a set of numbers which describes how each part of the fern (or any other image) can be derived from the main shape. It does this by defining a matrix which describes the mathematical transformation for getting from the main image to the smaller image. See the Fern example in the programme for this. In order for the programme to calculate the matrix you must specify 3 points on the main image and the corresponding 3 points on each of the 'parts' or transformations. When the programme knows the coordinates of each of these points it can work out the IFS code. I have labelled the main image A and subsequent transformations B,C,D etc. The three points on each image are labelled A1,A2,A3. It is important to make sure that the points B1,B2,B3 correspond to these same points on the original image. The IFS code is a set of 6 numbers for each transformation which I have labelled A,B,C,D,E and F. These ARE NOT THE SAME as the A,B,C etc which I labelled the points with. Sorry if this is a bit confusing but you don't need to worry about the actual IFS code to use the programme. To plot the picture the programme picks a point on the screen and then chooses one of the transformations at random and applies this to the point which is then plotted. The new point is then subjected to the same procedure, and this process continues until the user selects stop. Mathematically Xn = A*X + B*Y + E Yn = C*X + D+Y + F Where Xn = new point's X coordinate Yn = new point's Y coordinate X = last point's X coordinate Y = last point's Y coordinate A,B,C,D,E and F are the IFS code for the randomly selected transformation. This method of generating the image is sometimes known as The Chaos Game. For further information consult any good book on Fractals. The two that I used were "Fractals Everywhere" By Michael Barnsley (Academic Press) and "The Science of Fractal Images" Edited by H.O.Peitgen and D.Saupe (Springer-Verlag) INSTRUCTIONS and EXPLANATION OF MENU ITEMS: ****************************************** GETTING STARTED. (A quick tutorial) When you first start IFSGEN you will probably be presented with a blank screen (unless I have got around to making a fancy title screen or something like that!). I did, so you can ignore the last sentence. Incidentally all of the pictures on this screen were generated with this programme. You should find their associated IFS files with this programme. There are 4 menus which you can use. You can start a picture in one of 3 ways. 1. Load IFS from the PROJECT menu. 2. Add Triangle from the TRANSFORMATION menu 3. Select one of the 4 examples from the EXAMPLE menu. First time users will probably find it easiest to select one of the examples. Spiral is the simplest one. When you have selected this you will see three triangles drawn on the screen. The corners of these triangles are labelled A1,A2,A3 (main triangle) and B1,B2,B3 and C1,C2,C3 (The two smaller triangles which are used to generate the transformations from the main one). Some of these will be difficult to see because they are obscured by some of the others. Next select GENERATE from the PICTURE menu. The screen will clear and you will slowly see the spiral generated in two colours (Green and Blue unless you have already discovered the Palette!). This will take a few minutes to generate. Notice that the small green part of the image is really a copy of the whole image. (In other words it is self-similar, and the green spiral is known as an affine transformation of the whole image). Similarly, the blue section is also a copy of the whole image. When the image has 'developed' to your satisfaction select stop from the PICTURE menu, and then select Show Triangles from the TRANSFORMATION menu. This will draw the three triangles on top of your image, so you can see how the picture is constructed from these. Now select 'Change Triang B' from the TRANSFORMATION menu and you will see triangle B drawn in a different colour and a line leading to the mouse. You now have to redraw the triangle using the mouse. Place point 1 first. This time put it in the same place as it originally was (On the left corner of the big triangle A) by clicking the left mouse button over this point. Next place corner B2 (put it over the original B2 this time) and finally place corner B3, put it fairly near the original B3 but not in quite the same spot. Now select GENERATE again and see how the shape has changed. NOTE: The shape is VERY SENSITIVE to small changes in the positions of the triangles. You may also like to look at the other examples. SIERPINSKI constructs a Sierpinski triangle. This one is fairly easy to understand. Each of the three small triangles is a smaller copy of the big one and each small one contains three smaller ones and so on. FERN draws a fern (surprise surprise!) This consists of the main triangle and FOUR transformations. The fourth (Triangle E) is a bit hard to see. It is a very thin copy of the fern and is used to generate the stem. You will see the stem in red when you generate it. If you wish to change some of the points on this do it carefully. In particular it is very important to keep the small triangles in the right place with respect to the others. I.E. if A2 and B2 are not in the same place you will get a very strange fern! So if you move A2 make sure that you move B2 to the same place! The same goes for the following points. A1 and E1 A3 and C2 B1 and E2 Also if E3 is not on a straight line between E1 and E2 you will end up with very fat stems! (You will not do any harm if you don't follow these rules but you will probably end up with something that looks nothing like a fern!) SMALL variations to these triangles can produce a variety of ferns and trees. To make a tree just move C3 close to the line between C1 and C2, and move D3 close to the line between D1 and D3. You could also try moving A3 and C2 and D3 to the left. IFS! generates the letters IFS! Each letter is made up of smaller copies of IFS! and each small copy is made up of even smaller copies. When you get good at manipulating these you might like to try a few words of your own. Also LOAD some of the IFS files which I have provided and see how these are generated. In particular you could look at some of the galaxy ifs's which are in the drawer. These are all variations of the initial spiral shape with a few extra triangles added to make the other 3 spiral arms. Making small changes to triangle G will greatly change the spacing of the arms and the overall density of the galaxy. You can also change the density of the pictures by stopping the generation earlier or later. Look at the IFF picture 'Galaxies' This was made by combining various galaxy ifs's on the same picture. To do this you should use load iff to load a picture, then add your IFS and use Continue (not Generate) when you think you have the triangles in the right position. Keep adding other IFS codes and use the continue option to draw them on your picture. Finally save the picture with save iff. If you haven't guessed it already, this is how the title screen was generated. By the way if you want your galaxies to look like galaxies instead of multicoloured blobs, then you will have to change the palette to various shades of white and grey. If you want to see the colours I used then load one of the IFF pictures and then call up the palette tool. In this version the IFS file does not save colour information but IFF files do. If you think you are getting the hang of things try the other menu items or find a picture which displays self-similarity and try to generate it! (this can be quite hard at first so start with something simple) Alternatively just put a few triangles on the screen and see what happens! EXPLANATION OF MENU ITEMS ************************* PROJECT MENU: ABOUT: Try it and see! NEW: clears everything! LOAD IFS and SAVE IFS: Load and save the IFS code for the images but not the actual pictures. (Use LOAD IFF and SAVE IFF in the PICTURE menu for this.) SAVE IS DISABLED IN THE DEM VERSION INSTRUCTIONS: Try it! QUIT: Do I really need to say it? TRANSFORMATION MENU: This allows you to define and manipulate the various transformations (triangles) which make up the image. You will need to select Generate to see the effect of any changes on your image. ADD TRIANG: This adds another triangle to the image. You should also use this to start an image definition from scratch. Clicking this will result in a line being drawn from the current mouse position to somewhere else on the screen (it doesn't matter where the other end is, as it is the position of the mouse which is important). If this is the first triangle (Triangle A) then the first point wil be A1. Move the mouse to the position you want A1 and click the left mouse button. Next place A2 and A3. You should then add at least 2 more triangles. You cannot GENERATE an image until you have at least 3 triangles (including A) defined. If you make any of the others larger than A the image will probably be much larger than the screen. (This isn't a fatal problem but you should remember that triangle A is used to define the position of the whole shape, while the others are used to define the position of SMALLER parts of the shape, so if you are trying to produce something in particular keep this in mind. If not then feel free to experiment!) You can have a maximum of 26 triangles because I ran out of letters in the alphabet, maybe next time I should programme in Chinese? Apart from this there is no reason why this could not be increased. CHANGE TRIANGLE: allows you to reposition a triangle. Unfortunately you must place all three corners, although the original position is displayed until you have finished so that you can see where it was! Maybe in version 2 I will fix this so that you can just reposition one corner? (If you want this then write and let me know!) DELETE TRIANGLE: Fairly obvious! But there are two things which you should be aware of. 1. All other triangles will be relabelled so that you still have a complete alphabetical sequence. I.E. if you delete B then C will become B, D will become C etc. 2. You cannot delete triangle A. All others use this as a reference. If this did not exist the programme could not calculate the IFS code. Sorry, 3 things! 3. At this stage there is no check to ask if you are sure. Maybe Version 2? MOVE: this is to allow you to resize and reposition the image on the screen. This is done by manipulating the IFS code, not the image, so you will have to Generate again after selecting this. ZOOM IN: allows you to define a rectangular box with the mouse Click left mouse button on where you want the top left corner of the box and drag it to the place you want the bottom right corner. Let go and the area inside the box will be enlarged to fill the screen. ZOOM OUT: works in a similar way to zoom in but this time the area displayed on the screen will be shrunk to fit inside the box. This will allow you to see any areas of image which have gone off the screen. NOTE: The zoom functions were intended to allow fairly small resizing of the image. Excessive use of these will result in large rounding off errors. You should be able to ZOOM IN by a factor of about 1000 and ZOOM OUT by a factor of about 1,000,000 without any trouble. If you go too far your picture will not be very accurate but the programme should still run. CENTRE: This allows you to recentre the picture. Place the crosshair where you want the new centre to be. The triangles will be moved so that this point will now be at the centre of the screen ROT 90, 180, 270: Rotate the image 90, 180 and 270 degrees respectively in an anticlockwise direction. FLIP X: Flips the picture from left to right. FLIP Y: Flips the picture from top to bottom. FINE TUNE: Allows you to display and change the position and/or the IFS code of any point or triangle respectively. (see "What is an IFS code?" above.) This brings up a window with the letters A to Z at the top. These are for the triangles which you have defined. Any triangle which has not been defined SHOULD be displayed in a different colour and cannot be selected. Select the triangle you wish to fine tune (or just view) by clicking on its letter with the mouse. This will display the coordinates of the corner points of your triangle together with the associated IFS code. Click the mouse on any box you wish to change and retype it. Press return when done. (There are a couple of 'slightly undesirable features' in this which might appear from time to time, just make sure that the number in the box is right before you quit. These will take any number between 1E-14 and 1E+15 (I hope!), but be aware that if you position one of your points at a screen coordinate of 1E+15 you will find that the programme takes a very long time to draw the triangles! To change another triangle just click on the letter. When you have done select quit. NOTES: You cannot change the IFS code for triangle A (this will always be displayed as zero). There is no way of getting your original settings back after you have pressed return, unless you have written them down somewhere or you have used the SAVE IFS option in the PROJECT menu. Something else for Vers. 2? HIDE/SHOW triangles: Fairly self explanatory! PICTURE MENU: GENERATE: This clears the screen and starts the picture generating. This will also disable the TRANSFORMATION and EXAMPLE menus together with the New, load ifs and save ifs from the project menu. You cannot generate until you have defined at least three triangles. STOP: Stops the picture from generating and allows you to use all of the other menus. CONTINUE: This does exactly the same as Generate except that the screen is not cleared first. This can be used to either continue generating a picture after it has been stopped or for generating an image on top of another image or an iff screen which you have loaded. PALETTE: This brings up a palette requester which I wrote called Gumbypal. This is an AMOS procedure which you can inlcude in your own AMOS programmes. This procedure currently supports the following features. DRAGBAR: This is the message (Gumby's Palette) at the top of the screen. Hold left mouse button down while you are over this and drag the palette screen up and down your screen. ABOUT: Work this out for yourself! RGB sliders: These work in the usual way, just click on the slider with the left mouse button and drag it along, or just click on the spot you want it to go to. Up to 32 colours are displayed in little boxes on the right of the screen. You can select two of these at any time. Left mouse button selects the CURRENT colour. This will be changed by moving the slider bars. Right mouse button selects the TO colour. This is used by COPY, SPREAD and CYCLE, to copy, spread or cycle from the current colour to the TO colour, and also by SWAP to swap the current colour with the TO colour. The TO and CURRENT colours are outlined in different colours so that you can see them. It is possible that the colours used by these outlines are hard to see because they are the same or similar to the colour of the background around the colour boxes. COLOUR Buttons: There are 6 of these, GET, COPY, SWAP, CYCLE, SPREAD and SKIP. These are selected with the left (and sometimes right) mouse button. COPY and SWAP are explained above. CYCLE. Press Left mouse button to cycle forward and right mouse button to cycle backwards. SPREAD spreads the colour from the current colour to the TO colour and works in conjunction with the SKIP button. If SKIP is 1 then the spread will skip 1 colour in between each one it spreads. Best way is to try it! I put this in because I thought it might be useful in a Mandelbrot type programme. SKIP can be any number you like providing it is between 0 and 9. I don't think it would be a very good idea to set it to a number greater than the number of colours between the two colours you are spreading between. This could cause some unpredictable results. Usually you will leave this set to zero. GET brings up a window with a number of preset colours. You can pick any colour to be changed into one of the preset colours. Pick your CURRENT GET colour by clicking it with the Left mouse button. This will not disturb your CURRENT and TO settings although the outlines on these boxes may disappear while the get window is open. (They will return when you close this window.) When you open this window the CURRENT GET colour will be set to colour number 2 (third from the left on the top row). If you don't want to change this colour then select a different one. The up and down arrows on the left move the list of colours up and down. P picks the colour in the middle of the box and changes your CURRENT GET colour to this. R assigns a random colour to your CURRENT GET colour. Cancel CURRENT returns your CURRENT GET colour to what it was before you opened the GET window. Cancel ALL returns all of the colours to what they were before you opened the GET window. QUIT quits the GET window. SPRITE performs a Get Sprite Palette when you click it. DEFAULT Left mouse returns all colours to the programme's default colours DEFAULT Right mouse selects the AMOS default palette. Exit CANCEL cancels all changes and returns you to your programme. Exit ACCEPT keeps all changes and returns you to your programme. END OF PALETTE DOCS. SAVE IFF and LOAD IFF: save and load an IFF screen. THIS DOES NOT SAVE OR LOAD THE IFS CODE NEEDED TO GENERATE THE TRIANGLES! (Use load and save IFS in the project menu for this.) SAVE IS DISABLED IN THE DEM VERSION MONO/MULTI COLOUR. Allows image generation in a single colour (which is faster) or plots each transformation in a different colour (which can be useful if you want to see what each triangle is doing) EXAMPLE MENU: contains 4 examples. Select them and then GENERATE. See the tutorial 'getting started' above. WARNING! Many functions are irreversible. (eg. NEW, DELETE etc.) There are no 'idiot proof' boxes asking you 'are you sure' in this version. (Something else for V2!) BUGS **** This code has been thoroughly tested by an expert bug finder (Perry Rosenboom) who has the incredible ability to run a programme for the first time and find bugs that happen once in a blue moon! (I never did manage to reproduce the one which turned the screen white, although I have made sure? that it can't happen again!) My code no longer contains any bugs. It may contain a few Slightly Undesirable Features (SUFs). If you find any SUFs in it please write back and let me know. It is possible that you will produce a set of triangles for which it is impossible to solve the set of simultaneous equations which are used to find the IFS code. This is NOT a bug! (you are trying to do something which is mathematically impossible!) This would result in a divide by zero error. I have put in a routine to trap this, but if you come up with any other divide by zero errors please send details. If you try to generate an 'impossible' ifs code (this will usually only happen if you put all three corners of one triangle in the same spot, or if you zoom in too far, thereby making a triangle of zero size) then a message will appear on the screen asking you to redefine your triangles. Press the space bar to continue. Unfortunately due to a minor SUF, sometimes the message will flash up once for each triangle and you will have to keep pressing the space bar until it goes away. It will go eventually! When this message screen is displayed it may cause you to run out of memory and the programme will stop. (see 'memory requirements' above.) So if the programme stops when you have just placed a triangle it is almost certainly due to lack of memory. I'm working on it! AMOS PROGRAMMERS NOTES ********************** If you have registered and have the source! If you are trying to figure out what I have done, good luck! I had to restructure a large part of it and the result is a hybrid between two control systems. I might fix it up one day, but at the moment it works so I'm happy! You will also notice that I'm not very good at putting in the REMs! There are 3 general procedures which you may find useful 1. GUMBYPAL: My palette procedure. Full details of this can be found in gumbypal.doc. This has been modified slightly by the addition of a few lines at the end to handle the dummy screen which is used by ifsgen to assist in hiding/showing the triangles. 2. GPBUTTONS: A procedure for drawing fancy buttons around a zone of text. See gumbypal.doc for details. 3. SIMEQNS: A simultaneous equation solver. This should be fairly self explanatory. The coefficients of the variables are fed into an array, SIMA# and the answers are returned in the array SIMX# These must be made global. (If only Francois had allowed us to pass an array as a parameter!) Sorry, 4 things. Amongst the procedures which you may find useful are..... 4. STRINGGET: This is used in the fine tune window to display and change various strings. This has been modified a few times and is realy due for a complete rewrite to make it a bit more logical and capable of selecting numbers and/or letters. If anyone gets around to doing this before I do please send it back! The last parameter is used to allow or disallow changes to the displayed string. The above 4 routines were written in a way which made them as general as I could possibly make them so that they could easily be used in other programmes. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% I hope you find this programme useful and/or interesting and that you bother to take the time to write back. If you have written anything that you would like to send me, please feel free to do so. BUT PLEASE DON'T SEND ANY SILLY SCROLLY DEMOS, MEGADEMOS, ULTRADEMOS, ULTRAMEGADEMOS, MEGAULTRADEMOS, ULTRACOSMICDEMOS, ALPHAGAMMAOMEGADEMOS, ZAPHODEFFINGBEEBLEBROXDEMOS OR ANYTHING ELSE VAGUELY RESEMBLING A DEMO! AMOS IS A BRILLIANT LANGUAGE SO HOW ABOUT USING IT TO WRITE SOMETHING REALLY USEFUL? Happy (real) programming. Andrew. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% V2.0 docs ********* Rewrote some of the code to make procedure calls more consistent and to remove a problem which sometimes caused a recursive procedure call which eventually resulted in an out of memory error. (I admit that this just about rates as a bug! Shock!! Horror!!! Shutup Perry!) Added a close editor line to conserve memory when running from AMOS Repositioned the mouse pointer so that it didn't cover up the centre of the cross hairs when you are defining your triangles. Removed the limits to the position of the mouse so that you can put it anywhere on your screen. NTSC users probably didn't find this a problem but PAL users would have had trouble using the bottom of the screen until after they had selected zoom. Colour palette is now saved with the ifs codes. You have the option of loading this or ignoring it when you load an ifs file. V1.0 ifs files are compatible with v2.0 but v2.0 files will not load into v1.0! So get rid of v1.0 now! Added idiot boxes for some functions Added ability to adjust single corners of triangles when using CHANGE. To use CHANGE now, just select the triangle you want to change from menu, then click left mouse button near the corner you want to change. Change other corners the same way. When you have finished just click left mouse button somewhere not very near to one of the corners. I have deliberately left the original triangle visible until you have finished your adjustments. I found it more useful this way. Trapped errors. These are reported by their AMOS error numbers. Out of memory and divide by zero will also generate a message. If you have problems, please describe what you were doing and quote the error number. NEW MENU ITEMS ############## CLOSE WORKBENCH. (in PROJECT menu) ********************************** This saves about 40k of memory. PROBABILITY. (in TRANSFORMATION menu) ************************************* You cannot use this until you have at least 3 triangles defined (including A). This allows users to adjust the probability of any particular transformation being plotted. The higher the probability the more likely this particular triangle will be chosen when each point is plotted. To change these just click on the relevant box and retype the correct value (just the same as the way the FINETUNE boxes work). If you don't adjust this then the probability is proportional to the area of the triangle. AREAS BUTTON This returns the probabilities to their default condition which is proportional to the area of the triangle. NORMALISE BUTTON All probabilities should add up to 1. I have provided a NORMALISE button which will recalculate all of your probabilities so that the total is 1. This is so you can enter relative weights without worrying about the total. Eg. if you have two transformations (triangles B and C) and you want B to be twice as likely as C then enter 2 in the space for B and 1 in the space for C. Then click NORMALISE and the programme will recalculate the probabilities giving B = 0.6667 and C = 0.3333. You cannot adjust the probability of triangle A because this is not actually plotted! Click on QUIT when finished. The programme will automatically readjust the probabilities so that they add up to one if you haven't already done so (see NORMALISE BUTTON above). ROTATE ANY. (in TRANSFORMATION:- MOVE menu) ******************************************* Allows you to rotate at any angle or fraction of an angle. Just type in the angle (in degrees) that you wish to rotate at and press return. Positive angles rotate clockwise, negative angles rotate anticlockwise. (Any mathematicians who winced at the last sentence should stop and think! It is the crazy backwards coordinate system of this computer - fancy making positive y values go down! - that results in this apparent heresy. Stick the y axis back the right way and all is fine!) MONO/MULTI colour ***************** You now have a choice of colour when using MONO. This might make it easier to combine 2 or more IFF files into the same picture. You also have a choice of starting colours with MULTI. In each case you will be presented with a number of colour boxes after you select the menu item. Just click on the one you want. CENTRE ****** Made the centre tool a bit easier to use. Just drag the triangles to wherever you want them. Sorry about the flicker but it would use up too much memory to stop it. VERSION 2.1 *********** Compiled version. At last! This allows non-Amos users to run it without messing about with Ramos, and it also increases the speed of the programme. Version 2.2 *********** Tidied up a few bits of code and hopefully stopped the mouse from disappearing. This happened rarely and may be due to an incompatability with Dmouse (or similar) Version 2.3 *********** Registered versions will now have the name of the person who registered in the about screen. Tidied up a few more bits of code. Now uses a bit less chip ram. Version 2.4 *********** Compiled with amos 1.35 so it should run on A1200s.