home *** CD-ROM | disk | FTP | other *** search
Text File | 1993-04-02 | 108.3 KB | 3,814 lines |
- Newsgroups: comp.sources.unix
- From: dana@rucs.faculty.cs.runet.edu (J Dana Eckart)
- Subject: v26i088: cellular-2.0 - a cellular automata language, Part01/03
- Sender: unix-sources-moderator@vix.com
- Approved: paul@vix.com
-
- Submitted-By: dana@rucs.faculty.cs.runet.edu (J Dana Eckart)
- Posting-Number: Volume 26, Issue 88
- Archive-Name: cellular-2.0/part01
-
- [ my apologies for the TeX here, but the author of this package did not say
- in her cover letter or README file what this is or what it does, and i do
- not have a TeX interpreter so i can't make this prettier other than with a
- lot of hand-editing. it's from the "tutorial.tex" file. --vix ]
-
- \section{Introduction}
- With the growing popularity of cellular automata in both recreation
- \cite{life}\cite{wireworld}\cite{fluids}\cite{crystals}
- and the modeling of physical
- systems\cite{toffoli}\cite{Wolf-Gladrow}\cite{Chen}\cite{Lavallee}\cite{Lim},
- the need for an easy--to--use system for cellular automata programming
- is greater than ever. {\em Cellular} is a system designed and implemented
- by the author to meet these needs. The system consists of: a programming
- language, {\em Cellang 2.0}\footnote{
- Pronounced cell ' ang.
- },
- and associated compiler, {\tt cellc};
- an ``abstract'' virtual machine\footnote{
- The construction of an actual machine embodying the
- pe--scam architecture is under development.\cite{pe-scam}
- }
- for execution, {\tt pe-scam}; and a viewer, {\tt cellview}.
- Compiled {\em Cellang 2.0} programs can be run
- with input provided at any specified time during the execution. The
- results of an execution can either be viewed directly or output as
- a stream of cell locations and values. This stream of output
- data can then be fed into {\tt cellview} for viewing, or it may
- be passed through a filter that compiles statistics, massages the
- data, or merely acts as a valve to control the flow of data from the
- cellular automaton program to the viewer. This simple UNIX\footnote{
- UNIX is a registered trademark of AT\&T.
- }
- toolkit view of the simulation process provides greater control
- than systems which combine the language and viewer (i.e.
- cellsim\cite{cellsim} and CAM--6\cite{toffoli}). {\em Cellang 2.0}
- provides greater flexibility, particularly in the formation of
- neighborhoods, than does {\em Cal} (part of the {\em Scamper}
- system)\cite{Scamper}. And although the {\em SLANG}\cite{SLANG} system
- supports probablistic possibilities, {\em Cellang 2.0} is a far
- simpler language for constructing deterministic cellular automata.
-
- #! /bin/sh
- # This is a shell archive. Remove anything before this line, then unpack
- # it by saving it into a file and typing "sh file". To overwrite existing
- # files, type "sh file -c". You can also feed this as standard input via
- # unshar, or by typing "sh <file", e.g.. If this archive is complete, you
- # will see the following message at the end:
- # "End of archive 1 (of 3)."
- # Contents: MANIFEST Makefile README Version compiler
- # compiler/Makefile compiler/README compiler/attribute.h
- # compiler/boolean.h compiler/cellc.man compiler/cellc.sh
- # compiler/error.c compiler/error.h compiler/io.h compiler/parse
- # compiler/scanner.h compiler/semantic.h compiler/stack.h
- # compiler/symtable.c compiler/symtable.h driver driver/Makefile
- # driver/pe-scam.sh examples examples/Makefile examples/README
- # examples/bin examples/data examples/data/cparity
- # examples/data/life examples/data/parity examples/dist_data_gen.c
- # examples/gas_data_gen.c examples/map examples/map/srdp
- # examples/show.sh examples/src examples/src/cparity
- # examples/src/dist examples/src/gas examples/src/life
- # examples/src/parity examples/src/srdp examples/srdp_data_gen.c
- # viewer viewer/Makefile viewer/README viewer/boolean.h
- # viewer/bw-map viewer/color-map viewer/curses-map viewer/curses.c
- # viewer/curses.h viewer/view.h viewer/x11.h
- # Wrapped by vixie@gw.home.vix.com on Sat Apr 3 01:27:38 1993
- PATH=/bin:/usr/bin:/usr/ucb ; export PATH
- if test -f 'MANIFEST' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'MANIFEST'\"
- else
- echo shar: Extracting \"'MANIFEST'\" \(2098 characters\)
- sed "s/^X//" >'MANIFEST' <<'END_OF_FILE'
- X File Name Archive # Description
- X-----------------------------------------------------------
- X COPYING 2
- X MANIFEST 1 This shipping list
- X Makefile 1
- X README 1
- X Version 1
- X compiler 1
- X compiler/Cellang.tex 2
- X compiler/Makefile 1
- X compiler/README 1
- X compiler/attribute.h 1
- X compiler/boolean.h 1
- X compiler/cellc.man 1
- X compiler/cellc.sh 1
- X compiler/error.c 1
- X compiler/error.h 1
- X compiler/io.h 1
- X compiler/parse 1
- X compiler/scanner.c 2
- X compiler/scanner.h 1
- X compiler/semantic.c 3
- X compiler/semantic.h 1
- X compiler/stack.h 1
- X compiler/symtable.c 1
- X compiler/symtable.h 1
- X driver 1
- X driver/Makefile 1
- X driver/pe-scam.man 2
- X driver/pe-scam.sh 1
- X examples 1
- X examples/Makefile 1
- X examples/README 1
- X examples/bin 1
- X examples/data 1
- X examples/data/cparity 1
- X examples/data/life 1
- X examples/data/parity 1
- X examples/dist_data_gen.c 1
- X examples/gas_data_gen.c 1
- X examples/map 1
- X examples/map/srdp 1
- X examples/show.sh 1
- X examples/src 1
- X examples/src/cparity 1
- X examples/src/dist 1
- X examples/src/gas 1
- X examples/src/life 1
- X examples/src/parity 1
- X examples/src/srdp 1
- X examples/srdp_data_gen.c 1
- X tutorial.tex 3
- X viewer 1
- X viewer/Makefile 1
- X viewer/README 1
- X viewer/boolean.h 1
- X viewer/bw-map 1
- X viewer/cellview.man 2
- X viewer/color-map 1
- X viewer/curses-map 1
- X viewer/curses.c 1
- X viewer/curses.h 1
- X viewer/view.c 2
- X viewer/view.h 1
- X viewer/x11.c 2
- X viewer/x11.h 1
- END_OF_FILE
- if test 2098 -ne `wc -c <'MANIFEST'`; then
- echo shar: \"'MANIFEST'\" unpacked with wrong size!
- fi
- # end of 'MANIFEST'
- fi
- if test -f 'Makefile' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'Makefile'\"
- else
- echo shar: Extracting \"'Makefile'\" \(4029 characters\)
- sed "s/^X//" >'Makefile' <<'END_OF_FILE'
- X# Makefile
- X# Copyright (C) 1992 J Dana Eckart
- X#
- X# This program is free software; you can redistribute it and/or modify
- X# it under the terms of the GNU General Public License as published by
- X# the Free Software Foundation; either version 1, or (at your option)
- X# any later version.
- X#
- X# This program is distributed in the hope that it will be useful,
- X# but WITHOUT ANY WARRANTY; without even the implied warranty of
- X# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- X# GNU General Public License for more details.
- X#
- X# You should have received a copy of the GNU General Public License
- X# along with CELLULAR-2.0; see the file COPYING. If not, write to the
- X# Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- X
- X# Installation directories.
- X#
- BIN=/usr/local/bin
- LIB=/usr/local/lib/cellular
- MAN=/usr/man/manl
- MAN_EXT=l
- X
- X# The default (maximum) size of each dimension associated with Cellang programs.
- X#
- MAX_DIM_SIZE=64
- X
- X# If you want to have the Cellang compiler configured to compile the viewer
- X# into the executables then assign COMBINED the value "1", otherwise assign
- X# a "0". This makes for faster display of many automata, though it does need
- X# X11 to run them.
- X#
- COMBINED=1 # 0 or 1
- X
- X# Choose a C compiler and options.
- X#
- CC = gcc
- CFLAGS = -O
- X
- X# Rules (default.mk on SunOS uses a -target option not supported by GNU C)
- X#
- COMPILE.c=$(CC) $(CFLAGS) $(CPPFLAGS) -c
- X
- X# Dependencies
- X
- all: tutorial.PS
- X (cd compiler; \
- X make BIN='${BIN}' LIB='${LIB}' \
- X MAN='${MAN}' MAN_EXT='${MAN_EXT}' \
- X CC='${CC}' CFLAGS='${CFLAGS}' \
- X CDEFINES='-DCOMBINED=${COMBINED}' \
- X MAX_DIM_SIZE='${MAX_DIM_SIZE}' \
- X COMBINED='${COMBINED}' \
- X all)
- X (cd viewer; \
- X make BIN='${BIN}' LIB='${LIB}' \
- X MAN='${MAN}' MAN_EXT='${MAN_EXT}' \
- X CC='${CC}' CFLAGS='${CFLAGS}' \
- X CDEFINES='-DLIB_DIR=\"${LIB}\"' \
- X COMBINED='${COMBINED}' \
- X all)
- X (cd driver; \
- X make BIN='${BIN}' LIB='${LIB}' \
- X MAN='${MAN}' MAN_EXT='${MAN_EXT}' \
- X MAX_DIM_SIZE='${MAX_DIM_SIZE}' \
- X COMBINED='${COMBINED}' \
- X all)
- X (cd examples; \
- X make BIN='${BIN}' LIB='${LIB}' \
- X MAN='${MAN}' MAN_EXT='${MAN_EXT}' \
- X CC='${CC}' CFLAGS='${CFLAGS}' \
- X MAX_DIM_SIZE='${MAX_DIM_SIZE}' \
- X all)
- X
- install: tutorial.PS
- X (cd compiler; \
- X make BIN='${BIN}' LIB='${LIB}' \
- X MAN='${MAN}' MAN_EXT='${MAN_EXT}' \
- X CC='${CC}' CFLAGS='${CFLAGS}' \
- X CDEFINES='-DCOMBINED=${COMBINED}' \
- X MAX_DIM_SIZE='${MAX_DIM_SIZE}' \
- X COMBINED='${COMBINED}' \
- X install)
- X (cd viewer; \
- X make BIN='${BIN}' LIB='${LIB}' \
- X MAN='${MAN}' MAN_EXT='${MAN_EXT}' \
- X CC='${CC}' CFLAGS='${CFLAGS}' \
- X CDEFINES='-DLIB_DIR=\"${LIB}\"' \
- X COMBINED='${COMBINED}' \
- X install)
- X (cd driver; \
- X make BIN='${BIN}' LIB='${LIB}' \
- X MAN='${MAN}' MAN_EXT='${MAN_EXT}' \
- X MAX_DIM_SIZE='${MAX_DIM_SIZE}' \
- X COMBINED='${COMBINED}' \
- X install)
- X (cd examples; \
- X make BIN='${BIN}' LIB='${LIB}' \
- X MAN='${MAN}' MAN_EXT='${MAN_EXT}' \
- X CC='${CC}' CFLAGS='${CFLAGS}' \
- X MAX_DIM_SIZE='${MAX_DIM_SIZE}' \
- X install)
- X
- deinstall:
- X (cd compiler; \
- X make BIN='${BIN}' LIB='${LIB}' \
- X MAN='${MAN}' MAN_EXT='${MAN_EXT}' \
- X deinstall)
- X (cd viewer; \
- X make BIN='${BIN}' LIB='${LIB}' \
- X MAN='${MAN}' MAN_EXT='${MAN_EXT}' \
- X deinstall)
- X (cd driver; \
- X make BIN='${BIN}' MAN='${MAN}' MAN_EXT='${MAN_EXT}' \
- X deinstall)
- X (cd examples; \
- X make LIB='${LIB}' deinstall)
- X
- clean:
- X /bin/rm -f *.aux *.dvi *.log *.toc core
- X (cd compiler; make MAN_EXT='${MAN_EXT}' clean)
- X (cd viewer; make MAN_EXT='${MAN_EXT}' clean)
- X (cd driver; make MAN_EXT='${MAN_EXT}' clean)
- X (cd examples; make clean)
- X
- realclean: clean
- X /bin/rm -f tutorial.PS
- X (cd compiler; make realclean)
- X (cd viewer; make realclean)
- X (cd driver; make realclean)
- X (cd examples; make realclean)
- X
- tutorial.PS: tutorial.tex
- X - latex tutorial.tex
- X - latex tutorial.tex
- X - dvi2ps -r tutorial.dvi > tutorial.PS
- END_OF_FILE
- if test 4029 -ne `wc -c <'Makefile'`; then
- echo shar: \"'Makefile'\" unpacked with wrong size!
- fi
- # end of 'Makefile'
- fi
- if test -f 'README' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'README'\"
- else
- echo shar: Extracting \"'README'\" \(2358 characters\)
- sed "s/^X//" >'README' <<'END_OF_FILE'
- X# README
- X# Copyright (C) 1992 J Dana Eckart
- X#
- X# This program is free software; you can redistribute it and/or modify
- X# it under the terms of the GNU General Public License as published by
- X# the Free Software Foundation; either version 1, or (at your option)
- X# any later version.
- X#
- X# This program is distributed in the hope that it will be useful,
- X# but WITHOUT ANY WARRANTY; without even the implied warranty of
- X# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- X# GNU General Public License for more details.
- X#
- X# You should have received a copy of the GNU General Public License
- X# along with CELLULAR-2.0; see the file COPYING. If not, write to the
- X# Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- X
- To install the Cellular system, edit the Makefile to reflect the proper
- values of:
- X
- X BIN - installation directory for executables
- X LIB - installation directory for supporting software
- X MAN - installation directory for manual pages
- X MAX_EXT - manual page extension to use for installation
- X
- X MAX_DIM_SIZE - size of each dimension in Cellang 2.0 programs
- X
- X COMBINED - whether or not to compile the viewer into Cellang 2.0 programs
- X
- Do "make install" to build and install everything. In addition, the
- Makefile also supports the targets:
- X
- X all: compile, but not install, the software
- X deinstall: remove an installation
- X clean: remove all but the distributed files (and postscript versions of
- X LaTeX documents)
- X realclean: remove all but the distributed files
- X
- A tutorial is written in LaTeX and appears in ./tutorial.tex, while the
- Cellang 2.0 Language Reference Manual appears in compiler/Cellang.tex (and
- is also written in LaTeX).
- X
- The "examples" directory (found in the LIB directory specified in the Makefile)
- contains some sample Cellang programs with data. It is a good place to start
- for becoming familiar with the system.
- X
- NOTE: When compiled with COMBINED turned on, only the first two dimensions
- X (when present) are displayed if the output option is not chosen when
- X the automata is executed.
- X
- X
- X
- X QUESTIONS, COMMENTS, BUG REPORTS and SUGGESTED PATCHES
- X
- can be sent to me at either:
- X
- X J Dana Eckart
- X Box 6933
- X Computer Science Department
- X Radford University
- X Radford, VA 24142
- X
- X or
- X
- X dana@rucs.faculty.cs.runet.edu
- END_OF_FILE
- if test 2358 -ne `wc -c <'README'`; then
- echo shar: \"'README'\" unpacked with wrong size!
- fi
- # end of 'README'
- fi
- if test -f 'Version' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'Version'\"
- else
- echo shar: Extracting \"'Version'\" \(802 characters\)
- sed "s/^X//" >'Version' <<'END_OF_FILE'
- X# Version
- X# Copyright (C) 1992 J Dana Eckart
- X#
- X# This program is free software; you can redistribute it and/or modify
- X# it under the terms of the GNU General Public License as published by
- X# the Free Software Foundation; either version 1, or (at your option)
- X# any later version.
- X#
- X# This program is distributed in the hope that it will be useful,
- X# but WITHOUT ANY WARRANTY; without even the implied warranty of
- X# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- X# GNU General Public License for more details.
- X#
- X# You should have received a copy of the GNU General Public License
- X# along with CELLULAR-2.0; see the file COPYING. If not, write to the
- X# Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- X
- X13 Apr 1992 : initial release by J Dana Eckart
- END_OF_FILE
- if test 802 -ne `wc -c <'Version'`; then
- echo shar: \"'Version'\" unpacked with wrong size!
- fi
- # end of 'Version'
- fi
- if test ! -d 'compiler' ; then
- echo shar: Creating directory \"'compiler'\"
- mkdir 'compiler'
- fi
- if test -f 'compiler/Makefile' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'compiler/Makefile'\"
- else
- echo shar: Extracting \"'compiler/Makefile'\" \(3502 characters\)
- sed "s/^X//" >'compiler/Makefile' <<'END_OF_FILE'
- X# Makefile
- X# Copyright (C) 1992 J Dana Eckart
- X#
- X# This program is free software; you can redistribute it and/or modify
- X# it under the terms of the GNU General Public License as published by
- X# the Free Software Foundation; either version 1, or (at your option)
- X# any later version.
- X#
- X# This program is distributed in the hope that it will be useful,
- X# but WITHOUT ANY WARRANTY; without even the implied warranty of
- X# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- X# GNU General Public License for more details.
- X#
- X# You should have received a copy of the GNU General Public License
- X# along with CELLULAR-2.0; see the file COPYING. If not, write to the
- X# Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- X
- X# Installation directories.
- X#
- BIN=/usr/local/bin
- LIB=/usr/local/lib/cellular
- MAN=/usr/man/manl
- MAN_EXT=l
- X
- X# The default (maximum) sizes associated with Cellang programs.
- X#
- MAX_DIM_SIZE=64
- MAX_SUPPORTED_DIMENSIONS=16
- MAX_SUPPORTED_FIELDS=32
- X
- X# If you want to have the Cellang compiler configured to compile the viewer
- X# into the executables then assign COMBINED the value "1", otherwise assign
- X# a "0". This makes for faster display of many automata, though it does need
- X# X11 to run them.
- X#
- COMBINED=0 # 0 or 1
- X
- X# The C type declaration to use for cell field declarations and the upper
- X# and lower bounds on the range of values supported by that data type.
- X# The range of values should be taken from the limits.h file used by your
- X# C compiler.
- X#
- XFIELD_TYPE = "unsigned char"
- MAX_RANGE_LB = 0
- MAX_RANGE_UB = 255
- X
- X# Choose a C compiler and options.
- X#
- CC= gcc
- CFLAGS= -O -ansi -pedantic
- CDEFINES= -DCOMBINED=$(COMBINED)
- X
- X# Rules (default.mk on SunOS uses a -target option not supported by GNU C)
- X#
- COMPILE.c=$(CC) $(CFLAGS) $(CDEFINES) -DFIELD_TYPE=\"$(FIELD_TYPE)\" \
- X -DMAX_RANGE_LB=$(MAX_RANGE_LB) -DMAX_RANGE_UB=$(MAX_RANGE_UB) \
- X $(CPPFLAGS) -c
- X
- X# Dependencies
- X
- all: cellfront cellc Cellang.PS cellc.${MAN_EXT}
- X
- install: all
- X - mkdir -p ${BIN}
- X - mkdir -p ${LIB}
- X - mkdir -p ${MAN}
- X
- X install cellfront ${LIB}/cellfront
- X install cellc ${BIN}/cellc
- X install -m 644 cellc.${MAN_EXT} ${MAN}/cellc.${MAN_EXT}
- X
- deinstall:
- X /bin/rm -f ${LIB}/cellfront
- X /bin/rm -f ${BIN}/cellc
- X /bin/rm -f ${MAN}/cellc.${MAN_EXT}
- X
- clean:
- X /bin/rm -f *.o *.tab.h *.tab.c *.aux *.dvi *.log *.toc \
- X cellc cellfront core cellc.${MAN_EXT} size.h
- X
- realclean: clean
- X /bin/rm -f *.PS
- X
- cellfront: scanner.o semantic.o symtable.o y.tab.o error.o
- X ${CC} ${CFLAGS} -o cellfront *.o
- X
- cellc.${MAN_EXT}: cellc.man
- X sed -e 's?LIB_DIR?$(LIB)?' \
- X -e 's?MAN_EXT?$(MAN_EXT)?g' cellc.man > cellc.${MAN_EXT}
- X
- size.h: ../Makefile
- X echo "#define MAX_DIM_SIZE ${MAX_DIM_SIZE}" > size.h
- X echo "#define MAX_SUPPORTED_DIMENSIONS ${MAX_SUPPORTED_DIMENSIONS}" >> size.h
- X echo "#define MAX_SUPPORTED_FIELDS ${MAX_SUPPORTED_FIELDS}" >> size.h
- X
- semantic.o: semantic.c semantic.h symtable.h stack.h size.h\
- X attribute.h boolean.h error.h
- X
- symtable.o: symtable.c symtable.h attribute.h boolean.h
- X
- scanner.o: scanner.c scanner.h y.tab.h error.h
- X
- error.o: error.c error.h
- X
- y.tab.h y.tab.c: parse error.h
- X yacc -d parse
- X
- y.tab.o: parse attribute.h semantic.h symtable.h boolean.h error.h
- X
- cellc: cellc.sh
- X sed -e 's?YOUR_LIB?$(LIB)?' \
- X -e 's?YOUR_CC?$(CC)?' \
- X -e 's?YOUR_CFLAGS?$(CFLAGS)?' \
- X -e 's?YOUR_COMBINED?$(COMBINED)?' \
- X cellc.sh > cellc
- X chmod u+rx cellc
- X
- Cellang.PS: Cellang.tex
- X - latex Cellang.tex
- X - latex Cellang.tex
- X - dvi2ps -r Cellang.dvi > Cellang.PS
- END_OF_FILE
- if test 3502 -ne `wc -c <'compiler/Makefile'`; then
- echo shar: \"'compiler/Makefile'\" unpacked with wrong size!
- fi
- # end of 'compiler/Makefile'
- fi
- if test -f 'compiler/README' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'compiler/README'\"
- else
- echo shar: Extracting \"'compiler/README'\" \(1930 characters\)
- sed "s/^X//" >'compiler/README' <<'END_OF_FILE'
- X# README
- X# Copyright (C) 1992 J Dana Eckart
- X#
- X# This program is free software; you can redistribute it and/or modify
- X# it under the terms of the GNU General Public License as published by
- X# the Free Software Foundation; either version 1, or (at your option)
- X# any later version.
- X#
- X# This program is distributed in the hope that it will be useful,
- X# but WITHOUT ANY WARRANTY; without even the implied warranty of
- X# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- X# GNU General Public License for more details.
- X#
- X# You should have received a copy of the GNU General Public License
- X# along with CELLULAR-2.0; see the file COPYING. If not, write to the
- X# Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- X
- To install the Cellang compiler, edit the Makefile to reflect the proper
- values of:
- X
- X BIN - installation directory for executables
- X LIB - installation directory for supporting software
- X MAN - installation directory for manual pages
- X MAX_EXT - manual page extension to use for installation
- X
- X MAX_DIM_SIZE - size of each dimension in Cellang 2.0 programs
- X MAX_SUPPORTED_DIMENSIONS - maximum allowed dimensions in programs
- X MAX_SUPPORTED_FIELDS - maximum allowed fields per cell in programs
- X
- X FIELD_TYPE - C data type to use for cell fields
- X MAX_RANGE_LB - smallest value of FIELD_TYPE
- X MAX_RANGE_UB - largest value of FIELD_TYPE
- X
- Do "make install" to build and install the compiler. In addition, the
- Makefile also supports the targets:
- X
- X all: compile, but not install, the software
- X deinstall: remove an installation
- X clean: remove all but the distributed files (and postscript version of
- X the language reference manual) within this directory
- X realclean: remove all but the distributed files within this directory
- X
- The Cellang language reference manual is written in LaTeX and appears in
- Cellang.tex.
- END_OF_FILE
- if test 1930 -ne `wc -c <'compiler/README'`; then
- echo shar: \"'compiler/README'\" unpacked with wrong size!
- fi
- # end of 'compiler/README'
- fi
- if test -f 'compiler/attribute.h' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'compiler/attribute.h'\"
- else
- echo shar: Extracting \"'compiler/attribute.h'\" \(1069 characters\)
- sed "s/^X//" >'compiler/attribute.h' <<'END_OF_FILE'
- X/* attribute.h
- X Copyright (C) 1992 J Dana Eckart
- X
- X This program is free software; you can redistribute it and/or modify
- X it under the terms of the GNU General Public License as published by
- X the Free Software Foundation; either version 1, or (at your option)
- X any later version.
- X
- X This program is distributed in the hope that it will be useful,
- X but WITHOUT ANY WARRANTY; without even the implied warranty of
- X MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- X GNU General Public License for more details.
- X
- X You should have received a copy of the GNU General Public License
- X along with CELLULAR-2.0; see the file COPYING. If not, write to the
- X Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- X*/
- X
- X#include "boolean.h"
- X
- X/* The exported declarations for attributes appearing in the symbol table. */
- X
- typedef struct {
- X boolean assignable; /* True iff assignable. */
- X boolean field_name; /* True iff the symbol is a cell field. */
- X boolean structured; /* True iff the value is structured. */
- X} attr_rec;
- END_OF_FILE
- if test 1069 -ne `wc -c <'compiler/attribute.h'`; then
- echo shar: \"'compiler/attribute.h'\" unpacked with wrong size!
- fi
- # end of 'compiler/attribute.h'
- fi
- if test -f 'compiler/boolean.h' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'compiler/boolean.h'\"
- else
- echo shar: Extracting \"'compiler/boolean.h'\" \(817 characters\)
- sed "s/^X//" >'compiler/boolean.h' <<'END_OF_FILE'
- X/* boolean.h
- X Copyright (C) 1992 J Dana Eckart
- X
- X This program is free software; you can redistribute it and/or modify
- X it under the terms of the GNU General Public License as published by
- X the Free Software Foundation; either version 1, or (at your option)
- X any later version.
- X
- X This program is distributed in the hope that it will be useful,
- X but WITHOUT ANY WARRANTY; without even the implied warranty of
- X MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- X GNU General Public License for more details.
- X
- X You should have received a copy of the GNU General Public License
- X along with CELLULAR-2.0; see the file COPYING. If not, write to the
- X Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- X*/
- X
- X#define boolean int
- X
- X#define true 1
- X#define false 0
- END_OF_FILE
- if test 817 -ne `wc -c <'compiler/boolean.h'`; then
- echo shar: \"'compiler/boolean.h'\" unpacked with wrong size!
- fi
- # end of 'compiler/boolean.h'
- fi
- if test -f 'compiler/cellc.man' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'compiler/cellc.man'\"
- else
- echo shar: Extracting \"'compiler/cellc.man'\" \(1147 characters\)
- sed "s/^X//" >'compiler/cellc.man' <<'END_OF_FILE'
- X.TH cellc 1
- X.SH NAME
- cellc \-
- X.I "Cellang 2.0"
- X(cellular automata) compiler
- X.SH SYNOPSIS
- X.B cellc
- X[
- X.B \-o
- X.I outputfile
- X]
- file
- X.SH DESCRIPTION
- X.I cellc
- is the Cellang celluar automata compiler.
- X.I cellc
- compiles and builds the executable for the Cellang program contained
- within file. By default, the executable is placed in a.pe-scam.
- X.TP
- X.BI \-o " outputfile"
- Name the output file
- X.IR outputfile .
- X.I outputfile
- cannot be the same as
- X.I sourcefile
- X(the compiler will not overwrite the source file). The default is
- X.I a.pe-scam.
- X.br
- X.ne 5
- X.SH FILES
- X file program text file
- X.br
- X a.pe-scam default executable file
- X LIB_DIR/cellfront program which actually generates the pe-scam object code
- X.SH "SEE ALSO"
- cellview(MAN_EXT), pe-scam(MAN_EXT)
- X.br
- J Dana Eckart,
- X.I "A Cellular Automata Simulation System: Version 2.0"
- X(1992)
- X.br
- J Dana Eckart,
- X.I "Cellang 2.0: Language Reference Manual"
- X(1992)
- X.SH DIAGNOSTICS
- The diagnostics produced by cellc are intended to be
- self-explanatory.
- X.SH BUGS
- The current implementation does not check to ensure that the values assigned
- to fields are within the associated ranges.
- END_OF_FILE
- if test 1147 -ne `wc -c <'compiler/cellc.man'`; then
- echo shar: \"'compiler/cellc.man'\" unpacked with wrong size!
- fi
- # end of 'compiler/cellc.man'
- fi
- if test -f 'compiler/cellc.sh' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'compiler/cellc.sh'\"
- else
- echo shar: Extracting \"'compiler/cellc.sh'\" \(1702 characters\)
- sed "s/^X//" >'compiler/cellc.sh' <<'END_OF_FILE'
- X#!/bin/sh
- X# cellc.sh
- X# Copyright (C) 1992 J Dana Eckart
- X#
- X# This program is free software; you can redistribute it and/or modify
- X# it under the terms of the GNU General Public License as published by
- X# the Free Software Foundation; either version 1, or (at your option)
- X# any later version.
- X#
- X# This program is distributed in the hope that it will be useful,
- X# but WITHOUT ANY WARRANTY; without even the implied warranty of
- X# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- X# GNU General Public License for more details.
- X#
- X# You should have received a copy of the GNU General Public License
- X# along with CELLULAR-2.0; see the file COPYING. If not, write to the
- X# Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- X
- LIB=YOUR_LIB
- CC=YOUR_CC
- CFLAGS=YOUR_CFLAGS
- X
- COMBINED=YOUR_COMBINED
- X
- C_FILE=.cellang.c
- H_FILE=.cellang.h
- X
- USAGE="usage: `basename $0` [-o outputfile] filename"
- X
- trap "/bin/rm -f $C_FILE $H_FILE;exit" 0
- X
- X#
- X# Get options and check usage
- X#
- if (test $# -lt 1) then
- X echo $USAGE
- X exit 1
- fi
- X
- while (test $# -gt 1)
- do
- X case $1 in
- X '-o') OUT_FILE="-o $2"
- X shift
- X ;;
- X *) echo "Unknown flag, '$1'."
- X echo $USAGE
- X exit 1
- X ;;
- X esac
- X shift
- done
- X
- X# By default, put the executable in "a.pe-scam".
- X#
- if test -z "$OUT_FILE"
- then
- X OUT_FILE="-o a.pe-scam"
- fi
- X
- XFILE=$1
- X
- X#
- X# Perform conversion to C and then do a c compilation.
- X#
- if test -r $FILE
- then
- X $LIB/cellfront < $FILE
- X if test -s $C_FILE
- X then
- X if test "$COMBINED" = "1"
- X then
- X $CC $CFLAGS $OUT_FILE $C_FILE $LIB/*.o \
- X -lm -lcurses -ltermcap -lX11
- X else
- X $CC $CFLAGS $OUT_FILE $C_FILE
- X fi
- X fi
- else
- X echo "`basename $0`: file $FILE not found"
- fi
- X
- X/bin/rm -f $C_FILE $H_FILE
- END_OF_FILE
- if test 1702 -ne `wc -c <'compiler/cellc.sh'`; then
- echo shar: \"'compiler/cellc.sh'\" unpacked with wrong size!
- fi
- # end of 'compiler/cellc.sh'
- fi
- if test -f 'compiler/error.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'compiler/error.c'\"
- else
- echo shar: Extracting \"'compiler/error.c'\" \(1191 characters\)
- sed "s/^X//" >'compiler/error.c' <<'END_OF_FILE'
- X/* error.c
- X Copyright (C) 1992 J Dana Eckart
- X
- X This program is free software; you can redistribute it and/or modify
- X it under the terms of the GNU General Public License as published by
- X the Free Software Foundation; either version 1, or (at your option)
- X any later version.
- X
- X This program is distributed in the hope that it will be useful,
- X but WITHOUT ANY WARRANTY; without even the implied warranty of
- X MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- X GNU General Public License for more details.
- X
- X You should have received a copy of the GNU General Public License
- X along with CELLULAR-2.0; see the file COPYING. If not, write to the
- X Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- X*/
- X
- X#include <stdio.h>
- X#include <malloc.h>
- X#include "error.h"
- X
- X/************************************************************************/
- X
- X/* SUPPORT ROUTINE
- X ACTION - Malloc's the desired amount of space, issuing an
- X error message if the space is not forthcoming.
- X*/
- char* mymalloc(size) unsigned int size; {
- X char *pointer = malloc(size);
- X if (NULL == pointer)
- X error("Out of memory", (char*) NULL);
- X return pointer;
- X}
- END_OF_FILE
- if test 1191 -ne `wc -c <'compiler/error.c'`; then
- echo shar: \"'compiler/error.c'\" unpacked with wrong size!
- fi
- # end of 'compiler/error.c'
- fi
- if test -f 'compiler/error.h' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'compiler/error.h'\"
- else
- echo shar: Extracting \"'compiler/error.h'\" \(895 characters\)
- sed "s/^X//" >'compiler/error.h' <<'END_OF_FILE'
- X/* error.h
- X Copyright (C) 1992 J Dana Eckart
- X
- X This program is free software; you can redistribute it and/or modify
- X it under the terms of the GNU General Public License as published by
- X the Free Software Foundation; either version 1, or (at your option)
- X any later version.
- X
- X This program is distributed in the hope that it will be useful,
- X but WITHOUT ANY WARRANTY; without even the implied warranty of
- X MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- X GNU General Public License for more details.
- X
- X You should have received a copy of the GNU General Public License
- X along with CELLULAR-2.0; see the file COPYING. If not, write to the
- X Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- X*/
- X
- extern void error_prefix(); /* Prints prefix for error messages. */
- extern char* mymalloc(); /* A malloc that checks for success. */
- END_OF_FILE
- if test 895 -ne `wc -c <'compiler/error.h'`; then
- echo shar: \"'compiler/error.h'\" unpacked with wrong size!
- fi
- # end of 'compiler/error.h'
- fi
- if test -f 'compiler/io.h' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'compiler/io.h'\"
- else
- echo shar: Extracting \"'compiler/io.h'\" \(884 characters\)
- sed "s/^X//" >'compiler/io.h' <<'END_OF_FILE'
- X/* io.h
- X Copyright (C) 1992 J Dana Eckart
- X
- X This program is free software; you can redistribute it and/or modify
- X it under the terms of the GNU General Public License as published by
- X the Free Software Foundation; either version 1, or (at your option)
- X any later version.
- X
- X This program is distributed in the hope that it will be useful,
- X but WITHOUT ANY WARRANTY; without even the implied warranty of
- X MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- X GNU General Public License for more details.
- X
- X You should have received a copy of the GNU General Public License
- X along with CELLULAR-2.0; see the file COPYING. If not, write to the
- X Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- X*/
- X
- extern FILE *file_h; /* Denotes the C header output stream. */
- extern FILE *file_c; /* Denotes the C code output stream. */
- END_OF_FILE
- if test 884 -ne `wc -c <'compiler/io.h'`; then
- echo shar: \"'compiler/io.h'\" unpacked with wrong size!
- fi
- # end of 'compiler/io.h'
- fi
- if test -f 'compiler/parse' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'compiler/parse'\"
- else
- echo shar: Extracting \"'compiler/parse'\" \(5776 characters\)
- sed "s/^X//" >'compiler/parse' <<'END_OF_FILE'
- X%{
- X/* parse
- X Copyright (C) 1992 J Dana Eckart
- X
- X This program is free software; you can redistribute it and/or modify
- X it under the terms of the GNU General Public License as published by
- X the Free Software Foundation; either version 1, or (at your option)
- X any later version.
- X
- X This program is distributed in the hope that it will be useful,
- X but WITHOUT ANY WARRANTY; without even the implied warranty of
- X MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- X GNU General Public License for more details.
- X
- X You should have received a copy of the GNU General Public License
- X along with CELLULAR-2.0; see the file COPYING. If not, write to the
- X Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- X*/
- X
- X#include "semantic.h"
- X#include "scanner.h"
- X%}
- X
- X%token DIMENSIONS
- X%token IF
- X%token THEN
- X%token ELSIF
- X%token ELSE
- X%token END
- X%token WHEN
- X%token OTHERWISE
- X%token OF
- X%token ASSIGN
- X%token PLUS
- X%token MINUS
- X%token TIMES
- X%token DIVIDE
- X%token MOD
- X%token EQUAL
- X%token LESSER
- X%token GREATER
- X%token LESSEQ
- X%token GREATEQ
- X%token NOTEQ
- X%token AND
- X%token OR
- X%token NOT
- X%token LEFTPAREN
- X%token RIGHTPAREN
- X%token LEFTBRACKET
- X%token RIGHTBRACKET
- X%token COMMA
- X%token DOTS
- X%token DOT
- X%token IDENTIFIER
- X%token NUMERICLITERAL
- X
- X/* Unlike most yacc specifications, the following have also been
- X written in LL(1) form. This prevents yacc from making improper
- X assumptions about breaking up a production because of embedded
- X actions. It also allows the use of an LL(1) parser generator,
- X hopefully sometime in the near future.
- X*/
- X
- X%start program
- X
- X%%
- program : declare_cells { begin_rules(); }
- X statement_list { end_rules(); }
- X |
- X ;
- X
- declare_cells : number { set_dimensions(); } DIMENSIONS
- X OF fields_or_range
- X ;
- X
- fields_or_range : range { declare_default_field(); }
- X | { begin_decl_cells(); } field rest_fields
- X END { end_decl_cells(); }
- X ;
- X
- rest_fields : field rest_fields
- X |
- X ;
- X
- field : ident_list OF range { declare_fields(); }
- X ;
- X
- range : integer DOTS integer { make_range(); }
- X ;
- X
- ident_list : { push_mark(); } identifier rest_ident_list
- X ;
- X
- rest_ident_list : COMMA identifier rest_ident_list
- X |
- X ;
- X
- integer : unary_add number { mk_signed_int(); }
- X | number
- X ;
- X
- number : NUMERICLITERAL { process_literal(yytext); }
- X ;
- X
- statement_list : statement statement_list
- X |
- X ;
- X
- statement : assign_statement
- X | if_statement
- X ;
- X
- assign_statement: identifier { assignable_base(); } field_option
- X ASSIGN expression rest_assign
- X ;
- X
- X/* rest_assign is included solely for the jump_if semantic action; which
- X for rest_when is a jump_elseif.
- X*/
- X
- rest_assign : WHEN expression { jump_if(); do_assign(); } expression_list
- X | OTHERWISE
- X { do_assign(); end_assign(); }
- X | { do_assign(); end_assign(); }
- X ;
- X
- rest_when : WHEN expression { jump_elsif(); do_assign(); } expression_list
- X | OTHERWISE
- X { start_else(); do_assign(); end_if(); end_assign(); }
- X ;
- X
- expression_list : ASSIGN expression rest_when
- X | { end_if(); end_assign(); }
- X ;
- X
- if_statement : IF expression { jump_if(); } THEN statement_list
- X elsif_list else { end_if(); } END
- X ;
- X
- elsif_list : elsif elsif_list
- X |
- X ;
- X
- elsif : ELSIF expression { jump_elsif(); } THEN statement_list
- X ;
- X
- else : ELSE { start_else(); } statement_list
- X |
- X ;
- X
- X
- X/* The numbered suffix is the precedence of that expression/operator. */
- X
- expression : expression_1
- X ;
- X
- expression_1 : expression_2 rest_expr_1
- X | unary_boolean expression_2 { unary_op(); } rest_expr_1
- X ;
- rest_expr_1 : binary_boolean expression_1 { binary_op(); }
- X |
- X ;
- X
- expression_2 : expression_3 rest_expr_2
- X ;
- rest_expr_2 : binary_relation expression_2 { binary_op(); }
- X |
- X ;
- X
- expression_3 : expression_4 rest_expr_3
- X | unary_add expression_4 { unary_op(); } rest_expr_3
- X ;
- rest_expr_3 : binary_add expression_3 { binary_op(); }
- X |
- X ;
- X
- expression_4 : primary rest_expr_4
- X ;
- rest_expr_4 : binary_mult expression_4 { binary_op(); }
- X |
- X ;
- X
- primary : identifier { get_variable(); } field_option
- X | number
- X | LEFTPAREN expression RIGHTPAREN
- X | LEFTBRACKET { push_mark(); }
- X integer rest_index_list
- X RIGHTBRACKET { cell_reference(); } field_option
- X ;
- X
- rest_index_list : COMMA integer rest_index_list
- X |
- X ;
- X
- field_option : DOT identifier { field_reference(); }
- X |
- X ;
- X
- identifier : IDENTIFIER { push(yytext); }
- X ;
- X
- binary_boolean : AND { push("&&"); }
- X | OR { push("||"); }
- X ;
- unary_boolean : NOT { push("!"); }
- X ;
- binary_relation : EQUAL { push("=="); }
- X | NOTEQ { push("!="); }
- X | LESSER { push("<"); }
- X | GREATER { push(">"); }
- X | LESSEQ { push("<="); }
- X | GREATEQ { push(">="); }
- X ;
- binary_add : PLUS { push("+"); }
- X | MINUS { push("-"); }
- X ;
- unary_add : binary_add
- X ;
- binary_mult : TIMES { push("*"); }
- X | DIVIDE { push("/"); }
- X | MOD { push("%"); }
- X ;
- X
- X%%
- X
- X#include <strings.h>
- X#include <stdio.h>
- X#include "io.h"
- X
- boolean syntax_error; /* True iff a syntax error was encountered. */
- X
- void main(argc, argv) int argc; char *argv[]; {
- X if (argc-1 != 0) {
- X fprintf(stderr, "%s: No argument should be given\n", argv[0]);
- X exit(0);
- X }
- X
- X syntax_error = false;
- X start_up();
- X
- X /* Read and compile the user's program. */
- X startscan();
- X yyparse();
- X
- X /* If no errors occurred, then finishup. */
- X if (!scan_error && !syntax_error && !semantic_error)
- X finish_up();
- X
- X /* If errors occurred, then empty files and indicate an error. */
- X if (scan_error || syntax_error || semantic_error) {
- X fclose(file_h);
- X fclose(file_c);
- X file_h = fopen(".cellang.h", "w");
- X fclose(file_h);
- X file_c = fopen(".cellang.c", "w");
- X fclose(file_c);
- X exit(1);
- X }
- X}
- X
- X#include "error.h"
- X
- void yyerror(s) char *s; {
- X syntax_error = true;
- X error_prefix();
- X fprintf(stderr, "%s\n", s);
- X}
- END_OF_FILE
- if test 5776 -ne `wc -c <'compiler/parse'`; then
- echo shar: \"'compiler/parse'\" unpacked with wrong size!
- fi
- # end of 'compiler/parse'
- fi
- if test -f 'compiler/scanner.h' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'compiler/scanner.h'\"
- else
- echo shar: Extracting \"'compiler/scanner.h'\" \(1077 characters\)
- sed "s/^X//" >'compiler/scanner.h' <<'END_OF_FILE'
- X/* scanner.h
- X Copyright (C) 1992 J Dana Eckart
- X
- X This program is free software; you can redistribute it and/or modify
- X it under the terms of the GNU General Public License as published by
- X the Free Software Foundation; either version 1, or (at your option)
- X any later version.
- X
- X This program is distributed in the hope that it will be useful,
- X but WITHOUT ANY WARRANTY; without even the implied warranty of
- X MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- X GNU General Public License for more details.
- X
- X You should have received a copy of the GNU General Public License
- X along with CELLULAR-2.0; see the file COPYING. If not, write to the
- X Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- X*/
- X
- X#include "y.tab.h"
- X#include "boolean.h"
- X
- extern boolean scan_error; /* True iff a scanning error was encountered. */
- X
- extern char yytext[]; /* Holds the text of a scanned token. */
- X
- extern void startscan(); /* Setup for scanning a new file. */
- X
- extern int yylex(); /* Function used to acquire the next token. */
- END_OF_FILE
- if test 1077 -ne `wc -c <'compiler/scanner.h'`; then
- echo shar: \"'compiler/scanner.h'\" unpacked with wrong size!
- fi
- # end of 'compiler/scanner.h'
- fi
- if test -f 'compiler/semantic.h' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'compiler/semantic.h'\"
- else
- echo shar: Extracting \"'compiler/semantic.h'\" \(2117 characters\)
- sed "s/^X//" >'compiler/semantic.h' <<'END_OF_FILE'
- X/* semantic.h
- X Copyright (C) 1992 J Dana Eckart
- X
- X This program is free software; you can redistribute it and/or modify
- X it under the terms of the GNU General Public License as published by
- X the Free Software Foundation; either version 1, or (at your option)
- X any later version.
- X
- X This program is distributed in the hope that it will be useful,
- X but WITHOUT ANY WARRANTY; without even the implied warranty of
- X MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- X GNU General Public License for more details.
- X
- X You should have received a copy of the GNU General Public License
- X along with CELLULAR-2.0; see the file COPYING. If not, write to the
- X Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- X*/
- X
- X/* These are the declarations for all of the semantic actions. */
- X
- X#include "boolean.h"
- X
- extern boolean semantic_error; /* True iff a semantic error was encountered. */
- X
- X/* initialization and cleanup for the compilation */
- extern void start_up();
- extern void finish_up();
- X
- X/* declare the dimensionality and fields of the cells of the universe. */
- extern void begin_decl_cells();
- extern void end_decl_cells();
- extern void declare_fields();
- extern void declare_default_field();
- extern void make_range();
- extern void set_dimensions();
- X
- X/* Group the cellular automata rules into a function. */
- extern void begin_rules();
- extern void end_rules();
- X
- X/* assignment statement */
- extern void do_assign();
- extern void end_assign();
- X
- X/* when statment */
- extern void jump_when();
- X
- X/* if-then-elsif-else statment */
- extern void jump_if();
- extern void jump_elsif();
- extern void start_else();
- extern void end_if();
- X
- X/* simple push operations */
- extern void push_mark();
- extern void push();
- X
- X/* simple processing */
- extern void process_literal();
- extern void mk_signed_int();
- X
- X/* setup variables (left hand side of assignments) */
- extern void assignable_base();
- X
- X/* expressions */
- extern void get_variable();
- extern void binary_op();
- extern void unary_op();
- X
- X/* Getting the value from a neighboring cell. */
- extern void cell_reference();
- extern void field_reference();
- END_OF_FILE
- if test 2117 -ne `wc -c <'compiler/semantic.h'`; then
- echo shar: \"'compiler/semantic.h'\" unpacked with wrong size!
- fi
- # end of 'compiler/semantic.h'
- fi
- if test -f 'compiler/stack.h' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'compiler/stack.h'\"
- else
- echo shar: Extracting \"'compiler/stack.h'\" \(1714 characters\)
- sed "s/^X//" >'compiler/stack.h' <<'END_OF_FILE'
- X/* stack.h
- X Copyright (C) 1992 J Dana Eckart
- X
- X This program is free software; you can redistribute it and/or modify
- X it under the terms of the GNU General Public License as published by
- X the Free Software Foundation; either version 1, or (at your option)
- X any later version.
- X
- X This program is distributed in the hope that it will be useful,
- X but WITHOUT ANY WARRANTY; without even the implied warranty of
- X MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- X GNU General Public License for more details.
- X
- X You should have received a copy of the GNU General Public License
- X along with CELLULAR-2.0; see the file COPYING. If not, write to the
- X Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- X*/
- X
- X/* The following define the different stack_entry kinds. */
- X
- X#define StackMark 1
- X#define StackExpr 2
- X#define StackToken 3
- X#define StackError 4
- X#define StackRange 5
- X
- typedef struct {
- X char *addr; /* Reference name of the expression. */
- X char *field; /* Field name of the expression. This
- X is used only for doing the implicit
- X variable declarations to keep the
- X field separate from the variable until
- X its type can be inferred.
- X */
- X boolean assignable; /* True iff assignable. */
- X boolean pre_declared; /* True iff identifier was previous declared. */
- X boolean unstructured; /* True iff expr_entry is NOT structured. */
- X} expr_entry;
- X
- typedef struct {
- X int lower_bound; /* Lower bound of a field range. */
- X int upper_bound; /* Upper bound of a field range. */
- X} range_entry;
- X
- typedef struct {
- X int kind;
- X union {
- X expr_entry expr;
- X char *token;
- X range_entry range;
- X } data;
- X} stack_entry;
- END_OF_FILE
- if test 1714 -ne `wc -c <'compiler/stack.h'`; then
- echo shar: \"'compiler/stack.h'\" unpacked with wrong size!
- fi
- # end of 'compiler/stack.h'
- fi
- if test -f 'compiler/symtable.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'compiler/symtable.c'\"
- else
- echo shar: Extracting \"'compiler/symtable.c'\" \(3217 characters\)
- sed "s/^X//" >'compiler/symtable.c' <<'END_OF_FILE'
- X/* symtable.c
- X Copyright (C) 1992 J Dana Eckart
- X
- X This program is free software; you can redistribute it and/or modify
- X it under the terms of the GNU General Public License as published by
- X the Free Software Foundation; either version 1, or (at your option)
- X any later version.
- X
- X This program is distributed in the hope that it will be useful,
- X but WITHOUT ANY WARRANTY; without even the implied warranty of
- X MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- X GNU General Public License for more details.
- X
- X You should have received a copy of the GNU General Public License
- X along with CELLULAR-2.0; see the file COPYING. If not, write to the
- X Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- X*/
- X
- X/* This file implements the symbol table. Bucket hashing is used,
- X associating an attribute with each identifier. New identifiers
- X are always added to the front of the chain representing the bucket.
- X*/
- X
- X#include <stdio.h>
- X#include "attribute.h"
- X#include "symtable.h"
- X#include "error.h"
- X
- X#define TableSize 27
- X
- typedef struct bucket_fubar {
- X char* name;
- X attr_rec *attribute;
- X struct bucket_fubar *next;
- X} bucket;
- X
- bucket *table[TableSize];
- X
- X/* Initializes every bucket in the hash table to be empty. */
- void initsymboltable() {
- X int i;
- X for (i = 0; i < TableSize; i++) table[i] = NULL;
- X}
- X
- X/* Calculates a hash value for the string based upon the first and
- X last characters in the string. If the string contains only one
- X character, then it is used as both the first and last character.
- X*/
- int hash(string) char *string; {
- X return ( string[0] + string[strlen(string)-1] ) % TableSize;
- X}
- X
- X/* Returns a pointer to the bucket in the hash table corresponding to
- X the specified string and name type. If none is found then NULL is
- X returned.
- X*/
- bucket *findid(string, name_type) char *string; int name_type; {
- X bucket *entry;
- X entry = table[hash(string)];
- X while (entry != NULL && (strcmp(string, entry->name) != 0
- X || entry->attribute->field_name != name_type))
- X entry = entry->next;
- X return entry;
- X}
- X
- X/* Returns true iff a string of name type already appears in the symbol
- X table.
- X*/
- boolean intable(string, name_type) char *string; int name_type; {
- X if (findid(string, name_type) != NULL)
- X return true;
- X else
- X return false;
- X}
- X
- X/* Enters the identifier, string, into the symbol table along with
- X its associated attribute, attr. A copy of the string is made.
- X*/
- void enterid(string, attr) char *string; attr_rec attr; {
- X bucket *entry;
- X entry = findid(string, attr.field_name);
- X /* If string is not present, then add it. */
- X if (entry == NULL) {
- X int index;
- X index = hash(string);
- X entry = (bucket*) mymalloc(sizeof(bucket));
- X entry->name = mymalloc(strlen(string) + 1);
- X strcpy(entry->name, string);
- X entry->attribute = (attr_rec*) mymalloc(sizeof(attr_rec));
- X *(entry->attribute) = attr;
- X entry->next = table[index];
- X table[index] = entry;
- X }
- X}
- X
- X/* Returns the attribute associated with the specified string and name type. */
- attr_rec *get_attribute(string, name_type) char *string; int name_type; {
- X bucket *entry;
- X entry = findid(string, name_type);
- X if (entry != NULL) return entry->attribute;
- X else return NULL;
- X}
- END_OF_FILE
- if test 3217 -ne `wc -c <'compiler/symtable.c'`; then
- echo shar: \"'compiler/symtable.c'\" unpacked with wrong size!
- fi
- # end of 'compiler/symtable.c'
- fi
- if test -f 'compiler/symtable.h' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'compiler/symtable.h'\"
- else
- echo shar: Extracting \"'compiler/symtable.h'\" \(976 characters\)
- sed "s/^X//" >'compiler/symtable.h' <<'END_OF_FILE'
- X/* symtable.h
- X Copyright (C) 1992 J Dana Eckart
- X
- X This program is free software; you can redistribute it and/or modify
- X it under the terms of the GNU General Public License as published by
- X the Free Software Foundation; either version 1, or (at your option)
- X any later version.
- X
- X This program is distributed in the hope that it will be useful,
- X but WITHOUT ANY WARRANTY; without even the implied warranty of
- X MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- X GNU General Public License for more details.
- X
- X You should have received a copy of the GNU General Public License
- X along with CELLULAR-2.0; see the file COPYING. If not, write to the
- X Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- X*/
- X
- X/* The exported declarations for using the symbol table. */
- X
- X#define VARIABLE 0
- X#define FIELD 1
- X
- extern void initsymboltable();
- extern void enterid();
- extern boolean intable();
- extern attr_rec *get_attribute();
- END_OF_FILE
- if test 976 -ne `wc -c <'compiler/symtable.h'`; then
- echo shar: \"'compiler/symtable.h'\" unpacked with wrong size!
- fi
- # end of 'compiler/symtable.h'
- fi
- if test ! -d 'driver' ; then
- echo shar: Creating directory \"'driver'\"
- mkdir 'driver'
- fi
- if test -f 'driver/Makefile' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'driver/Makefile'\"
- else
- echo shar: Extracting \"'driver/Makefile'\" \(2056 characters\)
- sed "s/^X//" >'driver/Makefile' <<'END_OF_FILE'
- X# Makefile
- X# Copyright (C) 1992 J Dana Eckart
- X#
- X# This program is free software; you can redistribute it and/or modify
- X# it under the terms of the GNU General Public License as published by
- X# the Free Software Foundation; either version 1, or (at your option)
- X# any later version.
- X#
- X# This program is distributed in the hope that it will be useful,
- X# but WITHOUT ANY WARRANTY; without even the implied warranty of
- X# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- X# GNU General Public License for more details.
- X#
- X# You should have received a copy of the GNU General Public License
- X# along with CELLULAR-2.0; see the file COPYING. If not, write to the
- X# Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- X
- X# Installation directories.
- X#
- BIN=/usr/local/bin
- LIB=/usr/local/lib/cellular
- MAN=/usr/man/manl
- MAN_EXT=l
- X
- X# The default maximum size of a single dimension within Cellang programs.
- X#
- MAX_DIM_SIZE=64
- X
- X# If you want to have the Cellang compiler configured to compile the viewer
- X# into the executables then assign COMBINED the value "1", otherwise assign
- X# a "0". This makes for faster display of many automata, though it does need
- X# X11 to run them.
- X#
- COMBINED=0 # 0 or 1
- X
- X# Dependencies
- X
- all: pe-scam pe-scam.${MAN_EXT}
- X
- install: all
- X - mkdir -p ${BIN}
- X - mkdir -p ${MAN}
- X
- X install pe-scam ${BIN}/pe-scam
- X install -m 644 pe-scam.${MAN_EXT} ${MAN}/pe-scam.${MAN_EXT}
- X
- deinstall:
- X /bin/rm -f ${BIN}/pe-scam
- X /bin/rm -f ${MAN}/pe-scam.${MAN_EXT}
- X
- clean:
- X /bin/rm -f *.o *.tab.h *.tab.c *.aux *.dvi *.log *.toc \
- X pe-scam core pe-scam.${MAN_EXT}
- X
- realclean: clean
- X
- pe-scam: pe-scam.sh
- X sed -e 's?YOUR_LIB?$(LIB)?' \
- X -e 's?YOUR_BIN?$(BIN)?' \
- X -e 's?YOUR_CC?$(CC)?' \
- X -e 's?YOUR_CFLAGS?$(CFLAGS)?' \
- X -e 's?YOUR_MAX_DIM_SIZE?$(MAX_DIM_SIZE)?' \
- X -e 's?YOUR_COMBINED?$(COMBINED)?' \
- X pe-scam.sh > pe-scam
- X chmod u+rx pe-scam
- X
- pe-scam.${MAN_EXT}: pe-scam.man
- X sed -e 's?LIB_DIR?$(LIB)?' \
- X -e 's?MAN_EXT?$(MAN_EXT)?g' \
- X -e 's?MAX_DIM_SIZE?$(MAX_DIM_SIZE)?g' \
- X pe-scam.man > pe-scam.${MAN_EXT}
- END_OF_FILE
- if test 2056 -ne `wc -c <'driver/Makefile'`; then
- echo shar: \"'driver/Makefile'\" unpacked with wrong size!
- fi
- # end of 'driver/Makefile'
- fi
- if test -f 'driver/pe-scam.sh' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'driver/pe-scam.sh'\"
- else
- echo shar: Extracting \"'driver/pe-scam.sh'\" \(3453 characters\)
- sed "s/^X//" >'driver/pe-scam.sh' <<'END_OF_FILE'
- X#!/bin/sh
- X# pe-scam.sh
- X# Copyright (C) 1992 J Dana Eckart
- X#
- X# This program is free software; you can redistribute it and/or modify
- X# it under the terms of the GNU General Public License as published by
- X# the Free Software Foundation; either version 1, or (at your option)
- X# any later version.
- X#
- X# This program is distributed in the hope that it will be useful,
- X# but WITHOUT ANY WARRANTY; without even the implied warranty of
- X# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- X# GNU General Public License for more details.
- X#
- X# You should have received a copy of the GNU General Public License
- X# along with CELLULAR-2.0; see the file COPYING. If not, write to the
- X# Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- X
- LIB=YOUR_LIB
- BIN=YOUR_BIN
- CC=YOUR_CC
- MAX_DIM_SIZE=YOUR_MAX_DIM_SIZE
- COMBINED=YOUR_COMBINED
- X
- CFLAGS='YOUR_CFLAGS'
- X
- USAGE="usage: ... | `basename $0` [-r timefile] [-c codefile] \
- X (-o | [-curses | -x11] [-display X11_display]\
- X [-p n] [-s n] [-map mapfile] [-f n]\
- X [-dim [n|n..n]{,n|,n..n}])"
- X
- trap "exit" 0
- X
- CODEFILE="a.pe-scam"
- X
- while (test $# -gt 0)
- do
- X case $1 in
- X '-o') if test -n "$CURSES" -o \
- X -n "$X11" -o \
- X -n "$X_DISPLAY" -o \
- X -n "$MAPFILE" -o \
- X -n "$PAUSE" -o \
- X -n "$SIZE" -o \
- X -n "$FIELD"
- X then
- X echo $USAGE
- X exit 1
- X else
- X OUTPUT=yes
- X fi
- X ;;
- X '-c') CODEFILE=$2
- X shift
- X ;;
- X '-r') if test "$COMBINED" = "0"
- X then
- X TIMEFILE=$2
- X else
- X TIMEFILE="-r $2"
- X fi
- X shift
- X ;;
- X '-curses')
- X if test -n "$OUTPUT"
- X then
- X echo $USAGE
- X exit 1
- X else
- X CURSES=$1
- X fi
- X ;;
- X '-x11') if test -n "$OUTPUT"
- X then
- X echo $USAGE
- X exit 1
- X else
- X X11=$1
- X fi
- X ;;
- X '-display')
- X if test -n "$OUTPUT"
- X then
- X echo $USAGE
- X exit 1
- X else
- X X_DISPLAY="-display $2"
- X fi
- X shift
- X ;;
- X '-map') if test -n "$OUTPUT"
- X then
- X echo $USAGE
- X exit 1
- X else
- X MAPFILE="-map $2"
- X fi
- X shift
- X ;;
- X '-p') if test -n "$OUTPUT"
- X then
- X echo $USAGE
- X exit 1
- X else
- X PAUSE="-p $2"
- X fi
- X shift
- X ;;
- X '-s') if test -n "$OUTPUT"
- X then
- X echo $USAGE
- X exit 1
- X else
- X SIZE="-s $2"
- X fi
- X shift
- X ;;
- X '-f') if test -n "$OUTPUT"
- X then
- X echo $USAGE
- X exit 1
- X else
- X FIELD="-f $2"
- X fi
- X shift
- X ;;
- X '-dim') if test -n "$OUTPUT"
- X then
- X echo $USAGE
- X exit 1
- X else
- X DIM="$2"
- X fi
- X shift
- X ;;
- X *) echo "Unknown flag, '$1'."
- X echo $USAGE
- X exit 1
- X ;;
- X esac
- X shift
- done
- X
- X#
- X# Fix up the TIMEFILE is necessary.
- X#
- if test "$COMBINED" = "0" -a -z "$TIMEFILE"
- then
- X TIMEFILE="-"
- fi
- X
- X#
- X# Make sure there is a valid codefile
- X#
- if test ! -x $CODEFILE
- then
- X echo $USAGE
- X exit 1
- fi
- X
- X#
- X# Perform the pe-scam simulation.
- X#
- if test "$OUTPUT" = "yes"
- then
- X if test "$COMBINED" = "0"
- X then
- X $CODEFILE $TIMEFILE
- X else
- X $CODEFILE $TIMEFILE -o
- X fi
- else
- X
- X # If no -dim option given, then use the default.
- X #
- X if test -z "$DIM"
- X then
- X # Display only a small portion if using curses.
- X #
- X if test -n "$CURSES"
- X then
- X DIM=0..20,0..20
- X else
- X MAX_DIM_SIZE=`echo "$MAX_DIM_SIZE 1 - p" | dc`
- X DIM=0..${MAX_DIM_SIZE},0..${MAX_DIM_SIZE}
- X fi
- X fi
- X
- X if test "$COMBINED" = "0"
- X then
- X $CODEFILE $TIMEFILE | \
- X $BIN/cellview $CURSES $X11 $MAPFILE $SIZE $PAUSE \
- X $FIELD $X_DISPLAY -dim $DIM
- X else
- X $CODEFILE $TIMEFILE \
- X $CURSES $X11 $MAPFILE $SIZE $PAUSE \
- X $FIELD $X_DISPLAY -dim $DIM
- X fi
- fi
- END_OF_FILE
- if test 3453 -ne `wc -c <'driver/pe-scam.sh'`; then
- echo shar: \"'driver/pe-scam.sh'\" unpacked with wrong size!
- fi
- # end of 'driver/pe-scam.sh'
- fi
- if test ! -d 'examples' ; then
- echo shar: Creating directory \"'examples'\"
- mkdir 'examples'
- fi
- if test -f 'examples/Makefile' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'examples/Makefile'\"
- else
- echo shar: Extracting \"'examples/Makefile'\" \(2393 characters\)
- sed "s/^X//" >'examples/Makefile' <<'END_OF_FILE'
- X# Makefile
- X# Copyright (C) 1992 J Dana Eckart
- X#
- X# This program is free software; you can redistribute it and/or modify
- X# it under the terms of the GNU General Public License as published by
- X# the Free Software Foundation; either version 1, or (at your option)
- X# any later version.
- X#
- X# This program is distributed in the hope that it will be useful,
- X# but WITHOUT ANY WARRANTY; without even the implied warranty of
- X# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- X# GNU General Public License for more details.
- X#
- X# You should have received a copy of the GNU General Public License
- X# along with CELLULAR-2.0; see the file COPYING. If not, write to the
- X# Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- X
- X# The place where cellc can be found
- X#
- BIN=/usr/local/bin
- X
- X# The default (maximum) sizes associated with Cellang programs.
- X#
- MAX_DIM_SIZE=64
- X
- X# Choose a C compiler and options.
- X#
- CC = gcc
- CFLAGS = -O -ansi -pedantic
- X
- X# Rules (default.mk on SunOS uses a -target option not supported by GNU C)
- X#
- COMPILE.c=$(CC) $(CFLAGS) $(CPPFLAGS) -c
- X
- X# Dependencies
- X
- all: show \
- X bin/life bin/gas bin/dist bin/srdp bin/parity bin/cparity \
- X data/srdp data/gas data/dist
- X
- install: all
- X - mkdir -p ${LIB}
- X
- X cp -r . ${LIB}/examples
- X /bin/rm -f ${LIB}/examples/show.sh
- X /bin/rm -f ${LIB}/examples/Makefile
- X /bin/rm -f ${LIB}/examples/gas_data_gen*
- X /bin/rm -f ${LIB}/examples/srdp_data_gen*
- X /bin/rm -f ${LIB}/examples/dist_data_gen*
- X chmod -R uog+r ${LIB}/examples
- X
- clean:
- X /bin/rm -f show bin/*
- X /bin/rm -f gas_data_gen srdp_data_gen dist_data_gen
- X /bin/rm -f data/gas data/srdp data/dist
- X find . -name core -exec /bin/rm -f {} \;
- X
- realclean: clean
- X
- deinstall:
- X /bin/rm -rf ${LIB}/examples
- X
- show: show.sh
- X sed -e 's?YOUR_BIN?$(BIN)?' show.sh > show
- X chmod uog+rx show
- X
- bin/life: src/life
- X ../compiler/cellc -o bin/life src/life
- X
- bin/gas: src/gas
- X ../compiler/cellc -o bin/gas src/gas
- X
- bin/dist: src/dist
- X ../compiler/cellc -o bin/dist src/dist
- X
- bin/srdp: src/srdp
- X ../compiler/cellc -o bin/srdp src/srdp
- X
- bin/parity: src/parity
- X ../compiler/cellc -o bin/parity src/parity
- X
- bin/cparity: src/cparity
- X ../compiler/cellc -o bin/cparity src/cparity
- X
- data/srdp: srdp_data_gen
- X ./srdp_data_gen ${MAX_DIM_SIZE} > data/srdp
- X
- data/gas: gas_data_gen
- X ./gas_data_gen ${MAX_DIM_SIZE} > data/gas
- X
- data/dist: dist_data_gen
- X ./dist_data_gen ${MAX_DIM_SIZE} > data/dist
- END_OF_FILE
- if test 2393 -ne `wc -c <'examples/Makefile'`; then
- echo shar: \"'examples/Makefile'\" unpacked with wrong size!
- fi
- # end of 'examples/Makefile'
- fi
- if test -f 'examples/README' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'examples/README'\"
- else
- echo shar: Extracting \"'examples/README'\" \(1312 characters\)
- sed "s/^X//" >'examples/README' <<'END_OF_FILE'
- X# README
- X# Copyright (C) 1992 J Dana Eckart
- X#
- X# This program is free software; you can redistribute it and/or modify
- X# it under the terms of the GNU General Public License as published by
- X# the Free Software Foundation; either version 1, or (at your option)
- X# any later version.
- X#
- X# This program is distributed in the hope that it will be useful,
- X# but WITHOUT ANY WARRANTY; without even the implied warranty of
- X# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- X# GNU General Public License for more details.
- X#
- X# You should have received a copy of the GNU General Public License
- X# along with CELLULAR-2.0; see the file COPYING. If not, write to the
- X# Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- X
- This directory contains several sample Cellang programs. The command "show"
- shows which programs are available. To see one of them do either:
- X
- X show name
- or
- X show name host
- X
- both will run the Cellang program corresponding to name (found in the "src"
- directory), but the second will assume that the results are being displayed
- in X windows and should be displayed on the named host.
- X
- The "bin" directory contains the executables for the Cellang programs which
- appear in the "src" directory. The input files to each automata appear in
- the "data" directory.
- END_OF_FILE
- if test 1312 -ne `wc -c <'examples/README'`; then
- echo shar: \"'examples/README'\" unpacked with wrong size!
- fi
- # end of 'examples/README'
- fi
- if test ! -d 'examples/bin' ; then
- echo shar: Creating directory \"'examples/bin'\"
- mkdir 'examples/bin'
- fi
- if test ! -d 'examples/data' ; then
- echo shar: Creating directory \"'examples/data'\"
- mkdir 'examples/data'
- fi
- if test -f 'examples/data/cparity' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'examples/data/cparity'\"
- else
- echo shar: Extracting \"'examples/data/cparity'\" \(15 characters\)
- sed "s/^X//" >'examples/data/cparity' <<'END_OF_FILE'
- X0
- X[32, 32] = 1
- END_OF_FILE
- if test 15 -ne `wc -c <'examples/data/cparity'`; then
- echo shar: \"'examples/data/cparity'\" unpacked with wrong size!
- fi
- # end of 'examples/data/cparity'
- fi
- if test -f 'examples/data/life' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'examples/data/life'\"
- else
- echo shar: Extracting \"'examples/data/life'\" \(713 characters\)
- sed "s/^X//" >'examples/data/life' <<'END_OF_FILE'
- X0
- X[27, 16] = 1
- X[27, 17] = 1
- X[20, 17] = 1
- X[20, 21] = 1
- X[21, 18] = 1
- X[21, 19] = 1
- X[21, 20] = 1
- X[22, 18] = 1
- X[22, 19] = 1
- X[22, 20] = 1
- X[28, 23] = 1
- X[29, 24] = 1
- X[29, 25] = 1
- X[30, 23] = 1
- X[30, 24] = 1
- X[28, 18] = 1
- X[28, 19] = 1
- X[29, 18] = 1
- X[29, 19] = 1
- X[30, 18] = 1
- X[30, 19] = 1
- X[31, 19] = 1
- X[31, 20] = 1
- X[27, 18] = 1
- X[19, 22] = 1
- X[18, 17] = 1
- X[19, 16] = 1
- X[17, 18] = 1
- X[17, 19] = 1
- X[17, 20] = 1
- X[18, 21] = 1
- X[6, 19] = 1
- X[6, 20] = 1
- X[7, 19] = 1
- X[7, 20] = 1
- X[28, 15] = 1
- X[28, 16] = 1
- X[29, 15] = 1
- X[29, 16] = 1
- X[30, 15] = 1
- X[30, 16] = 1
- X[30, 17] = 1
- X[31, 14] = 1
- X[31, 15] = 1
- X[40, 18] = 1
- X[41, 18] = 1
- X[40, 17] = 1
- X[41, 17] = 1
- X[59, 54] = 1
- X[56, 51] = 1
- X[56, 52] = 1
- X[57, 51] = 1
- X[57, 53] = 1
- X[58, 53] = 1
- X[59, 53] = 1
- END_OF_FILE
- if test 713 -ne `wc -c <'examples/data/life'`; then
- echo shar: \"'examples/data/life'\" unpacked with wrong size!
- fi
- # end of 'examples/data/life'
- fi
- if test -f 'examples/data/parity' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'examples/data/parity'\"
- else
- echo shar: Extracting \"'examples/data/parity'\" \(15 characters\)
- sed "s/^X//" >'examples/data/parity' <<'END_OF_FILE'
- X0
- X[32, 32] = 1
- END_OF_FILE
- if test 15 -ne `wc -c <'examples/data/parity'`; then
- echo shar: \"'examples/data/parity'\" unpacked with wrong size!
- fi
- # end of 'examples/data/parity'
- fi
- if test -f 'examples/dist_data_gen.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'examples/dist_data_gen.c'\"
- else
- echo shar: Extracting \"'examples/dist_data_gen.c'\" \(1457 characters\)
- sed "s/^X//" >'examples/dist_data_gen.c' <<'END_OF_FILE'
- X/* dist_data_gen.c
- X Copyright (C) 1992 J Dana Eckart
- X
- X This program is free software; you can redistribute it and/or modify
- X it under the terms of the GNU General Public License as published by
- X the Free Software Foundation; either version 1, or (at your option)
- X any later version.
- X
- X This program is distributed in the hope that it will be useful,
- X but WITHOUT ANY WARRANTY; without even the implied warranty of
- X MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- X GNU General Public License for more details.
- X
- X You should have received a copy of the GNU General Public License
- X along with CELLULAR-2.0; see the file COPYING. If not, write to the
- X Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- X*/
- X
- X/* Generate the input data used by dist. A single command line argument
- X indicates the size of each of two dimensions of the cell universe.
- X*/
- X
- X#include <stdio.h>
- X
- int main(argc, argv) int argc; char *argv[]; {
- X int max_size = atoi(argv[1]);
- X int x, y;
- X
- X printf("0\n");
- X
- X for (x = 0; x < max_size; x++)
- X for (y = 0; y < max_size; y++) {
- X /* Write cell location. */
- X printf("[%d, %d] = ", x, y);
- X
- X /* Write "which" field value. */
- X if ((x+y)%2 == 0)
- X printf("1");
- X else
- X printf("0");
- X
- X /* Write "dist" field value. */
- X if (x == max_size/2 &&
- X (y == max_size/2 ||
- X y == max_size/2 + (max_size%2?1:-1)))
- X printf(", 1");
- X
- X printf("\n");
- X }
- X
- X return 0;
- X}
- END_OF_FILE
- if test 1457 -ne `wc -c <'examples/dist_data_gen.c'`; then
- echo shar: \"'examples/dist_data_gen.c'\" unpacked with wrong size!
- fi
- # end of 'examples/dist_data_gen.c'
- fi
- if test -f 'examples/gas_data_gen.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'examples/gas_data_gen.c'\"
- else
- echo shar: Extracting \"'examples/gas_data_gen.c'\" \(1640 characters\)
- sed "s/^X//" >'examples/gas_data_gen.c' <<'END_OF_FILE'
- X/* gas_data_gen.c
- X Copyright (C) 1992 J Dana Eckart
- X
- X This program is free software; you can redistribute it and/or modify
- X it under the terms of the GNU General Public License as published by
- X the Free Software Foundation; either version 1, or (at your option)
- X any later version.
- X
- X This program is distributed in the hope that it will be useful,
- X but WITHOUT ANY WARRANTY; without even the implied warranty of
- X MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- X GNU General Public License for more details.
- X
- X You should have received a copy of the GNU General Public License
- X along with CELLULAR-2.0; see the file COPYING. If not, write to the
- X Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- X*/
- X
- X/* Generate the input data used by gas. A single command line argument
- X indicates the size of each of two dimensions of the cell universe.
- X*/
- X
- X#include <stdio.h>
- X
- int main(argc, argv) int argc; char *argv[]; {
- X int max_size = atoi(argv[1]);
- X int x, y;
- X
- X printf("0\n");
- X
- X for (x = 0; x < max_size; x++)
- X for (y = 0; y < max_size; y++) {
- X /* Write cell location. */
- X printf("[%d, %d] = ", x, y);
- X
- X /* Write "which" field value. */
- X if (x%2 == 0 && y%2 == 0)
- X printf("3");
- X else if (x%2 == 0 && y%2 == 1)
- X printf("1");
- X else if (x%2 == 1 && y%2 == 0)
- X printf("2");
- X else
- X printf("0");
- X
- X /* Write "rand" field value. */
- X printf(", %d", random()%2);
- X
- X /* Write "gas" field value. */
- X if (0.33*max_size < x && x < 0.66*max_size
- X &&
- X 0.33*max_size < y && y < 0.66*max_size)
- X printf(", 1");
- X
- X printf("\n");
- X }
- X
- X return 0;
- X}
- END_OF_FILE
- if test 1640 -ne `wc -c <'examples/gas_data_gen.c'`; then
- echo shar: \"'examples/gas_data_gen.c'\" unpacked with wrong size!
- fi
- # end of 'examples/gas_data_gen.c'
- fi
- if test ! -d 'examples/map' ; then
- echo shar: Creating directory \"'examples/map'\"
- mkdir 'examples/map'
- fi
- if test -f 'examples/map/srdp' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'examples/map/srdp'\"
- else
- echo shar: Extracting \"'examples/map/srdp'\" \(100 characters\)
- sed "s/^X//" >'examples/map/srdp' <<'END_OF_FILE'
- X0 65535 0 0
- X1 0 65535 0
- X2 0 65535 65535
- X3 0 0 65535
- X4 65535 0 65535
- END_OF_FILE
- if test 100 -ne `wc -c <'examples/map/srdp'`; then
- echo shar: \"'examples/map/srdp'\" unpacked with wrong size!
- fi
- # end of 'examples/map/srdp'
- fi
- if test -f 'examples/show.sh' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'examples/show.sh'\"
- else
- echo shar: Extracting \"'examples/show.sh'\" \(2621 characters\)
- sed "s/^X//" >'examples/show.sh' <<'END_OF_FILE'
- X#!/bin/sh
- X# show.sh
- X# Copyright (C) 1992 J Dana Eckart
- X#
- X# This program is free software; you can redistribute it and/or modify
- X# it under the terms of the GNU General Public License as published by
- X# the Free Software Foundation; either version 1, or (at your option)
- X# any later version.
- X#
- X# This program is distributed in the hope that it will be useful,
- X# but WITHOUT ANY WARRANTY; without even the implied warranty of
- X# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- X# GNU General Public License for more details.
- X#
- X# You should have received a copy of the GNU General Public License
- X# along with CELLULAR-2.0; see the file COPYING. If not, write to the
- X# Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- X
- X# Compile and run with the appropriate data file (if needed/available)
- X# a Cellang program contained within the filename given.
- X#
- X
- X# Location of cellview
- X#
- BIN=YOUR_BIN
- WD=`dirname $0`
- X
- CC=gcc
- X
- X# Check the usage
- X#
- USAGE="usage: `basename $1` filename [ x11_display ]"
- X
- if test $# -eq 0
- then
- X echo "The available examples are:"
- X echo " "
- X echo " life -- the game of life (with gun and eater)"
- X echo " gas -- simulates diffusion of two gases"
- X echo " dist -- shows distance using hexagonal neighborhood"
- X echo " srdp -- scissors, rock, dynamite, paper"
- X echo " parity -- a black & white position parity matrix"
- X echo " cparity -- a color position parity matrix"
- X echo " "
- X exit 0
- elif test $# -gt 2
- then
- X echo $USAGE
- X exit 1
- fi
- X
- X# Find the executable
- X#
- NAME=$1
- if test ! -x $WD/bin/$NAME
- then
- X if test ! -r $WD/src/$NAME
- X then
- X echo "`basename $0`: file '$WD/src/$NAME' not found"
- X else
- X echo "`basename $0`: file '$WD/src/$NAME' not compiled"
- X fi
- X exit 1
- fi
- X
- echo "displaying results of '$NAME' ..."
- X
- X# Determine the type of display, use x11 if either the current terminal
- X# type is an xterm, or if another machine was given on which to display
- X# the results.
- X#
- if test "$TERM" = "xterm" -o $# -eq 2
- then
- X DISPLAY=-x11
- X if (test $# -eq 2) then
- X DISPLAY="$DISPLAY -display $2:0"
- X else
- X DISPLAY="$DISPLAY -display `hostname`:0"
- X fi
- else
- X DISPLAY=-curses
- fi
- X
- X# Use the proper color map.
- X#
- if test "$NAME" = "srdp"
- then
- X MAP="-map map/srdp"
- else
- X MAP=""
- fi
- X
- X# Display the proper field value.
- X#
- if test "$NAME" = "gas"
- then
- X FIELD="-f 3"
- elif test "$NAME" = "dist"
- then
- X FIELD="-f 2"
- else
- X FIELD="-f 1"
- fi
- X
- X# Display the proper proportion for cells.
- X#
- if test "$NAME" = "dist"
- then
- X SIZE="-s 5,3"
- else
- X SIZE="-s 3,3"
- fi
- X
- X# Run the program(s).
- X#
- X$BIN/pe-scam -c $WD/bin/$NAME $DISPLAY $SIZE $FIELD $MAP < $WD/data/$NAME
- END_OF_FILE
- if test 2621 -ne `wc -c <'examples/show.sh'`; then
- echo shar: \"'examples/show.sh'\" unpacked with wrong size!
- fi
- # end of 'examples/show.sh'
- fi
- if test ! -d 'examples/src' ; then
- echo shar: Creating directory \"'examples/src'\"
- mkdir 'examples/src'
- fi
- if test -f 'examples/src/cparity' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'examples/src/cparity'\"
- else
- echo shar: Extracting \"'examples/src/cparity'\" \(924 characters\)
- sed "s/^X//" >'examples/src/cparity' <<'END_OF_FILE'
- X# cparity
- X# Copyright (C) 1992 J Dana Eckart
- X#
- X# This program is free software; you can redistribute it and/or modify
- X# it under the terms of the GNU General Public License as published by
- X# the Free Software Foundation; either version 1, or (at your option)
- X# any later version.
- X#
- X# This program is distributed in the hope that it will be useful,
- X# but WITHOUT ANY WARRANTY; without even the implied warranty of
- X# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- X# GNU General Public License for more details.
- X#
- X# You should have received a copy of the GNU General Public License
- X# along with CELLULAR-2.0; see the file COPYING. If not, write to the
- X# Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- X
- X# A color version of the parity program.
- X
- X2 dimensions of 0..255
- X
- sum := [0, 1] + [1, 1] + [1, 0] + [-1, 1] + [-1, 0] + [-1, -1]
- X + [0, -1] + [1, -1]
- X
- cell := sum % 256
- END_OF_FILE
- if test 924 -ne `wc -c <'examples/src/cparity'`; then
- echo shar: \"'examples/src/cparity'\" unpacked with wrong size!
- fi
- # end of 'examples/src/cparity'
- fi
- if test -f 'examples/src/dist' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'examples/src/dist'\"
- else
- echo shar: Extracting \"'examples/src/dist'\" \(2060 characters\)
- sed "s/^X//" >'examples/src/dist' <<'END_OF_FILE'
- X# dist
- X# Copyright (C) 1992 J Dana Eckart
- X#
- X# This program is free software; you can redistribute it and/or modify
- X# it under the terms of the GNU General Public License as published by
- X# the Free Software Foundation; either version 1, or (at your option)
- X# any later version.
- X#
- X# This program is distributed in the hope that it will be useful,
- X# but WITHOUT ANY WARRANTY; without even the implied warranty of
- X# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- X# GNU General Public License for more details.
- X#
- X# You should have received a copy of the GNU General Public License
- X# along with CELLULAR-2.0; see the file COPYING. If not, write to the
- X# Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- X
- X# Use a hexagonal neighborhood to compute the distance(s) from
- X# established points (cells with non-zero values for the dist field).
- X# The hexagonal neighborhood is composed of stagered blocks of two
- X# cells stacked upon one another (imagine a hexagon which has been
- X# pushed in at the sides to form a rectangle). The which fields are
- X# set according the the following scheme (with 1 being the top of a
- X# hexagon and 0 the bottom).
- X#
- X# 0 1 0 1 0 1
- X# 1 0 1 0 1 0
- X# 0 1 0 1 0 1
- X# 1 0 1 0 1 0
- X#
- X2 dimensions of
- X which of 0..1
- X dist of 0..255
- end
- X
- X# Identification of the neighboring cells.
- X#
- if cell.which = 0 then
- X north := [0, 1]
- X ne := [1, 0]
- X se := [1, -1]
- X south := [0, -2]
- X sw := [-1, -1]
- X nw := [-1, 0]
- else
- X north := [0, 2]
- X ne := [1, 1]
- X se := [1, 0]
- X south := [0, -1]
- X sw := [-1, 0]
- X nw := [-1, 1]
- end
- X
- min_dist := 255
- min_dist := north.dist when north.dist < min_dist & north.dist > 0
- min_dist := ne.dist when ne.dist < min_dist & ne.dist > 0
- min_dist := se.dist when se.dist < min_dist & se.dist > 0
- min_dist := south.dist when south.dist < min_dist & south.dist > 0
- min_dist := sw.dist when sw.dist < min_dist & sw.dist > 0
- min_dist := nw.dist when nw.dist < min_dist & nw.dist > 0
- X
- cell.dist := min_dist+4 when cell.dist = 0 & min_dist < 255
- END_OF_FILE
- if test 2060 -ne `wc -c <'examples/src/dist'`; then
- echo shar: \"'examples/src/dist'\" unpacked with wrong size!
- fi
- # end of 'examples/src/dist'
- fi
- if test -f 'examples/src/gas' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'examples/src/gas'\"
- else
- echo shar: Extracting \"'examples/src/gas'\" \(2712 characters\)
- sed "s/^X//" >'examples/src/gas' <<'END_OF_FILE'
- X# gas
- X# Copyright (C) 1992 J Dana Eckart
- X#
- X# This program is free software; you can redistribute it and/or modify
- X# it under the terms of the GNU General Public License as published by
- X# the Free Software Foundation; either version 1, or (at your option)
- X# any later version.
- X#
- X# This program is distributed in the hope that it will be useful,
- X# but WITHOUT ANY WARRANTY; without even the implied warranty of
- X# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- X# GNU General Public License for more details.
- X#
- X# You should have received a copy of the GNU General Public License
- X# along with CELLULAR-2.0; see the file COPYING. If not, write to the
- X# Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- X
- X# Simulate gas diffusion by `randomly' rotating the cell values in a
- X# Margolus-neighborhood either clockwise or counter-clockwise. The
- X# groupings are alternations of the two overlapping square neighborhoods:
- X#
- X# 0 1
- X# 2 3 2
- X# 1 0
- X#
- X2 dimensions of
- X which of 0..3
- X rand of 0..1
- X gas of 0..1
- end
- X
- X# Calculate the sum of the random fields in the neighborhood.
- X#
- random := cell.rand + [1, 0].rand + [1, -1].rand + [0, -1].rand
- X when (cell.which=0 & time%2=1) | (cell.which=3 & time%2=0)
- X
- X := [-1, 0].rand + cell.rand + [0, -1].rand + [-1, -1].rand
- X when (cell.which=1 & time%2=1) | (cell.which=2 & time%2=0)
- X
- X := [-1, 1].rand + [0, 1].rand + cell.rand + [-1, 0].rand
- X when (cell.which=3 & time%2=1) | (cell.which=0 & time%2=0)
- X
- X := [0, 1].rand + [1, 1].rand + [1, 0].rand + cell.rand
- X otherwise
- X
- X# Alternate between the overlapping neighborhoods
- X#
- if time%2 = 1 then
- X if random%2 = 1 then
- X # Clockwise rotation
- X cell.gas := [0, -1].gas when cell.which = 0
- X := [-1, 0].gas when cell.which = 1
- X := [0, 1].gas when cell.which = 3
- X := [1, 0].gas when cell.which = 2
- X else
- X # Counter-clockwise rotation
- X cell.gas := [1, 0].gas when cell.which = 0
- X := [0, -1].gas when cell.which = 1
- X := [-1, 0].gas when cell.which = 3
- X := [0, 1].gas when cell.which = 2
- X end
- else
- X if random%2 = 1 then
- X # Clockwise rotation
- X cell.gas := [0, -1].gas when cell.which = 3
- X := [-1, 0].gas when cell.which = 2
- X := [0, 1].gas when cell.which = 0
- X := [1, 0].gas when cell.which = 1
- X else
- X # Counter-clockwise rotation
- X cell.gas := [1, 0].gas when cell.which = 3
- X := [0, -1].gas when cell.which = 2
- X := [-1, 0].gas when cell.which = 0
- X := [0, 1].gas when cell.which = 1
- X end
- end
- X
- X# Stir the random values, so that they keep changing.
- X#
- cell.rand := ([1, 0].rand + [0, 1].rand + [-1, 0].rand + [0, -1].rand
- X + cell.rand)%2
- END_OF_FILE
- if test 2712 -ne `wc -c <'examples/src/gas'`; then
- echo shar: \"'examples/src/gas'\" unpacked with wrong size!
- fi
- # end of 'examples/src/gas'
- fi
- if test -f 'examples/src/life' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'examples/src/life'\"
- else
- echo shar: Extracting \"'examples/src/life'\" \(982 characters\)
- sed "s/^X//" >'examples/src/life' <<'END_OF_FILE'
- X# life
- X# Copyright (C) 1992 J Dana Eckart
- X#
- X# This program is free software; you can redistribute it and/or modify
- X# it under the terms of the GNU General Public License as published by
- X# the Free Software Foundation; either version 1, or (at your option)
- X# any later version.
- X#
- X# This program is distributed in the hope that it will be useful,
- X# but WITHOUT ANY WARRANTY; without even the implied warranty of
- X# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- X# GNU General Public License for more details.
- X#
- X# You should have received a copy of the GNU General Public License
- X# along with CELLULAR-2.0; see the file COPYING. If not, write to the
- X# Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- X
- X# This program implements a 2 dimensional game of life.
- X
- X2 dimensions of 0..1
- X
- sum := [0, 1] + [1, 1] + [1, 0] + [-1, 1] + [-1, 0] + [-1, -1]
- X + [0, -1] + [1, -1]
- X
- cell := 1 when (sum = 2 & cell = 1) | sum = 3
- X := 0 otherwise
- END_OF_FILE
- if test 982 -ne `wc -c <'examples/src/life'`; then
- echo shar: \"'examples/src/life'\" unpacked with wrong size!
- fi
- # end of 'examples/src/life'
- fi
- if test -f 'examples/src/parity' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'examples/src/parity'\"
- else
- echo shar: Extracting \"'examples/src/parity'\" \(904 characters\)
- sed "s/^X//" >'examples/src/parity' <<'END_OF_FILE'
- X# parity
- X# Copyright (C) 1992 J Dana Eckart
- X#
- X# This program is free software; you can redistribute it and/or modify
- X# it under the terms of the GNU General Public License as published by
- X# the Free Software Foundation; either version 1, or (at your option)
- X# any later version.
- X#
- X# This program is distributed in the hope that it will be useful,
- X# but WITHOUT ANY WARRANTY; without even the implied warranty of
- X# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- X# GNU General Public License for more details.
- X#
- X# You should have received a copy of the GNU General Public License
- X# along with CELLULAR-2.0; see the file COPYING. If not, write to the
- X# Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- X
- X# A simple parity program
- X
- X2 dimensions of 0..1
- X
- sum := [0, 1] + [1, 1] + [1, 0] + [-1, 1] + [-1, 0] + [-1, -1]
- X + [0, -1] + [1, -1]
- X
- cell := sum % 2
- END_OF_FILE
- if test 904 -ne `wc -c <'examples/src/parity'`; then
- echo shar: \"'examples/src/parity'\" unpacked with wrong size!
- fi
- # end of 'examples/src/parity'
- fi
- if test -f 'examples/src/srdp' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'examples/src/srdp'\"
- else
- echo shar: Extracting \"'examples/src/srdp'\" \(1967 characters\)
- sed "s/^X//" >'examples/src/srdp' <<'END_OF_FILE'
- X# srdp
- X# Copyright (C) 1992 J Dana Eckart
- X#
- X# This program is free software; you can redistribute it and/or modify
- X# it under the terms of the GNU General Public License as published by
- X# the Free Software Foundation; either version 1, or (at your option)
- X# any later version.
- X#
- X# This program is distributed in the hope that it will be useful,
- X# but WITHOUT ANY WARRANTY; without even the implied warranty of
- X# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- X# GNU General Public License for more details.
- X#
- X# You should have received a copy of the GNU General Public License
- X# along with CELLULAR-2.0; see the file COPYING. If not, write to the
- X# Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- X
- X# scissors (0), rock (1), dynamite (2), paper (3)
- X
- X2 dimensions of 0..2
- X
- X# Get the Moore neighborhood
- X#
- north := [0, 1]
- ne := [1, 1]
- east := [1, 0]
- se := [1, -1]
- south := [0, -1]
- sw := [-1, -1]
- west := [-1, 0]
- nw := [-1, 1]
- X
- threshold := 3
- X
- scissors := 0
- rock := 1
- dynamite := 2
- paper := 3
- X
- scissors_sum := (north = scissors) + (ne = scissors) + (east = scissors) +
- X (se = scissors) + (south = scissors) + (sw = scissors) +
- X (west = scissors) + (nw = scissors)
- X
- rock_sum := (north = rock) + (ne = rock) + (east = rock) + (se = rock) +
- X (south = rock) + (sw = rock) + (west = rock) + (nw = rock)
- X
- dynamite_sum := (north = dynamite) + (ne = dynamite) + (east = dynamite) +
- X (se = dynamite) + (south = dynamite) + (sw = dynamite) +
- X (west = dynamite) + (nw = dynamite)
- X
- paper_sum := (north = paper) + (ne = paper) + (east = paper) + (se = paper) +
- X (south = paper) + (sw = paper) + (west = paper) + (nw = paper)
- X
- X
- X# Find out who lives and who dies.
- cell := scissors when scissors_sum >= threshold & cell = paper
- X := rock when rock_sum >= threshold & cell = scissors
- X := dynamite when dynamite_sum >= threshold & cell = rock
- X := paper when paper_sum >= threshold & cell = dynamite
- END_OF_FILE
- if test 1967 -ne `wc -c <'examples/src/srdp'`; then
- echo shar: \"'examples/src/srdp'\" unpacked with wrong size!
- fi
- # end of 'examples/src/srdp'
- fi
- if test -f 'examples/srdp_data_gen.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'examples/srdp_data_gen.c'\"
- else
- echo shar: Extracting \"'examples/srdp_data_gen.c'\" \(1166 characters\)
- sed "s/^X//" >'examples/srdp_data_gen.c' <<'END_OF_FILE'
- X/* srdp_data_gen.c
- X Copyright (C) 1992 J Dana Eckart
- X
- X This program is free software; you can redistribute it and/or modify
- X it under the terms of the GNU General Public License as published by
- X the Free Software Foundation; either version 1, or (at your option)
- X any later version.
- X
- X This program is distributed in the hope that it will be useful,
- X but WITHOUT ANY WARRANTY; without even the implied warranty of
- X MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- X GNU General Public License for more details.
- X
- X You should have received a copy of the GNU General Public License
- X along with CELLULAR-2.0; see the file COPYING. If not, write to the
- X Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- X*/
- X
- X/* Generate the input data used by srdp. A single command line argument
- X indicates the size of each of two dimensions of the cell universe.
- X*/
- X
- X#include <stdio.h>
- X
- int main(argc, argv) int argc; char *argv[]; {
- X int max_size = atoi(argv[1]);
- X int x, y;
- X
- X printf("0\n");
- X
- X for (x = 0; x < max_size; x++)
- X for (y = 0; y < max_size; y++)
- X printf("[%d, %d] = %d\n", x, y, random()%4);
- X
- X return 0;
- X}
- END_OF_FILE
- if test 1166 -ne `wc -c <'examples/srdp_data_gen.c'`; then
- echo shar: \"'examples/srdp_data_gen.c'\" unpacked with wrong size!
- fi
- # end of 'examples/srdp_data_gen.c'
- fi
- if test ! -d 'viewer' ; then
- echo shar: Creating directory \"'viewer'\"
- mkdir 'viewer'
- fi
- if test -f 'viewer/Makefile' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'viewer/Makefile'\"
- else
- echo shar: Extracting \"'viewer/Makefile'\" \(2650 characters\)
- sed "s/^X//" >'viewer/Makefile' <<'END_OF_FILE'
- X# Makefile
- X# Copyright (C) 1992 J Dana Eckart
- X#
- X# This program is free software; you can redistribute it and/or modify
- X# it under the terms of the GNU General Public License as published by
- X# the Free Software Foundation; either version 1, or (at your option)
- X# any later version.
- X#
- X# This program is distributed in the hope that it will be useful,
- X# but WITHOUT ANY WARRANTY; without even the implied warranty of
- X# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- X# GNU General Public License for more details.
- X#
- X# You should have received a copy of the GNU General Public License
- X# along with CELLULAR-2.0; see the file COPYING. If not, write to the
- X# Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- X
- X# Installation directories.
- X#
- BIN=/usr/local/bin
- LIB=/usr/local/lib/cellular
- MAN=/usr/man/manl
- MAN_EXT=l
- X
- X# If you want to have the Cellang compiler configured to compile the viewer
- X# into the executables then assign COMBINED the value "1", otherwise assign
- X# a "0". This makes for faster display of many automata, though it does need
- X# X11 to run them.
- X#
- COMBINED=0 # 0 or 1
- X
- X# Choose a C compiler and options.
- X#
- CC = gcc
- CFLAGS = -O -ansi -pedantic
- CDEFINES= -DLIB_DIR=\"${LIB}\"
- CLIB = -lm -lcurses -ltermcap -lX11
- X
- X# Rules (default.mk on SunOS uses a -target option not supported by GNU C)
- X#
- COMPILE.c=$(CC) $(CFLAGS) $(CDEFINES) $(CPPFLAGS) -c
- X
- X# Dependencies
- X
- all: cellview cellview.${MAN_EXT}
- X
- install: all
- X - mkdir -p ${BIN}
- X - mkdir -p ${LIB}
- X - mkdir -p ${MAN}
- X
- X install cellview ${BIN}/cellview
- X install -m 644 color-map ${LIB}/color-map
- X install -m 644 bw-map ${LIB}/bw-map
- X install -m 644 curses-map ${LIB}/curses-map
- X install -m 644 cellview.${MAN_EXT} ${MAN}/cellview.${MAN_EXT}
- X
- X make CC='$(CC)' CFLAGS='$(CFLAGS)' \
- X CDEFINES='${CDEFINES} -DCOMBINED=${COMBINED}' \
- X MAN_EXT='${MAN_EXT}' LIB='${LIB}' ${COMBINED}
- X
- deinstall:
- X /bin/rm -f ${BIN}/cellview
- X /bin/rm -f ${MAN}/cellview.${MAN_EXT}
- X /bin/rm -f ${LIB}/color-map
- X /bin/rm -f ${LIB}/bw-map
- X /bin/rm -f ${LIB}/curses-map
- X /bin/rm -f ${LIB}/*.o
- X
- clean:
- X /bin/rm -f *.o core cellview cellview.${MAN_EXT}
- X
- realclean: clean
- X
- cellview: curses.o x11.o view.o
- X ${CC} ${CFLAGS} -o cellview *.o ${CLIB}
- X
- cellview.${MAN_EXT}: cellview.man
- X sed -e 's?LIB_DIR?$(LIB)?' \
- X -e 's?MAN_EXT?$(MAN_EXT)?g' cellview.man > cellview.${MAN_EXT}
- X
- view.o: view.c view.h curses.h x11.h boolean.h
- X
- curses.o: curses.c curses.h view.h boolean.h
- X
- x11.o: x11.c x11.h view.h boolean.h
- X
- object_files: curses.o x11.o view.o
- X
- X1:
- X make clean
- X make CC='$(CC)' CFLAGS='$(CFLAGS)' CDEFINES='$(CDEFINES)' object_files
- X install *.o ${LIB}
- X make clean
- X
- X0:
- END_OF_FILE
- if test 2650 -ne `wc -c <'viewer/Makefile'`; then
- echo shar: \"'viewer/Makefile'\" unpacked with wrong size!
- fi
- # end of 'viewer/Makefile'
- fi
- if test -f 'viewer/README' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'viewer/README'\"
- else
- echo shar: Extracting \"'viewer/README'\" \(1379 characters\)
- sed "s/^X//" >'viewer/README' <<'END_OF_FILE'
- X# README
- X# Copyright (C) 1992 J Dana Eckart
- X#
- X# This program is free software; you can redistribute it and/or modify
- X# it under the terms of the GNU General Public License as published by
- X# the Free Software Foundation; either version 1, or (at your option)
- X# any later version.
- X#
- X# This program is distributed in the hope that it will be useful,
- X# but WITHOUT ANY WARRANTY; without even the implied warranty of
- X# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- X# GNU General Public License for more details.
- X#
- X# You should have received a copy of the GNU General Public License
- X# along with CELLULAR-2.0; see the file COPYING. If not, write to the
- X# Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- X
- To install the cellview cellular automata viewer, edit the Makefile to
- reflect the proper values of:
- X
- X BIN - installation directory for executables
- X LIB - installation directory for supporting software
- X MAN - installation directory for manual pages
- X MAX_EXT - manual page extension to use for installation
- X
- Do "make install" to build and install the viewer. In addition, the
- Makefile also supports the targets:
- X
- X all: compile, but not install, the software
- X deinstall: remove an installation
- X clean: remove all but the distributed files within this directory
- X realclean: (same as clean)
- END_OF_FILE
- if test 1379 -ne `wc -c <'viewer/README'`; then
- echo shar: \"'viewer/README'\" unpacked with wrong size!
- fi
- # end of 'viewer/README'
- fi
- if test -f 'viewer/boolean.h' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'viewer/boolean.h'\"
- else
- echo shar: Extracting \"'viewer/boolean.h'\" \(817 characters\)
- sed "s/^X//" >'viewer/boolean.h' <<'END_OF_FILE'
- X/* boolean.h
- X Copyright (C) 1992 J Dana Eckart
- X
- X This program is free software; you can redistribute it and/or modify
- X it under the terms of the GNU General Public License as published by
- X the Free Software Foundation; either version 1, or (at your option)
- X any later version.
- X
- X This program is distributed in the hope that it will be useful,
- X but WITHOUT ANY WARRANTY; without even the implied warranty of
- X MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- X GNU General Public License for more details.
- X
- X You should have received a copy of the GNU General Public License
- X along with CELLULAR-2.0; see the file COPYING. If not, write to the
- X Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- X*/
- X
- X#define boolean int
- X
- X#define true 1
- X#define false 0
- END_OF_FILE
- if test 817 -ne `wc -c <'viewer/boolean.h'`; then
- echo shar: \"'viewer/boolean.h'\" unpacked with wrong size!
- fi
- # end of 'viewer/boolean.h'
- fi
- if test -f 'viewer/bw-map' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'viewer/bw-map'\"
- else
- echo shar: Extracting \"'viewer/bw-map'\" \(8 characters\)
- sed "s/^X//" >'viewer/bw-map' <<'END_OF_FILE'
- X0 1
- X1 0
- END_OF_FILE
- if test 8 -ne `wc -c <'viewer/bw-map'`; then
- echo shar: \"'viewer/bw-map'\" unpacked with wrong size!
- fi
- # end of 'viewer/bw-map'
- fi
- if test -f 'viewer/color-map' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'viewer/color-map'\"
- else
- echo shar: Extracting \"'viewer/color-map'\" \(5522 characters\)
- sed "s/^X//" >'viewer/color-map' <<'END_OF_FILE'
- X0 0 0 0
- X1 65535 1542 0
- X2 65535 3084 0
- X3 65535 4626 0
- X4 65535 6168 0
- X5 65535 7710 0
- X6 65535 9252 0
- X7 65535 10794 0
- X8 65535 12336 0
- X9 65535 13878 0
- X10 65535 15420 0
- X11 65535 16962 0
- X12 65535 18504 0
- X13 65535 20046 0
- X14 65535 21588 0
- X15 65535 23130 0
- X16 65535 24672 0
- X17 65535 26214 0
- X18 65535 27756 0
- X19 65535 29298 0
- X20 65535 30840 0
- X21 65535 32382 0
- X22 65535 33924 0
- X23 65535 35466 0
- X24 65535 37008 0
- X25 65535 38550 0
- X26 65535 40092 0
- X27 65535 41634 0
- X28 65535 43176 0
- X29 65535 44718 0
- X30 65535 46260 0
- X31 65535 47802 0
- X32 65535 49344 0
- X33 65535 50886 0
- X34 65535 52428 0
- X35 65535 53970 0
- X36 65535 55512 0
- X37 65535 57054 0
- X38 65535 58596 0
- X39 65535 60138 0
- X40 65535 61680 0
- X41 65535 63222 0
- X42 65535 64764 0
- X43 65535 65535 0
- X44 65535 65535 0
- X45 65535 65535 0
- X46 65535 65535 0
- X47 65535 65535 0
- X48 65535 65535 0
- X49 65535 65535 0
- X50 65535 65535 0
- X51 65535 65535 0
- X52 65535 65535 0
- X53 65535 65535 0
- X54 65535 65535 0
- X55 65535 65535 0
- X56 65535 65535 0
- X57 65535 65535 0
- X58 65535 65535 0
- X59 65535 65535 0
- X60 65535 65535 0
- X61 63993 65535 0
- X62 62451 65535 0
- X63 60909 65535 0
- X64 59367 65535 0
- X65 57825 65535 0
- X66 56283 65535 0
- X67 54741 65535 0
- X68 53199 65535 0
- X69 51657 65535 0
- X70 50115 65535 0
- X71 48573 65535 0
- X72 47031 65535 0
- X73 45489 65535 0
- X74 43947 65535 0
- X75 42405 65535 0
- X76 40863 65535 0
- X77 39321 65535 0
- X78 37779 65535 0
- X79 36237 65535 0
- X80 34695 65535 0
- X81 33153 65535 0
- X82 31611 65535 0
- X83 30069 65535 0
- X84 28527 65535 0
- X85 26985 65535 0
- X86 25443 65535 0
- X87 23901 65535 0
- X88 22359 65535 0
- X89 20817 65535 0
- X90 19275 65535 0
- X91 17733 65535 0
- X92 16191 65535 0
- X93 14649 65535 0
- X94 13107 65535 0
- X95 11565 65535 0
- X96 10023 65535 0
- X97 8481 65535 0
- X98 6939 65535 0
- X99 5397 65535 0
- X100 3855 65535 0
- X101 2313 65535 0
- X102 771 65535 0
- X103 0 65535 0
- X104 0 65535 0
- X105 0 65535 0
- X106 0 65535 1542
- X107 0 65535 3084
- X108 0 65535 4626
- X109 0 65535 6168
- X110 0 65535 7710
- X111 0 65535 9252
- X112 0 65535 10794
- X113 0 65535 12336
- X114 0 65535 13878
- X115 0 65535 15420
- X116 0 65535 16962
- X117 0 65535 18504
- X118 0 65535 20046
- X119 0 65535 21588
- X120 0 65535 23130
- X121 0 65535 24672
- X122 0 65535 26214
- X123 0 65535 27756
- X124 0 65535 29298
- X125 0 65535 30840
- X126 0 65535 32382
- X127 0 65535 33924
- X128 0 65535 35466
- X129 0 65535 37008
- X130 0 65535 38550
- X131 0 65535 40092
- X132 0 65535 41634
- X133 0 65535 43176
- X134 0 65535 44718
- X135 0 65535 46260
- X136 0 65535 47802
- X137 0 65535 49344
- X138 0 65535 50886
- X139 0 65535 52428
- X140 0 65535 53970
- X141 0 65535 55512
- X142 0 65535 57054
- X143 0 65535 58596
- X144 0 65535 60138
- X145 0 65535 61680
- X146 0 65535 63222
- X147 0 65535 64764
- X148 0 65535 65535
- X149 0 65535 65535
- X150 0 65535 65535
- X151 0 65535 65535
- X152 0 65535 65535
- X153 0 65535 65535
- X154 0 65535 65535
- X155 0 65535 65535
- X156 0 65535 65535
- X157 0 65535 65535
- X158 0 65535 65535
- X159 0 65535 65535
- X160 0 65535 65535
- X161 0 65535 65535
- X162 0 65535 65535
- X163 0 65535 65535
- X164 0 65535 65535
- X165 0 65535 65535
- X166 0 63993 65535
- X167 0 62451 65535
- X168 0 60909 65535
- X169 0 59367 65535
- X170 0 57825 65535
- X171 0 56283 65535
- X172 0 54741 65535
- X173 0 53199 65535
- X174 0 51657 65535
- X175 0 50115 65535
- X176 0 48573 65535
- X177 0 47031 65535
- X178 0 45489 65535
- X179 0 43947 65535
- X180 0 42405 65535
- X181 0 40863 65535
- X182 0 39321 65535
- X183 0 37779 65535
- X184 0 36237 65535
- X185 0 34695 65535
- X186 0 33153 65535
- X187 0 31611 65535
- X188 0 30069 65535
- X189 0 28527 65535
- X190 0 26985 65535
- X191 0 25443 65535
- X192 0 23901 65535
- X193 0 22359 65535
- X194 0 20817 65535
- X195 0 19275 65535
- X196 0 17733 65535
- X197 0 16191 65535
- X198 0 14649 65535
- X199 0 13107 65535
- X200 0 11565 65535
- X201 0 10023 65535
- X202 0 8481 65535
- X203 0 6939 65535
- X204 0 5397 65535
- X205 0 3855 65535
- X206 0 2313 65535
- X207 0 771 65535
- X208 0 0 65535
- X209 0 0 65535
- X210 0 0 65535
- X211 1542 0 65535
- X212 3084 0 65535
- X213 4626 0 65535
- X214 6168 0 65535
- X215 7710 0 65535
- X216 9252 0 65535
- X217 10794 0 65535
- X218 12336 0 65535
- X219 13878 0 65535
- X220 15420 0 65535
- X221 16962 0 65535
- X222 18504 0 65535
- X223 20046 0 65535
- X224 21588 0 65535
- X225 23130 0 65535
- X226 24672 0 65535
- X227 26214 0 65535
- X228 27756 0 65535
- X229 29298 0 65535
- X230 30840 0 65535
- X231 32382 0 65535
- X232 33924 0 65535
- X233 35466 0 65535
- X234 37008 0 65535
- X235 38550 0 65535
- X236 40092 0 65535
- X237 41634 0 65535
- X238 43176 0 65535
- X239 44718 0 65535
- X240 46260 0 65535
- X241 47802 0 65535
- X242 49344 0 65535
- X243 50886 0 65535
- X244 52428 0 65535
- X245 53970 0 65535
- X246 55512 0 65535
- X247 57054 0 65535
- X248 58596 0 65535
- X249 60138 0 65535
- X250 61680 0 65535
- X251 63222 0 65535
- X252 64764 0 65535
- X253 65535 0 65535
- X254 65535 0 65535
- X255 65535 65535 65535
- END_OF_FILE
- if test 5522 -ne `wc -c <'viewer/color-map'`; then
- echo shar: \"'viewer/color-map'\" unpacked with wrong size!
- fi
- # end of 'viewer/color-map'
- fi
- if test -f 'viewer/curses-map' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'viewer/curses-map'\"
- else
- echo shar: Extracting \"'viewer/curses-map'\" \(1938 characters\)
- sed "s/^X//" >'viewer/curses-map' <<'END_OF_FILE'
- X0 '-'
- X1 '+'
- X2 'o'
- X3 'x'
- X4 '#'
- X5 '*'
- X6 '+'
- X7 'o'
- X8 'x'
- X9 '#'
- X10 '*'
- X11 '+'
- X12 'o'
- X13 'x'
- X14 '#'
- X15 '*'
- X16 '+'
- X17 'o'
- X18 'x'
- X19 '#'
- X20 '*'
- X21 '+'
- X22 'o'
- X23 'x'
- X24 '#'
- X25 '*'
- X26 '+'
- X27 'o'
- X28 'x'
- X29 '#'
- X30 '*'
- X31 '+'
- X32 'o'
- X33 'x'
- X34 '#'
- X35 '*'
- X36 '+'
- X37 'o'
- X38 'x'
- X39 '#'
- X40 '*'
- X41 '+'
- X42 'o'
- X43 'x'
- X44 '#'
- X45 '*'
- X46 '+'
- X47 'o'
- X48 'x'
- X49 '#'
- X50 '*'
- X51 '+'
- X52 'o'
- X53 'x'
- X54 '#'
- X55 '*'
- X56 '+'
- X57 'o'
- X58 'x'
- X59 '#'
- X60 '*'
- X61 '+'
- X62 'o'
- X63 'x'
- X64 '#'
- X65 '*'
- X66 '+'
- X67 'o'
- X68 'x'
- X69 '#'
- X70 '*'
- X71 '+'
- X72 'o'
- X73 'x'
- X74 '#'
- X75 '*'
- X76 '+'
- X77 'o'
- X78 'x'
- X79 '#'
- X80 '*'
- X81 '+'
- X82 'o'
- X83 'x'
- X84 '#'
- X85 '*'
- X86 '+'
- X87 'o'
- X88 'x'
- X89 '#'
- X90 '*'
- X91 '+'
- X92 'o'
- X93 'x'
- X94 '#'
- X95 '*'
- X96 '+'
- X97 'o'
- X98 'x'
- X99 '#'
- X100 '*'
- X101 '+'
- X102 'o'
- X103 'x'
- X104 '#'
- X105 '*'
- X106 '+'
- X107 'o'
- X108 'x'
- X109 '#'
- X110 '*'
- X111 '+'
- X112 'o'
- X113 'x'
- X114 '#'
- X115 '*'
- X116 '+'
- X117 'o'
- X118 'x'
- X119 '#'
- X120 '*'
- X121 '+'
- X122 'o'
- X123 'x'
- X124 '#'
- X125 '*'
- X126 '+'
- X127 'o'
- X128 'x'
- X129 '#'
- X130 '*'
- X131 '+'
- X132 'o'
- X133 'x'
- X134 '#'
- X135 '*'
- X136 '+'
- X137 'o'
- X138 'x'
- X139 '#'
- X140 '*'
- X141 '+'
- X142 'o'
- X143 'x'
- X144 '#'
- X145 '*'
- X146 '+'
- X147 'o'
- X148 'x'
- X149 '#'
- X150 '*'
- X151 '+'
- X152 'o'
- X153 'x'
- X154 '#'
- X155 '*'
- X156 '+'
- X157 'o'
- X158 'x'
- X159 '#'
- X160 '*'
- X161 '+'
- X162 'o'
- X163 'x'
- X164 '#'
- X165 '*'
- X166 '+'
- X167 'o'
- X168 'x'
- X169 '#'
- X170 '*'
- X171 '+'
- X172 'o'
- X173 'x'
- X174 '#'
- X175 '*'
- X176 '+'
- X177 'o'
- X178 'x'
- X179 '#'
- X180 '*'
- X181 '+'
- X182 'o'
- X183 'x'
- X184 '#'
- X185 '*'
- X186 '+'
- X187 'o'
- X188 'x'
- X189 '#'
- X190 '*'
- X191 '+'
- X192 'o'
- X193 'x'
- X194 '#'
- X195 '*'
- X196 '+'
- X197 'o'
- X198 'x'
- X199 '#'
- X200 '*'
- X201 '+'
- X202 'o'
- X203 'x'
- X204 '#'
- X205 '*'
- X206 '+'
- X207 'o'
- X208 'x'
- X209 '#'
- X210 '*'
- X211 '+'
- X212 'o'
- X213 'x'
- X214 '#'
- X215 '*'
- X216 '+'
- X217 'o'
- X218 'x'
- X219 '#'
- X220 '*'
- X221 '+'
- X222 'o'
- X223 'x'
- X224 '#'
- X225 '*'
- X226 '+'
- X227 'o'
- X228 'x'
- X229 '#'
- X230 '*'
- X231 '+'
- X232 'o'
- X233 'x'
- X234 '#'
- X235 '*'
- X236 '+'
- X237 'o'
- X238 'x'
- X239 '#'
- X240 '*'
- X241 '+'
- X242 'o'
- X243 'x'
- X244 '#'
- X245 '*'
- X246 '+'
- X247 'o'
- X248 'x'
- X249 '#'
- X250 '*'
- X251 '+'
- X252 'o'
- X253 'x'
- X254 '#'
- X255 '*'
- END_OF_FILE
- if test 1938 -ne `wc -c <'viewer/curses-map'`; then
- echo shar: \"'viewer/curses-map'\" unpacked with wrong size!
- fi
- # end of 'viewer/curses-map'
- fi
- if test -f 'viewer/curses.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'viewer/curses.c'\"
- else
- echo shar: Extracting \"'viewer/curses.c'\" \(4139 characters\)
- sed "s/^X//" >'viewer/curses.c' <<'END_OF_FILE'
- X/* curses.c
- X Copyright (C) 1992 J Dana Eckart
- X
- X This program is free software; you can redistribute it and/or modify
- X it under the terms of the GNU General Public License as published by
- X the Free Software Foundation; either version 1, or (at your option)
- X any later version.
- X
- X This program is distributed in the hope that it will be useful,
- X but WITHOUT ANY WARRANTY; without even the implied warranty of
- X MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- X GNU General Public License for more details.
- X
- X You should have received a copy of the GNU General Public License
- X along with CELLULAR-2.0; see the file COPYING. If not, write to the
- X Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- X*/
- X
- X#include <stdio.h>
- X#include <stdlib.h>
- X#include <malloc.h>
- X#include <string.h>
- X#include <curses.h>
- X#include "view.h"
- X#include "boolean.h"
- X
- X/* The ratio of the number of columns/lines to be used to make a reasonablly
- X nice (squarish) display.
- X*/
- X#define aspect_ratio 2
- X
- X/* When exiting curses, move the cursor to the bottom of the screen,
- X refresh the screen and exit.
- X*/
- void finish_curses() {
- X erase();
- X refresh();
- X echo();
- X nl();
- X move(0, 0);
- X refresh();
- X endwin();
- X}
- X
- X/* Updates a single cell in the display, but no refresh is done. Use
- X the lower left hand corner of the screen as the origin.
- X*/
- void update_curses(x, y, c) long int x, y; char c; {
- X int i = x - lower[range_dim_1_index];
- X int j = y - lower[range_dim_2_index];
- X
- X /* Ignore moves off of the screen area and remember to save
- X the extra line for printing the time step value.
- X */
- X if (ERR != move(LINES-j-2, i*aspect_ratio))
- X addch(c);
- X}
- X
- X/* Display all the cell_vals in the universe. */
- void display_curses_cells() {
- X refresh();
- X}
- X
- X/* Does the necessary setup so that everything works correctly. */
- void setup_curses(map_name) char *map_name; {
- X /* The "real" curses setup. */
- X initscr();
- X noecho();
- X
- X /* Make sure the desired cell_vals will fit in a curses view of
- X the world. Unfortunately, this view is limited because
- X stdin is already being used to get the cell values from,
- X and thus cannot be used to get commands for moving the
- X window into the cellular universe around. Remember to
- X save an extra line for displaying the time step.
- X */
- X if (range[range_dim_1_index]*aspect_ratio-1 > COLS) {
- X fprintf(stderr,
- X "First dimension is limited to %d indices.\n",
- X COLS/aspect_ratio);
- X finish_curses();
- X exit(1);
- X }
- X if (range_dim_given == 2 && range[range_dim_2_index] > LINES-1) {
- X fprintf(stderr,
- X "Second dimension is limited to %d indices.\n",
- X LINES-1);
- X finish_curses();
- X exit(1);
- X }
- X
- X /* If a map file was given, read it; otherwise use the default. */
- X if (NULL == map_name) {
- X char *default_file = "curses-map";
- X map_name = (char*) malloc((unsigned int) (strlen(LIB_DIR) +
- X strlen(default_file) + 2));
- X if (NULL == map_name)
- X error("Out of memory", (char*) NULL);
- X sprintf(map_name, "%s/%s", LIB_DIR, default_file);
- X }
- X read_map(map_name, MAX_MAP_SIZE);
- X}
- X
- X/* Display the cell_vals visible within the curses window. */
- void display_curses (field) int field; {
- X long int i, j;
- X
- X /* Initialize the curses positions to the character values. */
- X for (i = lower[range_dim_1_index]; i <= upper[range_dim_1_index]; i++)
- X for (j = lower[range_dim_2_index]; j <= upper[range_dim_2_index]; j++)
- X update_curses(i, j, (char)
- X map_value(cell_vals[(i -
- X lower[range_dim_1_index]) *
- X range[range_dim_2_index] +
- X j - lower[range_dim_2_index]]));
- X display_curses_cells();
- X
- X while (1) {
- X#if !COMBINED
- X if (next_time >= 0)
- X#endif
- X {
- X char string[MAX_STRING_SIZE];
- X
- X /* Write out the current time step. */
- X sprintf(string, "time = %d", _time);
- X move(LINES-1, 0);
- X addstr(string);
- X
- X /* Read and display the cell_vals. */
- X#if COMBINED
- X cellang_main(false, field);
- X#else
- X read_cell_block();
- X#endif
- X display_curses_cells();
- X
- X#if !COMBINED
- X if (next_time >= 0) _time++;
- X#endif
- X
- X /* Pause times of 0 or less are ignored. */
- X if (pause_time > 0) sleep((unsigned int) pause_time);
- X }
- X }
- X}
- END_OF_FILE
- if test 4139 -ne `wc -c <'viewer/curses.c'`; then
- echo shar: \"'viewer/curses.c'\" unpacked with wrong size!
- fi
- # end of 'viewer/curses.c'
- fi
- if test -f 'viewer/curses.h' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'viewer/curses.h'\"
- else
- echo shar: Extracting \"'viewer/curses.h'\" \(878 characters\)
- sed "s/^X//" >'viewer/curses.h' <<'END_OF_FILE'
- X/* curses.h
- X Copyright (C) 1992 J Dana Eckart
- X
- X This program is free software; you can redistribute it and/or modify
- X it under the terms of the GNU General Public License as published by
- X the Free Software Foundation; either version 1, or (at your option)
- X any later version.
- X
- X This program is distributed in the hope that it will be useful,
- X but WITHOUT ANY WARRANTY; without even the implied warranty of
- X MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- X GNU General Public License for more details.
- X
- X You should have received a copy of the GNU General Public License
- X along with CELLULAR-2.0; see the file COPYING. If not, write to the
- X Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- X*/
- X
- extern void finsih_curses();
- extern void setup_curses();
- extern void display_curses();
- extern void update_curses();
- END_OF_FILE
- if test 878 -ne `wc -c <'viewer/curses.h'`; then
- echo shar: \"'viewer/curses.h'\" unpacked with wrong size!
- fi
- # end of 'viewer/curses.h'
- fi
- if test -f 'viewer/view.h' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'viewer/view.h'\"
- else
- echo shar: Extracting \"'viewer/view.h'\" \(1823 characters\)
- sed "s/^X//" >'viewer/view.h' <<'END_OF_FILE'
- X/* view.h
- X Copyright (C) 1992 J Dana Eckart
- X
- X This program is free software; you can redistribute it and/or modify
- X it under the terms of the GNU General Public License as published by
- X the Free Software Foundation; either version 1, or (at your option)
- X any later version.
- X
- X This program is distributed in the hope that it will be useful,
- X but WITHOUT ANY WARRANTY; without even the implied warranty of
- X MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- X GNU General Public License for more details.
- X
- X You should have received a copy of the GNU General Public License
- X along with CELLULAR-2.0; see the file COPYING. If not, write to the
- X Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- X*/
- X
- X#include <stdio.h>
- X#include <strings.h>
- X#include "boolean.h"
- X
- X#define MAX_STRING_SIZE 256
- X#define MAX_MAP_SIZE 256
- X
- X/* Contains the current time. */
- extern unsigned long int _time;
- X
- X#if !COMBINED
- X/* Contains the next time at which to read data. */
- extern long int next_time;
- X#endif
- X
- X/* Time to pause between time steps, in order to slow things down. */
- extern long int pause_time;
- X
- X/* The cellular universe which contains the colors/characters that
- X correspond to the cell values which are read.
- X*/
- typedef long int celltype;
- extern celltype *cell_vals;
- X
- X/* The following variables are the lower and upper bounds of the
- X dimensions to display.
- X*/
- X#define MAX_DIMS 256
- extern int dim_given, range_dim_given, range_dim_1_index, range_dim_2_index;
- extern long int lower[], upper[], range[];
- X
- X/* Holds the number of character/color map entries given. */
- extern int max_map_entry;
- X
- extern void read_cell_block();
- extern void read_map();
- extern void error();
- extern celltype map_value();
- X
- X#if COMBINED
- X extern void cellang_main();
- X extern void init_cells();
- X#endif
- END_OF_FILE
- if test 1823 -ne `wc -c <'viewer/view.h'`; then
- echo shar: \"'viewer/view.h'\" unpacked with wrong size!
- fi
- # end of 'viewer/view.h'
- fi
- if test -f 'viewer/x11.h' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'viewer/x11.h'\"
- else
- echo shar: Extracting \"'viewer/x11.h'\" \(891 characters\)
- sed "s/^X//" >'viewer/x11.h' <<'END_OF_FILE'
- X/* x11.h
- X Copyright (C) 1992 J Dana Eckart
- X
- X This program is free software; you can redistribute it and/or modify
- X it under the terms of the GNU General Public License as published by
- X the Free Software Foundation; either version 1, or (at your option)
- X any later version.
- X
- X This program is distributed in the hope that it will be useful,
- X but WITHOUT ANY WARRANTY; without even the implied warranty of
- X MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- X GNU General Public License for more details.
- X
- X You should have received a copy of the GNU General Public License
- X along with CELLULAR-2.0; see the file COPYING. If not, write to the
- X Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- X*/
- X
- extern celltype setcolor();
- extern void finish_x11();
- extern void setup_x11();
- extern void display_x11();
- extern void update_x11();
- END_OF_FILE
- if test 891 -ne `wc -c <'viewer/x11.h'`; then
- echo shar: \"'viewer/x11.h'\" unpacked with wrong size!
- fi
- # end of 'viewer/x11.h'
- fi
- echo shar: End of archive 1 \(of 3\).
- cp /dev/null ark1isdone
- MISSING=""
- for I in 1 2 3 ; do
- if test ! -f ark${I}isdone ; then
- MISSING="${MISSING} ${I}"
- fi
- done
- if test "${MISSING}" = "" ; then
- echo You have unpacked all 3 archives.
- rm -f ark[1-9]isdone
- else
- echo You still need to unpack the following archives:
- echo " " ${MISSING}
- fi
- ## End of shell archive.
- exit 0
-