Skip to content

File Format

J.B. Langston edited this page Apr 7, 2019 · 1 revision

This section describes the format used by XaoS for animations, configuration files and saved positions. All these files have a common format, designed to be easily readable, to allow manual editing of files and easy conversion by other programs.

Care has been taken to make it easily extensible for future versions of XaoS so hopefully there will not be many incompatibilities between various XaoS versions.

The format is a simple set of commands executed sequentially. XaoS does not provide any variables or loops as usual scripting languages do, but future extension to full-blown Scheme should be easy since the format uses Scheme-like syntax. The syntax of every command is:

(command_name [param1] [param2])

where parameters are optional and separated by whitespace (an arbitrary number of spaces, tabs and newlines). The parameters can have the following types:

type description
integer number w/o decimal point (123)
float floating point number in decimal notation with optional exponent (1.23E2)
keyword text started by quote ' used to pass string constants like formula name ('mandel)
string text inside double quotes. The only parameter that can contain whitespace
boolean #t for true or #f for false

There is a complete description of all XaoS functions (with some examples) and an index of functions in the XaoS registry. You may particularly want to read about the animation functions. Also, the following functions are significant:

load

This function loads and interprets a file. It works similarly to #include in C.

initstate

Available in version 3.0 and above, this function resets XaoS's state to default values. This command should be at the beginning of each animation file, since otherwise some stuff previously enabled by user could cause unexpected effects. State is not reset by default before playing animations since it would make it impossible to write macros. Current versions don't really need macros, but in future versions, when the Scheme programming language will be available, this should be a much more interesting subject.

usleep

This function waits for a selected amount of time(in usec) before processing the next command. The screen is recalculated and displayed at the beginning of the sleep if necessary. The remaining time is spent by waiting, calculating if necessary, or performing any animation you entered via animation commands.

wait

Waits until the animation or image rendering is complete. Do not call this function when zoom, or continuous rotation is active otherwise deadlock happens. It is a good idea to call it immediately before text subtitles are displayed, since it looks ugly when they are displayed over a blocky unfinished fractal. Because the degree of blockiness at a given instant is a function of your machine speed, it may look nice for you but ugly for others with slower machines. Also you should call this after an animation is performed, before the switch to another fractal happens; since the switch involves calculation, the screen is stopped for a while and an unfinished fractal there looks ugly. You should also call it, when you want to do something as soon as possible.

Examples

(initstate)                 ;configure everything for the first frame
(palette 1 1163254293 0)    ;custom palette
(cycling #t)                ;enable cycling
(cyclingspeed 7)
(maxiter 276)               ;higher number of iterations
(range 3)                   ;default range for solid guessing
(usleep 1000000)            ;second frame starts here
;just move the image
(moveview -1.8101154154614007889 -8.2687205907162041209E-05)
(usleep 1000000)            ;third frame
(morphview -1.8101154154614007889 -8.2687205907162041209E-05 6.277210971069452361E-10 6.2772109785334669875E-10)
(usleep 100000000)          ;10 seconds of zooming into selected rectangle

The best way to learn XaoS command language is probably to read position files and modify them. For example, to create zooming animation from the original file:

(initstate)
(defaultpalette 0)
(formula 'mandel)
(view -1.64128273713 -5.50393226816E-05 9.69332308848E-08 9.69332308834E-08)

Just change the view command to morphview, and add usleep:

(initstate)
(defaultpalette 0)
(formula 'mandel)
(morphview -1.64128273713 -5.50393226816E-05 9.69332308848E-08 9.69332308834E-08)
(usleep 10000000)

The following code produces Julia morphing in the real axis:

(initstate)
(fastjulia #t)
(juliaseed -2 0)
(morphjulia 2 0)
(usleep 2000000)

And following is the "rotozooming" animation:

(initstate)
(fastrotate #t)
(morphview -1.64128273713 -5.50393226816E-05 9.69332308848E-08 9.69332308834E-08)
(morphangle 300)
(usleep 10000000)
(wait)
(fastrotate #f)
Clone this wiki locally