home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume26 / cellular-2.0 / part01 (.txt) next >
LaTeX Document  |  1993-04-02  |  111KB  |  2,969 lines

  1. Newsgroups: comp.sources.unix
  2. From: dana@rucs.faculty.cs.runet.edu (J Dana Eckart)
  3. Subject: v26i088: cellular-2.0 - a cellular automata language, Part01/03
  4. Sender: unix-sources-moderator@vix.com
  5. Approved: paul@vix.com
  6. Submitted-By: dana@rucs.faculty.cs.runet.edu (J Dana Eckart)
  7. Posting-Number: Volume 26, Issue 88
  8. Archive-Name: cellular-2.0/part01
  9. [ my apologies for the TeX here, but the author of this package did not say
  10.   in her cover letter or README file what this is or what it does, and i do
  11.   not have a TeX interpreter so i can't make this prettier other than with a
  12.   lot of hand-editing.  it's from the "tutorial.tex" file.        --vix ]
  13. \section{Introduction}
  14. With the growing popularity of cellular automata in both recreation
  15. \cite{life}\cite{wireworld}\cite{fluids}\cite{crystals} 
  16. and the modeling of physical 
  17. systems\cite{toffoli}\cite{Wolf-Gladrow}\cite{Chen}\cite{Lavallee}\cite{Lim},
  18. the need for an easy--to--use system for cellular automata programming
  19. is greater than ever.  {\em Cellular} is a system designed and implemented
  20. by the author to meet these needs.  The system consists of: a programming
  21. language, {\em Cellang 2.0}\footnote{
  22.             Pronounced cell ' ang.
  23.         },
  24. and associated compiler, {\tt cellc};
  25. an ``abstract'' virtual machine\footnote{
  26.         The construction of an actual machine embodying the
  27.         pe--scam architecture is under development.\cite{pe-scam}
  28. for execution, {\tt pe-scam}; and a viewer, {\tt cellview}.
  29. Compiled {\em Cellang 2.0} programs can be run
  30. with input provided at any specified time during the execution.  The
  31. results of an execution can either be viewed directly or output as
  32. a stream of cell locations and values.  This stream of output
  33. data can then be fed into {\tt cellview} for viewing, or it may
  34. be passed through a filter that compiles statistics, massages the
  35. data, or merely acts as a valve to control the flow of data from the
  36. cellular automaton program to the viewer.  This simple UNIX\footnote{
  37.                 UNIX is a registered trademark of AT\&T.
  38.         }
  39. toolkit view of the simulation process provides greater control
  40. than systems which combine the language and viewer (i.e.
  41. cellsim\cite{cellsim} and CAM--6\cite{toffoli}).  {\em Cellang 2.0}
  42. provides greater flexibility, particularly in the formation of
  43. neighborhoods, than does {\em Cal} (part of the {\em Scamper} 
  44. system)\cite{Scamper}.  And although the {\em SLANG}\cite{SLANG} system
  45. supports probablistic possibilities, {\em Cellang 2.0} is a far
  46. simpler language for constructing deterministic cellular automata.
  47. #! /bin/sh
  48. # This is a shell archive.  Remove anything before this line, then unpack
  49. # it by saving it into a file and typing "sh file".  To overwrite existing
  50. # files, type "sh file -c".  You can also feed this as standard input via
  51. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  52. # will see the following message at the end:
  53. #        "End of archive 1 (of 3)."
  54. # Contents:  MANIFEST Makefile README Version compiler
  55. #   compiler/Makefile compiler/README compiler/attribute.h
  56. #   compiler/boolean.h compiler/cellc.man compiler/cellc.sh
  57. #   compiler/error.c compiler/error.h compiler/io.h compiler/parse
  58. #   compiler/scanner.h compiler/semantic.h compiler/stack.h
  59. #   compiler/symtable.c compiler/symtable.h driver driver/Makefile
  60. #   driver/pe-scam.sh examples examples/Makefile examples/README
  61. #   examples/bin examples/data examples/data/cparity
  62. #   examples/data/life examples/data/parity examples/dist_data_gen.c
  63. #   examples/gas_data_gen.c examples/map examples/map/srdp
  64. #   examples/show.sh examples/src examples/src/cparity
  65. #   examples/src/dist examples/src/gas examples/src/life
  66. #   examples/src/parity examples/src/srdp examples/srdp_data_gen.c
  67. #   viewer viewer/Makefile viewer/README viewer/boolean.h
  68. #   viewer/bw-map viewer/color-map viewer/curses-map viewer/curses.c
  69. #   viewer/curses.h viewer/view.h viewer/x11.h
  70. # Wrapped by vixie@gw.home.vix.com on Sat Apr  3 01:27:38 1993
  71. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  72. if test -f 'MANIFEST' -a "${1}" != "-c" ; then 
  73.   echo shar: Will not clobber existing file \"'MANIFEST'\"
  74. echo shar: Extracting \"'MANIFEST'\" \(2098 characters\)
  75. sed "s/^X//" >'MANIFEST' <<'END_OF_FILE'
  76. X   File Name        Archive #    Description
  77. X-----------------------------------------------------------
  78. X COPYING                    2    
  79. X MANIFEST                   1    This shipping list
  80. X Makefile                   1    
  81. X README                     1    
  82. X Version                    1    
  83. X compiler                   1    
  84. X compiler/Cellang.tex       2    
  85. X compiler/Makefile          1    
  86. X compiler/README            1    
  87. X compiler/attribute.h       1    
  88. X compiler/boolean.h         1    
  89. X compiler/cellc.man         1    
  90. X compiler/cellc.sh          1    
  91. X compiler/error.c           1    
  92. X compiler/error.h           1    
  93. X compiler/io.h              1    
  94. X compiler/parse             1    
  95. X compiler/scanner.c         2    
  96. X compiler/scanner.h         1    
  97. X compiler/semantic.c        3    
  98. X compiler/semantic.h        1    
  99. X compiler/stack.h           1    
  100. X compiler/symtable.c        1    
  101. X compiler/symtable.h        1    
  102. X driver                     1    
  103. X driver/Makefile            1    
  104. X driver/pe-scam.man         2    
  105. X driver/pe-scam.sh          1    
  106. X examples                   1    
  107. X examples/Makefile          1    
  108. X examples/README            1    
  109. X examples/bin               1    
  110. X examples/data              1    
  111. X examples/data/cparity      1    
  112. X examples/data/life         1    
  113. X examples/data/parity       1    
  114. X examples/dist_data_gen.c   1    
  115. X examples/gas_data_gen.c    1    
  116. X examples/map               1    
  117. X examples/map/srdp          1    
  118. X examples/show.sh           1    
  119. X examples/src               1    
  120. X examples/src/cparity       1    
  121. X examples/src/dist          1    
  122. X examples/src/gas           1    
  123. X examples/src/life          1    
  124. X examples/src/parity        1    
  125. X examples/src/srdp          1    
  126. X examples/srdp_data_gen.c   1    
  127. X tutorial.tex               3    
  128. X viewer                     1    
  129. X viewer/Makefile            1    
  130. X viewer/README              1    
  131. X viewer/boolean.h           1    
  132. X viewer/bw-map              1    
  133. X viewer/cellview.man        2    
  134. X viewer/color-map           1    
  135. X viewer/curses-map          1    
  136. X viewer/curses.c            1    
  137. X viewer/curses.h            1    
  138. X viewer/view.c              2    
  139. X viewer/view.h              1    
  140. X viewer/x11.c               2    
  141. X viewer/x11.h               1    
  142. END_OF_FILE
  143. if test 2098 -ne `wc -c <'MANIFEST'`; then
  144.     echo shar: \"'MANIFEST'\" unpacked with wrong size!
  145. # end of 'MANIFEST'
  146. if test -f 'Makefile' -a "${1}" != "-c" ; then 
  147.   echo shar: Will not clobber existing file \"'Makefile'\"
  148. echo shar: Extracting \"'Makefile'\" \(4029 characters\)
  149. sed "s/^X//" >'Makefile' <<'END_OF_FILE'
  150. X#  Makefile
  151. X#  Copyright (C) 1992  J Dana Eckart
  152. X#  This program is free software; you can redistribute it and/or modify
  153. X#  it under the terms of the GNU General Public License as published by
  154. X#  the Free Software Foundation; either version 1, or (at your option)
  155. X#  any later version.
  156. X#  This program is distributed in the hope that it will be useful,
  157. X#  but WITHOUT ANY WARRANTY; without even the implied warranty of
  158. X#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  159. X#  GNU General Public License for more details.
  160. X#  You should have received a copy of the GNU General Public License
  161. X#  along with CELLULAR-2.0; see the file COPYING.  If not, write to the 
  162. X#  Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  163. X# Installation directories.
  164. BIN=/usr/local/bin
  165. LIB=/usr/local/lib/cellular
  166. MAN=/usr/man/manl
  167. MAN_EXT=l
  168. X# The default (maximum) size of each dimension associated with Cellang programs.
  169. MAX_DIM_SIZE=64
  170. X# If you want to have the Cellang compiler configured to compile the viewer 
  171. X# into the executables then assign COMBINED the value "1", otherwise assign 
  172. X# a "0".  This makes for faster display of many automata, though it does need
  173. X# X11 to run them.
  174. COMBINED=1    # 0 or 1
  175. X# Choose a C compiler and options.
  176. CC = gcc
  177. CFLAGS = -O
  178. X# Rules (default.mk on SunOS uses a -target option not supported by GNU C)
  179. COMPILE.c=$(CC) $(CFLAGS) $(CPPFLAGS) -c
  180. X# Dependencies
  181. all: tutorial.PS
  182. X    (cd compiler; \
  183. X        make BIN='${BIN}' LIB='${LIB}' \
  184. X             MAN='${MAN}' MAN_EXT='${MAN_EXT}' \
  185. X             CC='${CC}' CFLAGS='${CFLAGS}' \
  186. X             CDEFINES='-DCOMBINED=${COMBINED}' \
  187. X             MAX_DIM_SIZE='${MAX_DIM_SIZE}' \
  188. X             COMBINED='${COMBINED}' \
  189. X             all)
  190. X    (cd viewer; \
  191. X        make BIN='${BIN}' LIB='${LIB}' \
  192. X             MAN='${MAN}' MAN_EXT='${MAN_EXT}' \
  193. X             CC='${CC}' CFLAGS='${CFLAGS}' \
  194. X             CDEFINES='-DLIB_DIR=\"${LIB}\"' \
  195. X             COMBINED='${COMBINED}' \
  196. X             all)
  197. X    (cd driver; \
  198. X        make BIN='${BIN}' LIB='${LIB}' \
  199. X             MAN='${MAN}' MAN_EXT='${MAN_EXT}' \
  200. X             MAX_DIM_SIZE='${MAX_DIM_SIZE}' \
  201. X             COMBINED='${COMBINED}' \
  202. X             all)
  203. X    (cd examples; \
  204. X        make BIN='${BIN}' LIB='${LIB}' \
  205. X             MAN='${MAN}' MAN_EXT='${MAN_EXT}' \
  206. X             CC='${CC}' CFLAGS='${CFLAGS}' \
  207. X             MAX_DIM_SIZE='${MAX_DIM_SIZE}' \
  208. X             all)
  209. install: tutorial.PS
  210. X    (cd compiler; \
  211. X        make BIN='${BIN}' LIB='${LIB}' \
  212. X             MAN='${MAN}' MAN_EXT='${MAN_EXT}' \
  213. X             CC='${CC}' CFLAGS='${CFLAGS}' \
  214. X             CDEFINES='-DCOMBINED=${COMBINED}' \
  215. X             MAX_DIM_SIZE='${MAX_DIM_SIZE}' \
  216. X             COMBINED='${COMBINED}' \
  217. X             install)
  218. X    (cd viewer; \
  219. X        make BIN='${BIN}' LIB='${LIB}' \
  220. X             MAN='${MAN}' MAN_EXT='${MAN_EXT}' \
  221. X             CC='${CC}' CFLAGS='${CFLAGS}' \
  222. X             CDEFINES='-DLIB_DIR=\"${LIB}\"' \
  223. X             COMBINED='${COMBINED}' \
  224. X             install)
  225. X    (cd driver; \
  226. X        make BIN='${BIN}' LIB='${LIB}' \
  227. X             MAN='${MAN}' MAN_EXT='${MAN_EXT}' \
  228. X             MAX_DIM_SIZE='${MAX_DIM_SIZE}' \
  229. X             COMBINED='${COMBINED}' \
  230. X             install)
  231. X    (cd examples; \
  232. X        make BIN='${BIN}' LIB='${LIB}' \
  233. X             MAN='${MAN}' MAN_EXT='${MAN_EXT}' \
  234. X             CC='${CC}' CFLAGS='${CFLAGS}' \
  235. X             MAX_DIM_SIZE='${MAX_DIM_SIZE}' \
  236. X             install)
  237. deinstall:
  238. X    (cd compiler; \
  239. X        make BIN='${BIN}' LIB='${LIB}' \
  240. X             MAN='${MAN}' MAN_EXT='${MAN_EXT}' \
  241. X             deinstall)
  242. X    (cd viewer; \
  243. X        make BIN='${BIN}' LIB='${LIB}' \
  244. X             MAN='${MAN}' MAN_EXT='${MAN_EXT}' \
  245. X             deinstall)
  246. X    (cd driver; \
  247. X        make BIN='${BIN}' MAN='${MAN}' MAN_EXT='${MAN_EXT}' \
  248. X             deinstall)
  249. X    (cd examples; \
  250. X        make LIB='${LIB}' deinstall)
  251. clean:
  252. X    /bin/rm -f *.aux *.dvi *.log *.toc core
  253. X    (cd compiler; make MAN_EXT='${MAN_EXT}' clean)
  254. X    (cd viewer; make MAN_EXT='${MAN_EXT}' clean)
  255. X    (cd driver; make MAN_EXT='${MAN_EXT}' clean)
  256. X    (cd examples; make clean)
  257. realclean: clean
  258. X    /bin/rm -f tutorial.PS
  259. X    (cd compiler; make realclean)
  260. X    (cd viewer; make realclean)
  261. X    (cd driver; make realclean)
  262. X    (cd examples; make realclean)
  263. tutorial.PS: tutorial.tex
  264. X    - latex tutorial.tex
  265. X    - latex tutorial.tex
  266. X    - dvi2ps -r tutorial.dvi > tutorial.PS
  267. END_OF_FILE
  268. if test 4029 -ne `wc -c <'Makefile'`; then
  269.     echo shar: \"'Makefile'\" unpacked with wrong size!
  270. # end of 'Makefile'
  271. if test -f 'README' -a "${1}" != "-c" ; then 
  272.   echo shar: Will not clobber existing file \"'README'\"
  273. echo shar: Extracting \"'README'\" \(2358 characters\)
  274. sed "s/^X//" >'README' <<'END_OF_FILE'
  275. X#  README
  276. X#  Copyright (C) 1992  J Dana Eckart
  277. X#  This program is free software; you can redistribute it and/or modify
  278. X#  it under the terms of the GNU General Public License as published by
  279. X#  the Free Software Foundation; either version 1, or (at your option)
  280. X#  any later version.
  281. X#  This program is distributed in the hope that it will be useful,
  282. X#  but WITHOUT ANY WARRANTY; without even the implied warranty of
  283. X#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  284. X#  GNU General Public License for more details.
  285. X#  You should have received a copy of the GNU General Public License
  286. X#  along with CELLULAR-2.0; see the file COPYING.  If not, write to the 
  287. X#  Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  288. To install the Cellular system, edit the Makefile to reflect the proper 
  289. values of:
  290. X     BIN      - installation directory for executables
  291. X     LIB      - installation directory for supporting software
  292. X     MAN      - installation directory for manual pages
  293. X     MAX_EXT  - manual page extension to use for installation
  294. X     MAX_DIM_SIZE - size of each dimension in Cellang 2.0 programs 
  295. X     COMBINED - whether or not to compile the viewer into Cellang 2.0 programs
  296. Do "make install" to build and install everything.  In addition, the 
  297. Makefile also supports the targets:
  298. X    all: compile, but not install, the software
  299. X  deinstall: remove an installation
  300. X      clean: remove all but the distributed files (and postscript versions of
  301. X        LaTeX documents)
  302. X  realclean: remove all but the distributed files
  303. A tutorial is written in LaTeX and appears in ./tutorial.tex, while the
  304. Cellang 2.0 Language Reference Manual appears in compiler/Cellang.tex (and
  305. is also written in LaTeX).
  306. The "examples" directory (found in the LIB directory specified in the Makefile)
  307. contains some sample Cellang programs with data.  It is a good place to start 
  308. for becoming familiar with the system.
  309. NOTE: When compiled with COMBINED turned on, only the first two dimensions 
  310. X      (when present) are displayed if the output option is not chosen when 
  311. X      the automata is executed.
  312. X            QUESTIONS, COMMENTS, BUG REPORTS and SUGGESTED PATCHES
  313. can be sent to me at either:
  314. X        J Dana Eckart
  315. X        Box 6933
  316. X        Computer Science Department
  317. X        Radford University
  318. X        Radford, VA  24142
  319. X        dana@rucs.faculty.cs.runet.edu
  320. END_OF_FILE
  321. if test 2358 -ne `wc -c <'README'`; then
  322.     echo shar: \"'README'\" unpacked with wrong size!
  323. # end of 'README'
  324. if test -f 'Version' -a "${1}" != "-c" ; then 
  325.   echo shar: Will not clobber existing file \"'Version'\"
  326. echo shar: Extracting \"'Version'\" \(802 characters\)
  327. sed "s/^X//" >'Version' <<'END_OF_FILE'
  328. X#  Version
  329. X#  Copyright (C) 1992  J Dana Eckart
  330. X#  This program is free software; you can redistribute it and/or modify
  331. X#  it under the terms of the GNU General Public License as published by
  332. X#  the Free Software Foundation; either version 1, or (at your option)
  333. X#  any later version.
  334. X#  This program is distributed in the hope that it will be useful,
  335. X#  but WITHOUT ANY WARRANTY; without even the implied warranty of
  336. X#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  337. X#  GNU General Public License for more details.
  338. X#  You should have received a copy of the GNU General Public License
  339. X#  along with CELLULAR-2.0; see the file COPYING.  If not, write to the 
  340. X#  Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  341. X13 Apr 1992 : initial release by J Dana Eckart
  342. END_OF_FILE
  343. if test 802 -ne `wc -c <'Version'`; then
  344.     echo shar: \"'Version'\" unpacked with wrong size!
  345. # end of 'Version'
  346. if test ! -d 'compiler' ; then
  347.     echo shar: Creating directory \"'compiler'\"
  348.     mkdir 'compiler'
  349. if test -f 'compiler/Makefile' -a "${1}" != "-c" ; then 
  350.   echo shar: Will not clobber existing file \"'compiler/Makefile'\"
  351. echo shar: Extracting \"'compiler/Makefile'\" \(3502 characters\)
  352. sed "s/^X//" >'compiler/Makefile' <<'END_OF_FILE'
  353. X#  Makefile
  354. X#  Copyright (C) 1992  J Dana Eckart
  355. X#  This program is free software; you can redistribute it and/or modify
  356. X#  it under the terms of the GNU General Public License as published by
  357. X#  the Free Software Foundation; either version 1, or (at your option)
  358. X#  any later version.
  359. X#  This program is distributed in the hope that it will be useful,
  360. X#  but WITHOUT ANY WARRANTY; without even the implied warranty of
  361. X#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  362. X#  GNU General Public License for more details.
  363. X#  You should have received a copy of the GNU General Public License
  364. X#  along with CELLULAR-2.0; see the file COPYING.  If not, write to the 
  365. X#  Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  366. X# Installation directories.
  367. BIN=/usr/local/bin
  368. LIB=/usr/local/lib/cellular
  369. MAN=/usr/man/manl
  370. MAN_EXT=l
  371. X# The default (maximum) sizes associated with Cellang programs.
  372. MAX_DIM_SIZE=64
  373. MAX_SUPPORTED_DIMENSIONS=16
  374. MAX_SUPPORTED_FIELDS=32
  375. X# If you want to have the Cellang compiler configured to compile the viewer 
  376. X# into the executables then assign COMBINED the value "1", otherwise assign 
  377. X# a "0".  This makes for faster display of many automata, though it does need
  378. X# X11 to run them.
  379. COMBINED=0    # 0 or 1
  380. X# The C type declaration to use for cell field declarations and the upper
  381. X# and lower bounds on the range of values supported by that data type.
  382. X# The range of values should be taken from the limits.h file used by your
  383. X# C compiler.
  384. XFIELD_TYPE = "unsigned char"
  385. MAX_RANGE_LB = 0
  386. MAX_RANGE_UB = 255
  387. X# Choose a C compiler and options.
  388. CC= gcc
  389. CFLAGS= -O -ansi -pedantic 
  390. CDEFINES= -DCOMBINED=$(COMBINED)
  391. X# Rules (default.mk on SunOS uses a -target option not supported by GNU C)
  392. COMPILE.c=$(CC) $(CFLAGS) $(CDEFINES) -DFIELD_TYPE=\"$(FIELD_TYPE)\" \
  393. X        -DMAX_RANGE_LB=$(MAX_RANGE_LB) -DMAX_RANGE_UB=$(MAX_RANGE_UB) \
  394. X        $(CPPFLAGS) -c
  395. X# Dependencies
  396. all: cellfront cellc Cellang.PS cellc.${MAN_EXT}
  397. install: all
  398. X    - mkdir -p ${BIN}
  399. X    - mkdir -p ${LIB}
  400. X    - mkdir -p ${MAN}
  401. X    install cellfront ${LIB}/cellfront
  402. X    install cellc ${BIN}/cellc
  403. X    install -m 644 cellc.${MAN_EXT} ${MAN}/cellc.${MAN_EXT}
  404. deinstall:
  405. X    /bin/rm -f ${LIB}/cellfront
  406. X    /bin/rm -f ${BIN}/cellc
  407. X    /bin/rm -f ${MAN}/cellc.${MAN_EXT}
  408. clean:
  409. X    /bin/rm -f *.o *.tab.h *.tab.c *.aux *.dvi *.log *.toc \
  410. X        cellc cellfront core cellc.${MAN_EXT} size.h
  411. realclean: clean
  412. X    /bin/rm -f *.PS
  413. cellfront: scanner.o semantic.o symtable.o y.tab.o error.o
  414. X    ${CC} ${CFLAGS} -o cellfront *.o
  415. cellc.${MAN_EXT}: cellc.man
  416. X    sed -e 's?LIB_DIR?$(LIB)?' \
  417. X        -e 's?MAN_EXT?$(MAN_EXT)?g' cellc.man > cellc.${MAN_EXT}
  418. size.h: ../Makefile
  419. X    echo "#define MAX_DIM_SIZE             ${MAX_DIM_SIZE}" > size.h
  420. X    echo "#define MAX_SUPPORTED_DIMENSIONS ${MAX_SUPPORTED_DIMENSIONS}" >> size.h
  421. X    echo "#define MAX_SUPPORTED_FIELDS     ${MAX_SUPPORTED_FIELDS}" >> size.h
  422. semantic.o: semantic.c semantic.h symtable.h stack.h size.h\
  423. X        attribute.h boolean.h error.h
  424. symtable.o: symtable.c symtable.h attribute.h boolean.h
  425. scanner.o: scanner.c scanner.h y.tab.h error.h
  426. error.o: error.c error.h
  427. y.tab.h y.tab.c: parse error.h
  428. X    yacc -d parse
  429. y.tab.o: parse attribute.h semantic.h symtable.h boolean.h error.h
  430. cellc: cellc.sh
  431. X    sed -e 's?YOUR_LIB?$(LIB)?' \
  432. X        -e 's?YOUR_CC?$(CC)?' \
  433. X        -e 's?YOUR_CFLAGS?$(CFLAGS)?' \
  434. X        -e 's?YOUR_COMBINED?$(COMBINED)?' \
  435. X    cellc.sh > cellc
  436. X    chmod u+rx cellc
  437. Cellang.PS: Cellang.tex
  438. X    - latex Cellang.tex
  439. X    - latex Cellang.tex
  440. X    - dvi2ps -r Cellang.dvi > Cellang.PS
  441. END_OF_FILE
  442. if test 3502 -ne `wc -c <'compiler/Makefile'`; then
  443.     echo shar: \"'compiler/Makefile'\" unpacked with wrong size!
  444. # end of 'compiler/Makefile'
  445. if test -f 'compiler/README' -a "${1}" != "-c" ; then 
  446.   echo shar: Will not clobber existing file \"'compiler/README'\"
  447. echo shar: Extracting \"'compiler/README'\" \(1930 characters\)
  448. sed "s/^X//" >'compiler/README' <<'END_OF_FILE'
  449. X#  README
  450. X#  Copyright (C) 1992  J Dana Eckart
  451. X#  This program is free software; you can redistribute it and/or modify
  452. X#  it under the terms of the GNU General Public License as published by
  453. X#  the Free Software Foundation; either version 1, or (at your option)
  454. X#  any later version.
  455. X#  This program is distributed in the hope that it will be useful,
  456. X#  but WITHOUT ANY WARRANTY; without even the implied warranty of
  457. X#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  458. X#  GNU General Public License for more details.
  459. X#  You should have received a copy of the GNU General Public License
  460. X#  along with CELLULAR-2.0; see the file COPYING.  If not, write to the 
  461. X#  Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  462. To install the Cellang compiler, edit the Makefile to reflect the proper 
  463. values of:
  464. X     BIN     - installation directory for executables
  465. X     LIB     - installation directory for supporting software
  466. X     MAN     - installation directory for manual pages
  467. X     MAX_EXT - manual page extension to use for installation
  468. X     MAX_DIM_SIZE           - size of each dimension in Cellang 2.0 programs 
  469. X     MAX_SUPPORTED_DIMENSIONS - maximum allowed dimensions in programs
  470. X     MAX_SUPPORTED_FIELDS     - maximum allowed fields per cell in programs
  471. X     FIELD_TYPE   - C data type to use for cell fields
  472. X     MAX_RANGE_LB - smallest value of FIELD_TYPE
  473. X     MAX_RANGE_UB - largest value of FIELD_TYPE
  474. Do "make install" to build and install the compiler.  In addition, the 
  475. Makefile also supports the targets:
  476. X    all: compile, but not install, the software
  477. X  deinstall: remove an installation
  478. X      clean: remove all but the distributed files (and postscript version of
  479. X        the language reference manual) within this directory
  480. X  realclean: remove all but the distributed files within this directory
  481. The Cellang language reference manual is written in LaTeX and appears in
  482. Cellang.tex.
  483. END_OF_FILE
  484. if test 1930 -ne `wc -c <'compiler/README'`; then
  485.     echo shar: \"'compiler/README'\" unpacked with wrong size!
  486. # end of 'compiler/README'
  487. if test -f 'compiler/attribute.h' -a "${1}" != "-c" ; then 
  488.   echo shar: Will not clobber existing file \"'compiler/attribute.h'\"
  489. echo shar: Extracting \"'compiler/attribute.h'\" \(1069 characters\)
  490. sed "s/^X//" >'compiler/attribute.h' <<'END_OF_FILE'
  491. X/* attribute.h
  492. X   Copyright (C) 1992  J Dana Eckart
  493. X   This program is free software; you can redistribute it and/or modify
  494. X   it under the terms of the GNU General Public License as published by
  495. X   the Free Software Foundation; either version 1, or (at your option)
  496. X   any later version.
  497. X   This program is distributed in the hope that it will be useful,
  498. X   but WITHOUT ANY WARRANTY; without even the implied warranty of
  499. X   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  500. X   GNU General Public License for more details.
  501. X   You should have received a copy of the GNU General Public License
  502. X   along with CELLULAR-2.0; see the file COPYING.  If not, write to the 
  503. X   Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  504. X#include "boolean.h"
  505. X/* The exported declarations for attributes appearing in the symbol table. */
  506. typedef struct {
  507. X    boolean assignable;     /* True iff assignable. */
  508. X    boolean field_name;    /* True iff the symbol is a cell field. */
  509. X    boolean structured;    /* True iff the value is structured. */
  510. X} attr_rec;
  511. END_OF_FILE
  512. if test 1069 -ne `wc -c <'compiler/attribute.h'`; then
  513.     echo shar: \"'compiler/attribute.h'\" unpacked with wrong size!
  514. # end of 'compiler/attribute.h'
  515. if test -f 'compiler/boolean.h' -a "${1}" != "-c" ; then 
  516.   echo shar: Will not clobber existing file \"'compiler/boolean.h'\"
  517. echo shar: Extracting \"'compiler/boolean.h'\" \(817 characters\)
  518. sed "s/^X//" >'compiler/boolean.h' <<'END_OF_FILE'
  519. X/* boolean.h
  520. X   Copyright (C) 1992  J Dana Eckart
  521. X   This program is free software; you can redistribute it and/or modify
  522. X   it under the terms of the GNU General Public License as published by
  523. X   the Free Software Foundation; either version 1, or (at your option)
  524. X   any later version.
  525. X   This program is distributed in the hope that it will be useful,
  526. X   but WITHOUT ANY WARRANTY; without even the implied warranty of
  527. X   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  528. X   GNU General Public License for more details.
  529. X   You should have received a copy of the GNU General Public License
  530. X   along with CELLULAR-2.0; see the file COPYING.  If not, write to the 
  531. X   Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  532. X#define boolean int
  533. X#define true     1
  534. X#define false     0
  535. END_OF_FILE
  536. if test 817 -ne `wc -c <'compiler/boolean.h'`; then
  537.     echo shar: \"'compiler/boolean.h'\" unpacked with wrong size!
  538. # end of 'compiler/boolean.h'
  539. if test -f 'compiler/cellc.man' -a "${1}" != "-c" ; then 
  540.   echo shar: Will not clobber existing file \"'compiler/cellc.man'\"
  541. echo shar: Extracting \"'compiler/cellc.man'\" \(1147 characters\)
  542. sed "s/^X//" >'compiler/cellc.man' <<'END_OF_FILE'
  543. X.TH cellc 1
  544. X.SH NAME
  545. cellc \- 
  546. X.I "Cellang 2.0"
  547. X(cellular automata) compiler
  548. X.SH SYNOPSIS
  549. X.B cellc
  550. X.B \-o 
  551. X.I outputfile
  552. X.SH DESCRIPTION
  553. X.I cellc
  554. is the Cellang celluar automata compiler.
  555. X.I cellc
  556. compiles and builds the executable for the Cellang program contained
  557. within file.  By default, the executable is placed in a.pe-scam.
  558. X.BI \-o " outputfile"
  559. Name the output file
  560. X.IR outputfile .
  561. X.I outputfile
  562. cannot be the same as 
  563. X.I sourcefile 
  564. X(the compiler will not overwrite the source file).  The default is
  565. X.I a.pe-scam.
  566. X.ne 5
  567. X.SH FILES
  568. X file                 program text file
  569. X a.pe-scam            default executable file
  570. X LIB_DIR/cellfront    program which actually generates the pe-scam object code
  571. X.SH "SEE ALSO"
  572. cellview(MAN_EXT), pe-scam(MAN_EXT)
  573. J Dana Eckart,
  574. X.I "A Cellular Automata Simulation System: Version 2.0"
  575. X(1992)
  576. J Dana Eckart,
  577. X.I "Cellang 2.0: Language Reference Manual"
  578. X(1992)
  579. X.SH DIAGNOSTICS
  580. The diagnostics produced by cellc are intended to be
  581. self-explanatory.
  582. X.SH BUGS
  583. The current implementation does not check to ensure that the values assigned 
  584. to fields are within the associated ranges.
  585. END_OF_FILE
  586. if test 1147 -ne `wc -c <'compiler/cellc.man'`; then
  587.     echo shar: \"'compiler/cellc.man'\" unpacked with wrong size!
  588. # end of 'compiler/cellc.man'
  589. if test -f 'compiler/cellc.sh' -a "${1}" != "-c" ; then 
  590.   echo shar: Will not clobber existing file \"'compiler/cellc.sh'\"
  591. echo shar: Extracting \"'compiler/cellc.sh'\" \(1702 characters\)
  592. sed "s/^X//" >'compiler/cellc.sh' <<'END_OF_FILE'
  593. X#!/bin/sh
  594. X#  cellc.sh
  595. X#  Copyright (C) 1992  J Dana Eckart
  596. X#  This program is free software; you can redistribute it and/or modify
  597. X#  it under the terms of the GNU General Public License as published by
  598. X#  the Free Software Foundation; either version 1, or (at your option)
  599. X#  any later version.
  600. X#  This program is distributed in the hope that it will be useful,
  601. X#  but WITHOUT ANY WARRANTY; without even the implied warranty of
  602. X#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  603. X#  GNU General Public License for more details.
  604. X#  You should have received a copy of the GNU General Public License
  605. X#  along with CELLULAR-2.0; see the file COPYING.  If not, write to the 
  606. X#  Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  607. LIB=YOUR_LIB
  608. CC=YOUR_CC
  609. CFLAGS=YOUR_CFLAGS
  610. COMBINED=YOUR_COMBINED
  611. C_FILE=.cellang.c
  612. H_FILE=.cellang.h
  613. USAGE="usage: `basename $0` [-o outputfile] filename"
  614. trap "/bin/rm -f $C_FILE $H_FILE;exit" 0
  615. X# Get options and check usage
  616. if (test $# -lt 1) then
  617. X    echo $USAGE
  618. X    exit 1
  619. while (test $# -gt 1)
  620. X    case $1 in
  621. X        '-o')     OUT_FILE="-o $2"
  622. X            shift
  623. X            ;;
  624. X        *)     echo "Unknown flag, '$1'."
  625. X            echo $USAGE
  626. X            exit 1
  627. X            ;;
  628. X    esac
  629. X    shift
  630. X# By default, put the executable in "a.pe-scam".
  631. if test -z "$OUT_FILE"
  632. X    OUT_FILE="-o a.pe-scam"
  633. XFILE=$1
  634. X# Perform conversion to C and then do a c compilation.
  635. if test -r $FILE
  636. X    $LIB/cellfront < $FILE 
  637. X    if test -s $C_FILE
  638. X    then
  639. X        if test "$COMBINED" = "1"
  640. X        then
  641. X            $CC $CFLAGS $OUT_FILE $C_FILE $LIB/*.o \
  642. X                -lm -lcurses -ltermcap -lX11
  643. X        else
  644. X            $CC $CFLAGS $OUT_FILE $C_FILE
  645. X        fi
  646. X    echo "`basename $0`: file $FILE not found"
  647. X/bin/rm -f $C_FILE $H_FILE
  648. END_OF_FILE
  649. if test 1702 -ne `wc -c <'compiler/cellc.sh'`; then
  650.     echo shar: \"'compiler/cellc.sh'\" unpacked with wrong size!
  651. # end of 'compiler/cellc.sh'
  652. if test -f 'compiler/error.c' -a "${1}" != "-c" ; then 
  653.   echo shar: Will not clobber existing file \"'compiler/error.c'\"
  654. echo shar: Extracting \"'compiler/error.c'\" \(1191 characters\)
  655. sed "s/^X//" >'compiler/error.c' <<'END_OF_FILE'
  656. X/* error.c
  657. X   Copyright (C) 1992  J Dana Eckart
  658. X   This program is free software; you can redistribute it and/or modify
  659. X   it under the terms of the GNU General Public License as published by
  660. X   the Free Software Foundation; either version 1, or (at your option)
  661. X   any later version.
  662. X   This program is distributed in the hope that it will be useful,
  663. X   but WITHOUT ANY WARRANTY; without even the implied warranty of
  664. X   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  665. X   GNU General Public License for more details.
  666. X   You should have received a copy of the GNU General Public License
  667. X   along with CELLULAR-2.0; see the file COPYING.  If not, write to the 
  668. X   Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  669. X#include <stdio.h>
  670. X#include <malloc.h>
  671. X#include "error.h"
  672. X/************************************************************************/
  673. X/* SUPPORT ROUTINE
  674. X      ACTION - Malloc's the desired amount of space, issuing an
  675. X           error message if the space is not forthcoming.
  676. char* mymalloc(size) unsigned int size; {
  677. X    char *pointer = malloc(size);
  678. X    if (NULL == pointer)
  679. X        error("Out of memory", (char*) NULL);
  680. X    return pointer;
  681. END_OF_FILE
  682. if test 1191 -ne `wc -c <'compiler/error.c'`; then
  683.     echo shar: \"'compiler/error.c'\" unpacked with wrong size!
  684. # end of 'compiler/error.c'
  685. if test -f 'compiler/error.h' -a "${1}" != "-c" ; then 
  686.   echo shar: Will not clobber existing file \"'compiler/error.h'\"
  687. echo shar: Extracting \"'compiler/error.h'\" \(895 characters\)
  688. sed "s/^X//" >'compiler/error.h' <<'END_OF_FILE'
  689. X/* error.h
  690. X   Copyright (C) 1992  J Dana Eckart
  691. X   This program is free software; you can redistribute it and/or modify
  692. X   it under the terms of the GNU General Public License as published by
  693. X   the Free Software Foundation; either version 1, or (at your option)
  694. X   any later version.
  695. X   This program is distributed in the hope that it will be useful,
  696. X   but WITHOUT ANY WARRANTY; without even the implied warranty of
  697. X   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  698. X   GNU General Public License for more details.
  699. X   You should have received a copy of the GNU General Public License
  700. X   along with CELLULAR-2.0; see the file COPYING.  If not, write to the 
  701. X   Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  702. extern void error_prefix();    /* Prints prefix for error messages. */ 
  703. extern char* mymalloc();    /* A malloc that checks for success. */
  704. END_OF_FILE
  705. if test 895 -ne `wc -c <'compiler/error.h'`; then
  706.     echo shar: \"'compiler/error.h'\" unpacked with wrong size!
  707. # end of 'compiler/error.h'
  708. if test -f 'compiler/io.h' -a "${1}" != "-c" ; then 
  709.   echo shar: Will not clobber existing file \"'compiler/io.h'\"
  710. echo shar: Extracting \"'compiler/io.h'\" \(884 characters\)
  711. sed "s/^X//" >'compiler/io.h' <<'END_OF_FILE'
  712. X/* io.h
  713. X   Copyright (C) 1992  J Dana Eckart
  714. X   This program is free software; you can redistribute it and/or modify
  715. X   it under the terms of the GNU General Public License as published by
  716. X   the Free Software Foundation; either version 1, or (at your option)
  717. X   any later version.
  718. X   This program is distributed in the hope that it will be useful,
  719. X   but WITHOUT ANY WARRANTY; without even the implied warranty of
  720. X   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  721. X   GNU General Public License for more details.
  722. X   You should have received a copy of the GNU General Public License
  723. X   along with CELLULAR-2.0; see the file COPYING.  If not, write to the 
  724. X   Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  725. extern FILE *file_h;        /* Denotes the C header output stream. */
  726. extern FILE *file_c;        /* Denotes the C code output stream. */
  727. END_OF_FILE
  728. if test 884 -ne `wc -c <'compiler/io.h'`; then
  729.     echo shar: \"'compiler/io.h'\" unpacked with wrong size!
  730. # end of 'compiler/io.h'
  731. if test -f 'compiler/parse' -a "${1}" != "-c" ; then 
  732.   echo shar: Will not clobber existing file \"'compiler/parse'\"
  733. echo shar: Extracting \"'compiler/parse'\" \(5776 characters\)
  734. sed "s/^X//" >'compiler/parse' <<'END_OF_FILE'
  735. X/* parse
  736. X   Copyright (C) 1992  J Dana Eckart
  737. X   This program is free software; you can redistribute it and/or modify
  738. X   it under the terms of the GNU General Public License as published by
  739. X   the Free Software Foundation; either version 1, or (at your option)
  740. X   any later version.
  741. X   This program is distributed in the hope that it will be useful,
  742. X   but WITHOUT ANY WARRANTY; without even the implied warranty of
  743. X   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  744. X   GNU General Public License for more details.
  745. X   You should have received a copy of the GNU General Public License
  746. X   along with CELLULAR-2.0; see the file COPYING.  If not, write to the 
  747. X   Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  748. X#include "semantic.h"
  749. X#include "scanner.h"
  750. X%token DIMENSIONS
  751. X%token IF
  752. X%token THEN
  753. X%token ELSIF
  754. X%token ELSE
  755. X%token END
  756. X%token WHEN
  757. X%token OTHERWISE
  758. X%token OF
  759. X%token ASSIGN
  760. X%token PLUS
  761. X%token MINUS
  762. X%token TIMES
  763. X%token DIVIDE
  764. X%token MOD
  765. X%token EQUAL
  766. X%token LESSER
  767. X%token GREATER
  768. X%token LESSEQ
  769. X%token GREATEQ
  770. X%token NOTEQ
  771. X%token AND
  772. X%token OR
  773. X%token NOT
  774. X%token LEFTPAREN
  775. X%token RIGHTPAREN
  776. X%token LEFTBRACKET
  777. X%token RIGHTBRACKET
  778. X%token COMMA
  779. X%token DOTS
  780. X%token DOT
  781. X%token IDENTIFIER
  782. X%token NUMERICLITERAL
  783. X/* Unlike most yacc specifications, the following have also been
  784. X   written in LL(1) form.  This prevents yacc from making improper
  785. X   assumptions about breaking up a production because of embedded
  786. X   actions.  It also allows the use of an LL(1) parser generator,
  787. X   hopefully sometime in the near future.
  788. X%start program
  789. program        : declare_cells { begin_rules(); } 
  790. X            statement_list { end_rules(); }
  791. declare_cells   : number { set_dimensions(); } DIMENSIONS 
  792. X            OF fields_or_range
  793. fields_or_range : range { declare_default_field(); }
  794. X        | { begin_decl_cells(); } field rest_fields
  795. X            END { end_decl_cells(); }
  796. rest_fields    : field rest_fields
  797. field        : ident_list OF range { declare_fields(); }
  798. range        : integer DOTS integer { make_range(); }
  799. ident_list    : { push_mark(); } identifier rest_ident_list
  800. rest_ident_list : COMMA identifier rest_ident_list
  801. integer        : unary_add number { mk_signed_int(); }
  802. X        | number
  803. number        : NUMERICLITERAL { process_literal(yytext); }
  804. statement_list    : statement statement_list
  805. statement    : assign_statement
  806. X        | if_statement
  807. assign_statement: identifier { assignable_base(); } field_option
  808. X            ASSIGN expression rest_assign
  809. X/* rest_assign is included solely for the jump_if semantic action; which
  810. X   for rest_when is a jump_elseif.
  811. rest_assign    : WHEN expression { jump_if(); do_assign(); } expression_list
  812. X        | OTHERWISE 
  813. X            { do_assign(); end_assign(); }
  814. X        | { do_assign(); end_assign(); }
  815. rest_when    : WHEN expression { jump_elsif(); do_assign(); } expression_list
  816. X        | OTHERWISE 
  817. X            { start_else(); do_assign(); end_if(); end_assign(); }
  818. expression_list : ASSIGN expression rest_when
  819. X        | { end_if(); end_assign(); }
  820. if_statement    : IF expression { jump_if(); } THEN statement_list
  821. X              elsif_list else { end_if(); } END
  822. elsif_list      : elsif elsif_list
  823. X        | 
  824. elsif           : ELSIF expression { jump_elsif(); } THEN statement_list
  825. else            : ELSE { start_else(); } statement_list 
  826. X        | 
  827. X/* The numbered suffix is the precedence of that expression/operator. */
  828. expression    : expression_1
  829. expression_1    : expression_2 rest_expr_1
  830. X        | unary_boolean expression_2 { unary_op(); } rest_expr_1
  831. rest_expr_1    : binary_boolean expression_1 { binary_op(); }
  832. expression_2    : expression_3 rest_expr_2
  833. rest_expr_2    : binary_relation expression_2 { binary_op(); }
  834. expression_3    : expression_4 rest_expr_3
  835. X                | unary_add expression_4 { unary_op(); } rest_expr_3
  836. rest_expr_3    : binary_add expression_3 { binary_op(); }
  837. expression_4    : primary rest_expr_4
  838. rest_expr_4    : binary_mult expression_4 { binary_op(); }
  839. primary         : identifier { get_variable(); } field_option
  840. X        | number
  841. X        | LEFTPAREN expression RIGHTPAREN
  842. X        | LEFTBRACKET { push_mark(); }
  843. X            integer rest_index_list 
  844. X          RIGHTBRACKET { cell_reference(); } field_option
  845. rest_index_list    : COMMA integer rest_index_list
  846. field_option    : DOT identifier { field_reference(); }
  847. identifier      : IDENTIFIER  { push(yytext); }
  848. binary_boolean    : AND     { push("&&"); }
  849. X        | OR      { push("||"); }
  850. unary_boolean    : NOT      { push("!"); }
  851. binary_relation    : EQUAL   { push("=="); }
  852. X        | NOTEQ   { push("!="); }
  853. X        | LESSER  { push("<"); }
  854. X        | GREATER { push(">"); }
  855. X        | LESSEQ  { push("<="); }
  856. X        | GREATEQ { push(">="); }
  857. binary_add    : PLUS    { push("+"); }
  858. X        | MINUS   { push("-"); }
  859. unary_add    : binary_add
  860. binary_mult    : TIMES   { push("*"); }
  861. X        | DIVIDE  { push("/"); }
  862. X        | MOD     { push("%"); }
  863. X#include <strings.h>
  864. X#include <stdio.h>
  865. X#include "io.h"
  866. boolean syntax_error;    /* True iff a syntax error was encountered. */
  867. void main(argc, argv) int argc; char *argv[]; {
  868. X    if (argc-1 != 0) {
  869. X        fprintf(stderr, "%s: No argument should be given\n", argv[0]);
  870. X        exit(0);
  871. X    syntax_error = false;
  872. X    start_up();
  873. X    /* Read and compile the user's program. */
  874. X    startscan();
  875. X    yyparse();
  876. X    /* If no errors occurred, then finishup. */
  877. X    if (!scan_error && !syntax_error && !semantic_error)
  878. X        finish_up();
  879. X    /* If errors occurred, then empty files and indicate an error. */
  880. X    if (scan_error || syntax_error || semantic_error) {
  881. X        fclose(file_h);
  882. X        fclose(file_c);
  883. X        file_h = fopen(".cellang.h", "w");
  884. X        fclose(file_h);
  885. X        file_c = fopen(".cellang.c", "w");
  886. X        fclose(file_c);
  887. X        exit(1);
  888. X#include "error.h"
  889. void yyerror(s) char *s; {
  890. X    syntax_error = true;
  891. X    error_prefix();
  892. X    fprintf(stderr, "%s\n", s);
  893. END_OF_FILE
  894. if test 5776 -ne `wc -c <'compiler/parse'`; then
  895.     echo shar: \"'compiler/parse'\" unpacked with wrong size!
  896. # end of 'compiler/parse'
  897. if test -f 'compiler/scanner.h' -a "${1}" != "-c" ; then 
  898.   echo shar: Will not clobber existing file \"'compiler/scanner.h'\"
  899. echo shar: Extracting \"'compiler/scanner.h'\" \(1077 characters\)
  900. sed "s/^X//" >'compiler/scanner.h' <<'END_OF_FILE'
  901. X/* scanner.h
  902. X   Copyright (C) 1992  J Dana Eckart
  903. X   This program is free software; you can redistribute it and/or modify
  904. X   it under the terms of the GNU General Public License as published by
  905. X   the Free Software Foundation; either version 1, or (at your option)
  906. X   any later version.
  907. X   This program is distributed in the hope that it will be useful,
  908. X   but WITHOUT ANY WARRANTY; without even the implied warranty of
  909. X   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  910. X   GNU General Public License for more details.
  911. X   You should have received a copy of the GNU General Public License
  912. X   along with CELLULAR-2.0; see the file COPYING.  If not, write to the 
  913. X   Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  914. X#include "y.tab.h"
  915. X#include "boolean.h"
  916. extern boolean scan_error;    /* True iff a scanning error was encountered. */
  917. extern char yytext[];        /* Holds the text of a scanned token. */
  918. extern void startscan();    /* Setup for scanning a new file. */
  919. extern int yylex();        /* Function used to acquire the next token. */
  920. END_OF_FILE
  921. if test 1077 -ne `wc -c <'compiler/scanner.h'`; then
  922.     echo shar: \"'compiler/scanner.h'\" unpacked with wrong size!
  923. # end of 'compiler/scanner.h'
  924. if test -f 'compiler/semantic.h' -a "${1}" != "-c" ; then 
  925.   echo shar: Will not clobber existing file \"'compiler/semantic.h'\"
  926. echo shar: Extracting \"'compiler/semantic.h'\" \(2117 characters\)
  927. sed "s/^X//" >'compiler/semantic.h' <<'END_OF_FILE'
  928. X/* semantic.h
  929. X   Copyright (C) 1992  J Dana Eckart
  930. X   This program is free software; you can redistribute it and/or modify
  931. X   it under the terms of the GNU General Public License as published by
  932. X   the Free Software Foundation; either version 1, or (at your option)
  933. X   any later version.
  934. X   This program is distributed in the hope that it will be useful,
  935. X   but WITHOUT ANY WARRANTY; without even the implied warranty of
  936. X   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  937. X   GNU General Public License for more details.
  938. X   You should have received a copy of the GNU General Public License
  939. X   along with CELLULAR-2.0; see the file COPYING.  If not, write to the 
  940. X   Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  941. X/* These are the declarations for all of the semantic actions. */
  942. X#include "boolean.h"
  943. extern boolean semantic_error;     /* True iff a semantic error was encountered. */
  944. X/* initialization and cleanup for the compilation */
  945. extern void start_up();
  946. extern void finish_up();
  947. X/* declare the dimensionality and fields of the cells of the universe. */
  948. extern void begin_decl_cells();
  949. extern void end_decl_cells();
  950. extern void declare_fields();
  951. extern void declare_default_field();
  952. extern void make_range();
  953. extern void set_dimensions();
  954. X/* Group the cellular automata rules into a function. */
  955. extern void begin_rules();
  956. extern void end_rules();
  957. X/* assignment statement */
  958. extern void do_assign();
  959. extern void end_assign();
  960. X/* when statment */
  961. extern void jump_when();
  962. X/* if-then-elsif-else statment */
  963. extern void jump_if();
  964. extern void jump_elsif();
  965. extern void start_else();
  966. extern void end_if();
  967. X/* simple push operations */
  968. extern void push_mark();
  969. extern void push();
  970. X/* simple processing */
  971. extern void process_literal();
  972. extern void mk_signed_int();
  973. X/* setup variables (left hand side of assignments) */
  974. extern void assignable_base();
  975. X/* expressions */
  976. extern void get_variable();
  977. extern void binary_op();
  978. extern void unary_op();
  979. X/* Getting the value from a neighboring cell. */
  980. extern void cell_reference();
  981. extern void field_reference();
  982. END_OF_FILE
  983. if test 2117 -ne `wc -c <'compiler/semantic.h'`; then
  984.     echo shar: \"'compiler/semantic.h'\" unpacked with wrong size!
  985. # end of 'compiler/semantic.h'
  986. if test -f 'compiler/stack.h' -a "${1}" != "-c" ; then 
  987.   echo shar: Will not clobber existing file \"'compiler/stack.h'\"
  988. echo shar: Extracting \"'compiler/stack.h'\" \(1714 characters\)
  989. sed "s/^X//" >'compiler/stack.h' <<'END_OF_FILE'
  990. X/* stack.h
  991. X   Copyright (C) 1992  J Dana Eckart
  992. X   This program is free software; you can redistribute it and/or modify
  993. X   it under the terms of the GNU General Public License as published by
  994. X   the Free Software Foundation; either version 1, or (at your option)
  995. X   any later version.
  996. X   This program is distributed in the hope that it will be useful,
  997. X   but WITHOUT ANY WARRANTY; without even the implied warranty of
  998. X   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  999. X   GNU General Public License for more details.
  1000. X   You should have received a copy of the GNU General Public License
  1001. X   along with CELLULAR-2.0; see the file COPYING.  If not, write to the 
  1002. X   Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  1003. X/* The following define the different stack_entry kinds. */
  1004. X#define StackMark        1
  1005. X#define StackExpr              2
  1006. X#define StackToken        3
  1007. X#define StackError            4
  1008. X#define StackRange            5
  1009. typedef struct {
  1010. X    char *addr;         /* Reference name of the expression. */
  1011. X    char *field;         /* Field name of the expression.  This
  1012. X                   is used only for doing the implicit
  1013. X                   variable declarations to keep the
  1014. X                   field separate from the variable until
  1015. X                   its type can be inferred.
  1016. X                */
  1017. X    boolean assignable;     /* True iff assignable. */
  1018. X    boolean pre_declared;     /* True iff identifier was previous declared. */
  1019. X    boolean unstructured;    /* True iff expr_entry is NOT structured. */
  1020. X} expr_entry;
  1021. typedef struct {
  1022. X    int lower_bound;    /* Lower bound of a field range. */
  1023. X    int upper_bound;    /* Upper bound of a field range. */
  1024. X} range_entry;
  1025. typedef struct {
  1026. X    int kind;
  1027. X    union {
  1028. X        expr_entry        expr;
  1029. X        char            *token;
  1030. X        range_entry        range;
  1031. X    } data;
  1032. X} stack_entry;
  1033. END_OF_FILE
  1034. if test 1714 -ne `wc -c <'compiler/stack.h'`; then
  1035.     echo shar: \"'compiler/stack.h'\" unpacked with wrong size!
  1036. # end of 'compiler/stack.h'
  1037. if test -f 'compiler/symtable.c' -a "${1}" != "-c" ; then 
  1038.   echo shar: Will not clobber existing file \"'compiler/symtable.c'\"
  1039. echo shar: Extracting \"'compiler/symtable.c'\" \(3217 characters\)
  1040. sed "s/^X//" >'compiler/symtable.c' <<'END_OF_FILE'
  1041. X/* symtable.c
  1042. X   Copyright (C) 1992  J Dana Eckart
  1043. X   This program is free software; you can redistribute it and/or modify
  1044. X   it under the terms of the GNU General Public License as published by
  1045. X   the Free Software Foundation; either version 1, or (at your option)
  1046. X   any later version.
  1047. X   This program is distributed in the hope that it will be useful,
  1048. X   but WITHOUT ANY WARRANTY; without even the implied warranty of
  1049. X   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  1050. X   GNU General Public License for more details.
  1051. X   You should have received a copy of the GNU General Public License
  1052. X   along with CELLULAR-2.0; see the file COPYING.  If not, write to the 
  1053. X   Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  1054. X/* This file implements the symbol table.  Bucket hashing is used,
  1055. X   associating an attribute with each identifier.  New identifiers 
  1056. X   are always added to the front of the chain representing the bucket.  
  1057. X#include <stdio.h>
  1058. X#include "attribute.h"
  1059. X#include "symtable.h"
  1060. X#include "error.h"
  1061. X#define TableSize    27
  1062. typedef struct bucket_fubar {
  1063. X    char* name;
  1064. X    attr_rec *attribute;
  1065. X    struct bucket_fubar *next;
  1066. X} bucket;
  1067. bucket *table[TableSize];
  1068. X/* Initializes every bucket in the hash table to be empty. */
  1069. void initsymboltable() {
  1070. X    int i;
  1071. X    for (i = 0; i < TableSize; i++) table[i] = NULL;
  1072. X/* Calculates a hash value for the string based upon the first and
  1073. X   last characters in the string.  If the string contains only one
  1074. X   character, then it is used as both the first and last character.
  1075. int hash(string) char *string; {
  1076. X    return ( string[0] + string[strlen(string)-1] ) % TableSize;
  1077. X/* Returns a pointer to the bucket in the hash table corresponding to
  1078. X   the specified string and name type.  If none is found then NULL is 
  1079. X   returned.
  1080. bucket *findid(string, name_type) char *string; int name_type; {
  1081. X    bucket *entry;
  1082. X    entry = table[hash(string)];
  1083. X    while (entry != NULL && (strcmp(string, entry->name) != 0
  1084. X        || entry->attribute->field_name != name_type))
  1085. X        entry = entry->next;
  1086. X    return entry;
  1087. X/* Returns true iff a string of name type already appears in the symbol 
  1088. X   table. 
  1089. boolean intable(string, name_type) char *string; int name_type; {
  1090. X    if (findid(string, name_type) != NULL)
  1091. X        return true;
  1092. X    else
  1093. X        return false;
  1094. X/* Enters the identifier, string, into the symbol table along with
  1095. X   its associated attribute, attr.  A copy of the string is made.
  1096. void enterid(string, attr) char *string; attr_rec attr; {
  1097. X    bucket *entry;
  1098. X    entry = findid(string, attr.field_name);
  1099. X    /* If string is not present, then add it. */
  1100. X    if (entry == NULL) {
  1101. X        int index;
  1102. X        index = hash(string);
  1103. X        entry = (bucket*) mymalloc(sizeof(bucket));
  1104. X        entry->name = mymalloc(strlen(string) + 1);
  1105. X        strcpy(entry->name, string);
  1106. X        entry->attribute = (attr_rec*) mymalloc(sizeof(attr_rec));
  1107. X        *(entry->attribute) = attr;
  1108. X        entry->next = table[index];
  1109. X        table[index] = entry;
  1110. X/* Returns the attribute associated with the specified string and name type. */
  1111. attr_rec *get_attribute(string, name_type) char *string; int name_type; {
  1112. X    bucket *entry;
  1113. X    entry = findid(string, name_type);
  1114. X    if (entry != NULL) return entry->attribute;
  1115. X    else return NULL;
  1116. END_OF_FILE
  1117. if test 3217 -ne `wc -c <'compiler/symtable.c'`; then
  1118.     echo shar: \"'compiler/symtable.c'\" unpacked with wrong size!
  1119. # end of 'compiler/symtable.c'
  1120. if test -f 'compiler/symtable.h' -a "${1}" != "-c" ; then 
  1121.   echo shar: Will not clobber existing file \"'compiler/symtable.h'\"
  1122. echo shar: Extracting \"'compiler/symtable.h'\" \(976 characters\)
  1123. sed "s/^X//" >'compiler/symtable.h' <<'END_OF_FILE'
  1124. X/* symtable.h
  1125. X   Copyright (C) 1992  J Dana Eckart
  1126. X   This program is free software; you can redistribute it and/or modify
  1127. X   it under the terms of the GNU General Public License as published by
  1128. X   the Free Software Foundation; either version 1, or (at your option)
  1129. X   any later version.
  1130. X   This program is distributed in the hope that it will be useful,
  1131. X   but WITHOUT ANY WARRANTY; without even the implied warranty of
  1132. X   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  1133. X   GNU General Public License for more details.
  1134. X   You should have received a copy of the GNU General Public License
  1135. X   along with CELLULAR-2.0; see the file COPYING.  If not, write to the 
  1136. X   Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  1137. X/* The exported declarations for using the symbol table. */
  1138. X#define VARIABLE 0
  1139. X#define FIELD     1
  1140. extern void initsymboltable();
  1141. extern void enterid();
  1142. extern boolean intable();
  1143. extern attr_rec *get_attribute();
  1144. END_OF_FILE
  1145. if test 976 -ne `wc -c <'compiler/symtable.h'`; then
  1146.     echo shar: \"'compiler/symtable.h'\" unpacked with wrong size!
  1147. # end of 'compiler/symtable.h'
  1148. if test ! -d 'driver' ; then
  1149.     echo shar: Creating directory \"'driver'\"
  1150.     mkdir 'driver'
  1151. if test -f 'driver/Makefile' -a "${1}" != "-c" ; then 
  1152.   echo shar: Will not clobber existing file \"'driver/Makefile'\"
  1153. echo shar: Extracting \"'driver/Makefile'\" \(2056 characters\)
  1154. sed "s/^X//" >'driver/Makefile' <<'END_OF_FILE'
  1155. X#  Makefile
  1156. X#  Copyright (C) 1992  J Dana Eckart
  1157. X#  This program is free software; you can redistribute it and/or modify
  1158. X#  it under the terms of the GNU General Public License as published by
  1159. X#  the Free Software Foundation; either version 1, or (at your option)
  1160. X#  any later version.
  1161. X#  This program is distributed in the hope that it will be useful,
  1162. X#  but WITHOUT ANY WARRANTY; without even the implied warranty of
  1163. X#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  1164. X#  GNU General Public License for more details.
  1165. X#  You should have received a copy of the GNU General Public License
  1166. X#  along with CELLULAR-2.0; see the file COPYING.  If not, write to the 
  1167. X#  Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  1168. X# Installation directories.
  1169. BIN=/usr/local/bin
  1170. LIB=/usr/local/lib/cellular
  1171. MAN=/usr/man/manl
  1172. MAN_EXT=l
  1173. X# The default maximum size of a single dimension within Cellang programs.
  1174. MAX_DIM_SIZE=64
  1175. X# If you want to have the Cellang compiler configured to compile the viewer 
  1176. X# into the executables then assign COMBINED the value "1", otherwise assign 
  1177. X# a "0".  This makes for faster display of many automata, though it does need
  1178. X# X11 to run them.
  1179. COMBINED=0    # 0 or 1
  1180. X# Dependencies
  1181. all: pe-scam pe-scam.${MAN_EXT}
  1182. install: all
  1183. X    - mkdir -p ${BIN}
  1184. X    - mkdir -p ${MAN}
  1185. X    install pe-scam ${BIN}/pe-scam
  1186. X    install -m 644 pe-scam.${MAN_EXT} ${MAN}/pe-scam.${MAN_EXT}
  1187. deinstall:
  1188. X    /bin/rm -f ${BIN}/pe-scam
  1189. X    /bin/rm -f ${MAN}/pe-scam.${MAN_EXT}
  1190. clean:
  1191. X    /bin/rm -f *.o *.tab.h *.tab.c *.aux *.dvi *.log *.toc \
  1192. X        pe-scam core pe-scam.${MAN_EXT}
  1193. realclean: clean
  1194. pe-scam: pe-scam.sh
  1195. X    sed -e 's?YOUR_LIB?$(LIB)?' \
  1196. X        -e 's?YOUR_BIN?$(BIN)?' \
  1197. X        -e 's?YOUR_CC?$(CC)?' \
  1198. X        -e 's?YOUR_CFLAGS?$(CFLAGS)?' \
  1199. X        -e 's?YOUR_MAX_DIM_SIZE?$(MAX_DIM_SIZE)?' \
  1200. X        -e 's?YOUR_COMBINED?$(COMBINED)?' \
  1201. X    pe-scam.sh > pe-scam
  1202. X    chmod u+rx pe-scam
  1203. pe-scam.${MAN_EXT}: pe-scam.man
  1204. X    sed -e 's?LIB_DIR?$(LIB)?' \
  1205. X        -e 's?MAN_EXT?$(MAN_EXT)?g' \
  1206. X        -e 's?MAX_DIM_SIZE?$(MAX_DIM_SIZE)?g' \
  1207. X        pe-scam.man > pe-scam.${MAN_EXT}
  1208. END_OF_FILE
  1209. if test 2056 -ne `wc -c <'driver/Makefile'`; then
  1210.     echo shar: \"'driver/Makefile'\" unpacked with wrong size!
  1211. # end of 'driver/Makefile'
  1212. if test -f 'driver/pe-scam.sh' -a "${1}" != "-c" ; then 
  1213.   echo shar: Will not clobber existing file \"'driver/pe-scam.sh'\"
  1214. echo shar: Extracting \"'driver/pe-scam.sh'\" \(3453 characters\)
  1215. sed "s/^X//" >'driver/pe-scam.sh' <<'END_OF_FILE'
  1216. X#!/bin/sh
  1217. X#  pe-scam.sh
  1218. X#  Copyright (C) 1992  J Dana Eckart
  1219. X#  This program is free software; you can redistribute it and/or modify
  1220. X#  it under the terms of the GNU General Public License as published by
  1221. X#  the Free Software Foundation; either version 1, or (at your option)
  1222. X#  any later version.
  1223. X#  This program is distributed in the hope that it will be useful,
  1224. X#  but WITHOUT ANY WARRANTY; without even the implied warranty of
  1225. X#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  1226. X#  GNU General Public License for more details.
  1227. X#  You should have received a copy of the GNU General Public License
  1228. X#  along with CELLULAR-2.0; see the file COPYING.  If not, write to the 
  1229. X#  Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  1230. LIB=YOUR_LIB
  1231. BIN=YOUR_BIN
  1232. CC=YOUR_CC
  1233. MAX_DIM_SIZE=YOUR_MAX_DIM_SIZE
  1234. COMBINED=YOUR_COMBINED
  1235. CFLAGS='YOUR_CFLAGS'
  1236. USAGE="usage: ... | `basename $0` [-r timefile] [-c codefile] \
  1237. X            (-o | [-curses | -x11] [-display X11_display]\
  1238. X                  [-p n] [-s n] [-map mapfile] [-f n]\
  1239. X                      [-dim [n|n..n]{,n|,n..n}])"
  1240. trap "exit" 0
  1241. CODEFILE="a.pe-scam"
  1242. while (test $# -gt 0)
  1243. X    case $1 in
  1244. X        '-o')     if test -n "$CURSES" -o \
  1245. X                -n "$X11" -o \
  1246. X                -n "$X_DISPLAY" -o \
  1247. X                -n "$MAPFILE" -o \
  1248. X                -n "$PAUSE" -o \
  1249. X                -n "$SIZE" -o \
  1250. X                -n "$FIELD"
  1251. X            then
  1252. X                echo $USAGE
  1253. X                exit 1
  1254. X            else
  1255. X                OUTPUT=yes
  1256. X            fi
  1257. X            ;;
  1258. X        '-c')     CODEFILE=$2
  1259. X            shift
  1260. X            ;;
  1261. X        '-r')     if test "$COMBINED" = "0"
  1262. X            then
  1263. X                TIMEFILE=$2
  1264. X            else
  1265. X                TIMEFILE="-r $2"
  1266. X            fi
  1267. X            shift
  1268. X            ;;
  1269. X        '-curses') 
  1270. X            if test -n "$OUTPUT"
  1271. X            then
  1272. X                echo $USAGE
  1273. X                exit 1
  1274. X            else
  1275. X                CURSES=$1
  1276. X            fi
  1277. X            ;;
  1278. X        '-x11')    if test -n "$OUTPUT"
  1279. X            then
  1280. X                echo $USAGE
  1281. X                exit 1
  1282. X            else
  1283. X                X11=$1
  1284. X            fi
  1285. X            ;;
  1286. X        '-display') 
  1287. X            if test -n "$OUTPUT"
  1288. X            then
  1289. X                echo $USAGE
  1290. X                exit 1
  1291. X            else
  1292. X                X_DISPLAY="-display $2"
  1293. X            fi
  1294. X            shift
  1295. X            ;;
  1296. X        '-map') if test -n "$OUTPUT"
  1297. X            then
  1298. X                echo $USAGE
  1299. X                exit 1
  1300. X            else
  1301. X                MAPFILE="-map $2"
  1302. X            fi
  1303. X            shift
  1304. X            ;;
  1305. X        '-p')   if test -n "$OUTPUT"
  1306. X            then
  1307. X                echo $USAGE
  1308. X                exit 1
  1309. X            else
  1310. X                PAUSE="-p $2"
  1311. X            fi
  1312. X            shift
  1313. X            ;;
  1314. X        '-s')   if test -n "$OUTPUT"
  1315. X            then
  1316. X                echo $USAGE
  1317. X                exit 1
  1318. X            else
  1319. X                SIZE="-s $2"
  1320. X            fi
  1321. X            shift
  1322. X            ;;
  1323. X        '-f')   if test -n "$OUTPUT"
  1324. X            then
  1325. X                echo $USAGE
  1326. X                exit 1
  1327. X            else
  1328. X                FIELD="-f $2"
  1329. X            fi
  1330. X            shift
  1331. X            ;;
  1332. X        '-dim') if test -n "$OUTPUT"
  1333. X            then
  1334. X                echo $USAGE
  1335. X                exit 1
  1336. X            else
  1337. X                DIM="$2"
  1338. X            fi
  1339. X            shift
  1340. X            ;;
  1341. X        *)     echo "Unknown flag, '$1'."
  1342. X            echo $USAGE
  1343. X            exit 1
  1344. X            ;;
  1345. X    esac
  1346. X    shift
  1347. X# Fix up the TIMEFILE is necessary.
  1348. if test "$COMBINED" = "0" -a -z "$TIMEFILE"
  1349. X        TIMEFILE="-"
  1350. X# Make sure there is a valid codefile
  1351. if test ! -x $CODEFILE
  1352. X    echo $USAGE
  1353. X    exit 1
  1354. X# Perform the pe-scam simulation.
  1355. if test "$OUTPUT" = "yes"
  1356. X    if test "$COMBINED" = "0"
  1357. X    then
  1358. X        $CODEFILE $TIMEFILE
  1359. X    else
  1360. X        $CODEFILE $TIMEFILE -o
  1361. X    # If no -dim option given, then use the default.
  1362. X    if test -z "$DIM"
  1363. X    then
  1364. X        # Display only a small portion if using curses.
  1365. X        if test -n "$CURSES"
  1366. X        then
  1367. X            DIM=0..20,0..20
  1368. X        else
  1369. X            MAX_DIM_SIZE=`echo "$MAX_DIM_SIZE 1 - p" | dc`
  1370. X            DIM=0..${MAX_DIM_SIZE},0..${MAX_DIM_SIZE}
  1371. X        fi
  1372. X    if test "$COMBINED" = "0"
  1373. X    then
  1374. X        $CODEFILE $TIMEFILE | \
  1375. X            $BIN/cellview $CURSES $X11 $MAPFILE $SIZE $PAUSE \
  1376. X            $FIELD $X_DISPLAY -dim $DIM
  1377. X    else
  1378. X        $CODEFILE $TIMEFILE \
  1379. X            $CURSES $X11 $MAPFILE $SIZE $PAUSE \
  1380. X            $FIELD $X_DISPLAY -dim $DIM
  1381. END_OF_FILE
  1382. if test 3453 -ne `wc -c <'driver/pe-scam.sh'`; then
  1383.     echo shar: \"'driver/pe-scam.sh'\" unpacked with wrong size!
  1384. # end of 'driver/pe-scam.sh'
  1385. if test ! -d 'examples' ; then
  1386.     echo shar: Creating directory \"'examples'\"
  1387.     mkdir 'examples'
  1388. if test -f 'examples/Makefile' -a "${1}" != "-c" ; then 
  1389.   echo shar: Will not clobber existing file \"'examples/Makefile'\"
  1390. echo shar: Extracting \"'examples/Makefile'\" \(2393 characters\)
  1391. sed "s/^X//" >'examples/Makefile' <<'END_OF_FILE'
  1392. X#  Makefile
  1393. X#  Copyright (C) 1992  J Dana Eckart
  1394. X#  This program is free software; you can redistribute it and/or modify
  1395. X#  it under the terms of the GNU General Public License as published by
  1396. X#  the Free Software Foundation; either version 1, or (at your option)
  1397. X#  any later version.
  1398. X#  This program is distributed in the hope that it will be useful,
  1399. X#  but WITHOUT ANY WARRANTY; without even the implied warranty of
  1400. X#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  1401. X#  GNU General Public License for more details.
  1402. X#  You should have received a copy of the GNU General Public License
  1403. X#  along with CELLULAR-2.0; see the file COPYING.  If not, write to the 
  1404. X#  Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  1405. X# The place where cellc can be found
  1406. BIN=/usr/local/bin
  1407. X# The default (maximum) sizes associated with Cellang programs.
  1408. MAX_DIM_SIZE=64
  1409. X# Choose a C compiler and options.
  1410. CC = gcc
  1411. CFLAGS = -O -ansi -pedantic
  1412. X# Rules (default.mk on SunOS uses a -target option not supported by GNU C)
  1413. COMPILE.c=$(CC) $(CFLAGS) $(CPPFLAGS) -c
  1414. X# Dependencies
  1415. all: show \
  1416. X    bin/life bin/gas bin/dist bin/srdp bin/parity bin/cparity \
  1417. X    data/srdp data/gas data/dist
  1418. install: all
  1419. X    - mkdir -p ${LIB}
  1420. X    cp -r . ${LIB}/examples
  1421. X    /bin/rm -f ${LIB}/examples/show.sh
  1422. X    /bin/rm -f ${LIB}/examples/Makefile
  1423. X    /bin/rm -f ${LIB}/examples/gas_data_gen*
  1424. X    /bin/rm -f ${LIB}/examples/srdp_data_gen*
  1425. X    /bin/rm -f ${LIB}/examples/dist_data_gen*
  1426. X    chmod -R uog+r ${LIB}/examples
  1427. clean:
  1428. X    /bin/rm -f show bin/* 
  1429. X    /bin/rm -f gas_data_gen srdp_data_gen dist_data_gen
  1430. X    /bin/rm -f data/gas data/srdp data/dist
  1431. X    find . -name core -exec /bin/rm -f {} \;
  1432. realclean: clean
  1433. deinstall:
  1434. X    /bin/rm -rf ${LIB}/examples
  1435. show: show.sh
  1436. X    sed -e 's?YOUR_BIN?$(BIN)?' show.sh > show
  1437. X    chmod uog+rx show
  1438. bin/life: src/life
  1439. X    ../compiler/cellc -o bin/life src/life
  1440. bin/gas: src/gas
  1441. X    ../compiler/cellc -o bin/gas src/gas
  1442. bin/dist: src/dist
  1443. X    ../compiler/cellc -o bin/dist src/dist
  1444. bin/srdp: src/srdp
  1445. X    ../compiler/cellc -o bin/srdp src/srdp
  1446. bin/parity: src/parity
  1447. X    ../compiler/cellc -o bin/parity src/parity
  1448. bin/cparity: src/cparity
  1449. X    ../compiler/cellc -o bin/cparity src/cparity
  1450. data/srdp: srdp_data_gen
  1451. X    ./srdp_data_gen ${MAX_DIM_SIZE} > data/srdp
  1452. data/gas: gas_data_gen
  1453. X    ./gas_data_gen ${MAX_DIM_SIZE} > data/gas
  1454. data/dist: dist_data_gen
  1455. X    ./dist_data_gen ${MAX_DIM_SIZE} > data/dist
  1456. END_OF_FILE
  1457. if test 2393 -ne `wc -c <'examples/Makefile'`; then
  1458.     echo shar: \"'examples/Makefile'\" unpacked with wrong size!
  1459. # end of 'examples/Makefile'
  1460. if test -f 'examples/README' -a "${1}" != "-c" ; then 
  1461.   echo shar: Will not clobber existing file \"'examples/README'\"
  1462. echo shar: Extracting \"'examples/README'\" \(1312 characters\)
  1463. sed "s/^X//" >'examples/README' <<'END_OF_FILE'
  1464. X#  README
  1465. X#  Copyright (C) 1992  J Dana Eckart
  1466. X#  This program is free software; you can redistribute it and/or modify
  1467. X#  it under the terms of the GNU General Public License as published by
  1468. X#  the Free Software Foundation; either version 1, or (at your option)
  1469. X#  any later version.
  1470. X#  This program is distributed in the hope that it will be useful,
  1471. X#  but WITHOUT ANY WARRANTY; without even the implied warranty of
  1472. X#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  1473. X#  GNU General Public License for more details.
  1474. X#  You should have received a copy of the GNU General Public License
  1475. X#  along with CELLULAR-2.0; see the file COPYING.  If not, write to the 
  1476. X#  Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  1477. This directory contains several sample Cellang programs. The command "show"
  1478. shows which programs are available.  To see one of them do either:
  1479. X    show name
  1480. X    show name host
  1481. both will run the Cellang program corresponding to name (found in the "src"
  1482. directory), but the second will assume that the results are being displayed
  1483. in X windows and should be displayed on the named host.
  1484. The "bin" directory contains the executables for the Cellang programs which 
  1485. appear in the "src" directory.  The input files to each automata appear in
  1486. the "data" directory.
  1487. END_OF_FILE
  1488. if test 1312 -ne `wc -c <'examples/README'`; then
  1489.     echo shar: \"'examples/README'\" unpacked with wrong size!
  1490. # end of 'examples/README'
  1491. if test ! -d 'examples/bin' ; then
  1492.     echo shar: Creating directory \"'examples/bin'\"
  1493.     mkdir 'examples/bin'
  1494. if test ! -d 'examples/data' ; then
  1495.     echo shar: Creating directory \"'examples/data'\"
  1496.     mkdir 'examples/data'
  1497. if test -f 'examples/data/cparity' -a "${1}" != "-c" ; then 
  1498.   echo shar: Will not clobber existing file \"'examples/data/cparity'\"
  1499. echo shar: Extracting \"'examples/data/cparity'\" \(15 characters\)
  1500. sed "s/^X//" >'examples/data/cparity' <<'END_OF_FILE'
  1501. X[32, 32] = 1
  1502. END_OF_FILE
  1503. if test 15 -ne `wc -c <'examples/data/cparity'`; then
  1504.     echo shar: \"'examples/data/cparity'\" unpacked with wrong size!
  1505. # end of 'examples/data/cparity'
  1506. if test -f 'examples/data/life' -a "${1}" != "-c" ; then 
  1507.   echo shar: Will not clobber existing file \"'examples/data/life'\"
  1508. echo shar: Extracting \"'examples/data/life'\" \(713 characters\)
  1509. sed "s/^X//" >'examples/data/life' <<'END_OF_FILE'
  1510. X[27, 16] = 1
  1511. X[27, 17] = 1
  1512. X[20, 17] = 1
  1513. X[20, 21] = 1
  1514. X[21, 18] = 1
  1515. X[21, 19] = 1
  1516. X[21, 20] = 1
  1517. X[22, 18] = 1
  1518. X[22, 19] = 1
  1519. X[22, 20] = 1
  1520. X[28, 23] = 1
  1521. X[29, 24] = 1
  1522. X[29, 25] = 1
  1523. X[30, 23] = 1
  1524. X[30, 24] = 1
  1525. X[28, 18] = 1
  1526. X[28, 19] = 1
  1527. X[29, 18] = 1
  1528. X[29, 19] = 1
  1529. X[30, 18] = 1
  1530. X[30, 19] = 1
  1531. X[31, 19] = 1
  1532. X[31, 20] = 1
  1533. X[27, 18] = 1
  1534. X[19, 22] = 1
  1535. X[18, 17] = 1
  1536. X[19, 16] = 1
  1537. X[17, 18] = 1
  1538. X[17, 19] = 1
  1539. X[17, 20] = 1
  1540. X[18, 21] = 1
  1541. X[6, 19] = 1
  1542. X[6, 20] = 1
  1543. X[7, 19] = 1
  1544. X[7, 20] = 1
  1545. X[28, 15] = 1
  1546. X[28, 16] = 1
  1547. X[29, 15] = 1
  1548. X[29, 16] = 1
  1549. X[30, 15] = 1
  1550. X[30, 16] = 1
  1551. X[30, 17] = 1
  1552. X[31, 14] = 1
  1553. X[31, 15] = 1
  1554. X[40, 18] = 1
  1555. X[41, 18] = 1
  1556. X[40, 17] = 1
  1557. X[41, 17] = 1
  1558. X[59, 54] = 1
  1559. X[56, 51] = 1
  1560. X[56, 52] = 1
  1561. X[57, 51] = 1
  1562. X[57, 53] = 1
  1563. X[58, 53] = 1
  1564. X[59, 53] = 1
  1565. END_OF_FILE
  1566. if test 713 -ne `wc -c <'examples/data/life'`; then
  1567.     echo shar: \"'examples/data/life'\" unpacked with wrong size!
  1568. # end of 'examples/data/life'
  1569. if test -f 'examples/data/parity' -a "${1}" != "-c" ; then 
  1570.   echo shar: Will not clobber existing file \"'examples/data/parity'\"
  1571. echo shar: Extracting \"'examples/data/parity'\" \(15 characters\)
  1572. sed "s/^X//" >'examples/data/parity' <<'END_OF_FILE'
  1573. X[32, 32] = 1
  1574. END_OF_FILE
  1575. if test 15 -ne `wc -c <'examples/data/parity'`; then
  1576.     echo shar: \"'examples/data/parity'\" unpacked with wrong size!
  1577. # end of 'examples/data/parity'
  1578. if test -f 'examples/dist_data_gen.c' -a "${1}" != "-c" ; then 
  1579.   echo shar: Will not clobber existing file \"'examples/dist_data_gen.c'\"
  1580. echo shar: Extracting \"'examples/dist_data_gen.c'\" \(1457 characters\)
  1581. sed "s/^X//" >'examples/dist_data_gen.c' <<'END_OF_FILE'
  1582. X/* dist_data_gen.c
  1583. X   Copyright (C) 1992  J Dana Eckart
  1584. X   This program is free software; you can redistribute it and/or modify
  1585. X   it under the terms of the GNU General Public License as published by
  1586. X   the Free Software Foundation; either version 1, or (at your option)
  1587. X   any later version.
  1588. X   This program is distributed in the hope that it will be useful,
  1589. X   but WITHOUT ANY WARRANTY; without even the implied warranty of
  1590. X   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  1591. X   GNU General Public License for more details.
  1592. X   You should have received a copy of the GNU General Public License
  1593. X   along with CELLULAR-2.0; see the file COPYING.  If not, write to the 
  1594. X   Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  1595. X/* Generate the input data used by dist.  A single command line argument
  1596. X   indicates the size of each of two dimensions of the cell universe.
  1597. X#include <stdio.h>
  1598. int main(argc, argv) int argc; char *argv[]; {
  1599. X    int max_size = atoi(argv[1]);
  1600. X    int x, y;
  1601. X    printf("0\n");
  1602. X    for (x = 0; x < max_size; x++)
  1603. X        for (y = 0; y < max_size; y++) {
  1604. X            /* Write cell location. */
  1605. X            printf("[%d, %d] = ", x, y);
  1606. X            /* Write "which" field value. */
  1607. X            if ((x+y)%2 == 0)
  1608. X                printf("1");
  1609. X            else
  1610. X                printf("0");
  1611. X            /* Write "dist" field value. */
  1612. X            if (x == max_size/2 && 
  1613. X                (y == max_size/2 || 
  1614. X                    y == max_size/2 + (max_size%2?1:-1)))
  1615. X                printf(", 1");
  1616. X            printf("\n");
  1617. X    return 0;
  1618. END_OF_FILE
  1619. if test 1457 -ne `wc -c <'examples/dist_data_gen.c'`; then
  1620.     echo shar: \"'examples/dist_data_gen.c'\" unpacked with wrong size!
  1621. # end of 'examples/dist_data_gen.c'
  1622. if test -f 'examples/gas_data_gen.c' -a "${1}" != "-c" ; then 
  1623.   echo shar: Will not clobber existing file \"'examples/gas_data_gen.c'\"
  1624. echo shar: Extracting \"'examples/gas_data_gen.c'\" \(1640 characters\)
  1625. sed "s/^X//" >'examples/gas_data_gen.c' <<'END_OF_FILE'
  1626. X/* gas_data_gen.c
  1627. X   Copyright (C) 1992  J Dana Eckart
  1628. X   This program is free software; you can redistribute it and/or modify
  1629. X   it under the terms of the GNU General Public License as published by
  1630. X   the Free Software Foundation; either version 1, or (at your option)
  1631. X   any later version.
  1632. X   This program is distributed in the hope that it will be useful,
  1633. X   but WITHOUT ANY WARRANTY; without even the implied warranty of
  1634. X   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  1635. X   GNU General Public License for more details.
  1636. X   You should have received a copy of the GNU General Public License
  1637. X   along with CELLULAR-2.0; see the file COPYING.  If not, write to the 
  1638. X   Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  1639. X/* Generate the input data used by gas.  A single command line argument
  1640. X   indicates the size of each of two dimensions of the cell universe.
  1641. X#include <stdio.h>
  1642. int main(argc, argv) int argc; char *argv[]; {
  1643. X    int max_size = atoi(argv[1]);
  1644. X    int x, y;
  1645. X    printf("0\n");
  1646. X    for (x = 0; x < max_size; x++)
  1647. X        for (y = 0; y < max_size; y++) {
  1648. X            /* Write cell location. */
  1649. X            printf("[%d, %d] = ", x, y);
  1650. X            /* Write "which" field value. */
  1651. X            if (x%2 == 0 && y%2 == 0)
  1652. X                printf("3");
  1653. X            else if (x%2 == 0 && y%2 == 1)
  1654. X                printf("1");
  1655. X            else if (x%2 == 1 && y%2 == 0)
  1656. X                printf("2");
  1657. X            else
  1658. X                printf("0");
  1659. X            /* Write "rand" field value. */
  1660. X            printf(", %d", random()%2);
  1661. X            /* Write "gas" field value. */
  1662. X            if (0.33*max_size < x && x < 0.66*max_size
  1663. X                          &&
  1664. X                0.33*max_size < y && y < 0.66*max_size)
  1665. X                printf(", 1");
  1666. X            printf("\n");
  1667. X    return 0;
  1668. END_OF_FILE
  1669. if test 1640 -ne `wc -c <'examples/gas_data_gen.c'`; then
  1670.     echo shar: \"'examples/gas_data_gen.c'\" unpacked with wrong size!
  1671. # end of 'examples/gas_data_gen.c'
  1672. if test ! -d 'examples/map' ; then
  1673.     echo shar: Creating directory \"'examples/map'\"
  1674.     mkdir 'examples/map'
  1675. if test -f 'examples/map/srdp' -a "${1}" != "-c" ; then 
  1676.   echo shar: Will not clobber existing file \"'examples/map/srdp'\"
  1677. echo shar: Extracting \"'examples/map/srdp'\" \(100 characters\)
  1678. sed "s/^X//" >'examples/map/srdp' <<'END_OF_FILE'
  1679. X0    65535     0     0
  1680. X1        0 65535     0
  1681. X2        0 65535 65535
  1682. X3        0     0 65535
  1683. X4    65535     0 65535
  1684. END_OF_FILE
  1685. if test 100 -ne `wc -c <'examples/map/srdp'`; then
  1686.     echo shar: \"'examples/map/srdp'\" unpacked with wrong size!
  1687. # end of 'examples/map/srdp'
  1688. if test -f 'examples/show.sh' -a "${1}" != "-c" ; then 
  1689.   echo shar: Will not clobber existing file \"'examples/show.sh'\"
  1690. echo shar: Extracting \"'examples/show.sh'\" \(2621 characters\)
  1691. sed "s/^X//" >'examples/show.sh' <<'END_OF_FILE'
  1692. X#!/bin/sh
  1693. X#  show.sh
  1694. X#  Copyright (C) 1992  J Dana Eckart
  1695. X#  This program is free software; you can redistribute it and/or modify
  1696. X#  it under the terms of the GNU General Public License as published by
  1697. X#  the Free Software Foundation; either version 1, or (at your option)
  1698. X#  any later version.
  1699. X#  This program is distributed in the hope that it will be useful,
  1700. X#  but WITHOUT ANY WARRANTY; without even the implied warranty of
  1701. X#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  1702. X#  GNU General Public License for more details.
  1703. X#  You should have received a copy of the GNU General Public License
  1704. X#  along with CELLULAR-2.0; see the file COPYING.  If not, write to the 
  1705. X#  Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  1706. X# Compile and run with the appropriate data file (if needed/available)
  1707. X# a Cellang program contained within the filename given.
  1708. X# Location of cellview
  1709. BIN=YOUR_BIN
  1710. WD=`dirname $0`
  1711. CC=gcc
  1712. X# Check the usage
  1713. USAGE="usage: `basename $1` filename [ x11_display ]"
  1714. if test $# -eq 0
  1715. X    echo "The available examples are:"
  1716. X    echo " "
  1717. X    echo "     life    -- the game of life (with gun and eater)"
  1718. X    echo "     gas     -- simulates diffusion of two gases"
  1719. X    echo "     dist    -- shows distance using hexagonal neighborhood"
  1720. X    echo "     srdp    -- scissors, rock, dynamite, paper"
  1721. X    echo "     parity  -- a black & white position parity matrix"
  1722. X    echo "     cparity -- a color position parity matrix"
  1723. X    echo " "
  1724. X    exit 0
  1725. elif test $# -gt 2
  1726. X    echo $USAGE
  1727. X    exit 1
  1728. X# Find the executable
  1729. NAME=$1
  1730. if test ! -x $WD/bin/$NAME
  1731. X    if test ! -r $WD/src/$NAME
  1732. X    then
  1733. X        echo "`basename $0`: file '$WD/src/$NAME' not found"
  1734. X    else
  1735. X        echo "`basename $0`: file '$WD/src/$NAME' not compiled"
  1736. X    exit 1
  1737. echo "displaying results of '$NAME' ..."
  1738. X# Determine the type of display, use x11 if either the current terminal
  1739. X# type is an xterm, or if another machine was given on which to display
  1740. X# the results.
  1741. if test "$TERM" = "xterm" -o $# -eq 2
  1742. X    DISPLAY=-x11
  1743. X    if (test $# -eq 2) then
  1744. X        DISPLAY="$DISPLAY -display $2:0"
  1745. X    else
  1746. X        DISPLAY="$DISPLAY -display `hostname`:0"
  1747. X    DISPLAY=-curses
  1748. X# Use the proper color map.
  1749. if test "$NAME" = "srdp"
  1750. X    MAP="-map map/srdp"
  1751. X    MAP=""
  1752. X# Display the proper field value.
  1753. if test "$NAME" = "gas"
  1754. X    FIELD="-f 3"
  1755. elif test "$NAME" = "dist"
  1756. X    FIELD="-f 2"
  1757. X    FIELD="-f 1"
  1758. X# Display the proper proportion for cells.
  1759. if test "$NAME" = "dist"
  1760. X    SIZE="-s 5,3"
  1761. X    SIZE="-s 3,3"
  1762. X# Run the program(s).
  1763. X$BIN/pe-scam -c $WD/bin/$NAME $DISPLAY $SIZE $FIELD $MAP < $WD/data/$NAME
  1764. END_OF_FILE
  1765. if test 2621 -ne `wc -c <'examples/show.sh'`; then
  1766.     echo shar: \"'examples/show.sh'\" unpacked with wrong size!
  1767. # end of 'examples/show.sh'
  1768. if test ! -d 'examples/src' ; then
  1769.     echo shar: Creating directory \"'examples/src'\"
  1770.     mkdir 'examples/src'
  1771. if test -f 'examples/src/cparity' -a "${1}" != "-c" ; then 
  1772.   echo shar: Will not clobber existing file \"'examples/src/cparity'\"
  1773. echo shar: Extracting \"'examples/src/cparity'\" \(924 characters\)
  1774. sed "s/^X//" >'examples/src/cparity' <<'END_OF_FILE'
  1775. X#  cparity
  1776. X#  Copyright (C) 1992  J Dana Eckart
  1777. X#  This program is free software; you can redistribute it and/or modify
  1778. X#  it under the terms of the GNU General Public License as published by
  1779. X#  the Free Software Foundation; either version 1, or (at your option)
  1780. X#  any later version.
  1781. X#  This program is distributed in the hope that it will be useful,
  1782. X#  but WITHOUT ANY WARRANTY; without even the implied warranty of
  1783. X#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  1784. X#  GNU General Public License for more details.
  1785. X#  You should have received a copy of the GNU General Public License
  1786. X#  along with CELLULAR-2.0; see the file COPYING.  If not, write to the 
  1787. X#  Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  1788. X# A color version of the parity program.
  1789. X2 dimensions of 0..255
  1790. sum := [0, 1] + [1, 1] + [1, 0] + [-1, 1] + [-1, 0] + [-1, -1]
  1791. X    + [0, -1] + [1, -1]
  1792. cell := sum % 256
  1793. END_OF_FILE
  1794. if test 924 -ne `wc -c <'examples/src/cparity'`; then
  1795.     echo shar: \"'examples/src/cparity'\" unpacked with wrong size!
  1796. # end of 'examples/src/cparity'
  1797. if test -f 'examples/src/dist' -a "${1}" != "-c" ; then 
  1798.   echo shar: Will not clobber existing file \"'examples/src/dist'\"
  1799. echo shar: Extracting \"'examples/src/dist'\" \(2060 characters\)
  1800. sed "s/^X//" >'examples/src/dist' <<'END_OF_FILE'
  1801. X#  dist
  1802. X#  Copyright (C) 1992  J Dana Eckart
  1803. X#  This program is free software; you can redistribute it and/or modify
  1804. X#  it under the terms of the GNU General Public License as published by
  1805. X#  the Free Software Foundation; either version 1, or (at your option)
  1806. X#  any later version.
  1807. X#  This program is distributed in the hope that it will be useful,
  1808. X#  but WITHOUT ANY WARRANTY; without even the implied warranty of
  1809. X#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  1810. X#  GNU General Public License for more details.
  1811. X#  You should have received a copy of the GNU General Public License
  1812. X#  along with CELLULAR-2.0; see the file COPYING.  If not, write to the 
  1813. X#  Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  1814. X# Use a hexagonal neighborhood to compute the distance(s) from
  1815. X# established points (cells with non-zero values for the dist field).
  1816. X# The hexagonal neighborhood is composed of stagered blocks of two
  1817. X# cells stacked upon one another (imagine a hexagon which has been
  1818. X# pushed in at the sides to form a rectangle).  The which fields are
  1819. X# set according the the following scheme (with 1 being the top of a
  1820. X# hexagon and 0 the bottom).
  1821. X#            0  1  0  1  0  1
  1822. X#            1  0  1  0  1  0
  1823. X#            0  1  0  1  0  1
  1824. X#            1  0  1  0  1  0
  1825. X2 dimensions of 
  1826. X    which of 0..1
  1827. X    dist  of 0..255
  1828. X# Identification of the neighboring cells.
  1829. if cell.which = 0 then
  1830. X    north := [0, 1]
  1831. X    ne    := [1, 0]
  1832. X    se    := [1, -1]
  1833. X    south := [0, -2]
  1834. X    sw    := [-1, -1]
  1835. X    nw    := [-1, 0]
  1836. X    north := [0, 2]
  1837. X    ne    := [1, 1]
  1838. X    se    := [1, 0]
  1839. X    south := [0, -1]
  1840. X    sw    := [-1, 0]
  1841. X    nw    := [-1, 1]
  1842. min_dist := 255
  1843. min_dist := north.dist when north.dist < min_dist & north.dist > 0
  1844. min_dist := ne.dist when ne.dist < min_dist & ne.dist > 0
  1845. min_dist := se.dist when se.dist < min_dist & se.dist > 0
  1846. min_dist := south.dist when south.dist < min_dist & south.dist > 0
  1847. min_dist := sw.dist when sw.dist < min_dist & sw.dist > 0
  1848. min_dist := nw.dist when nw.dist < min_dist & nw.dist > 0
  1849. cell.dist := min_dist+4 when cell.dist = 0 & min_dist < 255
  1850. END_OF_FILE
  1851. if test 2060 -ne `wc -c <'examples/src/dist'`; then
  1852.     echo shar: \"'examples/src/dist'\" unpacked with wrong size!
  1853. # end of 'examples/src/dist'
  1854. if test -f 'examples/src/gas' -a "${1}" != "-c" ; then 
  1855.   echo shar: Will not clobber existing file \"'examples/src/gas'\"
  1856. echo shar: Extracting \"'examples/src/gas'\" \(2712 characters\)
  1857. sed "s/^X//" >'examples/src/gas' <<'END_OF_FILE'
  1858. X#  gas
  1859. X#  Copyright (C) 1992  J Dana Eckart
  1860. X#  This program is free software; you can redistribute it and/or modify
  1861. X#  it under the terms of the GNU General Public License as published by
  1862. X#  the Free Software Foundation; either version 1, or (at your option)
  1863. X#  any later version.
  1864. X#  This program is distributed in the hope that it will be useful,
  1865. X#  but WITHOUT ANY WARRANTY; without even the implied warranty of
  1866. X#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  1867. X#  GNU General Public License for more details.
  1868. X#  You should have received a copy of the GNU General Public License
  1869. X#  along with CELLULAR-2.0; see the file COPYING.  If not, write to the 
  1870. X#  Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  1871. X# Simulate gas diffusion by `randomly' rotating the cell values in a
  1872. X# Margolus-neighborhood either clockwise or counter-clockwise.  The 
  1873. X# groupings are alternations of the two overlapping square neighborhoods:
  1874. X#            0  1
  1875. X#            2  3  2
  1876. X#               1  0
  1877. X2 dimensions of 
  1878. X    which of 0..3
  1879. X    rand  of 0..1
  1880. X    gas   of 0..1
  1881. X# Calculate the sum of the random fields in the neighborhood.
  1882. random := cell.rand + [1, 0].rand + [1, -1].rand + [0, -1].rand
  1883. X        when (cell.which=0 & time%2=1) | (cell.which=3 & time%2=0)
  1884. X       := [-1, 0].rand + cell.rand + [0, -1].rand + [-1, -1].rand
  1885. X        when (cell.which=1 & time%2=1) | (cell.which=2 & time%2=0)
  1886. X       := [-1, 1].rand + [0, 1].rand + cell.rand + [-1, 0].rand
  1887. X        when (cell.which=3 & time%2=1) | (cell.which=0 & time%2=0)
  1888. X       := [0, 1].rand + [1, 1].rand + [1, 0].rand + cell.rand
  1889. X        otherwise
  1890. X# Alternate between the overlapping neighborhoods
  1891. if time%2 = 1 then
  1892. X    if random%2 = 1 then
  1893. X        # Clockwise rotation
  1894. X        cell.gas := [0, -1].gas when cell.which = 0
  1895. X                 := [-1, 0].gas when cell.which = 1
  1896. X                 := [0, 1].gas when cell.which = 3
  1897. X                 := [1, 0].gas when cell.which = 2
  1898. X    else
  1899. X        # Counter-clockwise rotation
  1900. X        cell.gas := [1, 0].gas when cell.which = 0
  1901. X                 := [0, -1].gas when cell.which = 1
  1902. X                 := [-1, 0].gas when cell.which = 3
  1903. X                 := [0, 1].gas when cell.which = 2
  1904. X    end
  1905. X    if random%2 = 1 then
  1906. X        # Clockwise rotation
  1907. X        cell.gas := [0, -1].gas when cell.which = 3
  1908. X                 := [-1, 0].gas when cell.which = 2
  1909. X                 := [0, 1].gas when cell.which = 0
  1910. X                 := [1, 0].gas when cell.which = 1
  1911. X    else
  1912. X        # Counter-clockwise rotation
  1913. X        cell.gas := [1, 0].gas when cell.which = 3
  1914. X                 := [0, -1].gas when cell.which = 2
  1915. X                 := [-1, 0].gas when cell.which = 0
  1916. X                 := [0, 1].gas when cell.which = 1
  1917. X    end
  1918. X# Stir the random values, so that they keep changing.
  1919. cell.rand := ([1, 0].rand + [0, 1].rand + [-1, 0].rand + [0, -1].rand
  1920. X        + cell.rand)%2
  1921. END_OF_FILE
  1922. if test 2712 -ne `wc -c <'examples/src/gas'`; then
  1923.     echo shar: \"'examples/src/gas'\" unpacked with wrong size!
  1924. # end of 'examples/src/gas'
  1925. if test -f 'examples/src/life' -a "${1}" != "-c" ; then 
  1926.   echo shar: Will not clobber existing file \"'examples/src/life'\"
  1927. echo shar: Extracting \"'examples/src/life'\" \(982 characters\)
  1928. sed "s/^X//" >'examples/src/life' <<'END_OF_FILE'
  1929. X#  life
  1930. X#  Copyright (C) 1992  J Dana Eckart
  1931. X#  This program is free software; you can redistribute it and/or modify
  1932. X#  it under the terms of the GNU General Public License as published by
  1933. X#  the Free Software Foundation; either version 1, or (at your option)
  1934. X#  any later version.
  1935. X#  This program is distributed in the hope that it will be useful,
  1936. X#  but WITHOUT ANY WARRANTY; without even the implied warranty of
  1937. X#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  1938. X#  GNU General Public License for more details.
  1939. X#  You should have received a copy of the GNU General Public License
  1940. X#  along with CELLULAR-2.0; see the file COPYING.  If not, write to the 
  1941. X#  Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  1942. X# This program implements a 2 dimensional game of life.
  1943. X2 dimensions of 0..1
  1944. sum := [0, 1] + [1, 1] + [1, 0] + [-1, 1] + [-1, 0] + [-1, -1]
  1945. X    + [0, -1] + [1, -1]
  1946. cell := 1 when (sum = 2 & cell = 1) | sum = 3
  1947. X     := 0 otherwise
  1948. END_OF_FILE
  1949. if test 982 -ne `wc -c <'examples/src/life'`; then
  1950.     echo shar: \"'examples/src/life'\" unpacked with wrong size!
  1951. # end of 'examples/src/life'
  1952. if test -f 'examples/src/parity' -a "${1}" != "-c" ; then 
  1953.   echo shar: Will not clobber existing file \"'examples/src/parity'\"
  1954. echo shar: Extracting \"'examples/src/parity'\" \(904 characters\)
  1955. sed "s/^X//" >'examples/src/parity' <<'END_OF_FILE'
  1956. X#  parity
  1957. X#  Copyright (C) 1992  J Dana Eckart
  1958. X#  This program is free software; you can redistribute it and/or modify
  1959. X#  it under the terms of the GNU General Public License as published by
  1960. X#  the Free Software Foundation; either version 1, or (at your option)
  1961. X#  any later version.
  1962. X#  This program is distributed in the hope that it will be useful,
  1963. X#  but WITHOUT ANY WARRANTY; without even the implied warranty of
  1964. X#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  1965. X#  GNU General Public License for more details.
  1966. X#  You should have received a copy of the GNU General Public License
  1967. X#  along with CELLULAR-2.0; see the file COPYING.  If not, write to the 
  1968. X#  Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  1969. X# A simple parity program
  1970. X2 dimensions of 0..1
  1971. sum := [0, 1] + [1, 1] + [1, 0] + [-1, 1] + [-1, 0] + [-1, -1]
  1972. X    + [0, -1] + [1, -1]
  1973. cell := sum % 2
  1974. END_OF_FILE
  1975. if test 904 -ne `wc -c <'examples/src/parity'`; then
  1976.     echo shar: \"'examples/src/parity'\" unpacked with wrong size!
  1977. # end of 'examples/src/parity'
  1978. if test -f 'examples/src/srdp' -a "${1}" != "-c" ; then 
  1979.   echo shar: Will not clobber existing file \"'examples/src/srdp'\"
  1980. echo shar: Extracting \"'examples/src/srdp'\" \(1967 characters\)
  1981. sed "s/^X//" >'examples/src/srdp' <<'END_OF_FILE'
  1982. X#  srdp
  1983. X#  Copyright (C) 1992  J Dana Eckart
  1984. X#  This program is free software; you can redistribute it and/or modify
  1985. X#  it under the terms of the GNU General Public License as published by
  1986. X#  the Free Software Foundation; either version 1, or (at your option)
  1987. X#  any later version.
  1988. X#  This program is distributed in the hope that it will be useful,
  1989. X#  but WITHOUT ANY WARRANTY; without even the implied warranty of
  1990. X#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  1991. X#  GNU General Public License for more details.
  1992. X#  You should have received a copy of the GNU General Public License
  1993. X#  along with CELLULAR-2.0; see the file COPYING.  If not, write to the 
  1994. X#  Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  1995. X# scissors (0), rock (1), dynamite (2), paper (3)
  1996. X2 dimensions of 0..2
  1997. X# Get the Moore neighborhood
  1998. north := [0, 1]
  1999. ne := [1, 1]
  2000. east := [1, 0]
  2001. se := [1, -1]
  2002. south := [0, -1]
  2003. sw := [-1, -1]
  2004. west := [-1, 0]
  2005. nw := [-1, 1]
  2006. threshold := 3
  2007. scissors := 0
  2008. rock     := 1
  2009. dynamite := 2
  2010. paper    := 3
  2011. scissors_sum := (north = scissors) + (ne = scissors) + (east = scissors) + 
  2012. X        (se = scissors) + (south = scissors) + (sw = scissors) + 
  2013. X        (west = scissors) + (nw = scissors)
  2014. rock_sum     := (north = rock) + (ne = rock) + (east = rock) + (se = rock) + 
  2015. X        (south = rock) + (sw = rock) + (west = rock) + (nw = rock)
  2016. dynamite_sum := (north = dynamite) + (ne = dynamite) + (east = dynamite) + 
  2017. X        (se = dynamite) + (south = dynamite) + (sw = dynamite) + 
  2018. X        (west = dynamite) + (nw = dynamite)
  2019. paper_sum    := (north = paper) + (ne = paper) + (east = paper) + (se = paper) + 
  2020. X        (south = paper) + (sw = paper) + (west = paper) + (nw = paper)
  2021. X# Find out who lives and who dies.
  2022. cell := scissors when scissors_sum >= threshold & cell = paper
  2023. X     := rock when rock_sum >= threshold & cell = scissors
  2024. X     := dynamite when dynamite_sum >= threshold & cell = rock
  2025. X     := paper when paper_sum >= threshold & cell = dynamite
  2026. END_OF_FILE
  2027. if test 1967 -ne `wc -c <'examples/src/srdp'`; then
  2028.     echo shar: \"'examples/src/srdp'\" unpacked with wrong size!
  2029. # end of 'examples/src/srdp'
  2030. if test -f 'examples/srdp_data_gen.c' -a "${1}" != "-c" ; then 
  2031.   echo shar: Will not clobber existing file \"'examples/srdp_data_gen.c'\"
  2032. echo shar: Extracting \"'examples/srdp_data_gen.c'\" \(1166 characters\)
  2033. sed "s/^X//" >'examples/srdp_data_gen.c' <<'END_OF_FILE'
  2034. X/* srdp_data_gen.c
  2035. X   Copyright (C) 1992  J Dana Eckart
  2036. X   This program is free software; you can redistribute it and/or modify
  2037. X   it under the terms of the GNU General Public License as published by
  2038. X   the Free Software Foundation; either version 1, or (at your option)
  2039. X   any later version.
  2040. X   This program is distributed in the hope that it will be useful,
  2041. X   but WITHOUT ANY WARRANTY; without even the implied warranty of
  2042. X   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  2043. X   GNU General Public License for more details.
  2044. X   You should have received a copy of the GNU General Public License
  2045. X   along with CELLULAR-2.0; see the file COPYING.  If not, write to the 
  2046. X   Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  2047. X/* Generate the input data used by srdp.  A single command line argument
  2048. X   indicates the size of each of two dimensions of the cell universe.
  2049. X#include <stdio.h>
  2050. int main(argc, argv) int argc; char *argv[]; {
  2051. X    int max_size = atoi(argv[1]);
  2052. X    int x, y;
  2053. X    printf("0\n");
  2054. X    for (x = 0; x < max_size; x++)
  2055. X        for (y = 0; y < max_size; y++)
  2056. X            printf("[%d, %d] = %d\n", x, y, random()%4);
  2057. X    return 0;
  2058. END_OF_FILE
  2059. if test 1166 -ne `wc -c <'examples/srdp_data_gen.c'`; then
  2060.     echo shar: \"'examples/srdp_data_gen.c'\" unpacked with wrong size!
  2061. # end of 'examples/srdp_data_gen.c'
  2062. if test ! -d 'viewer' ; then
  2063.     echo shar: Creating directory \"'viewer'\"
  2064.     mkdir 'viewer'
  2065. if test -f 'viewer/Makefile' -a "${1}" != "-c" ; then 
  2066.   echo shar: Will not clobber existing file \"'viewer/Makefile'\"
  2067. echo shar: Extracting \"'viewer/Makefile'\" \(2650 characters\)
  2068. sed "s/^X//" >'viewer/Makefile' <<'END_OF_FILE'
  2069. X#  Makefile
  2070. X#  Copyright (C) 1992  J Dana Eckart
  2071. X#  This program is free software; you can redistribute it and/or modify
  2072. X#  it under the terms of the GNU General Public License as published by
  2073. X#  the Free Software Foundation; either version 1, or (at your option)
  2074. X#  any later version.
  2075. X#  This program is distributed in the hope that it will be useful,
  2076. X#  but WITHOUT ANY WARRANTY; without even the implied warranty of
  2077. X#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  2078. X#  GNU General Public License for more details.
  2079. X#  You should have received a copy of the GNU General Public License
  2080. X#  along with CELLULAR-2.0; see the file COPYING.  If not, write to the 
  2081. X#  Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  2082. X# Installation directories.
  2083. BIN=/usr/local/bin
  2084. LIB=/usr/local/lib/cellular
  2085. MAN=/usr/man/manl
  2086. MAN_EXT=l
  2087. X# If you want to have the Cellang compiler configured to compile the viewer 
  2088. X# into the executables then assign COMBINED the value "1", otherwise assign 
  2089. X# a "0".  This makes for faster display of many automata, though it does need
  2090. X# X11 to run them.
  2091. COMBINED=0    # 0 or 1
  2092. X# Choose a C compiler and options.
  2093. CC = gcc
  2094. CFLAGS = -O -ansi -pedantic 
  2095. CDEFINES= -DLIB_DIR=\"${LIB}\"
  2096. CLIB = -lm -lcurses -ltermcap -lX11
  2097. X# Rules (default.mk on SunOS uses a -target option not supported by GNU C)
  2098. COMPILE.c=$(CC) $(CFLAGS) $(CDEFINES) $(CPPFLAGS) -c
  2099. X# Dependencies
  2100. all: cellview cellview.${MAN_EXT}
  2101. install: all
  2102. X    - mkdir -p ${BIN}
  2103. X    - mkdir -p ${LIB}
  2104. X    - mkdir -p ${MAN}
  2105. X    install cellview ${BIN}/cellview
  2106. X    install -m 644 color-map ${LIB}/color-map
  2107. X    install -m 644 bw-map ${LIB}/bw-map
  2108. X    install -m 644 curses-map ${LIB}/curses-map
  2109. X    install -m 644 cellview.${MAN_EXT} ${MAN}/cellview.${MAN_EXT}
  2110. X    make CC='$(CC)' CFLAGS='$(CFLAGS)' \
  2111. X        CDEFINES='${CDEFINES} -DCOMBINED=${COMBINED}' \
  2112. X        MAN_EXT='${MAN_EXT}' LIB='${LIB}' ${COMBINED}
  2113. deinstall:
  2114. X    /bin/rm -f ${BIN}/cellview
  2115. X    /bin/rm -f ${MAN}/cellview.${MAN_EXT}
  2116. X    /bin/rm -f ${LIB}/color-map
  2117. X    /bin/rm -f ${LIB}/bw-map
  2118. X    /bin/rm -f ${LIB}/curses-map
  2119. X    /bin/rm -f ${LIB}/*.o
  2120. clean:
  2121. X    /bin/rm -f *.o core cellview cellview.${MAN_EXT}
  2122. realclean: clean
  2123. cellview: curses.o x11.o view.o
  2124. X    ${CC} ${CFLAGS} -o cellview *.o ${CLIB}
  2125. cellview.${MAN_EXT}: cellview.man
  2126. X    sed -e 's?LIB_DIR?$(LIB)?' \
  2127. X        -e 's?MAN_EXT?$(MAN_EXT)?g' cellview.man > cellview.${MAN_EXT}
  2128. view.o: view.c view.h curses.h x11.h boolean.h
  2129. curses.o: curses.c curses.h view.h boolean.h
  2130. x11.o: x11.c x11.h view.h boolean.h
  2131. object_files: curses.o x11.o view.o
  2132. X    make clean
  2133. X    make CC='$(CC)' CFLAGS='$(CFLAGS)' CDEFINES='$(CDEFINES)' object_files
  2134. X    install *.o ${LIB}
  2135. X    make clean
  2136. END_OF_FILE
  2137. if test 2650 -ne `wc -c <'viewer/Makefile'`; then
  2138.     echo shar: \"'viewer/Makefile'\" unpacked with wrong size!
  2139. # end of 'viewer/Makefile'
  2140. if test -f 'viewer/README' -a "${1}" != "-c" ; then 
  2141.   echo shar: Will not clobber existing file \"'viewer/README'\"
  2142. echo shar: Extracting \"'viewer/README'\" \(1379 characters\)
  2143. sed "s/^X//" >'viewer/README' <<'END_OF_FILE'
  2144. X#  README
  2145. X#  Copyright (C) 1992  J Dana Eckart
  2146. X#  This program is free software; you can redistribute it and/or modify
  2147. X#  it under the terms of the GNU General Public License as published by
  2148. X#  the Free Software Foundation; either version 1, or (at your option)
  2149. X#  any later version.
  2150. X#  This program is distributed in the hope that it will be useful,
  2151. X#  but WITHOUT ANY WARRANTY; without even the implied warranty of
  2152. X#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  2153. X#  GNU General Public License for more details.
  2154. X#  You should have received a copy of the GNU General Public License
  2155. X#  along with CELLULAR-2.0; see the file COPYING.  If not, write to the 
  2156. X#  Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  2157. To install the cellview cellular automata viewer, edit the Makefile to 
  2158. reflect the proper values of:
  2159. X     BIN     - installation directory for executables
  2160. X     LIB     - installation directory for supporting software
  2161. X     MAN     - installation directory for manual pages
  2162. X     MAX_EXT - manual page extension to use for installation
  2163. Do "make install" to build and install the viewer.  In addition, the 
  2164. Makefile also supports the targets:
  2165. X    all: compile, but not install, the software
  2166. X  deinstall: remove an installation
  2167. X      clean: remove all but the distributed files within this directory
  2168. X  realclean: (same as clean)
  2169. END_OF_FILE
  2170. if test 1379 -ne `wc -c <'viewer/README'`; then
  2171.     echo shar: \"'viewer/README'\" unpacked with wrong size!
  2172. # end of 'viewer/README'
  2173. if test -f 'viewer/boolean.h' -a "${1}" != "-c" ; then 
  2174.   echo shar: Will not clobber existing file \"'viewer/boolean.h'\"
  2175. echo shar: Extracting \"'viewer/boolean.h'\" \(817 characters\)
  2176. sed "s/^X//" >'viewer/boolean.h' <<'END_OF_FILE'
  2177. X/* boolean.h
  2178. X   Copyright (C) 1992  J Dana Eckart
  2179. X   This program is free software; you can redistribute it and/or modify
  2180. X   it under the terms of the GNU General Public License as published by
  2181. X   the Free Software Foundation; either version 1, or (at your option)
  2182. X   any later version.
  2183. X   This program is distributed in the hope that it will be useful,
  2184. X   but WITHOUT ANY WARRANTY; without even the implied warranty of
  2185. X   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  2186. X   GNU General Public License for more details.
  2187. X   You should have received a copy of the GNU General Public License
  2188. X   along with CELLULAR-2.0; see the file COPYING.  If not, write to the 
  2189. X   Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  2190. X#define boolean int
  2191. X#define true     1
  2192. X#define false     0
  2193. END_OF_FILE
  2194. if test 817 -ne `wc -c <'viewer/boolean.h'`; then
  2195.     echo shar: \"'viewer/boolean.h'\" unpacked with wrong size!
  2196. # end of 'viewer/boolean.h'
  2197. if test -f 'viewer/bw-map' -a "${1}" != "-c" ; then 
  2198.   echo shar: Will not clobber existing file \"'viewer/bw-map'\"
  2199. echo shar: Extracting \"'viewer/bw-map'\" \(8 characters\)
  2200. sed "s/^X//" >'viewer/bw-map' <<'END_OF_FILE'
  2201. END_OF_FILE
  2202. if test 8 -ne `wc -c <'viewer/bw-map'`; then
  2203.     echo shar: \"'viewer/bw-map'\" unpacked with wrong size!
  2204. # end of 'viewer/bw-map'
  2205. if test -f 'viewer/color-map' -a "${1}" != "-c" ; then 
  2206.   echo shar: Will not clobber existing file \"'viewer/color-map'\"
  2207. echo shar: Extracting \"'viewer/color-map'\" \(5522 characters\)
  2208. sed "s/^X//" >'viewer/color-map' <<'END_OF_FILE'
  2209. X0        0     0     0
  2210. X1    65535  1542     0
  2211. X2    65535  3084     0
  2212. X3    65535  4626     0
  2213. X4    65535  6168     0
  2214. X5    65535  7710     0
  2215. X6    65535  9252     0
  2216. X7    65535 10794     0
  2217. X8    65535 12336     0
  2218. X9    65535 13878     0
  2219. X10    65535 15420     0
  2220. X11    65535 16962     0
  2221. X12    65535 18504     0
  2222. X13    65535 20046     0
  2223. X14    65535 21588     0
  2224. X15    65535 23130     0
  2225. X16    65535 24672     0
  2226. X17    65535 26214     0
  2227. X18    65535 27756     0
  2228. X19    65535 29298     0
  2229. X20    65535 30840     0
  2230. X21    65535 32382     0
  2231. X22    65535 33924     0
  2232. X23    65535 35466     0
  2233. X24    65535 37008     0
  2234. X25    65535 38550     0
  2235. X26    65535 40092     0
  2236. X27    65535 41634     0
  2237. X28    65535 43176     0
  2238. X29    65535 44718     0
  2239. X30    65535 46260     0
  2240. X31    65535 47802     0
  2241. X32    65535 49344     0
  2242. X33    65535 50886     0
  2243. X34    65535 52428     0
  2244. X35    65535 53970     0
  2245. X36    65535 55512     0
  2246. X37    65535 57054     0
  2247. X38    65535 58596     0
  2248. X39    65535 60138     0
  2249. X40    65535 61680     0
  2250. X41    65535 63222     0
  2251. X42    65535 64764     0
  2252. X43    65535 65535     0
  2253. X44    65535 65535     0
  2254. X45    65535 65535     0
  2255. X46    65535 65535     0
  2256. X47    65535 65535     0
  2257. X48    65535 65535     0
  2258. X49    65535 65535     0
  2259. X50    65535 65535     0
  2260. X51    65535 65535     0
  2261. X52    65535 65535     0
  2262. X53    65535 65535     0
  2263. X54    65535 65535     0
  2264. X55    65535 65535     0
  2265. X56    65535 65535     0
  2266. X57    65535 65535     0
  2267. X58    65535 65535     0
  2268. X59    65535 65535     0
  2269. X60    65535 65535     0
  2270. X61    63993 65535     0
  2271. X62    62451 65535     0
  2272. X63    60909 65535     0
  2273. X64    59367 65535     0
  2274. X65    57825 65535     0
  2275. X66    56283 65535     0
  2276. X67    54741 65535     0
  2277. X68    53199 65535     0
  2278. X69    51657 65535     0
  2279. X70    50115 65535     0
  2280. X71    48573 65535     0
  2281. X72    47031 65535     0
  2282. X73    45489 65535     0
  2283. X74    43947 65535     0
  2284. X75    42405 65535     0
  2285. X76    40863 65535     0
  2286. X77    39321 65535     0
  2287. X78    37779 65535     0
  2288. X79    36237 65535     0
  2289. X80    34695 65535     0
  2290. X81    33153 65535     0
  2291. X82    31611 65535     0
  2292. X83    30069 65535     0
  2293. X84    28527 65535     0
  2294. X85    26985 65535     0
  2295. X86    25443 65535     0
  2296. X87    23901 65535     0
  2297. X88    22359 65535     0
  2298. X89    20817 65535     0
  2299. X90    19275 65535     0
  2300. X91    17733 65535     0
  2301. X92    16191 65535     0
  2302. X93    14649 65535     0
  2303. X94    13107 65535     0
  2304. X95    11565 65535     0
  2305. X96    10023 65535     0
  2306. X97     8481 65535     0
  2307. X98     6939 65535     0
  2308. X99     5397 65535     0
  2309. X100     3855 65535     0
  2310. X101     2313 65535     0
  2311. X102      771 65535     0
  2312. X103        0 65535     0
  2313. X104        0 65535     0
  2314. X105        0 65535     0
  2315. X106        0 65535  1542
  2316. X107        0 65535  3084
  2317. X108        0 65535  4626
  2318. X109        0 65535  6168
  2319. X110        0 65535  7710
  2320. X111        0 65535  9252
  2321. X112        0 65535 10794
  2322. X113        0 65535 12336
  2323. X114        0 65535 13878
  2324. X115        0 65535 15420
  2325. X116        0 65535 16962
  2326. X117        0 65535 18504
  2327. X118        0 65535 20046
  2328. X119        0 65535 21588
  2329. X120        0 65535 23130
  2330. X121        0 65535 24672
  2331. X122        0 65535 26214
  2332. X123        0 65535 27756
  2333. X124        0 65535 29298
  2334. X125        0 65535 30840
  2335. X126        0 65535 32382
  2336. X127        0 65535 33924
  2337. X128        0 65535 35466
  2338. X129        0 65535 37008
  2339. X130        0 65535 38550
  2340. X131        0 65535 40092
  2341. X132        0 65535 41634
  2342. X133        0 65535 43176
  2343. X134        0 65535 44718
  2344. X135        0 65535 46260
  2345. X136        0 65535 47802
  2346. X137        0 65535 49344
  2347. X138        0 65535 50886
  2348. X139        0 65535 52428
  2349. X140        0 65535 53970
  2350. X141        0 65535 55512
  2351. X142        0 65535 57054
  2352. X143        0 65535 58596
  2353. X144        0 65535 60138
  2354. X145        0 65535 61680
  2355. X146        0 65535 63222
  2356. X147        0 65535 64764
  2357. X148        0 65535 65535
  2358. X149        0 65535 65535
  2359. X150        0 65535 65535
  2360. X151        0 65535 65535
  2361. X152        0 65535 65535
  2362. X153        0 65535 65535
  2363. X154        0 65535 65535
  2364. X155        0 65535 65535
  2365. X156        0 65535 65535
  2366. X157        0 65535 65535
  2367. X158        0 65535 65535
  2368. X159        0 65535 65535
  2369. X160        0 65535 65535
  2370. X161        0 65535 65535
  2371. X162        0 65535 65535
  2372. X163        0 65535 65535
  2373. X164        0 65535 65535
  2374. X165        0 65535 65535
  2375. X166        0 63993 65535
  2376. X167        0 62451 65535
  2377. X168        0 60909 65535
  2378. X169        0 59367 65535
  2379. X170        0 57825 65535
  2380. X171        0 56283 65535
  2381. X172        0 54741 65535
  2382. X173        0 53199 65535
  2383. X174        0 51657 65535
  2384. X175        0 50115 65535
  2385. X176        0 48573 65535
  2386. X177        0 47031 65535
  2387. X178        0 45489 65535
  2388. X179        0 43947 65535
  2389. X180        0 42405 65535
  2390. X181        0 40863 65535
  2391. X182        0 39321 65535
  2392. X183        0 37779 65535
  2393. X184        0 36237 65535
  2394. X185        0 34695 65535
  2395. X186        0 33153 65535
  2396. X187        0 31611 65535
  2397. X188        0 30069 65535
  2398. X189        0 28527 65535
  2399. X190        0 26985 65535
  2400. X191        0 25443 65535
  2401. X192        0 23901 65535
  2402. X193        0 22359 65535
  2403. X194        0 20817 65535
  2404. X195        0 19275 65535
  2405. X196        0 17733 65535
  2406. X197        0 16191 65535
  2407. X198        0 14649 65535
  2408. X199        0 13107 65535
  2409. X200        0 11565 65535
  2410. X201        0 10023 65535
  2411. X202        0  8481 65535
  2412. X203        0  6939 65535
  2413. X204        0  5397 65535
  2414. X205        0  3855 65535
  2415. X206        0  2313 65535
  2416. X207        0   771 65535
  2417. X208        0     0 65535
  2418. X209        0     0 65535
  2419. X210        0     0 65535
  2420. X211     1542     0 65535
  2421. X212     3084     0 65535
  2422. X213     4626     0 65535
  2423. X214     6168     0 65535
  2424. X215     7710     0 65535
  2425. X216     9252     0 65535
  2426. X217    10794     0 65535
  2427. X218    12336     0 65535
  2428. X219    13878     0 65535
  2429. X220    15420     0 65535
  2430. X221    16962     0 65535
  2431. X222    18504     0 65535
  2432. X223    20046     0 65535
  2433. X224    21588     0 65535
  2434. X225    23130     0 65535
  2435. X226    24672     0 65535
  2436. X227    26214     0 65535
  2437. X228    27756     0 65535
  2438. X229    29298     0 65535
  2439. X230    30840     0 65535
  2440. X231    32382     0 65535
  2441. X232    33924     0 65535
  2442. X233    35466     0 65535
  2443. X234    37008     0 65535
  2444. X235    38550     0 65535
  2445. X236    40092     0 65535
  2446. X237    41634     0 65535
  2447. X238    43176     0 65535
  2448. X239    44718     0 65535
  2449. X240    46260     0 65535
  2450. X241    47802     0 65535
  2451. X242    49344     0 65535
  2452. X243    50886     0 65535
  2453. X244    52428     0 65535
  2454. X245    53970     0 65535
  2455. X246    55512     0 65535
  2456. X247    57054     0 65535
  2457. X248    58596     0 65535
  2458. X249    60138     0 65535
  2459. X250    61680     0 65535
  2460. X251    63222     0 65535
  2461. X252    64764     0 65535
  2462. X253    65535     0 65535
  2463. X254    65535     0 65535
  2464. X255    65535 65535 65535
  2465. END_OF_FILE
  2466. if test 5522 -ne `wc -c <'viewer/color-map'`; then
  2467.     echo shar: \"'viewer/color-map'\" unpacked with wrong size!
  2468. # end of 'viewer/color-map'
  2469. if test -f 'viewer/curses-map' -a "${1}" != "-c" ; then 
  2470.   echo shar: Will not clobber existing file \"'viewer/curses-map'\"
  2471. echo shar: Extracting \"'viewer/curses-map'\" \(1938 characters\)
  2472. sed "s/^X//" >'viewer/curses-map' <<'END_OF_FILE'
  2473. X0    '-'
  2474. X1    '+'
  2475. X2    'o'
  2476. X3    'x'
  2477. X4    '#'
  2478. X5    '*'
  2479. X6    '+'
  2480. X7    'o'
  2481. X8    'x'
  2482. X9    '#'
  2483. X10    '*'
  2484. X11    '+'
  2485. X12    'o'
  2486. X13    'x'
  2487. X14    '#'
  2488. X15    '*'
  2489. X16    '+'
  2490. X17    'o'
  2491. X18    'x'
  2492. X19    '#'
  2493. X20    '*'
  2494. X21    '+'
  2495. X22    'o'
  2496. X23    'x'
  2497. X24    '#'
  2498. X25    '*'
  2499. X26    '+'
  2500. X27    'o'
  2501. X28    'x'
  2502. X29    '#'
  2503. X30    '*'
  2504. X31    '+'
  2505. X32    'o'
  2506. X33    'x'
  2507. X34    '#'
  2508. X35    '*'
  2509. X36    '+'
  2510. X37    'o'
  2511. X38    'x'
  2512. X39    '#'
  2513. X40    '*'
  2514. X41    '+'
  2515. X42    'o'
  2516. X43    'x'
  2517. X44    '#'
  2518. X45    '*'
  2519. X46    '+'
  2520. X47    'o'
  2521. X48    'x'
  2522. X49    '#'
  2523. X50    '*'
  2524. X51    '+'
  2525. X52    'o'
  2526. X53    'x'
  2527. X54    '#'
  2528. X55    '*'
  2529. X56    '+'
  2530. X57    'o'
  2531. X58    'x'
  2532. X59    '#'
  2533. X60    '*'
  2534. X61    '+'
  2535. X62    'o'
  2536. X63    'x'
  2537. X64    '#'
  2538. X65    '*'
  2539. X66    '+'
  2540. X67    'o'
  2541. X68    'x'
  2542. X69    '#'
  2543. X70    '*'
  2544. X71    '+'
  2545. X72    'o'
  2546. X73    'x'
  2547. X74    '#'
  2548. X75    '*'
  2549. X76    '+'
  2550. X77    'o'
  2551. X78    'x'
  2552. X79    '#'
  2553. X80    '*'
  2554. X81    '+'
  2555. X82    'o'
  2556. X83    'x'
  2557. X84    '#'
  2558. X85    '*'
  2559. X86    '+'
  2560. X87    'o'
  2561. X88    'x'
  2562. X89    '#'
  2563. X90    '*'
  2564. X91    '+'
  2565. X92    'o'
  2566. X93    'x'
  2567. X94    '#'
  2568. X95    '*'
  2569. X96    '+'
  2570. X97    'o'
  2571. X98    'x'
  2572. X99    '#'
  2573. X100    '*'
  2574. X101    '+'
  2575. X102    'o'
  2576. X103    'x'
  2577. X104    '#'
  2578. X105    '*'
  2579. X106    '+'
  2580. X107    'o'
  2581. X108    'x'
  2582. X109    '#'
  2583. X110    '*'
  2584. X111    '+'
  2585. X112    'o'
  2586. X113    'x'
  2587. X114    '#'
  2588. X115    '*'
  2589. X116    '+'
  2590. X117    'o'
  2591. X118    'x'
  2592. X119    '#'
  2593. X120    '*'
  2594. X121    '+'
  2595. X122    'o'
  2596. X123    'x'
  2597. X124    '#'
  2598. X125    '*'
  2599. X126    '+'
  2600. X127    'o'
  2601. X128    'x'
  2602. X129    '#'
  2603. X130    '*'
  2604. X131    '+'
  2605. X132    'o'
  2606. X133    'x'
  2607. X134    '#'
  2608. X135    '*'
  2609. X136    '+'
  2610. X137    'o'
  2611. X138    'x'
  2612. X139    '#'
  2613. X140    '*'
  2614. X141    '+'
  2615. X142    'o'
  2616. X143    'x'
  2617. X144    '#'
  2618. X145    '*'
  2619. X146    '+'
  2620. X147    'o'
  2621. X148    'x'
  2622. X149    '#'
  2623. X150    '*'
  2624. X151    '+'
  2625. X152    'o'
  2626. X153    'x'
  2627. X154    '#'
  2628. X155    '*'
  2629. X156    '+'
  2630. X157    'o'
  2631. X158    'x'
  2632. X159    '#'
  2633. X160    '*'
  2634. X161    '+'
  2635. X162    'o'
  2636. X163    'x'
  2637. X164    '#'
  2638. X165    '*'
  2639. X166    '+'
  2640. X167    'o'
  2641. X168    'x'
  2642. X169    '#'
  2643. X170    '*'
  2644. X171    '+'
  2645. X172    'o'
  2646. X173    'x'
  2647. X174    '#'
  2648. X175    '*'
  2649. X176    '+'
  2650. X177    'o'
  2651. X178    'x'
  2652. X179    '#'
  2653. X180    '*'
  2654. X181    '+'
  2655. X182    'o'
  2656. X183    'x'
  2657. X184    '#'
  2658. X185    '*'
  2659. X186    '+'
  2660. X187    'o'
  2661. X188    'x'
  2662. X189    '#'
  2663. X190    '*'
  2664. X191    '+'
  2665. X192    'o'
  2666. X193    'x'
  2667. X194    '#'
  2668. X195    '*'
  2669. X196    '+'
  2670. X197    'o'
  2671. X198    'x'
  2672. X199    '#'
  2673. X200    '*'
  2674. X201    '+'
  2675. X202    'o'
  2676. X203    'x'
  2677. X204    '#'
  2678. X205    '*'
  2679. X206    '+'
  2680. X207    'o'
  2681. X208    'x'
  2682. X209    '#'
  2683. X210    '*'
  2684. X211    '+'
  2685. X212    'o'
  2686. X213    'x'
  2687. X214    '#'
  2688. X215    '*'
  2689. X216    '+'
  2690. X217    'o'
  2691. X218    'x'
  2692. X219    '#'
  2693. X220    '*'
  2694. X221    '+'
  2695. X222    'o'
  2696. X223    'x'
  2697. X224    '#'
  2698. X225    '*'
  2699. X226    '+'
  2700. X227    'o'
  2701. X228    'x'
  2702. X229    '#'
  2703. X230    '*'
  2704. X231    '+'
  2705. X232    'o'
  2706. X233    'x'
  2707. X234    '#'
  2708. X235    '*'
  2709. X236    '+'
  2710. X237    'o'
  2711. X238    'x'
  2712. X239    '#'
  2713. X240    '*'
  2714. X241    '+'
  2715. X242    'o'
  2716. X243    'x'
  2717. X244    '#'
  2718. X245    '*'
  2719. X246    '+'
  2720. X247    'o'
  2721. X248    'x'
  2722. X249    '#'
  2723. X250    '*'
  2724. X251    '+'
  2725. X252    'o'
  2726. X253    'x'
  2727. X254    '#'
  2728. X255    '*'
  2729. END_OF_FILE
  2730. if test 1938 -ne `wc -c <'viewer/curses-map'`; then
  2731.     echo shar: \"'viewer/curses-map'\" unpacked with wrong size!
  2732. # end of 'viewer/curses-map'
  2733. if test -f 'viewer/curses.c' -a "${1}" != "-c" ; then 
  2734.   echo shar: Will not clobber existing file \"'viewer/curses.c'\"
  2735. echo shar: Extracting \"'viewer/curses.c'\" \(4139 characters\)
  2736. sed "s/^X//" >'viewer/curses.c' <<'END_OF_FILE'
  2737. X/* curses.c
  2738. X   Copyright (C) 1992  J Dana Eckart
  2739. X   This program is free software; you can redistribute it and/or modify
  2740. X   it under the terms of the GNU General Public License as published by
  2741. X   the Free Software Foundation; either version 1, or (at your option)
  2742. X   any later version.
  2743. X   This program is distributed in the hope that it will be useful,
  2744. X   but WITHOUT ANY WARRANTY; without even the implied warranty of
  2745. X   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  2746. X   GNU General Public License for more details.
  2747. X   You should have received a copy of the GNU General Public License
  2748. X   along with CELLULAR-2.0; see the file COPYING.  If not, write to the 
  2749. X   Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  2750. X#include <stdio.h>
  2751. X#include <stdlib.h>
  2752. X#include <malloc.h>
  2753. X#include <string.h>
  2754. X#include <curses.h>
  2755. X#include "view.h"
  2756. X#include "boolean.h"
  2757. X/* The ratio of the number of columns/lines to be used to make a reasonablly
  2758. X   nice (squarish) display.
  2759. X#define aspect_ratio    2
  2760. X/* When exiting curses, move the cursor to the bottom of the screen, 
  2761. X   refresh the screen and exit.
  2762. void finish_curses() {
  2763. X    erase();
  2764. X    refresh();
  2765. X    echo();
  2766. X    nl();
  2767. X    move(0, 0);
  2768. X    refresh();
  2769. X    endwin();
  2770. X/* Updates a single cell in the display, but no refresh is done.  Use 
  2771. X   the lower left hand corner of the screen as the origin.
  2772. void update_curses(x, y, c) long int x, y; char c; {
  2773. X    int i = x - lower[range_dim_1_index];
  2774. X    int j = y - lower[range_dim_2_index];
  2775. X    /* Ignore moves off of the screen area and remember to save
  2776. X       the extra line for printing the time step value. 
  2777. X          if (ERR != move(LINES-j-2, i*aspect_ratio))
  2778. X               addch(c);
  2779. X/* Display all the cell_vals in the universe. */
  2780. void display_curses_cells() {
  2781. X        refresh();
  2782. X/* Does the necessary setup so that everything works correctly. */
  2783. void setup_curses(map_name) char *map_name; {
  2784. X    /* The "real" curses setup. */
  2785. X    initscr();
  2786. X    noecho();
  2787. X    /* Make sure the desired cell_vals will fit in a curses view of
  2788. X       the world.  Unfortunately, this view is limited because
  2789. X       stdin is already being used to get the cell values from,
  2790. X       and thus cannot be used to get commands for moving the
  2791. X       window into the cellular universe around.  Remember to
  2792. X       save an extra line for displaying the time step.
  2793. X    if (range[range_dim_1_index]*aspect_ratio-1 > COLS) {
  2794. X        fprintf(stderr, 
  2795. X            "First dimension is limited to %d indices.\n",
  2796. X            COLS/aspect_ratio);
  2797. X        finish_curses();
  2798. X        exit(1);
  2799. X    if (range_dim_given == 2 && range[range_dim_2_index] > LINES-1) {
  2800. X        fprintf(stderr, 
  2801. X            "Second dimension is limited to %d indices.\n",
  2802. X            LINES-1);
  2803. X        finish_curses();
  2804. X        exit(1);
  2805. X    /* If a map file was given, read it; otherwise use the default. */
  2806. X    if (NULL == map_name) {
  2807. X        char *default_file = "curses-map";
  2808. X        map_name = (char*) malloc((unsigned int) (strlen(LIB_DIR) + 
  2809. X                        strlen(default_file) + 2));
  2810. X        if (NULL == map_name)
  2811. X            error("Out of memory", (char*) NULL);
  2812. X        sprintf(map_name, "%s/%s", LIB_DIR, default_file);
  2813. X    read_map(map_name, MAX_MAP_SIZE);
  2814. X/* Display the cell_vals visible within the curses window. */
  2815. void display_curses (field) int field; {
  2816. X    long int i, j;
  2817. X    /* Initialize the curses positions to the character values. */
  2818. X    for (i = lower[range_dim_1_index]; i <= upper[range_dim_1_index]; i++)
  2819. X        for (j = lower[range_dim_2_index]; j <= upper[range_dim_2_index]; j++)
  2820. X            update_curses(i, j, (char)
  2821. X                      map_value(cell_vals[(i - 
  2822. X                        lower[range_dim_1_index]) *
  2823. X                        range[range_dim_2_index] +
  2824. X                        j - lower[range_dim_2_index]]));
  2825. X    display_curses_cells();
  2826. X    while (1) {
  2827. X#if !COMBINED
  2828. X        if (next_time >= 0) 
  2829. X#endif
  2830. X            char string[MAX_STRING_SIZE];
  2831. X            /* Write out the current time step. */
  2832. X            sprintf(string, "time = %d", _time);
  2833. X            move(LINES-1, 0);
  2834. X            addstr(string);
  2835. X            /* Read and display the cell_vals. */
  2836. X#if COMBINED
  2837. X            cellang_main(false, field);
  2838. X#else
  2839. X            read_cell_block();
  2840. X#endif
  2841. X            display_curses_cells();
  2842. X#if !COMBINED
  2843. X            if (next_time >= 0) _time++;
  2844. X#endif
  2845. X            /* Pause times of 0 or less are ignored. */
  2846. X            if (pause_time > 0) sleep((unsigned int) pause_time);
  2847. END_OF_FILE
  2848. if test 4139 -ne `wc -c <'viewer/curses.c'`; then
  2849.     echo shar: \"'viewer/curses.c'\" unpacked with wrong size!
  2850. # end of 'viewer/curses.c'
  2851. if test -f 'viewer/curses.h' -a "${1}" != "-c" ; then 
  2852.   echo shar: Will not clobber existing file \"'viewer/curses.h'\"
  2853. echo shar: Extracting \"'viewer/curses.h'\" \(878 characters\)
  2854. sed "s/^X//" >'viewer/curses.h' <<'END_OF_FILE'
  2855. X/* curses.h
  2856. X   Copyright (C) 1992  J Dana Eckart
  2857. X   This program is free software; you can redistribute it and/or modify
  2858. X   it under the terms of the GNU General Public License as published by
  2859. X   the Free Software Foundation; either version 1, or (at your option)
  2860. X   any later version.
  2861. X   This program is distributed in the hope that it will be useful,
  2862. X   but WITHOUT ANY WARRANTY; without even the implied warranty of
  2863. X   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  2864. X   GNU General Public License for more details.
  2865. X   You should have received a copy of the GNU General Public License
  2866. X   along with CELLULAR-2.0; see the file COPYING.  If not, write to the 
  2867. X   Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  2868. extern void finsih_curses();
  2869. extern void setup_curses();
  2870. extern void display_curses();
  2871. extern void update_curses();
  2872. END_OF_FILE
  2873. if test 878 -ne `wc -c <'viewer/curses.h'`; then
  2874.     echo shar: \"'viewer/curses.h'\" unpacked with wrong size!
  2875. # end of 'viewer/curses.h'
  2876. if test -f 'viewer/view.h' -a "${1}" != "-c" ; then 
  2877.   echo shar: Will not clobber existing file \"'viewer/view.h'\"
  2878. echo shar: Extracting \"'viewer/view.h'\" \(1823 characters\)
  2879. sed "s/^X//" >'viewer/view.h' <<'END_OF_FILE'
  2880. X/* view.h
  2881. X   Copyright (C) 1992  J Dana Eckart
  2882. X   This program is free software; you can redistribute it and/or modify
  2883. X   it under the terms of the GNU General Public License as published by
  2884. X   the Free Software Foundation; either version 1, or (at your option)
  2885. X   any later version.
  2886. X   This program is distributed in the hope that it will be useful,
  2887. X   but WITHOUT ANY WARRANTY; without even the implied warranty of
  2888. X   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  2889. X   GNU General Public License for more details.
  2890. X   You should have received a copy of the GNU General Public License
  2891. X   along with CELLULAR-2.0; see the file COPYING.  If not, write to the 
  2892. X   Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  2893. X#include <stdio.h>
  2894. X#include <strings.h>
  2895. X#include "boolean.h"
  2896. X#define MAX_STRING_SIZE    256
  2897. X#define MAX_MAP_SIZE    256
  2898. X/* Contains the current time. */
  2899. extern unsigned long int _time;
  2900. X#if !COMBINED
  2901. X/* Contains the next time at which to read data. */
  2902. extern long int next_time;
  2903. X#endif
  2904. X/* Time to pause between time steps, in order to slow things down. */
  2905. extern long int pause_time;
  2906. X/* The cellular universe which contains the colors/characters that
  2907. X   correspond to the cell values which are read.
  2908. typedef long int celltype;
  2909. extern celltype *cell_vals;
  2910. X/* The following variables are the lower and upper bounds of the
  2911. X   dimensions to display.
  2912. X#define MAX_DIMS    256
  2913. extern int dim_given, range_dim_given, range_dim_1_index, range_dim_2_index;
  2914. extern long int lower[], upper[], range[];
  2915. X/* Holds the number of character/color map entries given. */
  2916. extern int max_map_entry;
  2917. extern void read_cell_block();
  2918. extern void read_map();
  2919. extern void error();
  2920. extern celltype map_value();
  2921. X#if COMBINED
  2922. X    extern void cellang_main();
  2923. X    extern void init_cells();
  2924. X#endif
  2925. END_OF_FILE
  2926. if test 1823 -ne `wc -c <'viewer/view.h'`; then
  2927.     echo shar: \"'viewer/view.h'\" unpacked with wrong size!
  2928. # end of 'viewer/view.h'
  2929. if test -f 'viewer/x11.h' -a "${1}" != "-c" ; then 
  2930.   echo shar: Will not clobber existing file \"'viewer/x11.h'\"
  2931. echo shar: Extracting \"'viewer/x11.h'\" \(891 characters\)
  2932. sed "s/^X//" >'viewer/x11.h' <<'END_OF_FILE'
  2933. X/* x11.h
  2934. X   Copyright (C) 1992  J Dana Eckart
  2935. X   This program is free software; you can redistribute it and/or modify
  2936. X   it under the terms of the GNU General Public License as published by
  2937. X   the Free Software Foundation; either version 1, or (at your option)
  2938. X   any later version.
  2939. X   This program is distributed in the hope that it will be useful,
  2940. X   but WITHOUT ANY WARRANTY; without even the implied warranty of
  2941. X   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  2942. X   GNU General Public License for more details.
  2943. X   You should have received a copy of the GNU General Public License
  2944. X   along with CELLULAR-2.0; see the file COPYING.  If not, write to the 
  2945. X   Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  2946. extern celltype setcolor();
  2947. extern void finish_x11();
  2948. extern void setup_x11();
  2949. extern void display_x11();
  2950. extern void update_x11();
  2951. END_OF_FILE
  2952. if test 891 -ne `wc -c <'viewer/x11.h'`; then
  2953.     echo shar: \"'viewer/x11.h'\" unpacked with wrong size!
  2954. # end of 'viewer/x11.h'
  2955. echo shar: End of archive 1 \(of 3\).
  2956. cp /dev/null ark1isdone
  2957. MISSING=""
  2958. for I in 1 2 3 ; do
  2959.     if test ! -f ark${I}isdone ; then
  2960.     MISSING="${MISSING} ${I}"
  2961.     fi
  2962. if test "${MISSING}" = "" ; then
  2963.     echo You have unpacked all 3 archives.
  2964.     rm -f ark[1-9]isdone
  2965.     echo You still need to unpack the following archives:
  2966.     echo "        " ${MISSING}
  2967. ##  End of shell archive.
  2968. exit 0
  2969.