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

1985		first implementation on a Z80 with 7220-graphics board
1987 port to IBM compatible with Miro graphics board
21.11.1992 port to Macintosh
1/1992 use of “Antialiasing”
4/1992 now 8 gap positions
9/1992 preferences can be saved, removed error in hard-wired 640 screen width (Thanks
to Dr. Wiegand for careful observation), feedback optionally on/off
01.03.1993 added logarithmic pest->acuity transformation
05.03.1993 removed error in gap2pest
16.03.1993 "neueRichtung" (newOrienation) now 80% differing, some cosmetic stuff
18.03.1993 gap width real, not integer, rounding at the proper place
18.03.1993 transformation sPest -> log(Visus) was not linear!! but now...
14.06.1993 free trial: current estimate * 4, # of trials: 17
11.09.1993 can choose between 4 and 8 positions
20.09.1993 improved demo, found error (640 again!) in Gap2Visus, increased delays, ...
06.11.1993 log-table for pest is saved in the resource fork, this speeds up enormeously
07.11.1993 added “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.1993 DoRingDemo: non-integer d values lead to enlargements of the “anti-aliased”
ring, now rounding at the proper place, added DIN-rounding
13.11.1993 added # of trials to preferences, DIN-rounding optionally, more error handling
17.11.1993 balloon help into preferences, added timeout
24.11.1993 contrast 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.1993 used qd-global MainDevice, contrast test only if sufficient screen depth, Version 2.2
08.04.1994 put current acuity value into debug string, randomized the randomizer,
reduced slope of PEST, Version 2.2.1
10.06.1994 translated to English, started work on flanking stimuli, rearranged preferences dialog
17.06.1994 changed mapping of pest <-> contrast, more translations
18.06.1994 Version 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.1994 coded crowding, removed error in radiobutton-handling when setting to default,
changed button control to "Test" (removed Visus 4/8), improved some English
30.06.1994 moved 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 preferences
28.07.1994 changed some "&" to "&&" (the joys of C), made code completely PowerPC compatible
11.08.1994 strings read from resource to aid in localization, improved handling of radio buttons
25.09.1994 made use of C++ reference types
17.10.1994 changed 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.1994 corrected error in timeout algorithm
26.10.1994 changed slope, now: std = locRange / 10.0;
rearranged QD-check to avoid crashing on old Macs
16.11.1994 added continuous demo run (for Medica '94)
17.11.1994 added picture with keyboard description (Version 2.6.0)
30.11.1994 moved keyboard picture to monitor-size independent position
number of trials @8=18, @4=24. (Version 2.6.1)
04.12.1994 added contrast calibration, decreased internal grain of pest (from 300 pts to 1000 pts)
05.12.1994 improved menu arrangement and contrast calibration dialog,
used a non-linear relationship between pest and contrast
08.12.1994 background for contrast measurement completely gray (as suggested by Ullrich Schiefer)
12.12.1994 menuBar is now hidden during measurements
13.12.1994 contrast 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.1995 temporarily disabled grating item, improved screen depth error message
09.02.1995 began extensive C++ rewrite.
largely removed asymmetric placement of crowding (thanks to Chip Scialfa for prompting me on this)
10.02.1995 added special SIOUXSettings to make aborts less confusing
13.02.1995 clipping 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.1995 improved 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.1995 changed contrast calibration pattern to horizontal lines to avoid luminance artifact
10.03.1995 solved 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.1995 completely solving the asymmetry problems with the crowding frame is really difficult,
not sufficiently solved yet.
13.03.1995 solved the nagging string end problem that occured after switching to string objects
27.03.1995 improved escape from demo mode, new CodeWarrior version
28.03.1995 removed bug that prevented proper depth switching (since "improved" depth flip code),
occured only on devices with < 8 bit/pixel
12.04.1995 started on: test result optionally to clipboard, on request of bill
13.04.1995 finished result->clipboard, no user interface yet
27.04.1995 put toggle for "result->clipboard" into the preferences dialog. Version 3.2.0
30.04.1995 improved (?) code for hiding the menubar
18.05.1995 Changed "free trials" to 2.5x suggested size (was 4x)
21.05.1995 Found 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.1995 Switched to CW 6. Only problem: GetIntlResource is now a Handle.
28.05.1995 Began complete optional localisation (German & English) of all numbers, texts, menus etc.
07.06.1995 Found bug in incorrect localisation of menubar. Version 3.3.1
24.06.1995 Added the “Format” option (decimal/ratio).
28.06.1995 Removed acuity table. Added "max. Acuity" option (1.6-(infinity)). Help button hidden. Version 3.4.0
14.07.1995 Fixed the memory leak with help from Metrowerks, put debug info back on screen during testing
30.07.1995 Overhaul of the preferences interface, addition of threshold bias correction
03.08.1995 German translation finished, but problem with submenus: ID < 255!
04.08.1995 fixed version string by borrowing from denis' videotoolbox
22.10.1995 added overloaded min/max functions to elektrolib
menubarhider uses c++ class
24.10.1995 found bogus destructor call and a long-lurking bug in dealing with the pest resources
version 3.5.1
29.10.1995 use new/delete for menubarhider instantiation, similar for my "screendipper"
25.11.1995 moved 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.1996 no problem compiling with codewarrior 7, both ppc & 68k
04.02.1996 added one more significant digit to contrast result display
10.02.1996 started gamma correction, vers. 3.7.1
11.02.1996 finished gamma correction algorithms, improved localisation, contrast test button now on main screen.
15.02.1996 fixed a localization bug, where you couldn't switch back to english once in german
03.03.1996 put "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.1996 played with the update events, still not completely satisfying, never mind.
15.04.1996 added fancy screen fade on start to make the screen switches look nicer. no version change
17.04.1996 there was a real bug in the "1st key decides" code. vers. 3.7.3
24.04.1996 vs 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.1996 fxed bug: file/test@4 had tested @8, not @4
11.05.1996 enable luminance lin. already with a bit depth of 4. version 3.7.5
26.05.1996 cleaned up dialogs.
01.06.1996 arranged for pest to stand alone.
04.06.1996 used my new offscreen classes for the landoltring, found small bug in non-colorquickdraw code,
new codewarrior (9): no changes necessary.
23.06.1996 found 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.1996 Added message if the test was canceled while in progress.
02.07.1996 unexpected behaviour on older systems leads to a bug in antialiasing. Fixed. 3.7.8
19.07.1996 removed the hidden C on startup, Version 3.8
03.08.1996 added variable contrast for the acuity test on Stuart Anstis' request
08.08.1996 added measurement field for contrast to get rid of screen inhomomogeneity, 3.9
09.08.1996 added "Help" facility, complete rework of dialogs, Version 4.0
02.09.1996 added "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.1996 added email button in "about" (with Internet Configuration); Vs 4.1.1
12.10.1996 in SavePreferences "UpdateResFile" instead of "WriteResource",
added disclaimer legaleze; no change in version number
26.10.1996 recompiled with improved screen depth switcher; no change in version number
03.11.1996 Fixed new bug in the crowding frame, isolated the "getVersionString" function
16.11.1996 Added (asynchronous) audible feedback on request of Guntram Kommerell.
23.11.1996 Fixed all (?) remaining screen update errors. Improved handling of scrolling
in the Help display.
26.11.1996 Made class for simple asynchronous sound, feedback sound also for contrast test.
27.11.1996 Added automatic restart of the computer at 1 o'clock in the night and even day.
Vs. 4.3
30.11.1996 Added smiley (possibly using movies) + sound on successfull test for children
12.01.1997 fixed bug when canceling the luminance linearization,
added antialiased title redraw on fast machines
23.01.1997 Antialiased titelstring only for >4 Bit screens, double '5' to abort, Vs. 4.4
19.02.1997 on 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.1997 Decision whether to alias the title string was incorrect;
erased reward smiley at end of movie. Vs 4.5.1
24.02.1997 Recompiled for Metrowerks 11, some changes in the libraries. Vs 4.5.2
04.03.1997 Recompiled for Metrowerks 11 with bug fix, many changes due to old names, Boolean -> bool. Vs 4.5.3
23.03.1997 Synchronized stimulus display with screen build-up for proper control at short presentation times. Vs 4.5.4
26.03.1997 Made 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.1997 The 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.1997 Variable size of the contrast-C diameter on request of Pablo Artal. Vs 4.7
25.05.1997 found a write to zero.
09.06.1997 put size of contrast disk into preferences, added a hidden preference "which test is
started by '5'"
23.06.1997 removed 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.1997 Added 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.1997 For 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.1997 added missing items to German dialog, reduced min. acuity, special case for 1,3->1,2
13.09.1997 added “true” crowding test after Haase's C test Vs 4.8.3
26.09.1997 reduced size of result representation, so that patients or parents don't see it readily (thanks to IS);
fixed 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.1997 More feedback from Dr. Schmidtborn: More reward movies. Introduced manual mode (started by ‘1’;).
21.11.1997 recompiled with CodeWarrior pro 2 and the latest Internet Config version
02.01.1998 minor stylistic correction in the preferences dialog for better Sys 8 conformance, Vs 4.8.6
30.05.1998 Linked with Interfaces-Libraries 3.1 for early Carbon compliance: No changes necessary!
01.07.1998 Changed ctopstr -> C2PStr,
WeseNase eingebaut, auch beim Kontrasttest
aktuell getesteten Kontrastwert angegeben
14.07.1998 Updated 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.1998 bei kRassowSpecial das Fragzeichen beim Kontrasttest rausgenommen.
19.11.1998 Fehler gesucht bei Kontrasten nach Abbruch, nicht gefunden
bei RassowSpezial 3 s Pause nach Eingabe, Variable in prefs aufgenommen
Vs 4.9.2
21.11.1998 Universal headers 3.2: nicht mehr nötig, pi musste extern deklariert werden
27.11.1998 3s Pause auch bei Visustest (kRassowSpecial)
03.03.1999 results from all trials are saved and entered into the clipboard, tab delimited
18.03.1999 crosshairs rather than question mark for contrast test. Vs 5.0
26.03.1999 Timeoutvalue unsigned, geht jetzt bis 65535
06.09.1999 Error (20%) in the size of the contrast-C found (thanks to Jeremy Beer), Vs. 5.0.1
12.01.2000 removed 68k code, started on reaction times.
25.01.2000 Now PowerPC code only.
Finished addition of reaction times to the response protocol string.
Brought documentation up to date. Vs 5.1
11.04.2000 The 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.2000 changed Pest code into an object (benefits NASA project)
19.08.2000 made 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.2000 synchronized the German resources with the English one. (-> Dr. Reichel as 5.3)
07.10.2000 small improvements with the help dialogs, all dialogs now use the standard action function Vs 5.3
21.02.2001 removed bug in the Snellen ratio output, added feet / metre choice (thanks to Pauline Cheung & Helen Eng)
28.07.2001 Vs. 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.2001 weak 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