REPOST: v18i001: planet - planet generation simulator, Part01/04
Dave Allen
allen at viewlogic.com
Tue Apr 9 14:16:48 AEST 1991
Submitted-by: Dave Allen <allen at viewlogic.com>
Posting-number: Volume 18, Issue 1
Archive-name: planet/part01
Supersedes: tec: Volume 10, Issue 77-78
[After I took the time to repackage this up due to a problem creating the
directories during unsharing, I went ahead and posted the original version
and removed my repackaged version... Lets try it again... -Kent+]
This is version 1 of a scientific planet generator (as opposed to a
die-rolling planet generator). It is written in C and runs in graphics
mode under Xwindows, or in text-only mode under UN*X. There are three
programs:
- tec: a continental drift simulator
- clim: a climate generator
- globe: computes and displays a rotating planet
Dave
----
#! /bin/sh
# This is a shell archive. Remove anything before this line, then feed it
# into a shell via "sh file" or similar. To overwrite existing files,
# type "sh file -c".
# The tool that generated this appeared in the comp.sources.unix newsgroup;
# send mail to comp-sources-unix at uunet.uu.net if you want that tool.
# Contents: . ./doc ./example ./example/globe.in ./src ./src/Makefile
# ./src/rain.c
# Wrapped by kent at sparky on Mon Apr 8 22:39:14 1991
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
echo If this archive is complete, you will see the following message:
echo ' "shar: End of archive 1 (of 4)."'
if test ! -d './doc' ; then
echo shar: Creating directory \"'./doc'\"
mkdir './doc'
fi
if test ! -d './example' ; then
echo shar: Creating directory \"'./example'\"
mkdir './example'
fi
if test -f './example/globe.in' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'./example/globe.in'\"
else
echo shar: Extracting \"'./example/globe.in'\" \(40677 characters\)
sed "s/^X//" >'./example/globe.in' <<'END_OF_FILE'
X(LAND (
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 1 1 2
X 2 2 2 2 2 2 2 2 2 2 2 2 1 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 1 2 3 3 3 3 3 3 3 3
X 3 3 3 3 3 3 3 3 3 3 3 3 3 2 1
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 1 4 4 3 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
X 3 18 22 22 22 22 22 22 22 22 22 22 22 22 22
X 22 22 22 22 23 24 26 25 23 6 3 1 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 1 5 10 31 26
X 8 4 3 3 3 3 3 3 2 1 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 2 19 24 27 29 29
X 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29
X 29 32 31 31 25 24 1 0 0 4 5 5 1 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 5 30 35 38 35 30 25 23 23 24
X 24 24 20 17 2 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 3 23 28 31 32 32 32 32 32 32 32
X 32 32 32 32 32 32 32 32 34 34 34 34 35 36 29
X 9 1 0 4 13 29 35 10 5 1 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 10 38 48 45 40 32 32 31 31 27 26 27 24 21 3
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3
X 25 29 33 34 35 35 35 35 35 35 35 35 35 35 35
X 35 35 34 34 35 36 37 39 39 30 9 0 0 8 30
X 40 42 35 35 10 5 1 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 2 17 43 51 49 43
X 35 33 32 32 33 34 33 29 23 18 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 3 27 31 35 37 37
X 37 37 37 37 37 37 37 37 37 37 37 37 36 36 36
X 36 37 38 36 27 6 0 0 11 33 47 48 45 44 37
X 35 10 5 1 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 6 37 48 57 47 43 37 37 37 38 34
X 33 32 31 26 20 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 3 26 32 35 38 38 38 38 38 38 38
X 38 38 38 38 38 38 38 39 38 38 38 38 37 31 12
X 3 0 3 13 36 44 43 48 48 47 45 37 32 7 2
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 2 13
X 43 53 55 47 44 39 38 36 37 38 39 36 32 26 22
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3
X 25 33 35 40 40 40 40 40 40 40 40 40 40 40 40
X 40 40 39 40 40 39 39 38 30 9 0 0 6 28 39
X 43 44 46 47 49 51 52 44 31 7 1 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 6 34 48 54 51 45 43
X 39 39 40 40 40 40 35 33 25 22 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 3 27 33 35 39 39
X 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39
X 40 40 40 31 9 0 0 9 33 42 44 45 43 46 47
X 52 56 53 43 32 5 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 2 13 40 49 55 49 45 41 39 38 38 37 37
X 36 35 33 27 22 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 3 26 31 34 37 37 37 37 37 37 37
X 37 37 37 37 37 37 37 37 37 38 39 39 39 32 9
X 0 0 10 34 44 42 43 43 44 45 51 57 57 52 36
X 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 1 5 11 36 42
X 49 48 42 41 39 37 36 37 36 37 37 35 30 26 20
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3
X 24 29 32 34 34 34 34 34 34 34 34 34 34 34 34
X 34 35 36 37 38 38 38 40 33 9 0 0 11 31 43
X 44 44 43 43 44 52 58 59 55 37 10 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 1 5 10 32 32 40 44 43 41 41 38 37
X 35 35 34 33 32 33 31 28 24 3 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 3 23 28 29 31 31
X 31 31 31 31 31 31 31 31 32 33 34 35 35 35 35
X 37 39 40 34 9 0 0 12 34 46 46 45 43 43 45
X 52 56 59 49 32 6 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 2 7 32
X 34 38 44 41 41 40 39 37 36 35 34 33 32 33 34
X 32 31 27 23 3 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 3 21 26 29 30 31 31 31 31 31 31
X 31 31 32 33 31 33 33 33 33 36 38 40 40 33 9
X 0 0 12 32 44 44 43 42 42 47 53 60 57 42 13
X 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 2 9 32 42 44 45 41 38 38
X 38 37 35 34 33 32 31 31 29 29 28 28 25 21 3
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3
X 20 23 28 28 28 28 28 28 28 28 29 30 31 31 31
X 31 32 34 35 36 38 40 40 33 9 0 0 11 31 42
X 40 39 38 38 47 54 62 54 38 8 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 6 30 40 47 46 44 40 38 36 35 35 34 32 31
X 30 30 31 30 30 28 27 24 19 3 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 3 20 22 25 25 25
X 25 25 25 26 27 29 30 31 31 32 33 34 35 36 37
X 39 39 41 31 9 0 0 10 33 40 41 40 37 39 46
X 52 60 54 38 8 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 11 39 48 53
X 46 43 39 37 36 36 35 34 32 31 31 28 28 27 27
X 27 26 24 19 3 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 3 21 24 28 30 31 31 31 31 31 32
X 32 32 32 32 33 34 36 37 38 39 39 39 39 29 9
X 0 0 8 28 35 36 35 34 34 41 53 58 58 42 13
X 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 14 40 52 51 46 42 39 38 37
X 38 35 33 33 32 30 30 29 27 26 26 26 22 19 3
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3
X 22 26 29 29 30 31 31 31 31 31 31 32 33 34 35
X 35 37 39 38 37 38 37 37 28 9 0 0 7 29 35
X 33 33 33 34 38 45 52 58 49 33 6 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 12 35 50 49 47 42 40 39 40 39 37 35 34 33
X 32 31 32 31 31 31 28 24 21 3 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 3 23 26 31 34 35
X 36 36 37 37 37 37 36 35 35 36 37 38 37 37 36
X 37 36 35 26 8 0 0 6 27 32 31 30 31 31 35
X 41 54 56 55 41 12 1 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 7 30 41 45
X 48 43 43 43 41 39 39 38 36 35 33 32 32 31 31
X 30 28 27 22 3 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 3 23 27 31 33 34 35 35 36 36 36
X 36 36 36 37 37 37 36 36 34 35 35 34 33 27 7
X 0 0 6 24 30 29 28 30 30 33 37 48 55 61 46
X 33 3 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 2 7 31 36 40 47 47 47 45
X 43 40 38 38 36 36 37 38 37 37 37 34 30 26 21
X 1 0 0 0 0 0 0 0 0 0 0 0 0 0 3
X 22 28 31 36 38 38 39 39 39 39 38 38 39 38 37
X 35 35 34 34 34 33 32 31 25 6 0 0 6 23 28
X 29 30 31 30 32 35 44 53 58 51 37 7 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 1 5 12 33 40 46 51 47 45 43 40 40 38
X 37 36 36 36 36 36 35 33 28 21 2 0 0 0 0
X 0 0 0 0 0 0 0 0 0 3 21 27 32 36 39
X 38 40 40 40 41 41 41 39 37 35 34 33 32 32 32
X 31 30 30 25 6 0 0 6 24 31 31 29 29 28 31
X 34 38 51 59 57 41 12 1 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2
X 9 33 43 50 52 48 45 42 40 40 40 39 39 40 40
X 41 39 35 31 24 4 1 0 0 0 0 0 0 0 0
X 0 0 0 0 2 20 25 32 35 39 40 39 39 40 40
X 41 40 38 36 34 32 32 31 29 30 31 31 30 25 4
X 0 0 6 25 30 29 28 27 27 28 31 37 46 53 59
X 49 37 5 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 2 9 33 42 48
X 50 47 45 43 41 41 40 40 41 41 40 38 38 33 25
X 19 2 0 0 0 0 0 0 0 0 0 0 0 0 3
X 23 28 31 35 38 38 38 37 36 37 36 37 38 35 34
X 32 30 29 30 30 32 32 27 8 2 0 2 8 25 28
X 27 26 25 25 26 29 32 40 51 59 54 41 11 1 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 2 9 33 43 49 47 45 44 43
X 40 39 40 41 41 41 41 38 33 26 21 3 0 0 0
X 0 0 0 0 0 0 0 0 0 2 18 26 29 33 35
X 36 37 38 38 38 38 37 36 35 33 33 32 32 31 31
X 31 30 23 6 0 0 3 20 26 27 26 24 23 23 26
X 27 34 37 48 56 58 50 35 5 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 2 7 33 38 45 50 45 44 42 41 40 39 39
X 38 39 37 33 25 20 2 0 0 0 0 0 0 0 0
X 0 0 0 0 2 4 25 28 31 33 34 35 36 35 34
X 33 32 31 31 32 32 32 31 31 29 29 28 22 5 0
X 0 4 23 25 25 24 23 22 22 25 26 31 34 42 53
X 59 55 37 9 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 1 5
X 14 34 41 45 47 44 43 41 41 38 37 37 34 31 26
X 22 2 0 0 0 0 0 0 0 0 0 0 0 0 0
X 1 21 23 29 31 32 34 34 34 35 34 33 32 31 31
X 30 30 29 28 28 27 26 23 4 0 0 3 22 24 23
X 22 22 22 22 24 27 29 34 40 51 56 57 41 12 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 4 11 32 40 45
X 47 46 44 43 39 39 35 33 30 25 21 2 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 3 23 26 29
X 30 31 32 31 30 30 30 30 30 29 29 28 27 27 26
X 25 25 21 3 0 0 3 20 22 22 22 22 22 22 24
X 28 29 33 39 52 54 52 36 9 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
X 0 0 0 0 0 0 2 7 33 36 42 46 48 44 41
X 40 35 35 29 26 21 3 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 2 18 24 26 29 29 30 31 31
X 30 29 29 28 27 26 26 26 25 24 23 23 19 3 0
X 0 3 19 22 22 22 22 22 22 24 28 28 37 46 51
X 53 44 32 5 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 1 5 20 23 3 0 0 0 0
X 0 0 1 5 12 34 41 46 49 43 40 36 32 29 27
X 20 3 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 1 3 21 24 26 28 28 27 26 25 26 27 27 27
X 26 25 24 23 22 22 22 19 3 0 0 3 19 22 22
X 22 22 22 22 23 28 29 38 46 53 49 35 7 1 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 1 3 23 22 19 3 0 0 0 0 0 0 0 0 2
X 9 33 42 46 46 43 38 34 31 29 21 4 1 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 2 22 22
X 25 25 25 25 27 26 25 25 25 25 24 23 22 22 22
X 22 21 18 2 0 0 3 19 22 22 22 22 22 22 24
X 28 33 44 53 59 46 17 3 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 1 4 23 26 26 7
X 3 0 0 0 0 0 0 0 0 0 2 9 32 41 44
X 43 38 36 31 26 23 17 2 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 1 17 20 23 22 22 22 23
X 23 23 22 22 22 22 22 22 22 22 22 20 4 1 0
X 1 4 20 22 22 22 22 22 22 24 25 31 40 51 56
X 47 36 5 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 2 25 30 29 7 2 0 0 0 0 0
X 0 0 0 0 0 0 2 7 32 34 39 41 36 33 28
X 24 18 3 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 1 19 19 22 22 22 22 22 22 22 22 22 22
X 22 22 22 22 22 22 19 3 0 0 2 18 21 22 22
X 22 22 22 22 24 25 31 38 48 53 54 41 14 4 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4
X 33 36 38 26 5 2 1 0 0 0 0 0 0 0 0
X 0 0 1 5 11 29 32 33 33 27 23 20 5 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 18 19
X 21 21 21 22 22 22 22 22 22 22 22 22 22 22 22
X 22 19 3 0 0 3 19 22 22 22 22 22 22 22 23
X 27 28 34 42 50 54 53 37 10 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 10 40 44 44 33 29
X 23 6 4 2 1 0 0 0 0 0 0 0 0 0 2
X 6 11 30 23 6 6 14 4 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 19 19 18 19 21 21
X 22 22 22 22 22 22 22 22 22 22 22 19 3 0 0
X 3 19 22 22 22 22 22 22 22 23 25 29 30 38 47
X 54 58 48 35 1 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 17 43 56 50 40 35 30 26 24 21 3
X 1 0 0 0 0 0 0 0 0 0 0 1 4 4 3
X 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 19 19 19 21 21 21 22 22
X 22 22 22 22 22 21 18 2 0 0 3 19 22 22 22
X 22 23 23 24 25 25 29 31 34 42 53 59 54 40 5
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 23
X 49 65 55 48 44 38 37 30 28 23 4 1 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 19 19 18 19 20 20 20 21 21 22 23
X 22 4 1 0 1 4 23 25 25 25 25 25 25 25 26
X 27 28 31 36 40 51 57 58 46 8 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 24 52 71 63 55 50
X 44 43 36 34 27 24 3 1 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 19 19 17 18 19 18 19 20 18 2 0 0 1
X 18 21 21 21 21 22 24 26 27 28 28 30 32 35 41
X 52 57 54 40 8 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 25 56 75 68 61 56 51 48 42 40 34
X 29 22 2 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 1 18 19 20 19 1 0 0 1 19 19 19 20 18
X 19 23 24 26 29 29 31 32 36 44 51 58 48 35 5
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 26
X 56 79 73 65 61 57 53 49 42 37 31 26 22 1 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 1 2 20 19 23 23 26
X 27 28 31 39 47 53 52 38 11 1 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 27 59 80 77 72 68
X 62 59 54 48 43 37 31 24 5 2 1 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 1 3 18 21 21 24 27 31 38 44
X 47 42 31 5 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 27 61 86 83 76 73 69 62 57 49 43
X 37 32 26 23 18 3 1 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 1 2 3 20 23 20 25 31 36 35 33 6 1 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 28
X 63 89 88 84 82 77 71 62 54 45 40 34 28 27 24
X 18 2 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 1 2 5 9 28 10 5 1 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 29 62 93 93 91 88
X 84 75 65 56 47 40 36 31 29 24 23 22 1 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1
X 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 28 60 90 91 90 89 85 80 65 55 44
X 40 35 32 30 27 24 21 21 2 1 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 20
X 54 80 78 79 76 86 79 68 54 43 41 34 34 29 28
X 26 24 20 17 2 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 2 4 24 23 6 3 1 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 11 45 57 62 52 60
X 79 68 68 50 43 40 34 33 29 28 27 25 23 20 19
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 1 5 23 28 29
X 27 24 4 1 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 4 34 44 47 48 47 67 66 67 50 42
X 38 35 34 28 27 26 26 24 21 21 18 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 1 4 27 32 35 38 35 31 25 3 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4
X 27 36 40 44 44 59 57 62 48 42 38 35 33 27 27
X 25 25 24 22 21 19 19 19 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2
X 21 27 35 42 43 41 37 29 7 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 4 25 34 35 37 39
X 56 55 59 45 41 41 36 32 30 25 22 22 22 22 22
X 21 21 19 19 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 3 26 35 41 45 47
X 46 40 35 25 2 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 6 27 31 36 37 38 48 47 59 45 42
X 40 37 31 28 25 22 22 22 22 22 22 22 22 19 19
X 19 19 19 1 1 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 1 5 27 35 42 47 50 47 42 38 29 4
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4
X 24 33 33 31 27 26 42 50 47 46 41 39 32 29 25
X 22 22 22 22 22 22 22 22 21 21 21 21 19 19 20
X 20 3 3 2 1 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 2 21
X 28 37 44 46 48 48 43 37 29 4 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 3 7 24 24 11 6
X 10 30 36 41 41 44 39 33 30 25 22 22 22 22 22
X 22 22 22 22 22 22 23 24 24 23 20 20 18 17 4
X 2 1 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 1 5 26 33 39 43 46 48
X 45 41 34 24 4 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 3 6 6 3 0 1 5 10 39 44
X 48 41 34 30 25 22 22 22 22 22 22 22 23 24 25
X 25 25 23 23 26 27 27 26 25 23 21 4 3 2 1
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 1 2 22 24 27 33 37 43 43 45 42 36 30 7 2
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 1 10 36 42 40 35 30 25
X 22 22 22 22 23 24 25 26 25 26 28 28 30 31 30
X 29 29 30 29 27 27 27 24 22 7 6 5 4 3 2
X 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 2 19 24 26 33
X 37 38 43 44 42 38 32 26 3 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 5 35 39 40 33 30 24 22 23 24 25 27
X 26 25 28 30 32 31 32 33 33 35 34 35 34 34 36
X 35 34 32 31 28 27 27 28 23 18 1 0 0 0 0
X 0 0 1 3 5 6 5 4 3 3 3 2 1 0 0
X 0 0 0 1 2 5 23 26 30 33 38 39 43 43 40
X 36 29 6 1 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 1 12
X 33 40 33 29 26 25 26 25 27 28 29 31 33 32 35
X 36 38 39 41 43 43 43 43 44 44 44 44 42 41 40
X 40 37 34 29 24 2 0 0 0 0 0 1 4 23 24
X 27 27 30 30 30 28 26 24 7 6 5 5 5 7 24
X 25 27 29 30 35 36 39 41 41 37 32 25 3 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 7 27 33 32 28 29
X 30 31 31 32 33 35 36 39 39 42 43 46 48 49 51
X 51 52 50 50 50 50 50 50 50 50 49 47 41 33 23
X 2 0 0 0 0 0 3 25 31 37 41 41 38 38 37
X 35 38 34 33 31 29 31 28 30 29 29 29 30 33 36
X 35 39 38 38 34 27 6 1 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 3 9 31 31 30 32 32 33 35 36 38
X 40 43 45 46 49 52 53 53 53 54 54 54 54 54 54
X 54 54 54 54 54 54 51 44 34 24 2 0 0 0 0
X 1 7 31 40 46 48 49 50 50 49 49 48 48 49 47
X 46 44 41 37 34 30 32 32 32 33 34 34 34 33 29
X 24 3 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 1 2 3 4
X 25 29 33 36 36 37 39 43 44 45 48 51 52 53 54
X 55 56 57 58 58 57 57 57 58 59 59 59 59 58 57
X 56 51 43 31 7 1 0 0 0 0 3 28 36 46 51
X 53 53 53 54 56 57 59 61 61 64 60 54 46 39 33
X 32 29 28 27 28 30 31 29 29 22 4 1 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 3 6 25 27 28 31 36 40 43 44
X 45 48 50 52 54 55 55 55 57 58 59 59 58 58 57
X 56 56 55 53 53 53 53 53 53 54 53 47 39 29 5
X 0 0 0 0 0 5 28 38 49 53 55 54 56 58 60
X 62 68 72 72 71 64 55 45 35 32 28 27 27 24 24
X 24 23 24 5 2 1 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 5 27 35 38 40 45 47 50 51 52 53 56 57 56 57
X 57 58 59 59 57 56 56 54 53 54 53 53 52 51 50
X 50 50 50 51 49 46 41 32 24 2 0 0 0 0 1
X 7 32 41 47 50 51 52 54 59 62 66 72 76 75 72
X 60 48 37 29 24 23 22 20 4 3 3 3 2 1 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 1 11 37 47 50 53
X 57 58 62 63 63 63 62 63 63 61 60 58 57 57 54
X 53 53 50 49 47 46 47 46 46 46 46 46 46 43 40
X 33 29 25 4 1 0 0 0 0 2 25 30 37 45 46
X 47 51 51 57 61 67 72 75 68 58 44 35 26 22 22
X 3 3 2 1 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 1 2 19 30 42 56 61 64 65 69 71 69 71
X 70 67 65 61 62 58 56 54 52 49 47 44 43 41 38
X 37 38 39 40 40 40 40 39 36 32 26 7 3 1 0
X 0 0 0 1 5 27 34 38 39 42 43 47 50 56 60
X 64 66 60 51 43 32 25 4 2 1 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 2 17 21
X 37 48 62 66 69 73 72 75 75 75 73 70 70 64 61
X 58 53 50 45 43 39 37 36 35 34 33 32 31 31 31
X 31 31 31 29 25 5 1 0 0 0 0 0 0 2 21
X 26 28 31 33 38 42 47 51 56 60 60 56 46 37 25
X 5 2 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 3 19 23 38 50 68 71 72
X 71 75 78 79 79 75 72 67 64 61 56 52 46 42 40
X 36 33 31 30 31 27 29 28 28 28 28 28 28 25 21
X 3 0 0 0 0 0 0 1 22 22 27 29 32 37 38
X 44 48 55 57 59 56 49 35 9 2 1 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 3 20 25 36 45 58 65 74 76 77 75 73 75
X 74 73 70 65 60 56 50 46 41 38 34 31 29 28 27
X 26 26 25 25 25 25 25 24 21 17 2 0 0 0 0
X 0 0 2 20 22 28 30 33 36 43 48 52 58 57 56
X 50 39 27 4 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 3 22 26
X 31 40 53 55 59 63 68 74 77 77 72 69 66 65 61
X 58 53 48 43 41 35 34 31 29 28 27 26 25 25 25
X 25 25 22 21 3 1 0 0 0 0 0 0 3 20 23
X 28 32 37 42 49 54 57 60 57 52 40 31 7 2 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 3 22 25 29 33 38 45 51
X 57 56 60 62 64 69 66 64 62 60 59 54 53 46 45
X 39 37 34 32 31 31 31 31 31 31 30 28 24 18 1
X 0 0 0 0 0 0 1 5 23 26 32 36 42 50 56
X 59 61 59 53 42 32 7 2 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 3 18 26 27 31 33 34 36 41 45 50 55 57
X 58 61 62 65 64 63 56 57 51 52 44 44 40 39 37
X 34 34 34 34 34 33 30 24 19 1 0 0 0 0 0
X 0 3 23 28 33 39 43 50 55 59 61 59 52 40 33
X 8 2 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 2 15 21
X 25 26 30 30 31 32 33 34 37 44 48 49 49 53 56
X 64 58 61 55 57 53 51 48 46 45 42 42 41 41 41
X 39 35 27 22 1 0 0 0 0 0 2 25 31 38 42
X 47 51 55 57 57 54 48 42 31 9 3 1 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 1 2 3 22 21 25 26 30
X 32 32 34 34 36 40 42 44 48 47 55 53 63 58 58
X 57 55 54 53 52 50 51 52 52 51 46 40 31 21 1
X 0 0 0 0 2 7 31 37 47 52 56 58 60 54 51
X 43 38 29 7 4 17 18 19 18 17 18 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 1 2 5 20 24 25 25 28 30 32
X 33 34 34 37 39 46 46 54 52 60 59 58 57 55 55
X 54 52 52 52 51 49 41 30 7 1 0 0 0 0 5
X 25 41 50 57 60 62 59 57 47 40 34 26 23 22 21
X 21 21 20 20 18 17 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 1 2 3 5 21 25 28 29 32 32 34 35 34
X 37 37 45 44 50 49 59 61 62 59 55 56 56 56 54
X 49 41 28 5 0 0 0 0 0 8 31 45 55 61 61
X 62 57 47 39 30 25 23 22 21 21 22 22 21 19 17
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 1 2 4 20 24 26 30 31 33 33 35 32 34 36 41
X 40 45 46 49 53 49 50 51 51 51 45 38 28 3 0
X 0 0 0 2 11 35 48 58 61 60 55 47 40 33 28
X 24 22 22 24 24 24 21 19 16 1 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 1 2 5
X 23 25 30 31 32 34 33 31 29 29 31 35 41 41 40
X 38 34 35 35 35 35 28 7 1 0 0 0 1 4 24
X 34 44 51 52 48 46 40 33 27 24 24 25 23 23 21
X 21 17 20 2 1 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 1 4 22 25 27 28
X 29 30 31 30 28 26 24 25 26 29 29 30 31 31 30
X 29 25 22 19 20 21 22 22 23 26 33 38 43 43 42
X 39 35 33 31 29 28 27 22 21 17 21 2 1 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 1 3 20 22 25 28 30 30 30 29
X 27 25 24 23 22 21 21 21 22 22 22 22 20 19 19
X 20 22 23 26 29 32 34 36 37 36 35 32 32 31 30
X 28 27 21 5 2 1 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 1 2 3 23 23 23 27 27 29 28 27 26 25 24
X 23 22 22 22 22 22 22 22 23 24 25 27 29 31 30
X 32 34 36 36 37 37 38 36 35 34 30 25 22 3 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
X 4 20 24 25 27 29 29 28 26 26 25 24 23 22 22
X 22 22 23 23 24 26 28 30 32 34 35 37 39 40 42
X 40 38 37 36 33 32 25 21 3 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 1 2 22 22 26
X 29 30 29 28 28 26 25 24 24 23 23 23 25 26 28
X 29 30 33 35 36 38 39 40 40 41 41 41 39 37 31
X 32 25 21 3 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 2 23 25 28 30 31 30 29
X 28 27 27 26 25 25 24 25 27 28 31 32 34 35 38
X 40 39 40 40 40 40 39 38 36 31 29 25 19 2 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 2 22 23 30 29 33 32 31 30 29 28 27 27
X 27 29 28 29 29 31 33 35 36 37 39 40 41 41 40
X 39 37 35 32 31 26 21 3 1 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 1 19 22
X 28 29 32 33 33 32 31 32 30 30 29 29 29 30 31
X 32 34 35 36 34 35 34 35 33 35 33 33 31 29 26
X 21 20 1 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 1 4 21 28 30 32 34 34
X 34 33 32 31 32 33 32 33 33 32 33 34 34 34 35
X 36 35 34 33 32 31 28 27 22 23 2 1 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 3 20 26 28 32 32 36 36 35 34 33 33
X 32 31 32 33 34 35 34 32 31 30 28 27 26 26 27
X 25 21 23 2 1 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 2 18
X 23 25 31 32 36 37 36 36 35 36 37 36 35 35 36
X 36 33 30 29 28 25 23 23 22 22 3 2 1 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 1 3 21 26 29 33 35
X 37 38 38 38 37 36 37 38 37 36 35 32 30 27 21
X 4 3 3 2 1 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 1 3 22 26 30 34 35 37 38 39 39
X 40 40 39 38 36 34 32 28 24 4 1 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 1 4 24 27 31 34 33 35 36 35 36 36 35 36 34
X 31 30 26 20 2 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 2 20 26 28
X 30 31 33 34 34 35 35 33 32 32 30 26 24 21 1
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0))
END_OF_FILE
if test 40677 -ne `wc -c <'./example/globe.in'`; then
echo shar: \"'./example/globe.in'\" unpacked with wrong size!
fi
# end of './example/globe.in'
fi
if test ! -d './src' ; then
echo shar: Creating directory \"'./src'\"
mkdir './src'
fi
if test -f './src/Makefile' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'./src/Makefile'\"
else
echo shar: Extracting \"'./src/Makefile'\" \(1309 characters\)
sed "s/^X//" >'./src/Makefile' <<'END_OF_FILE'
XLIBS = -lm -lXaw -lXt -lXmu -lX11 -lXext
XFLAGS =
XCOBJ = clim.o heat.o pressure.o wind.o rain.o climate.o fileio.o
XTOBJ = tec1.o tec2.o tec3.o fileio.o
XGOBJ = globe.o fileio.o
XGRAF = x
X
X# Change GRAF from x to unix to produce text-only versions
X
Xall: clim tec globe
X
Xclim: $(COBJ) $(GRAF).o; cc $(FLAGS) -o clim $(COBJ) $(GRAF).o $(LIBS)
Xtec: $(TOBJ) $(GRAF).o; cc $(FLAGS) -o tec $(TOBJ) $(GRAF).o $(LIBS)
Xglobe: $(GOBJ) $(GRAF).o; cc $(FLAGS) -o globe $(GOBJ) $(GRAF).o $(LIBS)
X
Xtec1.o: tec1.c const.h tec.h; cc $(FLAGS) -c tec1.c
Xtec2.o: tec2.c const.h tec.h; cc $(FLAGS) -c tec2.c
Xtec3.o: tec3.c const.h tec.h; cc $(FLAGS) -c tec3.c
X
Xglobe.o: globe.c const.h; cc $(FLAGS) -c globe.c
X
Xclim.o: clim.c const.h clim.h; cc $(FLAGS) -c clim.c
Xheat.o: heat.c const.h clim.h; cc $(FLAGS) -c heat.c
Xpressure.o: pressure.c const.h clim.h; cc $(FLAGS) -c pressure.c
Xwind.o: wind.c const.h clim.h; cc $(FLAGS) -c wind.c
Xrain.o: rain.c const.h clim.h; cc $(FLAGS) -c rain.c
Xclimate.o: climate.c const.h clim.h; cc $(FLAGS) -c climate.c
X
Xfileio.o: fileio.c const.h clim.h; cc $(FLAGS) -c fileio.c
Xunix.o: unix.c const.h; cc $(FLAGS) -c unix.c
Xx.o: x.c const.h clim.h; cc $(FLAGS) -c x.c
END_OF_FILE
if test 1309 -ne `wc -c <'./src/Makefile'`; then
echo shar: \"'./src/Makefile'\" unpacked with wrong size!
fi
# end of './src/Makefile'
fi
if test -f './src/rain.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'./src/rain.c'\"
else
echo shar: Extracting \"'./src/rain.c'\" \(7151 characters\)
sed "s/^X//" >'./src/rain.c' <<'END_OF_FILE'
X/* This program is Copyright (c) 1991 David Allen. It may be freely
X distributed as long as you leave my name and copyright notice on it.
X I'd really like your comments and feedback; send e-mail to
X allen at viewlogic.com, or send us-mail to David Allen, 10 O'Moore
X Avenue, Maynard, MA 01754. */
X
X/* This file contains the routines to compute rainfall. */
X
X#include "const.h"
X#include "clim.h"
X
X/* The input data arrays are l and lm, from main.c, wd, from wind.c,
X and pr, from pressure.c. Output arrays are rm and rn; fr and fs are
X used as temporary storage. */
X
Xextern unsigned char l[MAXX][MAXY], lm[MAXX][MAXY], wd[MAXB][MAXX][MAXY];
Xextern unsigned char pr[MAXB][MAXX][MAXY];
Xunsigned char rn[MAXB][MAXX][MAXY];
Xstatic unsigned char fr[2][MAXX][MAXY], fs[MAXX][MAXY];
X
X
X/* The externs below are parameters defined in main.c; the ints are
X parameters defined here. */
X
Xextern int BSIZE, XSIZE, YSIZE;
Xint MAXFETCH = 5, RAINCONST = 32, LANDEL = 10, MOUNTDEL = 32, FETCHDEL = 4;
Xint NRFDEL = 3, HEQDEL = 32, NRHEQDEL = 24, FLANKDEL = -24, PRINTRAIN = 0;
X
X
Xrainpar (s) char *s; {
X /* This function is called by mainpar() in main.c; it simply tests input
X parameter names to see if they are defined in this file. Each of the
X above ints are defined in this file. If the input string matches here,
X the function returns true. */
X
X if (CMP ("MAXFETCH")) getlng (&MAXFETCH, M_RAIN);
X else if (CMP ("RAINCONST")) getlng (&RAINCONST, M_RAIN);
X else if (CMP ("LANDEL")) getlng (&LANDEL, M_RAIN);
X else if (CMP ("MOUNTDEL")) getlng (&MOUNTDEL, M_RAIN);
X else if (CMP ("FETCHDEL")) getlng (&FETCHDEL, M_RAIN);
X else if (CMP ("HEQDEL")) getlng (&HEQDEL, M_RAIN);
X else if (CMP ("NRHEQDEL")) getlng (&NRHEQDEL, M_RAIN);
X else if (CMP ("FLANKDEL")) getlng (&FLANKDEL, M_RAIN);
X else if (CMP ("NRFDEL")) getlng (&NRFDEL, M_RAIN);
X else if (CMP ("PRINTRAIN")) getlng (&PRINTRAIN, M_RAIN);
X else return (0);
X return (1); }
X
X
Xraincomp () {
X /* This is the main rain computation function. It calls the functions
X getfetch () and getrain () to do all the work for each buffer, then
X prints out the results if needed. */
X
X register int buf;
X
X for (buf=0; buf<BSIZE; buf++) {
X status (M_RAIN, buf); checkmouse ();
X getfetch (buf); checkmouse (); getrain (buf); }
X
X if (PRINTRAIN) for (buf=0; buf<BSIZE; buf++)
X putmat ("RAIN", buf, PRINTMODE_SCALE, rn[buf], lm); }
X
X
Xraindraw (n) int n; { draw (DRAW_GREY, LINE_CORN, rn[n], lm); }
X /* This function calls draw with the right arguments to display rain */
X
X
Xfetchinc (x, y, dest) int x, y, dest; {
X /* This is the workhorse function for getfetch(), below. It is called
X several times per square. It changes x to account for wraparound, so it
X won't work as a macro. If y is out of range it does nothing, else it
X "marks" the new square in fr[dest] and increments fs to record the number
X of times the square has been marked. */
X
X if (x == -1) x = XSIZE-1; else if (x == XSIZE) x = 0;
X if ((y == -1) || (y == YSIZE)) return (0);
X fr[dest][x][y] = 1; fs[x][y]++; return (0); }
X
X
Xgetfetch (buf) int buf; {
X /* "Fetch" is the term that describes how many squares a given wind line
X travels over water. It measures how moist the wind is. The algorithm to
X measure fetch looks like many simultaneous tree walks, where each water
X square is a root square, and every wind edge is a tree edge. A counter
X for each square determines how many times that square is reached during
X the tree walks; that is the fetch. */
X
X register int i, j, k; int src, dest;
X
X /* Initialize the counter fs to zero. Array fr, which records the */
X /* list of active edges in the walks, is set so that all ocean squares */
X /* are active. Also, the result array rn is cleared. */
X for (i=0; i<XSIZE; i++) for (j=0; j<YSIZE; j++) {
X fr[0][i][j] = l[i][j] ? 0 : 1; fs[i][j] = 0; rn[buf][i][j] = 0; }
X
X /* Each time through the loop, each square is examined. If it's */
X /* active, disable the mark in the current time step (thus ensuring */
X /* that when the buffers are flipped, the new destination is empty). */
X /* If the square is a mountain, don't pass the mark, but instead add */
X /* some amount to the square -- implementing rain shadows and rainy */
X /* mountain squares. Finally, for each of the eight cardinal */
X /* directions, if there is wind blowing in that direction, carry a */
X /* marker to that square using fetchinc(), above. */
X
X for (k=0; k<MAXFETCH; k++) {
X src = k % 2; dest = 1 - src;
X for (i=0; i<XSIZE; i++) for (j=0; j<YSIZE; j++) if (fr[src][i][j]) {
X fr[src][i][j] = 0;
X if (l[i][j] == 2) rn[buf][i][j] += MOUNTDEL;
X else switch (wd[buf][i][j]) {
X case N|E: fetchinc (i+1, j-1, dest); break;
X case N|W: fetchinc (i-1, j-1, dest); break;
X case S|E: fetchinc (i+1, j+1, dest); break;
X case S|W: fetchinc (i-1, j+1, dest); break;
X case N: fetchinc (i, j-1, dest); break;
X case S: fetchinc (i, j+1, dest); break;
X case E: fetchinc (i+1, j, dest); break;
X case W: fetchinc (i-1, j, dest); break; } } } }
X
X
X/* This macro is called several times per square by getrain(), below. It
X simply tests the square for several conditions: if the square is on the
X heat equator, itcz is set to one; if the wind blows south in this square,
X it is on the flank of a circular wind zone (and thus less rainy); the local
X rain sum, x, is increased according to the fetch sum in the square. */
X#define RAINTEST(xx,yy) \
X if (pr[buf][xx][yy] == PR_HEQ) itcz = 1; \
X if (wd[buf][xx][yy] & S) flank = 1; \
X x += (fs[xx][yy] * NRFDEL);
X
X
Xgetrain (buf) int buf; {
X /* Once the fetch array is computed, this function looks at each square to
X determine the amount of rainfall there. The above macro is called five
X times, once for the square and each of its four neighbors; this determines
X whether the square is near the ITCZ or the flank of an air cycle. The
X sum of fetches for the neighbors is also determined. Finally, each of the
X factors is weighted and added to the rainfall value: the local fetch value,
X a land factor, the nearness of the heat equator, and the nearness of a
X flank. Note that while rn is zeroed in getfetch(), it may be increased by
X rain falling on mountains, so it is nonzero when this function is called. */
X
X register int i, j, x; int itcz, flank;
X
X for (i=0; i<XSIZE; i++) for (j=0; j<YSIZE; j++) {
X flank = 0; itcz = 0; x = rn[buf][i][j];
X if (i < XSIZE-1) { RAINTEST (i+1, j) } else { RAINTEST (0, j) }
X if (i) { RAINTEST (i-1, j) } else { RAINTEST (XSIZE-1, j) }
X if (j < YSIZE-1) { RAINTEST (i, j+1) }
X if (j) { RAINTEST (i, j-1) }
X RAINTEST (i, j);
X
X x += (RAINCONST + FETCHDEL * fs[i][j]);
X if (l[i][j]) x += LANDEL;
X if (pr[buf][i][j] == PR_HEQ) x += HEQDEL;
X if (itcz) x += NRHEQDEL;
X if (flank) x += FLANKDEL;
X if (x < 0) x = 0; if (x> 255) x = 255;
X rn[buf][i][j] = x; } }
END_OF_FILE
if test 7151 -ne `wc -c <'./src/rain.c'`; then
echo shar: \"'./src/rain.c'\" unpacked with wrong size!
fi
# end of './src/rain.c'
fi
echo shar: End of archive 1 \(of 4\).
cp /dev/null ark1isdone
MISSING=""
for I in 1 2 3 4 ; do
if test ! -f ark${I}isdone ; then
MISSING="${MISSING} ${I}"
fi
done
if test "${MISSING}" = "" ; then
echo You have unpacked all 4 archives.
rm -f ark[1-9]isdone
else
echo You still must unpack the following archives:
echo " " ${MISSING}
fi
exit 0
exit 0 # Just in case...
--
Kent Landfield INTERNET: kent at sparky.IMD.Sterling.COM
Sterling Software, IMD UUCP: uunet!sparky!kent
Phone: (402) 291-8300 FAX: (402) 291-4362
Please send comp.sources.misc-related mail to kent at uunet.uu.net.
More information about the Comp.sources.misc
mailing list