Icon  Freiburg Visual Acuity & Contrast Test 

FAT animation

This page is for historic reasons only, →go here for the current version (platform independent).

Download the fully working program (Macintosh only) ©Michael Bach 1993-2004

Get Lastest Version [my problems with Stuffit seem solved. Still, on problems send email, and I’;ll immediately will send you the program as email attachment (Aug 2004))]

Software requirements:

If you have problems decoding the downloaded file, make sure you have the most recent version of Stuffit Expander (5.5 or later).


Available versions:




History of changes to the Freiburg Visual Acuity Test

1985first implementation on a Z80 with 7220-graphics board
1987port to IBM compatible with Miro graphics board
21.11.1991port to Macintosh
01.1992use of “Antialiasing”
04.1992now 8 gap positions
09.1992preferences can be saved, removed error in hard-wired 640 screen width (Thanks to Dr. Wiegand for careful observation), feedback optionally on/off
01.03.1993added logarithmic pest->acuity transformation
05.03.1993removed error in gap2pest
16.03.1993"neueRichtung" (newOrienation) now 80% differing, some cosmetic stuff
18.03.1993gap width real, not integer, rounding at the proper place
18.03.1993transformation sPest -> log(Visus) was not linear!! but now...
14.06.1993free trial: current estimate * 4, # of trials: 17
11.09.1993can choose between 4 and 8 positions
20.09.1993improved demo, found error (640 again!) in Gap2Visus, increased delays, ...
06.11.1993log-table for pest is saved in the resource fork, this speeds up enormeously
07.11.1993added “preferences...” dialog, balloon help for nearly everything, -> Vs. 2.1
08.11.1993"DisposeHandle((Handle) hCursor);" not allowed, why?, leads to crashes, removed. Added distance to preferences
09.11.1993DoRingDemo: non-integer d values lead to enlargements of the “anti-aliased” ring, now rounding at the proper place, added DIN-rounding
13.11.1993added # of trials to preferences, DIN-rounding optionally, more error handling
17.11.1993balloon help into preferences, added timeout
24.11.1993contrast threshold works for the first time. It needs 8 Bit screen depth, this is now done by the program on start if possible
21.12.1993used qd-global MainDevice, contrast test only if sufficient screen depth, Version 2.2
08.04.1994put current acuity value into debug string, randomized the randomizer, reduced slope of PEST, Version 2.2.1
10.06.1994translated to English, started work on flanking stimuli, rearranged preferences dialog
17.06.1994changed mapping of pest <-> contrast, more translations
18.06.1994Version 2.5. Removed objected oriented stuff, made code dependend on whether ColorQuickDraw is installed, so now also runs on 68000-type machines (e.g. my old PowerBook)
27.06.1994coded crowding, removed error in radiobutton-handling when setting to default, changed button control to "Test" (removed Visus 4/8), improved some English
30.06.1994moved to Metrowerks compiler to try Power-Mac compiling, found more places with improper casing of with vs w/o color quickdraw, added crowding to fast preference
28.07.1994changed some "&" to "&&" (the joys of C), made code completely PowerPC compatible
11.08.1994strings read from resource to aid in localization, improved handling of radio buttons
25.09.1994made use of C++ reference types
17.10.1994changed code in Landolt drawing to improve return of actual gap used, increased size of "cake", made slope of psychometric function shallower (std = 15, was 30)
21.10.1994corrected error in timeout algorithm
26.10.1994changed slope, now: std = locRange / 10.0; rearranged QD-check to avoid crashing on old Macs
16.11.1994added continuous demo run (for Medica '94)
17.11.1994added picture with keyboard description (Version 2.6.0)
30.11.1994moved keyboard picture to monitor-size independent position, number of trials @8=18, @4=24. (Version 2.6.1)
04.12.1994added contrast calibration, decreased internal grain of pest (from 300 pts to 1000 pts)
05.12.1994improved menu arrangement and contrast calibration dialog, used a non-linear relationship between pest and contrast
08.12.1994background for contrast measurement completely gray (as suggested by Ullrich Schiefer)
12.12.1994menuBar is now hidden during measurements
13.12.1994contrast calibration is now disabled on machines with low video depth (bug found by Hans Strasburger), increased internal grain of pest (from 1000 pts to 400 pts), began work on grating test
02.02.1995temporarily disabled grating item, improved screen depth error message
09.02.1995began extensive C++ rewrite. Largely removed asymmetric placement of crowding (thanks to Chip Scialfa for prompting me on this)
10.02.1995added special SIOUXSettings to make aborts less confusing
13.02.1995clipping bug solved. Added more sensible rounding so some numbers; extensive internal use of C++ code. Wonderful, C++ is like Pascal! Vs 3.0.3
19.02.1995improved depth flip code, reduced smallest (internal) contrast from 150 to 100. Changed interface of contrast calibration, prompted by Robert O'Shea's suggestions. Removed bug that prevented the program from using the corrected gamma value. Modified internal pest -> contrast transfer function to allow more closely spaced values a low contrat. Added check on locked file/volume when saving preferences. Version 3.1.0
09.03.1995changed contrast calibration pattern to horizontal lines to avoid luminance artifact
10.03.1995solved recent nasty problem with string streams ('ends' was missing)
removed bug in Landolt demo where the actual size feedback led to seemingly different sizes
12.03.1995completely solving the asymmetry problems with the crowding frame is really difficult,
not sufficiently solved yet.
13.03.1995solved the nagging string end problem that occured after switching to string objects
27.03.1995improved escape from demo mode, new CodeWarrior version
28.03.1995removed bug that prevented proper depth switching (since "improved" depth flip code),
occured only on devices with < 8 bit/pixel
12.04.1995started on: test result optionally to clipboard, on request of bill
13.04.1995finished result->clipboard, no user interface yet
27.04.1995put toggle for "result->clipboard" into the preferences dialog. Version 3.2.0
30.04.1995improved (?) code for hiding the menubar
18.05.1995Changed "free trials" to 2.5x suggested size (was 4x)
21.05.1995Found memory leak and traced it to a bug in the strstream library (no, my error).
Disabled debug text so the leak will occur much less often.
Improved code for menu bar hiding. Version 3.2.1
26.05.1995Switched to CW 6. Only problem: GetIntlResource is now a Handle.
28.05.1995Began complete optional localisation (German & English) of all numbers, texts, menus etc.
07.06.1995Found bug in incorrect localisation of menubar. Version 3.3.1
24.06.1995Added the “Format” option (decimal/ratio).
28.06.1995Removed acuity table. Added "max. Acuity" option (1.6-(infinity)). Help button hidden. Version 3.4.0
14.07.1995Fixed the memory leak with help from Metrowerks, put debug info back on screen during testing
30.07.1995Overhaul of the preferences interface, addition of threshold bias correction
03.08.1995German translation finished, but problem with submenus: ID < 255!
04.08.1995fixed version string by borrowing from denis' videotoolbox
22.10.1995added overloaded min/max functions to elektrolib
menubarhider uses c++ class
24.10.1995found bogus destructor call and a long-lurking bug in dealing with the pest resources. Version 3.5.1
29.10.1995use new/delete for menubarhider instantiation, similar for my "screendipper"
25.11.1995moved to cw 7, needs no (!) change. now i can use the balloon help add-in by peter n lewis.
help added, but it doesn't work for the menus yet. version 3.6.0
27.01.1996no problem compiling with codewarrior 7, both ppc & 68k
04.02.1996added one more significant digit to contrast result display
10.02.1996started gamma correction, vers. 3.7.1
11.02.1996finished gamma correction algorithms, improved localisation, contrast test button now on main screen.
15.02.1996fixed a localization bug, where you couldn't switch back to english once in german
03.03.1996put "bool" datatype into resource (for resedit 2 bytes, "bool" is unsigned char!)
added a hidden preference to switch off gamma table manipulation.
found reason for missing balloon help in menu bar: window started at top 0. fixed by
introducing a new window for the tests and putting result into update routine.
vers. 3.7.2
06.03.1996played with the update events, still not completely satisfying, never mind.
15.04.1996added fancy screen fade on start to make the screen switches look nicer. no version change
17.04.1996there was a real bug in the "1st key decides" code. vers. 3.7.3
24.04.1996vs 3.7.4: started on speed adjustment for current machine,
improved key handling in preferences dialog,
moved offscreen pixmaps to temp mem, reduced heap size,
increased antialiasing threshold from 6 to 10,
rearranged initialization code,
contrast button disabled for low bit depths
30.04.1996fxed bug: file/test@4 had tested @8, not @4
11.05.1996enable luminance lin. already with a bit depth of 4. version 3.7.5
26.05.1996cleaned up dialogs.
01.06.1996arranged for pest to stand alone.
04.06.1996used my new offscreen classes for the landoltring, found small bug in non-colorquickdraw code,
new codewarrior (9): no changes necessary.
23.06.1996found a bug: the test (sufficient screen depth for contrast measurement?) was
made before the screen was switched to best depth for us. therefore, depending
on initial screen depth, contrast testing was disabled, though it could have
been done. fixed, -> Version 3.7.7
30.06.1996Added message if the test was canceled while in progress.
02.07.1996unexpected behaviour on older systems leads to a bug in antialiasing. Fixed. 3.7.8
19.07.1996removed the hidden C on startup, Version 3.8
03.08.1996added variable contrast for the acuity test on Stuart Anstis' request
08.08.1996added measurement field for contrast to get rid of screen inhomomogeneity, 3.9
09.08.1996added "Help" facility, complete rework of dialogs, Version 4.0
02.09.1996added "copy to clipboard" in the help menu, so "read me" is no longer necessary; added required AppleEvents, changed "About", added direct Internet access (with Internet Configuration). >Vs 4.1
17.09.1996added email button in "about" (with Internet Configuration); Vs 4.1.1
12.10.1996in SavePreferences "UpdateResFile" instead of "WriteResource", added disclaimer legaleze; no change in version number
26.10.1996recompiled with improved screen depth switcher; no change in version number
03.11.1996Fixed new bug in the crowding frame, isolated the "getVersionString" function
16.11.1996Added (asynchronous) audible feedback on request of Guntram Kommerell.
23.11.1996Fixed all (?) remaining screen update errors. Improved handling of scrolling in the Help display.
26.11.1996Made class for simple asynchronous sound, feedback sound also for contrast test.
27.11.1996Added automatic restart of the computer at 1 o'clock in the night and even day.
Vs. 4.3
30.11.1996Added smiley (possibly using movies) + sound on successfull test for children
12.01.1997fixed bug when canceling the luminance linearization,
added antialiased title redraw on fast machines
23.01.1997Antialiased titelstring only for >4 Bit screens, double '5' to abort, Vs. 4.4
19.02.1997on request by Prof. Kolling: ∞ timeout now in ms, not in s, allows shorter valuues, ∞ when timeout occurs, the optotype will be blanked, but there are still 1000ms for reaction time. Vs. 4.5
22.02.1997Decision whether to alias the title string was incorrect;
erased reward smiley at end of movie. Vs 4.5.1
24.02.1997Recompiled for Metrowerks 11, some changes in the libraries. Vs 4.5.2
04.03.1997Recompiled for Metrowerks 11 with bug fix, many changes due to old names, Boolean -> bool. Vs 4.5.3
23.03.1997Synchronized stimulus display with screen build-up for proper control at short presentation times. Vs 4.5.4
26.03.1997Made DIN/ISO/EN (European Standard) compliant: Within screensize limitations, acuity now progresses over:
0.05, 0.08, 0.125, 0.16, 0.2, ...... and some further minor points
Moved correction factor to be compatible with ascending procedures to the result display section,
Changed global distance variable to double.
Changed bonus factor from 2.5 to 2.0.
Inserted blank time befor appearance of the optotype (currently 300 ms, no interface yet).
Vs. 4.6
17.04.1997The blank time used VBLHandler, which leads to later crashes if removed per "delete".
No problem when deleted after leaving block scope. Why?
Replaced by simple delay without vbl.
30.04.1997Variable size of the contrast-C diameter on request of Pablo Artal. Vs 4.7
25.05.1997found a write to zero.
09.06.1997put size of contrast disk into preferences, added a hidden preference "which test is
started by '5'"
23.06.1997removed immediate restart when button was held pressed after test,
moved to CodeWarrior Pro, removed bug in timeout (was only 10s when switched off, now 60s).
Vs 4.8
23.08.1997Added my help at the proper place, the “help” menu, looks nicer under system 8.
Made size of Help dialog depend on the screen size.
Vs 4.8.1
06.09.1997For Rassow collaboration: Added “free trials” also to contrast test, choice of test started by "5" into preferences,
increased default number of trials to 24/30. Vs 4.8.2
10.09.1997added missing items to German dialog, reduced min. acuity, special case for 1,3->1,2
13.09.1997added “true” crowding test after Haase's C test Vs 4.8.3
26.09.1997reduced size of result representation, so that patients or parents don't see it readily (thanks to IS);cfixed an error in menue updates (thanks to FS), disentangled visual and auditory feedback in the preferences (also thanks to FS), removed the "fast preferences" menu. Vs 4.8.4
07.10.1997More feedback from Dr. Schmidtborn: More reward movies. Introduced manual mode (started by ‘1’;).
21.11.1997recompiled with CodeWarrior pro 2 and the latest Internet Config version
02.01.1998minor stylistic correction in the preferences dialog for better Sys 8 conformance, Vs 4.8.6
30.05.1998Linked with Interfaces-Libraries 3.1 for early Carbon compliance: No changes necessary!
01.07.1998Changed ctopstr -> C2PStr, WeseNase eingebaut, auch beim Kontrasttest. Aktuell getesteten Kontrastwert angegeben
14.07.1998Updated to Internet Config vs. 2.0. Made balloon help default on for preferences, added many help messages. Fixed possible bug in sequence of window disposures. Vs 4.9.1
06.10.1998bei kRassowSpecial das Fragzeichen beim Kontrasttest rausgenommen.
19.11.1998Fehler gesucht bei Kontrasten nach Abbruch, nicht gefunden. Bei RassowSpezial 3 s Pause nach Eingabe, Variable in prefs aufgenommen. Vs 4.9.2
21.11.1998Universal headers 3.2: nicht mehr nötig, pi musste extern deklariert werden
27.11.19983s Pause auch bei Visustest (kRassowSpecial)
03.03.1999results from all trials are saved and entered into the clipboard, tab delimited
18.03.1999crosshairs rather than question mark for contrast test. Vs 5.0
26.03.1999Timeoutvalue unsigned, geht jetzt bis 65535
06.09.1999Error (20%) in the size of the contrast-C found (thanks to Jeremy Beer), Vs. 5.0.1
12.01.2000removed 68k code, started on reaction times.
25.01.2000Now PowerPC code only. Finished addition of reaction times to the response protocol string. Brought documentation up to date. Vs 5.1
11.04.2000The ballon help box now always remains hidden, and balloon help is always on (thanks to Andreas Cepin), no VBL-synchronisation when crowding is on
13.06.2000changed Pest code into an object (benefits NASA project)
19.08.2000made it a bit Appearance-savvy, used standard dialog calls of sys 7.1, Vs 5.1.1
25.08.2000"Spotlight" found 3 memory leaks for me. Vs. 5.2
03.10.2000synchronized the German resources with the English one. (-> Dr. Reichel as 5.3)
07.10.2000small improvements with the help dialogs, all dialogs now use the standard action function Vs 5.3
21.02.2001removed bug in the Snellen ratio output, added feet / metre choice (thanks to Pauline Cheung & Helen Eng)
28.07.2001Vs. 5.5: added contrast stimuli demo, removed bug that would prevent dithering when set to millions of colours, (thanks to Adele Diamond & Dima Amso), added log(CS)
06.09.2001weak linked to Internet Config plus test for its presence: FrACT now also runs without any extension. Also disabled language switch to German. Vs 5.5.1

Last update 2018-06-12 by Michael Bach