Document Body Page Navigation Panel

This was produced from the pdf file linked from http://www.vorburger.ch/projects/alt/, using Adobe's PDF to HTML converter.  Page 1 was edited by hand to fix problems with the conversion.

Pages 1--13

Page 1 2

ALTIFIER WEB ACCESSIBILITY ENHANCEMENT TOOL DRAFT Version 0.8
IN COLLABORATION WITH

W3C-WAI-ER

Web  Accessibility Initiative

PROJECT SUPERVISOR

Afzal Ballim, MEDIA -LITH-DI-EPFL


1 Page 2 3
ALTIFIER -WEB ACCESSIBILITY ENHANCEMENT TOOL Michael Vorburger
2
ABSTRACT
The goal of this project (« ALTifier – Web Accessibility Enhancement Tool») was to research and im-plement
tools to generate textual alternatives such as the ALT attribute in IMG and other graphical
HTML elements.

Often image and some other HTML tags lack a textual alternative. This makes them inaccessible to
screen readers, non-visual/ text-only browsers and braille readers. Adding alternate descriptions can
make such pages more accessible.

On one hand, the project focuses on HTML authors with an "author mode" tool to set ALT texts on a
site-wide per-image basis, instead per each occurrence in HTML documents. The idea of this tool is moti-vate
HTML authors to set ALT on all images by facilitating this job.

On the other hand, for users surfing on existing sites with lack of ALT, a "user mode" tool tries to
guess ALT text by heuristics. This tool is a proxy server which filters/ transforms HTML and reads pages
from the original Web server, inserts ALT, and sends them on to the Web client.

The heuristics used to guess alternate text range from looking at an image's height & width, following
links to extract a description from a document title, apply OCR to find text on buttons, to some simple
natural language recognition.

The project report gives a detailed description of the implementation and explains design choices.

keywords: ALT, IMG, HTML, C++, Filtering, W3C, WAI, Web, Accessibility, Braille, Screen Reader,
Proxy, HTML Tool, Blind or Visually Impaired People, User Interface Transformation
2
2 Page 3 4
ALTIFIER -WEB ACCESSIBILITY ENHANCEMENT TOOL Michael Vorburger
3
CONTENTS
1 Specification and Requirements 4
1.1 Introduction...................................................................................... 4
1.2 Image classes ................................................................................. 4
1.3 Three Front Ends and One Back End / Platform / Modules............. 5
1.4 HTML Tags to ALTify (Lexical Analyzer Back-End)......................... 7
1.5 ALT Heuristics (Heuristics Back-End).............................................. 9

2 User Manual 13
2.1 Using the Interactive Windows GUI for Web Authors .................... 13
2.2 Using the UNIX CLI Commands for Web Authors ......................... 13
2.3 Using the Proxy Server for Web Surfers (UNIX Daemon) ............. 13

3 Discussion 14
3.1 Comparisons (TOM, A-Prompt, Bobby) ......................................... 14

4 Acknowledgements 15

5 References 16
6 Appendix 17
6.1 Background On Web Accessibility................................................. 17
6.2 Some source code......................................................................... 18 3
3 Page 4 5
ALTIFIER -WEB ACCESSIBILITY ENHANCEMENT TOOL Michael Vorburger
4
1 SPECIFICATION AND REQUIREMENTS
1.1 INTRODUCTION
This chapter shows the specifications and design choices underlying the project. This has been written
before the first line of code was programmed, and only slightly adapted during the actual implementation.

After presenting the fundamental idea of "image classes", a brief introduction to the application's gen-eral
structure is presented. Following is a detailed description of the heuristics used to find alternate tex-tual
representation, and how various HTML tags are affected.

1.2 IMAGE CLASSES
Several "image classes" appear in HTML documents and can be distinguished based on the following
criteria. These classes influence the choice of ALT text:

¨ Illustrations are images carrying information and graphically explain or interpret some in-formation
maybe contained in the surrounding text already. They are usually "big" and
should have a meaningful ALT and ideally LONGDESC. In theory, ALT for these images
could sometimes be identified by looking at the textual context, meaning the preceding
and following paragraphs, applying some natural language recognition. (Publicity banners
probably fall into the illustrations category as well, because they technically do contain in-formation,
even though sometimes of debatable value.)

¨ Navigation aid images are graphical buttons and similar images, often appearing inside a
link or image map. A short ALT for an image of this class can be found by looking at the
link target. Chances are high that OCR recognition succeeds for this kind of image.

¨ Presentation and Decoration: This images are used to make a page "look nice", but they
usually don't contain any informational value. Some well known presentational images are
graphical rulers and bullets, substituting UL/ LI and HR. Images in this "well-known class"
have standard and constant ALT, such as '*) ' and '-----' or similar. Another simple ex-ample
are transparent 1x1 GIF images often used by professional web designers for layout
purposes. They represent another "well-known class" with ALT="". (Such transparent
GIFs can be recognized either by it's minimal file size, often 34-43 bytes only, or by it's
minimal image size, often 1 pixel only height or width.)

Note that a class such as "icons & symbols" does not fall into this categorization, as an icon could be
anything from illustrational to navigational to presentational, depending on it's usage. Note also that a
thumbnail image of the form <a href=" bigpict. jpg">< img src=" minipict. gif"></ a>
will usually belong into the category illustrations, not navigation, even though contained in a link. 4
4 Page 5 6
ALTIFIER -WEB ACCESSIBILITY ENHANCEMENT TOOL Michael Vorburger
5
1.3 APPLICATIONS STRUCTURE AND OVERALL ARCHITECTURE
1.3.1 General Structure
A core engine (back-end) with the general functionality (scanning, writting, guessing) is accessed
from several back-ends. The back-end provides a very simple C calling interface. Three front-ends will be
built around that core engine:

¨ HTTP proxy server 1 setting ALT without human intervention. This is called "user mode".
¨ UNIX command-line tools to set/ retrieve ALT for an entire site, then edit them manually.
¨ Interactive site-wide Windows GUI. This and the above tool are in "author-mode".
Both "author-mode" modules (Win GUI and UNIX CLI) have a "Suggest" function which invokes the
guess-function used in "user mode" for the proxy server. Both "author-mode" modules store the descrip-tions
in a simple site-wide ALT database. This "database" is a text file with mapping IMG-SRC to ALT.
This is a sample of how the Win GUI front-end interface:

[Dialog box showing list if paths to images, with item "images/esperanto-flago.gif" highlighted.  Rest of box shows an image of a flag and text box labeled ALT containing "ESPERANTO - La Internacia Lingvo".  
Another text box shows
"type=IMG, Width=52, Height = 36.  Appears in Document: index.html, kissfp/index.html"]

Image 1: The main window interface (GUI) for ALTifier in "author mode"
1 What's a Proxy Server? See: http:// webopedia. internet. com/ TERM/ p/ proxy_ server. html 5
5 Page 6 7
ALTIFIER -WEB ACCESSIBILITY ENHANCEMENT TOOL Michael Vorburger
6
1.3.2 Platform & Environment
The original version was developed under MS Windows using Visual C++ 5.0 and
UNIX (LINUX) gcc, because these systems were available and the author had prior us-age
experience.

The back-end code is completely platform neutral C/ C++. The proxy server
compiles only under LINUX/ UNIX, and not yet under Win32, but could probably
be ported. The GUI front-end is based on Inprise's (former Borland) excellent RAD tool "C++ Builder"
and is probably not easily portable to any other platform.

This tool can currently not be used as a Netscape/ Internet Explorer browser plug-in. Further front-ends
could consist of a CGI interface, an ISAPI filter (M$ IIS) or any other similar technology. Direct
integration into a browser's rendering engine (ALT) would be possible; this is of particular interest for the
Lynx text browser with public source code. Other offline post-processes in "author-mode" that crawl a
local site and do some editing can be thought of as well.

1.3.3 Modules & Components
The ALTifier consists of the following modules and components:

¨ ALTifier lexical analyzer back end, to scan and write HTML.
Built around a LEX definition, platform neutral C++ compiled by VC++ & gcc.

¨ ALTifier heuristics engine back end, platform neutral C++ compiled by VC++ & gcc.
¨ Interface to some OCR software like OmniPage, Xerox, TextBridge [by Win DLL?]
¨ GIF toolkit to determine width and height, using gd 2 , maybe get and set GIF comment
¨ Natural language recognition engine [???]
¨ UNIX CLI front end, written in C with gcc.
¨ Win GUI front end, written with "C++ Builder" RAD tool by Inprise, formerly Borland.
¨ Crawl engine for interactive Win & UNIX front-ends, shared code with KISSfp 3
¨ HTTP Proxy front end.

2 http:// www. boutell. com/ gd
3 http:// www. vorburger. ch/ kissfp 6
6 Page 7 8
ALTIFIER -WEB ACCESSIBILITY ENHANCEMENT TOOL Michael Vorburger
7
1.4 HTML TAGS TO ALTIFY (LEXICAL ANALYZER BACK-END)
The following HTML tags are scanned for and supplied with an ALT or similar attribute suitable for
text based browsing. When reading HTML, the lexical analyzer returns a structure of the form (type, img-src,
alt, link-url, ...) for each tag, where img-src or link-url, but not both, can be NULL for some tags. The
lexical analyzer is also invoked to write HTML.

¨ <IMG SRC= src ALT= alt> maps to (type= IMG, img-src= src, alt= alt, link-url= NULL).
¨ <A HREF= url>< IMG SRC=" button. gif" ALT= alt></ A> is an image inside a link,
often a button, and maps to (type= IMG-LINK, img-src= src, alt= alt, link-url= url). Note that
the IMG is the only element inside A, which we shall call a "pure 4 IMG link" here.

¨ <A HREF= url>...< IMG SRC=" button. gif" ALT= alt>...</ A> is a non-pure link
image, which returns type= IMG-LINK-NONPURE. The heuristics "ALT guess" engine
distinguishes this case from the above. An IMG which 'directly' precedes or follows a link,
separated possibly only by HTML white space 5 , could be reported non-pure as well.

¨ <IMG SRC= src ALT= alt ISMAP> is a server side image map and is reported as a spe-cial
type: (type= IMG-ISMAP, img-src= src, alt= alt, link-url= NULL). This allows the heu-ristics
engine to set a standard ALT.

¨ <AREA HREF= url ALT= alt> client side image MAP maps to (type= AREA, img-src=
NULL 6 , alt= alt, link-url= url). Please note that ALT text for the full image map (IMG
or OBJECT with USEMAP) is still required to tell the user that the image is an image map.

¨ <INPUT TYPE=" image" SRC= src ALT= alt [VALUE=]> maps to (type= IMG, img-src=
src, alt= alt, link-url= NULL). Note that type= IMG, as INPUT can be considered
equivalent to IMG for the purpose of determining ALT text. If no ALT attribute is present,
but VALUE 7 is, that is returned as alternative, but never written; see comment below.

¨ <APPLET ALT= alt [ CODE= url | OBJECT= url ] >alt</ APPLET> maps to
(type= APPLET, alt= alt, img-src= url, link-url= NULL). Note that the text is repeated in the
content of the APPLET tag, when lexical analyzer is writing HTML, if not already present.

4 A "pure" link is in this document defined as one where /A directly follows IMG, with no text fol-lowing
or preceding the image inside the A tag.
5 "HTML white space" in this context means ASCII space #32, CR/ NL etc. the special character

&nbsp; any tag other than P, /P, Hx, BR, TABLE, TR, TD, /TABLE, /TR, /TD.
6 The img-src of an AREA could theoretically be (temporarily) created by extracting/ cutting the rele-vant

part of the corresponding MAP/ IMG/ OBJECT. This could be of help for OCR ALT heuristics. 7
7 Page 8 9
ALTIFIER -WEB ACCESSIBILITY ENHANCEMENT TOOL Michael Vorburger
8
¨ <OBJECT TITLE= title [ DATA= url | CLASSID= url ] >title</ OBJECT> maps to
(type= OBJECT, img-src= url, alt= title, link-url= NULL). Url is set to either DATA or
CLASSID, in this order of priority. Title is repeated in the content for non HTML 4 aware
browsers. OBJECT nesting 8 is handled correctly, setting title only for the innermost OB-JECT,
and repeating the TITLE attribute for each OBJECT.

¨ <FRAME SRC= url TITLE= title> and <IFRAME SRC= url TITLE= title> maps to
(type= FRAME, img-src= NULL, alt= title, link-url= url)

If no ALT attribute is found inside IMG, AREA, INPUT & APPLET tag, but a TITLE is present, the
TITLE is returned as ALT. Please note that this concerns retrieving ALT only. When setting ALT, either
in author or user (proxy) mode, the lexical analyzer will write an ALT attribute.

It was thought about allowing to set TITLE and maybe even LONGDESC additional to ALT. The idea
was not implemented because end users could get confused and the front-ends would get more compli-cated.
(Note that TITLE is supported for OBJECT & FRAME which do not have ALT.)

Similarly to accepting TITLE instead of ALT, one could think of interpreting the NAME, ID or
CLASS attributes. This was not implemented, because these attributes are of technical nature and are
unlikely to provide a good textual alternative. Also, one could think of reading the beginning of a LONG-DESC
file for ALT. This was not implemented either, as it is unlikely an advanced HTML 4 author sets
LONGDESC but not ALT.

If the lexical analyzer finds something like <IMG ... ALT>, notice the ALT attribute with no
value, it returns ALT="". In writing mode, the attributed is 'completed' and output as full ALT="". 9

Further points not implemented in this project, but possible as well:

¨ A server side image map could be treated by simulated clicks on a raster of every eg. 5x5
pixels. This approach is not followed in this project though, partially because we defined
not to follow links in user mode, but only in author mode.

7 The LYNX documentations states: "Some document authors incorrectly use an ALT instead of
VALUE attribute for this purpose. Lynx 'cooperates' by treating ALT as a synonym for VALUE when
present in an INPUT tag with TYPE=" image". This is not consistent with the latest HTML 4. 0 specifica-tion.

8 In OBJECT nesting, the most multimedia intensive representation (ex. Java applet) is placed first.
Then another OBJECT containing a different representation (ex. video or image) is placed between the
start and end tags of the first OBJECT. Finally, a plain text description is placed between the start and end
tags of the last representation, to be accessed by users who are blind or using text only browsers.
9 MS FrontPage 'converts' ALT="" to ALT. For Lynx, these two constructions are not identical. For

example, <A ...>< IMG ... ALT></ A> is displayed as [LINK], whereas <A ...>< IMG ...
ALT=""></ A>
is correctly suppressed. 8
8 Page 9 10
ALTIFIER -WEB ACCESSIBILITY ENHANCEMENT TOOL Michael Vorburger
9
¨ The <NOFRAMES> long-html-alt</ NOFRAMES> tag inside <FRAMESET> could be sup-ported,
and/ or it's absence be warned in the author mode front-end tools.

¨ <FIELDSET> tag that does not contain LEGEND. This new element FIELDSET allows
authors to group boxes around form INPUT control. It is especially helpful to people with
visual disabilities who may be accessing the form using a screen reader. However, for the
FIELDSET to work properly, a LEGEND element, containing the header text for the
grouping of controls must be added as the first element within the FIELDSET element.

¨ <TEXTAREA> can often present a problem for screen reader users because their labels,
that tell users what to put in the box, may be placed on another line. To correct this prob-lem,
it is recommended that the field name (i. e. comments, etc.) be added as the default
field text
for edit boxes. For the TEXTAREA element the default text is simply the text
appearing between the element's start and end tags. This serves to clarify the function of
edit boxes whose text labels may have been cut off by the screen. A NAME should also be
defined for both types of elements, especially if default text is not being used.

¨ "Cross-frame" images, meaning images linked to another frame. This is generated for ex-ample
by MS PowerPoint, and is difficult to handle, because of the frame and the fact that
there is no IMG tag, but just an image directly loaded into a frame. (This is W3C depre-cated
use, see the example and comment in §2.11.5 of [WAI-GL-TECHNIQUES].)

¨ <BODY BACKGROUND= src>, as text-based browsers will not display this image anyway.
¨ JavaScript interpretation for dynamically loaded images etc.
¨ Netscape specific multimedia EMBED tag. 9
9 Page 10 11
ALTIFIER -WEB ACCESSIBILITY ENHANCEMENT TOOL Michael Vorburger
10
1.5 ALT HEURISTICS (HEURISTICS BACK-END)
In case no ALT or similar attribute is already present, or the one present is obviously automatic 10 and
therefore not very informative or simply useless, such as ALT= SRC, the following "heuristics" are used
to "guess" ALT text, depending on the type reported by the lexical analyzer, each in order of priority.

(Trivial) indicates a flag set in return while in author mode; a front-end can set the suggested ALT if
it's trivial, but ask the user for one if it's not. In user mode when acting as a proxy server, the suggestion is
always accepted.

Type = IMG & OBJECT
¨ (Trivial) If in authoring mode, check if ALT text for the image is already defined in some
other document. The authoring tools (GUI) keeps a simple database in form a text file with
mappings from IMG-SRC to ALT text.

¨ (Trivial) Set ALT="------" for graphical rulers. The number of '-' characters is ap-proximated
dividing the pixel width by 10. A graphical ruler decoration is identified if
height > 1, width / height >= 10, width > 100, height < 50.

¨ (Trivial) Set ALT="* " for graphical bullets. A graphical bullet decoration is detected if
height > 5, width > 5, width / height <= 4, height < 30, width < 30.

¨ (Trivial) Set an empty ALT="" 11 if the IMG is a decorative spacer only. A spacer is rec-ognized
if the image has width or height = 1. (Checking for actual 1x1 GIF transparency
or very small file size is not worth the trouble and waste of bandwidth.)

¨ If the image has a comment built in the image file, this comment is used as ALT text. To
the author's current knowledge GIF and PNG 12 can have comment, while JPEG cannot.
(This feature is not of first priority.)

¨ OCR, using an API interface to "Xerox Textbridge" (?) if installed. This is likely to suc-ceed
for IMG-LINK buttons which show "Home" etc. (This feature is not of first priority.)

¨ Request (query) ALT text from and submit new descriptions to some kind of "ALT text
server", yet to be set up, as outlined in http:// www. w3. org/ WAI/ altserv. htm. (This is not a
first priority.)

10 An automatically generated ALT is detected if it contains the word "byte", "gif", "jpeg", as tools
such as MS FrontPage would often insert these when simply setting ALT= SRC.
11 http:// www. w3. org/ WAI/ GL/ wai-gl-techniques-19980918. html# spacer-images

12 See http:// www. w3. org/ TR/ PNG-Chunks. html# C. tEXt 10
10 Page 11 12
ALTIFIER -WEB ACCESSIBILITY ENHANCEMENT TOOL Michael Vorburger
11
¨ Natural language recognition to identify and extract non-common nouns in the paragraphs
surrounding (before and/ or after) the image. (This is not a first priority.)

¨ Return the src filename, cutting off the path and extension of the file, replacing '_ ' and '-'
by a blank space. This is based on the hope that webmasters or graphics designers give
meaningful names to their images, like help. gif or options. gif etc.

Type = IMG-LINK & IMG-LINK-NONPURE
¨ For pure A-IMG-/ A links, and if the link target is an HTML document, then return the
"document link title" as defined below. (Only in authoring mode, having possible waste of
bandwidth by fetching all linked pages in mind. This could be a configurable option.)

¨ For non pure IMG links, that is if there is some text between the A, IMG and /A tags, re-turn
an empty ALT="". The reason for this is that such an image is likely to be a small
inline decoration which, if it disappears in text browsing, is no loss of information as the
existing link text suffices.

Type = APPLET
¨ (Trivial) Return "[ Java Applet]" as default.

Type = IMG-ISMAP
¨ (Trivial) Return "[ Server Side Image Map]" as default for an IMG-ISMAP. An author
should overwrite this suggestion and set an empty ALT="" if there are alternative textual
links on that page.

Type = AREA & FRAME
¨ Return the document link title of the referenced (link-url = HREF or SRC) page.

For all types, an optional setting allows to terminate all non-empty ALT text with a punctuation ('. ').
This seems to be helpful to screen readers, causing them to briefly pause, according to comments ex-pressed
in mailinglists.

It is ensured that empty ALT="" is never set inside a pure link, for none of the above points. Please
note that this tool will never insert ALT text or comment such as "Place Alt text here" or anything similar
as this is completely useless. 11
11 Page 12 13
ALTIFIER -WEB ACCESSIBILITY ENHANCEMENT TOOL Michael Vorburger
12
1.5.1 Document Link Title
A document's "Link Title" is used as ALT text for an image if this one is the system is in authoring
mode, and the image is in a link, and the link target is an HTML document and not another image, a
thumbnail.

Under these conditions, the link is followed and the HTML document is examined for some concise
title. First of all, the TITLE tag is regarded. This document link title could be slightly different from
TITLE, and is (can) be stored in the document in some META tag. It could be edited by the end user in
author mode. This META tag could be set when a textual link to the document is found, allowing eg.
image map links where this information is missing to "inherit" it from textual links. This idea is inspired
by 13

If a TITLE contains any strings of the form ' – ' (space, dash, space) then the string until the occur-rence
of the such string is used as ALT. This is to eliminate long and repeated site descriptions in titles
such as "Encountered Problems – SumInfo – Projects – Michael Vorburger's Homepage". This feature is
not of first priority and can be turned off in the configuration. (If a "reverse site descriptive" title such as
"Michael Vorburger's Homepage – Projects – SumInfo – Encountered Problems" is used, this could be
recognized by checking if the start is always the same, namely the site's name.)

If no TITLE is found, the document's first H1 is used as ALT, if no H1 is present, the document's H2
is used, and so forth. Some maximum length (eg. 100-150 characters, or less???) might be imposed on the
text. Cutting is always done at word borders. If no Hx is found, a short title is extracted from text that
follows the BODY tag, taking eg. 100-150 (less???) characters and cutting at word borders. If the link's
A/ HREF tag contains a # named destination, the TITLE check could be skipped and only the Hx check
from the named destination, maybe a bit earlier, on, should be done. Another possibility would be to
check <META SUMMARY> tags.

If the target document of a link is a frame set, the above procedure is executed on the first frame's
content, or the frame named "main" if any, or the NOFRAME text if it seems to be reasonable. A reason-able
NOFRAME text is one not containing more than 2-3 of the following keywords in the first 300 char-acters:
"browser, no, not, please, upgrade, update, download, netscape, ns, ie, explorer". (This feature is
not of first priority.)

13 "Another technique for image map AREA tags that don't have ALT text (or other url with no de-scription
of the target) would be to search for a text link with the same URL, and use that text link as ALT
text for the AREA tag (optionally, the tool would then delete the text link at the bottom since it is then
redundant)." from http:// www. w3. org/ WAI/ ER/ text-equiv# imgrepetition 12
12 Page 13
ALTIFIER -WEB ACCESSIBILITY ENHANCEMENT TOOL Michael Vorburger
13
2 REFERENCES
[1] "Textual Equivalents -techniques to be used by tools taking HTML as input and trying to come up
with textual alternatives for all sort of visuals lacking their native description", Daniel Dardailler,
based on comments received on the WAI ER IG list. http:// www. w3. org/ WAI/ ER/ text-equiv. htm

[2] "WAI Accessibility Guidelines: Page Authoring", G. Vanderheiden, W. Chisholm, and I. Jacobs, eds.
Available on-line at: http:// www. w3. org/ TR/ WD-WAI-PAGEAUTH

[3] "WAI Accessibility Guidelines: Page Authoring Techniques", G. Vanderheiden, W. Chisholm, and I.
Jacobs, eds. Available on-line at: http:// www. w3. org/ WAI/ wai-gl-techniques

[4] "WAI Accessibility Guidelines: Authoring Tools", J. Treviranus , J. Richards, N. Sicchia, I. Jacobs.
Available on-line at: http:// www. w3. org/ WAI/ AU/ WAI-AUTOOLS. html

[5] "WAI User Agent Guidelines", J. Gunderson, I. Jacobs. Available on-line at:
http:// www. w3. org/ WAI/ UA/ WD-WAI-USERAGENT/

[6] "HTML 4.0 Recommendation", D. Raggett, A. Le Hors, and I. Jacobs, eds. Available on-line at:
http:// www. w3. org/ TR/ REC-html40/

[7] For the graphical ruler/ bullet/ spacer decoration recognition rules: "HTML++ Class Library with
HTML Parser – TextOnly Filter", Michael Vorburger, http:// www. vorburger. ch/ projects/ textonly

[8] "The Three -tions of Accessibility-Aware HTML Authoring Tools", J. Richards. Available on-line at:
http:// www. utoronto. ca/ atrc/ rd/ hm/ 3tions. htm

[9] "WAB: World Wide Web Access for Blind and Visually Impaired Computer Users", a proxy server
that inserts list of links and headings, among others. http:// www. inf. ethz. ch/ department/ IS/ ea/ blinds/

[10] Microsoft on Accessibility, at http:// www. microsoft. com/ enable/
[11] "Lex und Yacc", Helmut Herold, Addison-Wesley 13

Page Navigation Panel

1 2 3 4 5 6 7 8 9
10 11 12 13