home *** CD-ROM | disk | FTP | other *** search
/ Columbia Kermit / kermit.zip / charsets / iso8859.networking < prev    next >
Text File  |  2020-01-01  |  74KB  |  1,300 lines

  1.                    Guidelines to use 8-bit character codes
  2.                             Version 2. July 1992.
  3.                                       
  4.                                   A. Pirard
  5.                              University of Liege
  6.                                    Belgium
  7.                                       
  8.   Important preliminary notice
  9.   
  10.        This file contains translation tables between proprietary codes and
  11.   ISO codes. As indicated, some translate several characters arbitrarily by
  12.   lack of a known definition of this translation by the owner of the code
  13.   (constructor). So, watch this space for an update indicating any news as
  14.   I get to know it.
  15.   
  16.   Since version 1:
  17.   
  18.   - At the request of SHARE, IBM has:
  19.     - defined a new code page 1047 compatible with the de-facto EBCDIC.
  20.     - defined a new code page 819 corresponding to ISO 8859-1.
  21.     - published a document listing the translation between 819 and the SAA
  22.   code pages 850 and 500, from which other translation may be deduced.
  23.     - see summary of changes at the top of the paragraph about IBM.
  24.   - So, the translation tables between 8859-1 and PC codes have been
  25.   changed accordingly.
  26.   - The translation of the Macintosh code has been changed to account for 6
  27.   ISO characters that appear in an Islandic Macintosh code and translate
  28.   arbitrarily otherwise. This pushed away 4 other arbitrary translations.
  29.   - IBM code pages 850 and 1047 are considered the preferred tables; other
  30.   translations were moved to a secondary file to reduce size.
  31.   
  32.   Changes to the text:
  33.   - more complete explanation of keyboard handling for the PC.
  34.   - updating explanations to follow evolution of usage and terminology.
  35.   - minor revisions for clarity.
  36.   
  37.   
  38.   
  39.   Introduction.
  40.   
  41.        In the course of my work in communications in a French-speaking
  42.   environment -- writing programs, installing but mostly having to adapt
  43.   others -- I discovered facts, notions, techniques and data related to
  44.   international characters usage. Many English-speaking programmers are
  45.   willing to extend the scope of their software to what is for them
  46.   "foreign languages". Discussion with them is often lengthy to convey
  47.   numerous details that are obvious to one and obscure to the other. Trying
  48.   to help without repeating the same words all over again is the reason of
  49.   this document.
  50.   
  51.        This text is restricted to the problem of the character codes used
  52.   in data. Yet, I should mention briefly that isolating from executable
  53.   code the user interface messages is a real plus. These messages should be
  54.   easily translatable by anyone who knows the language, even if source is
  55.   unavailable. Anything similar to the Macintosh resources is ideal. To
  56.   avoid making feel this goal too easy, I must warn than phrases in many
  57.   languages are longer than English and that the order of inserts may vary
  58.   depending on grammar.
  59.   
  60.        I am much indebted to the people I met on networks and on the
  61.   mailing list ISO8859@JHUVM for their discussion (especially Edwin Hart
  62.   HART@APLVM, with his SHARE White Paper to IBM). The international
  63.   community owes much to the Kermit developpers group led by Christine
  64.   Gianone and fed by Frank da Cruz and many volunteers who produced several
  65.   Kermit versions using the principles described in this document and store
  66.   character codes related data on WATSUN.CC.COLUMBIA.EDU:kermit/charsets. I
  67.   should also thank many other people for their interest, especially those
  68.   who adapted their programs, but I am truly unable to mention them all.
  69.   You will know when some ISO 8859 setting catches your eye.
  70.   
  71.        At the risk of a lack of justification, I have made every effort to
  72.   keep this text as concise as possible to spare your time. One will have
  73.   to think beyond the text in some places. On the other hand, please excuse
  74.   if some paragraphs contain evidence: it is sometimes needed. Also
  75.   remember that English is not my mother language...
  76.   
  77.   
  78.   
  79.   A language among others: French.
  80.   
  81.        Like many other languages, French uses characters not found in
  82.   English. It likes to adorn them with diacritics (accents). Other
  83.   languages use other characters, from a few like German to totally
  84.   different like Russian and Greek, or even the right to left Arabic and
  85.   Hebrew. To the question: "could you do without them?", I like to reply
  86.   that forgetting them in "a la francaise" makes it mean "has the French
  87.   girl". "a" must take a grave accent to distinguish the preposition from
  88.   the verb and "c" takes a cedilla. French without diacritics is certainly
  89.   not unreadable, rarely ambiguous with the aid of context (i. e. to humans
  90.   but not to computers), but just as unpleasant as all-uppercase text and
  91.   difficult to read, stumbling on most missing accents, like proof-reading
  92.   one's kid dictation. In the general case, many languages cannot do
  93.   without their own characters anyway.
  94.   
  95.   
  96.   
  97.   Terms.
  98.   
  99.        A "character" is what one writes down on paper. A "code" is a
  100.   computer representation of a set of characters that we can see as
  101.   associated to numbers called "code points". A code usually includes
  102.   "control characters" for which a graphic representation does not normally
  103.   exist, because they are only used to control the operation of hardware or
  104.   have special meanings to programs.
  105.   
  106.   
  107.   
  108.   7-bit character codes
  109.   
  110.        ASCII (ANSI X3.4) was defined as a 7-bit code for English at a time
  111.   when hardware was really hard and expensive. To allow the use of some of
  112.   those particular characters that other languages need, it was later
  113.   decided that a defined subset (the least used ones) could be replaced.
  114.   This is ISO 646. Several language had the subset replaced with their own
  115.   characters. This is what can be done with Escape sequence of Epson
  116.   printers to switch to a national language. ANSI X3.4 became an instance
  117.   of ISO 646. But, for some languages like French, the amount of characters
  118.   that can be replaced is not enough and text processing of these days made
  119.   extensive use of backspaces and overstrikes for the missing ones. On the
  120.   other hand, replacing programming symbols with national characters
  121.   introduces much confusion in programming languages, like a comment being
  122.   terminated by its own text, and in several uses of those characters (e.g.
  123.   in e-mail or Unix) where the national meaning clashes with the ASCII one.
  124.   
  125.        US EBCDIC (an IBM code) used more or less the same characters as
  126.   ASCII, but used different code points. I should say "more and less". Some
  127.   ASCII characters did not exist in EBCDIC (e. g. square brackets) and
  128.   EBCDIC had ones (cent sign, not sign) that were not in ASCII. As a
  129.   consequence, the translation between ASCII and EBCDIC was strictly
  130.   speaking undefined, and IBM never officially defined a complete one.
  131.   Users defined one translation which resulted in a so-called de-facto
  132.   EBCDIC containing all the characters of ASCII, that all ASCII-related
  133.   programs use. Albeit EBCDIC was an 8-bit code "with holes", IBM made the
  134.   same characters replacements as ISO 646 in hardware to be used with other
  135.   languages (but, again, as other characters were missing, this was of
  136.   little use to French).
  137.   
  138.        Even though data was stored in octets, 7-bit communication line were
  139.   used and it was (and still is) common practice for software to strip off
  140.   the 8th bit despite a possible extension of the code, future or existing.
  141.   
  142.        We lived a long time of computer frustration. Is the problem solved?
  143.   
  144.   
  145.   
  146.   8-bit character codes
  147.   
  148.        Storing in a database text full of "this backspace that", trying to
  149.   sort it etc... or getting a Sterling pound bill paid in dollars because
  150.   that's what the dollar sign is replaced with in the English version of
  151.   ISO 646 was a real pain and an insult to the octet. It was soon realized
  152.   that, even if text processing could cope to some extent with compound
  153.   characters, data processing could not at all. One character must be one
  154.   data element of constant width.
  155.        With the era of cheaper hardware and microcomputers, manufacturers
  156.   started to use the upper half of the 256 code points of the common 8-bit
  157.   byte for international characters. It was one major reason of the success
  158.   of these computers over the international place.
  159.        But there was no standard and each did it his own way as to which
  160.   characters and which code points to use, like to-day's DEC, Apple, Atari,
  161.   Commodore or other less known brands. The IBM PC was built with yet
  162.   another code that was later called "code page 437" and that everyone in
  163.   the compatible business settled on. But IBM also built PCs with
  164.   variations for countries using characters that were not in 437, now
  165.   called 860, 863 and 865.
  166.   
  167.        There was an evident Babel and a new standard had to be set.
  168.   National institutions and many constructors participated to produce the
  169.   ISO 8859 standard. As 256 code points are not enough for all languages in
  170.   the world, several "versions" of this standard exist (see below for a
  171.   list, still evolving). ISO 8859-1 is for group 1 of Latin-based languages
  172.   and covers Western Europe, including English, hence many major countries
  173.   in North and South America, Australia and many others world wide.
  174.        A new multibyte standard is being prepared: ISO 10646 -- in which
  175.   ISO 8859-1 is a contiguous subset --, that will cover all languages in a
  176.   single code. "Unicode" -- a code being defined by a consortium of
  177.   manufacturers -- and ISO 10646 joined: Unicode will be a 2-byte subset of
  178.   4-byte ISO 10646, with the remarkable result of a single worldwide code.
  179.   Until ISO 10646 can be used, today's hardware and software, strongly
  180.   single-byte oriented, can easily extend the scope of a character code to
  181.   8 bits and one version of ISO 8859. The particular version used being
  182.   implicit to a group of languages is sorry indeed, but it must be
  183.   understood that it is a dramatic improvement in a country or a group of
  184.   countries where data is implicit anyway.
  185.        For short, I may call "ISO 8859" or simply "ISO" in the following
  186.   text any version that a system uses at any one time, when assuming that
  187.   the systems do not switch versions dynamically, but that the user can
  188.   setup the choice of the version he uses, if not implied by hardware.
  189.   
  190.        ISO 8859 (any version) is an extension of ASCII. The upper half (in
  191.   fact, 128-159 are reserved for more control characters) is filled with
  192.   characters for a group of countries. The present trend to use ISO 8859 is
  193.   certain. Version 1 is much like the previous DEC's "8-bit ASCII code",
  194.   and VT terminals now have a setup to use 8 bits and ISO 8859 (and Escape
  195.   sequences to switch among and display several ISO 8859 versions). Looking
  196.   at Microsoft and Lotus international codes, one notices that they had
  197.   soon adopted a "pre-release" of ISO 8859-1 (Microsoft calls ISO 8859-1
  198.   "ANSI code" in their documentation of Windows). As explained below, IBM
  199.   have adopted ISO 8859-1 their own way. X-Windows specifications (from
  200.   MIT, of a presentation system on a remote graphic terminal) prescribe
  201.   that ISO 8859-1 is to be used on the communication line. By mutual
  202.   agreement, a growing number of universities and institutions exchange
  203.   data in ISO.
  204.   
  205.   ISO 8859-1, Latin Alphabet 1, for Dutch, English, Faeroese, Finnish,
  206.   French, German, Icelandic, Irish, Italian, Norwegian, Portuguese,
  207.   Spanish, and Swedish.
  208.   ISO 8859-2, Latin Alphabet 2.  Albanian, Czech, English, German,
  209.   Hungarian, Polish, Romanian, Serbocroation, Slovak, and Slovene.
  210.   ISO 8859-3, Latin Alphabet 3, for Afrikaans, Catalan, English, Esperanto,
  211.   French, Galician, German, Italian, Maltese, and Turkish.
  212.   ISO 8859-4, Latin Alphabet 4, for Danish, English, Estonian, Finnish,
  213.   German, Greenlandic, Lappish, Latvian, Lithuanian, Norwegian, and
  214.   Swedish.
  215.   ISO 8859-5, the Latin/Cyrillic Alphabet, for Bulgarian, Byelorussian,
  216.   Macedonian, Russian, Serbocroation, and Ukrainian.
  217.   ISO 8859-6, the Latin/Arabic Alphabet.
  218.   ISO 8859-7, the Latin/Greek Alphabet.
  219.   ISO 8859-8, the Latin/Hebrew Alphabet.
  220.   ISO 8859-9, Latin Alphabet 5, for Danish, Dutch, English, Faeroese,
  221.   Finnish, French, German, Irish, Italian, Norwegian, Portuguese, Spanish,
  222.   Swedish, and Turkish.
  223.   
  224.   
  225.   
  226.   The "foreign" environment.
  227.   
  228.        So, these facts of languages have our typewriters different, and the
  229.   computer keyboards are modelled after them. A few letters moved about,
  230.   digits on the uppercase side, accented letters in place of programming
  231.   symbols etc... More striking, if you pardon the pun, is that -- because
  232.   the amount of keys is not enough for all the French characters -- some
  233.   so-called dead-keys are used to compose accented letters by a strike of
  234.   them followed by another letter, giving a single code point as program
  235.   input, just like a typewriter could overtype.
  236.   
  237.        It must be realized that, to an international computer user, an 8-
  238.   bit code is just as natural as the 7-bit one of English-speaking users.
  239.   8-bit code points "come out" some plain keys of the keyboard and are
  240.   expected to display. If a program filters them out, this will be
  241.   shocking.  If it uses these code points for internal control functions,
  242.   the user will be confused with "strange behavior" a US keyboard would
  243.   never exhibit. For example, if it strips the 8th bit of a PC e-acute, it
  244.   produces a disturbing linefeed. Or if a program decides that normal
  245.   characters belong to the range 32-127, this will play havoc. It is worth
  246.   checking a program with such data, that some keyboards can produce with
  247.   alternate input.
  248.   
  249.        Trust little about the keyboard layout and physical scan-codes. The
  250.   only reliable input is through the operating system or country-
  251.   configurable keyboard driver interface. Working with physical input is
  252.   trying to duplicate the varying and sometimes complicated logic of those
  253.   drivers (maybe covering several keyboards per country) and heading for
  254.   problems or incomplete coverage. Assuming that one can use transformation
  255.   of one strike to one code point is incorrect, because of the dead-keys.
  256.   Using the state of special keys of the PC (Shift, Ctrl, Alt etc...) to
  257.   try to modify the meaning of what the system outputs (a usual feature of
  258.   communication programs) is not the best idea either, because keyboard
  259.   recorders rarely replay the shift states along with that output. And, in
  260.   general, mixing input from different levels is unsafe: strictly speaking,
  261.   these states are asynchronous with the input, one may read a key code
  262.   when the shift state has disappeared. Yes, a program is usually faster
  263.   than the user, but can one swear that a fast, long buffered auto repeat
  264.   makes this true in all cases? Imagine your output being blocked by
  265.   network flow control... Oh yes, it can happen.
  266.   
  267.        As an example, here is what can be done on that PC I know well. The
  268.   keyboard driver outputs 2 bytes, H and L.
  269.        When H is nonzero, it is the physical position of the key pressed;
  270.   so, unless the documentation really wishes to refer to the key by
  271.   position and not keycap for such things as diamond-shaped or in-a-row key
  272.   groups, ignore this value and simply use L as final data: it is extended
  273.   ASCII to be used as such (or, at most to go through a code translation as
  274.   discussed hereafter). Note that different keys (different H) may produce
  275.   the same code-point (L); e.g. L is 0 for an Alt/literal-number of the PC.
  276.        When H is zero, a special key combination has been pressed,
  277.   indicated by the value of L to be used to index a table of actions of the
  278.   program. The PC defines 166 such special key combinations (0+L) and the
  279.   intention of the application designer -- when using modifying shift
  280.   states -- is to provide more, or, also, those the user really wants. The
  281.   90 values of L are probably enough additional definitions (but some or
  282.   all of the 166 could even be redefined or even "impossible" H combined
  283.   with a 256 L multiplicator).
  284.        Hence, the simplest method is to assign pre-defined additional
  285.   pseudo-scan-codes (0+L) -- and, repeat, certainly not extended ASCII code
  286.   points -- to the actions of the program and to manage to have the
  287.   keyboard driver produce them on any key the user chooses. Here is how to
  288.   do that.
  289.        Each time a key is pressed (or released), the keyboard driver -- be
  290.   it in ROM or the keyb... driver -- calls software interrupt 15h with 4Fh
  291.   in register AH, with carry flag set and the physical scan code of the key
  292.   in register AL (ored with 80h when released, so that this case can easily
  293.   be ignored). The application may intercept interrupt 15h, test for a key
  294.   it wants together with the shift keys states it wants (safe at this
  295.   level).
  296.   - If AH is not 4Fh or AL is an unwanted key, the processor's flags and
  297.   registers are left as on program entry (with carry set), and control is
  298.   transferred to the next interrupt 15 handler (as any well-behaved
  299.   interceptor must do); eventually, the keystroke will be used or ignored
  300.   by someone else. Usually, this transfers to a dummy interrupt and returns
  301.   to the keyboard driver to use the keystroke in the normal way.
  302.   - If the key is wanted, interrupt 16 is called with AH=5 and CH+CL set to
  303.   what is to be placed in the keyboard buffer queue to be the input to the
  304.   application. Then, return is made to the caller with carry flag cleared
  305.   to indicate to the keyboard driver that the keystroke is used and that it
  306.   is to ignore it and clean up the hardware interrupt.
  307.   - One can insert anything in the keyboard buffer, extended ASCII (PC
  308.   code) or pseudo-scan-code: a keyboard recorder will receive that and
  309.   replay it faithfully (but, of course, your inventions will be meaningful
  310.   only to your own application). This is the way to even produce "Enter"
  311.   with the right Ctrl key as IBM 3270 emulations do (if you really insist,
  312.   I personally hate this). However, remember that inserting extended ASCII
  313.   may be in conflict with the choice of a particular keyboard or code page
  314.   for which it is different: again, the keyboard driver knows much better
  315.   about that.
  316.   
  317.        I am no specialist of the Macintosh internals, but I guess there's a
  318.   similar story to tell for it.
  319.   
  320.   
  321.   
  322.   8-bit codes in communications.
  323.   
  324.        We now realize that exchanging data between those computers with
  325.   proprietary 8-bit codes is to international users  exactly like sending
  326.   data from an ASCII machine to an EBCDIC one: translation has to occur
  327.   somewhere.
  328.        Which is to translate what to what? Communication, if to work at
  329.   all, relies heavily on strict standards. If communication between EBCDIC
  330.   and ASCII computers is feasible, it is because of the well known fact --
  331.   so well one often forgets to state it -- that character on a
  332.   communication line must be ASCII. Just imagine there would be nothing
  333.   such. Just realize that there is no clearly spoken equivalent for
  334.   international characters, just tacit agreement.
  335.        It is urgently needed to stop any sorts of hacking. I know of at
  336.   least 25 different codes with characters similar to ISO 8859-1 that a
  337.   file receiver would have to try to detect and know if there were no rule.
  338.   This makes over 1000 translation tables. This text advocates standard
  339.   communication and simplicity with one code on a given computer.
  340.   
  341.        The only solution is to state that each and every octet of text data
  342.   carried on a communication line cannot be anything else that an official
  343.   standard and that, while waiting for a single multi-octet standard, each
  344.   language uses only one standard. ISO 8859 fills this purpose and is the
  345.   only official standard. It is already used by major firms and some
  346.   protocols like X-Windows.
  347.   
  348.   
  349.   
  350.   Conclusions.
  351.   
  352.   A) An "8-bit clean" computer is one allowing characters to have the 8th
  353.   bit set. If such a computer (like more and more Unixes of these days) is
  354.   to choose a code, the obvious, painless one to avoid any translation is
  355.   the standard: a version of ISO 8859. Note that such a machine becomes
  356.   code-dependent only by 1) the system messages in the user's language and
  357.   2) the terminals and other peripherals used to display and enter the data
  358.   (hence, other messages). It might seem that owing a uniform environment
  359.   of PCs or Macs and their printers could make their code the best choice
  360.   for a near Unix machine. On the long range, this will cause problems when
  361.   that environment will be integrated in networking with other sites. And
  362.   internetworking is moving fast and spreads standards. Better start right
  363.   than have a computerfull of data to translate one day. By the way, note
  364.   that most terminal emulators already use ISO 8859-1.
  365.   
  366.   B) If a computer is forced to continue using a code different from but
  367.   with a character set similar to a version of ISO 8859, it must behave
  368.   with regard of what it sends on and receives from communication lines as
  369.   if it were using that version of ISO. This means that the key feature of
  370.   protocols (like file transfer in text mode or electronic mail) is to
  371.   implement translation of the data that this protocol exchanges with the
  372.   communication line. This applies to both services provided by a host and
  373.   terminal (client) functions provided by stations. In normal usage, this
  374.   translation is expected to always be to ISO 8859, but, to ease the
  375.   transition period, the translation may be selectable, especially to
  376.   revert to the compatible case of null translation. However, the user
  377.   should be advised that the preferred translation is to ISO (and that it
  378.   in no way impairs communication restricted to ASCII).
  379.        In such a case, a requirement is to define a "best fit" translation
  380.   between the proprietary code and that ISO version for text file transfer.
  381.   Characters identical in both sets produce a meaningful code point
  382.   translation; the translation of other characters is arbitrary but must be
  383.   well defined. The important point is that this translation must be one to
  384.   one and invertible for all the 256 characters (that is, each character
  385.   translates to a different one and the reverse translation returns the
  386.   original value). The translation of the lower half of an extension of
  387.   ASCII is null. This kind of translation is valuable even if translating
  388.   characters to totally different ones in operations like file transfer,
  389.   instead of trying to obtain look-alike or multiple ones. The reason is
  390.   that doing otherwise may permanently corrupt data that cannot be fully
  391.   processed later, be it just to return or forward it. It is better to
  392.   obtain partially meaningless data (in appearence) and to be able to
  393.   process it locally (e.g. print it more meaningfully) than to assume that
  394.   the goal of network transfer is final usage. Note that if a system does
  395.   not use a subset of the code points, it may have to receive files from
  396.   systems that do.
  397.        A main difficulty is that this translation should be unique for a
  398.   given system, so that two computers running this system be able to
  399.   exchange data of their own code under the above rules (translation to
  400.   ISO) without data loss. It is clear that a proprietary communication
  401.   protocol (like NETBIOS) can use the proprietary code without translation.
  402.   (Yet, one day, that protocol (like NETBIOS) may well extend to other
  403.   computers, causing difficulty.) But, in internetworking, and especially
  404.   with electronic mail, it should not be expected from a computer to
  405.   necessarily know the type of machine (hence code) of the other party.
  406.   
  407.        The constructor (the owner of the proprietary code) should define
  408.   this translation precisely but sometimes fails to do so. In consequence,
  409.   one goal of this document is to suggest one as widely as possible.
  410.   
  411.        Terminal emulation deserves a special discussion. For communication
  412.   programs (usually providing VT100 terminal emulation), it is not
  413.   necessary to provide the full features of the higher VT models that can
  414.   switch character codes to achieve international characters support.
  415.   Moreover, it is not desirable to ask that the hosts a terminal is
  416.   connected to have to send character codes switching escape sequences in
  417.   order to initiate the use of national characters. What is needed is just
  418.   to be able to setup terminal mode with an initial state of what display
  419.   the GR code points (values above 127). This way, using ISO 8859 will only
  420.   be a "matter of fact" to the 8-bit-clean host and neither has to know
  421.   about code switching. This is especially true when the only possible
  422.   display a microcomputer can achieve is by translating ISO from the line
  423.   to its own similar character set, like the IBM PC or an Apple Macintosh
  424.   with standard fonts. In short, VT100 emulation is sufficient, but with
  425.   added translation before display and from the keyboard.
  426.   
  427.        Now, one important remark about implementing translation with a
  428.   proprietary code in a communication program. Two methods are possible.
  429.   A) Text is translated at the communication line interface. Hence, the
  430.   proprietary code is used for text in computer memory.
  431.   B) Text is translated at the other system interface (screen, keyboard,
  432.   file). Hence, ISO 8859 is used for text in memory.
  433.        The choice of the method depends on a number of factors.
  434.   - If the communication protocol is such that all data on the line is
  435.   text, method A is the easiest. If there is a mix of text and binary and
  436.   an minimum of interface points where text can be translated is not found,
  437.   then method B should be considered.
  438.   - If the system interfaces can be well localized (e. g. routines in the
  439.   program to interface the screen, keyboard and files of the PC), method B
  440.   is easy. Else (e. g. the Macintosh where multiple system interface exist
  441.   with text as parameters) method A may be better (unless maybe, on the
  442.   Mac, ISO fonts were used just for this reason, not very practical except
  443.   for a terminal emulation program).
  444.   - If the proprietary code is not unique (like multiple in use on the PC),
  445.   method B is best unless an interface is built to translate the internal
  446.   program messages to the current code.
  447.   - Using ISO in memory makes the program messages more portable.
  448.        Two typical examples: a terminal emulation with file transfer
  449.   (Kermit style) on a PC used method B with advantages; a file transfer
  450.   program (TCP/IP FTP) on a Mac used method A with great simplicity (e. g.
  451.   the filenames in the FTP dialog were translated altogether when method B
  452.   would have required to act at various points of the Macintosh API).
  453.   
  454.   
  455.   
  456.   Moral.
  457.   
  458.        I can hear those having read this far say they did not suspect such
  459.   problems. You will now understand why it is important to write 8-bit
  460.   clean software, to use a single code on one computer, that by far the
  461.   most interesting to-day is ISO 8859 (the Unix advice) and why
  462.   applications running on inconvertible systems have to translate text.
  463.   
  464.   
  465.   IBM and ISO 8859-1 (general, see details before the IBM tables)
  466.   
  467.        For the PC, IBM has now adopted the character set of ISO 8859-1 with
  468.   a different code. This was done by replacing some characters of the
  469.   original PC code, now called code page 437, to obtain the full character
  470.   set of ISO 8859-1. This new code is called "code page 850" and IBM sees
  471.   it as the preferred code page for all Latin1 customers (it's their
  472.   default code for OS/2). See the appendix D of the "DOS reference manual"
  473.   for a description of 850 and the code pages it may replace: 437, 860, 863
  474.   and 865. Beware, the yen, cent, and two paragraph symbols that existed in
  475.   437 were moved in 850. When one builds a translation table between 850
  476.   and ISO 8859-1, 32 characters of 850, mainly box-drawing, are left to be
  477.   assigned to the 32 control characters 80-9F of ISO.
  478.   
  479.        For the EBCDIC mainframes, IBM decided that, because terminals were
  480.   already using the ISO-646-like replacements to the US EBCDIC, they had to
  481.   stay compatible. They extended each such "national EBCDIC" to "country
  482.   extended code pages". Thus, there are as many EBCDICs as versions of ISO
  483.   646 (what ISO 8859 is trying to avoid). None of the original CECPs was
  484.   compatible with the de-facto EBCDIC. Lately, IBM defined CECP 1047 which
  485.   is compatible with (an extension of) the de-facto US EBCDIC (see
  486.   discussion below). In consequence, I consider that CECP 1047 is the most
  487.   interesting EBCDIC code to use, because of the compatibility with the
  488.   vast software base.
  489.   
  490.   CECP 1047 "internationalized industry standard" (my terms)
  491.   CECP 037 for US, Canada-French, Netherlands, Portugal.
  492.   CECP 273 for Germany.
  493.   CECP 277 for Denmark and Norway.
  494.   CECP 278 for Finland and Sweden.
  495.   CECP 280 for Italy.
  496.   CECP 284 for Latin America and Spain.
  497.   CECP 285 for United Kingdom.
  498.   CECP 297 for France.
  499.   CECP 500 for Belgium, Switzerland-French and Switzerland-German.
  500.   
  501.        Like 850, all these codes contain all the characters of ISO 8859-1.
  502.   
  503.        Only the recent CECP 1047 is compatible with a de-facto standard
  504.   EBCDIC, corresponding to a de-facto ASCII/EBCDIC translation, that a huge
  505.   amount of products settled on long ago, including software from IBM:
  506.   - all compilers from IBM or others: C, REXX, PL/I, Pascal, for those
  507.   sensitive to the differences in code points,
  508.   - File transfer programs like Kermit, PCTERM, and IBM TCP/IP,
  509.   - In fact, the whole of IBM TCP/IP,
  510.   - Terminal emulation: TTY line mode or 3270 emulation by the 7171,
  511.   - ASCII tapes translation,
  512.   - Products to translate ASCII to EBCDIC on a mainframe: ARCUTIL ...
  513.   - Products that should produce ASCII, but produce EBCDIC because data
  514.   goes through EBCDIC/ASCII translation: e. g. SAS output for Tektronix,
  515.   - Products that convert this output anyway, because the expected
  516.   EBCDIC/ASCII translation does not occur: LINEMODE through the 7171
  517.   transparent mode,
  518.   - Similarly, TPRINT to print in this transparent mode
  519.   - Certainly many other products I don't know of or I forget, because, as
  520.   you see, the de-facto EBCDIC snowballs from one use to the other,
  521.   - Last but far from least, it's the translation made by most gateways
  522.   that relay mail between BITNET and the Internet, i.e. between EBCDIC mail
  523.   and ASCII mail. Of special importance is that of the encoding of data
  524.   that is to be transmitted by e-mail (UUENCODE, BOO, HQX...): if the
  525.   ASCII-EBCDIC-ASCII translation fails to be invertible, decoding fails.
  526.   
  527.        The requirement #1 of SHARE is that IBM use a single EBCDIC code for
  528.   Latin group 1 and publish it. Using an extension of de-facto EBCDIC is
  529.   recommended.
  530.   
  531.   
  532.   
  533.   Asynchronous communication
  534.   
  535.        Thanks to the interest of Frank da Cruz and Christine Gianone,
  536.   Kermit now defines specifications to support ISO 8859 (and other codes if
  537.   needed) on the communication line in terminal and file transfer mode. It
  538.   has provision to extend to mixed codes files too.
  539.        John Chandler has extended the traditional translation made by his
  540.   remarkable IBM mainframe Kermits to the specific choice of any CECP or
  541.   the extended de-facto EBCDIC to ISO 8859-1.
  542.        The impressive MSDOS Kermit by Joe Doupnik now also supports
  543.   translation of PC code pages to ISO8859-1.
  544.        Thanks to Paul Placeway, Macintosh Kermit now supports ISO 8859-1 as
  545.   an 8-bit line terminal. Others have taken over the job to complete it.
  546.   
  547.        I think I can speak on behalf on the international computing
  548.   community and enthusiastically thank these people for a work most useful
  549.   to them.
  550.   
  551.   
  552.   
  553.   TCP/IP
  554.   
  555.        Despite a mention I have read in an introduction to the TCP/IP
  556.   communication protocols "provision for hosts with different character
  557.   sets", the idea does not extend much into the standards. In fact, some of
  558.   them even restrict text to 7-bit explicitly and without more reason that
  559.   some points of forgotten history. No attempt is made to make a statement
  560.   to standardize what must be an 8-bit code so that it be common to all
  561.   machines, just like ASCII is, as explained above.
  562.   
  563.        In practice, it is often no more than a question of implementation:
  564.   use ISO 8859 as the code of a machine or translate the proprietary code
  565.   to ISO 8859. At the time of writing the first version of this text, just
  566.   EBCDIC mainframes did translate, because the need appeared evident; it
  567.   was restricted to the US ASCII character set, but a simple table change
  568.   extends the scope of all protocols. For international characters users,
  569.   the same problem and solution exists for any host not using ISO 8859. As
  570.   of this writing, the most important applications on the Macintosh have
  571.   applied the principles: Eudora (POP3) by Steve Dorner, Brown tn3270 by
  572.   Peter DiCamillo, Fetch (FTP client) by Jim Matthews, FTPd (FTP server)
  573.   and other programs by Peter Lewis which cope with translation, exactly
  574.   to-day NCSA/BYU/UCL Telnet by Pascal Maes, of course Mac-X from Apple and
  575.   even others still to check. IBM PC, statu quo: just Telnet by IBM (both
  576.   vt100 and tn270) and several other firms. Thanks to the authors!
  577.   
  578.        The idea to translate the data does not come to the mind of the
  579.   persons who write the TCP/IP applications because they don't know the
  580.   problem. If the protocol speaks about it, the application will probably
  581.   be written correctly for that matter. For example, the specifications of
  582.   X-Windows state that ISO 8859-1 is the code that must be used to exchange
  583.   text between the client and the server of that protocol; and all X-
  584.   Windows applications are correct.
  585.   
  586.        So, failing to rewrite most RFCs just for this, what is needed is a
  587.   general TCP/IP statement saying what single code TCP/IP application
  588.   protocols use on communication lines: ISO 8859 with future migration to
  589.   ISO 10646. This would be like adding a minimal presentation layer.
  590.   
  591.        Specific TCP/IP cases.
  592.   
  593.        Telnet. Take the most basic VT100 implementation, treat the keyboard
  594.   as explained above (translating keyboard input to ISO 8859), translate
  595.   ISO to local code before display and you've done it. No need to try to
  596.   negotiate binary (I am told it even hurts and binary has nothing to do in
  597.   my mind with the fact that the text a particular terminal uses is 8-bit).
  598.   Note that anyone afraid of the 8th bit can limit his typing to ASCII; his
  599.   host will not return him anything else and the upgraded program will
  600.   behave exactly like before. Also note that ISO 8859 does not conflict
  601.   with the 8-bit control characters and that using ISO is simplification.
  602.   No need to wonder or negotiate if the host will send them: if any byte in
  603.   the range 80-9F comes in, you may treat it as control.
  604.   
  605.        Tn3270. Like IBM mainframes, it is forced to translate. So, it's
  606.   just a matter of using the correct tables. It will save your time not to
  607.   try to support all the EBCDIC CECPs. Using CECP 1047 will probably make
  608.   everybody happy. However, make the translation customizable. If someone
  609.   wants things differently, it will probably be a whole installation with
  610.   time to customize it.
  611.   
  612.        SMTP. Despite RFC 821 restricts data to 7-bits, it works quite well
  613.   with 8. We use 8-bit mail on Unix (Sun and IBM), on IBM mainframes and on
  614.   Macintosh to the delight of our users. It's just a matter of not crossing
  615.   8th-bit-stripper gateways. For the Internet, we do not use such hosts as
  616.   less preferred MXes and we expect that sites wanting 8 bits will do so.
  617.   Together with many other sites, we use ISO 8859-1. No problem!
  618.        So, that's just what it is needed for the Internet: kill 8th bit
  619.   killers or don't use them. Other networks should be expected to do so
  620.   with their mail and use the correct gateways with the Internet.
  621.        The BITNET/Internet gateways, for example, should translate between
  622.   ISO 8859-1 and CECP 1047.
  623.   
  624.        The same general rules for translation as explained above for file
  625.   transfer apply to FTP and other protocols. Note that text vs binary is a
  626.   distinction to introduce in additional places, maybe. For example, NFS
  627.   would benefit from using it (and best at the file level).
  628.   
  629.   
  630.   
  631.   General conclusions
  632.   
  633.   1) Every effort should be made so that all operating systems' codes be
  634.   unique and universal, i. e. ISO 8859-x for an 8-bit code, while waiting
  635.   for the perfect unity of a single multibyte code.
  636.   
  637.   2) Failing that, communication software must palliate a particular system
  638.   weakness and translate data so that it appears to the outside world to
  639.   use the unique data interchange code.
  640.   
  641.   3) Programers must deal with 8-bit character codes (and prepare for
  642.   multibytes ones).
  643.   
  644.   
  645.   
  646.   Translation.
  647.   
  648.        I have been looking for constructor-defined or most widely accepted
  649.   complete tables and I explain the reasons of the choices. However, I
  650.   cannot guarantee that another translation will not be used someday. The
  651.   data correspond to my explanations. That's all I can say.
  652.   
  653.   
  654.   DEC
  655.   
  656.        Easy case first. DEC uses ISO 8859-1 (just a few characters of their
  657.   8-bit code -- pre-dating ISO 8859 -- are different). Nothing to do except
  658.   making sure the 8 bits go through.
  659.   
  660.   
  661.   IBM translations
  662.   
  663.        Since version 1 of this document, IBM has published the following
  664.   "Character Data Representation Architecture" (CDRA) documents:
  665.   GC09-1392-00 Executive Overview
  666.   GC09-1390-00 Level 1, Reference
  667.   GC09-1391-00 Level 1, Registry
  668.        The latter answers most of the former questions about translation.
  669.        IBM has also published a new EBCDIC CECP 1047 that fulfills the
  670.   requirements of compatibility with the previous de-facto EBCDIC. However,
  671.   IBM has made no statement I know about support nor whether this code is
  672.   intended to be the sole one for Latin-1 languages.
  673.   
  674.        In consequence of the SHARE requirement (the necessity to use a
  675.   single compatible code on IBM mainframes), I think with many people that
  676.   only CECP 1047 should be used on EBCDIC mainframes. And, by extension,
  677.   only CP 850 on the PC (but ISO 8859-1 would be better). The PC may also
  678.   use CP 437 (e.g. when 850 is not available) as limited use of a subset of
  679.   the ISO character set. But, even if using CP 437, a PC should use the
  680.   same translation to ISO as for CP 850. Only 4 characters need to
  681.   translate differently and those needing them are expected to use CP 850.
  682.   
  683.        The translation tables listed below are limited to these two codes
  684.   (others are found in a separate file).
  685.        A problem exists with the translation of CECP 850 with ISO. As
  686.   published in the CDRA registry, the translation of the ASCII part is not
  687.   a null translation. This has simply been corrected below. But the IBM
  688.   translation also does not implement round trip integrity with PC to
  689.   EBCDIC translation published and used by IBM products (specifically, 850-
  690.   >500 is not 850->ISO->500). So, this table may be subject to change.
  691.   Unless IBM decide that the wrong table is CECP 1047 with ISO. Unless they
  692.   say nothing and don't mind that they have set their Communication Manager
  693.   wrong. The change would only affect the range 80-AF of the ISO control
  694.   characters, though.
  695.   
  696.   ISO 8859-1 to CECP 1047 (Extended de-facto EBCDIC):
  697.   00  01  02  03  37  2D  2E  2F  16  05  25  0B  0C  0D  0E  0F
  698.   10  11  12  13  3C  3D  32  26  18  19  3F  27  1C  1D  1E  1F
  699.   40  5A  7F  7B  5B  6C  50  7D  4D  5D  5C  4E  6B  60  4B  61
  700.   F0  F1  F2  F3  F4  F5  F6  F7  F8  F9  7A  5E  4C  7E  6E  6F
  701.   7C  C1  C2  C3  C4  C5  C6  C7  C8  C9  D1  D2  D3  D4  D5  D6
  702.   D7  D8  D9  E2  E3  E4  E5  E6  E7  E8  E9  AD  E0  BD  5F  6D
  703.   79  81  82  83  84  85  86  87  88  89  91  92  93  94  95  96
  704.   97  98  99  A2  A3  A4  A5  A6  A7  A8  A9  C0  4F  D0  A1  07
  705.   20  21  22  23  24  15  06  17  28  29  2A  2B  2C  09  0A  1B
  706.   30  31  1A  33  34  35  36  08  38  39  3A  3B  04  14  3E  FF
  707.   41  AA  4A  B1  9F  B2  6A  B5  BB  B4  9A  8A  B0  CA  AF  BC
  708.   90  8F  EA  FA  BE  A0  B6  B3  9D  DA  9B  8B  B7  B8  B9  AB
  709.   64  65  62  66  63  67  9E  68  74  71  72  73  78  75  76  77
  710.   AC  69  ED  EE  EB  EF  EC  BF  80  FD  FE  FB  FC  BA  AE  59
  711.   44  45  42  46  43  47  9C  48  54  51  52  53  58  55  56  57
  712.   8C  49  CD  CE  CB  CF  CC  E1  70  DD  DE  DB  DC  8D  8E  DF
  713.   inverted,
  714.   CECP 1047 (Extended de-facto EBCDIC) to ISO 8859-1:
  715.   00  01  02  03  9C  09  86  7F  97  8D  8E  0B  0C  0D  0E  0F
  716.   10  11  12  13  9D  85  08  87  18  19  92  8F  1C  1D  1E  1F
  717.   80  81  82  83  84  0A  17  1B  88  89  8A  8B  8C  05  06  07
  718.   90  91  16  93  94  95  96  04  98  99  9A  9B  14  15  9E  1A
  719.   20  A0  E2  E4  E0  E1  E3  E5  E7  F1  A2  2E  3C  28  2B  7C
  720.   26  E9  EA  EB  E8  ED  EE  EF  EC  DF  21  24  2A  29  3B  5E
  721.   2D  2F  C2  C4  C0  C1  C3  C5  C7  D1  A6  2C  25  5F  3E  3F
  722.   F8  C9  CA  CB  C8  CD  CE  CF  CC  60  3A  23  40  27  3D  22
  723.   D8  61  62  63  64  65  66  67  68  69  AB  BB  F0  FD  FE  B1
  724.   B0  6A  6B  6C  6D  6E  6F  70  71  72  AA  BA  E6  B8  C6  A4
  725.   B5  7E  73  74  75  76  77  78  79  7A  A1  BF  D0  5B  DE  AE
  726.   AC  A3  A5  B7  A9  A7  B6  BC  BD  BE  DD  A8  AF  5D  B4  D7
  727.   7B  41  42  43  44  45  46  47  48  49  AD  F4  F6  F2  F3  F5
  728.   7D  4A  4B  4C  4D  4E  4F  50  51  52  B9  FB  FC  F9  FA  FF
  729.   5C  F7  53  54  55  56  57  58  59  5A  B2  D4  D6  D2  D3  D5
  730.   30  31  32  33  34  35  36  37  38  39  B3  DB  DC  D9  DA  9F
  731.   
  732.   ISO 8859-1 to IBM PC code page 850:
  733.   00  01  02  03  04  05  06  07  08  09  0A  0B  0C  0D  0E  0F
  734.   10  11  12  13  14  15  16  17  18  19  1A  1B  1C  1D  1E  1F
  735.   20  21  22  23  24  25  26  27  28  29  2A  2B  2C  2D  2E  2F
  736.   30  31  32  33  34  35  36  37  38  39  3A  3B  3C  3D  3E  3F
  737.   40  41  42  43  44  45  46  47  48  49  4A  4B  4C  4D  4E  4F
  738.   50  51  52  53  54  55  56  57  58  59  5A  5B  5C  5D  5E  5F
  739.   60  61  62  63  64  65  66  67  68  69  6A  6B  6C  6D  6E  6F
  740.   70  71  72  73  74  75  76  77  78  79  7A  7B  7C  7D  7E  7F
  741.   BA  CD  C9  BB  C8  BC  CC  B9  CB  CA  CE  DF  DC  DB  FE  F2
  742.   B3  C4  DA  BF  C0  D9  C3  B4  C2  C1  C5  B0  B1  B2  D5  9F
  743.   FF  AD  BD  9C  CF  BE  DD  F5  F9  B8  A6  AE  AA  F0  A9  EE
  744.   F8  F1  FD  FC  EF  E6  F4  FA  F7  FB  A7  AF  AC  AB  F3  A8
  745.   B7  B5  B6  C7  8E  8F  92  80  D4  90  D2  D3  DE  D6  D7  D8
  746.   D1  A5  E3  E0  E2  E5  99  9E  9D  EB  E9  EA  9A  ED  E8  E1
  747.   85  A0  83  C6  84  86  91  87  8A  82  88  89  8D  A1  8C  8B
  748.   D0  A4  95  A2  93  E4  94  F6  9B  97  A3  96  81  EC  E7  98
  749.   inverted,
  750.   IBM PC code page 850 to ISO 8859-1:
  751.   00  01  02  03  04  05  06  07  08  09  0A  0B  0C  0D  0E  0F
  752.   10  11  12  13  14  15  16  17  18  19  1A  1B  1C  1D  1E  1F
  753.   20  21  22  23  24  25  26  27  28  29  2A  2B  2C  2D  2E  2F
  754.   30  31  32  33  34  35  36  37  38  39  3A  3B  3C  3D  3E  3F
  755.   40  41  42  43  44  45  46  47  48  49  4A  4B  4C  4D  4E  4F
  756.   50  51  52  53  54  55  56  57  58  59  5A  5B  5C  5D  5E  5F
  757.   60  61  62  63  64  65  66  67  68  69  6A  6B  6C  6D  6E  6F
  758.   70  71  72  73  74  75  76  77  78  79  7A  7B  7C  7D  7E  7F
  759.   C7  FC  E9  E2  E4  E0  E5  E7  EA  EB  E8  EF  EE  EC  C4  C5
  760.   C9  E6  C6  F4  F6  F2  FB  F9  FF  D6  DC  F8  A3  D8  D7  9F
  761.   E1  ED  F3  FA  F1  D1  AA  BA  BF  AE  AC  BD  BC  A1  AB  BB
  762.   9B  9C  9D  90  97  C1  C2  C0  A9  87  80  83  85  A2  A5  93
  763.   94  99  98  96  91  9A  E3  C3  84  82  89  88  86  81  8A  A4
  764.   F0  D0  CA  CB  C8  9E  CD  CE  CF  95  92  8D  8C  A6  CC  8B
  765.   D3  DF  D4  D2  F5  D5  B5  FE  DE  DA  DB  D9  FD  DD  AF  B4
  766.   AD  B1  8F  BE  B6  A7  F7  B8  B0  A8  B7  B9  B3  B2  8E  A0
  767.   
  768.   
  769.   Apple Macintosh
  770.   
  771.        Apple Inc. remained silent to the request for an official
  772.   translation table between ISO 8859-1 and the Macintosh code that would
  773.   fulfill the data processing requirement of being invertible for the 256
  774.   code points. So, I built one and suggested that the Kermit repository
  775.   store the data and be the reference for it.
  776.        I made the translation as compatible as possible with an existing
  777.   translation tables, the official "Apple File Exchange" from Apple Inc.
  778.   that translates between IBM PC code and Apple's, hence, indirectly to ISO
  779.   8859-1. Many characters of the Apple fonts belong to ISO 8859-1 and
  780.   caused no problem. The translation of some characters became
  781.   incompatible, because the "Apple File Exchange" is homographic, which
  782.   fails to be invertible (e. g. 2 superscript translates to plain 2), and
  783.   because the AFE is based on IBM PC 437 that contains some characters of
  784.   the Macintosh set that have been replaced (giving IBM PC code page 850)
  785.   with characters of ISO 8859-1 (for example, it matched Mac Omega to a 437
  786.   Omega that became a 850 U circumflex that now has to match the Mac's F3.)
  787.   Several translations that remained arbitrary were preferred to be
  788.   homographic or mnemonic. Leftovers from the 80-FF Mac range have simply
  789.   be lined up in the 80-9F range of ISO 8859-1 without any particular
  790.   reason.
  791.        This is a second version of the translation; 6 characters of the
  792.   standard Apple code whose translation was arbitrary have been translated
  793.   according to their Islandic replacements (plus change of the translation
  794.   of the Apple code points to which these ISO characters translated).
  795.        Below, you will find comments about the choices (why):
  796.   Blank: compatible with AFE (same in both PC 437 and 850).
  797.   S: not in 437/AFE, but ISO character is in "Standard Apple Character Set"
  798.   E: same for "SACS with extensions" (on newer systems only).
  799.   I: translation according to an Islandic Apple font.
  800.   A: arbitrary (but choice sometimes guided by lookalike or mnemonic
  801.   aspects and a few characters of PC 437 will be preserved).
  802.   
  803.   ISO  Mac  ISO 8859-1 name (IBM)  Why  Mac name (Paul Placeway)
  804.   80 | A5 |                       | A | bullet
  805.   81 | AA |                       | A | trade mark
  806.   82 | AD |                       | A | not equal
  807.   83 | B0 |                       | A | infinity
  808.   84 | B3 |                       | A | greater than or equal to
  809.   85 | B7 |                       | A | Uppercase Sigma (Summation)
  810.   86 | BA |                       | A | integral
  811.   87 | BD |                       | A | Uppercase Omega
  812.   88 | C3 |                       | A | radical (square root)
  813.   89 | C5 |                       | A | approx equal
  814.   8A | C9 |                       | A | elipsis (...)
  815.   8B | D1 |                       | A | em dash
  816.   8C | D4 |                       | A | left singlequote ( ` )
  817.   8D | D9 |                       | A | Y dieresis
  818.   8E | DA |                       | A | divide (a / with less slope)
  819.   8F | B6 |                       | A | partial
  820.   90 | C6 |                       | A | Uppercase Delta
  821.   91 | CE |                       | A | OE
  822.   92 | E2 |                       | A | baseline single close quote
  823.   93 | E3 |                       | A | baseline double close quote
  824.   94 | E4 |                       | A | per thousand
  825.   95 | F0 |                       | A | (closed) Apple
  826.   96 | F6 |                       | A | circumflex
  827.   97 | F7 |                       | A | tilde
  828.   98 | F9 |                       | A | breve
  829.   99 | FA |                       | A | dot accent
  830.   9A | FB |                       | A | ring accent
  831.   9B | FD |                       | A | Hungarian umlaut
  832.   9C | FE |                       | A | ogonek
  833.   9D | FF |                       | A | caron
  834.   9E | F5 |                       | A | dotless i
  835.   9F | C4 |                       | A | florin
  836.   A0 | CA | required space        | A | non-printing space
  837.   A1 | C1 | exclamation point inv |   | inverted !
  838.   A2 | A2 | cent sign             | S | cent
  839.   A3 | A3 | pound sign            |   | sterling
  840.   A4 | DB | int. currency symbol  | E | generic curency
  841.   A5 | B4 | Yen sign              | S | yen
  842.   A6 | CF | Vertical Line, Broken | A | oe
  843.   A7 | A4 | section/paragraph symb| S | section
  844.   A8 | AC | diaeresis,umlaut acc  | S | dieresis (AKA umlaut)
  845.   A9 | A9 | Copyright sign        |   | copyright   ( (C) )
  846.   AA | BB | ordinal indicator fem |   | feminine ordinal
  847.   AB | C7 | left angle quotes     |   | left guillemot (like << )
  848.   AC | C2 | logical NOT, EOL symb |   | logical not
  849.   AD | D0 | Syllabe Hyphen        | A | en dash
  850.   AE | A8 | Regist.Trade Mark sym | S | registered  ( (R) )
  851.   AF | F8 | overline              | A | macron
  852.   B0 | A1 | Degree Symbol         |   | superscript ring
  853.   B1 | B1 | plus or minus sign    |   | plus minus
  854.   B2 | D3 | 2 superscript         | A | right doublequote ( '' )
  855.   B3 | D2 | 3 superscript         | A | left doublequote ( `` )
  856.   B4 | AB | acute accent          | S | acute accent
  857.   B5 | B5 | micro symbol          |   | greek lowercase mu
  858.   B6 | A6 | paragraph symbol USA  | S | paragraph
  859.   B7 | E1 | Middle dot accent     | E | centered (small) dot
  860.   B8 | FC | cedilla accent        | E | cedilla
  861.   B9 | D5 | 1 superscript         | A | right singlequote ( ' )
  862.   BA | BC | ordinal indicator mas |   | masculine ordinal
  863.   BB | C8 | right angle quotes    |   | right guillemot (like >> )
  864.   BC | B9 | one quarter           | A | lowercase pi
  865.   BD | B8 | one half              | A | Uppercase Pi (Power)
  866.   BE | B2 | three quarters        | A | less than or equal to
  867.   BF | C0 | Question mark inverted|   | inverted ?
  868.   C0 | CB | A grave capital       | S | A grave
  869.   C1 | E7 | A acute capital       | E | A accute
  870.   C2 | E5 | A circumflex capital  | E | A circumflex
  871.   C3 | CC | A tilde capital       | S | A tilde
  872.   C4 | 80 | A diaeresis capital   |   | A dieresis
  873.   C5 | 81 | A overcircle capital  |   | A ring
  874.   C6 | AE | AE diphthong capital  |   | AE
  875.   C7 | 82 | C cedilla capital     |   | C cedilla
  876.   C8 | E9 | E grave capital       | E | E grave
  877.   C9 | 83 | E acute capital       |   | E accute
  878.   CA | E6 | E circumflex capital  | S | E circumflex
  879.   CB | E8 | E diaeresis capital   | E | E dieresis
  880.   CC | ED | I grave capital       | E | I grave
  881.   CD | EA | I acute capital       | E | I accute
  882.   CE | EB | I circumflex capital  | E | I circumflex
  883.   CF | EC | I diaeresis capital   | E | I dieresis
  884.   D0 | DC | Eth islandic capital  | I | < or Eth islandic capital
  885.   D1 | 84 | N tilde capital       |   | N tilde
  886.   D2 | F1 | O grave capital       | E | O grave
  887.   D3 | EE | O acute capital       | E | O accute
  888.   D4 | EF | O circumflex capital  | E | O circumflex
  889.   D5 | CD | O tilde capital       | S | O tilde
  890.   D6 | 85 | O diaeresis capital   |   | O dieresis
  891.   D7 | D7 | Multiply sign         | A | lozenge (open diamond)
  892.   D8 | AF | O slash capital       | E | O slash
  893.   D9 | F4 | U grave capital       | E | U grave
  894.   DA | F2 | U acute capital       | E | U accute
  895.   DB | F3 | U circumflex capital  | E | U circumflex
  896.   DC | 86 | U diaeresis capital   |   | U dieresis
  897.   DD | A0 | Y acute Capital       | I | dagger or Y acute Capital
  898.   DE | DE | Thorn islandic capital| I | fi or Thorn islandic capital
  899.   DF | A7 | sharp s small         |   | Es-sed (German double s)
  900.   E0 | 88 | a grave small         |   | a grave
  901.   E1 | 87 | a acute small         |   | a accute
  902.   E2 | 89 | a circumflex small    |   | a circumflex
  903.   E3 | 8B | a tilde small         | S | a tilde
  904.   E4 | 8A | a diaeresis small     |   | a dieresis
  905.   E5 | 8C | a overcircle small    |   | a ring
  906.   E6 | BE | ae diphthong small    |   | ae
  907.   E7 | 8D | c cedilla small       |   | c cedilla
  908.   E8 | 8F | e grave small         |   | e grave
  909.   E9 | 8E | e acute small         |   | e accute
  910.   EA | 90 | e circumflex small    |   | e circumflex
  911.   EB | 91 | e diaeresis small     |   | e dieresis
  912.   EC | 93 | i grave small         |   | i grave
  913.   ED | 92 | i acute small         |   | i accute
  914.   EE | 94 | i circumflex small    |   | i circumflex
  915.   EF | 95 | i diaeresis small     |   | i dieresis
  916.   F0 | DD | Eth Islandic small    | I | > or Eth Islandic small
  917.   F1 | 96 | n tilde small         |   | n tilde
  918.   F2 | 98 | o grave small         |   | o grave
  919.   F3 | 97 | o acute small         |   | o accute
  920.   F4 | 99 | o circumflex small    |   | o circumflex
  921.   F5 | 9B | o tilde small         | S | o tilde
  922.   F6 | 9A | o diaeresis small     |   | o dieresis
  923.   F7 | D6 | Divide sign           |   | divide
  924.   F8 | BF | o slash small         | S | o slash
  925.   F9 | 9D | u grave small         |   | u grave
  926.   FA | 9C | u acute small         |   | u accute
  927.   FB | 9E | u circumflex small    |   | u circumflex
  928.   FC | 9F | u diaeresis small     |   | u dieresis
  929.   FD | E0 | y acute small         | I | double dagger of y acute small
  930.   FE | DF | Thorn islandic small  | I | fl or Thorn islandic small
  931.   FF | D8 | y diaeresis small     |   | y dieresis
  932.   
  933.   data 'taBL' (1001, "Translate In", purgeable) {
  934.   /* Translation from ISO 8859-1 to Macintosh extended code */
  935.   /*        x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF */
  936.   /*0x*/  $"00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F"
  937.   /*1x*/  $"10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F"
  938.   /*2x*/  $"20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F"
  939.   /*3x*/  $"30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F"
  940.   /*4x*/  $"40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F"
  941.   /*5x*/  $"50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F"
  942.   /*6x*/  $"60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F"
  943.   /*7x*/  $"70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F"
  944.   /*8x*/  $"A5 AA AD B0 B3 B7 BA BD C3 C5 C9 D1 D4 D9 DA B6"
  945.   /*9x*/  $"C6 CE E2 E3 E4 F0 F6 F7 F9 FA FB FD FE FF F5 C4"
  946.   /*Ax*/  $"CA C1 A2 A3 DB B4 CF A4 AC A9 BB C7 C2 D0 A8 F8"
  947.   /*Bx*/  $"A1 B1 D3 D2 AB B5 A6 E1 FC D5 BC C8 B9 B8 B2 C0"
  948.   /*Cx*/  $"CB E7 E5 CC 80 81 AE 82 E9 83 E6 E8 ED EA EB EC"
  949.   /*Dx*/  $"DC 84 F1 EE EF CD 85 D7 AF F4 F2 F3 86 A0 DE A7"
  950.   /*Ex*/  $"88 87 89 8B 8A 8C BE 8D 8F 8E 90 91 93 92 94 95"
  951.   /*Fx*/  $"DD 96 98 97 99 9B 9A D6 BF 9D 9C 9E 9F E0 DF D8"
  952.   };
  953.   
  954.   data 'taBL' (1002, "Translate Out", purgeable) {
  955.   /* Translation from Macintosh extended code to ISO 8859-1 */
  956.   /*        x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF */
  957.   /*0x*/  $"00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F"
  958.   /*1x*/  $"10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F"
  959.   /*2x*/  $"20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F"
  960.   /*3x*/  $"30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F"
  961.   /*4x*/  $"40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F"
  962.   /*5x*/  $"50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F"
  963.   /*6x*/  $"60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F"
  964.   /*7x*/  $"70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F"
  965.   /*8x*/  $"C4 C5 C7 C9 D1 D6 DC E1 E0 E2 E4 E3 E5 E7 E9 E8"
  966.   /*9x*/  $"EA EB ED EC EE EF F1 F3 F2 F4 F6 F5 FA F9 FB FC"
  967.   /*Ax*/  $"DD B0 A2 A3 A7 80 B6 DF AE A9 81 B4 A8 82 C6 D8"
  968.   /*Bx*/  $"83 B1 BE 84 A5 B5 8F 85 BD BC 86 AA BA 87 E6 F8"
  969.   /*Cx*/  $"BF A1 AC 88 9F 89 90 AB BB 8A A0 C0 C3 D5 91 A6"
  970.   /*Dx*/  $"AD 8B B3 B2 8C B9 F7 D7 FF 8D 8E A4 D0 F0 DE FE"
  971.   /*Ex*/  $"FD B7 92 93 94 C2 CA C1 CB C8 CD CE CF CC D3 D4"
  972.   /*Fx*/  $"95 D2 DA DB D9 9E 96 97 AF 98 99 9A B8 9B 9C 9D"
  973.   };
  974.   
  975.   
  976.   
  977.   ISO 8859-1
  978.   
  979.        Here is a names list and graphic representation of the ISO 8859-1
  980.   code. The well-known ASCII part and control characters have been left out
  981.   to shorten the text. They are included for practical programming help
  982.   only. In particular, the "bitmaps" are nothing official. For convenience,
  983.   two lists of names and acronyms are given: the first comes from IBM, the
  984.   second from a list of characters of the standard IS0 6937.
  985.   
  986.   Code point in hexadecimal / Acronym / Name. Origin: IBM.
  987.   
  988.    A0 | SP30 | required space           D0 | LD62 | Eth islandic capital
  989.    A1 | SP03 | exclamation point inv    D1 | LN20 | N tilde capital
  990.    A2 | SC04 | cent sign                D2 | LO14 | O grave capital
  991.    A3 | SC02 | pound sign               D3 | LO12 | O acute capital
  992.    A4 | SC01 | int. currency symbol     D4 | LO16 | O circumflex capital
  993.    A5 | SC05 | Yen sign                 D5 | LO20 | O tilde capital
  994.    A6 | SM65 | Vertical Line, Broken    D6 | LO18 | O diaeresis capital
  995.    A7 | SM24 | section/paragraph symb   D7 | SA07 | Multiply sign
  996.    A8 | SD17 | diaeresis,umlaut acc     D8 | LO62 | O slash capital
  997.    A9 | SM52 | Copyright sign           D9 | LU14 | U grave capital
  998.    AA | SM21 | ordinal indicator fem    DA | LU12 | U acute capital
  999.    AB | SP17 | left angle quotes        DB | LU16 | U circumflex capital
  1000.    AC | SM66 | logical NOT, EOL symb    DC | LU18 | U diaeresis capital
  1001.    AD | SP32 | Syllabe Hyphen           DD | LY12 | Y acute Capital
  1002.    AE | SM53 | Regist.Trade Mark sym    DE | LT64 | Thorn islandic capital
  1003.    AF | SM15 | overline                 DF | LS61 | sharp s small
  1004.    B0 | SM19 | Degree Symbol            E0 | LA13 | a grave small
  1005.    B1 | SA02 | plus or minus sign       E1 | LA11 | a acute small
  1006.    B2 | ND021| 2 superscript            E2 | LA15 | a circumflex small
  1007.    B3 | ND031| 3 superscript            E3 | LA19 | a tilde small
  1008.    B4 | SD11 | acute accent             E4 | LA17 | a diaeresis small
  1009.    B5 | SM17 | micro symbol             E5 | LA27 | a overcircle small
  1010.    B6 | SM25 | paragraph symbol USA     E6 | LA51 | ae diphthong small
  1011.    B7 | SD63 | Middle dot accent        E7 | LC41 | c cedilla small
  1012.    B8 | SD41 | cedilla accent           E8 | LE13 | e grave small
  1013.    B9 | ND011| 1 superscript            E9 | LE11 | e acute small
  1014.    BA | SM20 | ordinal indicator mas    EA | LE15 | e circumflex small
  1015.    BB | SP18 | right angle quotes       EB | LE17 | e diaeresis small
  1016.    BC | NF04 | one quarter              EC | LI13 | i grave small
  1017.    BD | NF01 | one half                 ED | LI11 | i acute small
  1018.    BE | NF05 | three quarters           EE | LI15 | i circumflex small
  1019.    BF | SP16 | Question mark inverted   EF | LI17 | i diaeresis small
  1020.    C0 | LA14 | A grave capital          F0 | LD63 | Eth Islandic small
  1021.    C1 | LA12 | A acute capital          F1 | LN19 | n tilde small
  1022.    C2 | LA16 | A circumflex capital     F2 | LO13 | o grave small
  1023.    C3 | LA20 | A tilde capital          F3 | LO11 | o acute small
  1024.    C4 | LA18 | A diaeresis capital      F4 | LO15 | o circumflex small
  1025.    C5 | LA28 | A overcircle capital     F5 | LO19 | o tilde small
  1026.    C6 | LA52 | AE diphthong capital     F6 | LO17 | o diaeresis small
  1027.    C7 | LC42 | C cedilla capital        F7 | SA06 | Divide sign
  1028.    C8 | LE14 | E grave capital          F8 | LO61 | o slash small
  1029.    C9 | LE12 | E acute capital          F9 | LU13 | u grave small
  1030.    CA | LE16 | E circumflex capital     FA | LU11 | u acute small
  1031.    CB | LE18 | E diaeresis capital      FB | LU15 | u circumflex small
  1032.    CC | LI14 | I grave capital          FC | LU17 | u diaeresis small
  1033.    CD | LI12 | I acute capital          FD | LY11 | y acute small
  1034.    CE | LI16 | I circumflex capital     FE | LT63 | Thorn islandic small
  1035.    CF | LI18 | I diaeresis capital      FF | LY17 | y diaeresis small
  1036.   
  1037.   Names and slightly different acronyms from the ISO 6937 repertoire
  1038.   
  1039.    A0 SP31   NO-BREAK SPACE
  1040.    A1 SP03   INVERTED EXCLAMATION MARK
  1041.    A2 SC04   CENT SIGN
  1042.    A3 SC02   POUND SIGN
  1043.    A4 SC01   CURRENCY SIGN
  1044.    A5 SC05   YEN SIGN
  1045.    A6 SM65   BROKEN BAR
  1046.    A7 SM24   PARAGRAPH SIGN
  1047.    A8 SD17   DIAERESIS
  1048.    A9 SM52   COPYRIGHT SIGN
  1049.    AA SM21   FEMININE ORDINAL INDICATOR
  1050.    AB SP17   LEFT POINTING DOUBLE ANGLE QUOTATION MARK
  1051.    AC SM66   NOT SIGN
  1052.    AD SP32   SOFT HYPHEN
  1053.    AE SM53   REGISTERED TRADE MARK SIGN
  1054.    AF SD31   MACRON
  1055.    B0 SM19   DEGREE SIGN
  1056.    B1 SA02   PLUS-MINUS SIGN
  1057.    B2 NS02   SUPERSCRIPT TWO
  1058.    B3 NS03   SUPERSCRIPT THREE
  1059.    B4 SD11   ACUTE ACCENT
  1060.    B5 SM17   MICRO SIGN
  1061.    B6 SM25   PILCHROW SIGN
  1062.    B7 SM26   MIDDLE DOT
  1063.    B8 SD41   CEDILLA
  1064.    B9 NS01   SUPERSCRIPT ONE
  1065.    BA SM20   MASCULINE ORDINAL INDICATOR
  1066.    BB SP18   RIGHT POINTING DOUBLE ANGLE QUOTATION MARK
  1067.    BC NF04   VULGAR FRACTION ONE-QUARTER
  1068.    BD NF01   VULGAR FRACTION ONE-HALF
  1069.    BE NF05   VULGAR FRACTION THREE-QUARTERS
  1070.    BF SP16   INVERTED QUESTION MARK
  1071.    C0 LA14   LATIN CAPITAL LETTER A WITH GRAVE ACCENT
  1072.    C1 LA12   LATIN CAPITAL LETTER A WITH ACUTE ACCENT
  1073.    C2 LA16   LATIN CAPITAL LETTER A WITH CIRCUMFLEX ACCENT
  1074.    C3 LA20   LATIN CAPITAL LETTER A WITH TILDE
  1075.    C4 LA18   LATIN CAPITAL LETTER A WITH DIAERESIS
  1076.    C5 LA28   LATIN CAPITAL LETTER A WITH RING ABOVE
  1077.    C6 LA52   LATIN CAPITAL LIGATURE AE
  1078.    C7 LC42   LATIN CAPITAL LETTER C WITH CEDILLA
  1079.    C8 LE14   LATIN CAPITAL LETTER E WITH GRAVE ACCENT
  1080.    C9 LE12   LATIN CAPITAL LETTER E WITH ACUTE ACCENT
  1081.    CA LE16   LATIN CAPITAL LETTER E WITH CIRCUMFLEX ACCENT
  1082.    CB LE18   LATIN CAPITAL LETTER E WITH DIAERESIS
  1083.    CC LI14   LATIN CAPITAL LETTER I WITH GRAVE ACCENT
  1084.    CD LI12   LATIN CAPITAL LETTER I WITH ACUTE ACCENT
  1085.    CE LI16   LATIN CAPITAL LETTER I WITH CIRCUMFLEX ACCENT
  1086.    CF LI18   LATIN CAPITAL LETTER I WITH DIAERESIS
  1087.    D0 LD62   LATIN CAPITAL LETTER D WITH STROKE
  1088.    D1 LN20   LATIN CAPITAL LETTER N WITH TILDE
  1089.    D2 LO14   LATIN CAPITAL LETTER O WITH GRAVE ACCENT
  1090.    D3 LO12   LATIN CAPITAL LETTER O WITH ACUTE ACCENT
  1091.    D4 LO16   LATIN CAPITAL LETTER O WITH CIRCUMFLEX ACCENT
  1092.    D5 LO20   LATIN CAPITAL LETTER O WITH TILDE
  1093.    D6 LO18   LATIN CAPITAL LETTER O WITH DIAERESIS
  1094.    D7 SA07   MULTIPLICATION SIGN
  1095.    D8 LO62   LATIN CAPITAL LETTER O WITH OBLIQUE STROKE
  1096.    D9 LU14   LATIN CAPITAL LETTER U WITH GRAVE ACCENT
  1097.    DA LU12   LATIN CAPITAL LETTER U WITH ACUTE ACCENT
  1098.    DB LU16   LATIN CAPITAL LETTER U WITH CIRCUMFLEX ACCENT
  1099.    DC LU18   LATIN CAPITAL LETTER U WITH DIAERESIS
  1100.    DD LY12   LATIN CAPITAL LETTER Y WITH ACUTE ACCENT
  1101.    DE LT64   LATIN CAPITAL LETTER ICELANDIC THORN
  1102.    DF LS61   LATIN SMALL   LETTER GERMAN SHARP S
  1103.    E0 LA13   LATIN SMALL   LETTER A WITH GRAVE ACCENT
  1104.    E1 LA11   LATIN SMALL   LETTER A WITH ACUTE ACCENT
  1105.    E2 LA15   LATIN SMALL   LETTER A WITH CIRCUMFLEX ACCENT
  1106.    E3 LA19   LATIN SMALL   LETTER A WITH TILDE
  1107.    E4 LA17   LATIN SMALL   LETTER A WITH DIAERESIS
  1108.    E5 LA27   LATIN SMALL   LETTER A WITH RING ABOVE
  1109.    E6 LA51   LATIN SMALL   LIGATURE AE
  1110.    E7 LC41   LATIN SMALL   LETTER C WITH CEDILLA
  1111.    E8 LE13   LATIN SMALL   LETTER E WITH GRAVE ACCENT
  1112.    E9 LE11   LATIN SMALL   LETTER E WITH ACUTE ACCENT
  1113.    EA LE15   LATIN SMALL   LETTER E WITH CIRCUMFLEX ACCENT
  1114.    EB LE17   LATIN SMALL   LETTER E WITH DIAERESIS
  1115.    EC LI13   LATIN SMALL   LETTER I WITH GRAVE ACCENT
  1116.    ED LI11   LATIN SMALL   LETTER I WITH ACUTE ACCENT
  1117.    EE LI15   LATIN SMALL   LETTER I WITH CIRCUMFLEX ACCENT
  1118.    EF LI17   LATIN SMALL   LETTER I WITH DIAERESIS
  1119.    F0 LD63   LATIN SMALL   LETTER ICELANDIC ETH
  1120.    F1 LN19   LATIN SMALL   LETTER N WITH TILDE
  1121.    F2 LO13   LATIN SMALL   LETTER O WITH GRAVE ACCENT
  1122.    F3 LO11   LATIN SMALL   LETTER O WITH ACUTE ACCENT
  1123.    F4 LO15   LATIN SMALL   LETTER O WITH CIRCUMFLEX ACCENT
  1124.    F5 LO19   LATIN SMALL   LETTER O WITH TILDE
  1125.    F6 LO17   LATIN SMALL   LETTER O WITH DIAERESIS
  1126.    F7 SA06   DIVISION SIGN
  1127.    F8 LO61   LATIN SMALL   LETTER O WITH OBLIQUE STROKE
  1128.    F9 LU13   LATIN SMALL   LETTER U WITH GRAVE ACCENT
  1129.    FA LU11   LATIN SMALL   LETTER U WITH ACUTE ACCENT
  1130.    FB LU15   LATIN SMALL   LETTER U WITH CIRCUMFLEX ACCENT
  1131.    FC LU17   LATIN SMALL   LETTER U WITH DIAERESIS
  1132.    FD LY11   LATIN SMALL   LETTER Y WITH ACUTE ACCENT
  1133.    FE LT63   LATIN SMALL   LETTER ICELANDIC THORN
  1134.    FF LY17   LATIN SMALL   LETTER Y WITH DIAERESIS
  1135.   
  1136.   ISO 8859-1 by [coarse, bandwith saving] pictures
  1137.   
  1138.   -------------------------------------------------------------------------
  1139.   |   A0   |   A1   |   A2   |   A3   |   A4   |   A5   |   A6   |   A7   |
  1140.   |--------|--------|--------|--------|--------|--------|--------|--------|
  1141.   |        |   XX   |   XX   |  XXX   |        | XX  XX |   XX   |  XXXXX |
  1142.   |        |        |   XX   | XX XX  |XX   XX | XX  XX |   XX   | XX    X|
  1143.   |        |   XX   | XXXXXX | XX  X  | XXXXX  |  XXXX  |   XX   |  XXXX  |
  1144.   |        |   XX   |XX      |XXXX    |XX   XX | XXXXXX |        | XX  XX |
  1145.   |        |  XXXX  |XX      | XX     |XX   XX |   XX   |        | XX  XX |
  1146.   |        |  XXXX  | XXXXXX | XX  XX | XXXXX  | XXXXXX |   XX   |  XXXX  |
  1147.   |        |   XX   |   XX   |XXXXXX  |XX   XX |   XX   |   XX   |X    XX |
  1148.   |        |        |   XX   |        |        |   XX   |   XX   | XXXXX  |
  1149.   -------------------------------------------------------------------------
  1150.   
  1151.   -------------------------------------------------------------------------
  1152.   |   A8   |   A9   |   AA   |   AB   |   AC   |   AD   |   AE   |   AF   |
  1153.   |--------|--------|--------|--------|--------|--------|--------|--------|
  1154.   |        | XXXXXX |  XXXX  |        |        |        | XXXXXX |XXXXXXXX|
  1155.   |XX   XX |X      X| XX XX  |  XX  XX|        |        |X      X|        |
  1156.   |        |X  XXX X| XX XX  | XX  XX |        |        |X XXX  X|        |
  1157.   |        |X X    X|  XXXXX |XX  XX  |XXXXXXX | XXXXXX |X X  X X|        |
  1158.   |        |X X    X|        | XX  XX |     XX |        |X XXX  X|        |
  1159.   |        |X  XXX X| XXXXXX |  XX  XX|     XX |        |X X  X X|        |
  1160.   |        |X      X|        |        |        |        |X      X|        |
  1161.   |        | XXXXXX |        |        |        |        | XXXXXX |        |
  1162.   -------------------------------------------------------------------------
  1163.   
  1164.   -------------------------------------------------------------------------
  1165.   |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |
  1166.   |--------|--------|--------|--------|--------|--------|--------|--------|
  1167.   |  XXX   |   XX   | XXXX   | XXXX   |    XX  |        | XXXXXXX|        |
  1168.   | XX XX  |   XX   |    XX  |    XX  |   XX   |        |XX XX XX|        |
  1169.   | XX XX  | XXXXXX |   XX   |  XXX   |  XX    | XX  XX |XX XX XX|        |
  1170.   |  XXX   |   XX   |  XX    |    XX  |        | XX  XX | XXXX XX|   XX   |
  1171.   |        |   XX   | XXXXX  | XXXX   |        | XX  XX |   XX XX|        |
  1172.   |        |        |        |        |        | XX  XX |   XX XX|        |
  1173.   |        | XXXXXX |        |        |        | XXXXX  |   XX XX|        |
  1174.   |        |        |        |        |        |XX      |        |        |
  1175.   -------------------------------------------------------------------------
  1176.   
  1177.   -------------------------------------------------------------------------
  1178.   |   B8   |   B9   |   BA   |   BB   |   BC   |   BD   |   BE   |   BF   |
  1179.   |--------|--------|--------|--------|--------|--------|--------|--------|
  1180.   |        |   XX   |  XXX   |        | XX   XX| XX   XX|XXX    X|   XX   |
  1181.   |        |  XXX   | XX XX  |XX  XX  |XXX  XX |XXX  XX |  XX  X |        |
  1182.   |        |   XX   | XX XX  | XX  XX | XX XX  | XX XX  |XXX  X  |   XX   |
  1183.   |        |   XX   |  XXX   |  XX  XX| XXXX X | XXXXXX |  XXX X |   XX   |
  1184.   |        |  XXXX  |        | XX  XX |  XX XX |  XX  XX|XXXX XX |  XX    |
  1185.   |   XX   |        | XXXXX  |XX  XX  | XX X X | XX  XX |  X X X | XX   XX|
  1186.   |    XX  |        |        |        |XX XXXXX|XX  XX  | X XXXXX|  XXXXX |
  1187.   |  XXX   |        |        |        |     XX |    XXXX|X    XX |        |
  1188.   -------------------------------------------------------------------------
  1189.   
  1190.   -------------------------------------------------------------------------
  1191.   |   C0   |   C1   |   C2   |   C3   |   C4   |   C5   |   C6   |   C7   |
  1192.   |--------|--------|--------|--------|--------|--------|--------|--------|
  1193.   |   XX   |  XX    | XXXXX  | XXX XX |XX   XX |  XXX   |  XXXXX | XXXXX  |
  1194.   |    XX  | XX     |X     X |XX XXX  |  XXX   | XX XX  | XX XX  |XX   XX |
  1195.   |  XXX   |  XXX   |  XXX   |  XXX   | XX XX  | XXXXX  |XX  XX  |XX      |
  1196.   | XX XX  | XX XX  | XX XX  | XX XX  |XX   XX |XX   XX |XXXXXXX |XX      |
  1197.   |XX   XX |XX   XX |XX   XX |XX   XX |XXXXXXX |XXXXXXX |XX  XX  |XX   XX |
  1198.   |XXXXXXX |XXXXXXX |XXXXXXX |XXXXXXX |XX   XX |XX   XX |XX  XX  | XXXXX  |
  1199.   |XX   XX |XX   XX |XX   XX |XX   XX |XX   XX |XX   XX |XX  XXX |    XX  |
  1200.   |        |        |        |        |        |        |        | XXXX   |
  1201.   -------------------------------------------------------------------------
  1202.   
  1203.   -------------------------------------------------------------------------
  1204.   |   C8   |   C9   |   CA   |   CB   |   CC   |   CD   |   CE   |   CF   |
  1205.   |--------|--------|--------|--------|--------|--------|--------|--------|
  1206.   |  XX    |   XX   | XXXXX  |XX   XX |  XX    |    XX  |  XXXX  | XX  XX |
  1207.   |   XX   |  XX    |X     X |        |   XX   |   XX   | X    X |        |
  1208.   |XXXXXXX |XXXXXXX |XXXXXXX |XXXXXXX |  XXXX  |  XXXX  |  XXXX  |  XXXX  |
  1209.   |XX      |XX      |XX      |XX      |   XX   |   XX   |   XX   |   XX   |
  1210.   |XXXXXX  |XXXXX   |XXXXXX  |XXXXXX  |   XX   |   XX   |   XX   |   XX   |
  1211.   |XX      |XX      |XX      |XX      |   XX   |   XX   |   XX   |   XX   |
  1212.   |XXXXXXX |XXXXXXX |XXXXXXX |XXXXXXX |  XXXX  |  XXXX  |  XXXX  |  XXXX  |
  1213.   |        |        |        |        |        |        |        |        |
  1214.   -------------------------------------------------------------------------
  1215.   
  1216.   -------------------------------------------------------------------------
  1217.   |   D0   |   D1   |   D2   |   D3   |   D4   |   D5   |   D6   |   D7   |
  1218.   |--------|--------|--------|--------|--------|--------|--------|--------|
  1219.   |XXXXX   | XXX XX |    XX  |  XX    | XXXXX  | XXX XX |XX   XX |        |
  1220.   | XX XX  |XX XXX  |     XX | XX     |X     X |XX XXX  |  XXX   |XX   XX |
  1221.   | XX  XX |        |  XXX   |  XXX   |  XXX   |  XXX   | XX XX  | XX XX  |
  1222.   |XXXX XX |XXX  XX | XX XX  | XX XX  | XX XX  | XX XX  |XX   XX |  XXX   |
  1223.   | XX  XX |XXXX XX |XX   XX |XX   XX |XX   XX |XX   XX |XX   XX | XX XX  |
  1224.   | XX XX  |XX XXXX | XX XX  | XX XX  | XX XX  | XX XX  | XX XX  |XX   XX |
  1225.   |XXXXX   |XX  XXX |  XXX   |  XXX   |  XXX   |  XXX   |  XXX   |        |
  1226.   |        |        |        |        |        |        |        |        |
  1227.   -------------------------------------------------------------------------
  1228.   
  1229.   -------------------------------------------------------------------------
  1230.   |   D8   |   D9   |   DA   |   DB   |   DC   |   DD   |   DE   |   DF   |
  1231.   |--------|--------|--------|--------|--------|--------|--------|--------|
  1232.   |  XXX X | XX     |   XX   | XXXXX  |XX   XX |    XX  |XXXX    | XXXX   |
  1233.   | XX XX  |  XX    |  XX    |X     X |        |   XX   | XX     |XX  XX  |
  1234.   |XX  XXX |XX   XX |XX   XX |        |XX   XX | XX  XX | XXXXX  |XX  XX  |
  1235.   |XX X XX |XX   XX |XX   XX |XX   XX |XX   XX | XX  XX | XX  XX |XX XX   |
  1236.   |XXX  XX |XX   XX |XX   XX |XX   XX |XX   XX |  XXXX  | XXXXX  |XX  XX  |
  1237.   | XX XX  |XX   XX |XX   XX |XX   XX |XX   XX |   XX   | XX     |XX   XX |
  1238.   |X XXX   | XXXXX  | XXXXX  | XXXXX  | XXXXX  |  XXXX  |XXXX    |XX  XX  |
  1239.   |        |        |        |        |        |        |        |        |
  1240.   -------------------------------------------------------------------------
  1241.   
  1242.   -------------------------------------------------------------------------
  1243.   |   E0   |   E1   |   E2   |   E3   |   E4   |   E5   |   E6   |   E7   |
  1244.   |--------|--------|--------|--------|--------|--------|--------|--------|
  1245.   |  XX    |   XX   | XXXXX  | XXX XX |XX   XX |  XX    |        |        |
  1246.   |   XX   |  XX    |X     X |XX XXX  |        |  XX    |        |        |
  1247.   | XXXX   | XXXX   | XXXX   | XXXXX  | XXXX   | XXXX   | XXXXXX | XXXXXX |
  1248.   |    XX  |    XX  |    XX  |     XX |    XX  |    XX  |   X  X |XX      |
  1249.   | XXXXX  | XXXXX  | XXXXX  | XXXXXX | XXXXX  | XXXXX  |XXXXXXX |XX      |
  1250.   |XX  XX  |XX  XX  |XX  XX  |XX   XX |XX  XX  |XX  XX  |X  X    | XXXXXX |
  1251.   | XXX XX | XXX XX | XXX XX | XXXXXX | XXX XX | XXX XX |XXXXXXX |    XX  |
  1252.   |        |        |        |        |        |        |        |  XXX   |
  1253.   -------------------------------------------------------------------------
  1254.   
  1255.   -------------------------------------------------------------------------
  1256.   |   E8   |   E9   |   EA   |   EB   |   EC   |   ED   |   EE   |   EF   |
  1257.   |--------|--------|--------|--------|--------|--------|--------|--------|
  1258.   |  XX    |    XX  | XXXXX  |XX   XX |  XX    |    XX  | XXXXX  | XX  XX |
  1259.   |   XX   |   XX   |X     X |        |   XX   |   XX   |X     X |        |
  1260.   | XXXXX  | XXXXX  | XXXXX  | XXXXX  |        |        |  XXX   |  XXX   |
  1261.   |XX   XX |XX   XX |XX   XX |XX   XX |  XXX   |  XXX   |   XX   |   XX   |
  1262.   |XXXXXXX |XXXXXXX |XXXXXXX |XXXXXXX |   XX   |   XX   |   XX   |   XX   |
  1263.   |XX      |XX      |XX      |XX      |   XX   |   XX   |   XX   |   XX   |
  1264.   | XXXXX  | XXXXX  | XXXXX  | XXXXX  |  XXXX  |  XXXX  |  XXXX  |  XXXX  |
  1265.   |        |        |        |        |        |        |        |        |
  1266.   -------------------------------------------------------------------------
  1267.   
  1268.   -------------------------------------------------------------------------
  1269.   |   F0   |   F1   |   F2   |   F3   |   F4   |   F5   |   F6   |   F7   |
  1270.   |--------|--------|--------|--------|--------|--------|--------|--------|
  1271.   |  XX    | XXX XX |  XX    |    XX  | XXXXX  | XXX XX |XX   XX |        |
  1272.   | XXXXXX |XX XXX  |   XX   |   XX   |X     X |XX XXX  |        |   XX   |
  1273.   |    XX  |        | XXXXX  | XXXXX  | XXXXX  | XXXXX  | XXXXX  |        |
  1274.   | XXXXX  |XX XXX  |XX   XX |XX   XX |XX   XX |XX   XX |XX   XX | XXXXXX |
  1275.   |XX  XX  | XX  XX |XX   XX |XX   XX |XX   XX |XX   XX |XX   XX |        |
  1276.   |XX  XX  | XX  XX |XX   XX |XX   XX |XX   XX |XX   XX |XX   XX |   XX   |
  1277.   | XXXX   | XX  XX | XXXXX  | XXXXX  | XXXXX  | XXXXX  | XXXXX  |        |
  1278.   |        |        |        |        |        |        |        |        |
  1279.   -------------------------------------------------------------------------
  1280.   
  1281.   -------------------------------------------------------------------------
  1282.   |   F8   |   F9   |   FA   |   FB   |   FC   |   FD   |   FE   |   FF   |
  1283.   |--------|--------|--------|--------|--------|--------|--------|--------|
  1284.   |        | XX     |   XX   | XXXX   |XX  XX  |   XX   |XXX     |XX   XX |
  1285.   |      X |  XX    |  XX    |X    X  |        |  XX    | XX     |        |
  1286.   | XXXXX  |XX  XX  |XX  XX  |        |XX  XX  |XX   XX | XXXXX  |XX   XX |
  1287.   |XX  XXX |XX  XX  |XX  XX  |XX  XX  |XX  XX  |XX   XX | XX  XX |XX   XX |
  1288.   |XX X XX |XX  XX  |XX  XX  |XX  XX  |XX  XX  |XX   XX | XX  XX |XX   XX |
  1289.   |XXX  XX |XX  XX  |XX  XX  |XX  XX  |XX  XX  | XXXXXX | XXXXX  | XXXXXX |
  1290.   | XXXXX  | XXX XX | XXX XX | XXX XX | XXX XX |     XX | XX     |     XX |
  1291.   |X       |        |        |        |        |XXXXXX  |XXXX    |XXXXXX  |
  1292.   -------------------------------------------------------------------------
  1293.   
  1294.   Andr'e PIRARD
  1295.   SEGI Univ. de Li`ege
  1296.   B26 - Sart Tilman
  1297.   B-4000 Li`ege 1 (Belgium)
  1298.   PIRARD@BLIULG11 on EARN alias BITNET
  1299.   pirard@vm1.ulg.ac.be on Internet
  1300.