[comp.sources.amiga] v91i017: Mandel 1.0 - yet another mandelbrot, Part01/04

amiga-request@ab20.larc.nasa.gov (Amiga Sources/Binaries Moderator) (02/19/91)

Submitted-by: dm@stekt.oulu.fi (Hannu Helminen ti)
Posting-number: Volume 91, Issue 017
Archive-name: applications/mandel-1.0/part01

[ uuencoded executable, icons, and library enclosed  ...tad ]
[ also, one source file was split to allow for posting.  ...tad ]

        This is yet another mandelbrot for amiga, but this one is quite
        fast. It also has a cute graphical user interface.
        Freely distributable. Source included.

        Author: Hannu Helminen
        dm@stekt.oulu.fi


#!/bin/sh
# This is a shell archive.  Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file".  To overwrite existing
# files, type "sh file -c".  You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g..  If this archive is complete, you
# will see the following message at the end:
#		"End of archive 1 (of 4)."
# Contents:  iff.library.uu mandel.doc mandel.doc.uu mandel.info.uu
#   mandel.uu source source/gui.asm.ae source/iff.i source/macros.i
#   source/mbrot.i source/pipe.asm
# Wrapped by tadguy@ab20 on Mon Feb 18 17:25:39 1991
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'iff.library.uu' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'iff.library.uu'\"
else
echo shar: Extracting \"'iff.library.uu'\" \(3334 characters\)
sed "s/^X//" >'iff.library.uu' <<'END_OF_FILE'
Xbegin 666 iff.library
XM```#\P`````````#``````````(```(>``````````````/I```"'F`$0TA7M
XM(4/Z`(`L>``$3J[^:"Q`3J[_Q"(`0?H`/B0(=BU.KO_0(DXL>``$3J[^8G`%Q
XM3G5*_````#0```((@!`)`0```$X```!:````E&EF9BYL:6)R87)Y`$E&1B`Q;
XM-BXQ("@P,2U$96,M,3DX."D@8GD@0VAR:7-T:6%N($$N(%=E8F5R"@!D;W,N)
XM;&EB<F%R>0`````Z````I````.0```$0```!/@```8H```'"```"!@```@@`G
XM``+````"W@```P0```,4```#6```!&(```1Z```(`@``""````(0_____^``?
XM``@)`,````H```!.X```#@8`T```%``0T```%@`!P```&````%H`````2.?`9
XMQ"I`*T@`(D/Z_VQP'TZN_=@K0``H0>T`+""(6)!"J``$(4@`"$S?(P-.=4CGJ
XM0.8J3F$`!GYF/'`6<@$L>``$3J[_.DJ`9RPD0)/)3J[^VB5```Y"J@`20>T`+
XM+")*3J[_"E)M`"`(K0`#`"8@#4S?9P).=7``8/9(YP`F*DYA``8R9Q0D0")`+
XM+'@`!$ZN_P1P%B)*3J[_+DS?9`!P`%-N`"!F"@@N``,`)F<"80).=4CG(`8J_
XM3DIM`"!G"@CM``,`)G``8"HB32QX``1.KO\$(FT`*$ZN_F(D+0`B<``B33`M&
XM`!"2P-!M`!).KO\N(`),WV`$3G5(YSXF?/]@!DCG/B8L`"I.3^__]'H`(@@DR
XM/````^TL;0`H3J[_XB@`9@1Z$&!P(@0D#W8,3J[_U@R71D]236<$>A-@4"(&)
XM:@YR`0RO.%-66``(9@)R`W0,)B\`!-2#(`(L>``$3J[_.DJ`9@1Z$F`D)$`D_
XMPB($)`I0@EB"+&T`*$ZN_]9*@&H$>A%@"$S7``=(T@`'(@0L;0`H3J[_W"`%M
XM9P9A``5$8`9A``4R(`I/[P`,3-]D?$YU2.<`!BI.(`EG"B`A+'@`!$ZN_RYA1
XM``4.3-]@`$YU(&D`!$/I``S1R;"19Q0B*0`$4H$(@0``0_$8"+/(9>J3R2`)*
XM3G4@/$)-2$1A`/_29P)0@$YU2.<X("1((#Q#34%080#_O$J`9RH@0%B(*!B)8
XM_``#2,0@!%.$<@!T`'8`$A@4&!88Z4GH2X)"@D,TP5',_^A,WP0<3G5(YS\^'
XM3^_^M"I.)D@H20RL24Q"30`(9P9P&&```+)A`/^,9@9P&6```*8D0$SK`/\`S
XM"$C7`/]T`!0J``BT*P`%8P9P&V```(@@/$)/1%DB3&$`_S1F!'`:8'0@0%B(T
XM(!A)\`@`$"H`"F8&3?H`<F`.#````6<$<!Q@5$WZ`&A^``PJ``$`"5?'>``X#
XM$MA\``_FC`B$``!Z`#H3?``\*P`"4T930C8")$\@!")23I;;FE'+__9*!V<(Z
XM(`1#[P`@3I:QS&0$4<[_WF$``\)@!&$``\A/[P%,3-]\_$YU$MA1R/_\3G4_B
XM`G(`$AAK"A+84T!1R?_Z8`Q$`108$L)30%')__I*0&[@-!].=4CG.`!R`'0`U
XM-A$X*0`"80``"$S?`!Q.=4CG/SZ>_`$,*DXL""9)*$\_00$$/T(!!@B#```_9
XM0P$(/T0!"BC\1D]237X\*,<H_$E,0DTH_$)-2$1^%"C'&4``"D(L``E"+``+V
XM0FP`#$*L``0Y?`H+``X9:P`%``CG2SB#.4,`$#E$``(Y1``2+WQ#04U'`"A^%
XM!"]'`"P@3&$``UH(K``'``IG!`C```LO0``P+WS____X`#@@"F=$0^\`-"+\C
XM0TU!4'`!<@$2*P`%XV@T`,#\``-4@`)`__PBP%-",!KI2!-```+H2`(``/`32
XM0``!Z$@"``#P$H!625'*_^(B!B0\```#[BQM`"A.KO_B+@!G``"P("\`.-&OS
XM``0B!R0/=D36KP`X+&T`*$ZN_]!*@&L``)!*+``*9@9A``"B8`1A``$D2H!KV
XM>B8`5H/&/`#\+T,!`->O``26@$J#9Q0B!T*G)`\L;0`H3J[_T%B/2H!K4"('X
XM=`!V_RQM`"A.KO^^(@<D#W8\UJ\`."QM`"A.KO_02H!K+$'O`/P@O$)/1%DBS
XM!R0(=@@L;0`H3J[_T$J`:Q`B!RQM`"A.KO_<80`!R&`2(@=G""QM`"A.KO_</
XM<!1A``'`WOP!#$S??/Q.=4CG/CA)[P`DGOP`)#`L`0AR`!(K``7`P3(L`0K`U
XMP2]``"`R+`$&PM-P`#`L`032@$'K``@B3W`')!C4@2+"4<C_^'8`>`!Z`#H3#
XM%BL`!39#-BP!"#@L`0I31%-+)$\L"R(')!(L;0`H3J[_T$J`:P[;FE'._^Q1V
XMS/_D("\`(-[\`"1,WQQ\3G5(YSXX2>\`))[\`21"KP$@,BP!!L+3<``P+`$$_
XMTH!!ZP`((D]P!R08U($BPE'(__AV`'@`>@`Z$Q8K``4F0S8L`0@X+`$*4T13;
XMBR1/+`LP`R!20^\`(&$VT:\!("('0^\`("0)+P,F`"QM`"A.KO_0)A]*@&L.X
XMVYI1SO_44<S_S"`O`2#>_`$D3-\<?$YU2.<P,$7P``!V`&%,L'P``VT05(,2`
XM$-#`4T!$`!+`$L%@*B9(=`!2`FL04HBQRFP,82:P?``#;>Y@`G1_($O6@E*#B
XM4T(2PA+84<K__+'*;;H@`TS?#`Q.=2\(<`$2&+(89@RP?`"`;`920+'*;?`@J
XM7TYUD\DL>``$3J[^VB(`("T`+"!`(!!G"+*H``YF]"`(3G5AWF<$0J@`$G`!8
XM3G4O`B0`8<YG!"%"`!(D'W``3G5(YP`&*DYANDJ`9PX@*``20J@`$DS?8`!.3
XM=7#_8/8O"B1)(#Q#04U'80#ZLF<(($`@*``(8!@B2F$`^LAG$"!`81`,*``&)
XM``AM!`C```LD7TYU<``,*``$``AN"@Q0`8!O!`C```\,:`$8``)M!`C```).Y
XM=0`````#[````!D`````````-@```#H```!"````1@```$H```"8````G```S
XM`*````"D````J````*P```"P````M````+@```"\````P````,0```#(````\
XMS````-````#4````V````-P```#N```!"`````````/R```#Z@````````/RR
X,```#ZP````````/RC
X``
Xend
Xsize 2352
END_OF_FILE
if test 3334 -ne `wc -c <'iff.library.uu'`; then
    echo shar: \"'iff.library.uu'\" unpacked with wrong size!
fi
# end of 'iff.library.uu'
fi
if test -f 'mandel.doc' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'mandel.doc'\"
else
echo shar: Extracting \"'mandel.doc'\" \(14242 characters\)
sed "s/^X//" >'mandel.doc' <<'END_OF_FILE'
X
X-----------------------------------------------------------------------------
X
X    Version history
X
X    v0.50   First numbered version. Most bugs I've found are fixed.
X    v0.60   Workbench interface added.
X    v1.00   First public release.
X
X-----------------------------------------------------------------------------
X
X    BUGS
X
X    -   Not very smart handling of AUTOCRAWL
X    -   If invoked with too little memory, 56 bytes will mysteriously
X        disappear
X    -   Window title bar may get trashed if moved too high
X
X-----------------------------------------------------------------------------
X
X    Copying licence:
X
X    This program is copyright 1990 by Hannu Helminen. However, you may
X    freely distribute it provided that this package is left intact and no
X    charge is taken. You are also licenced to use parts of the code in your
X    programs provided that
X
X    1)  New versions are clearly marked as such
X    2)  You give credit where credit is due (me)
X
X    I will not guarantee anything about this program. It seems quite
X    reliable to me, though.
X
X-----------------------------------------------------------------------------
X
X    Package includes:
X
X    mandel          Main proggie
X    mandel.doc      This file
X    iff.library     Used when saving pictures. Place in libs: directory.
X
X    source/gui.asm  Graphical user interface
X    source/brot.asm This takes care of the actual drawing
X    source/pipe.asm A package of fifo routines, as needed by brot
X
X    source/macros.i General macros
X    source/mbrot.i  brot-specific include file, including my own structure
X    source/iff.i    Needed to use iff.library
X
X-----------------------------------------------------------------------------
X
X
X
X    OVERVIEW
X
X    There are quite a few Mandelbrot programs for Amiga, perhaps to the
X    extent that I should have named my program "yamb" instead of "mandel".
X    (Yet Another MandelBrot)
X
X    I hope though that there are enough reasons to satisfy the existence of
X    this program. Namely, it was designed with three goals in mind: first,
X    speed. Secondly, speed. And last but not least, speed.
X
X    Of course, most Mandelbrot programs draw nice-looking pictures, if only
X    you can wait for ten minutes or even more for them to be complete.
X    Increase the number of iterations and you will have to wait for hours,
X    unless you are one of those lucky guys with a 60-MHz 68040-equipped
X    A3000's... The main reason for that slowness is the floating point math
X    most programs use.
X
X    The first version of this program was quite ugly: coded partly in
X    Basic, partly in 68000 machine language, it was a mess of a code. Its
X    optimized core used 32-bit fixed point math but was still relatively
X    slow. After writing it, I forgot it for years.
X
X    Then someone in alt.fractals told about a new algorithm called contour
X    crawling that produces fast images of Mandelbrot set. I adopted the
X    idea and rewrote the program to use it, this time completely in machine
X    language. It turned out to be fast (within minutes); that is because it
X    does not need to iterate all pixels. And the drawing was visually
X    attractive, so it suits well for interactive use.
X
X    After imploying a 16-bit iteration for lower resolutions, I found I had
X    written the fastest Mandelbrot program I had ever seen. (Ok, forget
X    that little transputer...) I cannot pretend to have seen even all Amiga
X    ones, though, so there may already be a faster one. If so, please tell
X    me that all this code was in vain.
X
X
X
X    USAGE
X
X    Start from CLI by typing `mandel', or click the icon in Workbench. The
X    program will then immediately begin to draw the Mandelbrot set. Various
X    options exists, however, to modify how, where and when the image will
X    be drawn. Use CTRL-C to abort a draw in progress, and another CTRL-C to
X    abort the program.
X
X    From CLI: Enter the options after the command, e.g.
X
X        mandel -i1000 -j -sram:Picture
X
X    Type `mandel ?' to see a brief summary of the options.
X
X    From Workbench: Select mandel icon, select `info' from the `Workbench'
X    menu and enter options in the TOOL TYPES array, e.g.
X
X        I=100
X        FLAGS=j
X        SAVE=ram:Picture
X
X
X    The options are listed below. # is a shorthand for a number.
X
X    CLI     WorkBench
X
X    -x#     X=#     These determine the point (z = x + yi) in the complex
X    -y#     Y=#     plane you will see right in the center of your monitor.
X                    They are in the range -4 to 4.
X
X    -m#     M=#     This is a logarithmic quantity that represents the
X                    magnification of the image. 2^(-m) determines the
X                    distance between two lo-res pixels in complex plane.
X                    Default is 6, maximum is 29.
X
X    -i#     I=#     Iterations. Self-explanatory? No? The greater the
X                    number, the more accurate pictures mandel will draw.
X                    For further information, refer to APPENDIX A.
X                    The maximum number of iterations is 65535.
X
X    -jx#    JX=#    These determine a constant (c = jx + jy i) that is used
X    -jy#    JY=#    when iterating a Julia set. Each c will produce a
X                    different set. See APPENDIX A. These, too, have a range
X                    from -4 to 4.
X
X    -sname SAVE=name This determines a filename for saved pictures.
X
X                    If mandel is operated interactively (g flag is set),
X                    the user can save pictures by pressing CTRL S. The
X                    standard filename is `mandel.picture', but can be
X                    overridden by this option. If many pictures are saved,
X                    a number is added at the end to distinguish the files
X                    from each other.
X
X                    If mandel is in non-interactive use (x flag is set),
X                    this options specifies that the image must be saved
X                    upon exit, and determines the name for it. Note: if
X                    this option does not exists, no image will be saved.
X
X    -l      FLAGS=l Normally mandel determines itself whether it should use
X    -h      FLAGS=h 16 or 32 bits of precision, as denoded by (a). There
X    -a      FLAGS=a are certain, limited circumstances when you need to set
X                    the precision explicitely to 16 (l) or 32 (h) bits. In
X                    particular, Julia sets that have a complex structure
X                    near origo may produce inaccurate images unless 32 bits
X                    are used.
X
X    -c      FLAGS=c You can enable (c) or disable (w) the crawling if you
X    -w      FLAGS=w wish, default is (p), which means to crawl whenever
X    -p      FLAGS=p possible. Currently non-connected Julia sets are not
X                    crawled because they *could* produce inaccurate
X                    results. Future versions might add more sanity checks
X                    to this.
X
X    -x      FLAGS=x When the (x) flag is used, the programs exits
X    -g      FLAGS=g immediately after the first image is drawn. Default is
X                    (g) which means to prompt the user with a
X                    requester-like window (See below). The x flag is
X                    intented for non-interactive use, for example
X                    continuous zooms that are achieved via scripts.
X
X    -m      FLAGS=m Whether you want to draw Julia (j) or Mandelbrot (m)
X    -j      FLAGS=j sets. See APPENDIX A.
X
X
X    NOTE:   In Workbench, if multiple FLAGS are used, they *must* be
X            combined in a single FLAGS entry, e.g.
X
X                FLAGS=apgx
X
X            In CLI, flags *must not* be combined, so do not try `-apgx'
X            instead of `-a -p -g -x'.
X
X
X
X    GRAPHICAL USER INTERFACE
X
X    When mandel is invoked with the -g option, after the first image is
X    drawn, a requester-like window will pop in. A grid will also be
X    displayed, indicating the centerpoint and borders of the next image.
X    Screen title bar will show coordinates of the mouse position.
X
X    You can then set the centerpoint by clicking in the image or entering a
X    value in the string gadgets labeled `X' and `Y'. Magnification and
X    iterations can be set in the gadgets `M' and `I', respectively.
X
X    A new quantity can be set using the `Z' gadget: zooming. As its name
X    implies, this determines which portion of the current image will be
X    shown in the next one. This is a signed number that will be added to
X    magnification, thus set z=0 for 100% zooming, z=1 for 50%, z=-1 for
X    200% etc. This can also be set by pressing the right mouse button and
X    moving it over the image.
X
X    The program draws images in one of three modes: ZOOM, DRAW and RESET.
X    ZOOM means zooming to the size shown by the grid. DRAW will take the
X    numbers from the requester and draw according to them (used for example
X    to redraw the same picture, or to quickly enter a very deep
X    magnification level)
X
X    As setting zoom in DRAW mode makes as little sense as setting
X    magnification in ZOOM mode, these modifications will immediately change
X    the draw mode, too. The third mode, RESET, will return the
X    magnification and centerpoint to normal. The mode can be changed by
X    respective gadgets.
X
X    Clicking MAND or JULIA will change the set type to Mandelbrot or Julia.
X    The magical constant c for Julia sets (See APPENDIX A) can be set as
X    follows: Make sure you are in MAND mode. Then select the point c by
X    either clicking on the image or entering it in the X/Y-gadgets. Then
X    click JULIA gadget and select whatever centerpoint you wish your image
X    to have.
X
X    Alas, window close gadget only removes the requester window, screen
X    title and grid in order to let you view the image. Normal operation is
X    resumed by pressing either mouse button.
X
X    Quit the program by double-clicking the QUIT gadget or draw a new set
X    by double-clicking either in the image or one of the gadgets ZOOM,
X    DRAW, RESET.
X
X
X
X    AUTHOR
X
X    Hannu "The DM" Helminen
X    Perkkio
X    85900  REISJARVI
X    FINLAND
X
X    dm@stekt.oulu.fi (for the next few years, I hope)
X
X
X
X    THANKS
X
X    Thanks to
X
X        T. Saarinen for extensive beta-testing
X
X        'LS' Hautamaki for not-so-extensive testing
X
X        J.M. Jarre who was in great help during long nights of programming
X
X        B. Mandelbrot who invented the set that carries his name
X
X
X
X
X
X    APPENDIX A: A mathematical definition of Mandelbrot and Julia sets.
X
X
X    A point z = x + y i is said to be in the Mandelbrot set if
X             0
X
X             2
X    z    = z   + c  does not go to  +-oo (infinity) when n -> oo
X     n+1    n
X                           ____
X    where c = z .  ( i = ,/ -1   so  z, c are complex numbers )
X               0
X
X
X    A point z = x + y i is said to be in the Julia set c if
X             0
X
X             2
X    z    = z   + c does not -> oo when n -> oo
X     n+1    n
X
X
X    NOTE: There are an infinite number of Julia sets, each corresponding to
X    one value of c. c is also related to a point in the Mandelbrot set.
X    (originally the Mandelbrot set was the set of c's that will produce a
X    *connected* Julia set.) Note also that the Julia set looks similar to
X    the surroundings of that point in the Mandelbrot set from which the
X    Julia set was derived.
X
X    Becausese these calculations would take a considerable amount of time
X    with any contemporary computer, they are approximated by a finite
X    number of iterations (typically 100 or more). An usual test for a point
X    z going to infinity is to test whether or not | z | < 2. And since few
X    computers can calculate with complex numbers, we can rewrite the
X    equation (z -> z**2 + c) in a C-ish style program using only real
X    variables z = x + y i:
X
X    i = max_iterations;
X
X    while (i > 0 && x**2 + y**2 < 4) {
X
X    tmpx = x**2 - y**2 + x0;
X    tmpy = 2 x y   + y0;
X    x = tmpx;
X    y = tmpy;
X    i--;
X
X    }
X
X    if (i=0) inside (); else outside();
X
X    If you are a first-time user of any Mandelbrot program, I might suggest
X    that you study the edge of the black area, because that is where the
X    most interesting parts of the set are. (The coloured areas do not
X    actually belong to the set, and the interior is, of course, all
X    black...)
X
X
X
X    APPENDIX B: The contour crawling method
X
X    This method works by finding an edge of an area of uniform color, then
X    crawling its way through the edge until starting point is reached. The
X    interior is then assumed to be of same color. This is of course true
X    for the ideal set, but because the image is sampled to a finite set of
X    pixels, errors *may* occur. (Haven't seen one so far, though.)
X
X    Non-connected Julia sets must not be crawled in the strict mathematical
X    sense. However, most of the time mandel produces correct pictures even
X    then. So it is quite safe to use the -c option of mandel.
X
X
X
X    APPENDIX C: Compilation
X
X    Assuming you have a68k v2.61 or higher and blink, the following
X    steps are needed to compile a working executable of mandel:
X
X    a68k gui.asm -q500 -iinclude:
X    a68k brot.asm -q200 -iinclude:
X    a68k pipe.asm -q100
X    blink gui.o brot.o pipe.o to mandel lib amiga.lib
X
X    where include: is assigned to standard assembly include directory.
X
X    NOTE: if you have a68k v2.42, gadget arrow images will not be marked as
X    going to CHIP ram. This will give you strange-looking images unless:
X
X    0)  You have only CHIP ram (poor chap)
X
X    1)  You use FastMemFirst, FixHunk, ATOM etc. kludges
X
X    2)  Modify the code: allocate some CHIP-mem and CopyMem() the images
X        there. This is a kludge, however.
X
X    3)  Get v2.62 somewhere (e.g. disk 314 from Fred Fish's
X        wonderful collection.)
X
X
X
X    APPENDIX D: How to use brot with your own programs?
X
X    Just pass the address of a valid mb-structure in a0 (see mbrot.i),
X    `jsr MandelBrot' and `XREF MandelBrot' somewhere in your code and
X    (b)link your proggie with brot.o and pipe.o. The RastPort you use
X    *must* have valid TmpRas and AreaInfo structures attached to it.
X    AreaInfo should carry as many vectors as possible (no more than 6553,
X    however, since that seems to be a maximum)
X
X
END_OF_FILE
if test 14242 -ne `wc -c <'mandel.doc'`; then
    echo shar: \"'mandel.doc'\" unpacked with wrong size!
fi
# end of 'mandel.doc'
fi
if test -f 'mandel.doc.uu' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'mandel.doc.uu'\"
else
echo shar: Extracting \"'mandel.doc.uu'\" \(585 characters\)
sed "s/^X//" >'mandel.doc.uu' <<'END_OF_FILE'
Xbegin 666 mandel.doc.info
XMXQ```0``````?@`1`#``%@`$``,``0#!--@`````````````````````````>
XM````!,,`P4(8`````````#(````&```````````````````````P`!8``@#$F
XM2C@#``````#_______^#_______)_____W_)G)1.1AG)*92U2S/)*92TRSF#A
XMG,RV2X/_____________________________________________________$
XM_________S___QG$LP___G*<93___Y&<XS___CC$\9__________________-
XM______\```````!\```````V`````(`V8VNQN>8VUFM*M,PVUFM+-,9\8S-)9
XMM'P``````````````````P``````#8``````!H``````,P`````&68`````,D
XMR````,`><.8[3/`S(8UCFL`!@&YC',```<<[#F``````````````````````P
X9```````3<WES.G5T:6QI=&EE<R]M;W)E`,<[L
X``
Xend
Xsize 385
END_OF_FILE
if test 585 -ne `wc -c <'mandel.doc.uu'`; then
    echo shar: \"'mandel.doc.uu'\" unpacked with wrong size!
fi
# end of 'mandel.doc.uu'
fi
if test -f 'mandel.info.uu' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'mandel.info.uu'\"
else
echo shar: Extracting \"'mandel.info.uu'\" \(951 characters\)
sed "s/^X//" >'mandel.info.uu' <<'END_OF_FILE'
Xbegin 666 mandel.info
XMXQ```0``````(``/`#``%@`&``,``0#!W_@`PW4X````````````````````[
XM`````_X`P3*8`````/___]0````$```````````````````````P`!8``@`!J
XM83`#``````#____________________________________^?______^?___M
XM__^`!?____\``?____X``/___P0``/___````?___````?___P0``/____X`N
XM`/____^``?____^`!?_____^?______^?___________________________<
XM______\````````````````````!```````#P``````'X`````#_^0````'_>
XM_X``!`?__X``!____X``#____X``?____P``?____P``#____X``!____X``@
XM!`?__X````'__X````#_^0`````'X``````#P``````!````````````````K
XM`````````#``%@`"``%B.`,``````/___________________________[__/
XM_____Y_^_____P?=_____X8"'_____@#_____0:W____T`/_____X`/_____V
XMX`?_____X`?_____X`O____P8+____[@'_____Q`,?____\UX/____]__W__K
XM_____?___________________P```````````````````````````?``````<
XM`___@````___P````___\```'___^```?___````___X````___@```!__^`8
XM```'__^````?__\```#___\``!____````___^````/__\````#__\``````8
X5!X````````````````````````$`(
X``
Xend
Xsize 651
END_OF_FILE
if test 951 -ne `wc -c <'mandel.info.uu'`; then
    echo shar: \"'mandel.info.uu'\" unpacked with wrong size!
fi
# end of 'mandel.info.uu'
fi
if test -f 'mandel.uu' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'mandel.uu'\"
else
echo shar: Extracting \"'mandel.uu'\" \(22144 characters\)
sed "s/^X//" >'mandel.uu' <<'END_OF_FILE'
Xbegin 666 mandel
XM```#\P`````````&``````````4```?[```$'D```/(```!'````/```````:
XM``/I```'^TCG?_XF2#8`D\DL>0````1.KO[:($`@*`"L9RI",S#_0KD````H#
XM($#1R-'((&@`$-'(T<@0&"/(````+$B`,\````!.8#I'Z`!<($M.KOZ`($M.G
XMKOZ,(\`````H($`@*``D9QP@0"00(&@`!"/(````+'+_4D%*&&;Z,\$```!.1
XM0_D```P6<`!.KOW8(\`````(9AI(YP$&+CP``X`'+'@`!$ZN_Y1,WV"`8``'=
XM.DJY````*&<2(@(L>0````A.KO^"+'D````$0_D```P$<`!.KOW8(\`````$)
XM9AI(YP$&+CP``X`$+'@`!$ZN_Y1,WV"`8``&4$/Y```+\W``3J[]V"/`````]
XM`&8:2.<!!BX\``.``BQX``1.KO^43-]@@&``!AA!^0``##MP`4/Y````RG(`/
XM3J[^1$H`9QI(YP$&+CP`!(`5+'@`!$ZN_Y1,WV"`8``%W$7Y````\A5\``0`*
XM"$(J``E"J@`*%7P````.</\3_``!```!%4ZN_K9*`&L`!:050``/D\E.KO[:)
XM)4``$$'J`!0@B%B00J@`!"%(``A!^0```,HA2@`.0KD````<($M)^0```'PY9
XM?````!PY?````!XY?`$_`"`Y?`#_`"(3_``````!%3E\`&0`*!E\`!@`+!/\D
XM``$```$4$_P``````19".0```1=">0```$Q".0```1@C_``!``````!((_P`Q
XM!@``````."/\`````````$`C_`````````!$*7P``````!0I?```````&$/YR
XM```64BE)`"0Y?``>`"I*N0```"AG``"2+'D````$0_D```PB<`!.KOW82H!FC
XM#!/\``@```$58```[BQ`('D````L3J[_LDJ`9@H3_``)```!%6`\*D!%^0``1
XM"<9'^0``">9*$V<D(&T`-B)+3J[_H"):2H!G!B!`3I%G!DH;9OQ@X!/\``H`P
XM``$5($U.KO^F(DXL>0````1.KOYB2CD```$59@`$0&!^1_D```Q()CP```+UG
XM2A!G;@P0`#]G4A/\``(```$51_D```Z()CP```"U$!AG4`P``"!G]@P```AGZ
XM\`P``"UF*!`80_D```FX1?D```F$#```864$!```("I:L!EF!DZ59P9@QDH1K
XM9O`L>0````A.KO_$(@`D"TZN_]!@``.L0?D```$`+'D````$3J[_.A/\``,`8
XM``$5(\`````09P`#BB1`(\H```$Z(\H```%J1^H`+$'Y```!'$ZN_S03_``$7
XM```!%2/`````%&<``U(@0"1H`#(HBB!+0_D```#`<"`L>0````!.KO]`(#P`,
XM`"@`<@(D`2QY````!$ZN_SH3_``%```!%2/`````(&<``P!'^0```*HB0"!+M
XM(`(L>0````!.KOXL)4L`#"`\``!__7(`+'D````$3J[_.B/`````)&<``K1'\
XM^0```+(@2R)`(#P``!F9+'D`````3J[^YB5+`!`3_``````!%2`Y````."(\?
XM`!T``+"!8P(@`2(\``4``+"!9`(@`2/`````.&$`$.(C^0```#@````\($Q.G
XMN0``&@!*.0```11G``(.80`&A$'Y```!3"QY````!$ZN_S0CP````!AG``($4
XM'CD```$6$_P``@```18@.0```$!A``F,(#D```!$80`)RB`Y````.&$`"K`P2
XM+``H80`*<B`Y````2&$`"?83QP```19A``L*80`+:F$`#WYF``&(+'D````$U
XM#((```(`9E(@>0```!@CZ``$```!3$ZN_[A"N0```!@@>0```!!P`$ZN_N9AU
XM``*X80`/0&8``5X,@@````AF\&$``SX@>0```!!P`2QY````!$ZN_N9@`/\TS
XM#((````09@9A``X.8(H,@@````AF*`Q#`&AF$&$`#0AG`/]V:P`!`&```)H,&
XM0P!I9@QA``N$9@``[F``_UP,0@`@9B(R+0`F,`$"0$``9PQA``7,9@``T&``&
XM_T9A``:$:V)F``#"#((```0`9E(,0P`A9DP(!``#9T8@>0```!@CZ``$```!.
XM3$ZN_[A"N0```!@@>0```!!P`$ZN_N9A``'L80`36&$``GX@>0```!!P`2QY%
XM````!$ZN_N9@`/YT8`#^UB!Y````&"QY````!"/H``0```%,3J[_N&$``:X,O
XM.0`````!%F<L##D``0```19G+B/\``8``````#@C_`````````!`(_P`````P
XM````1&``_=8@.0```$C1N0```#A@`/W&('D````8+'D````$3J[_N&$``51**
XM.0```11F#$HY```!&&<$80`2L"!Y````$'``+'D````$3J[^YB)Y````)"`\G
XM``!__2QY````!$ZN_RXB>0```"`@/```*``L>0````1.KO\N+'D````$('D`A
XM```43J[_N"!Y````$$ZN_[Y!^0```/(0*``/+'D````$3J[^L$/Y````RDZNQ
XM_CXB>0````!.KOYB(GD````$3J[^8DHY```!%6=X+'D````(2KD````H9QA!^
XM^0``#STB""0\```#[DZN_^)*@&=48`1.KO_$*``B!"0Y````+#8Y````3DC#D
XM3J[_T"($$#D```$52(#E2$'Y```*`"!P```D"';_4H-*&&;Z3J[_T$JY````?
XM*&<,<F1.KO\Z(@1.KO_<+'D````$(GD````(3J[^8B`Y````*&<*3J[_?")`6
XM3J[^AG``$#D```$59P)P%$S??_Y.=4HY```!%V<``(1(Y^#B+'D````$('D`@
XM```4)&@`,C`Y````4#(Y````4B)Y````7&%<,#D```!4,CD```!6(GD```!@U
XM84@P.0```%0R.0```%HB>0```&AA-#`Y````6#(Y````5B)Y````9&$@,#D`N
XM``!8,CD```!:(GD```!L80Q".0```1=,WT<'3G4@2B0)9P1.KO^43G5A`/]DX
XM##D``````19G'`PY``(```$69P`"="`Y````.+"Y````/&8``F1(Y__B(#D`%
XM``!P(CD```!T$_P``0```1<CP````'`CP0```'0D/```@`#0@M*"*``J`4A`S
XM2$%T`"QY````!$/Y```(`"!Y````%"1H`#*P;``<;`PP+``<0_D```B@4D*PE
XM;``@;PPP+``@0_D```C44D*R;``>;`PR+``>0_D```D(4D*R;``B;PPR+``B[
XM0_D```D\4D(,0@`!8PA"N0```%Q@&#/`````4#/!````4B!*(\D```!<3J[_4
XME#`L`""0;``<)CD```!(##D``0```19F`G8`!H,``0``:P`!:'(`=`!A``PJE
XM+``P+``BD&P`'F$`#!PN`"0$)@64AI:'V(;:ATA"2$-(1$A%?``P+``<,BP`$
XM(+1`;`8T``C&``"T06X``2*X06\&.`$(Q@`!N$!M``$2,"P`'C(L`"*V0&P&>
XM-@`(Q@`"MD%N``#ZND%O!CH!",8``[I`;0``ZC/"````5#/#````5C/$````^
XM6#/%````6DCG`!Q#^0``"#!'^0``"&A)^0``"$Q+^0``"(0(!@``9PA#^0``X
XM"*`F20@&``%G"$GY```(U"I,"`8``F<(0_D```D(*$D(!@`#9PA'^0``"3PJ5
XM2T8&$`8"```%9@*3R1`&`@``"68"E\L0!@(```9F`IG,`@8`"F8"F\T@2B/)&
XM````8&<(,`(R`TZN_Y0B2R!*(\D```!H9P@P`C(%3J[_E"),($HCR0```&1GF
XM"#`$,@-.KO^4(DT@2B/)````;&<(,`0R!4ZN_Y1,WS@`8!A"N0```&!"N0``+
XM`&A"N0```&1"N0```&Q,WT?_3G5(Y_@`)"P`#"@Y````0)BL``0,@@`!``!E"
XM!N**XHQ@\HC"(`1"0(#"2$`P!"0L`!`H+``(F+D```!$#((``0``90;BBN*,%
XM8/*(PB($0D&"PDA!,@1(0$A!(\````!P(\$```!T3-\`'TYU`D&/_R)-80`(Z
XM\B!I`"(@4`Q!``!G+`Q!``%G2@Q!``)G``"$#$$``V=@80`+@F<$2A!G!#`LW
XM`"@Y0``H80`#E&!^80`*W&<$2A!G!B`Y````0"/`````0&$`_SQA``)R80#\B
XMIF!:80`*N&<$2A!G!B`Y````1"/`````1&$`_QAA``*680#\@F`V80`$[F<$=
XM2A!G!B`Y````2"/`````2&$``KY@&F$`"Y!G!$H09P8@.0```#@CP````#AAI
XM``-*<`!.=3`!`D`@`&=.`D&/_Q`\```,00`%9PX0/``!#$$`!F<$$#P``A/`8
XM```!%F$``_(@.0```#`B.0```#0D"B8+(\H````P(\L````T3J[_FDI`9P)P;
XM_TYU,`$"0!``9QX"08__"*P``@`L#$$`"&<&".P``@`L80`#1'``3G4,00`*3
XM9B@@.0```#`B.0```#0D"B8+(\H````P(\L````T3J[_FDI`9P)P`4YU`D&/2
XM_WX`/@%A``"$0_D```#*2$<@/``&&H!*1V<6(#P``8:@#$<`"64*(#P``$X@8
XM/CS__E)'2$<S?``)`!PC?```````("-``"0CR0```!PL>0````1.KOXR80`'^
XM,&8*#$(``V>B?@!@`GX!(GD````<3J[^(")Y````'$ZN_B9"N0```!Q*1TYUL
XM<`!.=4CGP``P!W(!`D!__PQ```!F+"`L``Q(04I':@1$@$2!T;D```!`T[D`I
XM``!P(#D```!`80``H&$`^M1@``"2#$```68J("P`$$A!2D=J!$2`1('1N0``_
XM`$23N0```'0@.0```$1A``"V80#ZHF!@#$```F8>(#P``!F92D=J`D2`T;D`@
XM```X(#D````X80`!?F`\#$```V8>(#P``!F92D=J`D2`T;D```!((#D```!(:
XM80``LF`8#$``!&822D=J`D2!TVP`*#`L`"AA``$*3-\``TYU2.?A\B1Y````\
XM&$?Y```!?`@L``(`+&8$*4``%"0`($HB2RQY````!$ZN_QS!0B!K`"(@4"XL3
XM``QA``580A!A``%*3-]/ATYU2.?A\B1Y````&$?Y```!X`@L``(`+&8$*4``9
XM&"0`($HB2RQY````!$ZN_QS!0B!K`"(@4"XL`!!A``400A!A``$"3-]/ATYU-
XM2.?@\B1Y````&$?Y```#^"0`($HB2RQY````!$ZN_QS!0B!K`"(@4!(\`"M*/
XM@&H&1(`2/``M$,%A``0P0A!A``"Z##D``0```19F'"`Y````/"/`````.&%.`
XM$_P``````19A``$>8`1A`/D^3-]/!TYU2.?@\B1Y````&$?Y```$V"0`($HBH
XM2RQY````!$ZN_QS!0B!K`"(@4&$``Y9"$&%83-]/!TYU2.?@\B1Y````&$?YJ
XM```#&"0`($HB2RQY````!$ZN_QS!0B!K`"(@4&$``YA"$&$B##D``````19F)
XM#A/\``$```$680``EF`$80#XMDS?3P=.=2!K`")":``(0F@`#"!*(DL@`DZNM
XM_]8@2R)*E<IP`4ZN_E!.=4CGX/8L>0````0@>0```!@J2$/Y```&/"9)<`).'
XMKOY$0_D```9H""P``@`L9PX`:0"```P":_]_``Q@#`)I_W\`#`!K`(``#"!-B
XM(DN5RG("3J[^2B!+(DUP`DZN_E!,WV\'3G5(Y^#V+'D````$('D````8*DA#2
XM^0``!;@F27`#3J[^1$7Y```%Y$/Y```&$!(Y```!%@P!``%G&@P!``)G*`!K)
XM`(``#`)J_W\`#`)I_W\`#&`F`FO_?P`,`&H`@``,`FG_?P`,8!(":_]_``P"*
XM:O]_``P`:0"```P@32)+E<IR`TZN_DH@2R)-<`-.KOY03-]O!V$`]Y).=1`8H
XM#```*V<(#```+6<(4XAA``:L3G5A``:F9P)$@$YU0CD```$680#_0#`%,@9(C
XMYP8`2$5(1D)%0D9A``$<3-\`8#/%````>#/&````>DCGP`!A``-63-\``V8``
XM`/H,@@```!!GW$CGY@!(Y\``D'D```!X:@)$0))Y````>FH"1$%F!$I`9S0T)
XM+``@E&P`'$A`0D"`PF@"</\T+``BE&P`'DA!0D&"PF@"<O^P06(",`%A``18;
XM(\````!(3-\``SHY````>#PY````>MI`W$%(14A&0D5"1B(L``PD+``0XHGB;
XMBN*-2D5K`G(`XHY*1FL"=``CQ0```'`CQ@```'1(14A&80`!LMJ!G((CQ0``-
XM`$`CQ@```$0@!6$`_#H@!F$`_'P@.0```$AA`/RZ3-\`9TJ"9AYA``)(9AH,Y
XM@@```!!F$#/%````>#/&````>F``_PQP`$YU+P`CQ0```'`CQ@```'1(14A&(
XM80`!3"/%````0"/&````1"`%80#[V"`&80#\&F$`]@8@'TYU(#D````P(CD`\
XM```T)`HF"R/*````,"/+````-$ZN_YI*0&92,\4```!X,\8```!Z80`!ZF90.
XM#((````09^9(YP8`2$5(1D)%0D9A`/]^3-\`8$J"9AQA``&:9BH,@@```!!F1
XM#C/%````>#/&````>F#$<`!@$DA%2$9"14)&80#_2G`!8`)P_TYU2.?@`#(\-
XM)Q!T``*```#__X#!9@1*0F<(!@``,!#`=`%(0$C!@OP`"F;@2D)F!!#\`#!,I
XMWP`'3G5(Y^``(@!(0&&^$/P`+G0#POP`"DA!!@$`,!#!2$%1RO_P2D%J!&$`X
XM`.A,WP`'3G5A-D'Y```+V2`%+BP`#&%8$/P`("`&+BP`$&%,0A@@>0```!!!#
XMZ`!40_D```EP<%!R`$ZN_RA.=2\`,`7*[``,2$5"1<#L``[:@-JL``0P!LSL/
XM`!!(1D)&P.P`$MR`1(;<K``((!].=4CG_G`4/``K2H!J!A0\`"U$@!#"%#P`1
XM,`R`(````&4*!(`@````4@)@[A#"$/P`+D/Y````!$7Y````1"9\_____W(`O
XM%#P`,"89*!HJ`"P!G(2;@VL((`4B!E("8.Z^BR9I__QB!!#"8-H,`@`U90)A(
XM!DS?#G].=4CG@(`0(`P``"YG^`P``#EF!A"\`#!@[%(03-\!`4YU2.?`P&$DX
XM9AQ*@F86",``#"QY````!$ZN_L((```,9@1@XG``3-\#`TYU+'D````$=``@D
XM>0```!0@:`!6$"@`#P'"3J[^C$J`9CP@>0```!@@"&<2(&@`5A`H``\!PDZN=
XM_HQ*@&8@(GD````<(`EG$B!I``X0*``/`<).KOXL2H!F0L%"3G4B0"0I`!0VK
XM*0`8."D`&BII`!PZ*0`@/"D`(B1I`"0F:0`H3J[^A@R"```$`&8B#$,`,V8<[
XM"`0``V<6<`%.=2)Y````'$ZN_B9"N0```!QT`W``3G4P/"``<@!T`"8Y````I
XM.&%>*4``#"E``!`P+``<T&P`("(Y````0"0L``SB2&0&)@+B@Y*#2D!G!I*"Q
XM4T!@]BE!``0P+``>T&P`(B(Y````1"0L`!#B2&0&)@+B@]*#2D!G!M*"4T!@B
XM]BE!``A.=4CG>(!(0TI#9PKB2.)1XE)30V#T2$-!^0```(`X&.-#9!3`Q,+$3
XMQ,1(0M1!2$'30$A`>`#11$I#9N)(0#`!3-\!'DYU2.=X@'(`2D!K!E)!XTA@E
XM]DA!0?D```"@=`_C2388>``X`$A$QL#8@V4,``$``4A$:@)21#`$4<K_XB`!%
XM3-\!'DYU2.?`PBQY````!"!Y````%"!H`%9.KOZ,2H!G*B)`#*D```0``!1FH
XM&@QI`#,`&&82,"D`&@@```-G"$ZN_H9P_V`03J[^AG``<@!.KO[."```#$S?'
XM0P-.=4CG?'`F2'(`=@`D/(````!#^0````!%^0```$`0&`P``"MG^`P``"UFQ
XM!@C#``]@[`P``"YF!@C#``=@X`P``#!E,@P``#EB+`C#``"UB4H#:PQ#^0``3
XM``!%^0```$`$```Q:[A(@"@1*A+4A=.$4<C_^F"H4XAA3DI#:@)$@2`!"`,`1
XM`&8"($M,WPX^3G5(YV!`(DAT`'``$A@,`0`P918,`0`Y8A`$`0`P2('`_``*(
XMT$%T`6#B4XAA#$I"9@(@24S?`@9.=2\`$!@,```@9_A3B"`?3G5A`/\H9PHC^
XMP````$!P`4YU0CD```$4<`%.=6$`_PYG""/`````1'`!3G5A%F<*(\`````XS
XM<`%.=0BL``(`+'`!3G5(YV!@)$EA`/]N2$`,&``N9C)R`'0`0D`4&%)`#`(`:
XM,&4&#`(`.6/P0^C__U-`9Q(4(00"`#!(03("2$&"_``*8.HP`5.(80#_9@R`+
XM`!T``&($<@%@!'``(DI,WP8&3G5A`/\49P8Y0``H<`%.=0BL``,`+`BL````]
XM+'`!3G4(K``#`"P([````"QP`4YU".P``P`L<`%.=0BL``0`+`CL``$`+'`!D
XM3G4(K``$`"P(K``!`"QP`4YU".P`!``L<`%.=1/\``$```$43G40&`P``&%EV
XM!`0``"`,``!89@YA`/X(9P8I0``4<`%.=0P``%EF#F$`_?1G!BE``!AP`4YU2
XM4X@([``"`"QP`4YU0_D```]D$!AG"@P``"!G!!+`8/)3B$(1(\D``!!T80#^Q
XM@A`\``$3P````1A.=1`89V0,``!A900$```@2'K_\`P``$QG`/\<#```2&<`Q
XM_R0,``!!9P#_+`P``$-G`/\N#```5V<`_S8,``!09P#_/@P``$=G`/]`#```I
XM2F<`_W@,``!-9P#^9`P``%AG`/XT6(]P`$YU<`%.=4'Y```/9"0(('D``!!T+
XM,#D```!,9P9A`/F<0A!2>0```$Q#^0``#"]P`"QY````!$ZN_=A*@&=6+$`@U
XM>0```!`D:``P)&H`!")H`%@@0C(L`!PT+``>-BP`(#@L`"+F25Y#YDN609A"-
XM4D-21'`!3J[_N"0`(DXL>0````1.KOYB2H)F$A/\``<```$58`@3_``&```!6
XM%4YU2.?__BA(+'D````$0_D``!_%<`!.KOW82H!G``",+$`(+``#`"QG(`CL%
XM````+`RL``0````,91`,K``$````$&4&"*P````L""P`!``L9R@([``!`"P(<
XM+``"`"QG&BPL`!0N+``8-BP`*&$``PY*0VL&"*P``0`L*E0B33`\``!.KOZJ1
XM(DTP+``<,BP`'C0L`"`V+``B3J[^S@@L``$`+&<$85Y@`F$2(DXL>0````1.V
XMKOYB3-]__TYU."P`'#HL`!X\!#XL`"`V+``B80`![&$``]YF*E)$N$=E\&$`W
XM`=Q21;I#8AIA``'280`#Q&804T2X1F+P80`!PE)%ND-CS$YU,"P`'@!`P`!(2
XM0#`L`!QA#F8&80`$PF;V80`$R$YU2.?_`#@`2$`Z``)%/_\V``)#P`!A``$HX
XM2D!J1#P$/@4T`R)-(`0B!6$``WIA1")-(`0B!6$``Y)A``-69B:\1&;JOD5F>
XMYK1#9N(B32`$(@5.KO["(DU.KOZJ(DUA``0D<`!@"")-80`$&G#_3-\`_TYU(
XM2.>C`&$``2(T`#P$/@5A?&$``1:T0&<P2D-J!`I#0``&0T``:@0*0T``2D!KN
XM%$J`:Q`P!8!#"D#``$A`,`1A``0,.`8Z!V`^/`0^!6%>80``V+1`9QY*0&L4B
XM2H!K$#`%@$,*0,``2$`P!&$``^`X!CH'8!)*0VH$"D-```9#P`!J!`I#0`!,0
XMWP#%3G5*0VL."`,`#F8$4T5.=5-$3G4(`P`.9@121$YU4D5.=4I#:PX(`P`.Z
XM9@121$YU4T5.=0@#``YF!%)%3G531$YU+P-V`%-$81Z&0%1$81B&0%-$4T5A`
XM$(9`5$5A"H9`4T4P`R8?3G5(YT#`<`"X;``<922X;``@8AZZ;``>91BZ;``BH
XM8A(B32`$(@5.KO["#$```&8"</],WP,"3G5(YW/`=`!P_[AL`!QE``"DN&P`R
XM(&(``)RZ;``>90``E+IL`")B``",-@0\`\SL``Q(1CP\``#&[``.W(/<K``$_
XM:P0T/$``(DT@!"(%3J[^P@C``!\,0```9E@V!3X#SNP`$$A'/CP``,;L`!+>W
XM@T2'WJP`"#8L`"A50VH"=@!A0`Q#__]G$`*#``#__X;L`"I(0U1#8`0V/``!A
XM,`,B34ZN_JHP!#(%(DU.KOZ\,`,(@``?#$```6<"@$),WP/.3G4(+````"QGN
XM``"T2.?O`"@&*@<(+``"`"QG""PL`!0N+``8(`1A3B0!T(!I0"`%8430@&DX,
XM(`'0@FDRE('4AFDN(`0B!6$PTH%I)-*':2`J`2@"4<O_SB`$81HD`="`:0P@9
XM!6$0T(!I!-*":`)20TS?`/=.=2(`2.<\`"0`:@)$@$J!:@1$@4:"-@'&P'H=F
XMZJM(0#@!R,!Z#>JLUH1(03@!R,#GC-:$2$#"P.JIUH%*@FH"1(,B`TS?`#Q.Y
XM=4CG[P!(1DA'.`8Z!P@L``(`+&<(/"P`%#XL`!@P!#(`P\#G@4A!-`'00&E&,
XM,`4R`,/`YX%(0=!`:3@P`=!":3*40=1&:2XP!#(%P\#G@4A!TD%I(-)':1PZ#
XM`3@"4<O_OLO%R<38A6D*V(38A&D$V(1H`E)#3-\`]TYU2.>`@"`L`"1G!"!`0
XM3I!,WP$!3G4SP```'\`SP0``'\(SP```'[PSP0``'[Y".0``'\1.KO\$3G5(\
XMYS``849*.0``'\1J+#0`-@$P.0``'[PR.0``'[XSP```'\`SP0``'\).KO[^0
XM,`(R`T(Y```?Q&$2,\```!^\,\$``!^^3-\`#$YU-#D``!_`-CD``!_"E$"67
XM04I":@1$0D1#2D-J!$1"1$-*0F<::@C60F8@=`1@'DI#9PBV0F84=`)@$G0!N
XM8`Y*0V<$=`-@!G0`8`)T_Q8Y```?Q&<22@)G%+8"9Q`3_`#_```?Q$YU$\(`V
XM`!_$3G4O"3`Y```?O#(Y```?ODZN_OXB7TZN_OA.=0```````````&=R87!HJ
XM:6-S+FQI8G)A<GD`3G%.^0```&A.^0````!.^0```+1P80```^P````7````I
XM````&@X``![&```>S```'M(``![8```>W@``'O```![\```?`@``'P@``!\.U
XM```?'```'R0``!\J```?-@``'SP``!^"```?E```'YP``!^F```?K```!(P`F
XM``)"````/`````$```""````R@```/@```$F```"8@```IH```*@```"[```\
XM`PH```,N```#-````VH```..```#E````YX```/$```$H```!20```7P```&Z
XM0```!UP```>:```(_```"18```DH```).@``"4P```HX```*/@``"D0```I*<
XM```*5@``"F0```IR```*@```#F8```ZN```.]@``#V@```^>```0'```$"H`2
XM`!"````0C@``$)0``!.(```3K@``%!X``!0D```5Y```%B0``!:\```6P@``U
XM%OX``!<$```8T```&.@``!EJ```9<@``&8P```$%`````P```"(````X````M
XM0````%@```!N````?````(X```"P````N@```-8```$$```!+@```5@```%V4
XM```!I````:X```&V```!U@```>H```'R```!^````?X```($```"#@```A@`H
XM``(B```"+````E(```)T```"@````I````+(```"X````P0```-4```#<```M
XM`WP```."```#J@```[````/,```#[````_(```/\```$"```!"@```0R```$(
XM0@``!%(```18```$=@``!(````2$```$D@``!*8```2P```$N@``!,(```3(^
XM```$T@``!-P```3N```$^```!0X```4<```%+@``!30```58```%8```!>@`S
XM``7Z```&````!A@```8@```&,@``!C@```90```&6@``!F8```9P```&>@``7
XM!H0```:*```&E```!IH```:H```&L```!KP```;$```&S@``!N0```;Z```')
XM````!PH```<4```'*```!S(```<\```'1@``!TX```=4```'?```!X(```>0W
XM```'L@``!\P```?6```'Z@``!_H```@(```(#@``"!@```@>```()```""P`G
XM``@R```(.```"$````A&```(3```"%0```A:```(8```"&@```AN```(=```L
XM"'P```B:```(I```"*X```BT```(P@``",@```C0```(U@``"-P```CV```)_
XM`@``"5H```EB```):```"7````F"```)B@``"AP```HB```**```"BX```JR0
XM```*Q@``"MH```KN```+!```"PH```L0```+%@``"RH```M6```+>@``"X``R
XM``O8```+W@``"_P```P"```,(```#"8```P\```,0@``#'0```Q^```,A```O
XM#(X```R4```,T@``#-@```SB```,Z```#08```U$```-9@``#7````UZ```-&
XMJ```#:X```VT```-V@``#>````WF```."```#@X```XL```.,@``#F````Y^1
XM```.J```#L8```[P```/`@``#S````\X```//@``#T@```]B```/=```#Y@`>
XM``^J```/Q@``#]```!`.```0%```$'(``!!X```0F@``$28``!%(```13@``2
XM$70``!%^```1O```$<8``!',```1^@``$@```!(2```2&```$BH``!)*```2J
XM4```$F```!)F```2=```$GH``!*4```2F@``$J0``!*J```2N```$KX``!+XT
XM```2_@``$Z0``!2X```4T```%.P``!5*```55```%6@``!6````5J@``%EX`$
XM`!>(```7D@``%Z(``!>P```8B```&/8``!EX```9A@``&:0``!GP```9^@``_
XM``,````$```?X```'^8``!_:`````````_(```/J```$'B`````#,S,S`%'K`
XMA0`(,28``-&W```4^````A@````U````!0``````````````````````````,
XM````````````````,S,S,QZX4>OI>-3]%UCB&;6(XVC>]!:]K^4U>5YCN(R)W
XM<%]!#;YO[`%?U_X`(R\S``.$N```6A(```D!M0771>K!]27ZA/T^_I[_3_^G)
XM_]3_ZO_U__K__?____]J"C!P%RP+5@6;`LH!9`"R`%D`+``6``L`!@`#``$`,
XM`0B(```/``\P#V`/D`_`#_`,\`GP!O`#\`#P`/,`]@#Y`/P`_P#/`)\`;P`_"
XM``\##P8/"0\,#P\/#PP/"0\&#P,``````4`!```%`0(````/````````"\X`3
XM``````````%``0`!`@``!!@``QL```````````````````````````#_____[
XM_____P`/`!0`%`"4`%`!`@``!F```P`*```!?`````````````````````#_)
XM_________P`/```!X``G``T`:``(`````P`$```"1`````````',````````G
XM`:A```````````N2``````````T````````````````````````````````!4
XM`@``__8```````````O$`````````F@`)P`:`&@`"`````,`!````D0`````N
XM```",`````````(,0`$````````+GP`````````-````````````````````X
XM`````````````0(``/_V```````````+Q@````#__O_^`0``!0```E0`````?
XM``````!K````:P`+````"P````````*4``H`"P`+``8`!``#``$```;`````V
XM```````````````````!`````````L``"@`>``L`!@`$``,``0``!M0`````>
XM````````````````@`$````````"[``#`!(`!@`+``0``P`!```&Z```````+
XM``````````````"```````````,8`!8`$@`&``L`!``#``$```;\````````>
XM`````````````````````````Z``%P`J`"@`"`````,`!````WP````````#=
XM:`````````-$0`(````````+K``````````)````````````````````````Q
XM`````````0(``/_N```````````+R`````#__O_^`0``!0```XP`````````2
XM```K````*P`+````"P````````/,``X`*``&``L`!``#``$```;H````````X
XM```````````````"`````````_@`0@`H``8`"P`$``,``0``!OP`````````"
XM````````````@`(````````$@``7`#<`*``(```$`P`$```$7`````````1([
XM````````!"1``P````````NU``````````D`````````````````````````T
XM```````!`@``_^X```````````O*`````/_^__X!```%```$;```````````U
XM`"L````K``L````+````````!*P`#@`U``8`"P`$``,``0``!N@`````````F
XM``````````````,````````$V`!"`#4`!@`+``0``P`!```&_```````````Q
XM``````````"``P````````5@`!L`1``@``@```0#``0```4\````````!2@`H
XM```````%!$`$````````"[X`````````!@``````````````````````````<
XM``````$"``#_Z@``````````"\P`````__[__@$```4```5,````````````4
XM(P```",`"P````L````````%C``2`$(`!@`+``0``P`!```&Z```````````(
XM``````````"`!`````````6X`#X`0@`&``L`!``#``$```;\````````````<
XM```````````$````````!>0`20`H`"``#``&``(``0``!Q````<D````````5
XM````````(`4````````&$`!)`#4`(``,``8``@`!```'.```!TP``````````
XM```````@!@````````8\`$D`0@`@``P`!@`"``$```=@```'=```````````*
XM`````"`'````````!F@`:@`H`!,`&0`&``(``0``![````?$````````````>
XM````$`@````````&E`!^`"@`$P`9``8``@`!```'B```!YP`````````````_
XM```0"0```````````&H`0@`G``P`!@`#``$```?8```'[```````````````4
XM```*````````````"P`&``4``````P`````````````+``8`!0```!@#````4
XM``````````8`"P`%````,`,`````````````!@`+``4```!<`P``````````^
XM```@``P`!0```(@!`````````````"``#``%````B`,`````````````(``,B
XM``4```#H`0`````````````@``P`!0```.@#`````````````"``#``%```!\
XM2`$`````````````(``,``4```%(`P`````````````3`!D`!0```G`!````J
XM`````````!,`&0`%```"<`,`````````````$P`9``4```&H`0``````````!
XM```3`!D`!0```:@#`````````````"<`#``%```#.`$`````````````)P`,$
XM``4```,X`P```````````!\``@(```@0```(&/_V````"@```````!\``@(``
XM``@H````````__8````*`````!\``@,```A```````````H```````H`````O
XM```?``(#```(7``````````*`````/_V````````'P`"`P``"'@```````#_J
XM]@``````"@```````!\``@,```B4````````__8`````__8````````?``(#.
XM```(L```"+P`!0`%```````%__L`````'P`"`@``",P```````$````*````'
XM````'P`"`P``".0```CP__L`!0````#_^__[`````!\``@(```D``````/__E
XM``#_]@```````!\``@,```D8```))/_[``4```````4`!0`````?``("```)<
XM-``````````!````"@`````?``(#```)3```"5C_^__[```````%__L`````,
XM'P`"`@``"6@```````#__P``__8!`@$```$``0````````O9````````%X``(
XM`!>:```7J@``&"(``!@P```80```&%```!A:```8:@``&'H``!B$```8C@``\
XM&,Y864U)3$A!0U=01TI3````%X```!>:```7J@``&"(``!B@```8M```&/P`K
XM`!C.6`!9`$T`20!*6`!*60!&3$%'4P!3059%``````HL```*+0``"DX```IO,
XM```*B```"J$```J^```*_P``"RT```M,```+=0`Z($-O=6QD(&YO="!A;&QOG
XM8V%T92!S:6=N86P@8FET"@`Z($5R<F]R(&EN(&-O;6UA;F0@;&EN92!O<'1IB
XM;VYS"@`Z($-O=6QD(&YO="!O<&5N('-C<F5E;@H`.B!#;W5L9"!N;W0@;W!E^
XM;B!W:6YD;W<*`#H@0V]U;&0@;F]T(&%L;&]C871E(&UE;6]R>0H`.B!9;W4@1
XM;F5E9"!I9F8N;&EB<F%R>2!I;B!Y;W5R(&QI8G,Z(&1I<F5C=&]R>2!T;R!S)
XM879E('!I8W1U<F5S"@`Z(&EF9BYL:6)R87)Y(')E='5R;F5D(&5R<F]R(&]N7
XM('-A=F4@8V]M;6%N9`H`.B!#;W5L9"!N;W0@;W!E;B!I8V]N+FQI8G)A<GD*B
XM`#H@0V]U;&0@;F]T(&-H96-K(&EC;VX@*&9O<B!T;V]L('1Y<&5S*0H`.B!%]
XM<G)O<B!I;B!T;V]L='EP92!O<'1I;VYS"@`K,"XP,#`P,#`P,#``*S`N,#`PD
XM,#`P,#`P`#`P+C`P,#`P`"LP+C`P,#`P`#`P,#`P`'@`>0!-`%H`:0!-86YD(
XM96Q"<F]T`"LP+C`P,#`P,#`P,"`K,"XP,#`P,#`P,#``9W)A<&AI8W,N;&EBP
XM<F%R>0!I;G1U:71I;VXN;&EB<F%R>0!D;W,N;&EB<F%R>0!I8V]N+FQI8G)A.
XM<GD`:69F+FQI8G)A<GD`=&EM97(N9&5V:6-E``I4:&ES('!R;V=R86T@9')A3
XM=W,@=&AE($UA;F1E;&)R;W0@86YD($IU;&EA('-E=',@*'H@+3X@>K(@*R!CA
XM*0IU<VEN9R!A('-M87)T(&-O;G1O=7(M8W)A=VQI;F<@;65T:&]D(&%N9"!F)
XM87-T(#,R+6)I="!F:7AE9"!P;VEN="!M871H+@I!=71H;W(Z($AA;FYU(")TR
XM:&4@1$TB($AE;&UI;F5N"@I&<F5E;'D@9&ES=')I8G5T86)L92!V97)S:6]N?
XM(#$N,#`*"B!Z(#T@('@@*R`@>2!I(&ES('1H92!C96YT97)P;VEN="!O9B!T@
XM:&4@<V5T"B!C(#T@:G@@*R!J>2!I(&ES(&$@8V]N<W1A;G0@;VYL>2!F;W(@L
XM2G5L:6$@<V5T<PH@;2!I<R!M86=N:69I8V%T:6]N+"`U("T@,CD@*&QO9R!S6
XM8V%L92D*(&D@:7,@=&AE(&UA>&EM=6T@;G5M8F5R(&]F(&ET97)A=&EO;G,LX
XM(&D@/#T@-C4U,S4*4V%V92!P:6-T=7)E<R!T;R!F:6QE;F%M92!B>2!#5%),F
XM+5,*"D9L86=S.B`M;"!L;W<@("`@+6@@:&EG:"`@+6$@875T;R!P<F5C:7-IQ
XM;VX*("`@("`@("UC(&-R87=L("`M=R!W86QK("`M<"!C<F%W;"!I9B!P;W-SM
XM:6)L90H@("`@("`@+7@@97AI="`@("UG('5S92!'54D*("`@("`@("UJ(&IUK
XM;&EA("`M;2!M86YD96QB<F]T"@I5<V%G93H@;6%N9&5L("!O<B`@;6%N9&5L^
XM(#\*("`@;W(@(&UA;F1E;"![+7@;6S1M>!M;,&T@+7D;6S1M>1M;,&T@+6T;[
XM6S1M;1M;,&T@+6D;6S1M:1M;,&T@+6PM:"UA("UC+7<M<"`M>"UG("UJ+6T*&
XM("`@("`@("`@("`@("`@+6IX&ULT;6IX&ULP;2`M:GD;6S1M:GD;6S!M("USX
XM&ULT;3QF:6QE;F%M93X;6S!M?0IC;VXZ,"\U,"\V-#`O,3`P+R!M86YD96P@3
XM(&)Y($1-("`Q.3DP(`!M86YD96PN<&EC='5R90``````````````````````Z
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XM````````````````````````#W(```/L````%0````````F$```)B```"8P`X
XM``F0```)E```"9@```F<```)H```":0```FH```)K```";````FT```)Q@``]
XM"<H```G.```)T@``"=8```G:```)W@``">(```!I`````0```10```%>```!X
XM?````8X```&6```!G@```:@```'8```!X````?(```'Z```"`@```@P```(\B
XM```"3````F@```)Z```"E````J8```+````"T@```NP```+^```#&````RH`^
XM``,R```#.@```T0```-T```#A````Z````.R```#S````]X```/X```$"@``(
XM!!(```0:```$)```!%0```1D```$@```!)(```2L```$O@``!-@```3J```$V
XM\@``!/H```4$```%-```!40```5@```%<@``!8P```6>```%N```!<H```7.J
XM```%Y```!?8```7Z```&$```!B(```8F```&/```!DX```92```&:```!GH`I
XM``9^```&I@``!JH```@(```(#```""````@X```(5```"'````B,```(J```$
XM"*P```C$```(W```".````CX```)$```"10```DL```)1```"4@```E@```)'
XM?```"@````H$```*"```"@P```H0```*%```"A@```H<```*(```"B0```HH&
XM```0=````!`````"```&R@``!MX```;R```'!@``!QH```<N```'0@``!U8`+
XM``=J```'?@``!Y(```>F```'N@``!\X```?B```']@````````/R0``#Z@``:
XM`/($``H`$0`@@$!`_^````0`#@`?`#^```#_X$I`((`1``H`!````#^`'P`.4
XM``0````$``P`%``D`$0`A`!$`"0`%``,``0```````@`&``X`'@`.``8``@`(
XM`````(``P`"@`)``B`"$`(@`D`"@`,``@```````0`!@`'``>`!P`&``0```,
XM``````````````````/\<B4"!!57`F0E50>4154'E'(E`F0```($```#_```Z
XM````````______________P#C=K\`^JH_`/:JO@#NJKX`XW:_`/___P#___\G
XM`___________````````!_P```0$9G5^A%551`16=42$55=$!&551(0``$?\A
XM``!`@```?X``````________^`/___@#F8J``ZJJ@`.IBH`#JJB``YJJ@`/_[
XM_X`#__^`?___@'______``````````````.<9S=S#%1$(I1F)B``5!0@`%=GT
XM(I0```,,```#G```````````______________QCF,B,\ZN[W6N9V=__J^O?+
XM_ZB8W6O___SS___\8___________```````````KLP``.JJ``"NJ@``JJH``T
XM*JL`````````````````````````$````&P```""```&@@``"0(``#@$```)K
XM`@``!H(```""````;````!```````````````````/__X`#__^``U$S@`,55>
XM8`#456``U55@`-54X`#__^``___@`/__X`#__^``_^_@`/^3X`#_?>``^7W@F
XM`/;]X`#'^^``]OW@`/E]X`#_?>``_Y/@`/_OX`#__^``___@`/__X```````4
XM`````!5%P``514``%47``%5%0`!W=4````````````````````````>````(C
XM0```&"````0@```$$````A````((```!!@```(0```!X````````````````/
XM````````___@`/__X`#JNB``ZKJ@`.JZ(`"JNJ``B(J@`/__X`#__^``___@8
XM`/__X`#X?^``][_@`.??X`#[W^``^^_@`/WOX`#]]^``_OG@`/][X`#_A^``L
XM___@`/__X`#__^``___@``````````````````````_P`#JN``@0`"JD``I0?
XM`"JD``F0`"JD``F0`#ND``I0``@```@0``````_P`````````````````/__D
XM___^`/_____^`/____`.`,51__`.`-5;__`.`-5;__`.`-5;__`.`,1;__`.G
XM`/?___`.`/____`.`/_____^`/_____^`````_(```/K````1P```_(```/IM
XM````/$CGX.(D`"!Y````Z"`(9@IA*F<B(\@```#L#&@$```&90@D2&$69PXD\
XMB#`H``8A@@``6&@`!DS?1P=.=2`\```$`'(`+'@`!$ZN_SI*@&<6($!"D#%\@
XM``@`!#%\``@`!B/(````Z$YU2.=@XB1Y````['#_(@IG-EAJ``0P*@`$)#(`)
XM_+!J``9F(")*)%$@/```!``L>``$3J[_+B/*````[&8&0KD```#H(`)R_TS?:
XM1P9.=4CGP.(D>0```.PL>``$(DH@"F<.)%$@/```!`!.KO\N8.Q"N0```.A",
XMN0```.Q,WT<#3G4``````````````^P````)````!`````@````6````8@``9
XJ`&X```">````I@```+H```#8````W@````````/R```#Z@````````/RY
X``
Xend
Xsize 15792
END_OF_FILE
if test 22144 -ne `wc -c <'mandel.uu'`; then
    echo shar: \"'mandel.uu'\" unpacked with wrong size!
fi
# end of 'mandel.uu'
fi
if test ! -d 'source' ; then
    echo shar: Creating directory \"'source'\"
    mkdir 'source'
fi
if test -f 'source/gui.asm.ae' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'source/gui.asm.ae'\"
else
echo shar: Extracting \"'source/gui.asm.ae'\" \(546 characters\)
sed "s/^X//" >'source/gui.asm.ae' <<'END_OF_FILE'
X* This one for RightButton.
Xtmpx        ds.w  1
Xtmpy        ds.w  1
X
X* Huh! My very own structure.
XMyMandelBrot:
X            ds.b  mb_SIZEOF
XMyTmpRas:   ds.b  tr_SIZEOF
XMyAreaInfo: ds.b  ai_SIZEOF
XIOreq:      ds.b  IOTV_SIZE
XMsgPort:    ds.b  MP_SIZE
X
Xinter:      ds.b  1     ; Boolean: are we interactive
Xerror:      ds.b  1     ; general error code
Xmethod:     ds.b  1     ; method of zooming (ZOOM, REDRAW or RESET)
Xisdrawn:    dc.b  1     ; Boolean: is grid drawn?
Xsaveit:     dc.b  1     ; Boolean: do we have to save picture?
X         end
X
END_OF_FILE
if test 546 -ne `wc -c <'source/gui.asm.ae'`; then
    echo shar: \"'source/gui.asm.ae'\" unpacked with wrong size!
fi
# end of 'source/gui.asm.ae'
fi
if test -f 'source/iff.i' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'source/iff.i'\"
else
echo shar: Extracting \"'source/iff.i'\" \(1448 characters\)
sed "s/^X//" >'source/iff.i' <<'END_OF_FILE'
X*  Assembler include file for the iff library 
X*  by Christian A. Weber, Zurich/Switzerland            V16.1  01-Dec-88
X
X		XREF	_IFFBase
X
XIFFVERSION:	EQU	16
X
XIFF:	      MACRO
X		movea.l	_IFFBase,a6
X		jsr	%1(a6)
X	      ENDM
X
X
X*************** L I B R A R Y - O F F S E T S ****************************
X
XOpenIFF:	equ	-30	; (filename)			(A0)
XCloseIFF:	equ	-36	; (ifffile)			(A1)
XFindChunk:	equ	-42	; (ifffile,chunkname)		(A1,D0)
XGetBMHD:	equ	-48	; (ifffile)			(A1)
XGetColorTab:	equ	-54	; (ifffile,colortable)		(A1/A0)
XDecodePic:	equ	-60	; (ifffile,bitmap)		(A1/A0)
XSaveBitMap:	equ	-66	; (name,bmap,ctab,crmd)		(A0-A2,D0)
XSaveClip:	equ	-72	; (name,bmap,ctab,crmd,x,y,w,h)	(A0-A2,D0-D4)
XIffError:	equ	-78	; ()				()
XGetViewModes:	equ	-84	; (ifffile)			(A1)
XNewOpenIFF:	equ	-90	; (filename,memtype)		(A0,D0)
X
X
X*************** F E H L E R - C O D E S **********************************
X
XIFF_BADTASK:		equ	-1	; Fehler-Abfrage von falschem Task!
X
XIFF_CANTOPENFILE:	equ	16	; Datei existiert nicht
XIFF_READERROR:		equ	17	; Fehler beim Einlesen der Datei
XIFF_NOMEM:		equ	18	; zuwenig Speicher um Datei zu laden
XIFF_NOTIFF:		equ	19	; Datei ist kein IFF-File
XIFF_WRITEERROR:		equ	20	; Fehler beim schreiben
X
XIFF_NOILBM:		equ	24	; kein ILBM-File
XIFF_NOBMHD:		equ	25	; BMHD-Chunk nicht gefunden
XIFF_NOBODY:		equ	26	; BODY-Chunk nicht gefunden
XIFF_TOOMANYPLANES:	equ	27	; Bild hat mehr Planes als BitMap
XIFF_UNKNOWNCOMPRESSION:	equ	28	; Unbekannter Kompressions-Typ
X
END_OF_FILE
if test 1448 -ne `wc -c <'source/iff.i'`; then
    echo shar: \"'source/iff.i'\" unpacked with wrong size!
fi
# end of 'source/iff.i'
fi
if test -f 'source/macros.i' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'source/macros.i'\"
else
echo shar: Extracting \"'source/macros.i'\" \(349 characters\)
sed "s/^X//" >'source/macros.i' <<'END_OF_FILE'
X* \0 should be the suffix. Hope this works.
X
Xbhs   macro
X      bcc.\0   \1
X      endm
X
Xblo   macro
X      bcs.\0   \1
X      endm
X
Xpush  macro
X      movem.l   \1,-(sp)
X      endm
X
Xpull  macro
X      movem.l   (sp)+,\1
X      endm
X
XBase  macro
X      move.l   _\1Base,a6
X      endm
X
XCall  macro
X      xref     _LVO\1
X      jsr      _LVO\1(a6)
X      endm
X
END_OF_FILE
if test 349 -ne `wc -c <'source/macros.i'`; then
    echo shar: \"'source/macros.i'\" unpacked with wrong size!
fi
# end of 'source/macros.i'
fi
if test -f 'source/mbrot.i' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'source/mbrot.i'\"
else
echo shar: Extracting \"'source/mbrot.i'\" \(1659 characters\)
sed "s/^X//" >'source/mbrot.i' <<'END_OF_FILE'
X
X     IFND EXEC_TYPES_I
X     INCLUDE "exec/types.i"
X     ENDC
X
X* signed 32-bit fixed point, scaled by 2^29 (range -4 .. 4)
XFIXED MACRO
X      LONG  \1
X      ENDM
X
X   STRUCTURE   mbrot,0
X
X* Rastport image will be drawn to
X      APTR  mb_RastPort
X
X* These define z = x0 + y0 i that will be mapped to upper lefthand
X* corner of Rastport (that is (0,0) NOT (x1,y1))
X      FIXED mb_x0
X      FIXED mb_y0
X
X* Deltas in both directions, i.e. how much to increment z for each pixel
X      FIXED mb_dx
X      FIXED mb_dy
X
X* If this is actually a Julia set, this is the c = jx + jy i
X      FIXED mb_jx
X      FIXED mb_jy
X
X* (x1,y1)-(x2,y2) rectangle within rastport to fill with mandelbrot
X      UWORD mb_x1
X      UWORD mb_y1
X      UWORD mb_x2
X      UWORD mb_y2
X
X* Pointer to a call-back procedure (or NULL) that should return
X* with Z clear (result nonzero) if some kind of break condition is met
X      APTR  mb_break
X
X      UWORD mb_i           ; max. number of iterations, 0<= i <=65533
X      UWORD mb_colors      ; number of colors used in colouring OUTSIDE
X      UBYTE mb_flags       ; see below
X      BYTE  mb_pad
X   LABEL mb_SIZEOF
X
X* Flags for mb_flags
X      BITDEF   MB,HIGH,0   ; 32 bit precision enabled
X      BITDEF   MB,CRAWL,1  ; crawling enabled
X      BITDEF   MB,JULIA,2  ; this is actually a Julia set
X      BITDEF   MB,AUTOPREC,3 ; automatic precision (16/32 bits, ignore HIGH)
X      BITDEF   MB,AUTOCRAWL,4 ; automatic crawling when adequate, ign. CRAWL
X
X* Limit for AUTOPREC
XDELTALIMIT  EQU   $40000
X
X* PIXEL color defines
XCLEAR    EQU   0  ; the color (x1,y1)-(x2,y2) is cleared to
XINTERIOR EQU   1  ; inside the set
XFIRST    EQU   2  ; outside the set
X
END_OF_FILE
if test 1659 -ne `wc -c <'source/mbrot.i'`; then
    echo shar: \"'source/mbrot.i'\" unpacked with wrong size!
fi
# end of 'source/mbrot.i'
fi
if test -f 'source/pipe.asm' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'source/pipe.asm'\"
else
echo shar: Extracting \"'source/pipe.asm'\" \(4315 characters\)
sed "s/^X//" >'source/pipe.asm' <<'END_OF_FILE'
X
X* This file: pipe v0.01
X
X* (c) 1990 by The DM
X
X   XDEF     f_push
X   XDEF     f_pull
X   XDEF     f_clear
X
X   XREF     _LVOAllocMem
X   XREF     _LVOFreeMem
X
XMAXDEPTH    EQU   254
X
X   SECTION  pipe,CODE
X
X* error = f_push(value)
X*   Z            d0
X
X* Will push d0.l to dynamically allocated linked list of memory
X* that represents pipe (fifo). Pointers _Head and _Tail should be
X* initialized to 0 before first call. Define MAXDEPTH to # of
X* longwords to be stored in one chunk of memory.
X* If Z is set (result zero) no memory was left.
X
X* All registers are preserved.
X
X* Structure:
X*
X* LONG next       ; points to previous structure
X* WORD used       ; offset from beginning, points to 1st used long.
X* WORD free       ; offset from beginning, points to 1st free long.
X* LONG data [0]   ; 1st longword of data
X* ...
X* LONG data [MAXDEPTH-1]
X
X
Xf_push:
X         movem.l  a0-a2/a6/d0-d2,-(a7)
X         move.l   d0,d2
X         move.l   _Head,a0
X         move.l   a0,d0
X         bne.s    1$
X
X* This is first time we are called so
X         bsr.s    _push1
X         beq.s    3$          ; error, no memory
X         move.l   a0,_Tail    ; this pointer also needs to be initialized
X1$:
X         cmp.w    #(MAXDEPTH*4)+4+2+2,6(a0)
X         bcs.s    4$
X
X* This hunk is full, allocate next one
X         move.l   a0,a2
X         bsr.s    _push1
X         beq.s    3$          ; error, no memory!
X         move.l   a0,(a2)     ; link hunks
X4$:
X         move.w   6(a0),d0    ; free
X         move.l   d2,0(a0,d0.w)
X         addq.w   #4,6(a0)    ; result is nonzero
X3$:                           ; if brach here, result is zero
X         movem.l  (a7)+,a0-a2/a6/d0-d2
X         rts
X
X* Here we allocate one block.
X* nextblock/a0 , Z/error = _push1 ()
X_push1:
X         move.l   #(MAXDEPTH*4)+4+2+2,d0
X         moveq    #0,d1
X         move.l   $4,a6
X         jsr      _LVOAllocMem(a6)
X         tst.l    d0
X         beq.s    2$
X
X
X         move.l   d0,a0
X         clr.l    (a0)        ; next field set to zero
X         move.w   #8,4(a0)    ; used initialized to 4 (offset)
X         move.w   #8,6(a0)    ; free initialized to 8 (offset)
X         move.l   a0,_Head    ; result is nonzero
X2$:                           ; if branch here, result is zero
X         rts                  ; if error, Z will be set
X
X
X* value = f_pull ()
X*  d0
X
X* Will pull d0.l from dynamically allocated linked list of memory
X* that represents pipe. If client is trying to pull from empty
X* pipe, -1 will be returned and Z will be set.
X* Will automagically deallocate any memory.
X
X* NOTE: if you do not pull everything you have pushed, memory
X* will be lost!
X
Xf_pull:
X         movem.l  a0-a2/a6/d1-d2,-(a7)
X         move.l   _Tail,a2
X         moveq    #-1,d0
X         move.l   a2,d1
X         beq.s    1$          ; Pipe is empty
X
X         addq.w   #4,4(a2)
X         move.w   4(a2),d0
X         move.l   -4(a2,d0.w),d2  ; Pipe contains at least one value
X*                 ^^ This is because I just accidentally incremented d0
X
X         cmp.w    6(a2),d0       ; if used == free, time to free this block
X         bne.s    2$
X
X* Done with this block, deallocate it and move to next
X         move.l   a2,a1
X         move.l   (a1),a2
X         move.l   #(MAXDEPTH*4)+4+2+2,d0
X         move.l   $4,a6
X         jsr      _LVOFreeMem(a6)
X         move.l   a2,_Tail
X         bne.s    2$             ; if this was last block,
X         clr.l    _Head          ; clear _Head as well.
X2$:
X         move.l   d2,d0
X         moveq    #-1,d1         ; this is surely nonzero
X1$:
X         movem.l  (a7)+,a0-a2/a6/d1-d2
X         rts
X
X
X* f_clear ()
X
X* Will deallocate our pipe quickly, cleanly and completely in case there
X* is no need to process the remaining stuff in the pipe.
X
Xf_clear:
X         movem.l  a0-a2/a6/d0-d1,-(a7)
X         move.l   _Tail,a2
X         move.l   $4,a6
X1$:
X         move.l   a2,a1
X         move.l   a2,d0
X         beq.s    2$
X
X* This block is valid, deallocate it & back up
X         move.l   (a1),a2
X         move.l   #(MAXDEPTH*4)+4+2+2,d0
X         jsr      _LVOFreeMem(a6)
X         bra.s    1$
X2$:
X* Ups! Almost forget:
X         clr.l    _Head
X         clr.l    _Tail
X         movem.l  (a7)+,a0-a2/a6/d0-d1
X         rts
X
X* In order to save space, these are right here in program segment...
X
X_Head:   dc.l  0     ; initialized to zero!
X_Tail:   dc.l  0
X   END
END_OF_FILE
if test 4315 -ne `wc -c <'source/pipe.asm'`; then
    echo shar: \"'source/pipe.asm'\" unpacked with wrong size!
fi
# end of 'source/pipe.asm'
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 need to unpack the following archives:
    echo "        " ${MISSING}
fi
##  End of shell archive.
exit 0
-- 
Mail submissions (sources or binaries) to <amiga@uunet.uu.net>.
Mail comments to the moderator at <amiga-request@uunet.uu.net>.
Post requests for sources, and general discussion to comp.sys.amiga.misc.