Main directory    QL-Recorder    Programming    Colours & Notes    Literature    Links    What's new?   


Jörg Sigle's

Programming Portfolio


(Diese Seite ist nur in Englisch verfügbar.)

This page...

...shows a selection of programs I've written for various purposes and computer platforms.

It falls far from being complete, but shows my various interests and - hopefully - the occasional remarkable or beautiful product.

If you are interested in any of these programs, or if you want to contribute to their improvement, or to provide feedback, please contact me.

All material shown here, including screenshots and photos, was produced by myself; thus I'm holding the respective copyright. Trademarks may be mentioned on this page without notice, they are the property of their respective owners.


For simplicity, I start by putting all examples onto a single page. This list provides orientation:

Yet to come:


The original GraTaSim TSR toolkit
Advanced UI
PC/AT, DOS; Numonics Gridmaster; Calcomp Drawing Slate; HP SketchPro digitizing tabletsAssembler; Turbo Pascal

Transforms a digitizer into a keyboard replacement that can control virtually any DOS program, quite freely programmable and versatile, supports multiple layers, reloading of definitions from [almost unlimited] disk/network storage, meta commands etc. Originally conceived to control medical practice management software without using a keyboard. By clicking at fields, words, and images, the software could be operated and even medical texts could be entered very fast from individual words, syllables, modifications or sequences - grammatical requirements etc. were covered.

The photo to the right shows an 18" x 12" digitizer with a tablet template, actually with a stack of pages that can be flipped over on the left. The Homunculus (the little man) does also have multiple overlapping and/or alternative layers of definitions, e.g. for anterior or posterior regions, bones, nerves, veins etc. Full functionality of all PC/AT keys is supported; you can see a virtual keyboard in the top right section of the template.

The solution has been made and tested to be reliable, and to allow background hard- and floppy disk file access even though it runs as TSR under DOS. It also works on a Novell Netware 286 non-dedicated server, or on Novel Netware Lite peer-to-peer client/servers.

As GraTaSim runs as TSR and acts through programmable keyboard macros, it can theoretically control any application that uses the keyboard as standard input device, without requiring any change in the controlled application itself.

Development of this software was supported by Dr. Wolfgang and Annerose Streibl, AR$T EDV, since 1990.

Please note: The photo and
the illustration of defined
regions were derived from
different configurations.

GraTaSim for Windows
Advanced UI
PC/AT, MS Windows; Numonics Gridmaster; Calcomp Drawing Slate; HP SketchPro digitizing tabletsTurbo PascalAdoption of GraTaSim that simulates keyboard entries in the MS Windows environment.
Documentation tool;
Advanced UI
PC/AT, DOS; PostScript printer renderer or GhostScript or similarTurbo Pascal

Generates PostScript prints showing field positions and macros from GraTaSim definitions; optional labels are automatically aligned similarly to the layout of anatomical medical illustrations.

The example to the right shows completely automatically generated documentation covering three overlays of field definitions.

Utility; RS-232PC/AT, DOS, Numonics Gridmaster digitizing tabletsTurbo PascalInitializes the serial port and a Numonics Gridmaster digitizer to a desired configuration.
GraTaChk, GraTaDia, GraTaKal
Utility; RS-232PC/AT, DOS, Numonics Gridmaster digitizing tabletsTurbo PascalComprehensive diagnosis, monitoring, and digitizer calibration tools.
Version 2:
Programming tool;
Advanced UI
PC/AT, EGA/VGA, DOS; Numonics Gridmaster; Calcomp Drawing Slate; HP SketchPro digitizing tabletsTurbo PascalGraphical environment to edit GraTaSim definitions; started out as a collection of tools to aid in production and processing of tablet template / keyboard macro definition files.

GraTaSim based solutions
Setups for Frey Quincy PCnet / General PracticeSet of printed digitizer menus with overlays, documentation, and configuration files tuned to the requirements of a general medicine / family medicine practice, available in several revisions.
Setup for Frey Quincy PCnet / OrthopedicsSet of printed digitizer menus with overlays, documentation, and configuration files tuned to the requirements of an orthopedic practice.
Setup for Frey Quincy PCnet / Madaus studyAdd on of a small printed digitizer template to support the convenient and fast collection of specific data for a medical study in general practices.
Various setups for the original Quality-of-Life-Recorder, implementing the QLQ-C30 and other questionnaires

The initial implementation of the QL-Recorder provided a printed questionnaire template on a large dititizing tablet. GraTaSim sent simulated keyboard entry macros to dedicated software that performed data collection, and calculation, storage, and printout of results.

It answered the question of Prof. Franz Porzsolt, University of Ulm, whether I could build a platform for electronic patient questionnaires :-)

The Quality-of-Life-Recorder

In addition to the information presented in the GraTaSim sections above, and on www.ql-recorder.com, I mention some key components for the QL-Recorder backend here, and the more recent versions and additions.

Let me note here that by using appropriate tablet templates, the original QL-Recorder with its digitizer input could also be used for very fast scoring of questionnaires collected on paper; including automatic measurement and scoring of linear-analog-scales/visual-analog-scales.

Multiple individuals, institutions and companies have supported this project - more information is available on its own WWW site, in AnyQuest for Windows' on-line help, and in related scientific publications.

QLQ-C30, QLQ-C33
for electronic
patient questionnaires; Medical outcomes; Quality-of-Life; Clinical trials; Statistics; Advanced user interface
PC/AT, DOS, GraTaSim, Digitizer, Printer, NetworkTurbo Pascal, GraTaSim

The original software for the QL-Recorder backend, accepting input from the digitizer, checked for correctness [not required with the digitizer but with alternative manual keyboard input] and completeness, computing results, and printed output, was made for a single questionnaire, the EORTC QLQ-C30. A second version was made for the QLQ-C33.

for DOS and
PC/AT, DOS, GraTaSim, Digitizer, Printer, NetworkTurbo Pascal, GraTaSim; AnyQuest

AnyQuest was the name of an improved backend software that could be configured for a variety of questionnaires, with regard to: number of questions, screen display for each question, possible answers, computation formulas, storage and output format, and enhanced group, name and date-of-birth information. This software also supported the usage of multiple questionnaires in one session, and questionnaires that required multiple pages on the screen.

Early configurations were prepared for the QLQ-C33 and the QLQ-C30 version 2 in German, English, and Polish.

-» Individual result file

-» Single printout

-» Cumulative printout

The examples were wrapped in HTML files to tell your browser to use charset IBM-850. Actually, IBM-437 would be better, and the single printout bargraphs suffer from that, you can chose it manually if your browser knows it.

PC/AT, DOSTurbo Pascal

Conversion program which exported data from individually stored questionnaire administration results in tabular format for MS Excel and SPIDA

-» (One-Line-) Table extracted from a single questionnaire administration (text file, tabs separated by columns, can be read by simple editor, Excel and others)

PC/AT, DOSTurbo PascalConfigurable conversion program which exported selectable data from individually stored questionnaire administration results in tabular format for e.g. MS Excel and SPIDA, or towards other target software.
for Windows
MS Windows
or compatible
(Linux+WINE, SoftWindows
etc.), Mouse, TouchScreen,
Printer, CardReader, Barcode-Scanner,
Network etc.
Borland Pascal, WIN32 API, AnyQuest

AnyQuest for Windows became the successor of AnyQuest for DOS, when pen-computers and touch-screens with colour displays integrated the previously separate digitizer with the display.

An editor, and advanced printing and analysis tools are integrated, talking, interactive, and morphing questionnaires, and interfacing with external applications or databases are possible.

This was first supported by Prof. Alan Coates, Sydney, who acquired a Fujitsu Stylistic to try the system with patients. Various people, institutions and companies have used and supported it. Details are available on its own WWW site, in AnyQuest for Windows' on-line help, and in related scientific publications.


The Quality-of-Life-Recorder WWW-Site will appear in a new browser window.

PC/AT, DOSBorland Pascal

Configurable conversion programs that implement a bidirectional interface between AnyQuest and xDT, GDT, LDT environments

This enables the following workflow:

  • Selection of a patient in a practice management system
  • Transfer of the Patient-ID via the GDT or LDT interface to the QL-Recorder
  • Patient fills in questionnaire at QL-Recorder
  • Test-results including the same Patient-ID are transferred back via GDT or LDT to the practice management system
  • Test-results are manually or automatically imported into the practice management system, and appear in the electronic patient record in the general overview and/or in the lab results page; possibly in tabulated format
  • (The QL-Recorder can also generate printouts and/or PDFs with the test results, and a course-over-time plot, but that's unrelated to the xDT interface).

Effectively, this means that the Patient-ID is taken from a master system before test administration, and the results are transferred back to that master system automatically. The use of a standard interface means that a variety of host systems are supported. (Related solutions were made for similar tasks.)

for Java
Early prototype; Simple technology demonstratorJava virtual machine (in- or outside of WWW-browser)Sun Java

AnyQuest for Java is meant to provide the large library of questionnaire definition files available for AnyQuest for Windows through a more platform-independent, more easily distributable (possibly WWW-browser-based) frontend.

Only a technology demo was made so far, because I've devoted most of my energy to AnyQuest for Windows. Given an interested party and sponsor, however, this could quickly be brought to a usable state.

Working prototypeLinux, Perl, Apache, MySQL, GNUplotPerl, SQL, bash, HTML, GNUplot

AnyQuest Server is designed as backend for a study center.

It accepts questionnaire administration results from AnyQuest for Windows (or in the future: AnyQuest for Java, and additional web forms), and provides multicenter study monitoring and support, statistical analyses immediately available via WWW clients, a database-repository directly accessible for statistical software like SPSS or SAS.

WWW access and data transmission use SSL. Graded access levels for patients, physicians, study contributors, study monitors, administrators are supported.

SQL queries can be defined and stored in a query repository; query results can be displayed in the WWW interface or downloaded as tables. Graphical analyses are provided via GNUplot; they appear in the WWW interface as well, and can be downloaded in a large variety of formats, multiple images are automatically provided in zipped packages.

Pre-defined queries and graphs can be displayed through dedicated web pages.

The layout of the WWW interface can be changed to a single or multiple concurrent studies requirements.

Access to a running server and a demonstration can be arranged upon individual request.

(Other) GraTaSim spin-offs

Over the years, multiple derivates deployed the stable and versatile TSR basis originally produced for GraTaSim. Some of these included interactive portions coming temporarily to the foreground, some supported reading from the screen. The most recent one included keystroke and screen monitoring, reminders, and a minimal HTML/WWW browser to provide interactive medical guidelines - in closely corresponding versions for the DOS and Windows worlds!

A common feature of this series of programs is that they helped streamline a workflow, by letting machines, computers and users interact in a way that reduced all required keystrokes down to the logical minimum (often: zero), and that they were designed to be programmable, adoptable, and thus able to control a variety of applications in a similar way.

Large portions of GraTaSim and its successors were programmed in 80286 Assembler, so the resulting TSR programs had only a few KB in size and could coexist with about anything in use in the DOS environment.

Their rare functionality and know-how even remained useful (and in production use) till far beyond the MS-DOS age, at least until 2005.


Here, a special Optical-Mark-Recognition (OMR) card reader is used to control the macro programmable keyboard simulator.

This solution was made for a physician who wanted to keep his workflow, but replace the underlying outdated system that was partly controlled by special OMR cards (similar to contemporary questionnaires for OMR systems), which contained pre-printed marks that specified several procedures, and fields to be marked with a pencil, to add data.

Once again, the programmable behaviour of OMR-Sim, and the mechanism of simulating keystrokes to the foreground application, do not require any change in the foreground application while allowing complete control of it without necessity for any manual keyboard input.


Here, an interactive portion of the TSR can be put into the foreground on demand. It can be used to select content from a disk file (using the mouse); the selected content can then be entered (pasted) into whatever program was active before and interrupted, as if it were typed in using the keyboard.

This solution was originally made, to enter text acquired via a scanner- and optical-character-recognition (OCR) source, into a business application that offered no interface for reading external files - mind you, this was in the DOS-era, when there was no such thing as a ubiquitous clipboard!

As a matter of fact, it came in handy later for some disaster recovery, where a lot of textual data that had only survived on paper or in plain files, had to be re-filled into an empty system replacing the crashed one.


This solution connects a serial port COM1 or COM2 directly to a simulated keyboard entry generator.

Effectively, this allows to control a PC via the serial port as if it were controlled from a directly connected keyboard. Simple. - But as you can easily feed bulk stuff into that serial connection from out of files or directly from out of other programs, and faster than anyone can type, this opens a few more possibilities...


This solution connects a health-insurance card reader at a serial port COM1 or COM2 to the simulated macro programmable keyboard.

When an insurance card is put into the card reader, it is automatically read, and the desired input form of the target program is called (either for a known patient, or for a new patient), and the values from the card or the updated date of the current visit are entered.

Effectively, this allows for zero-keystrokes-needed operation of the health-insurance card reader.


This solution for ophthalmologists connects a Phoromat and a Phoropter, both connected to serial ports COM1 and COM2 of a PC, to the simulated keyboard entry generator. Programmable macros, dynamically merged with data coming from and going to the two special machines, provide the following functionality:

  • The patient's old pair of glasses are measured by the Phoromat.
  • The Phoromat sends the parameters of the old glasses to AugenSim.
  • AugenSim automatically enters the parameters of the old glasses into the patient's electronic medical record.
  • AugenSim automatically sends the parameters of the old glasses as starting point to the Phoropter.
  • The ophthalmologist uses the Phoropter, beginning with the parameters taken from the old glasses, to find out the currently optimal parameters for a new pair of glasses for this patient.
  • The Phoropter sends the newly found parameters for a new pair of glasses to AugenSim.
  • AugenSim enters the new parameters into the patient's electronic medical record, and also into the form that prepares a new prescription.

So the documentation of old and new parameters as well as the filling in of a prescription work completely automatically, and no human typing is needed to move parameters along between the two specialized measuring devices and the practice management computer system.

As AugenSim runs as TSR and acts through programmable keyboard macros, it can theoretically control any application that uses the keyboard as standard input device, without requiring any change in the controlled application itself. Screen reading ensures that a patient is selected in the controlled application before AugenSim becomes active.


This solution implements a platform for interactive, event-triggered medical guidelines - it is available in parallel versions for DOS and Windows environments - with the following functionality:

  • Monitoring of keystrokes.
  • Monitoring of screen content or window content.
  • Programmable triggers with programmable hysteresis for unobtrusive reminder signals (i.e. when the doctor types a target string, or when a target string appears on the screen in a certain position while the screen layout meets certain other conditions, then one of a selection of visual or acoustic signals is given, provided it has not been given shortly before that already).
  • On demand simplified HTML/WWW-browser, that comes up (on both Windows, or DOS) whenever the user wants it to (i.e., the user may ignore the reminder, or may chose to consult the interactive guideline as a consequence of having noticed the signal, or may refer to the guideline at any time without a preceding signal). The browser has sufficient functionality to display text pages on both DOS and Windows environments, and a comfortable means of navigation, using hyperlinks, highlighting, scrolling, back-/forward buttons, etc.
  • Programmable monitoring of activity, to collect data on program uptime, triggering events and guideline usage for scientific purposes.
  • Sufficient configurability to support a large variety of practice management system environments in the DOS and Windows (and even Unix, accessed from DOS- or Windows based clients) domain.

This solution was developed at the Department of General Medicine at the University of Göttingen upon invitation by Prof. Michael Kochen and colleagues, for a project (MedViP) funded by the German Ministry of Education and Science (BMBF).

DOS, Midi and the DX7
Patch editor, SysEx recorder, Sequencer, universal Midi controllerPC/AT, DOS, Midi interface, Yamaha DX7 SynthesizerTurbo Pascal

This software can receive patches from the DX7, store them in PC disk files, and send them back.

Its built in patch editor shows all parameters of a DX7 program on one screen page, where they can be directly edited with the mouse.

Finally, it includes a simple sequencer, and a simple interface that allows sending any midi message from the PC keyboard.

Little computer games
Mini arcade; graphicPC/AT, DOS, EGAQuick Basic

A little hero digging tunnels to collect diamonds, and occasionally letting a rock fall down upon a dirt-and-guys-devouring-monster...

Mini arcade; graphicPC/AT, DOS, Hercules Graphics Card/CGA/EGA, MouseQuick Basic

A little hero with a helicopter-backpack tries to shoot yellow energy balls. Time and moving around consume fuel, and successful hits give refills. The character is controlled with the mouse.

Mini arcade; textmodePC/AT, DOS, EGATurbo PascalSomething remotely related to the commercial game with a similar name - a flying ball hits stones from a block, which change their colour at each hit until they finally disappear. You have to keep the ball in the game with a moving barrier that is quite large at the beginning, but gets shorter along the game.
Mini arcade; textmodePC/AT, DOS, EGATurbo PascalSomething related to the commercial game Centipede (which was available on Atari consoles some years before) - the good guy (the grey cursory type, directly linked to the mouse) fires around to hit the worm (grey wormlike thing) eating the mushrooms (green) in his garden, occasionally hitting mushrooms as well, and more than occasionally annihilated by the wildly hopping-around red-face-creature. Although only using the text mode, and only very simply made, this game is fast paced, fun and entertaining :-)

Programmable menu environment
Top menu environment; comfortable
user interface; Workflow support
PC/AT, DOSTurbo Pascal

A freely programmable, multilevel top menu system that showed up on clients (workstations) in a practice network system and allowed the user to start up the main practice management system, or backup jobs, or a variety of tools and support programs from a comfortable user interface.

It works through a mechanism of dynamically generating and modifying batch files, so that no portion of itself needs to reside in memory while any called program runs - and that was required in times of DOS and Netware, because memory was often a scarce resource!

The system supports networks, comfortable interactive editing of menus, windowing, and password protection of menu entries. Menu items can be selected with the mouse, cursor keys or shortcut keys.

Development of this software was supported by Dr. Wolfgang and Annerose Streibl, AR$T EDV, since 1991.


I had a program to compute Mandelbrot set fractals already on the Schneider [Amstrad] CPC-464 homecomputer - with a Z80 at 4 MHz and 640x200 pixels in 2 colours, or 320x200 in 4, or 160x200 in 16 colours, and a relatively fast BASIC. It needed about one night to compute the initial image. The 80286/8MHz with an EGA card was a definitive improvement :-).

I was lucky enough to have an 80287 chip quite early on, and also got machines with 80386sx/80387sx, 80386DX/80387, 80486DX33, 80486DX266 and Pentium/66 CPU relatively soon. I also had a faible for hi resolution high color graphics, so I had a TSENG ET 4000 SVGA quite early, which I used first in IBM8514 emulation mode (which was supported by Turbo Pascal) and later programmed a unit of my own to address it natively. Interim and final fractal generators supported palette switching and rotation as well as extra high resolution PostScript output.

On the other end of the spectrum, I made a native PostScript version that ran on the HP LaserJet III with PostScript Cartridge - quite slowly, but it worked (and still works under GhostScript) - and also one that ran on the VAX at the university. That one may have outperformed the PC with regard to computation time, but downloading the result over a 2.400 Baud/MNP 5 modem was a little bit too slow...

[Regrettably, I never had the time to adopt it to MMX, SSE etc., and of course, I like xaos today :-) ]

Graphics; FractalsPC/AT, DOS, EGATurbo Pascal

Computation of images from the Mandelbrot set, on the Enhanced Graphics Adapter (EGA) with a resolution of 640x350 pixels and 16 colours, and ability to save and load the generated image.

xmin=-1.5, xmax=2.5, ymin=-1.5, ymax=1.5, depth=16

Graphics; FractalsPC/AT, DOS, VGATurbo Pascal

Computation of images from the Mandelbrot set, on the Video Graphics Array (VGA) with a resolution of 640x480 pixels and 16 colours

Graphics; FractalsPC/AT, DOS, TSENG ET 4000 SVGA, MouseTurbo Pascal; Assembler

Later graphics cards could display 1024x768 pixels in 256 colours.

Version 7.1 of my software with direct ET 4000 access through a self-written driver unit has already most of the features of the final one.

It's approach to change and rotate the palette turns out to work in the DOSbox emulation, so I used it to acquire the images shown to the right.

Graphics; FractalsPC/AT, DOS, TSENG ET 4000 SVGA, IBM8514 XGA, MouseTurbo Pascal; Assembler

The last version 9.1 of my Apfelmännchen generator, which features mouse control, screen preview in CGA mode, automatic screen detection (CGA, EGA, VGA, IBM8514), screen output in 1024x768 pixels / 256 colours, internal computation and output into EPS files or on PostScript printers with up to 3162x2381 pixels, computation algorithm coded in 80286/80287 Assembler with some optimizations.

The images to the right are experimentally hand-coloured high-resolution EPS exports :-)

Graphics; Fractals; Utility; SpoolerPC/AT, DOS, PostScript printerTurbo Pascal

"Ungeduld" is German for "impatience". This is an appropriately named printer spooler and printing monitor, because it took about 15 minutes to transfer one hi-res PostScript output to the PostScript interpreter on the HP LaserJet III laser-printer.

A click on the images to the right gives you versions with 640x480 pixels; I may provide the much more beautiful ones with 2216x2954 and 2303x3071 pixels (portrait format, to be printed on A4 paper at 300 dpi) upon individual request.

apld, cr_stamp, bildgen, konvert, load2v, load2vt, l38, l38c, l38r, cmp38, showtse, showtseb, no8514, 8514off, wuerfel
Graphics; Fractals; Utility; SpoolerPC/AT, DOS, PostScript printer, TSENG ET4000 SVGA, IBM8514 XGATurbo Pascal

Several utilities: image loader, compressor, palette rotator, for various graphics cards, copyright stamper, converter, and one program that combined multiple images onto the sides of a projected 3D-cube.

The image series to the right may give a tiny impression of the fast palette rotation effect - however, the full experience needs the original program or a video, maybe I'll add either of these to this site later.

OpenGL; 3D-Graphics; Fractals; Utility; SpoolerLinux; OpenGLC++

Here I started going towards modern CPUs and OpenGL: This program can render a Mandelbrot set into a 3D Volume - the groundplane has up to 2048 x 2048 pixels resolution, the maximum supported depth is 512. (True Voxels are not necessary here.)

The user interface is quite rudimentary, the problem might be better addressed by using OpenGL textures, or otherwise the direction of filled polygons needs more care, but it already produces nice images.

The images in the top row show the Apfelmännchen rendered as a high mountain with a plateau as viewed from below. The others are various projections in various rendering modes.

Emulator Ultra filesystem reader and directory lister
E-mu Emulator Ultra; Sampling synthesizer; Filesystem; Directory listerEmulator Ultra series; prior Emulators; Linux/UnixC++; XML/HTML

The Emulator Ultra is a fine hardware sampling synthesizer. To the right, you see its display showing a little bit of its harddisk content.

The (very rare) programs to read it's HDU and CD contents, and display a directory or listing of all the folders, directories, banks, samples etc. were either very limited, or rather slow, or somewhat inconvenient with regard to the available output formats.

I wanted something that was fast to operate, would process CDs directly in a general purpose computer (PC or so), and produce output with configurable depth for a dot matrix printer on fanfold paper, or plain text files, or XML/HTML files later to be imported into a suitable database.

I am unaware of any documentation of E-MUs filesystem; however I had a thorough look at it and produced a program that fulfills my requirements :-) It supports HDUs, FDDs and CD-ROMs, is fast, and has configurable output.

-» Help output of emufsreader
showing some options

-» Plain text directory listing for the
Emulator Standards 8 CD

-» XML directory listing for the
Emulator Standards 8 CD

In a modern browser, you can open or close individual branches (=folders or banks) of the XML directory listing tree. The example was shortened, because displaying it may keep older computers busy for a while.

E-mail archive to SQL processor and digestor
E-mail digestor; SQL; Productivity tool; Mobile life supportLinux/Unix, SQL-databaseC++; MySQL

My primary e-mail archive may reside either on a server or on a laptop. I use rsync to synchronize both systems before switching over to the other one.

Recently, however, I "didn't have the time to synchronize" - with the usual result that one needs a huge lot of time to fix everything at some point in the future, or a huge lot of space to store two discordant archives forever, or to forget about an unknown number of messages of unknown importance.

To fix things, I wrote a utility that scans a complete e-mail archive, and puts message-ID, etc. and a CRC-32 digest for each message into a database.

So I could use SQL queries to single out all messages that resided on either machine alone, or had changed status markers, no matter in which subfolder they were. I moved them in separate transfer folders, used rsync again and voila, had tidied up the mess relatively fast, reliably and comfortably.

As an added benefit, the database can serve as searchable index which performs much faster, and supports a lot more complex search operations, than Mozilla/Iceape/Messenger can do. If desired, full message content could be added.

Similar functionality may be available somewhere, and it might have been easier to do it in Perl - but I wanted to get a bit of practice in C or C++. Please review the exemplary help output to the right for usage notes and infos about its (very favourable) performance.

-» Help output of mozmail-digest showing some options as well as usage and performance notes

Fourier synthesizer and Fourier analyzer study toy
Discrete Fourier transformation; Fourier synthesis; Fourier analysis; Frequency spectrum analysis; Study toy; Self-educational illustrationPC, DOS or emulation environmentQuickBASIC

Fourier analysis is a useful ingredient for many technical solutions - from computer tomography (CT) or nuclear magnetic resonance (NMR) imaging to digital audio filters and MP3 music encoding.

To get a more practical grip on it, I wrote a small example program that contained both a Fourier synthesizer and analyser - and a bit of graphical output.

The programming environment was chosen because I did that in a hurry, and QB came in handy for easily available graphics output.

The screenshots to the right show entering of parameters for a couple of sine waves; and the waveform synthesized by addition of these, with results of DFT spectral analysis below.

The synthesizer part can also add a higher number of sine waves, and it will tell when aliasing artifacts are expected.

A molecular model of a LavaLamp using OpenGL
OpenGL; 3D-Graphics; Molecular simulation; Particle simulation; Physics; Dynamics; xgasLinux; OpenGLC++

This program shows a model of a LavaLamp at molecular level in OpenGL 3D graphics.

It begins with molecules of water and wax (blue and red, different sizes). Brownian movement makes them "fly" around in the (simplified cylindrical, not lozenge shaped yet) LavaLamp container.

If they hit the walls or another molecule, some energy and impulse may be exchanged - or they may show a tendency to stick together. Molecules are heated at the bottom of the container, and change colour, size, speed, and lift (which may be a result of other parameters, and which adds simplification with regard to required number of molecules to "fill" the container and lowers required observation time, but also adds "incorrectness" with regard to physics).

All parameters are adjustable and one can see how the model reacts to such adjustments.

The sequence of images to the right shows a working model of a non-working Lava-Lamp: It starts with a random distribution of "water" and "wax" of equal temperature. Then, the water molecules are too few, or too cold, to fill the container equally at this gravity level - they sink down. After some time, the wax molecules get warmer (from red to orange) and go upwards. They also start globbing a bit. The water molecules also get warmer at the bottom (light blue, more movement), but after a while, water and wax are clearly separate, so something went wrong for the LavaLamp with the settings chosen here.

Nevertheless, it's already relaxing to watch the little molecules move around :-)

Vector graphics library and rotating 3D cube
3D-Graphics; Vector graphics; Vector mathematicsIBM PC/AT; CGA (EGA)GWBasic;

This program shows a 3-dimensional wireframe of a cube, that can be rotated in all directions using the cursor keys, with size, distance and focus also controllable.

Actually, it is only one example of the results of my interest in 3D vector graphics since that time: I had my own working library with everything I needed for 3D -> 2D projections well before anything about that was taught in school.

However, PC graphics were slow even in compiled BASIC or Pascal, and when some years later I saw an early SGI workstation rotating a few X-15s, Porsches and Beethovens simultaneously, shaded, and with 30 fps, I was sufficiently impressed to keep me fascinated till today.

Simulation of spreading excitation in a nerve fiber membrane in Maya / MEL
3D-Animation; Physiology; Excitatory nervous membraneMayaMEL

For a 3D animation to illustrate some processes in synaptic signal transmission, I wrote a simulation of an excitable membrane in MEL.

I designed a 3D model of a nerve fiber, and gave its individual surface segments attributes describing their state of excitation. Simulation code determines the spacial relationship of individual segments and computes the new condition of each segment based upon its previous condition and the conditions of its neighbours.

If any segment of the nerve fiber is stimulated beyond a certain threshold while the segment is not in the refractory state, the excitation travels across the whole fibre.

Trans-membraneous potential (voltage) and excitation status were finally represented by color and illumination attributes in Maya.

Additional work involved the transmission of a signal through the synaptic gap; but this was finally merely animated rather than simulated.

The movie to the right shows an early result of the simulation. The two frames from the intro of the final animation show synaptic transmission from outside. The complete animation starts with a human head that becomes transparent, revealing the brain, then the nerves, synapses, and later, the synaptic gap in detail.

This project was sponsored by Dr. Timm Volmer of Wyeth, Germany.

-» MPEG movie (1.7 MB)


    Main directory    QL-Recorder    Programming    Colours & Notes    Literature    Links    What's new?   


Woopie This Web page was prepared by myself,
and so were all included graphic elements.
© 2009 Dr. med. Jörg M. Sigle, Kunstvolle EDV & Elektronik