Welcome to Analay
Math and Layout Software for the Commodore Amiga
History of Analay
The idea of Analay was born in the very early 90ies. My math teacher was using a math program
to plot graphs of functions and hand them out in our math class in high school. I believe he
used the program MatheAss
. What always annoyed me about those prints was that they were
pixely and not to scale. 9 pin dot matrix printers were just heading south and many people
were using 24 pin printers, and inkjet printers started to become affordable. So there was no
good reason not to have a high-quality printout of function graphs. So I decided to write a
program that combined two things: A math program for analysis, and a layout program to bring
your function analays to paper in high quality.
Analay did also layout formulas in a nice way. A LaTeX-like notation was used to enter the
formulas. While Analay only supported a small portion of the LaTeX formatting capabilities,
and LaTeX certainly did a better job in fotmatting formulas, it was enough for typical
stuff you encounter in high-school and even beyond.
Development started on an Amiga 500. I upgraded it with an accelerator board later on:
A Stormbringer board with an 68030@50MHz and an 68882@60MHz with 9 MB of RAM. I believe,
there were also 68040-boards for the Amiga 500, but nevertheless I had one of the fastest Amiga 500 around :-).
It became quite hot in the summer, so I usually operated it without the cover and a few fans placed
inside. Together with an A2024 monitor and a resolution of 1024x1024, it was quite a nice workstation!
I used it until the year 2000, when I bought my first laptop and installed Linux on it.
Memory was always an issue. I never had enough RAM for the linker. The linker used an incredible amount of RAM,
but I had reached the limits of my hardware. Eventually, I had to get rid of the garbage collector in Oberon
in order to reduce code size. Still, 9 MB was not enough.
Analay was released as Shareware, a popular distribution model in the 90ies. Everybody could download
and use the program for free. However, some functions were not available in the free version. That
were the functions for saving and printing. The full version cost 30 Deutsche Mark (around 15 Euros).
The functions were enabled with a personalized keyfile that I sent out to the users. For all of you
who still want to use Analay, here is a public keyfile for everybody. If you still use Analay, it
would be great if you dropped me a line
I began writing Analay in Modula-II, which was the first high-level language I learned
(besides BASIC, I guess that doesn't count :-) ). After I had already written a significant
portion of the code, I switched to Oberon. I bought the Amiga Oberon-compiler, written by
Fridtjof Siebert, which basically ended in a complete rewrite of the code. Still, the structure
of the code somewhat remained the same.
It was my first big software project. This becomes obvious when you look at the structure of the code :-).
Also, it seems that comments were quite expensive back then, so apparently I could not afford them
as a high-school student. The source code is structured as follows (from my memory more than 20 years later):
These files contain all the code for the math (analysis) part of Analay. SuperCalc
was the working title of Analay for a long time.
Contain all the code for the layout part of Analay.
These files contain the code for parsing functions. It is somewhat the heart of the math part of Analay.
Looking at the code now, I can see procedures inside procedures. Quite funny. I didn't even remember something
like that was possible.
Function.mod contains the actual parser. It recursively builds a binary tree from the given function string.
It is a straight forward method for symbolic treatment of mathematical functions. The binary tree is a very
convenient representation. The value of a function can easily be calculated recursively using the resulting
binary tree. Also, it is almost trivial to symbolically derive a function using recursion (that's in Function1.mod).
Naturally, this does not lead to the optimal solution, it gives you one possible solution. Therefore, in Function2.mod,
there is some sort of optimizing going on. I believe, it never was very effective. Moreover, the recursive calculation
of function values is not very fast, especially for long terms. A simple optimization for the calculation part would
have been to recursively parse the tree only once and write all operations into a list. That would have saved on the recursions,
which were probably quite expensive.
I remember asking my high-school math teacher how to derive x^x, which was not part of the regular 10th grade math lessons.
- Tools, Managers, Raws
These directories contain helpers, the idea being that the Managers do some more complex stuff. This is were the UI widgets
are coded. Originally, I wanted Analay to be compatible even with Kickstart 1.3, that's why I came up with a very weird
button coding, filling out the background of a raw Intuition button with lines just so the Workbench 2.0 look-and-feel
would be available under Kickstart 1.3. Eventually, I dropped the support for Kickstart 1.3, but the buttons remained the same.
The major difference between Analay v1.0 and Analay v1.1 was the language independency and the translation to English.
David Thompson from Kentucky helped me a lot polishing the English, that was really great! The final version was
Analay v1.12, that fixed a crash some people had when printing. I never had the crash on my Amiga, and neither did any
of my beta-testers. One evening, a user called me. He was experiencing the crash. Finally, I was in live contact with
someone on whose machine it crashed. After a few hours of sending patch files over the telephone line via Modem (yeah, good old times), the bug
was fixed. The cause was plain simple. In order to print in high-quality, I was opening a huge invisible screen. I believe
I was asking intuition to open an NTSC-screen, for some reason. On Amigas that did not support NTSC that didn't work out properly.
Or was it PAL?
Analay was running in several tasks (today we would call it threads, but the Amiga operating system did not know the difference between
processes and threads). The math mode and the layout mode were running in separate tasks, so you could work independently in them.
Also, the UI dialog for changing the axis range of a window was started as a separate task. Any update to the axis range was directly
reflected in the respective window with the functions. Seems quite natural today, but it was not back then. Even today, blocking
UI dialogs keep getting on my nerves.
For all who are interested, here is the code. I release it under the GPL v2. I don't know if anybody will ever compile this again
(there is no real point in doing it ...), but if you do, please drop me a line
Download the Analay v1.12 source code
Analay v2.0 was underway, but it was never finished. I simply packed too much into it, so I never got it done. Here are the key
features that you missed:
- Fully responsive UI with font size sensitivity
- Fully multi-threaded. Every UI dialog was started as a separate task.
- Drag and drop. Big improvements to the layout mode.
- And much more ...
I did not use MUI, which was very popular at the time. Instead, I wrote my very own responsive GUI. I don't know why. It cost a lot
of time, but I just felt like doing it. It was working quite nicely and I could easily integrate it with my multi-threaded architecture
as I wished. I also remember spending a lot of time on the native support of True Type fonts. I implemented some caching algorithms
based on AVL trees. I never finished it.
For all who are interested, here is the code. I release it under the GPL v2. I believe this is the latest version of the code.
Please note that I never finished it. It was more or less a complete rewrite of v1.x. The structure of the code should be a little nicer
than the structure of the old code. I did not bother deleting the .old-files, it's merely an archive of my old working directory.
If you are getting into this, please
drop me a line
Download the Analay v2.0 source code