Path: wupost!spool.mu.edu!agate!doc.ic.ac.uk!marble.uknet.ac.uk!uknet!brunel!cs89ssg
From: cs89ssg@brunel.ac.uk (Sunil Gupta)
Newsgroups: alt.sources
Subject: cellular automata simulator Part 1/2
Message-ID: <C4tLF2.2qt@brunel.ac.uk>
Date: 1 Apr 93 19:42:37 GMT
Followup-To: alt.sources.bugs
Organization: Brunel University, Uxbridge, UK
Lines: 500
X-Newsreader: TIN [version 1.1 PL8]

Archive-name: automata
Submitted-by: cs89ssg@brunel.ac.uk


        CELLULAR AUTOMATA SIMULATOR ( Version 1.0A APRIL 1993)
        ------------------------------------------------------



INTRODUCTION
     This is another example of a reasonably serious  application
     written using the "Simple User Interface Toolkit" (SUIT).

     It follows on from my petri-net simulator which was released
     Nov 1992.

     Please read the DISCLAIMER and SUIT sections below.


ABOUT
     The program will  not  run  very  well  (if  at  all)  on  a
     monochrome system.  it was designed for colour.

     The program is operated entirely through a graphics interface:

INTERFACE
      .---------------------------------------------------------------.
      |       .----------------------------------------------------.  |
      |       |         .----------------------------------------. |  |
      |       |  STEP   |                                        | |  |
      |       |  GRID   |                                        | |  |
      |       |  CLEAR  |                                        | |  |
      |       |         |                                        | |  |
      |       |  FILE   |                                        | |  |
      |       |         |            G R A P H I C S             | |  |
      |       |.-------.|                                        | |  |
      |.-----.||       ||                                        | |  |
      ||     ||| RULES ||                                        | |  |
      ||     |||  LIST ||                                        | |  |
      ||ABORT|||       ||                                        | |  |
      ||     |||       ||                                        | |  |
      |`-----'||       |`----------------------------------------' |  |
      |       |`-------'                                           |  |
      |       |        rows###  cols###  states###  RIBBON-RIBBON  |  |
      | EXIT  |                                                    |  |
      |       `----------------------------------------------------'  |
      `--------------------------------------------------------------'

     The graphics area contains rectangular cells which can  have
     various  states.  The  state is incremented by clicking with
     the mouse, and decremented by pressing a key when the  mouse
     is over the cell.

     To operate this program all you have to do is draw something
     in the graphics area, click on a rule, and see what happens.

     STEP    toggles  whether  the  automata  single   steps   or
            continues  execution  until  the  operation  has been
            stopped.

     GRID   toggles the state of the grid to be on  or  off.  The
            grid  will  be  drawn  to  the  aspect  ration of the
            Graphics widget.

     CLEAR  sets the state of the cells in the automata to 0  and
            redraws  the  graphics. The redrawing part can appear
            to be a bit slow when there are a  lot  of  rows  and
            columns.

     FILE.. A menu button whose menus  allows  file  loading  and
            saving. Currently only files saved by the program can
            be loaded. This may change in the near future.

     RULES
     LIST   A scrollable list of current  rules.  See  below  for
            details of the rules.  selecting a rules executes it.
            An Abort widget will be brought up on the  left  edge
            of the display.

            If the STEP gadget is selected (DOWN) the system will
            do   one   execution  of  the  selected  rule  before
            returning to an idle state.

            If the step  gadget  is  de-selected  (UP)  then  the
            system  will  continue  to  execute the selected rule
            until  the  system  reaches  a  static  state  or  is
            interrupted (by selecting the abort widget).

     ROWS   sets the number of rows in the current automata. Will
            reset  the contents of the automata. <RETURN> must be
            pressed to accept the new number of  rows.  Currently
            the  number  of  rows has been arbitrarily limited to
            100.

     COLS   as above but sets columns.

     STATES sets the number allowable number of states  the  user
            can  enter.  Has  no  effect  on the execution of the
            automata. Currently there  are  a  ridiculously  high
            number  of states, but in practice only about 10 will
            actually ever be used.

            cells with higher states than the value input will be
            thresholded to the new maximum state.


     RIBBON This gadget can not be directly interacted  with.  It
            just  shows the colours associated with the different
            states.

     EXIT   terminates the program.


RULES
     The notation used relies upon the neighbours of the  current
     cell.

                       +------+--------+------+
                       |      |        |      |
                       |  NW  | North  |  NE  |
                       |      |        |      |
                       +------+--------+------+
                       |      |        |      |
                       | West | Centre | East |
                       |      |        |      |
                       +------+--------+------+
                       |      |        |      |
                       |  SW  | South  |  SE  |
                       |      |        |      |
                       +------+--------+------+

     The following rules have been implemented in this release of
     the simulator.

              -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
     ANNEAL

            The  behaviour   of   this   rule   is   similar   to
            thermodynamic annealing.

             state  |
            old new |           reason
            --------+----------------------------
             0   1  | 4,6,7,8,9 active neighbours
             1   0  | 0,1,2,3,5 active neighbours

              -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
     BRIANS_BRAIN

             state  |
            old new |           reason
            --------+------------------------------------
             0   1  | exactly 2 neighbours are in state 1
             1   2  | always
             2   0  | always


              -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-

     CODD

                +---+
                | 1 |
            +---+---+---+    +---+
            | 0 | 1 | 1 | -> | 0 |
            +---+---+---+    +---+
                | 0 |
                +---+

                +---+
                | 0 |
            +---+---+---+    +---+
            | 1 | 0 | 1 | -> | 1 |
            +---+---+---+    +---+
                | 1 |
                +---+

                +---+
                | 1 |
            +---+---+---+    +---+
            | 1 | 0 | 1 | -> | 1 |
            +---+---+---+    +---+
                | 1 |
                +---+

              -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
     DIAMONDS
            new state = North or East or South or West

              -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
     4 WAY FILL

             state  |
            old new |           reason
            --------+---------------------------------------------
             0   2  | if North, East, South or west are in state 2



              -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
     8 WAY FILL
             state  |
            old new |           reason
            --------+----------------------------------------
             0   2  | if any of the neighbours are in state 2

              -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
     GRAVITY
                state     |
              old    new  |      reason
            --------------+------------------------
               0    North | always
            Centre    0   | if south neighbour is 0

              -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
     GROWTH
             state  |
            old new |           reason
            --------+---------------------------------
             0   1  | if the number of neighbours is 0

              -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
     HGLASS
            A random-ish rule which uses this lookup table:

            EWSNC C' |EWSNC C' |EWSNC C' |EWSNC C' |
            ---------+---------+---------+---------+
            00000  0 |01000  0 |10000  1 |10000  1 |
            00001  1 |01001  1 |10001  1 |10001  0 |
            00010  1 |01010  0 |10010  1 |10010  0 |
            00011  1 |01011  1 |10011  0 |10011  1 |
            00100  1 |01100  1 |10100  0 |10100  0 |
            00101  0 |01101  0 |10101  0 |10101  1 |
            00110  0 |01110  1 |10110  0 |10110  0 |
            00111  0 |01111  1 |10111  0 |10111  1 |

            where C' represents the new state of the cell.

              -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
     LICHENS
             state  |
            old new |           reason
            --------+----------------------------------------
             0   1  | if the number of neighbours is 3,7 or 8
             1   0  | if the number of neighbours is 4

              -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
     LIFE
            Conways classic game of life. I'm using  state  2  to
            show that the cell has survived.

             state  |
            old new |           reason
            --------+----------------------------------------
             0   1  | if the (number of neighbours) is 3
             1   2  | if the (number of neighbours) is 2 or 3
             C   0  | otherwise

              -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
     MAJORITY
             state  |
            old new |           reason
            --------+------------------------------------------
             0   1  | if the (number of neighbours)+self is > 4
             1   0  | if the (number of neighbours)+self is < 5

              -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
     PARITY
            new state = North xor East xor South xor West

              -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
     SQUARES
            new state = North or NE or East or SE or South or  SW
            or West or NW

              -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
     TRIANGLES
            new state = North or East or West

              -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
     TUBE_WORM
               state    |
             old  new   |           reason
            ------------|----------------------------------------------
             0   ALARM  | if a neighbour is in alarm state.
             0   ALARM  | if the number of active neighbours >threshold
             C     C-1  | otherwise

              -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
     TUBE_WORM_2
               state    |
             old  new   |           reason
            ------------|----------------------------------------------
             0  ALARM+n | if n neighbours are in alarm state.
             0   ALARM  | if the number of active neighbours >threshold
             C     C-1  | otherwise

     Of the rules above I think that life, brains  brin,  lichens
     and  anneal are the most interesting. Im sure that there are
     more rules and If you know of any contact me and Ill put  it
     in.


BUGS
     I expect there are a few lurking bugs in  the  program.  Ive
     tried  to  remove  as  many  as possible and have had little
     problems using the software. But then every author says  the
     same.

     Linux users will get seg  faults.  Although  SUIT  has  been
     ported  there,  Ive  had  lots  of  problems and although it
     compiles, it seg faults every time when using the GP_ colour
     routines.

     The system I compiled the software  on  was  a  SPARCstation
     IPC, running SunOS Release 4.1.1. I compiled using gcc 2.2.2
     with SUIT libraries version 2.3.

     I've tried as much as possible to use ANSI C, I am  unlikely
     to  be  able  to solve any compilation problems that you may
     have. If you have a problem compiling SUIT then  please  get
     in contact with SUIT support.

     Similarly I can't guarantee to fix any bug-reports  I  might
     get.  Although  as a budding software engineer (so I've been
     told) I guess I should make sure my software is as free from
     bugs as possible.


TODO
     If I had the time I would do the following things:


          Allow importing/exporting of cells, into the automata.

          Set/clear/move an area of the automata,

          Allow user defined automata rules,

          Give some online help.

          Provide a playback facility.

          Provide a "print" facility.



MANIFEST
     In addition to this man page,You should  have  received  the
     following files in this distribution

            src/Imakefile
            src/LICENSE
            src/abort.c
            src/abort.h
            src/assorted.c
            src/assorted.h
            src/auto.c
            src/auto.h
            src/automata.c
            src/automata.h
            src/callback.c
            src/callback.h
            src/colorbar.c
            src/colorbar.h
            src/files.c
            src/files.h
            src/main.c
            src/main.h
            src/methods.c
            src/methods.h
            src/neighbours.c
            src/neighbours.h
            src/rules.c
            src/rules.h
            doc/auto.1
            examples/3statecycle.auto
            examples/colorful.auto
            examples/crash.auto
            examples/fred.auto
            examples/fred2.auto
            examples/glider.auto
            examples/life.auto
            examples/wierd.auto
            examples/brian.auto
            examples/brian_arrow.auto
            examples/codd.auto
            examples/fill.auto
            examples/fill2.auto
            examples/glider_gun.auto
            examples/glider_gun2_brian.auto
            examples/glider_gun_brian.auto
            examples/gun.auto
            examples/spaceship_life.auto
            examples/spectrum_loader.auto

     These files are archived using tar and  compressed using GNU's
     gzip. You will need gzip to uncompress the tar file and can
     get it from most good ftp sites.


FILE FORMAT
     The *.auto files are examples  of  cellular  automata  files
     that  are  used  by this application. It uses a weird format
     that I dreamt up, mainly because I didn't  look  around  for
     other suitable file formats.

     The first line in  the  file  must  start  with  the  string
     "Cellular  automata file" This is how the program knows that
     it has the right type of file

          Cellular automata file

     The next 3 lines declare the number  of  rows,  columns  and
     states of the automata.

          5 rows
          9 columns
          3 states

     and finally an array of states in rows x cols format.


DISCLAIMER
     The software 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 this program (LICENSE) ; if not, write to
     the Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
     MA 02139, USA.




SUIT
              SUIT -- The Simple User Interface Toolkit


     SUIT is a  library  of  interface  tools  developed  at  the
     University   of   Virginia  to  help  C  programmers  create
     sophisticated mouse based  interfaces  without  the  lengthy
     learning  period  associated with traditional user interface
     toolkits. Ease of learning and fast ramp up time is  central
     to SUIT's design.

     Also central to SUIT design is  portability.  SUIT  programs
     currently  run  without  changes  to  the source code on the
     following platforms:

            IBM PC,  Macintosh, Sun3, Sun4 (SparcStation),
      SGI (Silicon Graphics IRIS workstations), DECstation, HP.

     SUIT   is   available    through    anonymous    ftp    from
     uvacs.cs.virginia.edu     (128.143.8.100).     Each     SUIT
     distribution  package  comes  with  full  source  code   and
     documentation.

     SUIT, including all its source code,  is  available  without
     charge  to  Universities  and other non-profit institutions.
     For-profit  organizations,   and   people   requiring   more
     information can send email to

                     suit@uvacs.cs.virginia.edu


     SUIT (c) 1990, 1991 , 1992
     Copyright Rector and Visitors of the University of Virginia
automata()        MISC. REFERENCE MANUAL PAGES         automata()



THANKS
     Thanks go to the people who created  SUIT.  Without  them  I
     probably   wouldn't   have   bothered   writing   this  SUIT
     application.

     Thanks also go to the Joint Network Team at  the  Rutherford
     Appleton Laboratory for teaching me C.

     I must thank Laser Scan  Ltd,  for  giving  me  2  excellent
     placements and giving me a taste of the real world.

     How can I not mention the people at Robert Fleming  Ltd  for
     unknowingly starting me out on the computing trail.

     If  as a result of using this application, you feel  that  I
     have  some  potential,  and you happen to have an opening in
     your company. I'll be graduating in BSc Computer Science  in
     about August 1993 and wouldn't mind getting a job overseas.


THE AUTHOR
     My  current  email  address  is  cs89ssg@uk.ac.brunel.  This
     certainly  will not be the case after July 1993. I am likely
     to have an account on at least a public access unix site  so
     I should be contactable via newsgroups after this date.
