Upstream Links 2.23

This commit is contained in:
Juhani Krekelä 2021-08-28 18:37:32 +03:00
commit 8d7a59beb5
3263 changed files with 326321 additions and 0 deletions

391
AUTHORS Normal file
View File

@ -0,0 +1,391 @@
Mikulas Patocka <mikulas@artax.karlin.mff.cuni.cz>
Petr Kulhavy <brain@artax.karlin.mff.cuni.cz>
Karel Kulhavy <twibright@hispeed.ch>
Martin Pergel <mper7437@artax.karlin.mff.cuni.cz>
http://artax.karlin.mff.cuni.cz/~mikulas/vyplody/links/
Unicode2ascii replacement and entity name tables are taken from Lynx.
People who contributed to links:
Unai Uribarri <unai@telecable.es>
History
Uwe Hermann <uh1763@bingo-ev.de>
Manpage
Command line switch -version
Open link in new xterm
Sebastian Zagrodzki <s.zagrodzki@sith.mimuw.edu.pl>
Shift-G opens dialog with pre-displayed current URL
Alexander Mai <st002279@hrzpub.tu-darmstadt.de>
OS/2 xterm support
Fix includes for AIX
Updated manpage
Dakshinamurthy Karra <kd@blr.vsnl.net.in>
Win NT port
Saving goto history
Peter Gervai <grin@tolna.net>
Manpage updates
Mailcap to links.cfg convertor
Arkadiusz Miskiewicz <misiek@pld.org.pl>
Internationalization (GNU gettext)
Oleg Deribas <older@iname.com>
Window title and clipboard support in OS/2
Felix von Leitner <felix@convergence.de>
Set file date/time when downloading
Arkadiusz Sochala <jojoro@priv2.onet.pl>
Polish translation
Petr Cech <cech@atrey.karlin.mff.cuni.cz>
Allow spaces at the beginning of url
Dmitry M. Klimov <dmk@gtrk.kmtn.ru>
KOI8-R frames
Russian localization
Yurii Rashkovskii <yrashk@univer.kharkov.ua>
Updated Russian localization
Lukasz Dobrek <dobrek@student.ifpan.edu.pl>
$CONFIG_DIR for config directory
beckers <beckers@st-oneline.de>
German translation
Evan Hughes <hughes@lab43.org>
Bookmarks
Armon Red <armon@islandia.isarmon@islandia.is>
Icelandic translation
M.K.Srikant <srix@vsnl.com>
Small fix in forms
Cliff Cunnington <cliff@ccnet.demon.nl>
User's manual at http://links.sourceforge.net/docs/manual-0.82-en/
Wojtek Bojdo/l <wojboj@lp.net.pl>
Updated Polish localization
Jan Bobrowski <jb@mohan.krakow.pl>
Small optimization in file listing
Serge Winitzki <serge at mendax dot phys dot cwru dot edu>,
<serge at cosmos dot phy dot tufts dot edu>
Upadted Russian localization
Updated German localication
SSL detection fix
Alex Antropoff <alex@tirastel.md>
'charset' attribute of META element
Aurimas Mikalauskas <inner@dammit.lt>
Lithuanian translation
Martin Norback <d95mback@dtek.chalmers.se>
Swedish translation
Jimenez Martinez Angel Luis <al026635@alumail.uji.es>
David Mediavilla Ezquibela <davidme.forum@bigfoot.com>
Spanish translation
Suveg Gabor <gsuveg@sgmobil2000.hu>
Hungarian translation
Gianluca Montecchi <gianluca@pluto.linux.it>
Italian translation
Sergei Borushevsky <b_sp@usa.net>
No-proxy-for, HTTP auth, Ctrl-W completion
SSL
Fabrice Haberer-Proust <fric@gmx.li>
French translation
Cristiano Guadagnino <cris@geppo.cmb2000.it>
Updated italian translation
Fabio Junior Beneditto <betatest@catolico.com.br>
Brazilian Portuguese translation
Martin Kavalec <martin@penguin.cz>
Fixed redundant ':' in host header
Peter Wang <tjaden@alphalink.com.au>
Rebindable keys, /etc/links.cfg
Mike Swieton <pyromage@pyromage.net>
Fixed bug: Form is not posted when jumping to field by number
Kaloian Doganov <kaloian@europe.com>
Bulgarian translation
Baris Metin <baris@gelecek.com.tr>
Emir Yasin SARI <bitigchi@me.com>
Turkish translation
Dmitry Pinchukov <dpinch@mail.ru>
Ukrainian translation
Kalev Lember <kalev@colleduc.ee>
Taniel Kirikal <taniel@colleduc.ee>
Estonian translation
zas <zas@norz.org>
Updated French translation
Table frame and rules when no border attribute present
Oleg Belousov <strijar@urai.ru>
"Ignore charset info sent by server" is saved din config file
Nuno Miguel Rodrigues <nmr@europa.net.dhis.org>
Unixware console fix
Adam Harvey <matlhdam@iinet.net.au>
Fixed sometimes badly posted form
Alberto García <berto@gpul.org>
Galician translation
Radovan Stas <radoone@skmi.science.upjs.sk>
Slovak translation
Marco Bodrato <bodrato@linuz.sns.it>
Twinterm support
Kaloian Doganov <kaloian@europe.com>
Bulgarian translation update
Olexander Kunytsa <kunia@istc.kiev.ua>
Ukrainian translation update
Marius Gedminas <marius.gedminas@uosis.mif.vu.lt>
Fixed reversed HOME/END on RXVT
Mediavilla David <f4j900zx001@NOSPAMsneakemail.com>
Updated Spanish translation
Simos Xenitellis <simos@hellug.gr>
Alejandros Diamandidis <adia@egnatia.ee.auth.gr>
Greek codepages & translation
Anton Voloshin <vav@isv.ru>
Proper encoding of form entries
Michail Litvak <mci@owl.openwall.com>
Patch configure.in to force error if OpenSSL not found
Nalin Dahyabhai <nalin@redhat.com>
Fixed occasional destroying of read buffer on Alpha
Andrew Rodionoff <arnost@mail.ru>
Fixed minor bug in kbd binding
Stefan de Groot <stefan@nllinux.nl>
Dutch translation
Carles Sadurní Anguita <isard@ctv.es>
Catalan translation
Ionel Mugurel Ciobîcă
Romanian translation
Petr Baudis <pasky@pasky.ji.cz>
Use "imgtitle" if there's no "alt"
Fix relative redirect on -dump and -source
Add "LISTING" tag
Fix stripping '?' out of form url
Cookie expiration
Manpage update
Fixed one small leak when links goes out of memory
Do not call memset from signal handler
Fixed user in smb
Jacek Fedorynski <jfedor@jfedor.org>
Fixed segfault when posting large forms
Aldy Hernandez <aldyh@cygnus.com>
MacOS address resolution fix
Muhamad Faizal <faizal@mfaizal.net>
Indonesian translation
Peter Naulls <peter@chocky.org>
RiscOS support
Jonas Fonseca <fonseca@diku.dk>
Danish translation
David O'Brien <obrien@FreeBSD.org>
-force-html
Sergey Karpov <karpov@sai.msu.su>
Updated russian translation
Fixed image alt displayed in incorrect codepage
Simen Graaten <simeng@slarkware.com>
Norwegian translation
Miroslav Rudisin <miero@atrey.karlin.mff.cuni.cz>:
Updated Slovak translation
Varga Balázs <vinnui@broadband.hu>, <vinnui@ent.hu>
Updated Hungarian translation
Denis Lackovic <delacko@fly.srk.fer.hr>
Croatian translation
Richard Pecl <pecl@unicontrols.cz>
Use threads on windows
Chris Lightfoot <chris@ex-parrot.com>
\xab parsing in strings in Javascript
Yevgeny Gromov <yevgeny@tut.by>
Belarusian translation
William Yodlowsky <wyodlows@andromeda.rutgers.edu>
SSL patch for Solaris and other systems without /dev/random
Koblinger Egmont <egmont@cs.bme.hu>
Updated Hungarian translation
Ludvik Tesar <tesar@mee.tcd.ie>
URL to clipboard copying in X.
Stanson <stanson@btv.ru>
Clipboard pasting into links (works from all applications)
Andre Valente <a.valente@netcabo.pt>
Portuguese translation
Sven Neumann <sven@convergence.de>
DirectFB graphics driver
Mátyás János <jani@mail.xubion.hu>
Updated Hungarian translation
Anton 'Keeper' Kopyov <keeper@dfipm.vpti.vladimir.ru>
Updated Russian translation
Karvinen Ilkka <ik@cs.tut.fi>
Updated Finnish translation
Guido Schimmels <guido.schimmels@freenet.de>
Updated German translation
Tamas Gervai <crown@tolna.net>
Links icons
Daniel Berlin <dan@cgsoftware.com>
Cookies can contain whitespace (fixes bugzilla)
Thomas Klausner <tk@giga.or.at>
Support for 16-bit 565 RGB big endian
Fix for 24-bit RGB big endian
libpng-1.5 support
Strahinya Radich <mr99164@alas.matf.bg.ac.yu>
Serbian translation
Serbian Cyrillic letters
Andrei Paskevich <andrei@capet.iut-fbleau.fr>
Image view & download with 'i', '*' to change inlined image display
Fix tokenizer of javascript when it encounters 0xff character
Wojciech Puchar <wojtek@tensor.3miasto.net>
SunOS 4 portability fixes
Marc Zonzon <Marc.Zonzon@univ-rennes1.fr>
Disable AC_BIG_ENDIAN and AC_LITTLE_ENDIAN name clash
Use pkg-config to find openssl
Eduard Werner <edi.werner@gmx.de>
Upper Sorbian translation
Updated Polish translation
Vladimir Marek <marek@printsoft.cz>
Fixed --disable-graphics and --disable-javascript
Sam <sam@frida.fri.utc.sk>
SDL graphics driver
Karel Karlik <kkar8447@ss1000.ms.mff.cuni.cz>
Fixed framebuffer in 15 and 16-bit modes
Edward Rosten <er258@hermes.cam.ac.uk>
Block ad images
Dieter <netbsd@sopwith.solgatos.com>
Fix warnings on 64-bit machines
Jakub Bogusz <qboosh@pld-linux.org>
Updated Polish translation
Fixed memory corruption when passing parameters to framebuffer driver
Federico G. Schwindt <fgsch@lodoss.net>
Use MD5 functions from libc when available
Rezzie <rezzie@telkom.net>
Updated Indonesian translation
Konstantin S. Kravtsov <k6@pisem.net>
Regular expressions for javascript
Lech Lorens <lech_lorens@interia.pl>
Optional scrollbars in frames
Matthew Fischer <futhark@mchsi.com>
Fixed Japanese fonts
Jindrich Makovicka <makovick@gmail.com>
Fixed memory corruption when redirecting URLs with user:password
Carles Pina i Estany <carles@pina.cat>
Add more top-level domains
Didier Mequignon <didiermequignon@wanadoo.fr>
Updated French translation
Ben Secrest <blsecres@gmail.com>
Don't change Xwindow class
mab
Swiss German (Zueriduetsch) translation
Christian Biere <christianbiere@gmx.de>
magnet: URL support
Hazel Russman <hazeldebian@googlemail.com>
Updated Links manual
Egmont Koblinger <egmont@gmail.com>
Support for large mouse coordinates in text mode using the protocol 1006
Volker Schatz <linksbrowser@volkerschatz.com>
Do not misreport Date header value as last-modified date
in the info box popping up on "=".
New graphics glyphs
Daniel Stenberg <daniel@haxx.se>
A piece of code from the curl library was taken to verify SSL host name
Luc Schrijvers <begasus@gmail.com>
Leorize <leorize+oss@disroot.org>
Francois Revol
Haiku support
pluvano <me@pluvano.com>
Delete the 4-pixel border in Xwindow
Ing. Daniel G. Gionco <dggionco@hotmail.com>
Updated the Spanish translation

29
BRAILLE_HOWTO Normal file
View File

@ -0,0 +1,29 @@
Braille terminal support in Links
=================================
1) To turn on braille support:
==============================
- run Links in text mode
- check "Braille terminal" in menu Setup->Terminal options
2) What does it do:
===================
- all menu and dialogs are displayed full-screen
- menu hot keys are displayed in front of the menu item (e.g. "O Html options")
- in bookmark manager, associations manager and extensions manager:
keys up/down move cursor through the bookmarks and keys left/right move the
cursor through the buttons (add, delete, edit, ...)
- all links are prepended with '~' (tilde) character
- text fields are indicated with '>' character
- arrow keys move the cursor around the page
- key '{' (left bracket with shift) moves cursor to the beginning of a line
- key '}' (right bracket with shift) moves cursor to the end of a line
- to go to previous page: use 'z' key
- key 'a' moves cursor to status bar
- key 'w' moves cursor to title bar
- key 't' moves to the previous word
- key 'y' moves to the next word
- key Ctrl-T moves to the previous link
- key Ctrl-Y moves to the next link
- key Ctrl-O moves to the next form field

353
COPYING Normal file
View File

@ -0,0 +1,353 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Library General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Library General
Public License instead of this License.
In addition, as a special exception, the copyright holders give
permission to link the code of portions of this program with the
OpenSSL library under certain conditions as described in each
individual source file, and distribute linked combinations
including the two.
You must obey the GNU General Public License in all respects
for all of the code used other than OpenSSL. If you modify
file(s) with this exception, you may extend this exception to your
version of the file(s), but you are not obligated to do so. If you
do not wish to do so, delete this exception statement from your
version. If you delete this exception statement from all source
files in the program, then also delete it here.

5321
ChangeLog Normal file

File diff suppressed because it is too large Load Diff

114
INSTALL Normal file
View File

@ -0,0 +1,114 @@
Links 2.23 -- How To Install
----------------------------
Follow this step-by-step:
0) Check you have installed the following libraries and are able to compile with
them. On a package-driven distribution, you will need both "library" and
"library-dev(el)":
Mandatory libraries
-------------------
libpng - required to compile links in graphics mode (not required in text
mode). Libpng 2.1.18 has a bug and must be patched by the patch
libpng-1.2.18.patch which is shipped with Links.
IJG libjpeg - if you want to display JPEG's (probably yes).
TIFF Library - if you want TIFFs.
SVGAlib - if you want Links to be able to display on SVGAlib.
OpenSSL and zlib - if you want SSL connections. zlib is not necessary if you
know the SSL is compiled without zlib.
Optional libraries
------------------
zlib - shows gzipped pages
libbz2 - shows bzipped content
lzma - shows content compressed with lzma
If any of the library is not present on the system or is unusably old and you cannot install it
(typically because you are not a root), then go to 11) Compiling with
user-supplied libraries.
1) Do not forget to run "ldconfig" if you have installed any new libraries :-)
2) "./configure --help"
Read the output and choose which options you want to give ./configure.
Probably you will want --enable-graphics
3) "./configure <your options>"
4) Check the output of ./configure (in the table at the end) whether you really
get what you want
5) "make"
6) If you are a root, "make install" with root privileges. If not, copy the
resulting "links" executable into some suitable place, preferrably within
your $PATH. The whole browser is just one executable.
7) If you haven't got a permanent Internet connection, save the "doc/"
subdirectory into some suitable place (/usr/share/, /usr/local/share). The
most important part is the "doc/links_cal/" subdirectory which contains a calibration pattern
(calibration.html in English, kalibrace.html in Czech)
you will need to get a flawless picture on your monitor.
8) If you want to supply a Links icon into your X Window System windowmanager,
you will find a suitable 48x48 icon in graphics/links.xpm
9) Delete the archive and source directory - no more needed
10) The browser is ready now. You just have to calibrate it to get a flawless
picture (see doc/calibration.html or the Links homepage, which is in default
bookmarks).
11) Compiling with user-supplied libraries.
This describes how to compile Links with user-supplied libraries zlib,
libpng, libpjpeg and libtiff. If you want to use any of these libraries from
the system, omit appropriate references. The versions are just for example:
Download libpng-1.2.3, zlib-1.1.4, libjpeg-6b and libtiff-v3.5.7
archives and unpack them. Build the libraries according to their
instructions to get static (*.a) library in each.
Please note libpng-1.2.18 is buggy and must be patched with
libpng-1.2.18.patch which is shipped with Links.
export CPPFLAGS="-I../zlib-1.1.4 -I../libpng-1.2.3 -I../jpeg-6b
-I../tiff-v3.5.7/libtiff"
export LDFLAGS="=L../zlib-1.1.4 -L../libpng-1.2.3 -L../jpeg-6b
-L ../tiff-v3.5.7/libtiff"
goto 2)
PITFALLS
--------
Compile:
Unix - use ./configure; make
in some FreeBSD 3 distributions you have to set CFLAGS=-aout before
running ./configure
Tested on Linux, FreeBSD, Solaris, IRIX
OS/2 - use ./configure; make
You must have GNU bash and GNU text/shell/file utilities so that
configure can run
The only supported compiler is EMX, you probably won't be able to
compile it with anything else
configure under OS/2 needs to know paths to gcc, make anb bash. Set (for
example):
SET HOSTTYPE=i586
SET MACHTYPE=i586-pc-os2
SET CONFIG_SHELL=d:/prg/gnu/bin/bash.exe
SET CC=d:/prg/emx/bin/gcc.exe
SET MAKE=d:/prg/emx/bin/make.exe
SET EMXOPT=-h100
Windows - you must have Cygwin or Interix environment
Otherwise, compile it just like on Unix
Install:
Unix - make install
OS/2 - copy file links.exe somewhere to your path or create CMD file that runs
links
WARNING: EMX has nasty limit of open files. Links will work badly or won't work
with default settings. Set variable EMXOPT=-h100 before you run links.
libpng-1.2.18 - "Error when loading compiled-in font: png_do_rgb_to_gray found
nongray pixel. libpng error: png_do_rgb_to_gray found nongray
pixel Abort." This is caused by a bug in libpng and
libpng-1.2.18.patch shipped with Links must be used to patch
libpng to fix the bug.
vim: textwidth=80

77
KEYS Normal file
View File

@ -0,0 +1,77 @@
GENERAL
-------
ESC show menu
^C, q, Q quit
ALT-1 ... ALT-9 select virtual screen (framebuffer, svgalib only)
g goto URL
G goto URL based on current URL
^G goto URL based on current link
s bookmark manager
^R reload page
pressed 2x=reload without internal cache
pressed 3x=force reload through all proxy caches
f frame to full screen
i view image
d download link
I download image
* toggle displaying image links
\ toggle document source
= document info
| HTTP header info
BASIC NAVIGATION
----------------
UP/DOWN select link
RIGHT, ENTER follow link
LEFT, z go back
', x go forward
^P, INS scroll up
^N, DEL scroll down
[ scroll left
] scroll right
PAGE_UP, ^B previous page
PAGE_DOWN, ^F next page
HOME, ^A go to start of the document
END, ^E go to end of the document
TAB switch frames
1-9 count to repeat the next move (only text)
(you can press more number keys to repeat more than 9 times)
ALT-1 ... ALT-9 the same as previous --- if you have numbered links
(only text)
SEARCH
------
/ search
? search back
n find next
N find previous
DIALOGS, CLIPBOARD
------------------
^A go to beginning
^E go to end
^W complete string in a dialog (e.g. URL or search dialog)
^B, ^INS copy text to clipboard
^X, SH-DEL cut text to clipboard
^V, SH-INS paste from clipboard
^U delete text from cursor position to start of the line
(or field, textarea)
^K delete line (in textarea) or text to end (in field)
^INS copy current link to clipboard
BRAILLE TERMINAL
----------------
^T, ^TAB previous link
^Y, TAB next link
t previous word
y next word
^O next form field
LEFT, RIGHT, UP, DOWN move cursor around
a move cursor to status bar
w move curosor to title bar
{ move cursor to start of current line
} move cursor to end of current line

BIN
Links_logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 650 B

48
Makefile.am Normal file
View File

@ -0,0 +1,48 @@
# Makefile.am
# (c) 2002 Mikulas Patocka, Karel 'Clock' Kulhavy, Petr 'Brain' Kulhavy,
# Martin 'PerM' Pergel
man_MANS=links.1
EXTRA_DIST=$(man_MANS) atheos.cpp haiku.cpp BRAILLE_HOWTO KEYS SITES descrip.mms *.opt framebuffer-accelerator.patch gpm-1.20.0-smooth-cursor.patch libpng-1.2.18.patch mailcap.pl rebuild Links_logo.png Unicode/*.cp Unicode/[!C]* certs/[!C]* intl/[!C]* suffix/[!C]* graphics/*.c graphics/arrow.png graphics/gen graphics/font/bold/*.png graphics/font/monospaced/*.png graphics/font/normal/*.png graphics/font/system/*.png doc/links_cal/*.png doc/links_cal/*.html graphics/Makefile graphics/Fontmap graphics/clip.c graphics/links.xpm graphics/makefont graphics/pdf2html graphics/spacer.png pkg-config.m4 *.xpm *.ico *.rc links-haiku.rdef mk-release-os2 mk-release-win mk-dos mk-dos83.cmd links.wis *.nsi
# parser/gen parser/javascr.l parser/javascript.y
bin_PROGRAMS=links
if ATHEOS_GR
links_LDADD=atheos.o
endif
if HAIKU_GR
links_LDADD=haiku.o
all-redirect: all-am $(srcdir)/links-haiku.rdef
rc -o links-haiku.rsrc $(srcdir)/links-haiku.rdef
xres -o links$(EXEEXT) links-haiku.rsrc
mimeset links$(EXEEXT)
rm -f links-haiku.rsrc
endif
if JAVASCRIPT
links_LDADD=builtin.o context.o ipret.o javascr.o javascript.o md5.o md5hl.o ns.o pomocny.o regexp.o
endif
links_SOURCES=af_unix.c auth.c beos.c bfu.c block.c bookmark.c cache.c charsets.c compress.c connect.c cookies.c data.c default.c dip.c directfb.c dither.c dns.c dos.c drivers.c error.c file.c finger.c fn_impl.c fontconf.c font_inc.c framebuf.c freetype.c ftp.c gif.c grx.c hpux.c html.c html_gr.c html_r.c html_tbl.c http.c https.c img.c imgcache.c jpeg.c jsint.c kbd.c language.c listedit.c lru.c mailto.c main.c memory.c menu.c objreq.c os_dep.c pmshell.c png.c sched.c select.c session.c smb.c string.c suffix.c svg.c svgalib.c terminal.c tiff.c types.c url.c view.c view_gr.c vms.c x.c xbm.c beos.h bits.h cfg.h codepage.h com-defs.h config-vms.h dfb_cur.h hpux.h language.h links.h os_dep.h os_depx.h setup.h arrow.inc certs.inc codepage.inc entity.inc fbcommon.inc language.inc links_ic.inc locase.inc suffix.inc suffix_x.inc uni_7b.inc upcase.inc vpipe.inc
# builtin.c context.c ipret.c javascr.c javascript.c md5.c md5hl.c ns.c pomocny.c regexp.c md5.h ns.h struct.h tree.h typy.h ipret.h javascript.h builtin.h builtin_keys.h
dist-hook:
#remove the symlinka:
rm $(distdir)/INSTALL
echo Links $(VERSION) -- How To Install > $(distdir)/INSTALL
echo Links $(VERSION) -- How To Install | tr -c '\n' '-' >> $(distdir)/INSTALL
echo >> $(distdir)/INSTALL
cat $(srcdir)/INSTALL >> $(distdir)/INSTALL
CXXFLAGS=@CXXFLAGS@
atheos.o: $(srcdir)/atheos.cpp
$(CXX) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c $(srcdir)/atheos.cpp
haiku.o: $(srcdir)/haiku.cpp
$(CXX) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c $(srcdir)/haiku.cpp
datadir = $(prefix)/@DATADIRNAME@
LIBS = @LIBS@

590
Makefile.in Normal file
View File

@ -0,0 +1,590 @@
# Makefile.in generated automatically by automake 1.4-p6 from Makefile.am
# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
# Makefile.am
# (c) 2002 Mikulas Patocka, Karel 'Clock' Kulhavy, Petr 'Brain' Kulhavy,
# Martin 'PerM' Pergel
SHELL = @SHELL@
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
prefix = @prefix@
exec_prefix = @exec_prefix@
bindir = @bindir@
sbindir = @sbindir@
libexecdir = @libexecdir@
sysconfdir = @sysconfdir@
sharedstatedir = @sharedstatedir@
localstatedir = @localstatedir@
libdir = @libdir@
infodir = @infodir@
mandir = @mandir@
includedir = @includedir@
oldincludedir = /usr/include
DESTDIR =
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = .
ACLOCAL = @ACLOCAL@
AUTOCONF = @AUTOCONF@
AUTOMAKE = @AUTOMAKE@
AUTOHEADER = @AUTOHEADER@
INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
INSTALL_DATA = @INSTALL_DATA@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
transform = @program_transform_name@
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
CC = @CC@
CXX = @CXX@
DIRECTFB_CONFIG = @DIRECTFB_CONFIG@
MAKEINFO = @MAKEINFO@
PACKAGE = @PACKAGE@
PKG_CONFIG = @PKG_CONFIG@
VERSION = @VERSION@
man_MANS = links.1
EXTRA_DIST = $(man_MANS) atheos.cpp haiku.cpp BRAILLE_HOWTO KEYS SITES descrip.mms *.opt framebuffer-accelerator.patch gpm-1.20.0-smooth-cursor.patch libpng-1.2.18.patch mailcap.pl rebuild Links_logo.png Unicode/*.cp Unicode/[!C]* certs/[!C]* intl/[!C]* suffix/[!C]* graphics/*.c graphics/arrow.png graphics/gen graphics/font/bold/*.png graphics/font/monospaced/*.png graphics/font/normal/*.png graphics/font/system/*.png doc/links_cal/*.png doc/links_cal/*.html graphics/Makefile graphics/Fontmap graphics/clip.c graphics/links.xpm graphics/makefont graphics/pdf2html graphics/spacer.png pkg-config.m4 *.xpm *.ico *.rc links-haiku.rdef mk-release-os2 mk-release-win mk-dos mk-dos83.cmd links.wis *.nsi
# parser/gen parser/javascr.l parser/javascript.y
bin_PROGRAMS = links
@ATHEOS_GR_TRUE@links_LDADD = atheos.o
@HAIKU_GR_TRUE@links_LDADD = haiku.o
@JAVASCRIPT_TRUE@links_LDADD = builtin.o context.o ipret.o javascr.o javascript.o md5.o md5hl.o ns.o pomocny.o regexp.o
links_SOURCES = af_unix.c auth.c beos.c bfu.c block.c bookmark.c cache.c charsets.c compress.c connect.c cookies.c data.c default.c dip.c directfb.c dither.c dns.c dos.c drivers.c error.c file.c finger.c fn_impl.c fontconf.c font_inc.c framebuf.c freetype.c ftp.c gif.c grx.c hpux.c html.c html_gr.c html_r.c html_tbl.c http.c https.c img.c imgcache.c jpeg.c jsint.c kbd.c language.c listedit.c lru.c mailto.c main.c memory.c menu.c objreq.c os_dep.c pmshell.c png.c sched.c select.c session.c smb.c string.c suffix.c svg.c svgalib.c terminal.c tiff.c types.c url.c view.c view_gr.c vms.c x.c xbm.c beos.h bits.h cfg.h codepage.h com-defs.h config-vms.h dfb_cur.h hpux.h language.h links.h os_dep.h os_depx.h setup.h arrow.inc certs.inc codepage.inc entity.inc fbcommon.inc language.inc links_ic.inc locase.inc suffix.inc suffix_x.inc uni_7b.inc upcase.inc vpipe.inc
CXXFLAGS = @CXXFLAGS@
datadir = $(prefix)/@DATADIRNAME@
LIBS = @LIBS@
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = config.h
CONFIG_CLEAN_FILES =
PROGRAMS = $(bin_PROGRAMS)
DEFS = @DEFS@ -I. -I$(srcdir) -I.
CPPFLAGS = @CPPFLAGS@
LDFLAGS = @LDFLAGS@
links_OBJECTS = af_unix.o auth.o beos.o bfu.o block.o bookmark.o \
cache.o charsets.o compress.o connect.o cookies.o data.o default.o \
dip.o directfb.o dither.o dns.o dos.o drivers.o error.o file.o finger.o \
fn_impl.o fontconf.o font_inc.o framebuf.o freetype.o ftp.o gif.o grx.o \
hpux.o html.o html_gr.o html_r.o html_tbl.o http.o https.o img.o \
imgcache.o jpeg.o jsint.o kbd.o language.o listedit.o lru.o mailto.o \
main.o memory.o menu.o objreq.o os_dep.o pmshell.o png.o sched.o \
select.o session.o smb.o string.o suffix.o svg.o svgalib.o terminal.o \
tiff.o types.o url.o view.o view_gr.o vms.o x.o xbm.o
@ATHEOS_GR_TRUE@links_DEPENDENCIES = atheos.o
@JAVASCRIPT_TRUE@links_DEPENDENCIES = builtin.o context.o ipret.o \
@JAVASCRIPT_TRUE@javascr.o javascript.o md5.o md5hl.o ns.o pomocny.o \
@JAVASCRIPT_TRUE@regexp.o
@HAIKU_GR_TRUE@links_DEPENDENCIES = haiku.o
links_LDFLAGS =
CFLAGS = @CFLAGS@
COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@
man1dir = $(mandir)/man1
MANS = $(man_MANS)
NROFF = nroff
DIST_COMMON = README ./stamp-h.in AUTHORS COPYING ChangeLog INSTALL \
Makefile.am Makefile.in NEWS acconfig.h aclocal.m4 config.guess \
config.h.in config.sub configure configure.in install-sh missing \
mkinstalldirs
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
TAR = tar
GZIP_ENV = --best
SOURCES = $(links_SOURCES)
OBJECTS = $(links_OBJECTS)
all: all-redirect
.SUFFIXES:
.SUFFIXES: .S .c .o .s
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) \
&& CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status
$(ACLOCAL_M4): configure.in
cd $(srcdir) && $(ACLOCAL)
config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
$(SHELL) ./config.status --recheck
$(srcdir)/configure: $(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES)
cd $(srcdir) && $(AUTOCONF)
config.h: stamp-h
@if test ! -f $@; then \
rm -f stamp-h; \
$(MAKE) stamp-h; \
else :; fi
stamp-h: $(srcdir)/config.h.in $(top_builddir)/config.status
cd $(top_builddir) \
&& CONFIG_FILES= CONFIG_HEADERS=config.h \
$(SHELL) ./config.status
@echo timestamp > stamp-h 2> /dev/null
$(srcdir)/config.h.in: $(srcdir)/stamp-h.in
@if test ! -f $@; then \
rm -f $(srcdir)/stamp-h.in; \
$(MAKE) $(srcdir)/stamp-h.in; \
else :; fi
$(srcdir)/stamp-h.in: $(top_srcdir)/configure.in $(ACLOCAL_M4) acconfig.h
cd $(top_srcdir) && $(AUTOHEADER)
@echo timestamp > $(srcdir)/stamp-h.in 2> /dev/null
mostlyclean-hdr:
clean-hdr:
distclean-hdr:
-rm -f config.h
maintainer-clean-hdr:
mostlyclean-binPROGRAMS:
clean-binPROGRAMS:
-test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
distclean-binPROGRAMS:
maintainer-clean-binPROGRAMS:
install-binPROGRAMS: $(bin_PROGRAMS)
@$(NORMAL_INSTALL)
$(mkinstalldirs) $(DESTDIR)$(bindir)
@list='$(bin_PROGRAMS)'; for p in $$list; do \
if test -f $$p; then \
echo " $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`"; \
$(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \
else :; fi; \
done
uninstall-binPROGRAMS:
@$(NORMAL_UNINSTALL)
list='$(bin_PROGRAMS)'; for p in $$list; do \
rm -f $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \
done
.c.o:
$(COMPILE) -c $<
.s.o:
$(COMPILE) -c $<
.S.o:
$(COMPILE) -c $<
mostlyclean-compile:
-rm -f *.o core *.core
clean-compile:
distclean-compile:
-rm -f *.tab.c
maintainer-clean-compile:
links: $(links_OBJECTS) $(links_DEPENDENCIES)
@rm -f links
$(LINK) $(links_LDFLAGS) $(links_OBJECTS) $(links_LDADD) $(LIBS)
install-man1:
$(mkinstalldirs) $(DESTDIR)$(man1dir)
@list='$(man1_MANS)'; \
l2='$(man_MANS)'; for i in $$l2; do \
case "$$i" in \
*.1*) list="$$list $$i" ;; \
esac; \
done; \
for i in $$list; do \
if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \
else file=$$i; fi; \
ext=`echo $$i | sed -e 's/^.*\\.//'`; \
inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
inst=`echo $$inst | sed '$(transform)'`.$$ext; \
echo " $(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst"; \
$(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst; \
done
uninstall-man1:
@list='$(man1_MANS)'; \
l2='$(man_MANS)'; for i in $$l2; do \
case "$$i" in \
*.1*) list="$$list $$i" ;; \
esac; \
done; \
for i in $$list; do \
ext=`echo $$i | sed -e 's/^.*\\.//'`; \
inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
inst=`echo $$inst | sed '$(transform)'`.$$ext; \
echo " rm -f $(DESTDIR)$(man1dir)/$$inst"; \
rm -f $(DESTDIR)$(man1dir)/$$inst; \
done
install-man: $(MANS)
@$(NORMAL_INSTALL)
$(MAKE) $(AM_MAKEFLAGS) install-man1
uninstall-man:
@$(NORMAL_UNINSTALL)
$(MAKE) $(AM_MAKEFLAGS) uninstall-man1
tags: TAGS
ID: $(HEADERS) $(SOURCES) $(LISP)
list='$(SOURCES) $(HEADERS)'; \
unique=`for i in $$list; do echo $$i; done | \
awk ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
here=`pwd` && cd $(srcdir) \
&& mkid -f$$here/ID $$unique $(LISP)
TAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) $(LISP)
tags=; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS)'; \
unique=`for i in $$list; do echo $$i; done | \
awk ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
test -z "$(ETAGS_ARGS)config.h.in$$unique$(LISP)$$tags" \
|| (cd $(srcdir) && etags -o $$here/TAGS $(ETAGS_ARGS) $$tags config.h.in $$unique $(LISP))
mostlyclean-tags:
clean-tags:
distclean-tags:
-rm -f TAGS ID
maintainer-clean-tags:
distdir = $(PACKAGE)-$(VERSION)
top_distdir = $(distdir)
# This target untars the dist file and tries a VPATH configuration. Then
# it guarantees that the distribution is self-contained by making another
# tarfile.
distcheck: dist
-rm -rf $(distdir)
GZIP=$(GZIP_ENV) $(TAR) zxf $(distdir).tar.gz
mkdir $(distdir)/=build
mkdir $(distdir)/=inst
dc_install_base=`cd $(distdir)/=inst && pwd`; \
cd $(distdir)/=build \
&& ../configure --srcdir=.. --prefix=$$dc_install_base \
&& $(MAKE) $(AM_MAKEFLAGS) \
&& $(MAKE) $(AM_MAKEFLAGS) dvi \
&& $(MAKE) $(AM_MAKEFLAGS) check \
&& $(MAKE) $(AM_MAKEFLAGS) install \
&& $(MAKE) $(AM_MAKEFLAGS) installcheck \
&& $(MAKE) $(AM_MAKEFLAGS) dist
-rm -rf $(distdir)
@banner="$(distdir).tar.gz is ready for distribution"; \
dashes=`echo "$$banner" | sed s/./=/g`; \
echo "$$dashes"; \
echo "$$banner"; \
echo "$$dashes"
dist: distdir
-chmod -R a+r $(distdir)
GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir)
-rm -rf $(distdir)
dist-all: distdir
-chmod -R a+r $(distdir)
GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir)
-rm -rf $(distdir)
distdir: $(DISTFILES)
-rm -rf $(distdir)
mkdir $(distdir)
-chmod 755 $(distdir)
$(mkinstalldirs) $(distdir)/Unicode $(distdir)/certs \
$(distdir)/doc/links_cal $(distdir)/graphics \
$(distdir)/graphics/font/bold \
$(distdir)/graphics/font/monospaced \
$(distdir)/graphics/font/normal \
$(distdir)/graphics/font/system $(distdir)/intl \
$(distdir)/suffix
@for file in $(DISTFILES); do \
d=$(srcdir); \
if test -d $$d/$$file; then \
cp -pr $$d/$$file $(distdir)/$$file; \
else \
test -f $(distdir)/$$file \
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \
|| cp -p $$d/$$file $(distdir)/$$file || :; \
fi; \
done
$(MAKE) $(AM_MAKEFLAGS) top_distdir="$(top_distdir)" distdir="$(distdir)" dist-hook
af_unix.o: af_unix.c links.h cfg.h config.h com-defs.h os_dep.h \
os_depx.h setup.h language.h codepage.h
auth.o: auth.c links.h cfg.h config.h com-defs.h os_dep.h os_depx.h \
setup.h language.h codepage.h
beos.o: beos.c
bfu.o: bfu.c links.h cfg.h config.h com-defs.h os_dep.h os_depx.h \
setup.h language.h codepage.h
block.o: block.c links.h cfg.h config.h com-defs.h os_dep.h os_depx.h \
setup.h language.h codepage.h
bookmark.o: bookmark.c links.h cfg.h config.h com-defs.h os_dep.h \
os_depx.h setup.h language.h codepage.h
cache.o: cache.c links.h cfg.h config.h com-defs.h os_dep.h os_depx.h \
setup.h language.h codepage.h
charsets.o: charsets.c links.h cfg.h config.h com-defs.h os_dep.h \
os_depx.h setup.h language.h codepage.h codepage.inc uni_7b.inc \
entity.inc upcase.inc locase.inc
compress.o: compress.c links.h cfg.h config.h com-defs.h os_dep.h \
os_depx.h setup.h language.h codepage.h
connect.o: connect.c links.h cfg.h config.h com-defs.h os_dep.h \
os_depx.h setup.h language.h codepage.h
cookies.o: cookies.c links.h cfg.h config.h com-defs.h os_dep.h \
os_depx.h setup.h language.h codepage.h
data.o: data.c links.h cfg.h config.h com-defs.h os_dep.h os_depx.h \
setup.h language.h codepage.h
default.o: default.c links.h cfg.h config.h com-defs.h os_dep.h \
os_depx.h setup.h language.h codepage.h
dip.o: dip.c cfg.h config.h links.h com-defs.h os_dep.h os_depx.h \
setup.h language.h codepage.h links_ic.inc
directfb.o: directfb.c cfg.h config.h links.h com-defs.h os_dep.h \
os_depx.h setup.h language.h codepage.h dfb_cur.h
dither.o: dither.c cfg.h config.h links.h com-defs.h os_dep.h os_depx.h \
setup.h language.h codepage.h bits.h
dns.o: dns.c links.h cfg.h config.h com-defs.h os_dep.h os_depx.h \
setup.h language.h codepage.h
dos.o: dos.c
drivers.o: drivers.c cfg.h config.h links.h com-defs.h os_dep.h \
os_depx.h setup.h language.h codepage.h
error.o: error.c links.h cfg.h config.h com-defs.h os_dep.h os_depx.h \
setup.h language.h codepage.h
file.o: file.c links.h cfg.h config.h com-defs.h os_dep.h os_depx.h \
setup.h language.h codepage.h
finger.o: finger.c links.h cfg.h config.h com-defs.h os_dep.h os_depx.h \
setup.h language.h codepage.h
fn_impl.o: fn_impl.c links.h cfg.h config.h com-defs.h os_dep.h \
os_depx.h setup.h language.h codepage.h
font_inc.o: font_inc.c cfg.h config.h links.h com-defs.h os_dep.h \
os_depx.h setup.h language.h codepage.h
fontconf.o: fontconf.c cfg.h config.h links.h com-defs.h os_dep.h \
os_depx.h setup.h language.h codepage.h
framebuf.o: framebuf.c cfg.h config.h links.h com-defs.h os_dep.h \
os_depx.h setup.h language.h codepage.h bits.h arrow.inc \
fbcommon.inc
freetype.o: freetype.c cfg.h config.h links.h com-defs.h os_dep.h \
os_depx.h setup.h language.h codepage.h
ftp.o: ftp.c links.h cfg.h config.h com-defs.h os_dep.h os_depx.h \
setup.h language.h codepage.h
gif.o: gif.c cfg.h config.h links.h com-defs.h os_dep.h os_depx.h \
setup.h language.h codepage.h
grx.o: grx.c cfg.h config.h
hpux.o: hpux.c
html.o: html.c links.h cfg.h config.h com-defs.h os_dep.h os_depx.h \
setup.h language.h codepage.h
html_gr.o: html_gr.c cfg.h config.h links.h com-defs.h os_dep.h \
os_depx.h setup.h language.h codepage.h
html_r.o: html_r.c links.h cfg.h config.h com-defs.h os_dep.h os_depx.h \
setup.h language.h codepage.h
html_tbl.o: html_tbl.c links.h cfg.h config.h com-defs.h os_dep.h \
os_depx.h setup.h language.h codepage.h
http.o: http.c links.h cfg.h config.h com-defs.h os_dep.h os_depx.h \
setup.h language.h codepage.h
https.o: https.c links.h cfg.h config.h com-defs.h os_dep.h os_depx.h \
setup.h language.h codepage.h certs.inc
img.o: img.c links.h cfg.h config.h com-defs.h os_dep.h os_depx.h \
setup.h language.h codepage.h
imgcache.o: imgcache.c cfg.h config.h links.h com-defs.h os_dep.h \
os_depx.h setup.h language.h codepage.h
jpeg.o: jpeg.c cfg.h config.h links.h com-defs.h os_dep.h os_depx.h \
setup.h language.h codepage.h
jsint.o: jsint.c links.h cfg.h config.h com-defs.h os_dep.h os_depx.h \
setup.h language.h codepage.h
kbd.o: kbd.c links.h cfg.h config.h com-defs.h os_dep.h os_depx.h \
setup.h language.h codepage.h
language.o: language.c links.h cfg.h config.h com-defs.h os_dep.h \
os_depx.h setup.h language.h codepage.h language.inc
listedit.o: listedit.c links.h cfg.h config.h com-defs.h os_dep.h \
os_depx.h setup.h language.h codepage.h
lru.o: lru.c cfg.h config.h links.h com-defs.h os_dep.h os_depx.h \
setup.h language.h codepage.h
mailto.o: mailto.c links.h cfg.h config.h com-defs.h os_dep.h os_depx.h \
setup.h language.h codepage.h
main.o: main.c links.h cfg.h config.h com-defs.h os_dep.h os_depx.h \
setup.h language.h codepage.h
memory.o: memory.c links.h cfg.h config.h com-defs.h os_dep.h os_depx.h \
setup.h language.h codepage.h
menu.o: menu.c links.h cfg.h config.h com-defs.h os_dep.h os_depx.h \
setup.h language.h codepage.h
objreq.o: objreq.c links.h cfg.h config.h com-defs.h os_dep.h os_depx.h \
setup.h language.h codepage.h
os_dep.o: os_dep.c links.h cfg.h config.h com-defs.h os_dep.h os_depx.h \
setup.h language.h codepage.h
pmshell.o: pmshell.c cfg.h config.h
png.o: png.c cfg.h config.h links.h com-defs.h os_dep.h os_depx.h \
setup.h language.h codepage.h
sched.o: sched.c links.h cfg.h config.h com-defs.h os_dep.h os_depx.h \
setup.h language.h codepage.h
select.o: select.c links.h cfg.h config.h com-defs.h os_dep.h os_depx.h \
setup.h language.h codepage.h
session.o: session.c links.h cfg.h config.h com-defs.h os_dep.h \
os_depx.h setup.h language.h codepage.h
smb.o: smb.c links.h cfg.h config.h com-defs.h os_dep.h os_depx.h \
setup.h language.h codepage.h
string.o: string.c links.h cfg.h config.h com-defs.h os_dep.h os_depx.h \
setup.h language.h codepage.h
suffix.o: suffix.c links.h cfg.h config.h com-defs.h os_dep.h os_depx.h \
setup.h language.h codepage.h suffix.inc suffix_x.inc
svg.o: svg.c cfg.h config.h links.h com-defs.h os_dep.h os_depx.h \
setup.h language.h codepage.h bits.h
svgalib.o: svgalib.c cfg.h config.h links.h com-defs.h os_dep.h \
os_depx.h setup.h language.h codepage.h bits.h arrow.inc \
fbcommon.inc
terminal.o: terminal.c links.h cfg.h config.h com-defs.h os_dep.h \
os_depx.h setup.h language.h codepage.h
tiff.o: tiff.c cfg.h config.h links.h com-defs.h os_dep.h os_depx.h \
setup.h language.h codepage.h
types.o: types.c links.h cfg.h config.h com-defs.h os_dep.h os_depx.h \
setup.h language.h codepage.h
url.o: url.c links.h cfg.h config.h com-defs.h os_dep.h os_depx.h \
setup.h language.h codepage.h
view.o: view.c links.h cfg.h config.h com-defs.h os_dep.h os_depx.h \
setup.h language.h codepage.h
view_gr.o: view_gr.c cfg.h config.h links.h com-defs.h os_dep.h \
os_depx.h setup.h language.h codepage.h
vms.o: vms.c
x.o: x.c cfg.h config.h links.h com-defs.h os_dep.h os_depx.h setup.h \
language.h codepage.h
xbm.o: xbm.c cfg.h config.h links.h com-defs.h os_dep.h os_depx.h \
setup.h language.h codepage.h
info-am:
info: info-am
dvi-am:
dvi: dvi-am
check-am: all-am
check: check-am
installcheck-am:
installcheck: installcheck-am
all-recursive-am: config.h
$(MAKE) $(AM_MAKEFLAGS) all-recursive
install-exec-am: install-binPROGRAMS
install-exec: install-exec-am
install-data-am: install-man
install-data: install-data-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
install: install-am
uninstall-am: uninstall-binPROGRAMS uninstall-man
uninstall: uninstall-am
all-am: Makefile $(PROGRAMS) $(MANS) config.h
all-redirect: all-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
installdirs:
$(mkinstalldirs) $(DESTDIR)$(bindir) $(DESTDIR)$(mandir)/man1
mostlyclean-generic:
clean-generic:
distclean-generic:
-rm -f Makefile $(CONFIG_CLEAN_FILES)
-rm -f config.cache config.log stamp-h stamp-h[0-9]*
maintainer-clean-generic:
mostlyclean-am: mostlyclean-hdr mostlyclean-binPROGRAMS \
mostlyclean-compile mostlyclean-tags \
mostlyclean-generic
mostlyclean: mostlyclean-am
clean-am: clean-hdr clean-binPROGRAMS clean-compile clean-tags \
clean-generic mostlyclean-am
clean: clean-am
distclean-am: distclean-hdr distclean-binPROGRAMS distclean-compile \
distclean-tags distclean-generic clean-am
distclean: distclean-am
-rm -f config.status
maintainer-clean-am: maintainer-clean-hdr maintainer-clean-binPROGRAMS \
maintainer-clean-compile maintainer-clean-tags \
maintainer-clean-generic distclean-am
@echo "This command is intended for maintainers to use;"
@echo "it deletes files that may require special tools to rebuild."
maintainer-clean: maintainer-clean-am
-rm -f config.status
.PHONY: mostlyclean-hdr distclean-hdr clean-hdr maintainer-clean-hdr \
mostlyclean-binPROGRAMS distclean-binPROGRAMS clean-binPROGRAMS \
maintainer-clean-binPROGRAMS uninstall-binPROGRAMS install-binPROGRAMS \
mostlyclean-compile distclean-compile clean-compile \
maintainer-clean-compile install-man1 uninstall-man1 install-man \
uninstall-man tags mostlyclean-tags distclean-tags clean-tags \
maintainer-clean-tags distdir info-am info dvi-am dvi check check-am \
installcheck-am installcheck all-recursive-am install-exec-am \
install-exec install-data-am install-data install-am install \
uninstall-am uninstall all-redirect all-am all installdirs \
mostlyclean-generic distclean-generic clean-generic \
maintainer-clean-generic clean mostlyclean distclean maintainer-clean
@HAIKU_GR_TRUE@all-redirect: all-am $(srcdir)/links-haiku.rdef
@HAIKU_GR_TRUE@ rc -o links-haiku.rsrc $(srcdir)/links-haiku.rdef
@HAIKU_GR_TRUE@ xres -o links$(EXEEXT) links-haiku.rsrc
@HAIKU_GR_TRUE@ mimeset links$(EXEEXT)
@HAIKU_GR_TRUE@ rm -f links-haiku.rsrc
# builtin.c context.c ipret.c javascr.c javascript.c md5.c md5hl.c ns.c pomocny.c regexp.c md5.h ns.h struct.h tree.h typy.h ipret.h javascript.h builtin.h builtin_keys.h
dist-hook:
#remove the symlinka:
rm $(distdir)/INSTALL
echo Links $(VERSION) -- How To Install > $(distdir)/INSTALL
echo Links $(VERSION) -- How To Install | tr -c '\n' '-' >> $(distdir)/INSTALL
echo >> $(distdir)/INSTALL
cat $(srcdir)/INSTALL >> $(distdir)/INSTALL
atheos.o: $(srcdir)/atheos.cpp
$(CXX) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c $(srcdir)/atheos.cpp
haiku.o: $(srcdir)/haiku.cpp
$(CXX) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c $(srcdir)/haiku.cpp
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

16
NEWS Normal file
View File

@ -0,0 +1,16 @@
Version 0.80
- First public release
Version 0.90
- Frames
Bookmarks
Support for more languages
Mailto:
-dump, -source
-anonymous
A lot of small improvements, see ChangeLog
Version 2
- Graphics mode

45
README Normal file
View File

@ -0,0 +1,45 @@
Links
=====
Contents
--------
1. About
2. Installation
3. Usage
4. Braille terminal support
5. More features
1. About
--------
Links is a Lynx-like text and graphics WWW browser.
2. Installation
---------------
See INSTALL
3. Usage
--------
Commandline: links [options] <url>
See end of file default.c for list of options. Most options can be set in luser
interface or config file, so you do not need to care about them.
Keys: see KEYS
4. Braille terminal support
---------------------------
See BRAILLE_HOWTO
5. More features
----------------
Links is a free software. If you would like to have more features, see
this URL for details:
http://links.twibright.com/development.php

14
SITES Normal file
View File

@ -0,0 +1,14 @@
Primary site:
http://links.twibright.com/download/
Mirrors:
http://piotrkosoft.net/pub/mirrors/links2
ftp://ftp.piotrkosoft.net/pub/mirrors/links2
rsync://piotrkosoft.net/mirrors/links2
http://atrey.karlin.mff.cuni.cz/~clock/twibright/links
ftp://atrey.karlin.mff.cuni.cz/pub/local/clock/links
Mailing list:
links-list@linuxfromscratch.org
http://links.sf.net/mailing.html
http://www.egroups.com/group/links-browser

3
Unicode/7bit.cp Normal file
View File

@ -0,0 +1,3 @@
7-bit ASCII
"us-ascii", "ascii", "7bit", "7-bit", "iso-ir-6", "ANSI_X3.4", "646", "it-ascii"
# Dummy table for 7-bit terminals

2254
Unicode/7bitrepl.lnx Normal file

File diff suppressed because it is too large Load Diff

193
Unicode/8859_1.cp Normal file
View File

@ -0,0 +1,193 @@
ISO 8859-1 (Western European)
"ISO-8859-1", "8859-1", "iso-ir-100", "latin1", "l1", "819", "iso-latin1"
0x20 0x0020 #SPACE
0x21 0x0021 #EXCLAMATION MARK
0x22 0x0022 #QUOTATION MARK
0x23 0x0023 #NUMBER SIGN
0x24 0x0024 #DOLLAR SIGN
0x25 0x0025 #PERCENT SIGN
0x26 0x0026 #AMPERSAND
0x27 0x0027 #APOSTROPHE
0x28 0x0028 #LEFT PARENTHESIS
0x29 0x0029 #RIGHT PARENTHESIS
0x2A 0x002A #ASTERISK
0x2B 0x002B #PLUS SIGN
0x2C 0x002C #COMMA
0x2D 0x002D #HYPHEN-MINUS
0x2E 0x002E #FULL STOP
0x2F 0x002F #SOLIDUS
0x30 0x0030 #DIGIT ZERO
0x31 0x0031 #DIGIT ONE
0x32 0x0032 #DIGIT TWO
0x33 0x0033 #DIGIT THREE
0x34 0x0034 #DIGIT FOUR
0x35 0x0035 #DIGIT FIVE
0x36 0x0036 #DIGIT SIX
0x37 0x0037 #DIGIT SEVEN
0x38 0x0038 #DIGIT EIGHT
0x39 0x0039 #DIGIT NINE
0x3A 0x003A #COLON
0x3B 0x003B #SEMICOLON
0x3C 0x003C #LESS-THAN SIGN
0x3D 0x003D #EQUALS SIGN
0x3E 0x003E #GREATER-THAN SIGN
0x3F 0x003F #QUESTION MARK
0x40 0x0040 #COMMERCIAL AT
0x41 0x0041 #LATIN CAPITAL LETTER A
0x42 0x0042 #LATIN CAPITAL LETTER B
0x43 0x0043 #LATIN CAPITAL LETTER C
0x44 0x0044 #LATIN CAPITAL LETTER D
0x45 0x0045 #LATIN CAPITAL LETTER E
0x46 0x0046 #LATIN CAPITAL LETTER F
0x47 0x0047 #LATIN CAPITAL LETTER G
0x48 0x0048 #LATIN CAPITAL LETTER H
0x49 0x0049 #LATIN CAPITAL LETTER I
0x4A 0x004A #LATIN CAPITAL LETTER J
0x4B 0x004B #LATIN CAPITAL LETTER K
0x4C 0x004C #LATIN CAPITAL LETTER L
0x4D 0x004D #LATIN CAPITAL LETTER M
0x4E 0x004E #LATIN CAPITAL LETTER N
0x4F 0x004F #LATIN CAPITAL LETTER O
0x50 0x0050 #LATIN CAPITAL LETTER P
0x51 0x0051 #LATIN CAPITAL LETTER Q
0x52 0x0052 #LATIN CAPITAL LETTER R
0x53 0x0053 #LATIN CAPITAL LETTER S
0x54 0x0054 #LATIN CAPITAL LETTER T
0x55 0x0055 #LATIN CAPITAL LETTER U
0x56 0x0056 #LATIN CAPITAL LETTER V
0x57 0x0057 #LATIN CAPITAL LETTER W
0x58 0x0058 #LATIN CAPITAL LETTER X
0x59 0x0059 #LATIN CAPITAL LETTER Y
0x5A 0x005A #LATIN CAPITAL LETTER Z
0x5B 0x005B #LEFT SQUARE BRACKET
0x5C 0x005C #REVERSE SOLIDUS
0x5D 0x005D #RIGHT SQUARE BRACKET
0x5E 0x005E #CIRCUMFLEX ACCENT
0x5F 0x005F #LOW LINE
0x60 0x0060 #GRAVE ACCENT
0x61 0x0061 #LATIN SMALL LETTER A
0x62 0x0062 #LATIN SMALL LETTER B
0x63 0x0063 #LATIN SMALL LETTER C
0x64 0x0064 #LATIN SMALL LETTER D
0x65 0x0065 #LATIN SMALL LETTER E
0x66 0x0066 #LATIN SMALL LETTER F
0x67 0x0067 #LATIN SMALL LETTER G
0x68 0x0068 #LATIN SMALL LETTER H
0x69 0x0069 #LATIN SMALL LETTER I
0x6A 0x006A #LATIN SMALL LETTER J
0x6B 0x006B #LATIN SMALL LETTER K
0x6C 0x006C #LATIN SMALL LETTER L
0x6D 0x006D #LATIN SMALL LETTER M
0x6E 0x006E #LATIN SMALL LETTER N
0x6F 0x006F #LATIN SMALL LETTER O
0x70 0x0070 #LATIN SMALL LETTER P
0x71 0x0071 #LATIN SMALL LETTER Q
0x72 0x0072 #LATIN SMALL LETTER R
0x73 0x0073 #LATIN SMALL LETTER S
0x74 0x0074 #LATIN SMALL LETTER T
0x75 0x0075 #LATIN SMALL LETTER U
0x76 0x0076 #LATIN SMALL LETTER V
0x77 0x0077 #LATIN SMALL LETTER W
0x78 0x0078 #LATIN SMALL LETTER X
0x79 0x0079 #LATIN SMALL LETTER Y
0x7A 0x007A #LATIN SMALL LETTER Z
0x7B 0x007B #LEFT CURLY BRACKET
0x7C 0x007C #VERTICAL LINE
0x7D 0x007D #RIGHT CURLY BRACKET
0x7E 0x007E #TILDE
0xA0 0x00A0 #NO-BREAK SPACE
0xA1 0x00A1 #INVERTED EXCLAMATION MARK
0xA2 0x00A2 #CENT SIGN
0xA3 0x00A3 #POUND SIGN
0xA4 0x00A4 #CURRENCY SIGN
0xA5 0x00A5 #YEN SIGN
0xA6 0x00A6 #BROKEN BAR
0xA7 0x00A7 #SECTION SIGN
0xA8 0x00A8 #DIAERESIS
0xA9 0x00A9 #COPYRIGHT SIGN
0xAA 0x00AA #FEMININE ORDINAL INDICATOR
0xAB 0x00AB #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
0xAC 0x00AC #NOT SIGN
0xAD 0x00AD #SOFT HYPHEN
0xAE 0x00AE #REGISTERED SIGN
0xAF 0x00AF #MACRON
0xB0 0x00B0 #DEGREE SIGN
0xB1 0x00B1 #PLUS-MINUS SIGN
0xB2 0x00B2 #SUPERSCRIPT TWO
0xB3 0x00B3 #SUPERSCRIPT THREE
0xB4 0x00B4 #ACUTE ACCENT
0xB5 0x00B5 #MICRO SIGN
0xB6 0x00B6 #PILCROW SIGN
0xB7 0x00B7 #MIDDLE DOT
0xB8 0x00B8 #CEDILLA
0xB9 0x00B9 #SUPERSCRIPT ONE
0xBA 0x00BA #MASCULINE ORDINAL INDICATOR
0xBB 0x00BB #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
0xBC 0x00BC #VULGAR FRACTION ONE QUARTER
0xBD 0x00BD #VULGAR FRACTION ONE HALF
0xBE 0x00BE #VULGAR FRACTION THREE QUARTERS
0xBF 0x00BF #INVERTED QUESTION MARK
0xC0 0x00C0 #LATIN CAPITAL LETTER A WITH GRAVE
0xC1 0x00C1 #LATIN CAPITAL LETTER A WITH ACUTE
0xC2 0x00C2 #LATIN CAPITAL LETTER A WITH CIRCUMFLEX
0xC3 0x00C3 #LATIN CAPITAL LETTER A WITH TILDE
0xC4 0x00C4 #LATIN CAPITAL LETTER A WITH DIAERESIS
0xC5 0x00C5 #LATIN CAPITAL LETTER A WITH RING ABOVE
0xC6 0x00C6 #LATIN CAPITAL LETTER AE
0xC7 0x00C7 #LATIN CAPITAL LETTER C WITH CEDILLA
0xC8 0x00C8 #LATIN CAPITAL LETTER E WITH GRAVE
0xC9 0x00C9 #LATIN CAPITAL LETTER E WITH ACUTE
0xCA 0x00CA #LATIN CAPITAL LETTER E WITH CIRCUMFLEX
0xCB 0x00CB #LATIN CAPITAL LETTER E WITH DIAERESIS
0xCC 0x00CC #LATIN CAPITAL LETTER I WITH GRAVE
0xCD 0x00CD #LATIN CAPITAL LETTER I WITH ACUTE
0xCE 0x00CE #LATIN CAPITAL LETTER I WITH CIRCUMFLEX
0xCF 0x00CF #LATIN CAPITAL LETTER I WITH DIAERESIS
0xD0 0x00D0 #LATIN CAPITAL LETTER ETH
0xD1 0x00D1 #LATIN CAPITAL LETTER N WITH TILDE
0xD2 0x00D2 #LATIN CAPITAL LETTER O WITH GRAVE
0xD3 0x00D3 #LATIN CAPITAL LETTER O WITH ACUTE
0xD4 0x00D4 #LATIN CAPITAL LETTER O WITH CIRCUMFLEX
0xD5 0x00D5 #LATIN CAPITAL LETTER O WITH TILDE
0xD6 0x00D6 #LATIN CAPITAL LETTER O WITH DIAERESIS
0xD7 0x00D7 #MULTIPLICATION SIGN
0xD8 0x00D8 #LATIN CAPITAL LETTER O WITH STROKE
0xD9 0x00D9 #LATIN CAPITAL LETTER U WITH GRAVE
0xDA 0x00DA #LATIN CAPITAL LETTER U WITH ACUTE
0xDB 0x00DB #LATIN CAPITAL LETTER U WITH CIRCUMFLEX
0xDC 0x00DC #LATIN CAPITAL LETTER U WITH DIAERESIS
0xDD 0x00DD #LATIN CAPITAL LETTER Y WITH ACUTE
0xDE 0x00DE #LATIN CAPITAL LETTER THORN
0xDF 0x00DF #LATIN SMALL LETTER SHARP S
0xE0 0x00E0 #LATIN SMALL LETTER A WITH GRAVE
0xE1 0x00E1 #LATIN SMALL LETTER A WITH ACUTE
0xE2 0x00E2 #LATIN SMALL LETTER A WITH CIRCUMFLEX
0xE3 0x00E3 #LATIN SMALL LETTER A WITH TILDE
0xE4 0x00E4 #LATIN SMALL LETTER A WITH DIAERESIS
0xE5 0x00E5 #LATIN SMALL LETTER A WITH RING ABOVE
0xE6 0x00E6 #LATIN SMALL LETTER AE
0xE7 0x00E7 #LATIN SMALL LETTER C WITH CEDILLA
0xE8 0x00E8 #LATIN SMALL LETTER E WITH GRAVE
0xE9 0x00E9 #LATIN SMALL LETTER E WITH ACUTE
0xEA 0x00EA #LATIN SMALL LETTER E WITH CIRCUMFLEX
0xEB 0x00EB #LATIN SMALL LETTER E WITH DIAERESIS
0xEC 0x00EC #LATIN SMALL LETTER I WITH GRAVE
0xED 0x00ED #LATIN SMALL LETTER I WITH ACUTE
0xEE 0x00EE #LATIN SMALL LETTER I WITH CIRCUMFLEX
0xEF 0x00EF #LATIN SMALL LETTER I WITH DIAERESIS
0xF0 0x00F0 #LATIN SMALL LETTER ETH
0xF1 0x00F1 #LATIN SMALL LETTER N WITH TILDE
0xF2 0x00F2 #LATIN SMALL LETTER O WITH GRAVE
0xF3 0x00F3 #LATIN SMALL LETTER O WITH ACUTE
0xF4 0x00F4 #LATIN SMALL LETTER O WITH CIRCUMFLEX
0xF5 0x00F5 #LATIN SMALL LETTER O WITH TILDE
0xF6 0x00F6 #LATIN SMALL LETTER O WITH DIAERESIS
0xF7 0x00F7 #DIVISION SIGN
0xF8 0x00F8 #LATIN SMALL LETTER O WITH STROKE
0xF9 0x00F9 #LATIN SMALL LETTER U WITH GRAVE
0xFA 0x00FA #LATIN SMALL LETTER U WITH ACUTE
0xFB 0x00FB #LATIN SMALL LETTER U WITH CIRCUMFLEX
0xFC 0x00FC #LATIN SMALL LETTER U WITH DIAERESIS
0xFD 0x00FD #LATIN SMALL LETTER Y WITH ACUTE
0xFE 0x00FE #LATIN SMALL LETTER THORN
0xFF 0x00FF #LATIN SMALL LETTER Y WITH DIAERESIS

305
Unicode/8859_10.cp Normal file
View File

@ -0,0 +1,305 @@
ISO 8859-10 (Lappish, Nordic, Eskimo)
"ISO-8859-10", "8859-10"
#
# Name: ISO/IEC 8859-10:1998 to Unicode
# Unicode version: 3.0
# Table version: 1.1
# Table format: Format A
# Date: 1999 October 11
# Authors: Ken Whistler <kenw@sybase.com>
#
# Copyright (c) 1999 Unicode, Inc. All Rights reserved.
#
# This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
# No claims are made as to fitness for any particular purpose. No
# warranties of any kind are expressed or implied. The recipient
# agrees to determine applicability of information provided. If this
# file has been provided on optical media by Unicode, Inc., the sole
# remedy for any claim will be exchange of defective media within 90
# days of receipt.
#
# Unicode, Inc. hereby grants the right to freely use the information
# supplied in this file in the creation of products supporting the
# Unicode Standard, and to make copies of this file in any form for
# internal or external distribution as long as this notice remains
# attached.
#
# General notes:
#
# This table contains the data the Unicode Consortium has on how
# ISO/IEC 8859-10:1998 characters map into Unicode.
#
# Format: Three tab-separated columns
# Column #1 is the ISO/IEC 8859-10 code (in hex as 0xXX)
# Column #2 is the Unicode (in hex as 0xXXXX)
# Column #3 the Unicode name (follows a comment sign, '#')
#
# The entries are in ISO/IEC 8859-10 order.
#
# Version history
# 1.0 version new.
# 1.1 corrected mistake in mapping of 0xA4
#
# Updated versions of this file may be found in:
# <ftp://ftp.unicode.org/Public/MAPPINGS/>
#
# Any comments or problems, contact <errata@unicode.org>
# Please note that <errata@unicode.org> is an archival address;
# notices will be checked, but do not expect an immediate response.
#
0x00 0x0000 # NULL
0x01 0x0001 # START OF HEADING
0x02 0x0002 # START OF TEXT
0x03 0x0003 # END OF TEXT
0x04 0x0004 # END OF TRANSMISSION
0x05 0x0005 # ENQUIRY
0x06 0x0006 # ACKNOWLEDGE
0x07 0x0007 # BELL
0x08 0x0008 # BACKSPACE
0x09 0x0009 # HORIZONTAL TABULATION
0x0A 0x000A # LINE FEED
0x0B 0x000B # VERTICAL TABULATION
0x0C 0x000C # FORM FEED
0x0D 0x000D # CARRIAGE RETURN
0x0E 0x000E # SHIFT OUT
0x0F 0x000F # SHIFT IN
0x10 0x0010 # DATA LINK ESCAPE
0x11 0x0011 # DEVICE CONTROL ONE
0x12 0x0012 # DEVICE CONTROL TWO
0x13 0x0013 # DEVICE CONTROL THREE
0x14 0x0014 # DEVICE CONTROL FOUR
0x15 0x0015 # NEGATIVE ACKNOWLEDGE
0x16 0x0016 # SYNCHRONOUS IDLE
0x17 0x0017 # END OF TRANSMISSION BLOCK
0x18 0x0018 # CANCEL
0x19 0x0019 # END OF MEDIUM
0x1A 0x001A # SUBSTITUTE
0x1B 0x001B # ESCAPE
0x1C 0x001C # FILE SEPARATOR
0x1D 0x001D # GROUP SEPARATOR
0x1E 0x001E # RECORD SEPARATOR
0x1F 0x001F # UNIT SEPARATOR
0x20 0x0020 # SPACE
0x21 0x0021 # EXCLAMATION MARK
0x22 0x0022 # QUOTATION MARK
0x23 0x0023 # NUMBER SIGN
0x24 0x0024 # DOLLAR SIGN
0x25 0x0025 # PERCENT SIGN
0x26 0x0026 # AMPERSAND
0x27 0x0027 # APOSTROPHE
0x28 0x0028 # LEFT PARENTHESIS
0x29 0x0029 # RIGHT PARENTHESIS
0x2A 0x002A # ASTERISK
0x2B 0x002B # PLUS SIGN
0x2C 0x002C # COMMA
0x2D 0x002D # HYPHEN-MINUS
0x2E 0x002E # FULL STOP
0x2F 0x002F # SOLIDUS
0x30 0x0030 # DIGIT ZERO
0x31 0x0031 # DIGIT ONE
0x32 0x0032 # DIGIT TWO
0x33 0x0033 # DIGIT THREE
0x34 0x0034 # DIGIT FOUR
0x35 0x0035 # DIGIT FIVE
0x36 0x0036 # DIGIT SIX
0x37 0x0037 # DIGIT SEVEN
0x38 0x0038 # DIGIT EIGHT
0x39 0x0039 # DIGIT NINE
0x3A 0x003A # COLON
0x3B 0x003B # SEMICOLON
0x3C 0x003C # LESS-THAN SIGN
0x3D 0x003D # EQUALS SIGN
0x3E 0x003E # GREATER-THAN SIGN
0x3F 0x003F # QUESTION MARK
0x40 0x0040 # COMMERCIAL AT
0x41 0x0041 # LATIN CAPITAL LETTER A
0x42 0x0042 # LATIN CAPITAL LETTER B
0x43 0x0043 # LATIN CAPITAL LETTER C
0x44 0x0044 # LATIN CAPITAL LETTER D
0x45 0x0045 # LATIN CAPITAL LETTER E
0x46 0x0046 # LATIN CAPITAL LETTER F
0x47 0x0047 # LATIN CAPITAL LETTER G
0x48 0x0048 # LATIN CAPITAL LETTER H
0x49 0x0049 # LATIN CAPITAL LETTER I
0x4A 0x004A # LATIN CAPITAL LETTER J
0x4B 0x004B # LATIN CAPITAL LETTER K
0x4C 0x004C # LATIN CAPITAL LETTER L
0x4D 0x004D # LATIN CAPITAL LETTER M
0x4E 0x004E # LATIN CAPITAL LETTER N
0x4F 0x004F # LATIN CAPITAL LETTER O
0x50 0x0050 # LATIN CAPITAL LETTER P
0x51 0x0051 # LATIN CAPITAL LETTER Q
0x52 0x0052 # LATIN CAPITAL LETTER R
0x53 0x0053 # LATIN CAPITAL LETTER S
0x54 0x0054 # LATIN CAPITAL LETTER T
0x55 0x0055 # LATIN CAPITAL LETTER U
0x56 0x0056 # LATIN CAPITAL LETTER V
0x57 0x0057 # LATIN CAPITAL LETTER W
0x58 0x0058 # LATIN CAPITAL LETTER X
0x59 0x0059 # LATIN CAPITAL LETTER Y
0x5A 0x005A # LATIN CAPITAL LETTER Z
0x5B 0x005B # LEFT SQUARE BRACKET
0x5C 0x005C # REVERSE SOLIDUS
0x5D 0x005D # RIGHT SQUARE BRACKET
0x5E 0x005E # CIRCUMFLEX ACCENT
0x5F 0x005F # LOW LINE
0x60 0x0060 # GRAVE ACCENT
0x61 0x0061 # LATIN SMALL LETTER A
0x62 0x0062 # LATIN SMALL LETTER B
0x63 0x0063 # LATIN SMALL LETTER C
0x64 0x0064 # LATIN SMALL LETTER D
0x65 0x0065 # LATIN SMALL LETTER E
0x66 0x0066 # LATIN SMALL LETTER F
0x67 0x0067 # LATIN SMALL LETTER G
0x68 0x0068 # LATIN SMALL LETTER H
0x69 0x0069 # LATIN SMALL LETTER I
0x6A 0x006A # LATIN SMALL LETTER J
0x6B 0x006B # LATIN SMALL LETTER K
0x6C 0x006C # LATIN SMALL LETTER L
0x6D 0x006D # LATIN SMALL LETTER M
0x6E 0x006E # LATIN SMALL LETTER N
0x6F 0x006F # LATIN SMALL LETTER O
0x70 0x0070 # LATIN SMALL LETTER P
0x71 0x0071 # LATIN SMALL LETTER Q
0x72 0x0072 # LATIN SMALL LETTER R
0x73 0x0073 # LATIN SMALL LETTER S
0x74 0x0074 # LATIN SMALL LETTER T
0x75 0x0075 # LATIN SMALL LETTER U
0x76 0x0076 # LATIN SMALL LETTER V
0x77 0x0077 # LATIN SMALL LETTER W
0x78 0x0078 # LATIN SMALL LETTER X
0x79 0x0079 # LATIN SMALL LETTER Y
0x7A 0x007A # LATIN SMALL LETTER Z
0x7B 0x007B # LEFT CURLY BRACKET
0x7C 0x007C # VERTICAL LINE
0x7D 0x007D # RIGHT CURLY BRACKET
0x7E 0x007E # TILDE
0x7F 0x007F # DELETE
0x80 0x0080 # <control>
0x81 0x0081 # <control>
0x82 0x0082 # <control>
0x83 0x0083 # <control>
0x84 0x0084 # <control>
0x85 0x0085 # <control>
0x86 0x0086 # <control>
0x87 0x0087 # <control>
0x88 0x0088 # <control>
0x89 0x0089 # <control>
0x8A 0x008A # <control>
0x8B 0x008B # <control>
0x8C 0x008C # <control>
0x8D 0x008D # <control>
0x8E 0x008E # <control>
0x8F 0x008F # <control>
0x90 0x0090 # <control>
0x91 0x0091 # <control>
0x92 0x0092 # <control>
0x93 0x0093 # <control>
0x94 0x0094 # <control>
0x95 0x0095 # <control>
0x96 0x0096 # <control>
0x97 0x0097 # <control>
0x98 0x0098 # <control>
0x99 0x0099 # <control>
0x9A 0x009A # <control>
0x9B 0x009B # <control>
0x9C 0x009C # <control>
0x9D 0x009D # <control>
0x9E 0x009E # <control>
0x9F 0x009F # <control>
0xA0 0x00A0 # NO-BREAK SPACE
0xA1 0x0104 # LATIN CAPITAL LETTER A WITH OGONEK
0xA2 0x0112 # LATIN CAPITAL LETTER E WITH MACRON
0xA3 0x0122 # LATIN CAPITAL LETTER G WITH CEDILLA
0xA4 0x012A # LATIN CAPITAL LETTER I WITH MACRON
0xA5 0x0128 # LATIN CAPITAL LETTER I WITH TILDE
0xA6 0x0136 # LATIN CAPITAL LETTER K WITH CEDILLA
0xA7 0x00A7 # SECTION SIGN
0xA8 0x013B # LATIN CAPITAL LETTER L WITH CEDILLA
0xA9 0x0110 # LATIN CAPITAL LETTER D WITH STROKE
0xAA 0x0160 # LATIN CAPITAL LETTER S WITH CARON
0xAB 0x0166 # LATIN CAPITAL LETTER T WITH STROKE
0xAC 0x017D # LATIN CAPITAL LETTER Z WITH CARON
0xAD 0x00AD # SOFT HYPHEN
0xAE 0x016A # LATIN CAPITAL LETTER U WITH MACRON
0xAF 0x014A # LATIN CAPITAL LETTER ENG
0xB0 0x00B0 # DEGREE SIGN
0xB1 0x0105 # LATIN SMALL LETTER A WITH OGONEK
0xB2 0x0113 # LATIN SMALL LETTER E WITH MACRON
0xB3 0x0123 # LATIN SMALL LETTER G WITH CEDILLA
0xB4 0x012B # LATIN SMALL LETTER I WITH MACRON
0xB5 0x0129 # LATIN SMALL LETTER I WITH TILDE
0xB6 0x0137 # LATIN SMALL LETTER K WITH CEDILLA
0xB7 0x00B7 # MIDDLE DOT
0xB8 0x013C # LATIN SMALL LETTER L WITH CEDILLA
0xB9 0x0111 # LATIN SMALL LETTER D WITH STROKE
0xBA 0x0161 # LATIN SMALL LETTER S WITH CARON
0xBB 0x0167 # LATIN SMALL LETTER T WITH STROKE
0xBC 0x017E # LATIN SMALL LETTER Z WITH CARON
0xBD 0x2015 # HORIZONTAL BAR
0xBE 0x016B # LATIN SMALL LETTER U WITH MACRON
0xBF 0x014B # LATIN SMALL LETTER ENG
0xC0 0x0100 # LATIN CAPITAL LETTER A WITH MACRON
0xC1 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE
0xC2 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
0xC3 0x00C3 # LATIN CAPITAL LETTER A WITH TILDE
0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
0xC5 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE
0xC6 0x00C6 # LATIN CAPITAL LETTER AE
0xC7 0x012E # LATIN CAPITAL LETTER I WITH OGONEK
0xC8 0x010C # LATIN CAPITAL LETTER C WITH CARON
0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE
0xCA 0x0118 # LATIN CAPITAL LETTER E WITH OGONEK
0xCB 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS
0xCC 0x0116 # LATIN CAPITAL LETTER E WITH DOT ABOVE
0xCD 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE
0xCE 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
0xCF 0x00CF # LATIN CAPITAL LETTER I WITH DIAERESIS
0xD0 0x00D0 # LATIN CAPITAL LETTER ETH (Icelandic)
0xD1 0x0145 # LATIN CAPITAL LETTER N WITH CEDILLA
0xD2 0x014C # LATIN CAPITAL LETTER O WITH MACRON
0xD3 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE
0xD4 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
0xD5 0x00D5 # LATIN CAPITAL LETTER O WITH TILDE
0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
0xD7 0x0168 # LATIN CAPITAL LETTER U WITH TILDE
0xD8 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE
0xD9 0x0172 # LATIN CAPITAL LETTER U WITH OGONEK
0xDA 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE
0xDB 0x00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
0xDD 0x00DD # LATIN CAPITAL LETTER Y WITH ACUTE
0xDE 0x00DE # LATIN CAPITAL LETTER THORN (Icelandic)
0xDF 0x00DF # LATIN SMALL LETTER SHARP S (German)
0xE0 0x0101 # LATIN SMALL LETTER A WITH MACRON
0xE1 0x00E1 # LATIN SMALL LETTER A WITH ACUTE
0xE2 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX
0xE3 0x00E3 # LATIN SMALL LETTER A WITH TILDE
0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS
0xE5 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE
0xE6 0x00E6 # LATIN SMALL LETTER AE
0xE7 0x012F # LATIN SMALL LETTER I WITH OGONEK
0xE8 0x010D # LATIN SMALL LETTER C WITH CARON
0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE
0xEA 0x0119 # LATIN SMALL LETTER E WITH OGONEK
0xEB 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS
0xEC 0x0117 # LATIN SMALL LETTER E WITH DOT ABOVE
0xED 0x00ED # LATIN SMALL LETTER I WITH ACUTE
0xEE 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX
0xEF 0x00EF # LATIN SMALL LETTER I WITH DIAERESIS
0xF0 0x00F0 # LATIN SMALL LETTER ETH (Icelandic)
0xF1 0x0146 # LATIN SMALL LETTER N WITH CEDILLA
0xF2 0x014D # LATIN SMALL LETTER O WITH MACRON
0xF3 0x00F3 # LATIN SMALL LETTER O WITH ACUTE
0xF4 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX
0xF5 0x00F5 # LATIN SMALL LETTER O WITH TILDE
0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS
0xF7 0x0169 # LATIN SMALL LETTER U WITH TILDE
0xF8 0x00F8 # LATIN SMALL LETTER O WITH STROKE
0xF9 0x0173 # LATIN SMALL LETTER U WITH OGONEK
0xFA 0x00FA # LATIN SMALL LETTER U WITH ACUTE
0xFB 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX
0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS
0xFD 0x00FD # LATIN SMALL LETTER Y WITH ACUTE
0xFE 0x00FE # LATIN SMALL LETTER THORN (Icelandic)
0xFF 0x0138 # LATIN SMALL LETTER KRA

134
Unicode/8859_13.cp Normal file
View File

@ -0,0 +1,134 @@
ISO 8859-13 (Baltic)
"ISO-8859-13", "8859-13", "iso-ir-179", "latin7", "l7","iso-latin7"
0x20-0x7e idem
#
0x80 0x0080 #PADDING CHARACTER (PAD)
0x81 0x0081 #HIGH OCTET PRESET (HOP)
0x82 0x0082 #BREAK PERMITTED HERE (BPH)
0x83 0x0083 #NO BREAK HERE (NBH)
0x84 0x0084 #INDEX (IND)
0x85 0x0085 #NEXT LINE (NEL)
0x86 0x0086 #START OF SELECTED AREA (SSA)
0x87 0x0087 #END OF SELECTED AREA (ESA)
0x88 0x0088 #CHARACTER TABULATION SET (HTS)
0x89 0x0089 #CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
0x8A 0x008A #LINE TABULATION SET (VTS)
0x8B 0x008B #PARTIAL LINE FORWARD (PLD)
0x8C 0x008C #PARTIAL LINE BACKWARD (PLU)
0x8D 0x008D #REVERSE LINE FEED (RI)
0x8E 0x008E #SINGLE-SHIFT TWO (SS2)
0x8F 0x008F #SINGLE-SHIFT THREE (SS3)
0x90 0x0090 #DEVICE CONTROL STRING (DCS)
0x91 0x0091 #PRIVATE USE ONE (PU1)
0x92 0x0092 #PRIVATE USE TWO (PU2)
0x93 0x0093 #SET TRANSMIT STATE (STS)
0x94 0x0094 #CANCEL CHARACTER (CCH)
0x95 0x0095 #MESSAGE WAITING (MW)
0x96 0x0096 #START OF GUARDED AREA (SPA)
0x97 0x0097 #END OF GUARDED AREA (EPA)
0x98 0x0098 #START OF STRING (SOS)
0x99 0x0099 #SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
0x9A 0x009A #SINGLE CHARACTER INTRODUCER (SCI)
0x9B 0x009B #CONTROL SEQUENCE INTRODUCER (CSI)
0x9C 0x009C #STRING TERMINATOR (ST)
0x9D 0x009D #OPERATING SYSTEM COMMAND (OSC)
0x9E 0x009E #PRIVACY MESSAGE (PM)
0x9F 0x009F #APPLICATION PROGRAM COMMAND (APC)
0xA0 0x00A0 #NO-BREAK SPACE
0xA1 0x201D #RIGHT DOUBLE QUOTATION MARK
0xA2 0x00A2 #CENT SIGN
0xA3 0x00A3 #POUND SIGN
0xA4 0x00A4 #CURRENCY SIGN
0xA5 0x201E #DOUBLE LOW-9 QUOTATION MARK
0xA6 0x00A6 #BROKEN BAR
0xA7 0x00A7 #SECTION SIGN
0xA8 0x00D8 #LATIN CAPITAL LETTER O WITH STROKE
0xA9 0x00A9 #COPYRIGHT SIGN
0xAA 0x0156 #LATIN CAPITAL LETTER R WITH CEDILLA
0xAB 0x00AB #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
0xAC 0x00AC #NOT SIGN
0xAD 0x00AD #SOFT HYPHEN
0xAE 0x00AE #REGISTERED SIGN
0xAF 0x00C6 #LATIN CAPITAL LETTER AE
0xB0 0x00B0 #DEGREE SIGN
0xB1 0x00B1 #PLUS-MINUS SIGN
0xB2 0x00B2 #SUPERSCRIPT TWO
0xB3 0x00B3 #SUPERSCRIPT THREE
0xB4 0x201C #LEFT DOUBLE QUOTATION MARK
0xB5 0x00B5 #MICRO SIGN
0xB6 0x00B6 #PILCROW SIGN
0xB7 0x00B7 #MIDDLE DOT
0xB8 0x00F8 #LATIN SMALL LETTER O WITH STROKE
0xB9 0x00B9 #SUPERSCRIPT ONE
0xBA 0x0157 #LATIN SMALL LETTER R WITH CEDILLA
0xBB 0x00BB #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
0xBC 0x00BC #VULGAR FRACTION ONE QUARTER
0xBD 0x00BD #VULGAR FRACTION ONE HALF
0xBE 0x00BE #VULGAR FRACTION THREE QUARTERS
0xBF 0x00E6 #LATIN SMALL LETTER AE
0xC0 0x0104 #LATIN CAPITAL LETTER A WITH OGONEK
0xC1 0x012E #LATIN CAPITAL LETTER I WITH OGONEK
0xC2 0x0100 #LATIN CAPITAL LETTER A WITH MACRON
0xC3 0x0106 #LATIN CAPITAL LETTER C WITH ACUTE
0xC4 0x00C4 #LATIN CAPITAL LETTER A WITH DIAERESIS
0xC5 0x00C5 #LATIN CAPITAL LETTER A WITH RING ABOVE
0xC6 0x0118 #LATIN CAPITAL LETTER E WITH OGONEK
0xC7 0x0112 #LATIN CAPITAL LETTER E WITH MACRON
0xC8 0x010C #LATIN CAPITAL LETTER C WITH CARON
0xC9 0x00C9 #LATIN CAPITAL LETTER E WITH ACUTE
0xCA 0x0179 #LATIN CAPITAL LETTER Z WITH ACUTE
0xCB 0x0116 #LATIN CAPITAL LETTER E WITH DOT ABOVE
0xCC 0x0122 #LATIN CAPITAL LETTER G WITH CEDILLA
0xCD 0x0136 #LATIN CAPITAL LETTER K WITH CEDILLA
0xCE 0x012A #LATIN CAPITAL LETTER I WITH MACRON
0xCF 0x013B #LATIN CAPITAL LETTER L WITH CEDILLA
0xD0 0x0160 #LATIN CAPITAL LETTER S WITH CARON
0xD1 0x0143 #LATIN CAPITAL LETTER N WITH ACUTE
0xD2 0x0145 #LATIN CAPITAL LETTER N WITH CEDILLA
0xD3 0x00D3 #LATIN CAPITAL LETTER O WITH ACUTE
0xD4 0x014C #LATIN CAPITAL LETTER O WITH MACRON
0xD5 0x00D5 #LATIN CAPITAL LETTER O WITH TILDE
0xD6 0x00D6 #LATIN CAPITAL LETTER O WITH DIAERESIS
0xD7 0x00D7 #MULTIPLICATION SIGN
0xD8 0x0172 #LATIN CAPITAL LETTER U WITH OGONEK
0xD9 0x0141 #LATIN CAPITAL LETTER L WITH STROKE
0xDA 0x015A #LATIN CAPITAL LETTER S WITH ACUTE
0xDB 0x016A #LATIN CAPITAL LETTER U WITH MACRON
0xDC 0x00DC #LATIN CAPITAL LETTER U WITH DIAERESIS
0xDD 0x017B #LATIN CAPITAL LETTER Z WITH DOT ABOVE
0xDE 0x017D #LATIN CAPITAL LETTER Z WITH CARON
0xDF 0x00DF #LATIN SMALL LETTER SHARP S
0xE0 0x0105 #LATIN SMALL LETTER A WITH OGONEK
0xE1 0x012F #LATIN SMALL LETTER I WITH OGONEK
0xE2 0x0101 #LATIN SMALL LETTER A WITH MACRON
0xE3 0x0107 #LATIN SMALL LETTER C WITH ACUTE
0xE4 0x00E4 #LATIN SMALL LETTER A WITH DIAERESIS
0xE5 0x00E5 #LATIN SMALL LETTER A WITH RING ABOVE
0xE6 0x0119 #LATIN SMALL LETTER E WITH OGONEK
0xE7 0x0113 #LATIN SMALL LETTER E WITH MACRON
0xE8 0x010D #LATIN SMALL LETTER C WITH CARON
0xE9 0x00E9 #LATIN SMALL LETTER E WITH ACUTE
0xEA 0x017A #LATIN SMALL LETTER Z WITH ACUTE
0xEB 0x0117 #LATIN SMALL LETTER E WITH DOT ABOVE
0xEC 0x0123 #LATIN SMALL LETTER G WITH CEDILLA
0xED 0x0137 #LATIN SMALL LETTER K WITH CEDILLA
0xEE 0x012B #LATIN SMALL LETTER I WITH MACRON
0xEF 0x013C #LATIN SMALL LETTER L WITH CEDILLA
0xF0 0x0161 #LATIN SMALL LETTER S WITH CARON
0xF1 0x0144 #LATIN SMALL LETTER N WITH ACUTE
0xF2 0x0146 #LATIN SMALL LETTER N WITH CEDILLA
0xF3 0x00F3 #LATIN SMALL LETTER O WITH ACUTE
0xF4 0x014D #LATIN SMALL LETTER O WITH MACRON
0xF5 0x00F5 #LATIN SMALL LETTER O WITH TILDE
0xF6 0x00F6 #LATIN SMALL LETTER O WITH DIAERESIS
0xF7 0x00F7 #DIVISION SIGN
0xF8 0x0173 #LATIN SMALL LETTER U WITH OGONEK
0xF9 0x0142 #LATIN SMALL LETTER L WITH STROKE
0xFA 0x015B #LATIN SMALL LETTER S WITH ACUTE
0xFB 0x016B #LATIN SMALL LETTER U WITH MACRON
0xFC 0x00FC #LATIN SMALL LETTER U WITH DIAERESIS
0xFD 0x017C #LATIN SMALL LETTER Z WITH DOT ABOVE
0xFE 0x017E #LATIN SMALL LETTER Z WITH CARON
0xFF 0x2019 #RIGHT SINGLE QUOTATION MARK

303
Unicode/8859_14.cp Normal file
View File

@ -0,0 +1,303 @@
ISO 8859-14 (Celtic)
"ISO-8859-14", "8859-14"
#
# Name: ISO/IEC 8859-14:1998 to Unicode
# Unicode version: 3.0
# Table version: 1.0
# Table format: Format A
# Date: 1999 July 27
# Authors: Markus Kuhn <mkuhn@acm.org>
# Ken Whistler <kenw@sybase.com>
#
# Copyright (c) 1998 - 1999 Unicode, Inc. All Rights reserved.
#
# This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
# No claims are made as to fitness for any particular purpose. No
# warranties of any kind are expressed or implied. The recipient
# agrees to determine applicability of information provided. If this
# file has been provided on optical media by Unicode, Inc., the sole
# remedy for any claim will be exchange of defective media within 90
# days of receipt.
#
# Unicode, Inc. hereby grants the right to freely use the information
# supplied in this file in the creation of products supporting the
# Unicode Standard, and to make copies of this file in any form for
# internal or external distribution as long as this notice remains
# attached.
#
# General notes:
#
# This table contains the data the Unicode Consortium has on how
# ISO/IEC 8859-14:1998 characters map into Unicode.
#
# Format: Three tab-separated columns
# Column #1 is the ISO/IEC 8859-14 code (in hex as 0xXX)
# Column #2 is the Unicode (in hex as 0xXXXX)
# Column #3 the Unicode name (follows a comment sign, '#')
#
# The entries are in ISO/IEC 8859-14 order.
#
# Updated versions of this file may be found in:
# <ftp://ftp.unicode.org/Public/MAPPINGS/>
#
# Any comments or problems, contact <errata@unicode.org>
# Please note that <errata@unicode.org> is an archival address;
# notices will be checked, but do not expect an immediate response.
#
0x00 0x0000 # NULL
0x01 0x0001 # START OF HEADING
0x02 0x0002 # START OF TEXT
0x03 0x0003 # END OF TEXT
0x04 0x0004 # END OF TRANSMISSION
0x05 0x0005 # ENQUIRY
0x06 0x0006 # ACKNOWLEDGE
0x07 0x0007 # BELL
0x08 0x0008 # BACKSPACE
0x09 0x0009 # HORIZONTAL TABULATION
0x0A 0x000A # LINE FEED
0x0B 0x000B # VERTICAL TABULATION
0x0C 0x000C # FORM FEED
0x0D 0x000D # CARRIAGE RETURN
0x0E 0x000E # SHIFT OUT
0x0F 0x000F # SHIFT IN
0x10 0x0010 # DATA LINK ESCAPE
0x11 0x0011 # DEVICE CONTROL ONE
0x12 0x0012 # DEVICE CONTROL TWO
0x13 0x0013 # DEVICE CONTROL THREE
0x14 0x0014 # DEVICE CONTROL FOUR
0x15 0x0015 # NEGATIVE ACKNOWLEDGE
0x16 0x0016 # SYNCHRONOUS IDLE
0x17 0x0017 # END OF TRANSMISSION BLOCK
0x18 0x0018 # CANCEL
0x19 0x0019 # END OF MEDIUM
0x1A 0x001A # SUBSTITUTE
0x1B 0x001B # ESCAPE
0x1C 0x001C # FILE SEPARATOR
0x1D 0x001D # GROUP SEPARATOR
0x1E 0x001E # RECORD SEPARATOR
0x1F 0x001F # UNIT SEPARATOR
0x20 0x0020 # SPACE
0x21 0x0021 # EXCLAMATION MARK
0x22 0x0022 # QUOTATION MARK
0x23 0x0023 # NUMBER SIGN
0x24 0x0024 # DOLLAR SIGN
0x25 0x0025 # PERCENT SIGN
0x26 0x0026 # AMPERSAND
0x27 0x0027 # APOSTROPHE
0x28 0x0028 # LEFT PARENTHESIS
0x29 0x0029 # RIGHT PARENTHESIS
0x2A 0x002A # ASTERISK
0x2B 0x002B # PLUS SIGN
0x2C 0x002C # COMMA
0x2D 0x002D # HYPHEN-MINUS
0x2E 0x002E # FULL STOP
0x2F 0x002F # SOLIDUS
0x30 0x0030 # DIGIT ZERO
0x31 0x0031 # DIGIT ONE
0x32 0x0032 # DIGIT TWO
0x33 0x0033 # DIGIT THREE
0x34 0x0034 # DIGIT FOUR
0x35 0x0035 # DIGIT FIVE
0x36 0x0036 # DIGIT SIX
0x37 0x0037 # DIGIT SEVEN
0x38 0x0038 # DIGIT EIGHT
0x39 0x0039 # DIGIT NINE
0x3A 0x003A # COLON
0x3B 0x003B # SEMICOLON
0x3C 0x003C # LESS-THAN SIGN
0x3D 0x003D # EQUALS SIGN
0x3E 0x003E # GREATER-THAN SIGN
0x3F 0x003F # QUESTION MARK
0x40 0x0040 # COMMERCIAL AT
0x41 0x0041 # LATIN CAPITAL LETTER A
0x42 0x0042 # LATIN CAPITAL LETTER B
0x43 0x0043 # LATIN CAPITAL LETTER C
0x44 0x0044 # LATIN CAPITAL LETTER D
0x45 0x0045 # LATIN CAPITAL LETTER E
0x46 0x0046 # LATIN CAPITAL LETTER F
0x47 0x0047 # LATIN CAPITAL LETTER G
0x48 0x0048 # LATIN CAPITAL LETTER H
0x49 0x0049 # LATIN CAPITAL LETTER I
0x4A 0x004A # LATIN CAPITAL LETTER J
0x4B 0x004B # LATIN CAPITAL LETTER K
0x4C 0x004C # LATIN CAPITAL LETTER L
0x4D 0x004D # LATIN CAPITAL LETTER M
0x4E 0x004E # LATIN CAPITAL LETTER N
0x4F 0x004F # LATIN CAPITAL LETTER O
0x50 0x0050 # LATIN CAPITAL LETTER P
0x51 0x0051 # LATIN CAPITAL LETTER Q
0x52 0x0052 # LATIN CAPITAL LETTER R
0x53 0x0053 # LATIN CAPITAL LETTER S
0x54 0x0054 # LATIN CAPITAL LETTER T
0x55 0x0055 # LATIN CAPITAL LETTER U
0x56 0x0056 # LATIN CAPITAL LETTER V
0x57 0x0057 # LATIN CAPITAL LETTER W
0x58 0x0058 # LATIN CAPITAL LETTER X
0x59 0x0059 # LATIN CAPITAL LETTER Y
0x5A 0x005A # LATIN CAPITAL LETTER Z
0x5B 0x005B # LEFT SQUARE BRACKET
0x5C 0x005C # REVERSE SOLIDUS
0x5D 0x005D # RIGHT SQUARE BRACKET
0x5E 0x005E # CIRCUMFLEX ACCENT
0x5F 0x005F # LOW LINE
0x60 0x0060 # GRAVE ACCENT
0x61 0x0061 # LATIN SMALL LETTER A
0x62 0x0062 # LATIN SMALL LETTER B
0x63 0x0063 # LATIN SMALL LETTER C
0x64 0x0064 # LATIN SMALL LETTER D
0x65 0x0065 # LATIN SMALL LETTER E
0x66 0x0066 # LATIN SMALL LETTER F
0x67 0x0067 # LATIN SMALL LETTER G
0x68 0x0068 # LATIN SMALL LETTER H
0x69 0x0069 # LATIN SMALL LETTER I
0x6A 0x006A # LATIN SMALL LETTER J
0x6B 0x006B # LATIN SMALL LETTER K
0x6C 0x006C # LATIN SMALL LETTER L
0x6D 0x006D # LATIN SMALL LETTER M
0x6E 0x006E # LATIN SMALL LETTER N
0x6F 0x006F # LATIN SMALL LETTER O
0x70 0x0070 # LATIN SMALL LETTER P
0x71 0x0071 # LATIN SMALL LETTER Q
0x72 0x0072 # LATIN SMALL LETTER R
0x73 0x0073 # LATIN SMALL LETTER S
0x74 0x0074 # LATIN SMALL LETTER T
0x75 0x0075 # LATIN SMALL LETTER U
0x76 0x0076 # LATIN SMALL LETTER V
0x77 0x0077 # LATIN SMALL LETTER W
0x78 0x0078 # LATIN SMALL LETTER X
0x79 0x0079 # LATIN SMALL LETTER Y
0x7A 0x007A # LATIN SMALL LETTER Z
0x7B 0x007B # LEFT CURLY BRACKET
0x7C 0x007C # VERTICAL LINE
0x7D 0x007D # RIGHT CURLY BRACKET
0x7E 0x007E # TILDE
0x7F 0x007F # DELETE
0x80 0x0080 # <control>
0x81 0x0081 # <control>
0x82 0x0082 # <control>
0x83 0x0083 # <control>
0x84 0x0084 # <control>
0x85 0x0085 # <control>
0x86 0x0086 # <control>
0x87 0x0087 # <control>
0x88 0x0088 # <control>
0x89 0x0089 # <control>
0x8A 0x008A # <control>
0x8B 0x008B # <control>
0x8C 0x008C # <control>
0x8D 0x008D # <control>
0x8E 0x008E # <control>
0x8F 0x008F # <control>
0x90 0x0090 # <control>
0x91 0x0091 # <control>
0x92 0x0092 # <control>
0x93 0x0093 # <control>
0x94 0x0094 # <control>
0x95 0x0095 # <control>
0x96 0x0096 # <control>
0x97 0x0097 # <control>
0x98 0x0098 # <control>
0x99 0x0099 # <control>
0x9A 0x009A # <control>
0x9B 0x009B # <control>
0x9C 0x009C # <control>
0x9D 0x009D # <control>
0x9E 0x009E # <control>
0x9F 0x009F # <control>
0xA0 0x00A0 # NO-BREAK SPACE
0xA1 0x1E02 # LATIN CAPITAL LETTER B WITH DOT ABOVE
0xA2 0x1E03 # LATIN SMALL LETTER B WITH DOT ABOVE
0xA3 0x00A3 # POUND SIGN
0xA4 0x010A # LATIN CAPITAL LETTER C WITH DOT ABOVE
0xA5 0x010B # LATIN SMALL LETTER C WITH DOT ABOVE
0xA6 0x1E0A # LATIN CAPITAL LETTER D WITH DOT ABOVE
0xA7 0x00A7 # SECTION SIGN
0xA8 0x1E80 # LATIN CAPITAL LETTER W WITH GRAVE
0xA9 0x00A9 # COPYRIGHT SIGN
0xAA 0x1E82 # LATIN CAPITAL LETTER W WITH ACUTE
0xAB 0x1E0B # LATIN SMALL LETTER D WITH DOT ABOVE
0xAC 0x1EF2 # LATIN CAPITAL LETTER Y WITH GRAVE
0xAD 0x00AD # SOFT HYPHEN
0xAE 0x00AE # REGISTERED SIGN
0xAF 0x0178 # LATIN CAPITAL LETTER Y WITH DIAERESIS
0xB0 0x1E1E # LATIN CAPITAL LETTER F WITH DOT ABOVE
0xB1 0x1E1F # LATIN SMALL LETTER F WITH DOT ABOVE
0xB2 0x0120 # LATIN CAPITAL LETTER G WITH DOT ABOVE
0xB3 0x0121 # LATIN SMALL LETTER G WITH DOT ABOVE
0xB4 0x1E40 # LATIN CAPITAL LETTER M WITH DOT ABOVE
0xB5 0x1E41 # LATIN SMALL LETTER M WITH DOT ABOVE
0xB6 0x00B6 # PILCROW SIGN
0xB7 0x1E56 # LATIN CAPITAL LETTER P WITH DOT ABOVE
0xB8 0x1E81 # LATIN SMALL LETTER W WITH GRAVE
0xB9 0x1E57 # LATIN SMALL LETTER P WITH DOT ABOVE
0xBA 0x1E83 # LATIN SMALL LETTER W WITH ACUTE
0xBB 0x1E60 # LATIN CAPITAL LETTER S WITH DOT ABOVE
0xBC 0x1EF3 # LATIN SMALL LETTER Y WITH GRAVE
0xBD 0x1E84 # LATIN CAPITAL LETTER W WITH DIAERESIS
0xBE 0x1E85 # LATIN SMALL LETTER W WITH DIAERESIS
0xBF 0x1E61 # LATIN SMALL LETTER S WITH DOT ABOVE
0xC0 0x00C0 # LATIN CAPITAL LETTER A WITH GRAVE
0xC1 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE
0xC2 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
0xC3 0x00C3 # LATIN CAPITAL LETTER A WITH TILDE
0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
0xC5 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE
0xC6 0x00C6 # LATIN CAPITAL LETTER AE
0xC7 0x00C7 # LATIN CAPITAL LETTER C WITH CEDILLA
0xC8 0x00C8 # LATIN CAPITAL LETTER E WITH GRAVE
0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE
0xCA 0x00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
0xCB 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS
0xCC 0x00CC # LATIN CAPITAL LETTER I WITH GRAVE
0xCD 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE
0xCE 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
0xCF 0x00CF # LATIN CAPITAL LETTER I WITH DIAERESIS
0xD0 0x0174 # LATIN CAPITAL LETTER W WITH CIRCUMFLEX
0xD1 0x00D1 # LATIN CAPITAL LETTER N WITH TILDE
0xD2 0x00D2 # LATIN CAPITAL LETTER O WITH GRAVE
0xD3 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE
0xD4 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
0xD5 0x00D5 # LATIN CAPITAL LETTER O WITH TILDE
0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
0xD7 0x1E6A # LATIN CAPITAL LETTER T WITH DOT ABOVE
0xD8 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE
0xD9 0x00D9 # LATIN CAPITAL LETTER U WITH GRAVE
0xDA 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE
0xDB 0x00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
0xDD 0x00DD # LATIN CAPITAL LETTER Y WITH ACUTE
0xDE 0x0176 # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
0xDF 0x00DF # LATIN SMALL LETTER SHARP S
0xE0 0x00E0 # LATIN SMALL LETTER A WITH GRAVE
0xE1 0x00E1 # LATIN SMALL LETTER A WITH ACUTE
0xE2 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX
0xE3 0x00E3 # LATIN SMALL LETTER A WITH TILDE
0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS
0xE5 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE
0xE6 0x00E6 # LATIN SMALL LETTER AE
0xE7 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA
0xE8 0x00E8 # LATIN SMALL LETTER E WITH GRAVE
0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE
0xEA 0x00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX
0xEB 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS
0xEC 0x00EC # LATIN SMALL LETTER I WITH GRAVE
0xED 0x00ED # LATIN SMALL LETTER I WITH ACUTE
0xEE 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX
0xEF 0x00EF # LATIN SMALL LETTER I WITH DIAERESIS
0xF0 0x0175 # LATIN SMALL LETTER W WITH CIRCUMFLEX
0xF1 0x00F1 # LATIN SMALL LETTER N WITH TILDE
0xF2 0x00F2 # LATIN SMALL LETTER O WITH GRAVE
0xF3 0x00F3 # LATIN SMALL LETTER O WITH ACUTE
0xF4 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX
0xF5 0x00F5 # LATIN SMALL LETTER O WITH TILDE
0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS
0xF7 0x1E6B # LATIN SMALL LETTER T WITH DOT ABOVE
0xF8 0x00F8 # LATIN SMALL LETTER O WITH STROKE
0xF9 0x00F9 # LATIN SMALL LETTER U WITH GRAVE
0xFA 0x00FA # LATIN SMALL LETTER U WITH ACUTE
0xFB 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX
0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS
0xFD 0x00FD # LATIN SMALL LETTER Y WITH ACUTE
0xFE 0x0177 # LATIN SMALL LETTER Y WITH CIRCUMFLEX
0xFF 0x00FF # LATIN SMALL LETTER Y WITH DIAERESIS

305
Unicode/8859_15.cp Normal file
View File

@ -0,0 +1,305 @@
ISO 8859-15 (Western European)
"ISO-8859-15", "8859-15"
#
# Name: ISO/IEC 8859-15:1999 to Unicode
# Unicode version: 3.0
# Table version: 1.0
# Table format: Format A
# Date: 1999 July 27
# Authors: Markus Kuhn <mkuhn@acm.org>
# Ken Whistler <kenw@sybase.com>
#
# Copyright (c) 1998 - 1999 Unicode, Inc. All Rights reserved.
#
# This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
# No claims are made as to fitness for any particular purpose. No
# warranties of any kind are expressed or implied. The recipient
# agrees to determine applicability of information provided. If this
# file has been provided on optical media by Unicode, Inc., the sole
# remedy for any claim will be exchange of defective media within 90
# days of receipt.
#
# Unicode, Inc. hereby grants the right to freely use the information
# supplied in this file in the creation of products supporting the
# Unicode Standard, and to make copies of this file in any form for
# internal or external distribution as long as this notice remains
# attached.
#
# General notes:
#
# This table contains the data the Unicode Consortium has on how
# ISO/IEC 8859-15:1999 characters map into Unicode.
#
# Format: Three tab-separated columns
# Column #1 is the ISO/IEC 8859-15 code (in hex as 0xXX)
# Column #2 is the Unicode (in hex as 0xXXXX)
# Column #3 the Unicode name (follows a comment sign, '#')
#
# The entries are in ISO/IEC 8859-15 order.
#
# Version history
#
# Updated versions of this file may be found in:
# <ftp://ftp.unicode.org/Public/MAPPINGS/>
#
# Any comments or problems, contact <errata@unicode.org>
# Please note that <errata@unicode.org> is an archival address;
# notices will be checked, but do not expect an immediate response.
#
0x00 0x0000 # NULL
0x01 0x0001 # START OF HEADING
0x02 0x0002 # START OF TEXT
0x03 0x0003 # END OF TEXT
0x04 0x0004 # END OF TRANSMISSION
0x05 0x0005 # ENQUIRY
0x06 0x0006 # ACKNOWLEDGE
0x07 0x0007 # BELL
0x08 0x0008 # BACKSPACE
0x09 0x0009 # HORIZONTAL TABULATION
0x0A 0x000A # LINE FEED
0x0B 0x000B # VERTICAL TABULATION
0x0C 0x000C # FORM FEED
0x0D 0x000D # CARRIAGE RETURN
0x0E 0x000E # SHIFT OUT
0x0F 0x000F # SHIFT IN
0x10 0x0010 # DATA LINK ESCAPE
0x11 0x0011 # DEVICE CONTROL ONE
0x12 0x0012 # DEVICE CONTROL TWO
0x13 0x0013 # DEVICE CONTROL THREE
0x14 0x0014 # DEVICE CONTROL FOUR
0x15 0x0015 # NEGATIVE ACKNOWLEDGE
0x16 0x0016 # SYNCHRONOUS IDLE
0x17 0x0017 # END OF TRANSMISSION BLOCK
0x18 0x0018 # CANCEL
0x19 0x0019 # END OF MEDIUM
0x1A 0x001A # SUBSTITUTE
0x1B 0x001B # ESCAPE
0x1C 0x001C # FILE SEPARATOR
0x1D 0x001D # GROUP SEPARATOR
0x1E 0x001E # RECORD SEPARATOR
0x1F 0x001F # UNIT SEPARATOR
0x20 0x0020 # SPACE
0x21 0x0021 # EXCLAMATION MARK
0x22 0x0022 # QUOTATION MARK
0x23 0x0023 # NUMBER SIGN
0x24 0x0024 # DOLLAR SIGN
0x25 0x0025 # PERCENT SIGN
0x26 0x0026 # AMPERSAND
0x27 0x0027 # APOSTROPHE
0x28 0x0028 # LEFT PARENTHESIS
0x29 0x0029 # RIGHT PARENTHESIS
0x2A 0x002A # ASTERISK
0x2B 0x002B # PLUS SIGN
0x2C 0x002C # COMMA
0x2D 0x002D # HYPHEN-MINUS
0x2E 0x002E # FULL STOP
0x2F 0x002F # SOLIDUS
0x30 0x0030 # DIGIT ZERO
0x31 0x0031 # DIGIT ONE
0x32 0x0032 # DIGIT TWO
0x33 0x0033 # DIGIT THREE
0x34 0x0034 # DIGIT FOUR
0x35 0x0035 # DIGIT FIVE
0x36 0x0036 # DIGIT SIX
0x37 0x0037 # DIGIT SEVEN
0x38 0x0038 # DIGIT EIGHT
0x39 0x0039 # DIGIT NINE
0x3A 0x003A # COLON
0x3B 0x003B # SEMICOLON
0x3C 0x003C # LESS-THAN SIGN
0x3D 0x003D # EQUALS SIGN
0x3E 0x003E # GREATER-THAN SIGN
0x3F 0x003F # QUESTION MARK
0x40 0x0040 # COMMERCIAL AT
0x41 0x0041 # LATIN CAPITAL LETTER A
0x42 0x0042 # LATIN CAPITAL LETTER B
0x43 0x0043 # LATIN CAPITAL LETTER C
0x44 0x0044 # LATIN CAPITAL LETTER D
0x45 0x0045 # LATIN CAPITAL LETTER E
0x46 0x0046 # LATIN CAPITAL LETTER F
0x47 0x0047 # LATIN CAPITAL LETTER G
0x48 0x0048 # LATIN CAPITAL LETTER H
0x49 0x0049 # LATIN CAPITAL LETTER I
0x4A 0x004A # LATIN CAPITAL LETTER J
0x4B 0x004B # LATIN CAPITAL LETTER K
0x4C 0x004C # LATIN CAPITAL LETTER L
0x4D 0x004D # LATIN CAPITAL LETTER M
0x4E 0x004E # LATIN CAPITAL LETTER N
0x4F 0x004F # LATIN CAPITAL LETTER O
0x50 0x0050 # LATIN CAPITAL LETTER P
0x51 0x0051 # LATIN CAPITAL LETTER Q
0x52 0x0052 # LATIN CAPITAL LETTER R
0x53 0x0053 # LATIN CAPITAL LETTER S
0x54 0x0054 # LATIN CAPITAL LETTER T
0x55 0x0055 # LATIN CAPITAL LETTER U
0x56 0x0056 # LATIN CAPITAL LETTER V
0x57 0x0057 # LATIN CAPITAL LETTER W
0x58 0x0058 # LATIN CAPITAL LETTER X
0x59 0x0059 # LATIN CAPITAL LETTER Y
0x5A 0x005A # LATIN CAPITAL LETTER Z
0x5B 0x005B # LEFT SQUARE BRACKET
0x5C 0x005C # REVERSE SOLIDUS
0x5D 0x005D # RIGHT SQUARE BRACKET
0x5E 0x005E # CIRCUMFLEX ACCENT
0x5F 0x005F # LOW LINE
0x60 0x0060 # GRAVE ACCENT
0x61 0x0061 # LATIN SMALL LETTER A
0x62 0x0062 # LATIN SMALL LETTER B
0x63 0x0063 # LATIN SMALL LETTER C
0x64 0x0064 # LATIN SMALL LETTER D
0x65 0x0065 # LATIN SMALL LETTER E
0x66 0x0066 # LATIN SMALL LETTER F
0x67 0x0067 # LATIN SMALL LETTER G
0x68 0x0068 # LATIN SMALL LETTER H
0x69 0x0069 # LATIN SMALL LETTER I
0x6A 0x006A # LATIN SMALL LETTER J
0x6B 0x006B # LATIN SMALL LETTER K
0x6C 0x006C # LATIN SMALL LETTER L
0x6D 0x006D # LATIN SMALL LETTER M
0x6E 0x006E # LATIN SMALL LETTER N
0x6F 0x006F # LATIN SMALL LETTER O
0x70 0x0070 # LATIN SMALL LETTER P
0x71 0x0071 # LATIN SMALL LETTER Q
0x72 0x0072 # LATIN SMALL LETTER R
0x73 0x0073 # LATIN SMALL LETTER S
0x74 0x0074 # LATIN SMALL LETTER T
0x75 0x0075 # LATIN SMALL LETTER U
0x76 0x0076 # LATIN SMALL LETTER V
0x77 0x0077 # LATIN SMALL LETTER W
0x78 0x0078 # LATIN SMALL LETTER X
0x79 0x0079 # LATIN SMALL LETTER Y
0x7A 0x007A # LATIN SMALL LETTER Z
0x7B 0x007B # LEFT CURLY BRACKET
0x7C 0x007C # VERTICAL LINE
0x7D 0x007D # RIGHT CURLY BRACKET
0x7E 0x007E # TILDE
0x7F 0x007F # DELETE
0x80 0x0080 # <control>
0x81 0x0081 # <control>
0x82 0x0082 # <control>
0x83 0x0083 # <control>
0x84 0x0084 # <control>
0x85 0x0085 # <control>
0x86 0x0086 # <control>
0x87 0x0087 # <control>
0x88 0x0088 # <control>
0x89 0x0089 # <control>
0x8A 0x008A # <control>
0x8B 0x008B # <control>
0x8C 0x008C # <control>
0x8D 0x008D # <control>
0x8E 0x008E # <control>
0x8F 0x008F # <control>
0x90 0x0090 # <control>
0x91 0x0091 # <control>
0x92 0x0092 # <control>
0x93 0x0093 # <control>
0x94 0x0094 # <control>
0x95 0x0095 # <control>
0x96 0x0096 # <control>
0x97 0x0097 # <control>
0x98 0x0098 # <control>
0x99 0x0099 # <control>
0x9A 0x009A # <control>
0x9B 0x009B # <control>
0x9C 0x009C # <control>
0x9D 0x009D # <control>
0x9E 0x009E # <control>
0x9F 0x009F # <control>
0xA0 0x00A0 # NO-BREAK SPACE
0xA1 0x00A1 # INVERTED EXCLAMATION MARK
0xA2 0x00A2 # CENT SIGN
0xA3 0x00A3 # POUND SIGN
0xA4 0x20AC # EURO SIGN
0xA5 0x00A5 # YEN SIGN
0xA6 0x0160 # LATIN CAPITAL LETTER S WITH CARON
0xA7 0x00A7 # SECTION SIGN
0xA8 0x0161 # LATIN SMALL LETTER S WITH CARON
0xA9 0x00A9 # COPYRIGHT SIGN
0xAA 0x00AA # FEMININE ORDINAL INDICATOR
0xAB 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
0xAC 0x00AC # NOT SIGN
0xAD 0x00AD # SOFT HYPHEN
0xAE 0x00AE # REGISTERED SIGN
0xAF 0x00AF # MACRON
0xB0 0x00B0 # DEGREE SIGN
0xB1 0x00B1 # PLUS-MINUS SIGN
0xB2 0x00B2 # SUPERSCRIPT TWO
0xB3 0x00B3 # SUPERSCRIPT THREE
0xB4 0x017D # LATIN CAPITAL LETTER Z WITH CARON
0xB5 0x00B5 # MICRO SIGN
0xB6 0x00B6 # PILCROW SIGN
0xB7 0x00B7 # MIDDLE DOT
0xB8 0x017E # LATIN SMALL LETTER Z WITH CARON
0xB9 0x00B9 # SUPERSCRIPT ONE
0xBA 0x00BA # MASCULINE ORDINAL INDICATOR
0xBB 0x00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
0xBC 0x0152 # LATIN CAPITAL LIGATURE OE
0xBD 0x0153 # LATIN SMALL LIGATURE OE
0xBE 0x0178 # LATIN CAPITAL LETTER Y WITH DIAERESIS
0xBF 0x00BF # INVERTED QUESTION MARK
0xC0 0x00C0 # LATIN CAPITAL LETTER A WITH GRAVE
0xC1 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE
0xC2 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
0xC3 0x00C3 # LATIN CAPITAL LETTER A WITH TILDE
0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
0xC5 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE
0xC6 0x00C6 # LATIN CAPITAL LETTER AE
0xC7 0x00C7 # LATIN CAPITAL LETTER C WITH CEDILLA
0xC8 0x00C8 # LATIN CAPITAL LETTER E WITH GRAVE
0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE
0xCA 0x00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
0xCB 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS
0xCC 0x00CC # LATIN CAPITAL LETTER I WITH GRAVE
0xCD 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE
0xCE 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
0xCF 0x00CF # LATIN CAPITAL LETTER I WITH DIAERESIS
0xD0 0x00D0 # LATIN CAPITAL LETTER ETH
0xD1 0x00D1 # LATIN CAPITAL LETTER N WITH TILDE
0xD2 0x00D2 # LATIN CAPITAL LETTER O WITH GRAVE
0xD3 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE
0xD4 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
0xD5 0x00D5 # LATIN CAPITAL LETTER O WITH TILDE
0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
0xD7 0x00D7 # MULTIPLICATION SIGN
0xD8 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE
0xD9 0x00D9 # LATIN CAPITAL LETTER U WITH GRAVE
0xDA 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE
0xDB 0x00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
0xDD 0x00DD # LATIN CAPITAL LETTER Y WITH ACUTE
0xDE 0x00DE # LATIN CAPITAL LETTER THORN
0xDF 0x00DF # LATIN SMALL LETTER SHARP S
0xE0 0x00E0 # LATIN SMALL LETTER A WITH GRAVE
0xE1 0x00E1 # LATIN SMALL LETTER A WITH ACUTE
0xE2 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX
0xE3 0x00E3 # LATIN SMALL LETTER A WITH TILDE
0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS
0xE5 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE
0xE6 0x00E6 # LATIN SMALL LETTER AE
0xE7 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA
0xE8 0x00E8 # LATIN SMALL LETTER E WITH GRAVE
0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE
0xEA 0x00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX
0xEB 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS
0xEC 0x00EC # LATIN SMALL LETTER I WITH GRAVE
0xED 0x00ED # LATIN SMALL LETTER I WITH ACUTE
0xEE 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX
0xEF 0x00EF # LATIN SMALL LETTER I WITH DIAERESIS
0xF0 0x00F0 # LATIN SMALL LETTER ETH
0xF1 0x00F1 # LATIN SMALL LETTER N WITH TILDE
0xF2 0x00F2 # LATIN SMALL LETTER O WITH GRAVE
0xF3 0x00F3 # LATIN SMALL LETTER O WITH ACUTE
0xF4 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX
0xF5 0x00F5 # LATIN SMALL LETTER O WITH TILDE
0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS
0xF7 0x00F7 # DIVISION SIGN
0xF8 0x00F8 # LATIN SMALL LETTER O WITH STROKE
0xF9 0x00F9 # LATIN SMALL LETTER U WITH GRAVE
0xFA 0x00FA # LATIN SMALL LETTER U WITH ACUTE
0xFB 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX
0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS
0xFD 0x00FD # LATIN SMALL LETTER Y WITH ACUTE
0xFE 0x00FE # LATIN SMALL LETTER THORN
0xFF 0x00FF # LATIN SMALL LETTER Y WITH DIAERESIS

301
Unicode/8859_16.cp Normal file
View File

@ -0,0 +1,301 @@
ISO 8859-16 (Romainian)
"ISO-8859-16", "8859-16"
#
# Name: ISO/IEC 8859-16:2001 to Unicode
# Unicode version: 3.0
# Table version: 1.0
# Table format: Format A
# Date: 2001 July 26
# Authors: Markus Kuhn <mkuhn@acm.org>
#
# Copyright (c) 1999-2001 Unicode, Inc. All Rights reserved.
#
# This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
# No claims are made as to fitness for any particular purpose. No
# warranties of any kind are expressed or implied. The recipient
# agrees to determine applicability of information provided. If this
# file has been provided on optical media by Unicode, Inc., the sole
# remedy for any claim will be exchange of defective media within 90
# days of receipt.
#
# Unicode, Inc. hereby grants the right to freely use the information
# supplied in this file in the creation of products supporting the
# Unicode Standard, and to make copies of this file in any form for
# internal or external distribution as long as this notice remains
# attached.
#
# General notes:
#
# This table contains the data the Unicode Consortium has on how
# ISO/IEC 8859-16:2001 characters map into Unicode.
#
# Format: Three tab-separated columns
# Column #1 is the ISO/IEC 8859-16 code (in hex as 0xXX)
# Column #2 is the Unicode (in hex as 0xXXXX)
# Column #3 the Unicode name (follows a comment sign, '#')
#
# The entries are in ISO/IEC 8859-16 order.
#
# Updated versions of this file may be found in:
# <ftp://ftp.unicode.org/Public/MAPPINGS/>
#
# Any comments or problems, contact <errata@unicode.org>
# Please note that <errata@unicode.org> is an archival address;
# notices will be checked, but do not expect an immediate response.
#
0x00 0x0000 # NULL
0x01 0x0001 # START OF HEADING
0x02 0x0002 # START OF TEXT
0x03 0x0003 # END OF TEXT
0x04 0x0004 # END OF TRANSMISSION
0x05 0x0005 # ENQUIRY
0x06 0x0006 # ACKNOWLEDGE
0x07 0x0007 # BELL
0x08 0x0008 # BACKSPACE
0x09 0x0009 # HORIZONTAL TABULATION
0x0A 0x000A # LINE FEED
0x0B 0x000B # VERTICAL TABULATION
0x0C 0x000C # FORM FEED
0x0D 0x000D # CARRIAGE RETURN
0x0E 0x000E # SHIFT OUT
0x0F 0x000F # SHIFT IN
0x10 0x0010 # DATA LINK ESCAPE
0x11 0x0011 # DEVICE CONTROL ONE
0x12 0x0012 # DEVICE CONTROL TWO
0x13 0x0013 # DEVICE CONTROL THREE
0x14 0x0014 # DEVICE CONTROL FOUR
0x15 0x0015 # NEGATIVE ACKNOWLEDGE
0x16 0x0016 # SYNCHRONOUS IDLE
0x17 0x0017 # END OF TRANSMISSION BLOCK
0x18 0x0018 # CANCEL
0x19 0x0019 # END OF MEDIUM
0x1A 0x001A # SUBSTITUTE
0x1B 0x001B # ESCAPE
0x1C 0x001C # FILE SEPARATOR
0x1D 0x001D # GROUP SEPARATOR
0x1E 0x001E # RECORD SEPARATOR
0x1F 0x001F # UNIT SEPARATOR
0x20 0x0020 # SPACE
0x21 0x0021 # EXCLAMATION MARK
0x22 0x0022 # QUOTATION MARK
0x23 0x0023 # NUMBER SIGN
0x24 0x0024 # DOLLAR SIGN
0x25 0x0025 # PERCENT SIGN
0x26 0x0026 # AMPERSAND
0x27 0x0027 # APOSTROPHE
0x28 0x0028 # LEFT PARENTHESIS
0x29 0x0029 # RIGHT PARENTHESIS
0x2A 0x002A # ASTERISK
0x2B 0x002B # PLUS SIGN
0x2C 0x002C # COMMA
0x2D 0x002D # HYPHEN-MINUS
0x2E 0x002E # FULL STOP
0x2F 0x002F # SOLIDUS
0x30 0x0030 # DIGIT ZERO
0x31 0x0031 # DIGIT ONE
0x32 0x0032 # DIGIT TWO
0x33 0x0033 # DIGIT THREE
0x34 0x0034 # DIGIT FOUR
0x35 0x0035 # DIGIT FIVE
0x36 0x0036 # DIGIT SIX
0x37 0x0037 # DIGIT SEVEN
0x38 0x0038 # DIGIT EIGHT
0x39 0x0039 # DIGIT NINE
0x3A 0x003A # COLON
0x3B 0x003B # SEMICOLON
0x3C 0x003C # LESS-THAN SIGN
0x3D 0x003D # EQUALS SIGN
0x3E 0x003E # GREATER-THAN SIGN
0x3F 0x003F # QUESTION MARK
0x40 0x0040 # COMMERCIAL AT
0x41 0x0041 # LATIN CAPITAL LETTER A
0x42 0x0042 # LATIN CAPITAL LETTER B
0x43 0x0043 # LATIN CAPITAL LETTER C
0x44 0x0044 # LATIN CAPITAL LETTER D
0x45 0x0045 # LATIN CAPITAL LETTER E
0x46 0x0046 # LATIN CAPITAL LETTER F
0x47 0x0047 # LATIN CAPITAL LETTER G
0x48 0x0048 # LATIN CAPITAL LETTER H
0x49 0x0049 # LATIN CAPITAL LETTER I
0x4A 0x004A # LATIN CAPITAL LETTER J
0x4B 0x004B # LATIN CAPITAL LETTER K
0x4C 0x004C # LATIN CAPITAL LETTER L
0x4D 0x004D # LATIN CAPITAL LETTER M
0x4E 0x004E # LATIN CAPITAL LETTER N
0x4F 0x004F # LATIN CAPITAL LETTER O
0x50 0x0050 # LATIN CAPITAL LETTER P
0x51 0x0051 # LATIN CAPITAL LETTER Q
0x52 0x0052 # LATIN CAPITAL LETTER R
0x53 0x0053 # LATIN CAPITAL LETTER S
0x54 0x0054 # LATIN CAPITAL LETTER T
0x55 0x0055 # LATIN CAPITAL LETTER U
0x56 0x0056 # LATIN CAPITAL LETTER V
0x57 0x0057 # LATIN CAPITAL LETTER W
0x58 0x0058 # LATIN CAPITAL LETTER X
0x59 0x0059 # LATIN CAPITAL LETTER Y
0x5A 0x005A # LATIN CAPITAL LETTER Z
0x5B 0x005B # LEFT SQUARE BRACKET
0x5C 0x005C # REVERSE SOLIDUS
0x5D 0x005D # RIGHT SQUARE BRACKET
0x5E 0x005E # CIRCUMFLEX ACCENT
0x5F 0x005F # LOW LINE
0x60 0x0060 # GRAVE ACCENT
0x61 0x0061 # LATIN SMALL LETTER A
0x62 0x0062 # LATIN SMALL LETTER B
0x63 0x0063 # LATIN SMALL LETTER C
0x64 0x0064 # LATIN SMALL LETTER D
0x65 0x0065 # LATIN SMALL LETTER E
0x66 0x0066 # LATIN SMALL LETTER F
0x67 0x0067 # LATIN SMALL LETTER G
0x68 0x0068 # LATIN SMALL LETTER H
0x69 0x0069 # LATIN SMALL LETTER I
0x6A 0x006A # LATIN SMALL LETTER J
0x6B 0x006B # LATIN SMALL LETTER K
0x6C 0x006C # LATIN SMALL LETTER L
0x6D 0x006D # LATIN SMALL LETTER M
0x6E 0x006E # LATIN SMALL LETTER N
0x6F 0x006F # LATIN SMALL LETTER O
0x70 0x0070 # LATIN SMALL LETTER P
0x71 0x0071 # LATIN SMALL LETTER Q
0x72 0x0072 # LATIN SMALL LETTER R
0x73 0x0073 # LATIN SMALL LETTER S
0x74 0x0074 # LATIN SMALL LETTER T
0x75 0x0075 # LATIN SMALL LETTER U
0x76 0x0076 # LATIN SMALL LETTER V
0x77 0x0077 # LATIN SMALL LETTER W
0x78 0x0078 # LATIN SMALL LETTER X
0x79 0x0079 # LATIN SMALL LETTER Y
0x7A 0x007A # LATIN SMALL LETTER Z
0x7B 0x007B # LEFT CURLY BRACKET
0x7C 0x007C # VERTICAL LINE
0x7D 0x007D # RIGHT CURLY BRACKET
0x7E 0x007E # TILDE
0x7F 0x007F # DELETE
0x80 0x0080 # <control>
0x81 0x0081 # <control>
0x82 0x0082 # <control>
0x83 0x0083 # <control>
0x84 0x0084 # <control>
0x85 0x0085 # <control>
0x86 0x0086 # <control>
0x87 0x0087 # <control>
0x88 0x0088 # <control>
0x89 0x0089 # <control>
0x8A 0x008A # <control>
0x8B 0x008B # <control>
0x8C 0x008C # <control>
0x8D 0x008D # <control>
0x8E 0x008E # <control>
0x8F 0x008F # <control>
0x90 0x0090 # <control>
0x91 0x0091 # <control>
0x92 0x0092 # <control>
0x93 0x0093 # <control>
0x94 0x0094 # <control>
0x95 0x0095 # <control>
0x96 0x0096 # <control>
0x97 0x0097 # <control>
0x98 0x0098 # <control>
0x99 0x0099 # <control>
0x9A 0x009A # <control>
0x9B 0x009B # <control>
0x9C 0x009C # <control>
0x9D 0x009D # <control>
0x9E 0x009E # <control>
0x9F 0x009F # <control>
0xA0 0x00A0 # NO-BREAK SPACE
0xA1 0x0104 # LATIN CAPITAL LETTER A WITH OGONEK
0xA2 0x0105 # LATIN SMALL LETTER A WITH OGONEK
0xA3 0x0141 # LATIN CAPITAL LETTER L WITH STROKE
0xA4 0x20AC # EURO SIGN
0xA5 0x201E # DOUBLE LOW-9 QUOTATION MARK
0xA6 0x0160 # LATIN CAPITAL LETTER S WITH CARON
0xA7 0x00A7 # SECTION SIGN
0xA8 0x0161 # LATIN SMALL LETTER S WITH CARON
0xA9 0x00A9 # COPYRIGHT SIGN
0xAA 0x0218 # LATIN CAPITAL LETTER S WITH COMMA BELOW
0xAB 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
0xAC 0x0179 # LATIN CAPITAL LETTER Z WITH ACUTE
0xAD 0x00AD # SOFT HYPHEN
0xAE 0x017A # LATIN SMALL LETTER Z WITH ACUTE
0xAF 0x017B # LATIN CAPITAL LETTER Z WITH DOT ABOVE
0xB0 0x00B0 # DEGREE SIGN
0xB1 0x00B1 # PLUS-MINUS SIGN
0xB2 0x010C # LATIN CAPITAL LETTER C WITH CARON
0xB3 0x0142 # LATIN SMALL LETTER L WITH STROKE
0xB4 0x017D # LATIN CAPITAL LETTER Z WITH CARON
0xB5 0x201D # RIGHT DOUBLE QUOTATION MARK
0xB6 0x00B6 # PILCROW SIGN
0xB7 0x00B7 # MIDDLE DOT
0xB8 0x017E # LATIN SMALL LETTER Z WITH CARON
0xB9 0x010D # LATIN SMALL LETTER C WITH CARON
0xBA 0x0219 # LATIN SMALL LETTER S WITH COMMA BELOW
0xBB 0x00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
0xBC 0x0152 # LATIN CAPITAL LIGATURE OE
0xBD 0x0153 # LATIN SMALL LIGATURE OE
0xBE 0x0178 # LATIN CAPITAL LETTER Y WITH DIAERESIS
0xBF 0x017C # LATIN SMALL LETTER Z WITH DOT ABOVE
0xC0 0x00C0 # LATIN CAPITAL LETTER A WITH GRAVE
0xC1 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE
0xC2 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
0xC3 0x0102 # LATIN CAPITAL LETTER A WITH BREVE
0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
0xC5 0x0106 # LATIN CAPITAL LETTER C WITH ACUTE
0xC6 0x00C6 # LATIN CAPITAL LETTER AE
0xC7 0x00C7 # LATIN CAPITAL LETTER C WITH CEDILLA
0xC8 0x00C8 # LATIN CAPITAL LETTER E WITH GRAVE
0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE
0xCA 0x00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
0xCB 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS
0xCC 0x00CC # LATIN CAPITAL LETTER I WITH GRAVE
0xCD 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE
0xCE 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
0xCF 0x00CF # LATIN CAPITAL LETTER I WITH DIAERESIS
0xD0 0x0110 # LATIN CAPITAL LETTER D WITH STROKE
0xD1 0x0143 # LATIN CAPITAL LETTER N WITH ACUTE
0xD2 0x00D2 # LATIN CAPITAL LETTER O WITH GRAVE
0xD3 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE
0xD4 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
0xD5 0x0150 # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
0xD7 0x015A # LATIN CAPITAL LETTER S WITH ACUTE
0xD8 0x0170 # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
0xD9 0x00D9 # LATIN CAPITAL LETTER U WITH GRAVE
0xDA 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE
0xDB 0x00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
0xDD 0x0118 # LATIN CAPITAL LETTER E WITH OGONEK
0xDE 0x021A # LATIN CAPITAL LETTER T WITH COMMA BELOW
0xDF 0x00DF # LATIN SMALL LETTER SHARP S
0xE0 0x00E0 # LATIN SMALL LETTER A WITH GRAVE
0xE1 0x00E1 # LATIN SMALL LETTER A WITH ACUTE
0xE2 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX
0xE3 0x0103 # LATIN SMALL LETTER A WITH BREVE
0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS
0xE5 0x0107 # LATIN SMALL LETTER C WITH ACUTE
0xE6 0x00E6 # LATIN SMALL LETTER AE
0xE7 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA
0xE8 0x00E8 # LATIN SMALL LETTER E WITH GRAVE
0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE
0xEA 0x00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX
0xEB 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS
0xEC 0x00EC # LATIN SMALL LETTER I WITH GRAVE
0xED 0x00ED # LATIN SMALL LETTER I WITH ACUTE
0xEE 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX
0xEF 0x00EF # LATIN SMALL LETTER I WITH DIAERESIS
0xF0 0x0111 # LATIN SMALL LETTER D WITH STROKE
0xF1 0x0144 # LATIN SMALL LETTER N WITH ACUTE
0xF2 0x00F2 # LATIN SMALL LETTER O WITH GRAVE
0xF3 0x00F3 # LATIN SMALL LETTER O WITH ACUTE
0xF4 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX
0xF5 0x0151 # LATIN SMALL LETTER O WITH DOUBLE ACUTE
0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS
0xF7 0x015B # LATIN SMALL LETTER S WITH ACUTE
0xF8 0x0171 # LATIN SMALL LETTER U WITH DOUBLE ACUTE
0xF9 0x00F9 # LATIN SMALL LETTER U WITH GRAVE
0xFA 0x00FA # LATIN SMALL LETTER U WITH ACUTE
0xFB 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX
0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS
0xFD 0x0119 # LATIN SMALL LETTER E WITH OGONEK
0xFE 0x021B # LATIN SMALL LETTER T WITH COMMA BELOW
0xFF 0x00FF # LATIN SMALL LETTER Y WITH DIAERESIS

193
Unicode/8859_2.cp Normal file
View File

@ -0,0 +1,193 @@
ISO 8859-2 (Central European)
"ISO-8859-2", "8859-2", "iso-ir-101", "latin2", "l2","iso-latin2", "iso8859-2"
0x20 0x0020 #SPACE
0x21 0x0021 #EXCLAMATION MARK
0x22 0x0022 #QUOTATION MARK
0x23 0x0023 #NUMBER SIGN
0x24 0x0024 #DOLLAR SIGN
0x25 0x0025 #PERCENT SIGN
0x26 0x0026 #AMPERSAND
0x27 0x0027 #APOSTROPHE
0x28 0x0028 #LEFT PARENTHESIS
0x29 0x0029 #RIGHT PARENTHESIS
0x2A 0x002A #ASTERISK
0x2B 0x002B #PLUS SIGN
0x2C 0x002C #COMMA
0x2D 0x002D #HYPHEN-MINUS
0x2E 0x002E #FULL STOP
0x2F 0x002F #SOLIDUS
0x30 0x0030 #DIGIT ZERO
0x31 0x0031 #DIGIT ONE
0x32 0x0032 #DIGIT TWO
0x33 0x0033 #DIGIT THREE
0x34 0x0034 #DIGIT FOUR
0x35 0x0035 #DIGIT FIVE
0x36 0x0036 #DIGIT SIX
0x37 0x0037 #DIGIT SEVEN
0x38 0x0038 #DIGIT EIGHT
0x39 0x0039 #DIGIT NINE
0x3A 0x003A #COLON
0x3B 0x003B #SEMICOLON
0x3C 0x003C #LESS-THAN SIGN
0x3D 0x003D #EQUALS SIGN
0x3E 0x003E #GREATER-THAN SIGN
0x3F 0x003F #QUESTION MARK
0x40 0x0040 #COMMERCIAL AT
0x41 0x0041 #LATIN CAPITAL LETTER A
0x42 0x0042 #LATIN CAPITAL LETTER B
0x43 0x0043 #LATIN CAPITAL LETTER C
0x44 0x0044 #LATIN CAPITAL LETTER D
0x45 0x0045 #LATIN CAPITAL LETTER E
0x46 0x0046 #LATIN CAPITAL LETTER F
0x47 0x0047 #LATIN CAPITAL LETTER G
0x48 0x0048 #LATIN CAPITAL LETTER H
0x49 0x0049 #LATIN CAPITAL LETTER I
0x4A 0x004A #LATIN CAPITAL LETTER J
0x4B 0x004B #LATIN CAPITAL LETTER K
0x4C 0x004C #LATIN CAPITAL LETTER L
0x4D 0x004D #LATIN CAPITAL LETTER M
0x4E 0x004E #LATIN CAPITAL LETTER N
0x4F 0x004F #LATIN CAPITAL LETTER O
0x50 0x0050 #LATIN CAPITAL LETTER P
0x51 0x0051 #LATIN CAPITAL LETTER Q
0x52 0x0052 #LATIN CAPITAL LETTER R
0x53 0x0053 #LATIN CAPITAL LETTER S
0x54 0x0054 #LATIN CAPITAL LETTER T
0x55 0x0055 #LATIN CAPITAL LETTER U
0x56 0x0056 #LATIN CAPITAL LETTER V
0x57 0x0057 #LATIN CAPITAL LETTER W
0x58 0x0058 #LATIN CAPITAL LETTER X
0x59 0x0059 #LATIN CAPITAL LETTER Y
0x5A 0x005A #LATIN CAPITAL LETTER Z
0x5B 0x005B #LEFT SQUARE BRACKET
0x5C 0x005C #REVERSE SOLIDUS
0x5D 0x005D #RIGHT SQUARE BRACKET
0x5E 0x005E #CIRCUMFLEX ACCENT
0x5F 0x005F #LOW LINE
0x60 0x0060 #GRAVE ACCENT
0x61 0x0061 #LATIN SMALL LETTER A
0x62 0x0062 #LATIN SMALL LETTER B
0x63 0x0063 #LATIN SMALL LETTER C
0x64 0x0064 #LATIN SMALL LETTER D
0x65 0x0065 #LATIN SMALL LETTER E
0x66 0x0066 #LATIN SMALL LETTER F
0x67 0x0067 #LATIN SMALL LETTER G
0x68 0x0068 #LATIN SMALL LETTER H
0x69 0x0069 #LATIN SMALL LETTER I
0x6A 0x006A #LATIN SMALL LETTER J
0x6B 0x006B #LATIN SMALL LETTER K
0x6C 0x006C #LATIN SMALL LETTER L
0x6D 0x006D #LATIN SMALL LETTER M
0x6E 0x006E #LATIN SMALL LETTER N
0x6F 0x006F #LATIN SMALL LETTER O
0x70 0x0070 #LATIN SMALL LETTER P
0x71 0x0071 #LATIN SMALL LETTER Q
0x72 0x0072 #LATIN SMALL LETTER R
0x73 0x0073 #LATIN SMALL LETTER S
0x74 0x0074 #LATIN SMALL LETTER T
0x75 0x0075 #LATIN SMALL LETTER U
0x76 0x0076 #LATIN SMALL LETTER V
0x77 0x0077 #LATIN SMALL LETTER W
0x78 0x0078 #LATIN SMALL LETTER X
0x79 0x0079 #LATIN SMALL LETTER Y
0x7A 0x007A #LATIN SMALL LETTER Z
0x7B 0x007B #LEFT CURLY BRACKET
0x7C 0x007C #VERTICAL LINE
0x7D 0x007D #RIGHT CURLY BRACKET
0x7E 0x007E #TILDE
0xA0 0x00A0 #NO-BREAK SPACE
0xA1 0x0104 #LATIN CAPITAL LETTER A WITH OGONEK
0xA2 0x02D8 #BREVE
0xA3 0x0141 #LATIN CAPITAL LETTER L WITH STROKE
0xA4 0x00A4 #CURRENCY SIGN
0xA5 0x013D #LATIN CAPITAL LETTER L WITH CARON
0xA6 0x015A #LATIN CAPITAL LETTER S WITH ACUTE
0xA7 0x00A7 #SECTION SIGN
0xA8 0x00A8 #DIAERESIS
0xA9 0x0160 #LATIN CAPITAL LETTER S WITH CARON
0xAA 0x015E #LATIN CAPITAL LETTER S WITH CEDILLA
0xAB 0x0164 #LATIN CAPITAL LETTER T WITH CARON
0xAC 0x0179 #LATIN CAPITAL LETTER Z WITH ACUTE
0xAD 0x00AD #SOFT HYPHEN
0xAE 0x017D #LATIN CAPITAL LETTER Z WITH CARON
0xAF 0x017B #LATIN CAPITAL LETTER Z WITH DOT ABOVE
0xB0 0x00B0 #DEGREE SIGN
0xB1 0x0105 #LATIN SMALL LETTER A WITH OGONEK
0xB2 0x02DB #OGONEK
0xB3 0x0142 #LATIN SMALL LETTER L WITH STROKE
0xB4 0x00B4 #ACUTE ACCENT
0xB5 0x013E #LATIN SMALL LETTER L WITH CARON
0xB6 0x015B #LATIN SMALL LETTER S WITH ACUTE
0xB7 0x02C7 #CARON
0xB8 0x00B8 #CEDILLA
0xB9 0x0161 #LATIN SMALL LETTER S WITH CARON
0xBA 0x015F #LATIN SMALL LETTER S WITH CEDILLA
0xBB 0x0165 #LATIN SMALL LETTER T WITH CARON
0xBC 0x017A #LATIN SMALL LETTER Z WITH ACUTE
0xBD 0x02DD #DOUBLE ACUTE ACCENT
0xBE 0x017E #LATIN SMALL LETTER Z WITH CARON
0xBF 0x017C #LATIN SMALL LETTER Z WITH DOT ABOVE
0xC0 0x0154 #LATIN CAPITAL LETTER R WITH ACUTE
0xC1 0x00C1 #LATIN CAPITAL LETTER A WITH ACUTE
0xC2 0x00C2 #LATIN CAPITAL LETTER A WITH CIRCUMFLEX
0xC3 0x0102 #LATIN CAPITAL LETTER A WITH BREVE
0xC4 0x00C4 #LATIN CAPITAL LETTER A WITH DIAERESIS
0xC5 0x0139 #LATIN CAPITAL LETTER L WITH ACUTE
0xC6 0x0106 #LATIN CAPITAL LETTER C WITH ACUTE
0xC7 0x00C7 #LATIN CAPITAL LETTER C WITH CEDILLA
0xC8 0x010C #LATIN CAPITAL LETTER C WITH CARON
0xC9 0x00C9 #LATIN CAPITAL LETTER E WITH ACUTE
0xCA 0x0118 #LATIN CAPITAL LETTER E WITH OGONEK
0xCB 0x00CB #LATIN CAPITAL LETTER E WITH DIAERESIS
0xCC 0x011A #LATIN CAPITAL LETTER E WITH CARON
0xCD 0x00CD #LATIN CAPITAL LETTER I WITH ACUTE
0xCE 0x00CE #LATIN CAPITAL LETTER I WITH CIRCUMFLEX
0xCF 0x010E #LATIN CAPITAL LETTER D WITH CARON
0xD0 0x0110 #LATIN CAPITAL LETTER D WITH STROKE
0xD1 0x0143 #LATIN CAPITAL LETTER N WITH ACUTE
0xD2 0x0147 #LATIN CAPITAL LETTER N WITH CARON
0xD3 0x00D3 #LATIN CAPITAL LETTER O WITH ACUTE
0xD4 0x00D4 #LATIN CAPITAL LETTER O WITH CIRCUMFLEX
0xD5 0x0150 #LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
0xD6 0x00D6 #LATIN CAPITAL LETTER O WITH DIAERESIS
0xD7 0x00D7 #MULTIPLICATION SIGN
0xD8 0x0158 #LATIN CAPITAL LETTER R WITH CARON
0xD9 0x016E #LATIN CAPITAL LETTER U WITH RING ABOVE
0xDA 0x00DA #LATIN CAPITAL LETTER U WITH ACUTE
0xDB 0x0170 #LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
0xDC 0x00DC #LATIN CAPITAL LETTER U WITH DIAERESIS
0xDD 0x00DD #LATIN CAPITAL LETTER Y WITH ACUTE
0xDE 0x0162 #LATIN CAPITAL LETTER T WITH CEDILLA
0xDF 0x00DF #LATIN SMALL LETTER SHARP S
0xE0 0x0155 #LATIN SMALL LETTER R WITH ACUTE
0xE1 0x00E1 #LATIN SMALL LETTER A WITH ACUTE
0xE2 0x00E2 #LATIN SMALL LETTER A WITH CIRCUMFLEX
0xE3 0x0103 #LATIN SMALL LETTER A WITH BREVE
0xE4 0x00E4 #LATIN SMALL LETTER A WITH DIAERESIS
0xE5 0x013A #LATIN SMALL LETTER L WITH ACUTE
0xE6 0x0107 #LATIN SMALL LETTER C WITH ACUTE
0xE7 0x00E7 #LATIN SMALL LETTER C WITH CEDILLA
0xE8 0x010D #LATIN SMALL LETTER C WITH CARON
0xE9 0x00E9 #LATIN SMALL LETTER E WITH ACUTE
0xEA 0x0119 #LATIN SMALL LETTER E WITH OGONEK
0xEB 0x00EB #LATIN SMALL LETTER E WITH DIAERESIS
0xEC 0x011B #LATIN SMALL LETTER E WITH CARON
0xED 0x00ED #LATIN SMALL LETTER I WITH ACUTE
0xEE 0x00EE #LATIN SMALL LETTER I WITH CIRCUMFLEX
0xEF 0x010F #LATIN SMALL LETTER D WITH CARON
0xF0 0x0111 #LATIN SMALL LETTER D WITH STROKE
0xF1 0x0144 #LATIN SMALL LETTER N WITH ACUTE
0xF2 0x0148 #LATIN SMALL LETTER N WITH CARON
0xF3 0x00F3 #LATIN SMALL LETTER O WITH ACUTE
0xF4 0x00F4 #LATIN SMALL LETTER O WITH CIRCUMFLEX
0xF5 0x0151 #LATIN SMALL LETTER O WITH DOUBLE ACUTE
0xF6 0x00F6 #LATIN SMALL LETTER O WITH DIAERESIS
0xF7 0x00F7 #DIVISION SIGN
0xF8 0x0159 #LATIN SMALL LETTER R WITH CARON
0xF9 0x016F #LATIN SMALL LETTER U WITH RING ABOVE
0xFA 0x00FA #LATIN SMALL LETTER U WITH ACUTE
0xFB 0x0171 #LATIN SMALL LETTER U WITH DOUBLE ACUTE
0xFC 0x00FC #LATIN SMALL LETTER U WITH DIAERESIS
0xFD 0x00FD #LATIN SMALL LETTER Y WITH ACUTE
0xFE 0x0163 #LATIN SMALL LETTER T WITH CEDILLA
0xFF 0x02D9 #DOT ABOVE

298
Unicode/8859_3.cp Normal file
View File

@ -0,0 +1,298 @@
ISO 8859-3 (Esperanto, Maltese)
"ISO-8859-3", "8859-3"
#
# Name: ISO/IEC 8859-3:1999 to Unicode
# Unicode version: 3.0
# Table version: 1.0
# Table format: Format A
# Date: 1999 July 27
# Authors: Ken Whistler <kenw@sybase.com>
#
# Copyright (c) 1991-1999 Unicode, Inc. All Rights reserved.
#
# This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
# No claims are made as to fitness for any particular purpose. No
# warranties of any kind are expressed or implied. The recipient
# agrees to determine applicability of information provided. If this
# file has been provided on optical media by Unicode, Inc., the sole
# remedy for any claim will be exchange of defective media within 90
# days of receipt.
#
# Unicode, Inc. hereby grants the right to freely use the information
# supplied in this file in the creation of products supporting the
# Unicode Standard, and to make copies of this file in any form for
# internal or external distribution as long as this notice remains
# attached.
#
# General notes:
#
# This table contains the data the Unicode Consortium has on how
# ISO/IEC 8859-3:1999 characters map into Unicode.
#
# Format: Three tab-separated columns
# Column #1 is the ISO/IEC 8859-3 code (in hex as 0xXX)
# Column #2 is the Unicode (in hex as 0xXXXX)
# Column #3 the Unicode name (follows a comment sign, '#')
#
# The entries are in ISO/IEC 8859-3 order.
#
# Version history
# 1.0 version updates 0.1 version by adding mappings for all
# control characters.
#
# Updated versions of this file may be found in:
# <ftp://ftp.unicode.org/Public/MAPPINGS/>
#
# Any comments or problems, contact <errata@unicode.org>
# Please note that <errata@unicode.org> is an archival address;
# notices will be checked, but do not expect an immediate response.
#
0x00 0x0000 # NULL
0x01 0x0001 # START OF HEADING
0x02 0x0002 # START OF TEXT
0x03 0x0003 # END OF TEXT
0x04 0x0004 # END OF TRANSMISSION
0x05 0x0005 # ENQUIRY
0x06 0x0006 # ACKNOWLEDGE
0x07 0x0007 # BELL
0x08 0x0008 # BACKSPACE
0x09 0x0009 # HORIZONTAL TABULATION
0x0A 0x000A # LINE FEED
0x0B 0x000B # VERTICAL TABULATION
0x0C 0x000C # FORM FEED
0x0D 0x000D # CARRIAGE RETURN
0x0E 0x000E # SHIFT OUT
0x0F 0x000F # SHIFT IN
0x10 0x0010 # DATA LINK ESCAPE
0x11 0x0011 # DEVICE CONTROL ONE
0x12 0x0012 # DEVICE CONTROL TWO
0x13 0x0013 # DEVICE CONTROL THREE
0x14 0x0014 # DEVICE CONTROL FOUR
0x15 0x0015 # NEGATIVE ACKNOWLEDGE
0x16 0x0016 # SYNCHRONOUS IDLE
0x17 0x0017 # END OF TRANSMISSION BLOCK
0x18 0x0018 # CANCEL
0x19 0x0019 # END OF MEDIUM
0x1A 0x001A # SUBSTITUTE
0x1B 0x001B # ESCAPE
0x1C 0x001C # FILE SEPARATOR
0x1D 0x001D # GROUP SEPARATOR
0x1E 0x001E # RECORD SEPARATOR
0x1F 0x001F # UNIT SEPARATOR
0x20 0x0020 # SPACE
0x21 0x0021 # EXCLAMATION MARK
0x22 0x0022 # QUOTATION MARK
0x23 0x0023 # NUMBER SIGN
0x24 0x0024 # DOLLAR SIGN
0x25 0x0025 # PERCENT SIGN
0x26 0x0026 # AMPERSAND
0x27 0x0027 # APOSTROPHE
0x28 0x0028 # LEFT PARENTHESIS
0x29 0x0029 # RIGHT PARENTHESIS
0x2A 0x002A # ASTERISK
0x2B 0x002B # PLUS SIGN
0x2C 0x002C # COMMA
0x2D 0x002D # HYPHEN-MINUS
0x2E 0x002E # FULL STOP
0x2F 0x002F # SOLIDUS
0x30 0x0030 # DIGIT ZERO
0x31 0x0031 # DIGIT ONE
0x32 0x0032 # DIGIT TWO
0x33 0x0033 # DIGIT THREE
0x34 0x0034 # DIGIT FOUR
0x35 0x0035 # DIGIT FIVE
0x36 0x0036 # DIGIT SIX
0x37 0x0037 # DIGIT SEVEN
0x38 0x0038 # DIGIT EIGHT
0x39 0x0039 # DIGIT NINE
0x3A 0x003A # COLON
0x3B 0x003B # SEMICOLON
0x3C 0x003C # LESS-THAN SIGN
0x3D 0x003D # EQUALS SIGN
0x3E 0x003E # GREATER-THAN SIGN
0x3F 0x003F # QUESTION MARK
0x40 0x0040 # COMMERCIAL AT
0x41 0x0041 # LATIN CAPITAL LETTER A
0x42 0x0042 # LATIN CAPITAL LETTER B
0x43 0x0043 # LATIN CAPITAL LETTER C
0x44 0x0044 # LATIN CAPITAL LETTER D
0x45 0x0045 # LATIN CAPITAL LETTER E
0x46 0x0046 # LATIN CAPITAL LETTER F
0x47 0x0047 # LATIN CAPITAL LETTER G
0x48 0x0048 # LATIN CAPITAL LETTER H
0x49 0x0049 # LATIN CAPITAL LETTER I
0x4A 0x004A # LATIN CAPITAL LETTER J
0x4B 0x004B # LATIN CAPITAL LETTER K
0x4C 0x004C # LATIN CAPITAL LETTER L
0x4D 0x004D # LATIN CAPITAL LETTER M
0x4E 0x004E # LATIN CAPITAL LETTER N
0x4F 0x004F # LATIN CAPITAL LETTER O
0x50 0x0050 # LATIN CAPITAL LETTER P
0x51 0x0051 # LATIN CAPITAL LETTER Q
0x52 0x0052 # LATIN CAPITAL LETTER R
0x53 0x0053 # LATIN CAPITAL LETTER S
0x54 0x0054 # LATIN CAPITAL LETTER T
0x55 0x0055 # LATIN CAPITAL LETTER U
0x56 0x0056 # LATIN CAPITAL LETTER V
0x57 0x0057 # LATIN CAPITAL LETTER W
0x58 0x0058 # LATIN CAPITAL LETTER X
0x59 0x0059 # LATIN CAPITAL LETTER Y
0x5A 0x005A # LATIN CAPITAL LETTER Z
0x5B 0x005B # LEFT SQUARE BRACKET
0x5C 0x005C # REVERSE SOLIDUS
0x5D 0x005D # RIGHT SQUARE BRACKET
0x5E 0x005E # CIRCUMFLEX ACCENT
0x5F 0x005F # LOW LINE
0x60 0x0060 # GRAVE ACCENT
0x61 0x0061 # LATIN SMALL LETTER A
0x62 0x0062 # LATIN SMALL LETTER B
0x63 0x0063 # LATIN SMALL LETTER C
0x64 0x0064 # LATIN SMALL LETTER D
0x65 0x0065 # LATIN SMALL LETTER E
0x66 0x0066 # LATIN SMALL LETTER F
0x67 0x0067 # LATIN SMALL LETTER G
0x68 0x0068 # LATIN SMALL LETTER H
0x69 0x0069 # LATIN SMALL LETTER I
0x6A 0x006A # LATIN SMALL LETTER J
0x6B 0x006B # LATIN SMALL LETTER K
0x6C 0x006C # LATIN SMALL LETTER L
0x6D 0x006D # LATIN SMALL LETTER M
0x6E 0x006E # LATIN SMALL LETTER N
0x6F 0x006F # LATIN SMALL LETTER O
0x70 0x0070 # LATIN SMALL LETTER P
0x71 0x0071 # LATIN SMALL LETTER Q
0x72 0x0072 # LATIN SMALL LETTER R
0x73 0x0073 # LATIN SMALL LETTER S
0x74 0x0074 # LATIN SMALL LETTER T
0x75 0x0075 # LATIN SMALL LETTER U
0x76 0x0076 # LATIN SMALL LETTER V
0x77 0x0077 # LATIN SMALL LETTER W
0x78 0x0078 # LATIN SMALL LETTER X
0x79 0x0079 # LATIN SMALL LETTER Y
0x7A 0x007A # LATIN SMALL LETTER Z
0x7B 0x007B # LEFT CURLY BRACKET
0x7C 0x007C # VERTICAL LINE
0x7D 0x007D # RIGHT CURLY BRACKET
0x7E 0x007E # TILDE
0x7F 0x007F # DELETE
0x80 0x0080 # <control>
0x81 0x0081 # <control>
0x82 0x0082 # <control>
0x83 0x0083 # <control>
0x84 0x0084 # <control>
0x85 0x0085 # <control>
0x86 0x0086 # <control>
0x87 0x0087 # <control>
0x88 0x0088 # <control>
0x89 0x0089 # <control>
0x8A 0x008A # <control>
0x8B 0x008B # <control>
0x8C 0x008C # <control>
0x8D 0x008D # <control>
0x8E 0x008E # <control>
0x8F 0x008F # <control>
0x90 0x0090 # <control>
0x91 0x0091 # <control>
0x92 0x0092 # <control>
0x93 0x0093 # <control>
0x94 0x0094 # <control>
0x95 0x0095 # <control>
0x96 0x0096 # <control>
0x97 0x0097 # <control>
0x98 0x0098 # <control>
0x99 0x0099 # <control>
0x9A 0x009A # <control>
0x9B 0x009B # <control>
0x9C 0x009C # <control>
0x9D 0x009D # <control>
0x9E 0x009E # <control>
0x9F 0x009F # <control>
0xA0 0x00A0 # NO-BREAK SPACE
0xA1 0x0126 # LATIN CAPITAL LETTER H WITH STROKE
0xA2 0x02D8 # BREVE
0xA3 0x00A3 # POUND SIGN
0xA4 0x00A4 # CURRENCY SIGN
0xA6 0x0124 # LATIN CAPITAL LETTER H WITH CIRCUMFLEX
0xA7 0x00A7 # SECTION SIGN
0xA8 0x00A8 # DIAERESIS
0xA9 0x0130 # LATIN CAPITAL LETTER I WITH DOT ABOVE
0xAA 0x015E # LATIN CAPITAL LETTER S WITH CEDILLA
0xAB 0x011E # LATIN CAPITAL LETTER G WITH BREVE
0xAC 0x0134 # LATIN CAPITAL LETTER J WITH CIRCUMFLEX
0xAD 0x00AD # SOFT HYPHEN
0xAF 0x017B # LATIN CAPITAL LETTER Z WITH DOT ABOVE
0xB0 0x00B0 # DEGREE SIGN
0xB1 0x0127 # LATIN SMALL LETTER H WITH STROKE
0xB2 0x00B2 # SUPERSCRIPT TWO
0xB3 0x00B3 # SUPERSCRIPT THREE
0xB4 0x00B4 # ACUTE ACCENT
0xB5 0x00B5 # MICRO SIGN
0xB6 0x0125 # LATIN SMALL LETTER H WITH CIRCUMFLEX
0xB7 0x00B7 # MIDDLE DOT
0xB8 0x00B8 # CEDILLA
0xB9 0x0131 # LATIN SMALL LETTER DOTLESS I
0xBA 0x015F # LATIN SMALL LETTER S WITH CEDILLA
0xBB 0x011F # LATIN SMALL LETTER G WITH BREVE
0xBC 0x0135 # LATIN SMALL LETTER J WITH CIRCUMFLEX
0xBD 0x00BD # VULGAR FRACTION ONE HALF
0xBF 0x017C # LATIN SMALL LETTER Z WITH DOT ABOVE
0xC0 0x00C0 # LATIN CAPITAL LETTER A WITH GRAVE
0xC1 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE
0xC2 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
0xC5 0x010A # LATIN CAPITAL LETTER C WITH DOT ABOVE
0xC6 0x0108 # LATIN CAPITAL LETTER C WITH CIRCUMFLEX
0xC7 0x00C7 # LATIN CAPITAL LETTER C WITH CEDILLA
0xC8 0x00C8 # LATIN CAPITAL LETTER E WITH GRAVE
0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE
0xCA 0x00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
0xCB 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS
0xCC 0x00CC # LATIN CAPITAL LETTER I WITH GRAVE
0xCD 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE
0xCE 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
0xCF 0x00CF # LATIN CAPITAL LETTER I WITH DIAERESIS
0xD1 0x00D1 # LATIN CAPITAL LETTER N WITH TILDE
0xD2 0x00D2 # LATIN CAPITAL LETTER O WITH GRAVE
0xD3 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE
0xD4 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
0xD5 0x0120 # LATIN CAPITAL LETTER G WITH DOT ABOVE
0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
0xD7 0x00D7 # MULTIPLICATION SIGN
0xD8 0x011C # LATIN CAPITAL LETTER G WITH CIRCUMFLEX
0xD9 0x00D9 # LATIN CAPITAL LETTER U WITH GRAVE
0xDA 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE
0xDB 0x00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
0xDD 0x016C # LATIN CAPITAL LETTER U WITH BREVE
0xDE 0x015C # LATIN CAPITAL LETTER S WITH CIRCUMFLEX
0xDF 0x00DF # LATIN SMALL LETTER SHARP S
0xE0 0x00E0 # LATIN SMALL LETTER A WITH GRAVE
0xE1 0x00E1 # LATIN SMALL LETTER A WITH ACUTE
0xE2 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX
0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS
0xE5 0x010B # LATIN SMALL LETTER C WITH DOT ABOVE
0xE6 0x0109 # LATIN SMALL LETTER C WITH CIRCUMFLEX
0xE7 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA
0xE8 0x00E8 # LATIN SMALL LETTER E WITH GRAVE
0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE
0xEA 0x00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX
0xEB 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS
0xEC 0x00EC # LATIN SMALL LETTER I WITH GRAVE
0xED 0x00ED # LATIN SMALL LETTER I WITH ACUTE
0xEE 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX
0xEF 0x00EF # LATIN SMALL LETTER I WITH DIAERESIS
0xF1 0x00F1 # LATIN SMALL LETTER N WITH TILDE
0xF2 0x00F2 # LATIN SMALL LETTER O WITH GRAVE
0xF3 0x00F3 # LATIN SMALL LETTER O WITH ACUTE
0xF4 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX
0xF5 0x0121 # LATIN SMALL LETTER G WITH DOT ABOVE
0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS
0xF7 0x00F7 # DIVISION SIGN
0xF8 0x011D # LATIN SMALL LETTER G WITH CIRCUMFLEX
0xF9 0x00F9 # LATIN SMALL LETTER U WITH GRAVE
0xFA 0x00FA # LATIN SMALL LETTER U WITH ACUTE
0xFB 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX
0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS
0xFD 0x016D # LATIN SMALL LETTER U WITH BREVE
0xFE 0x015D # LATIN SMALL LETTER S WITH CIRCUMFLEX
0xFF 0x02D9 # DOT ABOVE

133
Unicode/8859_4.cp Normal file
View File

@ -0,0 +1,133 @@
ISO 8859-4 (Scandinavia, Baltic)
"ISO-8859-4", "8859-4", "iso-ir-110", "latin4", "l4","iso-latin4"
0x20-0x7e idem
#
0x80 0x0080 #PADDING CHARACTER (PAD)
0x81 0x0081 #HIGH OCTET PRESET (HOP)
0x82 0x0082 #BREAK PERMITTED HERE (BPH)
0x83 0x0083 #NO BREAK HERE (NBH)
0x84 0x0084 #INDEX (IND)
0x85 0x0085 #NEXT LINE (NEL)
0x86 0x0086 #START OF SELECTED AREA (SSA)
0x87 0x0087 #END OF SELECTED AREA (ESA)
0x88 0x0088 #CHARACTER TABULATION SET (HTS)
0x89 0x0089 #CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
0x8A 0x008A #LINE TABULATION SET (VTS)
0x8B 0x008B #PARTIAL LINE FORWARD (PLD)
0x8C 0x008C #PARTIAL LINE BACKWARD (PLU)
0x8D 0x008D #REVERSE LINE FEED (RI)
0x8E 0x008E #SINGLE-SHIFT TWO (SS2)
0x8F 0x008F #SINGLE-SHIFT THREE (SS3)
0x90 0x0090 #DEVICE CONTROL STRING (DCS)
0x91 0x0091 #PRIVATE USE ONE (PU1)
0x92 0x0092 #PRIVATE USE TWO (PU2)
0x93 0x0093 #SET TRANSMIT STATE (STS)
0x94 0x0094 #CANCEL CHARACTER (CCH)
0x95 0x0095 #MESSAGE WAITING (MW)
0x96 0x0096 #START OF GUARDED AREA (SPA)
0x97 0x0097 #END OF GUARDED AREA (EPA)
0x98 0x0098 #START OF STRING (SOS)
0x99 0x0099 #SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
0x9A 0x009A #SINGLE CHARACTER INTRODUCER (SCI)
0x9B 0x009B #CONTROL SEQUENCE INTRODUCER (CSI)
0x9C 0x009C #STRING TERMINATOR (ST)
0x9D 0x009D #OPERATING SYSTEM COMMAND (OSC)
0x9E 0x009E #PRIVACY MESSAGE (PM)
0x9F 0x009F #APPLICATION PROGRAM COMMAND (APC)
0xA0 0x00A0 #NO-BREAK SPACE
0xA1 0x0104 #LATIN CAPITAL LETTER A WITH OGONEK
0xA2 0x0138 #LATIN SMALL LETTER KRA (Greenlandic)
0xA3 0x0156 #LATIN CAPITAL LETTER R WITH CEDILLA
0xA4 0x00A4 #CURRENCY SIGN
0xA5 0x0128 #LATIN CAPITAL LETTER I WITH TILDE
0xA6 0x013B #LATIN CAPITAL LETTER L WITH CEDILLA
0xA7 0x00A7 #SECTION SIGN
0xA8 0x00A8 #DIAERESIS
0xA9 0x0160 #LATIN CAPITAL LETTER S WITH CARON
0xAA 0x0112 #LATIN CAPITAL LETTER E WITH MACRON
0xAB 0x0122 #LATIN CAPITAL LETTER G WITH CEDILLA
0xAC 0x0166 #LATIN CAPITAL LETTER T WITH STROKE
0xAD 0x00AD #SOFT HYPHEN
0xAE 0x017D #LATIN CAPITAL LETTER Z WITH CARON
0xAF 0x00AF #MACRON
0xB0 0x00B0 #DEGREE SIGN
0xB1 0x0105 #LATIN SMALL LETTER A WITH OGONEK
0xB2 0x02DB #OGONEK
0xB3 0x0157 #LATIN SMALL LETTER R WITH CEDILLA
0xB4 0x00B4 #ACUTE ACCENT
0xB5 0x0129 #LATIN SMALL LETTER I WITH TILDE
0xB6 0x013C #LATIN SMALL LETTER L WITH CEDILLA
0xB7 0x02C7 #CARON (Mandarin Chinese third tone)
0xB8 0x00B8 #CEDILLA
0xB9 0x0161 #LATIN SMALL LETTER S WITH CARON
0xBA 0x0113 #LATIN SMALL LETTER E WITH MACRON
0xBB 0x0123 #LATIN SMALL LETTER G WITH CEDILLA
0xBC 0x0167 #LATIN SMALL LETTER T WITH STROKE
0xBD 0x014A #LATIN CAPITAL LETTER ENG (Sami)
0xBE 0x017E #LATIN SMALL LETTER Z WITH CARON
0xBF 0x014B #LATIN SMALL LETTER ENG (Sami)
0xC0 0x0100 #LATIN CAPITAL LETTER A WITH MACRON
0xC1 0x00C1 #LATIN CAPITAL LETTER A WITH ACUTE
0xC2 0x00C2 #LATIN CAPITAL LETTER A WITH CIRCUMFLEX
0xC3 0x00C3 #LATIN CAPITAL LETTER A WITH TILDE
0xC4 0x00C4 #LATIN CAPITAL LETTER A WITH DIAERESIS
0xC5 0x00C5 #LATIN CAPITAL LETTER A WITH RING ABOVE
0xC6 0x00C6 #LATIN CAPITAL LETTER AE
0xC7 0x012E #LATIN CAPITAL LETTER I WITH OGONEK
0xC8 0x010C #LATIN CAPITAL LETTER C WITH CARON
0xC9 0x00C9 #LATIN CAPITAL LETTER E WITH ACUTE
0xCA 0x0118 #LATIN CAPITAL LETTER E WITH OGONEK
0xCB 0x00CB #LATIN CAPITAL LETTER E WITH DIAERESIS
0xCC 0x0116 #LATIN CAPITAL LETTER E WITH DOT ABOVE
0xCD 0x00CD #LATIN CAPITAL LETTER I WITH ACUTE
0xCE 0x00CE #LATIN CAPITAL LETTER I WITH CIRCUMFLEX
0xCF 0x012A #LATIN CAPITAL LETTER I WITH MACRON
0xD0 0x0110 #LATIN CAPITAL LETTER D WITH STROKE
0xD1 0x0145 #LATIN CAPITAL LETTER N WITH CEDILLA
0xD2 0x014C #LATIN CAPITAL LETTER O WITH MACRON
0xD3 0x0136 #LATIN CAPITAL LETTER K WITH CEDILLA
0xD4 0x00D4 #LATIN CAPITAL LETTER O WITH CIRCUMFLEX
0xD5 0x00D5 #LATIN CAPITAL LETTER O WITH TILDE
0xD6 0x00D6 #LATIN CAPITAL LETTER O WITH DIAERESIS
0xD7 0x00D7 #MULTIPLICATION SIGN
0xD8 0x00D8 #LATIN CAPITAL LETTER O WITH STROKE
0xD9 0x0172 #LATIN CAPITAL LETTER U WITH OGONEK
0xDA 0x00DA #LATIN CAPITAL LETTER U WITH ACUTE
0xDB 0x00DB #LATIN CAPITAL LETTER U WITH CIRCUMFLEX
0xDC 0x00DC #LATIN CAPITAL LETTER U WITH DIAERESIS
0xDD 0x0168 #LATIN CAPITAL LETTER U WITH TILDE
0xDE 0x016A #LATIN CAPITAL LETTER U WITH MACRON
0xDF 0x00DF #LATIN SMALL LETTER SHARP S (German)
0xE0 0x0101 #LATIN SMALL LETTER A WITH MACRON
0xE1 0x00E1 #LATIN SMALL LETTER A WITH ACUTE
0xE2 0x00E2 #LATIN SMALL LETTER A WITH CIRCUMFLEX
0xE3 0x00E3 #LATIN SMALL LETTER A WITH TILDE
0xE4 0x00E4 #LATIN SMALL LETTER A WITH DIAERESIS
0xE5 0x00E5 #LATIN SMALL LETTER A WITH RING ABOVE
0xE6 0x00E6 #LATIN SMALL LETTER AE
0xE7 0x012F #LATIN SMALL LETTER I WITH OGONEK
0xE8 0x010D #LATIN SMALL LETTER C WITH CARON
0xE9 0x00E9 #LATIN SMALL LETTER E WITH ACUTE
0xEA 0x0119 #LATIN SMALL LETTER E WITH OGONEK
0xEB 0x00EB #LATIN SMALL LETTER E WITH DIAERESIS
0xEC 0x0117 #LATIN SMALL LETTER E WITH DOT ABOVE
0xED 0x00ED #LATIN SMALL LETTER I WITH ACUTE
0xEE 0x00EE #LATIN SMALL LETTER I WITH CIRCUMFLEX
0xEF 0x012B #LATIN SMALL LETTER I WITH MACRON
0xF0 0x0111 #LATIN SMALL LETTER D WITH STROKE
0xF1 0x0146 #LATIN SMALL LETTER N WITH CEDILLA
0xF2 0x014D #LATIN SMALL LETTER O WITH MACRON
0xF3 0x0137 #LATIN SMALL LETTER K WITH CEDILLA
0xF4 0x00F4 #LATIN SMALL LETTER O WITH CIRCUMFLEX
0xF5 0x00F5 #LATIN SMALL LETTER O WITH TILDE
0xF6 0x00F6 #LATIN SMALL LETTER O WITH DIAERESIS
0xF7 0x00F7 #DIVISION SIGN
0xF8 0x00F8 #LATIN SMALL LETTER O WITH STROKE
0xF9 0x0173 #LATIN SMALL LETTER U WITH OGONEK
0xFA 0x00FA #LATIN SMALL LETTER U WITH ACUTE
0xFB 0x00FB #LATIN SMALL LETTER U WITH CIRCUMFLEX
0xFC 0x00FC #LATIN SMALL LETTER U WITH DIAERESIS
0xFD 0x0169 #LATIN SMALL LETTER U WITH TILDE
0xFE 0x016B #LATIN SMALL LETTER U WITH MACRON
0xFF 0x02D9 #DOT ABOVE (Mandarin Chinese light tone)

305
Unicode/8859_5.cp Normal file
View File

@ -0,0 +1,305 @@
ISO 8859-5 (Cyrillic)
"ISO-8859-5", "8859-5"
#
# Name: ISO 8859-5:1999 to Unicode
# Unicode version: 3.0
# Table version: 1.0
# Table format: Format A
# Date: 1999 July 27
# Authors: Ken Whistler <kenw@sybase.com>
#
# Copyright (c) 1991-1999 Unicode, Inc. All Rights reserved.
#
# This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
# No claims are made as to fitness for any particular purpose. No
# warranties of any kind are expressed or implied. The recipient
# agrees to determine applicability of information provided. If this
# file has been provided on optical media by Unicode, Inc., the sole
# remedy for any claim will be exchange of defective media within 90
# days of receipt.
#
# Unicode, Inc. hereby grants the right to freely use the information
# supplied in this file in the creation of products supporting the
# Unicode Standard, and to make copies of this file in any form for
# internal or external distribution as long as this notice remains
# attached.
#
# General notes:
#
# This table contains the data the Unicode Consortium has on how
# ISO/IEC 8859-5:1999 characters map into Unicode.
#
# Format: Three tab-separated columns
# Column #1 is the ISO/IEC 8859-5 code (in hex as 0xXX)
# Column #2 is the Unicode (in hex as 0xXXXX)
# Column #3 the Unicode name (follows a comment sign, '#')
#
# The entries are in ISO/IEC 8859-5 order.
#
# Version history
# 1.0 version updates 0.1 version by adding mappings for all
# control characters.
#
# Updated versions of this file may be found in:
# <ftp://ftp.unicode.org/Public/MAPPINGS/>
#
# Any comments or problems, contact <errata@unicode.org>
# Please note that <errata@unicode.org> is an archival address;
# notices will be checked, but do not expect an immediate response.
#
0x00 0x0000 # NULL
0x01 0x0001 # START OF HEADING
0x02 0x0002 # START OF TEXT
0x03 0x0003 # END OF TEXT
0x04 0x0004 # END OF TRANSMISSION
0x05 0x0005 # ENQUIRY
0x06 0x0006 # ACKNOWLEDGE
0x07 0x0007 # BELL
0x08 0x0008 # BACKSPACE
0x09 0x0009 # HORIZONTAL TABULATION
0x0A 0x000A # LINE FEED
0x0B 0x000B # VERTICAL TABULATION
0x0C 0x000C # FORM FEED
0x0D 0x000D # CARRIAGE RETURN
0x0E 0x000E # SHIFT OUT
0x0F 0x000F # SHIFT IN
0x10 0x0010 # DATA LINK ESCAPE
0x11 0x0011 # DEVICE CONTROL ONE
0x12 0x0012 # DEVICE CONTROL TWO
0x13 0x0013 # DEVICE CONTROL THREE
0x14 0x0014 # DEVICE CONTROL FOUR
0x15 0x0015 # NEGATIVE ACKNOWLEDGE
0x16 0x0016 # SYNCHRONOUS IDLE
0x17 0x0017 # END OF TRANSMISSION BLOCK
0x18 0x0018 # CANCEL
0x19 0x0019 # END OF MEDIUM
0x1A 0x001A # SUBSTITUTE
0x1B 0x001B # ESCAPE
0x1C 0x001C # FILE SEPARATOR
0x1D 0x001D # GROUP SEPARATOR
0x1E 0x001E # RECORD SEPARATOR
0x1F 0x001F # UNIT SEPARATOR
0x20 0x0020 # SPACE
0x21 0x0021 # EXCLAMATION MARK
0x22 0x0022 # QUOTATION MARK
0x23 0x0023 # NUMBER SIGN
0x24 0x0024 # DOLLAR SIGN
0x25 0x0025 # PERCENT SIGN
0x26 0x0026 # AMPERSAND
0x27 0x0027 # APOSTROPHE
0x28 0x0028 # LEFT PARENTHESIS
0x29 0x0029 # RIGHT PARENTHESIS
0x2A 0x002A # ASTERISK
0x2B 0x002B # PLUS SIGN
0x2C 0x002C # COMMA
0x2D 0x002D # HYPHEN-MINUS
0x2E 0x002E # FULL STOP
0x2F 0x002F # SOLIDUS
0x30 0x0030 # DIGIT ZERO
0x31 0x0031 # DIGIT ONE
0x32 0x0032 # DIGIT TWO
0x33 0x0033 # DIGIT THREE
0x34 0x0034 # DIGIT FOUR
0x35 0x0035 # DIGIT FIVE
0x36 0x0036 # DIGIT SIX
0x37 0x0037 # DIGIT SEVEN
0x38 0x0038 # DIGIT EIGHT
0x39 0x0039 # DIGIT NINE
0x3A 0x003A # COLON
0x3B 0x003B # SEMICOLON
0x3C 0x003C # LESS-THAN SIGN
0x3D 0x003D # EQUALS SIGN
0x3E 0x003E # GREATER-THAN SIGN
0x3F 0x003F # QUESTION MARK
0x40 0x0040 # COMMERCIAL AT
0x41 0x0041 # LATIN CAPITAL LETTER A
0x42 0x0042 # LATIN CAPITAL LETTER B
0x43 0x0043 # LATIN CAPITAL LETTER C
0x44 0x0044 # LATIN CAPITAL LETTER D
0x45 0x0045 # LATIN CAPITAL LETTER E
0x46 0x0046 # LATIN CAPITAL LETTER F
0x47 0x0047 # LATIN CAPITAL LETTER G
0x48 0x0048 # LATIN CAPITAL LETTER H
0x49 0x0049 # LATIN CAPITAL LETTER I
0x4A 0x004A # LATIN CAPITAL LETTER J
0x4B 0x004B # LATIN CAPITAL LETTER K
0x4C 0x004C # LATIN CAPITAL LETTER L
0x4D 0x004D # LATIN CAPITAL LETTER M
0x4E 0x004E # LATIN CAPITAL LETTER N
0x4F 0x004F # LATIN CAPITAL LETTER O
0x50 0x0050 # LATIN CAPITAL LETTER P
0x51 0x0051 # LATIN CAPITAL LETTER Q
0x52 0x0052 # LATIN CAPITAL LETTER R
0x53 0x0053 # LATIN CAPITAL LETTER S
0x54 0x0054 # LATIN CAPITAL LETTER T
0x55 0x0055 # LATIN CAPITAL LETTER U
0x56 0x0056 # LATIN CAPITAL LETTER V
0x57 0x0057 # LATIN CAPITAL LETTER W
0x58 0x0058 # LATIN CAPITAL LETTER X
0x59 0x0059 # LATIN CAPITAL LETTER Y
0x5A 0x005A # LATIN CAPITAL LETTER Z
0x5B 0x005B # LEFT SQUARE BRACKET
0x5C 0x005C # REVERSE SOLIDUS
0x5D 0x005D # RIGHT SQUARE BRACKET
0x5E 0x005E # CIRCUMFLEX ACCENT
0x5F 0x005F # LOW LINE
0x60 0x0060 # GRAVE ACCENT
0x61 0x0061 # LATIN SMALL LETTER A
0x62 0x0062 # LATIN SMALL LETTER B
0x63 0x0063 # LATIN SMALL LETTER C
0x64 0x0064 # LATIN SMALL LETTER D
0x65 0x0065 # LATIN SMALL LETTER E
0x66 0x0066 # LATIN SMALL LETTER F
0x67 0x0067 # LATIN SMALL LETTER G
0x68 0x0068 # LATIN SMALL LETTER H
0x69 0x0069 # LATIN SMALL LETTER I
0x6A 0x006A # LATIN SMALL LETTER J
0x6B 0x006B # LATIN SMALL LETTER K
0x6C 0x006C # LATIN SMALL LETTER L
0x6D 0x006D # LATIN SMALL LETTER M
0x6E 0x006E # LATIN SMALL LETTER N
0x6F 0x006F # LATIN SMALL LETTER O
0x70 0x0070 # LATIN SMALL LETTER P
0x71 0x0071 # LATIN SMALL LETTER Q
0x72 0x0072 # LATIN SMALL LETTER R
0x73 0x0073 # LATIN SMALL LETTER S
0x74 0x0074 # LATIN SMALL LETTER T
0x75 0x0075 # LATIN SMALL LETTER U
0x76 0x0076 # LATIN SMALL LETTER V
0x77 0x0077 # LATIN SMALL LETTER W
0x78 0x0078 # LATIN SMALL LETTER X
0x79 0x0079 # LATIN SMALL LETTER Y
0x7A 0x007A # LATIN SMALL LETTER Z
0x7B 0x007B # LEFT CURLY BRACKET
0x7C 0x007C # VERTICAL LINE
0x7D 0x007D # RIGHT CURLY BRACKET
0x7E 0x007E # TILDE
0x7F 0x007F # DELETE
0x80 0x0080 # <control>
0x81 0x0081 # <control>
0x82 0x0082 # <control>
0x83 0x0083 # <control>
0x84 0x0084 # <control>
0x85 0x0085 # <control>
0x86 0x0086 # <control>
0x87 0x0087 # <control>
0x88 0x0088 # <control>
0x89 0x0089 # <control>
0x8A 0x008A # <control>
0x8B 0x008B # <control>
0x8C 0x008C # <control>
0x8D 0x008D # <control>
0x8E 0x008E # <control>
0x8F 0x008F # <control>
0x90 0x0090 # <control>
0x91 0x0091 # <control>
0x92 0x0092 # <control>
0x93 0x0093 # <control>
0x94 0x0094 # <control>
0x95 0x0095 # <control>
0x96 0x0096 # <control>
0x97 0x0097 # <control>
0x98 0x0098 # <control>
0x99 0x0099 # <control>
0x9A 0x009A # <control>
0x9B 0x009B # <control>
0x9C 0x009C # <control>
0x9D 0x009D # <control>
0x9E 0x009E # <control>
0x9F 0x009F # <control>
0xA0 0x00A0 # NO-BREAK SPACE
0xA1 0x0401 # CYRILLIC CAPITAL LETTER IO
0xA2 0x0402 # CYRILLIC CAPITAL LETTER DJE
0xA3 0x0403 # CYRILLIC CAPITAL LETTER GJE
0xA4 0x0404 # CYRILLIC CAPITAL LETTER UKRAINIAN IE
0xA5 0x0405 # CYRILLIC CAPITAL LETTER DZE
0xA6 0x0406 # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
0xA7 0x0407 # CYRILLIC CAPITAL LETTER YI
0xA8 0x0408 # CYRILLIC CAPITAL LETTER JE
0xA9 0x0409 # CYRILLIC CAPITAL LETTER LJE
0xAA 0x040A # CYRILLIC CAPITAL LETTER NJE
0xAB 0x040B # CYRILLIC CAPITAL LETTER TSHE
0xAC 0x040C # CYRILLIC CAPITAL LETTER KJE
0xAD 0x00AD # SOFT HYPHEN
0xAE 0x040E # CYRILLIC CAPITAL LETTER SHORT U
0xAF 0x040F # CYRILLIC CAPITAL LETTER DZHE
0xB0 0x0410 # CYRILLIC CAPITAL LETTER A
0xB1 0x0411 # CYRILLIC CAPITAL LETTER BE
0xB2 0x0412 # CYRILLIC CAPITAL LETTER VE
0xB3 0x0413 # CYRILLIC CAPITAL LETTER GHE
0xB4 0x0414 # CYRILLIC CAPITAL LETTER DE
0xB5 0x0415 # CYRILLIC CAPITAL LETTER IE
0xB6 0x0416 # CYRILLIC CAPITAL LETTER ZHE
0xB7 0x0417 # CYRILLIC CAPITAL LETTER ZE
0xB8 0x0418 # CYRILLIC CAPITAL LETTER I
0xB9 0x0419 # CYRILLIC CAPITAL LETTER SHORT I
0xBA 0x041A # CYRILLIC CAPITAL LETTER KA
0xBB 0x041B # CYRILLIC CAPITAL LETTER EL
0xBC 0x041C # CYRILLIC CAPITAL LETTER EM
0xBD 0x041D # CYRILLIC CAPITAL LETTER EN
0xBE 0x041E # CYRILLIC CAPITAL LETTER O
0xBF 0x041F # CYRILLIC CAPITAL LETTER PE
0xC0 0x0420 # CYRILLIC CAPITAL LETTER ER
0xC1 0x0421 # CYRILLIC CAPITAL LETTER ES
0xC2 0x0422 # CYRILLIC CAPITAL LETTER TE
0xC3 0x0423 # CYRILLIC CAPITAL LETTER U
0xC4 0x0424 # CYRILLIC CAPITAL LETTER EF
0xC5 0x0425 # CYRILLIC CAPITAL LETTER HA
0xC6 0x0426 # CYRILLIC CAPITAL LETTER TSE
0xC7 0x0427 # CYRILLIC CAPITAL LETTER CHE
0xC8 0x0428 # CYRILLIC CAPITAL LETTER SHA
0xC9 0x0429 # CYRILLIC CAPITAL LETTER SHCHA
0xCA 0x042A # CYRILLIC CAPITAL LETTER HARD SIGN
0xCB 0x042B # CYRILLIC CAPITAL LETTER YERU
0xCC 0x042C # CYRILLIC CAPITAL LETTER SOFT SIGN
0xCD 0x042D # CYRILLIC CAPITAL LETTER E
0xCE 0x042E # CYRILLIC CAPITAL LETTER YU
0xCF 0x042F # CYRILLIC CAPITAL LETTER YA
0xD0 0x0430 # CYRILLIC SMALL LETTER A
0xD1 0x0431 # CYRILLIC SMALL LETTER BE
0xD2 0x0432 # CYRILLIC SMALL LETTER VE
0xD3 0x0433 # CYRILLIC SMALL LETTER GHE
0xD4 0x0434 # CYRILLIC SMALL LETTER DE
0xD5 0x0435 # CYRILLIC SMALL LETTER IE
0xD6 0x0436 # CYRILLIC SMALL LETTER ZHE
0xD7 0x0437 # CYRILLIC SMALL LETTER ZE
0xD8 0x0438 # CYRILLIC SMALL LETTER I
0xD9 0x0439 # CYRILLIC SMALL LETTER SHORT I
0xDA 0x043A # CYRILLIC SMALL LETTER KA
0xDB 0x043B # CYRILLIC SMALL LETTER EL
0xDC 0x043C # CYRILLIC SMALL LETTER EM
0xDD 0x043D # CYRILLIC SMALL LETTER EN
0xDE 0x043E # CYRILLIC SMALL LETTER O
0xDF 0x043F # CYRILLIC SMALL LETTER PE
0xE0 0x0440 # CYRILLIC SMALL LETTER ER
0xE1 0x0441 # CYRILLIC SMALL LETTER ES
0xE2 0x0442 # CYRILLIC SMALL LETTER TE
0xE3 0x0443 # CYRILLIC SMALL LETTER U
0xE4 0x0444 # CYRILLIC SMALL LETTER EF
0xE5 0x0445 # CYRILLIC SMALL LETTER HA
0xE6 0x0446 # CYRILLIC SMALL LETTER TSE
0xE7 0x0447 # CYRILLIC SMALL LETTER CHE
0xE8 0x0448 # CYRILLIC SMALL LETTER SHA
0xE9 0x0449 # CYRILLIC SMALL LETTER SHCHA
0xEA 0x044A # CYRILLIC SMALL LETTER HARD SIGN
0xEB 0x044B # CYRILLIC SMALL LETTER YERU
0xEC 0x044C # CYRILLIC SMALL LETTER SOFT SIGN
0xED 0x044D # CYRILLIC SMALL LETTER E
0xEE 0x044E # CYRILLIC SMALL LETTER YU
0xEF 0x044F # CYRILLIC SMALL LETTER YA
0xF0 0x2116 # NUMERO SIGN
0xF1 0x0451 # CYRILLIC SMALL LETTER IO
0xF2 0x0452 # CYRILLIC SMALL LETTER DJE
0xF3 0x0453 # CYRILLIC SMALL LETTER GJE
0xF4 0x0454 # CYRILLIC SMALL LETTER UKRAINIAN IE
0xF5 0x0455 # CYRILLIC SMALL LETTER DZE
0xF6 0x0456 # CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
0xF7 0x0457 # CYRILLIC SMALL LETTER YI
0xF8 0x0458 # CYRILLIC SMALL LETTER JE
0xF9 0x0459 # CYRILLIC SMALL LETTER LJE
0xFA 0x045A # CYRILLIC SMALL LETTER NJE
0xFB 0x045B # CYRILLIC SMALL LETTER TSHE
0xFC 0x045C # CYRILLIC SMALL LETTER KJE
0xFD 0x00A7 # SECTION SIGN
0xFE 0x045E # CYRILLIC SMALL LETTER SHORT U
0xFF 0x045F # CYRILLIC SMALL LETTER DZHE

262
Unicode/8859_6.cp Normal file
View File

@ -0,0 +1,262 @@
ISO 8859-6 (Arabic)
"ISO-8859-6", "8859-6"
#
# Name: ISO 8859-6:1999 to Unicode
# Unicode version: 3.0
# Table version: 1.0
# Table format: Format A
# Date: 1999 July 27
# Authors: Ken Whistler <kenw@sybase.com>
#
# Copyright (c) 1991-1999 Unicode, Inc. All Rights reserved.
#
# This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
# No claims are made as to fitness for any particular purpose. No
# warranties of any kind are expressed or implied. The recipient
# agrees to determine applicability of information provided. If this
# file has been provided on optical media by Unicode, Inc., the sole
# remedy for any claim will be exchange of defective media within 90
# days of receipt.
#
# Unicode, Inc. hereby grants the right to freely use the information
# supplied in this file in the creation of products supporting the
# Unicode Standard, and to make copies of this file in any form for
# internal or external distribution as long as this notice remains
# attached.
#
# General notes:
#
# This table contains the data the Unicode Consortium has on how
# ISO/IEC 8859-6:1999 characters map into Unicode.
#
# Format: Three tab-separated columns
# Column #1 is the ISO/IEC 8859-6 code (in hex as 0xXX)
# Column #2 is the Unicode (in hex as 0xXXXX)
# Column #3 the Unicode name (follows a comment sign, '#')
#
# The entries are in ISO/IEC 8859-6 order.
#
# Version history
# 1.0 version updates 0.1 version by adding mappings for all
# control characters.
# 0x30..0x39 remapped to the ASCII digits (U+0030..U+0039) instead
# of the Arabic digits (U+0660..U+0669).
#
# Updated versions of this file may be found in:
# <ftp://ftp.unicode.org/Public/MAPPINGS/>
#
# Any comments or problems, contact <errata@unicode.org>
# Please note that <errata@unicode.org> is an archival address;
# notices will be checked, but do not expect an immediate response.
#
0x00 0x0000 # NULL
0x01 0x0001 # START OF HEADING
0x02 0x0002 # START OF TEXT
0x03 0x0003 # END OF TEXT
0x04 0x0004 # END OF TRANSMISSION
0x05 0x0005 # ENQUIRY
0x06 0x0006 # ACKNOWLEDGE
0x07 0x0007 # BELL
0x08 0x0008 # BACKSPACE
0x09 0x0009 # HORIZONTAL TABULATION
0x0A 0x000A # LINE FEED
0x0B 0x000B # VERTICAL TABULATION
0x0C 0x000C # FORM FEED
0x0D 0x000D # CARRIAGE RETURN
0x0E 0x000E # SHIFT OUT
0x0F 0x000F # SHIFT IN
0x10 0x0010 # DATA LINK ESCAPE
0x11 0x0011 # DEVICE CONTROL ONE
0x12 0x0012 # DEVICE CONTROL TWO
0x13 0x0013 # DEVICE CONTROL THREE
0x14 0x0014 # DEVICE CONTROL FOUR
0x15 0x0015 # NEGATIVE ACKNOWLEDGE
0x16 0x0016 # SYNCHRONOUS IDLE
0x17 0x0017 # END OF TRANSMISSION BLOCK
0x18 0x0018 # CANCEL
0x19 0x0019 # END OF MEDIUM
0x1A 0x001A # SUBSTITUTE
0x1B 0x001B # ESCAPE
0x1C 0x001C # FILE SEPARATOR
0x1D 0x001D # GROUP SEPARATOR
0x1E 0x001E # RECORD SEPARATOR
0x1F 0x001F # UNIT SEPARATOR
0x20 0x0020 # SPACE
0x21 0x0021 # EXCLAMATION MARK
0x22 0x0022 # QUOTATION MARK
0x23 0x0023 # NUMBER SIGN
0x24 0x0024 # DOLLAR SIGN
0x25 0x0025 # PERCENT SIGN
0x26 0x0026 # AMPERSAND
0x27 0x0027 # APOSTROPHE
0x28 0x0028 # LEFT PARENTHESIS
0x29 0x0029 # RIGHT PARENTHESIS
0x2A 0x002A # ASTERISK
0x2B 0x002B # PLUS SIGN
0x2C 0x002C # COMMA
0x2D 0x002D # HYPHEN-MINUS
0x2E 0x002E # FULL STOP
0x2F 0x002F # SOLIDUS
0x30 0x0030 # DIGIT ZERO
0x31 0x0031 # DIGIT ONE
0x32 0x0032 # DIGIT TWO
0x33 0x0033 # DIGIT THREE
0x34 0x0034 # DIGIT FOUR
0x35 0x0035 # DIGIT FIVE
0x36 0x0036 # DIGIT SIX
0x37 0x0037 # DIGIT SEVEN
0x38 0x0038 # DIGIT EIGHT
0x39 0x0039 # DIGIT NINE
0x3A 0x003A # COLON
0x3B 0x003B # SEMICOLON
0x3C 0x003C # LESS-THAN SIGN
0x3D 0x003D # EQUALS SIGN
0x3E 0x003E # GREATER-THAN SIGN
0x3F 0x003F # QUESTION MARK
0x40 0x0040 # COMMERCIAL AT
0x41 0x0041 # LATIN CAPITAL LETTER A
0x42 0x0042 # LATIN CAPITAL LETTER B
0x43 0x0043 # LATIN CAPITAL LETTER C
0x44 0x0044 # LATIN CAPITAL LETTER D
0x45 0x0045 # LATIN CAPITAL LETTER E
0x46 0x0046 # LATIN CAPITAL LETTER F
0x47 0x0047 # LATIN CAPITAL LETTER G
0x48 0x0048 # LATIN CAPITAL LETTER H
0x49 0x0049 # LATIN CAPITAL LETTER I
0x4A 0x004A # LATIN CAPITAL LETTER J
0x4B 0x004B # LATIN CAPITAL LETTER K
0x4C 0x004C # LATIN CAPITAL LETTER L
0x4D 0x004D # LATIN CAPITAL LETTER M
0x4E 0x004E # LATIN CAPITAL LETTER N
0x4F 0x004F # LATIN CAPITAL LETTER O
0x50 0x0050 # LATIN CAPITAL LETTER P
0x51 0x0051 # LATIN CAPITAL LETTER Q
0x52 0x0052 # LATIN CAPITAL LETTER R
0x53 0x0053 # LATIN CAPITAL LETTER S
0x54 0x0054 # LATIN CAPITAL LETTER T
0x55 0x0055 # LATIN CAPITAL LETTER U
0x56 0x0056 # LATIN CAPITAL LETTER V
0x57 0x0057 # LATIN CAPITAL LETTER W
0x58 0x0058 # LATIN CAPITAL LETTER X
0x59 0x0059 # LATIN CAPITAL LETTER Y
0x5A 0x005A # LATIN CAPITAL LETTER Z
0x5B 0x005B # LEFT SQUARE BRACKET
0x5C 0x005C # REVERSE SOLIDUS
0x5D 0x005D # RIGHT SQUARE BRACKET
0x5E 0x005E # CIRCUMFLEX ACCENT
0x5F 0x005F # LOW LINE
0x60 0x0060 # GRAVE ACCENT
0x61 0x0061 # LATIN SMALL LETTER A
0x62 0x0062 # LATIN SMALL LETTER B
0x63 0x0063 # LATIN SMALL LETTER C
0x64 0x0064 # LATIN SMALL LETTER D
0x65 0x0065 # LATIN SMALL LETTER E
0x66 0x0066 # LATIN SMALL LETTER F
0x67 0x0067 # LATIN SMALL LETTER G
0x68 0x0068 # LATIN SMALL LETTER H
0x69 0x0069 # LATIN SMALL LETTER I
0x6A 0x006A # LATIN SMALL LETTER J
0x6B 0x006B # LATIN SMALL LETTER K
0x6C 0x006C # LATIN SMALL LETTER L
0x6D 0x006D # LATIN SMALL LETTER M
0x6E 0x006E # LATIN SMALL LETTER N
0x6F 0x006F # LATIN SMALL LETTER O
0x70 0x0070 # LATIN SMALL LETTER P
0x71 0x0071 # LATIN SMALL LETTER Q
0x72 0x0072 # LATIN SMALL LETTER R
0x73 0x0073 # LATIN SMALL LETTER S
0x74 0x0074 # LATIN SMALL LETTER T
0x75 0x0075 # LATIN SMALL LETTER U
0x76 0x0076 # LATIN SMALL LETTER V
0x77 0x0077 # LATIN SMALL LETTER W
0x78 0x0078 # LATIN SMALL LETTER X
0x79 0x0079 # LATIN SMALL LETTER Y
0x7A 0x007A # LATIN SMALL LETTER Z
0x7B 0x007B # LEFT CURLY BRACKET
0x7C 0x007C # VERTICAL LINE
0x7D 0x007D # RIGHT CURLY BRACKET
0x7E 0x007E # TILDE
0x7F 0x007F # DELETE
0x80 0x0080 # <control>
0x81 0x0081 # <control>
0x82 0x0082 # <control>
0x83 0x0083 # <control>
0x84 0x0084 # <control>
0x85 0x0085 # <control>
0x86 0x0086 # <control>
0x87 0x0087 # <control>
0x88 0x0088 # <control>
0x89 0x0089 # <control>
0x8A 0x008A # <control>
0x8B 0x008B # <control>
0x8C 0x008C # <control>
0x8D 0x008D # <control>
0x8E 0x008E # <control>
0x8F 0x008F # <control>
0x90 0x0090 # <control>
0x91 0x0091 # <control>
0x92 0x0092 # <control>
0x93 0x0093 # <control>
0x94 0x0094 # <control>
0x95 0x0095 # <control>
0x96 0x0096 # <control>
0x97 0x0097 # <control>
0x98 0x0098 # <control>
0x99 0x0099 # <control>
0x9A 0x009A # <control>
0x9B 0x009B # <control>
0x9C 0x009C # <control>
0x9D 0x009D # <control>
0x9E 0x009E # <control>
0x9F 0x009F # <control>
0xA0 0x00A0 # NO-BREAK SPACE
0xA4 0x00A4 # CURRENCY SIGN
0xAC 0x060C # ARABIC COMMA
0xAD 0x00AD # SOFT HYPHEN
0xBB 0x061B # ARABIC SEMICOLON
0xBF 0x061F # ARABIC QUESTION MARK
0xC1 0x0621 # ARABIC LETTER HAMZA
0xC2 0x0622 # ARABIC LETTER ALEF WITH MADDA ABOVE
0xC3 0x0623 # ARABIC LETTER ALEF WITH HAMZA ABOVE
0xC4 0x0624 # ARABIC LETTER WAW WITH HAMZA ABOVE
0xC5 0x0625 # ARABIC LETTER ALEF WITH HAMZA BELOW
0xC6 0x0626 # ARABIC LETTER YEH WITH HAMZA ABOVE
0xC7 0x0627 # ARABIC LETTER ALEF
0xC8 0x0628 # ARABIC LETTER BEH
0xC9 0x0629 # ARABIC LETTER TEH MARBUTA
0xCA 0x062A # ARABIC LETTER TEH
0xCB 0x062B # ARABIC LETTER THEH
0xCC 0x062C # ARABIC LETTER JEEM
0xCD 0x062D # ARABIC LETTER HAH
0xCE 0x062E # ARABIC LETTER KHAH
0xCF 0x062F # ARABIC LETTER DAL
0xD0 0x0630 # ARABIC LETTER THAL
0xD1 0x0631 # ARABIC LETTER REH
0xD2 0x0632 # ARABIC LETTER ZAIN
0xD3 0x0633 # ARABIC LETTER SEEN
0xD4 0x0634 # ARABIC LETTER SHEEN
0xD5 0x0635 # ARABIC LETTER SAD
0xD6 0x0636 # ARABIC LETTER DAD
0xD7 0x0637 # ARABIC LETTER TAH
0xD8 0x0638 # ARABIC LETTER ZAH
0xD9 0x0639 # ARABIC LETTER AIN
0xDA 0x063A # ARABIC LETTER GHAIN
0xE0 0x0640 # ARABIC TATWEEL
0xE1 0x0641 # ARABIC LETTER FEH
0xE2 0x0642 # ARABIC LETTER QAF
0xE3 0x0643 # ARABIC LETTER KAF
0xE4 0x0644 # ARABIC LETTER LAM
0xE5 0x0645 # ARABIC LETTER MEEM
0xE6 0x0646 # ARABIC LETTER NOON
0xE7 0x0647 # ARABIC LETTER HEH
0xE8 0x0648 # ARABIC LETTER WAW
0xE9 0x0649 # ARABIC LETTER ALEF MAKSURA
0xEA 0x064A # ARABIC LETTER YEH
0xEB 0x064B # ARABIC FATHATAN
0xEC 0x064C # ARABIC DAMMATAN
0xED 0x064D # ARABIC KASRATAN
0xEE 0x064E # ARABIC FATHA
0xEF 0x064F # ARABIC DAMMA
0xF0 0x0650 # ARABIC KASRA
0xF1 0x0651 # ARABIC SHADDA
0xF2 0x0652 # ARABIC SUKUN

304
Unicode/8859_7.cp Normal file
View File

@ -0,0 +1,304 @@
ISO 8859-7 (Greek)
"ISO-8859-7", "8859-7", "iso-ir-126", "elot-928"
#
# Name: ISO 8859-7:1987 to Unicode
# Unicode version: 3.0
# Table version: 1.0
# Table format: Format A
# Date: 1999 July 27
# Authors: Ken Whistler <kenw@sybase.com>
#
# Copyright (c) 1991-1999 Unicode, Inc. All Rights reserved.
#
# This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
# No claims are made as to fitness for any particular purpose. No
# warranties of any kind are expressed or implied. The recipient
# agrees to determine applicability of information provided. If this
# file has been provided on optical media by Unicode, Inc., the sole
# remedy for any claim will be exchange of defective media within 90
# days of receipt.
#
# Unicode, Inc. hereby grants the right to freely use the information
# supplied in this file in the creation of products supporting the
# Unicode Standard, and to make copies of this file in any form for
# internal or external distribution as long as this notice remains
# attached.
#
# General notes:
#
# This table contains the data the Unicode Consortium has on how
# ISO 8859-7:1987 characters map into Unicode.
#
# ISO 8859-7:1987 is equivalent to ISO-IR-126, ELOT 928,
# and ECMA 118.
#
# Format: Three tab-separated columns
# Column #1 is the ISO 8859-7 code (in hex as 0xXX)
# Column #2 is the Unicode (in hex as 0xXXXX)
# Column #3 the Unicode name (follows a comment sign, '#')
#
# The entries are in ISO 8859-7 order.
#
# Version history
# 1.0 version updates 0.1 version by adding mappings for all
# control characters.
# Remap 0xA1 to U+2018 (instead of 0x02BD) to match text of 8859-7
# Remap 0xA2 to U+2019 (instead of 0x02BC) to match text of 8859-7
#
# Updated versions of this file may be found in:
# <ftp://ftp.unicode.org/Public/MAPPINGS/>
#
# Any comments or problems, contact <errata@unicode.org>
# Please note that <errata@unicode.org> is an archival address;
# notices will be checked, but do not expect an immediate response.
#
0x00 0x0000 # NULL
0x01 0x0001 # START OF HEADING
0x02 0x0002 # START OF TEXT
0x03 0x0003 # END OF TEXT
0x04 0x0004 # END OF TRANSMISSION
0x05 0x0005 # ENQUIRY
0x06 0x0006 # ACKNOWLEDGE
0x07 0x0007 # BELL
0x08 0x0008 # BACKSPACE
0x09 0x0009 # HORIZONTAL TABULATION
0x0A 0x000A # LINE FEED
0x0B 0x000B # VERTICAL TABULATION
0x0C 0x000C # FORM FEED
0x0D 0x000D # CARRIAGE RETURN
0x0E 0x000E # SHIFT OUT
0x0F 0x000F # SHIFT IN
0x10 0x0010 # DATA LINK ESCAPE
0x11 0x0011 # DEVICE CONTROL ONE
0x12 0x0012 # DEVICE CONTROL TWO
0x13 0x0013 # DEVICE CONTROL THREE
0x14 0x0014 # DEVICE CONTROL FOUR
0x15 0x0015 # NEGATIVE ACKNOWLEDGE
0x16 0x0016 # SYNCHRONOUS IDLE
0x17 0x0017 # END OF TRANSMISSION BLOCK
0x18 0x0018 # CANCEL
0x19 0x0019 # END OF MEDIUM
0x1A 0x001A # SUBSTITUTE
0x1B 0x001B # ESCAPE
0x1C 0x001C # FILE SEPARATOR
0x1D 0x001D # GROUP SEPARATOR
0x1E 0x001E # RECORD SEPARATOR
0x1F 0x001F # UNIT SEPARATOR
0x20 0x0020 # SPACE
0x21 0x0021 # EXCLAMATION MARK
0x22 0x0022 # QUOTATION MARK
0x23 0x0023 # NUMBER SIGN
0x24 0x0024 # DOLLAR SIGN
0x25 0x0025 # PERCENT SIGN
0x26 0x0026 # AMPERSAND
0x27 0x0027 # APOSTROPHE
0x28 0x0028 # LEFT PARENTHESIS
0x29 0x0029 # RIGHT PARENTHESIS
0x2A 0x002A # ASTERISK
0x2B 0x002B # PLUS SIGN
0x2C 0x002C # COMMA
0x2D 0x002D # HYPHEN-MINUS
0x2E 0x002E # FULL STOP
0x2F 0x002F # SOLIDUS
0x30 0x0030 # DIGIT ZERO
0x31 0x0031 # DIGIT ONE
0x32 0x0032 # DIGIT TWO
0x33 0x0033 # DIGIT THREE
0x34 0x0034 # DIGIT FOUR
0x35 0x0035 # DIGIT FIVE
0x36 0x0036 # DIGIT SIX
0x37 0x0037 # DIGIT SEVEN
0x38 0x0038 # DIGIT EIGHT
0x39 0x0039 # DIGIT NINE
0x3A 0x003A # COLON
0x3B 0x003B # SEMICOLON
0x3C 0x003C # LESS-THAN SIGN
0x3D 0x003D # EQUALS SIGN
0x3E 0x003E # GREATER-THAN SIGN
0x3F 0x003F # QUESTION MARK
0x40 0x0040 # COMMERCIAL AT
0x41 0x0041 # LATIN CAPITAL LETTER A
0x42 0x0042 # LATIN CAPITAL LETTER B
0x43 0x0043 # LATIN CAPITAL LETTER C
0x44 0x0044 # LATIN CAPITAL LETTER D
0x45 0x0045 # LATIN CAPITAL LETTER E
0x46 0x0046 # LATIN CAPITAL LETTER F
0x47 0x0047 # LATIN CAPITAL LETTER G
0x48 0x0048 # LATIN CAPITAL LETTER H
0x49 0x0049 # LATIN CAPITAL LETTER I
0x4A 0x004A # LATIN CAPITAL LETTER J
0x4B 0x004B # LATIN CAPITAL LETTER K
0x4C 0x004C # LATIN CAPITAL LETTER L
0x4D 0x004D # LATIN CAPITAL LETTER M
0x4E 0x004E # LATIN CAPITAL LETTER N
0x4F 0x004F # LATIN CAPITAL LETTER O
0x50 0x0050 # LATIN CAPITAL LETTER P
0x51 0x0051 # LATIN CAPITAL LETTER Q
0x52 0x0052 # LATIN CAPITAL LETTER R
0x53 0x0053 # LATIN CAPITAL LETTER S
0x54 0x0054 # LATIN CAPITAL LETTER T
0x55 0x0055 # LATIN CAPITAL LETTER U
0x56 0x0056 # LATIN CAPITAL LETTER V
0x57 0x0057 # LATIN CAPITAL LETTER W
0x58 0x0058 # LATIN CAPITAL LETTER X
0x59 0x0059 # LATIN CAPITAL LETTER Y
0x5A 0x005A # LATIN CAPITAL LETTER Z
0x5B 0x005B # LEFT SQUARE BRACKET
0x5C 0x005C # REVERSE SOLIDUS
0x5D 0x005D # RIGHT SQUARE BRACKET
0x5E 0x005E # CIRCUMFLEX ACCENT
0x5F 0x005F # LOW LINE
0x60 0x0060 # GRAVE ACCENT
0x61 0x0061 # LATIN SMALL LETTER A
0x62 0x0062 # LATIN SMALL LETTER B
0x63 0x0063 # LATIN SMALL LETTER C
0x64 0x0064 # LATIN SMALL LETTER D
0x65 0x0065 # LATIN SMALL LETTER E
0x66 0x0066 # LATIN SMALL LETTER F
0x67 0x0067 # LATIN SMALL LETTER G
0x68 0x0068 # LATIN SMALL LETTER H
0x69 0x0069 # LATIN SMALL LETTER I
0x6A 0x006A # LATIN SMALL LETTER J
0x6B 0x006B # LATIN SMALL LETTER K
0x6C 0x006C # LATIN SMALL LETTER L
0x6D 0x006D # LATIN SMALL LETTER M
0x6E 0x006E # LATIN SMALL LETTER N
0x6F 0x006F # LATIN SMALL LETTER O
0x70 0x0070 # LATIN SMALL LETTER P
0x71 0x0071 # LATIN SMALL LETTER Q
0x72 0x0072 # LATIN SMALL LETTER R
0x73 0x0073 # LATIN SMALL LETTER S
0x74 0x0074 # LATIN SMALL LETTER T
0x75 0x0075 # LATIN SMALL LETTER U
0x76 0x0076 # LATIN SMALL LETTER V
0x77 0x0077 # LATIN SMALL LETTER W
0x78 0x0078 # LATIN SMALL LETTER X
0x79 0x0079 # LATIN SMALL LETTER Y
0x7A 0x007A # LATIN SMALL LETTER Z
0x7B 0x007B # LEFT CURLY BRACKET
0x7C 0x007C # VERTICAL LINE
0x7D 0x007D # RIGHT CURLY BRACKET
0x7E 0x007E # TILDE
0x7F 0x007F # DELETE
0x80 0x0080 # <control>
0x81 0x0081 # <control>
0x82 0x0082 # <control>
0x83 0x0083 # <control>
0x84 0x0084 # <control>
0x85 0x0085 # <control>
0x86 0x0086 # <control>
0x87 0x0087 # <control>
0x88 0x0088 # <control>
0x89 0x0089 # <control>
0x8A 0x008A # <control>
0x8B 0x008B # <control>
0x8C 0x008C # <control>
0x8D 0x008D # <control>
0x8E 0x008E # <control>
0x8F 0x008F # <control>
0x90 0x0090 # <control>
0x91 0x0091 # <control>
0x92 0x0092 # <control>
0x93 0x0093 # <control>
0x94 0x0094 # <control>
0x95 0x0095 # <control>
0x96 0x0096 # <control>
0x97 0x0097 # <control>
0x98 0x0098 # <control>
0x99 0x0099 # <control>
0x9A 0x009A # <control>
0x9B 0x009B # <control>
0x9C 0x009C # <control>
0x9D 0x009D # <control>
0x9E 0x009E # <control>
0x9F 0x009F # <control>
0xA0 0x00A0 # NO-BREAK SPACE
0xA1 0x2018 # LEFT SINGLE QUOTATION MARK
0xA2 0x2019 # RIGHT SINGLE QUOTATION MARK
0xA3 0x00A3 # POUND SIGN
0xA6 0x00A6 # BROKEN BAR
0xA7 0x00A7 # SECTION SIGN
0xA8 0x00A8 # DIAERESIS
0xA9 0x00A9 # COPYRIGHT SIGN
0xAB 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
0xAC 0x00AC # NOT SIGN
0xAD 0x00AD # SOFT HYPHEN
0xAF 0x2015 # HORIZONTAL BAR
0xB0 0x00B0 # DEGREE SIGN
0xB1 0x00B1 # PLUS-MINUS SIGN
0xB2 0x00B2 # SUPERSCRIPT TWO
0xB3 0x00B3 # SUPERSCRIPT THREE
0xB4 0x0384 # GREEK TONOS
0xB5 0x0385 # GREEK DIALYTIKA TONOS
0xB6 0x0386 # GREEK CAPITAL LETTER ALPHA WITH TONOS
0xB7 0x00B7 # MIDDLE DOT
0xB8 0x0388 # GREEK CAPITAL LETTER EPSILON WITH TONOS
0xB9 0x0389 # GREEK CAPITAL LETTER ETA WITH TONOS
0xBA 0x038A # GREEK CAPITAL LETTER IOTA WITH TONOS
0xBB 0x00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
0xBC 0x038C # GREEK CAPITAL LETTER OMICRON WITH TONOS
0xBD 0x00BD # VULGAR FRACTION ONE HALF
0xBE 0x038E # GREEK CAPITAL LETTER UPSILON WITH TONOS
0xBF 0x038F # GREEK CAPITAL LETTER OMEGA WITH TONOS
0xC0 0x0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
0xC1 0x0391 # GREEK CAPITAL LETTER ALPHA
0xC2 0x0392 # GREEK CAPITAL LETTER BETA
0xC3 0x0393 # GREEK CAPITAL LETTER GAMMA
0xC4 0x0394 # GREEK CAPITAL LETTER DELTA
0xC5 0x0395 # GREEK CAPITAL LETTER EPSILON
0xC6 0x0396 # GREEK CAPITAL LETTER ZETA
0xC7 0x0397 # GREEK CAPITAL LETTER ETA
0xC8 0x0398 # GREEK CAPITAL LETTER THETA
0xC9 0x0399 # GREEK CAPITAL LETTER IOTA
0xCA 0x039A # GREEK CAPITAL LETTER KAPPA
0xCB 0x039B # GREEK CAPITAL LETTER LAMDA
0xCC 0x039C # GREEK CAPITAL LETTER MU
0xCD 0x039D # GREEK CAPITAL LETTER NU
0xCE 0x039E # GREEK CAPITAL LETTER XI
0xCF 0x039F # GREEK CAPITAL LETTER OMICRON
0xD0 0x03A0 # GREEK CAPITAL LETTER PI
0xD1 0x03A1 # GREEK CAPITAL LETTER RHO
0xD3 0x03A3 # GREEK CAPITAL LETTER SIGMA
0xD4 0x03A4 # GREEK CAPITAL LETTER TAU
0xD5 0x03A5 # GREEK CAPITAL LETTER UPSILON
0xD6 0x03A6 # GREEK CAPITAL LETTER PHI
0xD7 0x03A7 # GREEK CAPITAL LETTER CHI
0xD8 0x03A8 # GREEK CAPITAL LETTER PSI
0xD9 0x03A9 # GREEK CAPITAL LETTER OMEGA
0xDA 0x03AA # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
0xDB 0x03AB # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
0xDC 0x03AC # GREEK SMALL LETTER ALPHA WITH TONOS
0xDD 0x03AD # GREEK SMALL LETTER EPSILON WITH TONOS
0xDE 0x03AE # GREEK SMALL LETTER ETA WITH TONOS
0xDF 0x03AF # GREEK SMALL LETTER IOTA WITH TONOS
0xE0 0x03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
0xE1 0x03B1 # GREEK SMALL LETTER ALPHA
0xE2 0x03B2 # GREEK SMALL LETTER BETA
0xE3 0x03B3 # GREEK SMALL LETTER GAMMA
0xE4 0x03B4 # GREEK SMALL LETTER DELTA
0xE5 0x03B5 # GREEK SMALL LETTER EPSILON
0xE6 0x03B6 # GREEK SMALL LETTER ZETA
0xE7 0x03B7 # GREEK SMALL LETTER ETA
0xE8 0x03B8 # GREEK SMALL LETTER THETA
0xE9 0x03B9 # GREEK SMALL LETTER IOTA
0xEA 0x03BA # GREEK SMALL LETTER KAPPA
0xEB 0x03BB # GREEK SMALL LETTER LAMDA
0xEC 0x03BC # GREEK SMALL LETTER MU
0xED 0x03BD # GREEK SMALL LETTER NU
0xEE 0x03BE # GREEK SMALL LETTER XI
0xEF 0x03BF # GREEK SMALL LETTER OMICRON
0xF0 0x03C0 # GREEK SMALL LETTER PI
0xF1 0x03C1 # GREEK SMALL LETTER RHO
0xF2 0x03C2 # GREEK SMALL LETTER FINAL SIGMA
0xF3 0x03C3 # GREEK SMALL LETTER SIGMA
0xF4 0x03C4 # GREEK SMALL LETTER TAU
0xF5 0x03C5 # GREEK SMALL LETTER UPSILON
0xF6 0x03C6 # GREEK SMALL LETTER PHI
0xF7 0x03C7 # GREEK SMALL LETTER CHI
0xF8 0x03C8 # GREEK SMALL LETTER PSI
0xF9 0x03C9 # GREEK SMALL LETTER OMEGA
0xFA 0x03CA # GREEK SMALL LETTER IOTA WITH DIALYTIKA
0xFB 0x03CB # GREEK SMALL LETTER UPSILON WITH DIALYTIKA
0xFC 0x03CC # GREEK SMALL LETTER OMICRON WITH TONOS
0xFD 0x03CD # GREEK SMALL LETTER UPSILON WITH TONOS
0xFE 0x03CE # GREEK SMALL LETTER OMEGA WITH TONOS

272
Unicode/8859_8.cp Normal file
View File

@ -0,0 +1,272 @@
ISO 8859-8 (Hebrew)
"ISO-8859-8", "8859-8"
#
# Name: ISO/IEC 8859-8:1999 to Unicode
# Unicode version: 3.0
# Table version: 1.1
# Table format: Format A
# Date: 2000-Jan-03
# Authors: Ken Whistler <kenw@sybase.com>
#
# Copyright (c) 1991-1999 Unicode, Inc. All Rights reserved.
#
# This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
# No claims are made as to fitness for any particular purpose. No
# warranties of any kind are expressed or implied. The recipient
# agrees to determine applicability of information provided. If this
# file has been provided on optical media by Unicode, Inc., the sole
# remedy for any claim will be exchange of defective media within 90
# days of receipt.
#
# Unicode, Inc. hereby grants the right to freely use the information
# supplied in this file in the creation of products supporting the
# Unicode Standard, and to make copies of this file in any form for
# internal or external distribution as long as this notice remains
# attached.
#
# General notes:
#
# This table contains the data the Unicode Consortium has on how
# ISO/IEC 8859-8:1999 characters map into Unicode.
#
# Format: Three tab-separated columns
# Column #1 is the ISO/IEC 8859-8 code (in hex as 0xXX)
# Column #2 is the Unicode (in hex as 0xXXXX)
# Column #3 the Unicode name (follows a comment sign, '#')
#
# The entries are in ISO/IEC 8859-8 order.
#
# Version history
# 1.0 version updates 0.1 version by adding mappings for all
# control characters.
# 1.1 version updates to the published 8859-8:1999, correcting
# the mapping of 0xAF and adding mappings for LRM and RLM.
#
# Updated versions of this file may be found in:
# <ftp://ftp.unicode.org/Public/MAPPINGS/>
#
# Any comments or problems, contact <errata@unicode.org>
# Please note that <errata@unicode.org> is an archival address;
# notices will be checked, but do not expect an immediate response.
#
0x00 0x0000 # NULL
0x01 0x0001 # START OF HEADING
0x02 0x0002 # START OF TEXT
0x03 0x0003 # END OF TEXT
0x04 0x0004 # END OF TRANSMISSION
0x05 0x0005 # ENQUIRY
0x06 0x0006 # ACKNOWLEDGE
0x07 0x0007 # BELL
0x08 0x0008 # BACKSPACE
0x09 0x0009 # HORIZONTAL TABULATION
0x0A 0x000A # LINE FEED
0x0B 0x000B # VERTICAL TABULATION
0x0C 0x000C # FORM FEED
0x0D 0x000D # CARRIAGE RETURN
0x0E 0x000E # SHIFT OUT
0x0F 0x000F # SHIFT IN
0x10 0x0010 # DATA LINK ESCAPE
0x11 0x0011 # DEVICE CONTROL ONE
0x12 0x0012 # DEVICE CONTROL TWO
0x13 0x0013 # DEVICE CONTROL THREE
0x14 0x0014 # DEVICE CONTROL FOUR
0x15 0x0015 # NEGATIVE ACKNOWLEDGE
0x16 0x0016 # SYNCHRONOUS IDLE
0x17 0x0017 # END OF TRANSMISSION BLOCK
0x18 0x0018 # CANCEL
0x19 0x0019 # END OF MEDIUM
0x1A 0x001A # SUBSTITUTE
0x1B 0x001B # ESCAPE
0x1C 0x001C # FILE SEPARATOR
0x1D 0x001D # GROUP SEPARATOR
0x1E 0x001E # RECORD SEPARATOR
0x1F 0x001F # UNIT SEPARATOR
0x20 0x0020 # SPACE
0x21 0x0021 # EXCLAMATION MARK
0x22 0x0022 # QUOTATION MARK
0x23 0x0023 # NUMBER SIGN
0x24 0x0024 # DOLLAR SIGN
0x25 0x0025 # PERCENT SIGN
0x26 0x0026 # AMPERSAND
0x27 0x0027 # APOSTROPHE
0x28 0x0028 # LEFT PARENTHESIS
0x29 0x0029 # RIGHT PARENTHESIS
0x2A 0x002A # ASTERISK
0x2B 0x002B # PLUS SIGN
0x2C 0x002C # COMMA
0x2D 0x002D # HYPHEN-MINUS
0x2E 0x002E # FULL STOP
0x2F 0x002F # SOLIDUS
0x30 0x0030 # DIGIT ZERO
0x31 0x0031 # DIGIT ONE
0x32 0x0032 # DIGIT TWO
0x33 0x0033 # DIGIT THREE
0x34 0x0034 # DIGIT FOUR
0x35 0x0035 # DIGIT FIVE
0x36 0x0036 # DIGIT SIX
0x37 0x0037 # DIGIT SEVEN
0x38 0x0038 # DIGIT EIGHT
0x39 0x0039 # DIGIT NINE
0x3A 0x003A # COLON
0x3B 0x003B # SEMICOLON
0x3C 0x003C # LESS-THAN SIGN
0x3D 0x003D # EQUALS SIGN
0x3E 0x003E # GREATER-THAN SIGN
0x3F 0x003F # QUESTION MARK
0x40 0x0040 # COMMERCIAL AT
0x41 0x0041 # LATIN CAPITAL LETTER A
0x42 0x0042 # LATIN CAPITAL LETTER B
0x43 0x0043 # LATIN CAPITAL LETTER C
0x44 0x0044 # LATIN CAPITAL LETTER D
0x45 0x0045 # LATIN CAPITAL LETTER E
0x46 0x0046 # LATIN CAPITAL LETTER F
0x47 0x0047 # LATIN CAPITAL LETTER G
0x48 0x0048 # LATIN CAPITAL LETTER H
0x49 0x0049 # LATIN CAPITAL LETTER I
0x4A 0x004A # LATIN CAPITAL LETTER J
0x4B 0x004B # LATIN CAPITAL LETTER K
0x4C 0x004C # LATIN CAPITAL LETTER L
0x4D 0x004D # LATIN CAPITAL LETTER M
0x4E 0x004E # LATIN CAPITAL LETTER N
0x4F 0x004F # LATIN CAPITAL LETTER O
0x50 0x0050 # LATIN CAPITAL LETTER P
0x51 0x0051 # LATIN CAPITAL LETTER Q
0x52 0x0052 # LATIN CAPITAL LETTER R
0x53 0x0053 # LATIN CAPITAL LETTER S
0x54 0x0054 # LATIN CAPITAL LETTER T
0x55 0x0055 # LATIN CAPITAL LETTER U
0x56 0x0056 # LATIN CAPITAL LETTER V
0x57 0x0057 # LATIN CAPITAL LETTER W
0x58 0x0058 # LATIN CAPITAL LETTER X
0x59 0x0059 # LATIN CAPITAL LETTER Y
0x5A 0x005A # LATIN CAPITAL LETTER Z
0x5B 0x005B # LEFT SQUARE BRACKET
0x5C 0x005C # REVERSE SOLIDUS
0x5D 0x005D # RIGHT SQUARE BRACKET
0x5E 0x005E # CIRCUMFLEX ACCENT
0x5F 0x005F # LOW LINE
0x60 0x0060 # GRAVE ACCENT
0x61 0x0061 # LATIN SMALL LETTER A
0x62 0x0062 # LATIN SMALL LETTER B
0x63 0x0063 # LATIN SMALL LETTER C
0x64 0x0064 # LATIN SMALL LETTER D
0x65 0x0065 # LATIN SMALL LETTER E
0x66 0x0066 # LATIN SMALL LETTER F
0x67 0x0067 # LATIN SMALL LETTER G
0x68 0x0068 # LATIN SMALL LETTER H
0x69 0x0069 # LATIN SMALL LETTER I
0x6A 0x006A # LATIN SMALL LETTER J
0x6B 0x006B # LATIN SMALL LETTER K
0x6C 0x006C # LATIN SMALL LETTER L
0x6D 0x006D # LATIN SMALL LETTER M
0x6E 0x006E # LATIN SMALL LETTER N
0x6F 0x006F # LATIN SMALL LETTER O
0x70 0x0070 # LATIN SMALL LETTER P
0x71 0x0071 # LATIN SMALL LETTER Q
0x72 0x0072 # LATIN SMALL LETTER R
0x73 0x0073 # LATIN SMALL LETTER S
0x74 0x0074 # LATIN SMALL LETTER T
0x75 0x0075 # LATIN SMALL LETTER U
0x76 0x0076 # LATIN SMALL LETTER V
0x77 0x0077 # LATIN SMALL LETTER W
0x78 0x0078 # LATIN SMALL LETTER X
0x79 0x0079 # LATIN SMALL LETTER Y
0x7A 0x007A # LATIN SMALL LETTER Z
0x7B 0x007B # LEFT CURLY BRACKET
0x7C 0x007C # VERTICAL LINE
0x7D 0x007D # RIGHT CURLY BRACKET
0x7E 0x007E # TILDE
0x7F 0x007F # DELETE
0x80 0x0080 # <control>
0x81 0x0081 # <control>
0x82 0x0082 # <control>
0x83 0x0083 # <control>
0x84 0x0084 # <control>
0x85 0x0085 # <control>
0x86 0x0086 # <control>
0x87 0x0087 # <control>
0x88 0x0088 # <control>
0x89 0x0089 # <control>
0x8A 0x008A # <control>
0x8B 0x008B # <control>
0x8C 0x008C # <control>
0x8D 0x008D # <control>
0x8E 0x008E # <control>
0x8F 0x008F # <control>
0x90 0x0090 # <control>
0x91 0x0091 # <control>
0x92 0x0092 # <control>
0x93 0x0093 # <control>
0x94 0x0094 # <control>
0x95 0x0095 # <control>
0x96 0x0096 # <control>
0x97 0x0097 # <control>
0x98 0x0098 # <control>
0x99 0x0099 # <control>
0x9A 0x009A # <control>
0x9B 0x009B # <control>
0x9C 0x009C # <control>
0x9D 0x009D # <control>
0x9E 0x009E # <control>
0x9F 0x009F # <control>
0xA0 0x00A0 # NO-BREAK SPACE
0xA2 0x00A2 # CENT SIGN
0xA3 0x00A3 # POUND SIGN
0xA4 0x00A4 # CURRENCY SIGN
0xA5 0x00A5 # YEN SIGN
0xA6 0x00A6 # BROKEN BAR
0xA7 0x00A7 # SECTION SIGN
0xA8 0x00A8 # DIAERESIS
0xA9 0x00A9 # COPYRIGHT SIGN
0xAA 0x00D7 # MULTIPLICATION SIGN
0xAB 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
0xAC 0x00AC # NOT SIGN
0xAD 0x00AD # SOFT HYPHEN
0xAE 0x00AE # REGISTERED SIGN
0xAF 0x00AF # MACRON
0xB0 0x00B0 # DEGREE SIGN
0xB1 0x00B1 # PLUS-MINUS SIGN
0xB2 0x00B2 # SUPERSCRIPT TWO
0xB3 0x00B3 # SUPERSCRIPT THREE
0xB4 0x00B4 # ACUTE ACCENT
0xB5 0x00B5 # MICRO SIGN
0xB6 0x00B6 # PILCROW SIGN
0xB7 0x00B7 # MIDDLE DOT
0xB8 0x00B8 # CEDILLA
0xB9 0x00B9 # SUPERSCRIPT ONE
0xBA 0x00F7 # DIVISION SIGN
0xBB 0x00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
0xBC 0x00BC # VULGAR FRACTION ONE QUARTER
0xBD 0x00BD # VULGAR FRACTION ONE HALF
0xBE 0x00BE # VULGAR FRACTION THREE QUARTERS
0xDF 0x2017 # DOUBLE LOW LINE
0xE0 0x05D0 # HEBREW LETTER ALEF
0xE1 0x05D1 # HEBREW LETTER BET
0xE2 0x05D2 # HEBREW LETTER GIMEL
0xE3 0x05D3 # HEBREW LETTER DALET
0xE4 0x05D4 # HEBREW LETTER HE
0xE5 0x05D5 # HEBREW LETTER VAV
0xE6 0x05D6 # HEBREW LETTER ZAYIN
0xE7 0x05D7 # HEBREW LETTER HET
0xE8 0x05D8 # HEBREW LETTER TET
0xE9 0x05D9 # HEBREW LETTER YOD
0xEA 0x05DA # HEBREW LETTER FINAL KAF
0xEB 0x05DB # HEBREW LETTER KAF
0xEC 0x05DC # HEBREW LETTER LAMED
0xED 0x05DD # HEBREW LETTER FINAL MEM
0xEE 0x05DE # HEBREW LETTER MEM
0xEF 0x05DF # HEBREW LETTER FINAL NUN
0xF0 0x05E0 # HEBREW LETTER NUN
0xF1 0x05E1 # HEBREW LETTER SAMEKH
0xF2 0x05E2 # HEBREW LETTER AYIN
0xF3 0x05E3 # HEBREW LETTER FINAL PE
0xF4 0x05E4 # HEBREW LETTER PE
0xF5 0x05E5 # HEBREW LETTER FINAL TSADI
0xF6 0x05E6 # HEBREW LETTER TSADI
0xF7 0x05E7 # HEBREW LETTER QOF
0xF8 0x05E8 # HEBREW LETTER RESH
0xF9 0x05E9 # HEBREW LETTER SHIN
0xFA 0x05EA # HEBREW LETTER TAV
0xFD 0x200E # LEFT-TO-RIGHT MARK
0xFE 0x200F # RIGHT-TO-LEFT MARK

309
Unicode/8859_9.cp Normal file
View File

@ -0,0 +1,309 @@
ISO 8859-9 (Turkish)
"ISO-8859-9", "8859-9"
#
# Name: ISO/IEC 8859-9:1999 to Unicode
# Unicode version: 3.0
# Table version: 1.0
# Table format: Format A
# Date: 1999 July 27
# Authors: Ken Whistler <kenw@sybase.com>
#
# Copyright (c) 1991-1999 Unicode, Inc. All Rights reserved.
#
# This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
# No claims are made as to fitness for any particular purpose. No
# warranties of any kind are expressed or implied. The recipient
# agrees to determine applicability of information provided. If this
# file has been provided on magnetic media by Unicode, Inc., the sole
# remedy for any claim will be exchange of defective media within 90
# days of receipt.
#
# Unicode, Inc. hereby grants the right to freely use the information
# supplied in this file in the creation of products supporting the
# Unicode Standard, and to make copies of this file in any form for
# internal or external distribution as long as this notice remains
# attached.
#
# General notes:
#
# This table contains the data the Unicode Consortium has on how
# ISO/IEC 8859-9:1999 characters map into Unicode.
#
# Format: Three tab-separated columns
# Column #1 is the ISO/IEC 8859-9 code (in hex as 0xXX)
# Column #2 is the Unicode (in hex as 0xXXXX)
# Column #3 the Unicode name (follows a comment sign, '#')
#
# The entries are in ISO/IEC 8859-9 order.
#
# ISO/IEC 8859-9 is also equivalent to ISO-IR-148.
#
# Version history
# 1.0 version updates 0.1 version by adding mappings for all
# control characters.
#
# Updated versions of this file may be found in:
# <ftp://ftp.unicode.org/Public/MAPPINGS/>
#
# Any comments or problems, contact <errata@unicode.org>
# Please note that <errata@unicode.org> is an archival address;
# notices will be checked, but do not expect an immediate response.
#
0x00 0x0000 # NULL
0x01 0x0001 # START OF HEADING
0x02 0x0002 # START OF TEXT
0x03 0x0003 # END OF TEXT
0x04 0x0004 # END OF TRANSMISSION
0x05 0x0005 # ENQUIRY
0x06 0x0006 # ACKNOWLEDGE
0x07 0x0007 # BELL
0x08 0x0008 # BACKSPACE
0x09 0x0009 # HORIZONTAL TABULATION
0x0A 0x000A # LINE FEED
0x0B 0x000B # VERTICAL TABULATION
0x0C 0x000C # FORM FEED
0x0D 0x000D # CARRIAGE RETURN
0x0E 0x000E # SHIFT OUT
0x0F 0x000F # SHIFT IN
0x10 0x0010 # DATA LINK ESCAPE
0x11 0x0011 # DEVICE CONTROL ONE
0x12 0x0012 # DEVICE CONTROL TWO
0x13 0x0013 # DEVICE CONTROL THREE
0x14 0x0014 # DEVICE CONTROL FOUR
0x15 0x0015 # NEGATIVE ACKNOWLEDGE
0x16 0x0016 # SYNCHRONOUS IDLE
0x17 0x0017 # END OF TRANSMISSION BLOCK
0x18 0x0018 # CANCEL
0x19 0x0019 # END OF MEDIUM
0x1A 0x001A # SUBSTITUTE
0x1B 0x001B # ESCAPE
0x1C 0x001C # FILE SEPARATOR
0x1D 0x001D # GROUP SEPARATOR
0x1E 0x001E # RECORD SEPARATOR
0x1F 0x001F # UNIT SEPARATOR
0x20 0x0020 # SPACE
0x21 0x0021 # EXCLAMATION MARK
0x22 0x0022 # QUOTATION MARK
0x23 0x0023 # NUMBER SIGN
0x24 0x0024 # DOLLAR SIGN
0x25 0x0025 # PERCENT SIGN
0x26 0x0026 # AMPERSAND
0x27 0x0027 # APOSTROPHE
0x28 0x0028 # LEFT PARENTHESIS
0x29 0x0029 # RIGHT PARENTHESIS
0x2A 0x002A # ASTERISK
0x2B 0x002B # PLUS SIGN
0x2C 0x002C # COMMA
0x2D 0x002D # HYPHEN-MINUS
0x2E 0x002E # FULL STOP
0x2F 0x002F # SOLIDUS
0x30 0x0030 # DIGIT ZERO
0x31 0x0031 # DIGIT ONE
0x32 0x0032 # DIGIT TWO
0x33 0x0033 # DIGIT THREE
0x34 0x0034 # DIGIT FOUR
0x35 0x0035 # DIGIT FIVE
0x36 0x0036 # DIGIT SIX
0x37 0x0037 # DIGIT SEVEN
0x38 0x0038 # DIGIT EIGHT
0x39 0x0039 # DIGIT NINE
0x3A 0x003A # COLON
0x3B 0x003B # SEMICOLON
0x3C 0x003C # LESS-THAN SIGN
0x3D 0x003D # EQUALS SIGN
0x3E 0x003E # GREATER-THAN SIGN
0x3F 0x003F # QUESTION MARK
0x40 0x0040 # COMMERCIAL AT
0x41 0x0041 # LATIN CAPITAL LETTER A
0x42 0x0042 # LATIN CAPITAL LETTER B
0x43 0x0043 # LATIN CAPITAL LETTER C
0x44 0x0044 # LATIN CAPITAL LETTER D
0x45 0x0045 # LATIN CAPITAL LETTER E
0x46 0x0046 # LATIN CAPITAL LETTER F
0x47 0x0047 # LATIN CAPITAL LETTER G
0x48 0x0048 # LATIN CAPITAL LETTER H
0x49 0x0049 # LATIN CAPITAL LETTER I
0x4A 0x004A # LATIN CAPITAL LETTER J
0x4B 0x004B # LATIN CAPITAL LETTER K
0x4C 0x004C # LATIN CAPITAL LETTER L
0x4D 0x004D # LATIN CAPITAL LETTER M
0x4E 0x004E # LATIN CAPITAL LETTER N
0x4F 0x004F # LATIN CAPITAL LETTER O
0x50 0x0050 # LATIN CAPITAL LETTER P
0x51 0x0051 # LATIN CAPITAL LETTER Q
0x52 0x0052 # LATIN CAPITAL LETTER R
0x53 0x0053 # LATIN CAPITAL LETTER S
0x54 0x0054 # LATIN CAPITAL LETTER T
0x55 0x0055 # LATIN CAPITAL LETTER U
0x56 0x0056 # LATIN CAPITAL LETTER V
0x57 0x0057 # LATIN CAPITAL LETTER W
0x58 0x0058 # LATIN CAPITAL LETTER X
0x59 0x0059 # LATIN CAPITAL LETTER Y
0x5A 0x005A # LATIN CAPITAL LETTER Z
0x5B 0x005B # LEFT SQUARE BRACKET
0x5C 0x005C # REVERSE SOLIDUS
0x5D 0x005D # RIGHT SQUARE BRACKET
0x5E 0x005E # CIRCUMFLEX ACCENT
0x5F 0x005F # LOW LINE
0x60 0x0060 # GRAVE ACCENT
0x61 0x0061 # LATIN SMALL LETTER A
0x62 0x0062 # LATIN SMALL LETTER B
0x63 0x0063 # LATIN SMALL LETTER C
0x64 0x0064 # LATIN SMALL LETTER D
0x65 0x0065 # LATIN SMALL LETTER E
0x66 0x0066 # LATIN SMALL LETTER F
0x67 0x0067 # LATIN SMALL LETTER G
0x68 0x0068 # LATIN SMALL LETTER H
0x69 0x0069 # LATIN SMALL LETTER I
0x6A 0x006A # LATIN SMALL LETTER J
0x6B 0x006B # LATIN SMALL LETTER K
0x6C 0x006C # LATIN SMALL LETTER L
0x6D 0x006D # LATIN SMALL LETTER M
0x6E 0x006E # LATIN SMALL LETTER N
0x6F 0x006F # LATIN SMALL LETTER O
0x70 0x0070 # LATIN SMALL LETTER P
0x71 0x0071 # LATIN SMALL LETTER Q
0x72 0x0072 # LATIN SMALL LETTER R
0x73 0x0073 # LATIN SMALL LETTER S
0x74 0x0074 # LATIN SMALL LETTER T
0x75 0x0075 # LATIN SMALL LETTER U
0x76 0x0076 # LATIN SMALL LETTER V
0x77 0x0077 # LATIN SMALL LETTER W
0x78 0x0078 # LATIN SMALL LETTER X
0x79 0x0079 # LATIN SMALL LETTER Y
0x7A 0x007A # LATIN SMALL LETTER Z
0x7B 0x007B # LEFT CURLY BRACKET
0x7C 0x007C # VERTICAL LINE
0x7D 0x007D # RIGHT CURLY BRACKET
0x7E 0x007E # TILDE
0x7F 0x007F # DELETE
0x80 0x0080 # <control>
0x81 0x0081 # <control>
0x82 0x0082 # <control>
0x83 0x0083 # <control>
0x84 0x0084 # <control>
0x85 0x0085 # <control>
0x86 0x0086 # <control>
0x87 0x0087 # <control>
0x88 0x0088 # <control>
0x89 0x0089 # <control>
0x8A 0x008A # <control>
0x8B 0x008B # <control>
0x8C 0x008C # <control>
0x8D 0x008D # <control>
0x8E 0x008E # <control>
0x8F 0x008F # <control>
0x90 0x0090 # <control>
0x91 0x0091 # <control>
0x92 0x0092 # <control>
0x93 0x0093 # <control>
0x94 0x0094 # <control>
0x95 0x0095 # <control>
0x96 0x0096 # <control>
0x97 0x0097 # <control>
0x98 0x0098 # <control>
0x99 0x0099 # <control>
0x9A 0x009A # <control>
0x9B 0x009B # <control>
0x9C 0x009C # <control>
0x9D 0x009D # <control>
0x9E 0x009E # <control>
0x9F 0x009F # <control>
0xA0 0x00A0 # NO-BREAK SPACE
0xA1 0x00A1 # INVERTED EXCLAMATION MARK
0xA2 0x00A2 # CENT SIGN
0xA3 0x00A3 # POUND SIGN
0xA4 0x00A4 # CURRENCY SIGN
0xA5 0x00A5 # YEN SIGN
0xA6 0x00A6 # BROKEN BAR
0xA7 0x00A7 # SECTION SIGN
0xA8 0x00A8 # DIAERESIS
0xA9 0x00A9 # COPYRIGHT SIGN
0xAA 0x00AA # FEMININE ORDINAL INDICATOR
0xAB 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
0xAC 0x00AC # NOT SIGN
0xAD 0x00AD # SOFT HYPHEN
0xAE 0x00AE # REGISTERED SIGN
0xAF 0x00AF # MACRON
0xB0 0x00B0 # DEGREE SIGN
0xB1 0x00B1 # PLUS-MINUS SIGN
0xB2 0x00B2 # SUPERSCRIPT TWO
0xB3 0x00B3 # SUPERSCRIPT THREE
0xB4 0x00B4 # ACUTE ACCENT
0xB5 0x00B5 # MICRO SIGN
0xB6 0x00B6 # PILCROW SIGN
0xB7 0x00B7 # MIDDLE DOT
0xB8 0x00B8 # CEDILLA
0xB9 0x00B9 # SUPERSCRIPT ONE
0xBA 0x00BA # MASCULINE ORDINAL INDICATOR
0xBB 0x00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
0xBC 0x00BC # VULGAR FRACTION ONE QUARTER
0xBD 0x00BD # VULGAR FRACTION ONE HALF
0xBE 0x00BE # VULGAR FRACTION THREE QUARTERS
0xBF 0x00BF # INVERTED QUESTION MARK
0xC0 0x00C0 # LATIN CAPITAL LETTER A WITH GRAVE
0xC1 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE
0xC2 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
0xC3 0x00C3 # LATIN CAPITAL LETTER A WITH TILDE
0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
0xC5 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE
0xC6 0x00C6 # LATIN CAPITAL LETTER AE
0xC7 0x00C7 # LATIN CAPITAL LETTER C WITH CEDILLA
0xC8 0x00C8 # LATIN CAPITAL LETTER E WITH GRAVE
0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE
0xCA 0x00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
0xCB 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS
0xCC 0x00CC # LATIN CAPITAL LETTER I WITH GRAVE
0xCD 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE
0xCE 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
0xCF 0x00CF # LATIN CAPITAL LETTER I WITH DIAERESIS
0xD0 0x011E # LATIN CAPITAL LETTER G WITH BREVE
0xD1 0x00D1 # LATIN CAPITAL LETTER N WITH TILDE
0xD2 0x00D2 # LATIN CAPITAL LETTER O WITH GRAVE
0xD3 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE
0xD4 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
0xD5 0x00D5 # LATIN CAPITAL LETTER O WITH TILDE
0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
0xD7 0x00D7 # MULTIPLICATION SIGN
0xD8 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE
0xD9 0x00D9 # LATIN CAPITAL LETTER U WITH GRAVE
0xDA 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE
0xDB 0x00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
0xDD 0x0130 # LATIN CAPITAL LETTER I WITH DOT ABOVE
0xDE 0x015E # LATIN CAPITAL LETTER S WITH CEDILLA
0xDF 0x00DF # LATIN SMALL LETTER SHARP S
0xE0 0x00E0 # LATIN SMALL LETTER A WITH GRAVE
0xE1 0x00E1 # LATIN SMALL LETTER A WITH ACUTE
0xE2 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX
0xE3 0x00E3 # LATIN SMALL LETTER A WITH TILDE
0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS
0xE5 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE
0xE6 0x00E6 # LATIN SMALL LETTER AE
0xE7 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA
0xE8 0x00E8 # LATIN SMALL LETTER E WITH GRAVE
0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE
0xEA 0x00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX
0xEB 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS
0xEC 0x00EC # LATIN SMALL LETTER I WITH GRAVE
0xED 0x00ED # LATIN SMALL LETTER I WITH ACUTE
0xEE 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX
0xEF 0x00EF # LATIN SMALL LETTER I WITH DIAERESIS
0xF0 0x011F # LATIN SMALL LETTER G WITH BREVE
0xF1 0x00F1 # LATIN SMALL LETTER N WITH TILDE
0xF2 0x00F2 # LATIN SMALL LETTER O WITH GRAVE
0xF3 0x00F3 # LATIN SMALL LETTER O WITH ACUTE
0xF4 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX
0xF5 0x00F5 # LATIN SMALL LETTER O WITH TILDE
0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS
0xF7 0x00F7 # DIVISION SIGN
0xF8 0x00F8 # LATIN SMALL LETTER O WITH STROKE
0xF9 0x00F9 # LATIN SMALL LETTER U WITH GRAVE
0xFA 0x00FA # LATIN SMALL LETTER U WITH ACUTE
0xFB 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX
0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS
0xFD 0x0131 # LATIN SMALL LETTER DOTLESS I
0xFE 0x015F # LATIN SMALL LETTER S WITH CEDILLA
0xFF 0x00FF # LATIN SMALL LETTER Y WITH DIAERESIS

137
Unicode/cp1125.cp Normal file
View File

@ -0,0 +1,137 @@
CP 1125 (Ukrainian)
"x-cp866-u", "ruscii", "1125"
#
# DOS Ukrainian (RUSCII, cp1125) to UNICODE translation table
#
# Based on cp866u_uni.tbl from lynx 2.8.2 distribution
# by porokh
#
0x80 0x0410 #CYRILLIC CAPITAL LETTER A
0x81 0x0411 #CYRILLIC CAPITAL LETTER BE
0x82 0x0412 #CYRILLIC CAPITAL LETTER VE
0x83 0x0413 #CYRILLIC CAPITAL LETTER GHE
0x84 0x0414 #CYRILLIC CAPITAL LETTER DE
0x85 0x0415 #CYRILLIC CAPITAL LETTER IE
0x86 0x0416 #CYRILLIC CAPITAL LETTER ZHE
0x87 0x0417 #CYRILLIC CAPITAL LETTER ZE
0x88 0x0418 #CYRILLIC CAPITAL LETTER I
0x89 0x0419 #CYRILLIC CAPITAL LETTER SHORT I
0x8a 0x041a #CYRILLIC CAPITAL LETTER KA
0x8b 0x041b #CYRILLIC CAPITAL LETTER EL
0x8c 0x041c #CYRILLIC CAPITAL LETTER EM
0x8d 0x041d #CYRILLIC CAPITAL LETTER EN
0x8e 0x041e #CYRILLIC CAPITAL LETTER O
0x8f 0x041f #CYRILLIC CAPITAL LETTER PE
0x90 0x0420 #CYRILLIC CAPITAL LETTER ER
0x91 0x0421 #CYRILLIC CAPITAL LETTER ES
0x92 0x0422 #CYRILLIC CAPITAL LETTER TE
0x93 0x0423 #CYRILLIC CAPITAL LETTER U
0x94 0x0424 #CYRILLIC CAPITAL LETTER EF
0x95 0x0425 #CYRILLIC CAPITAL LETTER HA
0x96 0x0426 #CYRILLIC CAPITAL LETTER TSE
0x97 0x0427 #CYRILLIC CAPITAL LETTER CHE
0x98 0x0428 #CYRILLIC CAPITAL LETTER SHA
0x99 0x0429 #CYRILLIC CAPITAL LETTER SHCHA
0x9a 0x042a #CYRILLIC CAPITAL LETTER HARD SIGN
0x9b 0x042b #CYRILLIC CAPITAL LETTER YERU
0x9c 0x042c #CYRILLIC CAPITAL LETTER SOFT SIGN
0x9d 0x042d #CYRILLIC CAPITAL LETTER E
0x9e 0x042e #CYRILLIC CAPITAL LETTER YU
0x9f 0x042f #CYRILLIC CAPITAL LETTER YA
0xa0 0x0430 #CYRILLIC SMALL LETTER A
0xa1 0x0431 #CYRILLIC SMALL LETTER BE
0xa2 0x0432 #CYRILLIC SMALL LETTER VE
0xa3 0x0433 #CYRILLIC SMALL LETTER GHE
0xa4 0x0434 #CYRILLIC SMALL LETTER DE
0xa5 0x0435 #CYRILLIC SMALL LETTER IE
0xa6 0x0436 #CYRILLIC SMALL LETTER ZHE
0xa7 0x0437 #CYRILLIC SMALL LETTER ZE
0xa8 0x0438 #CYRILLIC SMALL LETTER I
0xa9 0x0439 #CYRILLIC SMALL LETTER SHORT I
0xaa 0x043a #CYRILLIC SMALL LETTER KA
0xab 0x043b #CYRILLIC SMALL LETTER EL
0xac 0x043c #CYRILLIC SMALL LETTER EM
0xad 0x043d #CYRILLIC SMALL LETTER EN
0xae 0x043e #CYRILLIC SMALL LETTER O
0xaf 0x043f #CYRILLIC SMALL LETTER PE
0xb0 0x2591 #LIGHT SHADE
0xb1 0x2592 #MEDIUM SHADE
0xb2 0x2593 #DARK SHADE
0xb3 0x2502 #BOX DRAWINGS LIGHT VERTICAL
0xb4 0x2524 #BOX DRAWINGS LIGHT VERTICAL AND LEFT
0xb5 0x2561 #BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
0xb6 0x2562 #BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
0xb7 0x2556 #BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
0xb8 0x2555 #BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
0xb9 0x2563 #BOX DRAWINGS DOUBLE VERTICAL AND LEFT
0xba 0x2551 #BOX DRAWINGS DOUBLE VERTICAL
0xbb 0x2557 #BOX DRAWINGS DOUBLE DOWN AND LEFT
0xbc 0x255d #BOX DRAWINGS DOUBLE UP AND LEFT
0xbd 0x255c #BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
0xbe 0x255b #BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
0xbf 0x2510 #BOX DRAWINGS LIGHT DOWN AND LEFT
0xc0 0x2514 #BOX DRAWINGS LIGHT UP AND RIGHT
0xc1 0x2534 #BOX DRAWINGS LIGHT UP AND HORIZONTAL
0xc2 0x252c #BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
0xc3 0x251c #BOX DRAWINGS LIGHT VERTICAL AND RIGHT
0xc4 0x2500 #BOX DRAWINGS LIGHT HORIZONTAL
0xc5 0x253c #BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
0xc6 0x255e #BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
0xc7 0x255f #BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
0xc8 0x255a #BOX DRAWINGS DOUBLE UP AND RIGHT
0xc9 0x2554 #BOX DRAWINGS DOUBLE DOWN AND RIGHT
0xca 0x2569 #BOX DRAWINGS DOUBLE UP AND HORIZONTAL
0xcb 0x2566 #BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
0xcc 0x2560 #BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
0xcd 0x2550 #BOX DRAWINGS DOUBLE HORIZONTAL
0xce 0x256c #BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
0xcf 0x2567 #BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
0xd0 0x2568 #BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
0xd1 0x2564 #BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
0xd2 0x2565 #BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
0xd3 0x2559 #BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
0xd4 0x2558 #BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
0xd5 0x2552 #BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
0xd6 0x2553 #BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
0xd7 0x256b #BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
0xd8 0x256a #BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
0xd9 0x2518 #BOX DRAWINGS LIGHT UP AND LEFT
0xda 0x250c #BOX DRAWINGS LIGHT DOWN AND RIGHT
0xdb 0x2588 #FULL BLOCK
0xdc 0x2584 #LOWER HALF BLOCK
0xdd 0x258c #LEFT HALF BLOCK
0xde 0x2590 #RIGHT HALF BLOCK
0xdf 0x2580 #UPPER HALF BLOCK
0xe0 0x0440 #CYRILLIC SMALL LETTER ER
0xe1 0x0441 #CYRILLIC SMALL LETTER ES
0xe2 0x0442 #CYRILLIC SMALL LETTER TE
0xe3 0x0443 #CYRILLIC SMALL LETTER U
0xe4 0x0444 #CYRILLIC SMALL LETTER EF
0xe5 0x0445 #CYRILLIC SMALL LETTER HA
0xe6 0x0446 #CYRILLIC SMALL LETTER TSE
0xe7 0x0447 #CYRILLIC SMALL LETTER CHE
0xe8 0x0448 #CYRILLIC SMALL LETTER SHA
0xe9 0x0449 #CYRILLIC SMALL LETTER SHCHA
0xea 0x044a #CYRILLIC SMALL LETTER HARD SIGN
0xeb 0x044b #CYRILLIC SMALL LETTER YERU
0xec 0x044c #CYRILLIC SMALL LETTER SOFT SIGN
0xed 0x044d #CYRILLIC SMALL LETTER E
0xee 0x044e #CYRILLIC SMALL LETTER YU
0xef 0x044f #CYRILLIC SMALL LETTER YA
0xf0 0x0401 #CYRILLIC CAPITAL LETTER IO
0xf1 0x0451 #CYRILLIC SMALL LETTER IO
0xf2 0x0490 #CYRILLIC CAPITAL LETTER GHE WITH UPTURN
0xf3 0x0491 #CYRILLIC SMALL LETTER GHE WITH UPTURN
0xf4 0x0404 #CYRILLIC CAPITAL LETTER UKRAINIAN IE
0xf5 0x0454 #CYRILLIC SMALL LETTER UKRAINIAN IE
0xf6 0x0406 #CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
0xf7 0x0456 #CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
0xf8 0x0407 #CYRILLIC CAPITAL LETTER YI
0xf9 0x0457 #CYRILLIC SMALL LETTER YI
0xfa 0x00b7 #MIDDLE DOT
0xfb 0x221a #SQUARE ROOT
0xfc 0x2116 #NUMERO SIGN
0xfd 0x00a4 #CURRENCY SIGN
0xfe 0x25a0 #BLACK SQUARE
0xff 0x00a0 #NO-BREAK SPACE

276
Unicode/cp1250.cp Normal file
View File

@ -0,0 +1,276 @@
Window$ 1250 (Central European)
"windows-1250", "1250"
#
# Name: cp1250 to Unicode table
# Unicode version: 2.0
# Table version: 2.01
# Table format: Format A
# Date: 04/15/98
#
# Contact: cpxlate@microsoft.com
#
# General notes: none
#
# Format: Three tab-separated columns
# Column #1 is the cp1250 code (in hex)
# Column #2 is the Unicode (in hex as 0xXXXX)
# Column #3 is the Unicode name (follows a comment sign, '#')
#
# The entries are in cp1250 order
#
0x00 0x0000 #NULL
0x01 0x0001 #START OF HEADING
0x02 0x0002 #START OF TEXT
0x03 0x0003 #END OF TEXT
0x04 0x0004 #END OF TRANSMISSION
0x05 0x0005 #ENQUIRY
0x06 0x0006 #ACKNOWLEDGE
0x07 0x0007 #BELL
0x08 0x0008 #BACKSPACE
0x09 0x0009 #HORIZONTAL TABULATION
0x0A 0x000A #LINE FEED
0x0B 0x000B #VERTICAL TABULATION
0x0C 0x000C #FORM FEED
0x0D 0x000D #CARRIAGE RETURN
0x0E 0x000E #SHIFT OUT
0x0F 0x000F #SHIFT IN
0x10 0x0010 #DATA LINK ESCAPE
0x11 0x0011 #DEVICE CONTROL ONE
0x12 0x0012 #DEVICE CONTROL TWO
0x13 0x0013 #DEVICE CONTROL THREE
0x14 0x0014 #DEVICE CONTROL FOUR
0x15 0x0015 #NEGATIVE ACKNOWLEDGE
0x16 0x0016 #SYNCHRONOUS IDLE
0x17 0x0017 #END OF TRANSMISSION BLOCK
0x18 0x0018 #CANCEL
0x19 0x0019 #END OF MEDIUM
0x1A 0x001A #SUBSTITUTE
0x1B 0x001B #ESCAPE
0x1C 0x001C #FILE SEPARATOR
0x1D 0x001D #GROUP SEPARATOR
0x1E 0x001E #RECORD SEPARATOR
0x1F 0x001F #UNIT SEPARATOR
0x20 0x0020 #SPACE
0x21 0x0021 #EXCLAMATION MARK
0x22 0x0022 #QUOTATION MARK
0x23 0x0023 #NUMBER SIGN
0x24 0x0024 #DOLLAR SIGN
0x25 0x0025 #PERCENT SIGN
0x26 0x0026 #AMPERSAND
0x27 0x0027 #APOSTROPHE
0x28 0x0028 #LEFT PARENTHESIS
0x29 0x0029 #RIGHT PARENTHESIS
0x2A 0x002A #ASTERISK
0x2B 0x002B #PLUS SIGN
0x2C 0x002C #COMMA
0x2D 0x002D #HYPHEN-MINUS
0x2E 0x002E #FULL STOP
0x2F 0x002F #SOLIDUS
0x30 0x0030 #DIGIT ZERO
0x31 0x0031 #DIGIT ONE
0x32 0x0032 #DIGIT TWO
0x33 0x0033 #DIGIT THREE
0x34 0x0034 #DIGIT FOUR
0x35 0x0035 #DIGIT FIVE
0x36 0x0036 #DIGIT SIX
0x37 0x0037 #DIGIT SEVEN
0x38 0x0038 #DIGIT EIGHT
0x39 0x0039 #DIGIT NINE
0x3A 0x003A #COLON
0x3B 0x003B #SEMICOLON
0x3C 0x003C #LESS-THAN SIGN
0x3D 0x003D #EQUALS SIGN
0x3E 0x003E #GREATER-THAN SIGN
0x3F 0x003F #QUESTION MARK
0x40 0x0040 #COMMERCIAL AT
0x41 0x0041 #LATIN CAPITAL LETTER A
0x42 0x0042 #LATIN CAPITAL LETTER B
0x43 0x0043 #LATIN CAPITAL LETTER C
0x44 0x0044 #LATIN CAPITAL LETTER D
0x45 0x0045 #LATIN CAPITAL LETTER E
0x46 0x0046 #LATIN CAPITAL LETTER F
0x47 0x0047 #LATIN CAPITAL LETTER G
0x48 0x0048 #LATIN CAPITAL LETTER H
0x49 0x0049 #LATIN CAPITAL LETTER I
0x4A 0x004A #LATIN CAPITAL LETTER J
0x4B 0x004B #LATIN CAPITAL LETTER K
0x4C 0x004C #LATIN CAPITAL LETTER L
0x4D 0x004D #LATIN CAPITAL LETTER M
0x4E 0x004E #LATIN CAPITAL LETTER N
0x4F 0x004F #LATIN CAPITAL LETTER O
0x50 0x0050 #LATIN CAPITAL LETTER P
0x51 0x0051 #LATIN CAPITAL LETTER Q
0x52 0x0052 #LATIN CAPITAL LETTER R
0x53 0x0053 #LATIN CAPITAL LETTER S
0x54 0x0054 #LATIN CAPITAL LETTER T
0x55 0x0055 #LATIN CAPITAL LETTER U
0x56 0x0056 #LATIN CAPITAL LETTER V
0x57 0x0057 #LATIN CAPITAL LETTER W
0x58 0x0058 #LATIN CAPITAL LETTER X
0x59 0x0059 #LATIN CAPITAL LETTER Y
0x5A 0x005A #LATIN CAPITAL LETTER Z
0x5B 0x005B #LEFT SQUARE BRACKET
0x5C 0x005C #REVERSE SOLIDUS
0x5D 0x005D #RIGHT SQUARE BRACKET
0x5E 0x005E #CIRCUMFLEX ACCENT
0x5F 0x005F #LOW LINE
0x60 0x0060 #GRAVE ACCENT
0x61 0x0061 #LATIN SMALL LETTER A
0x62 0x0062 #LATIN SMALL LETTER B
0x63 0x0063 #LATIN SMALL LETTER C
0x64 0x0064 #LATIN SMALL LETTER D
0x65 0x0065 #LATIN SMALL LETTER E
0x66 0x0066 #LATIN SMALL LETTER F
0x67 0x0067 #LATIN SMALL LETTER G
0x68 0x0068 #LATIN SMALL LETTER H
0x69 0x0069 #LATIN SMALL LETTER I
0x6A 0x006A #LATIN SMALL LETTER J
0x6B 0x006B #LATIN SMALL LETTER K
0x6C 0x006C #LATIN SMALL LETTER L
0x6D 0x006D #LATIN SMALL LETTER M
0x6E 0x006E #LATIN SMALL LETTER N
0x6F 0x006F #LATIN SMALL LETTER O
0x70 0x0070 #LATIN SMALL LETTER P
0x71 0x0071 #LATIN SMALL LETTER Q
0x72 0x0072 #LATIN SMALL LETTER R
0x73 0x0073 #LATIN SMALL LETTER S
0x74 0x0074 #LATIN SMALL LETTER T
0x75 0x0075 #LATIN SMALL LETTER U
0x76 0x0076 #LATIN SMALL LETTER V
0x77 0x0077 #LATIN SMALL LETTER W
0x78 0x0078 #LATIN SMALL LETTER X
0x79 0x0079 #LATIN SMALL LETTER Y
0x7A 0x007A #LATIN SMALL LETTER Z
0x7B 0x007B #LEFT CURLY BRACKET
0x7C 0x007C #VERTICAL LINE
0x7D 0x007D #RIGHT CURLY BRACKET
0x7E 0x007E #TILDE
0x7F 0x007F #DELETE
0x80 0x20AC #EURO SIGN
0x81 0 #UNDEFINED
0x82 0x201A #SINGLE LOW-9 QUOTATION MARK
0x83 0 #UNDEFINED
0x84 0x201E #DOUBLE LOW-9 QUOTATION MARK
#0x85 0x2026 #HORIZONTAL ELLIPSIS
0x86 0x2020 #DAGGER
0x87 0x2021 #DOUBLE DAGGER
0x88 0 #UNDEFINED
0x89 0x2030 #PER MILLE SIGN
0x8A 0x0160 #LATIN CAPITAL LETTER S WITH CARON
0x8B 0x2039 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK
0x8C 0x015A #LATIN CAPITAL LETTER S WITH ACUTE
0x8D 0x0164 #LATIN CAPITAL LETTER T WITH CARON
0x8E 0x017D #LATIN CAPITAL LETTER Z WITH CARON
0x8F 0x0179 #LATIN CAPITAL LETTER Z WITH ACUTE
0x90 0 #UNDEFINED
0x91 0x2018 #LEFT SINGLE QUOTATION MARK
0x92 0x2019 #RIGHT SINGLE QUOTATION MARK
0x93 0x201C #LEFT DOUBLE QUOTATION MARK
0x94 0x201D #RIGHT DOUBLE QUOTATION MARK
#0x95 0x2022 #BULLET
0x96 0x2013 #EN DASH
0x97 0x2014 #EM DASH
0x98 0 #UNDEFINED
0x99 0x2122 #TRADE MARK SIGN
0x9A 0x0161 #LATIN SMALL LETTER S WITH CARON
0x9B 0x203A #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
0x9C 0x015B #LATIN SMALL LETTER S WITH ACUTE
0x9D 0x0165 #LATIN SMALL LETTER T WITH CARON
0x9E 0x017E #LATIN SMALL LETTER Z WITH CARON
0x9F 0x017A #LATIN SMALL LETTER Z WITH ACUTE
0xA0 0x00A0 #NO-BREAK SPACE
0xA1 0x02C7 #CARON
0xA2 0x02D8 #BREVE
0xA3 0x0141 #LATIN CAPITAL LETTER L WITH STROKE
0xA4 0x00A4 #CURRENCY SIGN
0xA5 0x0104 #LATIN CAPITAL LETTER A WITH OGONEK
0xA6 0x00A6 #BROKEN BAR
0xA7 0x00A7 #SECTION SIGN
0xA8 0x00A8 #DIAERESIS
0xA9 0x00A9 #COPYRIGHT SIGN
0xAA 0x015E #LATIN CAPITAL LETTER S WITH CEDILLA
0xAB 0x00AB #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
0xAC 0x00AC #NOT SIGN
0xAD 0x00AD #SOFT HYPHEN
0xAE 0x00AE #REGISTERED SIGN
0xAF 0x017B #LATIN CAPITAL LETTER Z WITH DOT ABOVE
0xB0 0x00B0 #DEGREE SIGN
0xB1 0x00B1 #PLUS-MINUS SIGN
0xB2 0x02DB #OGONEK
0xB3 0x0142 #LATIN SMALL LETTER L WITH STROKE
0xB4 0x00B4 #ACUTE ACCENT
0xB5 0x00B5 #MICRO SIGN
0xB6 0x00B6 #PILCROW SIGN
#0xB7 0x00B7 #MIDDLE DOT
0xB8 0x00B8 #CEDILLA
0xB9 0x0105 #LATIN SMALL LETTER A WITH OGONEK
0xBA 0x015F #LATIN SMALL LETTER S WITH CEDILLA
0xBB 0x00BB #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
0xBC 0x013D #LATIN CAPITAL LETTER L WITH CARON
0xBD 0x02DD #DOUBLE ACUTE ACCENT
0xBE 0x013E #LATIN SMALL LETTER L WITH CARON
0xBF 0x017C #LATIN SMALL LETTER Z WITH DOT ABOVE
0xC0 0x0154 #LATIN CAPITAL LETTER R WITH ACUTE
0xC1 0x00C1 #LATIN CAPITAL LETTER A WITH ACUTE
0xC2 0x00C2 #LATIN CAPITAL LETTER A WITH CIRCUMFLEX
0xC3 0x0102 #LATIN CAPITAL LETTER A WITH BREVE
0xC4 0x00C4 #LATIN CAPITAL LETTER A WITH DIAERESIS
0xC5 0x0139 #LATIN CAPITAL LETTER L WITH ACUTE
0xC6 0x0106 #LATIN CAPITAL LETTER C WITH ACUTE
0xC7 0x00C7 #LATIN CAPITAL LETTER C WITH CEDILLA
0xC8 0x010C #LATIN CAPITAL LETTER C WITH CARON
0xC9 0x00C9 #LATIN CAPITAL LETTER E WITH ACUTE
0xCA 0x0118 #LATIN CAPITAL LETTER E WITH OGONEK
0xCB 0x00CB #LATIN CAPITAL LETTER E WITH DIAERESIS
0xCC 0x011A #LATIN CAPITAL LETTER E WITH CARON
0xCD 0x00CD #LATIN CAPITAL LETTER I WITH ACUTE
0xCE 0x00CE #LATIN CAPITAL LETTER I WITH CIRCUMFLEX
0xCF 0x010E #LATIN CAPITAL LETTER D WITH CARON
0xD0 0x0110 #LATIN CAPITAL LETTER D WITH STROKE
0xD1 0x0143 #LATIN CAPITAL LETTER N WITH ACUTE
0xD2 0x0147 #LATIN CAPITAL LETTER N WITH CARON
0xD3 0x00D3 #LATIN CAPITAL LETTER O WITH ACUTE
0xD4 0x00D4 #LATIN CAPITAL LETTER O WITH CIRCUMFLEX
0xD5 0x0150 #LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
0xD6 0x00D6 #LATIN CAPITAL LETTER O WITH DIAERESIS
0xD7 0x00D7 #MULTIPLICATION SIGN
0xD8 0x0158 #LATIN CAPITAL LETTER R WITH CARON
0xD9 0x016E #LATIN CAPITAL LETTER U WITH RING ABOVE
0xDA 0x00DA #LATIN CAPITAL LETTER U WITH ACUTE
0xDB 0x0170 #LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
0xDC 0x00DC #LATIN CAPITAL LETTER U WITH DIAERESIS
0xDD 0x00DD #LATIN CAPITAL LETTER Y WITH ACUTE
0xDE 0x0162 #LATIN CAPITAL LETTER T WITH CEDILLA
0xDF 0x00DF #LATIN SMALL LETTER SHARP S
0xE0 0x0155 #LATIN SMALL LETTER R WITH ACUTE
0xE1 0x00E1 #LATIN SMALL LETTER A WITH ACUTE
0xE2 0x00E2 #LATIN SMALL LETTER A WITH CIRCUMFLEX
0xE3 0x0103 #LATIN SMALL LETTER A WITH BREVE
0xE4 0x00E4 #LATIN SMALL LETTER A WITH DIAERESIS
0xE5 0x013A #LATIN SMALL LETTER L WITH ACUTE
0xE6 0x0107 #LATIN SMALL LETTER C WITH ACUTE
0xE7 0x00E7 #LATIN SMALL LETTER C WITH CEDILLA
0xE8 0x010D #LATIN SMALL LETTER C WITH CARON
0xE9 0x00E9 #LATIN SMALL LETTER E WITH ACUTE
0xEA 0x0119 #LATIN SMALL LETTER E WITH OGONEK
0xEB 0x00EB #LATIN SMALL LETTER E WITH DIAERESIS
0xEC 0x011B #LATIN SMALL LETTER E WITH CARON
0xED 0x00ED #LATIN SMALL LETTER I WITH ACUTE
0xEE 0x00EE #LATIN SMALL LETTER I WITH CIRCUMFLEX
0xEF 0x010F #LATIN SMALL LETTER D WITH CARON
0xF0 0x0111 #LATIN SMALL LETTER D WITH STROKE
0xF1 0x0144 #LATIN SMALL LETTER N WITH ACUTE
0xF2 0x0148 #LATIN SMALL LETTER N WITH CARON
0xF3 0x00F3 #LATIN SMALL LETTER O WITH ACUTE
0xF4 0x00F4 #LATIN SMALL LETTER O WITH CIRCUMFLEX
0xF5 0x0151 #LATIN SMALL LETTER O WITH DOUBLE ACUTE
0xF6 0x00F6 #LATIN SMALL LETTER O WITH DIAERESIS
0xF7 0x00F7 #DIVISION SIGN
0xF8 0x0159 #LATIN SMALL LETTER R WITH CARON
0xF9 0x016F #LATIN SMALL LETTER U WITH RING ABOVE
0xFA 0x00FA #LATIN SMALL LETTER U WITH ACUTE
0xFB 0x0171 #LATIN SMALL LETTER U WITH DOUBLE ACUTE
0xFC 0x00FC #LATIN SMALL LETTER U WITH DIAERESIS
0xFD 0x00FD #LATIN SMALL LETTER Y WITH ACUTE
0xFE 0x0163 #LATIN SMALL LETTER T WITH CEDILLA
0xFF 0x02D9 #DOT ABOVE

225
Unicode/cp1251.cp Normal file
View File

@ -0,0 +1,225 @@
Window$ 1251 (Cyrillic)
"windows-1251", "1251", "cp1251"
0x20 0x0020 # SPACE
0x21 0x0021 # EXCLAMATION MARK
0x22 0x0022 # QUOTATION MARK
0x23 0x0023 # NUMBER SIGN
0x24 0x0024 # DOLLAR SIGN
0x25 0x0025 # PERCENT SIGN
0x26 0x0026 # AMPERSAND
0x27 0x0027 # APOSTROPHE
0x28 0x0028 # LEFT PARENTHESIS
0x29 0x0029 # RIGHT PARENTHESIS
0x2A 0x002A # ASTERISK
0x2B 0x002B # PLUS SIGN
0x2C 0x002C # COMMA
0x2D 0x002D # HYPHEN-MINUS
0x2E 0x002E # FULL STOP
0x2F 0x002F # SOLIDUS
0x30 0x0030 # DIGIT ZERO
0x31 0x0031 # DIGIT ONE
0x32 0x0032 # DIGIT TWO
0x33 0x0033 # DIGIT THREE
0x34 0x0034 # DIGIT FOUR
0x35 0x0035 # DIGIT FIVE
0x36 0x0036 # DIGIT SIX
0x37 0x0037 # DIGIT SEVEN
0x38 0x0038 # DIGIT EIGHT
0x39 0x0039 # DIGIT NINE
0x3A 0x003A # COLON
0x3B 0x003B # SEMICOLON
0x3C 0x003C # LESS-THAN SIGN
0x3D 0x003D # EQUALS SIGN
0x3E 0x003E # GREATER-THAN SIGN
0x3F 0x003F # QUESTION MARK
0x40 0x0040 # COMMERCIAL AT
0x41 0x0041 # LATIN CAPITAL LETTER A
0x42 0x0042 # LATIN CAPITAL LETTER B
0x43 0x0043 # LATIN CAPITAL LETTER C
0x44 0x0044 # LATIN CAPITAL LETTER D
0x45 0x0045 # LATIN CAPITAL LETTER E
0x46 0x0046 # LATIN CAPITAL LETTER F
0x47 0x0047 # LATIN CAPITAL LETTER G
0x48 0x0048 # LATIN CAPITAL LETTER H
0x49 0x0049 # LATIN CAPITAL LETTER I
0x4A 0x004A # LATIN CAPITAL LETTER J
0x4B 0x004B # LATIN CAPITAL LETTER K
0x4C 0x004C # LATIN CAPITAL LETTER L
0x4D 0x004D # LATIN CAPITAL LETTER M
0x4E 0x004E # LATIN CAPITAL LETTER N
0x4F 0x004F # LATIN CAPITAL LETTER O
0x50 0x0050 # LATIN CAPITAL LETTER P
0x51 0x0051 # LATIN CAPITAL LETTER Q
0x52 0x0052 # LATIN CAPITAL LETTER R
0x53 0x0053 # LATIN CAPITAL LETTER S
0x54 0x0054 # LATIN CAPITAL LETTER T
0x55 0x0055 # LATIN CAPITAL LETTER U
0x56 0x0056 # LATIN CAPITAL LETTER V
0x57 0x0057 # LATIN CAPITAL LETTER W
0x58 0x0058 # LATIN CAPITAL LETTER X
0x59 0x0059 # LATIN CAPITAL LETTER Y
0x5A 0x005A # LATIN CAPITAL LETTER Z
0x5B 0x005B # LEFT SQUARE BRACKET
0x5C 0x005C # REVERSE SOLIDUS
0x5D 0x005D # RIGHT SQUARE BRACKET
0x5E 0x005E # CIRCUMFLEX ACCENT
0x5F 0x005F # LOW LINE
0x60 0x0060 # GRAVE ACCENT
0x61 0x0061 # LATIN SMALL LETTER A
0x62 0x0062 # LATIN SMALL LETTER B
0x63 0x0063 # LATIN SMALL LETTER C
0x64 0x0064 # LATIN SMALL LETTER D
0x65 0x0065 # LATIN SMALL LETTER E
0x66 0x0066 # LATIN SMALL LETTER F
0x67 0x0067 # LATIN SMALL LETTER G
0x68 0x0068 # LATIN SMALL LETTER H
0x69 0x0069 # LATIN SMALL LETTER I
0x6A 0x006A # LATIN SMALL LETTER J
0x6B 0x006B # LATIN SMALL LETTER K
0x6C 0x006C # LATIN SMALL LETTER L
0x6D 0x006D # LATIN SMALL LETTER M
0x6E 0x006E # LATIN SMALL LETTER N
0x6F 0x006F # LATIN SMALL LETTER O
0x70 0x0070 # LATIN SMALL LETTER P
0x71 0x0071 # LATIN SMALL LETTER Q
0x72 0x0072 # LATIN SMALL LETTER R
0x73 0x0073 # LATIN SMALL LETTER S
0x74 0x0074 # LATIN SMALL LETTER T
0x75 0x0075 # LATIN SMALL LETTER U
0x76 0x0076 # LATIN SMALL LETTER V
0x77 0x0077 # LATIN SMALL LETTER W
0x78 0x0078 # LATIN SMALL LETTER X
0x79 0x0079 # LATIN SMALL LETTER Y
0x7A 0x007A # LATIN SMALL LETTER Z
0x7B 0x007B # LEFT CURLY BRACKET
0x7C 0x007C # VERTICAL LINE
0x7D 0x007D # RIGHT CURLY BRACKET
0x7E 0x007E # TILDE
0x80 0x0402 # CYRILLIC CAPITAL LETTER DJE
0x81 0x0403 # CYRILLIC CAPITAL LETTER GJE
0x82 0x201A # SINGLE LOW-9 QUOTATION MARK
0x83 0x0453 # CYRILLIC SMALL LETTER GJE
0x84 0x201E # DOUBLE LOW-9 QUOTATION MARK
0x85 0x2026 # HORIZONTAL ELLIPSIS
0x86 0x2020 # DAGGER
0x87 0x2021 # DOUBLE DAGGER
0x88 0x20AC # EURO SIGN
0x89 0x2030 # PER MILLE SIGN
0x8A 0x0409 # CYRILLIC CAPITAL LETTER LJE
0x8B 0x2039 # SINGLE LEFT-POINTING ANGLE QUOTATION MARK
0x8C 0x040A # CYRILLIC CAPITAL LETTER NJE
0x8D 0x040C # CYRILLIC CAPITAL LETTER KJE
0x8E 0x040B # CYRILLIC CAPITAL LETTER TSHE
0x8F 0x040F # CYRILLIC CAPITAL LETTER DZHE
0x90 0x0452 # CYRILLIC SMALL LETTER DJE
0x91 0x2018 # LEFT SINGLE QUOTATION MARK
0x92 0x2019 # RIGHT SINGLE QUOTATION MARK
0x93 0x201C # LEFT DOUBLE QUOTATION MARK
0x94 0x201D # RIGHT DOUBLE QUOTATION MARK
0x95 0x2022 # BULLET
0x96 0x2013 # EN DASH
0x97 0x2014 # EM DASH
0x99 0x2122 # TRADE MARK SIGN
0x9A 0x0459 # CYRILLIC SMALL LETTER LJE
0x9B 0x203A # SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
0x9C 0x045A # CYRILLIC SMALL LETTER NJE
0x9D 0x045C # CYRILLIC SMALL LETTER KJE
0x9E 0x045B # CYRILLIC SMALL LETTER TSHE
0x9F 0x045F # CYRILLIC SMALL LETTER DZHE
0xA0 0x00A0 # NO-BREAK SPACE
0xA1 0x040E # CYRILLIC CAPITAL LETTER SHORT U
0xA2 0x045E # CYRILLIC SMALL LETTER SHORT U
0xA3 0x0408 # CYRILLIC CAPITAL LETTER JE
0xA4 0x00A4 # CURRENCY SIGN
0xA5 0x0490 # CYRILLIC CAPITAL LETTER GHE WITH UPTURN
0xA6 0x00A6 # BROKEN BAR
0xA7 0x00A7 # SECTION SIGN
0xA8 0x0401 # CYRILLIC CAPITAL LETTER IO
0xA9 0x00A9 # COPYRIGHT SIGN
0xAA 0x0404 # CYRILLIC CAPITAL LETTER UKRAINIAN IE
0xAB 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
0xAC 0x00AC # NOT SIGN
0xAD 0x00AD # SOFT HYPHEN
0xAE 0x00AE # REGISTERED SIGN
0xAF 0x0407 # CYRILLIC CAPITAL LETTER YI
0xB0 0x00B0 # DEGREE SIGN
0xB1 0x00B1 # PLUS-MINUS SIGN
0xB2 0x0406 # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
0xB3 0x0456 # CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
0xB4 0x0491 # CYRILLIC SMALL LETTER GHE WITH UPTURN
0xB5 0x00B5 # MICRO SIGN
0xB6 0x00B6 # PILCROW SIGN
0xB7 0x00B7 # MIDDLE DOT
0xB8 0x0451 # CYRILLIC SMALL LETTER IO
0xB9 0x2116 # NUMERO SIGN
0xBA 0x0454 # CYRILLIC SMALL LETTER UKRAINIAN IE
0xBB 0x00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
0xBC 0x0458 # CYRILLIC SMALL LETTER JE
0xBD 0x0405 # CYRILLIC CAPITAL LETTER DZE
0xBE 0x0455 # CYRILLIC SMALL LETTER DZE
0xBF 0x0457 # CYRILLIC SMALL LETTER YI
0xC0 0x0410 # CYRILLIC CAPITAL LETTER A
0xC1 0x0411 # CYRILLIC CAPITAL LETTER BE
0xC2 0x0412 # CYRILLIC CAPITAL LETTER VE
0xC3 0x0413 # CYRILLIC CAPITAL LETTER GHE
0xC4 0x0414 # CYRILLIC CAPITAL LETTER DE
0xC5 0x0415 # CYRILLIC CAPITAL LETTER IE
0xC6 0x0416 # CYRILLIC CAPITAL LETTER ZHE
0xC7 0x0417 # CYRILLIC CAPITAL LETTER ZE
0xC8 0x0418 # CYRILLIC CAPITAL LETTER I
0xC9 0x0419 # CYRILLIC CAPITAL LETTER SHORT I
0xCA 0x041A # CYRILLIC CAPITAL LETTER KA
0xCB 0x041B # CYRILLIC CAPITAL LETTER EL
0xCC 0x041C # CYRILLIC CAPITAL LETTER EM
0xCD 0x041D # CYRILLIC CAPITAL LETTER EN
0xCE 0x041E # CYRILLIC CAPITAL LETTER O
0xCF 0x041F # CYRILLIC CAPITAL LETTER PE
0xD0 0x0420 # CYRILLIC CAPITAL LETTER ER
0xD1 0x0421 # CYRILLIC CAPITAL LETTER ES
0xD2 0x0422 # CYRILLIC CAPITAL LETTER TE
0xD3 0x0423 # CYRILLIC CAPITAL LETTER U
0xD4 0x0424 # CYRILLIC CAPITAL LETTER EF
0xD5 0x0425 # CYRILLIC CAPITAL LETTER HA
0xD6 0x0426 # CYRILLIC CAPITAL LETTER TSE
0xD7 0x0427 # CYRILLIC CAPITAL LETTER CHE
0xD8 0x0428 # CYRILLIC CAPITAL LETTER SHA
0xD9 0x0429 # CYRILLIC CAPITAL LETTER SHCHA
0xDA 0x042A # CYRILLIC CAPITAL LETTER HARD SIGN
0xDB 0x042B # CYRILLIC CAPITAL LETTER YERU
0xDC 0x042C # CYRILLIC CAPITAL LETTER SOFT SIGN
0xDD 0x042D # CYRILLIC CAPITAL LETTER E
0xDE 0x042E # CYRILLIC CAPITAL LETTER YU
0xDF 0x042F # CYRILLIC CAPITAL LETTER YA
0xE0 0x0430 # CYRILLIC SMALL LETTER A
0xE1 0x0431 # CYRILLIC SMALL LETTER BE
0xE2 0x0432 # CYRILLIC SMALL LETTER VE
0xE3 0x0433 # CYRILLIC SMALL LETTER GHE
0xE4 0x0434 # CYRILLIC SMALL LETTER DE
0xE5 0x0435 # CYRILLIC SMALL LETTER IE
0xE6 0x0436 # CYRILLIC SMALL LETTER ZHE
0xE7 0x0437 # CYRILLIC SMALL LETTER ZE
0xE8 0x0438 # CYRILLIC SMALL LETTER I
0xE9 0x0439 # CYRILLIC SMALL LETTER SHORT I
0xEA 0x043A # CYRILLIC SMALL LETTER KA
0xEB 0x043B # CYRILLIC SMALL LETTER EL
0xEC 0x043C # CYRILLIC SMALL LETTER EM
0xED 0x043D # CYRILLIC SMALL LETTER EN
0xEE 0x043E # CYRILLIC SMALL LETTER O
0xEF 0x043F # CYRILLIC SMALL LETTER PE
0xF0 0x0440 # CYRILLIC SMALL LETTER ER
0xF1 0x0441 # CYRILLIC SMALL LETTER ES
0xF2 0x0442 # CYRILLIC SMALL LETTER TE
0xF3 0x0443 # CYRILLIC SMALL LETTER U
0xF4 0x0444 # CYRILLIC SMALL LETTER EF
0xF5 0x0445 # CYRILLIC SMALL LETTER HA
0xF6 0x0446 # CYRILLIC SMALL LETTER TSE
0xF7 0x0447 # CYRILLIC SMALL LETTER CHE
0xF8 0x0448 # CYRILLIC SMALL LETTER SHA
0xF9 0x0449 # CYRILLIC SMALL LETTER SHCHA
0xFA 0x044A # CYRILLIC SMALL LETTER HARD SIGN
0xFB 0x044B # CYRILLIC SMALL LETTER YERU
0xFC 0x044C # CYRILLIC SMALL LETTER SOFT SIGN
0xFD 0x044D # CYRILLIC SMALL LETTER E
0xFE 0x044E # CYRILLIC SMALL LETTER YU
0xFF 0x044F # CYRILLIC SMALL LETTER YA

254
Unicode/cp1252.cp Normal file
View File

@ -0,0 +1,254 @@
Window$ 1252 (Western European)
"windows-1252", "1252"
0x00 0x0000 #NULL
0x01 0x0001 #START OF HEADING
0x02 0x0002 #START OF TEXT
0x03 0x0003 #END OF TEXT
0x04 0x0004 #END OF TRANSMISSION
0x05 0x0005 #ENQUIRY
0x06 0x0006 #ACKNOWLEDGE
0x07 0x0007 #BELL
0x08 0x0008 #BACKSPACE
0x09 0x0009 #HORIZONTAL TABULATION
0x0A 0x000A #LINE FEED
0x0B 0x000B #VERTICAL TABULATION
0x0C 0x000C #FORM FEED
0x0D 0x000D #CARRIAGE RETURN
0x0E 0x000E #SHIFT OUT
0x0F 0x000F #SHIFT IN
0x10 0x0010 #DATA LINK ESCAPE
0x11 0x0011 #DEVICE CONTROL ONE
0x12 0x0012 #DEVICE CONTROL TWO
0x13 0x0013 #DEVICE CONTROL THREE
0x14 0x0014 #DEVICE CONTROL FOUR
0x15 0x0015 #NEGATIVE ACKNOWLEDGE
0x16 0x0016 #SYNCHRONOUS IDLE
0x17 0x0017 #END OF TRANSMISSION BLOCK
0x18 0x0018 #CANCEL
0x19 0x0019 #END OF MEDIUM
0x1A 0x001A #SUBSTITUTE
0x1B 0x001B #ESCAPE
0x1C 0x001C #FILE SEPARATOR
0x1D 0x001D #GROUP SEPARATOR
0x1E 0x001E #RECORD SEPARATOR
0x1F 0x001F #UNIT SEPARATOR
0x20 0x0020 #SPACE
0x21 0x0021 #EXCLAMATION MARK
0x22 0x0022 #QUOTATION MARK
0x23 0x0023 #NUMBER SIGN
0x24 0x0024 #DOLLAR SIGN
0x25 0x0025 #PERCENT SIGN
0x26 0x0026 #AMPERSAND
0x27 0x0027 #APOSTROPHE
0x28 0x0028 #LEFT PARENTHESIS
0x29 0x0029 #RIGHT PARENTHESIS
0x2A 0x002A #ASTERISK
0x2B 0x002B #PLUS SIGN
0x2C 0x002C #COMMA
0x2D 0x002D #HYPHEN-MINUS
0x2E 0x002E #FULL STOP
0x2F 0x002F #SOLIDUS
0x30 0x0030 #DIGIT ZERO
0x31 0x0031 #DIGIT ONE
0x32 0x0032 #DIGIT TWO
0x33 0x0033 #DIGIT THREE
0x34 0x0034 #DIGIT FOUR
0x35 0x0035 #DIGIT FIVE
0x36 0x0036 #DIGIT SIX
0x37 0x0037 #DIGIT SEVEN
0x38 0x0038 #DIGIT EIGHT
0x39 0x0039 #DIGIT NINE
0x3A 0x003A #COLON
0x3B 0x003B #SEMICOLON
0x3C 0x003C #LESS-THAN SIGN
0x3D 0x003D #EQUALS SIGN
0x3E 0x003E #GREATER-THAN SIGN
0x3F 0x003F #QUESTION MARK
0x40 0x0040 #COMMERCIAL AT
0x41 0x0041 #LATIN CAPITAL LETTER A
0x42 0x0042 #LATIN CAPITAL LETTER B
0x43 0x0043 #LATIN CAPITAL LETTER C
0x44 0x0044 #LATIN CAPITAL LETTER D
0x45 0x0045 #LATIN CAPITAL LETTER E
0x46 0x0046 #LATIN CAPITAL LETTER F
0x47 0x0047 #LATIN CAPITAL LETTER G
0x48 0x0048 #LATIN CAPITAL LETTER H
0x49 0x0049 #LATIN CAPITAL LETTER I
0x4A 0x004A #LATIN CAPITAL LETTER J
0x4B 0x004B #LATIN CAPITAL LETTER K
0x4C 0x004C #LATIN CAPITAL LETTER L
0x4D 0x004D #LATIN CAPITAL LETTER M
0x4E 0x004E #LATIN CAPITAL LETTER N
0x4F 0x004F #LATIN CAPITAL LETTER O
0x50 0x0050 #LATIN CAPITAL LETTER P
0x51 0x0051 #LATIN CAPITAL LETTER Q
0x52 0x0052 #LATIN CAPITAL LETTER R
0x53 0x0053 #LATIN CAPITAL LETTER S
0x54 0x0054 #LATIN CAPITAL LETTER T
0x55 0x0055 #LATIN CAPITAL LETTER U
0x56 0x0056 #LATIN CAPITAL LETTER V
0x57 0x0057 #LATIN CAPITAL LETTER W
0x58 0x0058 #LATIN CAPITAL LETTER X
0x59 0x0059 #LATIN CAPITAL LETTER Y
0x5A 0x005A #LATIN CAPITAL LETTER Z
0x5B 0x005B #LEFT SQUARE BRACKET
0x5C 0x005C #REVERSE SOLIDUS
0x5D 0x005D #RIGHT SQUARE BRACKET
0x5E 0x005E #CIRCUMFLEX ACCENT
0x5F 0x005F #LOW LINE
0x60 0x0060 #GRAVE ACCENT
0x61 0x0061 #LATIN SMALL LETTER A
0x62 0x0062 #LATIN SMALL LETTER B
0x63 0x0063 #LATIN SMALL LETTER C
0x64 0x0064 #LATIN SMALL LETTER D
0x65 0x0065 #LATIN SMALL LETTER E
0x66 0x0066 #LATIN SMALL LETTER F
0x67 0x0067 #LATIN SMALL LETTER G
0x68 0x0068 #LATIN SMALL LETTER H
0x69 0x0069 #LATIN SMALL LETTER I
0x6A 0x006A #LATIN SMALL LETTER J
0x6B 0x006B #LATIN SMALL LETTER K
0x6C 0x006C #LATIN SMALL LETTER L
0x6D 0x006D #LATIN SMALL LETTER M
0x6E 0x006E #LATIN SMALL LETTER N
0x6F 0x006F #LATIN SMALL LETTER O
0x70 0x0070 #LATIN SMALL LETTER P
0x71 0x0071 #LATIN SMALL LETTER Q
0x72 0x0072 #LATIN SMALL LETTER R
0x73 0x0073 #LATIN SMALL LETTER S
0x74 0x0074 #LATIN SMALL LETTER T
0x75 0x0075 #LATIN SMALL LETTER U
0x76 0x0076 #LATIN SMALL LETTER V
0x77 0x0077 #LATIN SMALL LETTER W
0x78 0x0078 #LATIN SMALL LETTER X
0x79 0x0079 #LATIN SMALL LETTER Y
0x7A 0x007A #LATIN SMALL LETTER Z
0x7B 0x007B #LEFT CURLY BRACKET
0x7C 0x007C #VERTICAL LINE
0x7D 0x007D #RIGHT CURLY BRACKET
0x7E 0x007E #TILDE
0x7F 0x007F #DELETE
0x80 0x20AC #EURO SIGN
0x82 0x201A #SINGLE LOW-9 QUOTATION MARK
0x83 0x0192 #LATIN SMALL LETTER F WITH HOOK
0x84 0x201E #DOUBLE LOW-9 QUOTATION MARK
0x85 0x2026 #HORIZONTAL ELLIPSIS
0x86 0x2020 #DAGGER
0x87 0x2021 #DOUBLE DAGGER
0x88 0x02C6 #MODIFIER LETTER CIRCUMFLEX ACCENT
0x89 0x2030 #PER MILLE SIGN
0x8A 0x0160 #LATIN CAPITAL LETTER S WITH CARON
0x8B 0x2039 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK
0x8C 0x0152 #LATIN CAPITAL LIGATURE OE
0x8E 0x017D #LATIN CAPITAL LETTER Z WITH CARON
0x91 0x2018 #LEFT SINGLE QUOTATION MARK
0x92 0x2019 #RIGHT SINGLE QUOTATION MARK
0x93 0x201C #LEFT DOUBLE QUOTATION MARK
0x94 0x201D #RIGHT DOUBLE QUOTATION MARK
0x95 0x2022 #BULLET
0x96 0x2013 #EN DASH
0x97 0x2014 #EM DASH
0x98 0x02DC #SMALL TILDE
0x99 0x2122 #TRADE MARK SIGN
0x9A 0x0161 #LATIN SMALL LETTER S WITH CARON
0x9B 0x203A #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
0x9C 0x0153 #LATIN SMALL LIGATURE OE
0x9E 0x017E #LATIN SMALL LETTER Z WITH CARON
0x9F 0x0178 #LATIN CAPITAL LETTER Y WITH DIAERESIS
0xA0 0x00A0 #NO-BREAK SPACE
0xA1 0x00A1 #INVERTED EXCLAMATION MARK
0xA2 0x00A2 #CENT SIGN
0xA3 0x00A3 #POUND SIGN
0xA4 0x00A4 #CURRENCY SIGN
0xA5 0x00A5 #YEN SIGN
0xA6 0x00A6 #BROKEN BAR
0xA7 0x00A7 #SECTION SIGN
0xA8 0x00A8 #DIAERESIS
0xA9 0x00A9 #COPYRIGHT SIGN
0xAA 0x00AA #FEMININE ORDINAL INDICATOR
0xAB 0x00AB #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
0xAC 0x00AC #NOT SIGN
0xAD 0x00AD #SOFT HYPHEN
0xAE 0x00AE #REGISTERED SIGN
0xAF 0x00AF #MACRON
0xB0 0x00B0 #DEGREE SIGN
0xB1 0x00B1 #PLUS-MINUS SIGN
0xB2 0x00B2 #SUPERSCRIPT TWO
0xB3 0x00B3 #SUPERSCRIPT THREE
0xB4 0x00B4 #ACUTE ACCENT
0xB5 0x00B5 #MICRO SIGN
0xB6 0x00B6 #PILCROW SIGN
0xB7 0x00B7 #MIDDLE DOT
0xB8 0x00B8 #CEDILLA
0xB9 0x00B9 #SUPERSCRIPT ONE
0xBA 0x00BA #MASCULINE ORDINAL INDICATOR
0xBB 0x00BB #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
0xBC 0x00BC #VULGAR FRACTION ONE QUARTER
0xBD 0x00BD #VULGAR FRACTION ONE HALF
0xBE 0x00BE #VULGAR FRACTION THREE QUARTERS
0xBF 0x00BF #INVERTED QUESTION MARK
0xC0 0x00C0 #LATIN CAPITAL LETTER A WITH GRAVE
0xC1 0x00C1 #LATIN CAPITAL LETTER A WITH ACUTE
0xC2 0x00C2 #LATIN CAPITAL LETTER A WITH CIRCUMFLEX
0xC3 0x00C3 #LATIN CAPITAL LETTER A WITH TILDE
0xC4 0x00C4 #LATIN CAPITAL LETTER A WITH DIAERESIS
0xC5 0x00C5 #LATIN CAPITAL LETTER A WITH RING ABOVE
0xC6 0x00C6 #LATIN CAPITAL LIGATURE AE
0xC7 0x00C7 #LATIN CAPITAL LETTER C WITH CEDILLA
0xC8 0x00C8 #LATIN CAPITAL LETTER E WITH GRAVE
0xC9 0x00C9 #LATIN CAPITAL LETTER E WITH ACUTE
0xCA 0x00CA #LATIN CAPITAL LETTER E WITH CIRCUMFLEX
0xCB 0x00CB #LATIN CAPITAL LETTER E WITH DIAERESIS
0xCC 0x00CC #LATIN CAPITAL LETTER I WITH GRAVE
0xCD 0x00CD #LATIN CAPITAL LETTER I WITH ACUTE
0xCE 0x00CE #LATIN CAPITAL LETTER I WITH CIRCUMFLEX
0xCF 0x00CF #LATIN CAPITAL LETTER I WITH DIAERESIS
0xD0 0x00D0 #LATIN CAPITAL LETTER ETH
0xD1 0x00D1 #LATIN CAPITAL LETTER N WITH TILDE
0xD2 0x00D2 #LATIN CAPITAL LETTER O WITH GRAVE
0xD3 0x00D3 #LATIN CAPITAL LETTER O WITH ACUTE
0xD4 0x00D4 #LATIN CAPITAL LETTER O WITH CIRCUMFLEX
0xD5 0x00D5 #LATIN CAPITAL LETTER O WITH TILDE
0xD6 0x00D6 #LATIN CAPITAL LETTER O WITH DIAERESIS
0xD7 0x00D7 #MULTIPLICATION SIGN
0xD8 0x00D8 #LATIN CAPITAL LETTER O WITH STROKE
0xD9 0x00D9 #LATIN CAPITAL LETTER U WITH GRAVE
0xDA 0x00DA #LATIN CAPITAL LETTER U WITH ACUTE
0xDB 0x00DB #LATIN CAPITAL LETTER U WITH CIRCUMFLEX
0xDC 0x00DC #LATIN CAPITAL LETTER U WITH DIAERESIS
0xDD 0x00DD #LATIN CAPITAL LETTER Y WITH ACUTE
0xDE 0x00DE #LATIN CAPITAL LETTER THORN
0xDF 0x00DF #LATIN SMALL LETTER SHARP S
0xE0 0x00E0 #LATIN SMALL LETTER A WITH GRAVE
0xE1 0x00E1 #LATIN SMALL LETTER A WITH ACUTE
0xE2 0x00E2 #LATIN SMALL LETTER A WITH CIRCUMFLEX
0xE3 0x00E3 #LATIN SMALL LETTER A WITH TILDE
0xE4 0x00E4 #LATIN SMALL LETTER A WITH DIAERESIS
0xE5 0x00E5 #LATIN SMALL LETTER A WITH RING ABOVE
0xE6 0x00E6 #LATIN SMALL LIGATURE AE
0xE7 0x00E7 #LATIN SMALL LETTER C WITH CEDILLA
0xE8 0x00E8 #LATIN SMALL LETTER E WITH GRAVE
0xE9 0x00E9 #LATIN SMALL LETTER E WITH ACUTE
0xEA 0x00EA #LATIN SMALL LETTER E WITH CIRCUMFLEX
0xEB 0x00EB #LATIN SMALL LETTER E WITH DIAERESIS
0xEC 0x00EC #LATIN SMALL LETTER I WITH GRAVE
0xED 0x00ED #LATIN SMALL LETTER I WITH ACUTE
0xEE 0x00EE #LATIN SMALL LETTER I WITH CIRCUMFLEX
0xEF 0x00EF #LATIN SMALL LETTER I WITH DIAERESIS
0xF0 0x00F0 #LATIN SMALL LETTER ETH
0xF1 0x00F1 #LATIN SMALL LETTER N WITH TILDE
0xF2 0x00F2 #LATIN SMALL LETTER O WITH GRAVE
0xF3 0x00F3 #LATIN SMALL LETTER O WITH ACUTE
0xF4 0x00F4 #LATIN SMALL LETTER O WITH CIRCUMFLEX
0xF5 0x00F5 #LATIN SMALL LETTER O WITH TILDE
0xF6 0x00F6 #LATIN SMALL LETTER O WITH DIAERESIS
0xF7 0x00F7 #DIVISION SIGN
0xF8 0x00F8 #LATIN SMALL LETTER O WITH STROKE
0xF9 0x00F9 #LATIN SMALL LETTER U WITH GRAVE
0xFA 0x00FA #LATIN SMALL LETTER U WITH ACUTE
0xFB 0x00FB #LATIN SMALL LETTER U WITH CIRCUMFLEX
0xFC 0x00FC #LATIN SMALL LETTER U WITH DIAERESIS
0xFD 0x00FD #LATIN SMALL LETTER Y WITH ACUTE
0xFE 0x00FE #LATIN SMALL LETTER THORN
0xFF 0x00FF #LATIN SMALL LETTER Y WITH DIAERESIS

276
Unicode/cp1256.cp Normal file
View File

@ -0,0 +1,276 @@
Window$ 1256 (Arabic)
"windows-1256", "1256", "cp1256"
#
# Name: cp1256 to Unicode table
# Unicode version: 2.1
# Table version: 2.01
# Table format: Format A
# Date: 01/5/99
#
# Contact: cpxlate@microsoft.com
#
# General notes: none
#
# Format: Three tab-separated columns
# Column #1 is the cp1256 code (in hex)
# Column #2 is the Unicode (in hex as 0xXXXX)
# Column #3 is the Unicode name (follows a comment sign, '#')
#
# The entries are in cp1256 order
#
0x00 0x0000 #NULL
0x01 0x0001 #START OF HEADING
0x02 0x0002 #START OF TEXT
0x03 0x0003 #END OF TEXT
0x04 0x0004 #END OF TRANSMISSION
0x05 0x0005 #ENQUIRY
0x06 0x0006 #ACKNOWLEDGE
0x07 0x0007 #BELL
0x08 0x0008 #BACKSPACE
0x09 0x0009 #HORIZONTAL TABULATION
0x0A 0x000A #LINE FEED
0x0B 0x000B #VERTICAL TABULATION
0x0C 0x000C #FORM FEED
0x0D 0x000D #CARRIAGE RETURN
0x0E 0x000E #SHIFT OUT
0x0F 0x000F #SHIFT IN
0x10 0x0010 #DATA LINK ESCAPE
0x11 0x0011 #DEVICE CONTROL ONE
0x12 0x0012 #DEVICE CONTROL TWO
0x13 0x0013 #DEVICE CONTROL THREE
0x14 0x0014 #DEVICE CONTROL FOUR
0x15 0x0015 #NEGATIVE ACKNOWLEDGE
0x16 0x0016 #SYNCHRONOUS IDLE
0x17 0x0017 #END OF TRANSMISSION BLOCK
0x18 0x0018 #CANCEL
0x19 0x0019 #END OF MEDIUM
0x1A 0x001A #SUBSTITUTE
0x1B 0x001B #ESCAPE
0x1C 0x001C #FILE SEPARATOR
0x1D 0x001D #GROUP SEPARATOR
0x1E 0x001E #RECORD SEPARATOR
0x1F 0x001F #UNIT SEPARATOR
0x20 0x0020 #SPACE
0x21 0x0021 #EXCLAMATION MARK
0x22 0x0022 #QUOTATION MARK
0x23 0x0023 #NUMBER SIGN
0x24 0x0024 #DOLLAR SIGN
0x25 0x0025 #PERCENT SIGN
0x26 0x0026 #AMPERSAND
0x27 0x0027 #APOSTROPHE
0x28 0x0028 #LEFT PARENTHESIS
0x29 0x0029 #RIGHT PARENTHESIS
0x2A 0x002A #ASTERISK
0x2B 0x002B #PLUS SIGN
0x2C 0x002C #COMMA
0x2D 0x002D #HYPHEN-MINUS
0x2E 0x002E #FULL STOP
0x2F 0x002F #SOLIDUS
0x30 0x0030 #DIGIT ZERO
0x31 0x0031 #DIGIT ONE
0x32 0x0032 #DIGIT TWO
0x33 0x0033 #DIGIT THREE
0x34 0x0034 #DIGIT FOUR
0x35 0x0035 #DIGIT FIVE
0x36 0x0036 #DIGIT SIX
0x37 0x0037 #DIGIT SEVEN
0x38 0x0038 #DIGIT EIGHT
0x39 0x0039 #DIGIT NINE
0x3A 0x003A #COLON
0x3B 0x003B #SEMICOLON
0x3C 0x003C #LESS-THAN SIGN
0x3D 0x003D #EQUALS SIGN
0x3E 0x003E #GREATER-THAN SIGN
0x3F 0x003F #QUESTION MARK
0x40 0x0040 #COMMERCIAL AT
0x41 0x0041 #LATIN CAPITAL LETTER A
0x42 0x0042 #LATIN CAPITAL LETTER B
0x43 0x0043 #LATIN CAPITAL LETTER C
0x44 0x0044 #LATIN CAPITAL LETTER D
0x45 0x0045 #LATIN CAPITAL LETTER E
0x46 0x0046 #LATIN CAPITAL LETTER F
0x47 0x0047 #LATIN CAPITAL LETTER G
0x48 0x0048 #LATIN CAPITAL LETTER H
0x49 0x0049 #LATIN CAPITAL LETTER I
0x4A 0x004A #LATIN CAPITAL LETTER J
0x4B 0x004B #LATIN CAPITAL LETTER K
0x4C 0x004C #LATIN CAPITAL LETTER L
0x4D 0x004D #LATIN CAPITAL LETTER M
0x4E 0x004E #LATIN CAPITAL LETTER N
0x4F 0x004F #LATIN CAPITAL LETTER O
0x50 0x0050 #LATIN CAPITAL LETTER P
0x51 0x0051 #LATIN CAPITAL LETTER Q
0x52 0x0052 #LATIN CAPITAL LETTER R
0x53 0x0053 #LATIN CAPITAL LETTER S
0x54 0x0054 #LATIN CAPITAL LETTER T
0x55 0x0055 #LATIN CAPITAL LETTER U
0x56 0x0056 #LATIN CAPITAL LETTER V
0x57 0x0057 #LATIN CAPITAL LETTER W
0x58 0x0058 #LATIN CAPITAL LETTER X
0x59 0x0059 #LATIN CAPITAL LETTER Y
0x5A 0x005A #LATIN CAPITAL LETTER Z
0x5B 0x005B #LEFT SQUARE BRACKET
0x5C 0x005C #REVERSE SOLIDUS
0x5D 0x005D #RIGHT SQUARE BRACKET
0x5E 0x005E #CIRCUMFLEX ACCENT
0x5F 0x005F #LOW LINE
0x60 0x0060 #GRAVE ACCENT
0x61 0x0061 #LATIN SMALL LETTER A
0x62 0x0062 #LATIN SMALL LETTER B
0x63 0x0063 #LATIN SMALL LETTER C
0x64 0x0064 #LATIN SMALL LETTER D
0x65 0x0065 #LATIN SMALL LETTER E
0x66 0x0066 #LATIN SMALL LETTER F
0x67 0x0067 #LATIN SMALL LETTER G
0x68 0x0068 #LATIN SMALL LETTER H
0x69 0x0069 #LATIN SMALL LETTER I
0x6A 0x006A #LATIN SMALL LETTER J
0x6B 0x006B #LATIN SMALL LETTER K
0x6C 0x006C #LATIN SMALL LETTER L
0x6D 0x006D #LATIN SMALL LETTER M
0x6E 0x006E #LATIN SMALL LETTER N
0x6F 0x006F #LATIN SMALL LETTER O
0x70 0x0070 #LATIN SMALL LETTER P
0x71 0x0071 #LATIN SMALL LETTER Q
0x72 0x0072 #LATIN SMALL LETTER R
0x73 0x0073 #LATIN SMALL LETTER S
0x74 0x0074 #LATIN SMALL LETTER T
0x75 0x0075 #LATIN SMALL LETTER U
0x76 0x0076 #LATIN SMALL LETTER V
0x77 0x0077 #LATIN SMALL LETTER W
0x78 0x0078 #LATIN SMALL LETTER X
0x79 0x0079 #LATIN SMALL LETTER Y
0x7A 0x007A #LATIN SMALL LETTER Z
0x7B 0x007B #LEFT CURLY BRACKET
0x7C 0x007C #VERTICAL LINE
0x7D 0x007D #RIGHT CURLY BRACKET
0x7E 0x007E #TILDE
0x7F 0x007F #DELETE
0x80 0x20AC #EURO SIGN
0x81 0x067E #ARABIC LETTER PEH
0x82 0x201A #SINGLE LOW-9 QUOTATION MARK
0x83 0x0192 #LATIN SMALL LETTER F WITH HOOK
0x84 0x201E #DOUBLE LOW-9 QUOTATION MARK
0x85 0x2026 #HORIZONTAL ELLIPSIS
0x86 0x2020 #DAGGER
0x87 0x2021 #DOUBLE DAGGER
0x88 0x02C6 #MODIFIER LETTER CIRCUMFLEX ACCENT
0x89 0x2030 #PER MILLE SIGN
0x8A 0x0679 #ARABIC LETTER TTEH
0x8B 0x2039 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK
0x8C 0x0152 #LATIN CAPITAL LIGATURE OE
0x8D 0x0686 #ARABIC LETTER TCHEH
0x8E 0x0698 #ARABIC LETTER JEH
0x8F 0x0688 #ARABIC LETTER DDAL
0x90 0x06AF #ARABIC LETTER GAF
0x91 0x2018 #LEFT SINGLE QUOTATION MARK
0x92 0x2019 #RIGHT SINGLE QUOTATION MARK
0x93 0x201C #LEFT DOUBLE QUOTATION MARK
0x94 0x201D #RIGHT DOUBLE QUOTATION MARK
0x95 0x2022 #BULLET
0x96 0x2013 #EN DASH
0x97 0x2014 #EM DASH
0x98 0x06A9 #ARABIC LETTER KEHEH
0x99 0x2122 #TRADE MARK SIGN
0x9A 0x0691 #ARABIC LETTER RREH
0x9B 0x203A #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
0x9C 0x0153 #LATIN SMALL LIGATURE OE
0x9D 0x200C #ZERO WIDTH NON-JOINER
0x9E 0x200D #ZERO WIDTH JOINER
0x9F 0x06BA #ARABIC LETTER NOON GHUNNA
0xA0 0x00A0 #NO-BREAK SPACE
0xA1 0x060C #ARABIC COMMA
0xA2 0x00A2 #CENT SIGN
0xA3 0x00A3 #POUND SIGN
0xA4 0x00A4 #CURRENCY SIGN
0xA5 0x00A5 #YEN SIGN
0xA6 0x00A6 #BROKEN BAR
0xA7 0x00A7 #SECTION SIGN
0xA8 0x00A8 #DIAERESIS
0xA9 0x00A9 #COPYRIGHT SIGN
0xAA 0x06BE #ARABIC LETTER HEH DOACHASHMEE
0xAB 0x00AB #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
0xAC 0x00AC #NOT SIGN
0xAD 0x00AD #SOFT HYPHEN
0xAE 0x00AE #REGISTERED SIGN
0xAF 0x00AF #MACRON
0xB0 0x00B0 #DEGREE SIGN
0xB1 0x00B1 #PLUS-MINUS SIGN
0xB2 0x00B2 #SUPERSCRIPT TWO
0xB3 0x00B3 #SUPERSCRIPT THREE
0xB4 0x00B4 #ACUTE ACCENT
0xB5 0x00B5 #MICRO SIGN
0xB6 0x00B6 #PILCROW SIGN
0xB7 0x00B7 #MIDDLE DOT
0xB8 0x00B8 #CEDILLA
0xB9 0x00B9 #SUPERSCRIPT ONE
0xBA 0x061B #ARABIC SEMICOLON
0xBB 0x00BB #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
0xBC 0x00BC #VULGAR FRACTION ONE QUARTER
0xBD 0x00BD #VULGAR FRACTION ONE HALF
0xBE 0x00BE #VULGAR FRACTION THREE QUARTERS
0xBF 0x061F #ARABIC QUESTION MARK
0xC0 0x06C1 #ARABIC LETTER HEH GOAL
0xC1 0x0621 #ARABIC LETTER HAMZA
0xC2 0x0622 #ARABIC LETTER ALEF WITH MADDA ABOVE
0xC3 0x0623 #ARABIC LETTER ALEF WITH HAMZA ABOVE
0xC4 0x0624 #ARABIC LETTER WAW WITH HAMZA ABOVE
0xC5 0x0625 #ARABIC LETTER ALEF WITH HAMZA BELOW
0xC6 0x0626 #ARABIC LETTER YEH WITH HAMZA ABOVE
0xC7 0x0627 #ARABIC LETTER ALEF
0xC8 0x0628 #ARABIC LETTER BEH
0xC9 0x0629 #ARABIC LETTER TEH MARBUTA
0xCA 0x062A #ARABIC LETTER TEH
0xCB 0x062B #ARABIC LETTER THEH
0xCC 0x062C #ARABIC LETTER JEEM
0xCD 0x062D #ARABIC LETTER HAH
0xCE 0x062E #ARABIC LETTER KHAH
0xCF 0x062F #ARABIC LETTER DAL
0xD0 0x0630 #ARABIC LETTER THAL
0xD1 0x0631 #ARABIC LETTER REH
0xD2 0x0632 #ARABIC LETTER ZAIN
0xD3 0x0633 #ARABIC LETTER SEEN
0xD4 0x0634 #ARABIC LETTER SHEEN
0xD5 0x0635 #ARABIC LETTER SAD
0xD6 0x0636 #ARABIC LETTER DAD
0xD7 0x00D7 #MULTIPLICATION SIGN
0xD8 0x0637 #ARABIC LETTER TAH
0xD9 0x0638 #ARABIC LETTER ZAH
0xDA 0x0639 #ARABIC LETTER AIN
0xDB 0x063A #ARABIC LETTER GHAIN
0xDC 0x0640 #ARABIC TATWEEL
0xDD 0x0641 #ARABIC LETTER FEH
0xDE 0x0642 #ARABIC LETTER QAF
0xDF 0x0643 #ARABIC LETTER KAF
0xE0 0x00E0 #LATIN SMALL LETTER A WITH GRAVE
0xE1 0x0644 #ARABIC LETTER LAM
0xE2 0x00E2 #LATIN SMALL LETTER A WITH CIRCUMFLEX
0xE3 0x0645 #ARABIC LETTER MEEM
0xE4 0x0646 #ARABIC LETTER NOON
0xE5 0x0647 #ARABIC LETTER HEH
0xE6 0x0648 #ARABIC LETTER WAW
0xE7 0x00E7 #LATIN SMALL LETTER C WITH CEDILLA
0xE8 0x00E8 #LATIN SMALL LETTER E WITH GRAVE
0xE9 0x00E9 #LATIN SMALL LETTER E WITH ACUTE
0xEA 0x00EA #LATIN SMALL LETTER E WITH CIRCUMFLEX
0xEB 0x00EB #LATIN SMALL LETTER E WITH DIAERESIS
0xEC 0x0649 #ARABIC LETTER ALEF MAKSURA
0xED 0x064A #ARABIC LETTER YEH
0xEE 0x00EE #LATIN SMALL LETTER I WITH CIRCUMFLEX
0xEF 0x00EF #LATIN SMALL LETTER I WITH DIAERESIS
0xF0 0x064B #ARABIC FATHATAN
0xF1 0x064C #ARABIC DAMMATAN
0xF2 0x064D #ARABIC KASRATAN
0xF3 0x064E #ARABIC FATHA
0xF4 0x00F4 #LATIN SMALL LETTER O WITH CIRCUMFLEX
0xF5 0x064F #ARABIC DAMMA
0xF6 0x0650 #ARABIC KASRA
0xF7 0x00F7 #DIVISION SIGN
0xF8 0x0651 #ARABIC SHADDA
0xF9 0x00F9 #LATIN SMALL LETTER U WITH GRAVE
0xFA 0x0652 #ARABIC SUKUN
0xFB 0x00FB #LATIN SMALL LETTER U WITH CIRCUMFLEX
0xFC 0x00FC #LATIN SMALL LETTER U WITH DIAERESIS
0xFD 0x200E #LEFT-TO-RIGHT MARK
0xFE 0x200F #RIGHT-TO-LEFT MARK
0xFF 0x06D2 #ARABIC LETTER YEH BARREE

153
Unicode/cp1257.cp Normal file
View File

@ -0,0 +1,153 @@
Window$ 1257 (Baltic)
"windows-1257", "1257", "cp1257"
#
# Name: cp1257 to Unicode table
# Unicode version: 2.0
# Table version: 2.01
# Table format: Format A
# Date: 04/15/98
#
# Contact: cpxlate@microsoft.com
#
# General notes: none
#
# Format: Three tab-separated columns
# Column #1 is the cp1257 code (in hex)
# Column #2 is the Unicode (in hex as 0xXXXX)
# Column #3 is the Unicode name (follows a comment sign, '#')
#
# The entries are in cp1257 order
#
##################
0x20-0x7e idem
#
0x80 0x20AC #EURO SIGN
0x81 0 #UNDEFINED
0x82 0x201A #SINGLE LOW-9 QUOTATION MARK
0x83 0 #UNDEFINED
0x84 0x201E #DOUBLE LOW-9 QUOTATION MARK
0x85 0x2026 #HORIZONTAL ELLIPSIS
0x86 0x2020 #DAGGER
0x87 0x2021 #DOUBLE DAGGER
0x88 0 #UNDEFINED
0x89 0x2030 #PER MILLE SIGN
0x8A 0 #UNDEFINED
0x8B 0x2039 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK
0x8C 0 #UNDEFINED
0x8D 0x00A8 #DIAERESIS
0x8E 0x02C7 #CARON
0x8F 0x00B8 #CEDILLA
0x90 0 #UNDEFINED
0x91 0x2018 #LEFT SINGLE QUOTATION MARK
0x92 0x2019 #RIGHT SINGLE QUOTATION MARK
0x93 0x201C #LEFT DOUBLE QUOTATION MARK
0x94 0x201D #RIGHT DOUBLE QUOTATION MARK
0x95 0x2022 #BULLET
0x96 0x2013 #EN DASH
0x97 0x2014 #EM DASH
0x98 0 #UNDEFINED
0x99 0x2122 #TRADE MARK SIGN
0x9A 0 #UNDEFINED
0x9B 0x203A #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
0x9C 0 #UNDEFINED
0x9D 0x00AF #MACRON
0x9E 0x02DB #OGONEK
0x9F 0 #UNDEFINED
0xA0 0x00A0 #NO-BREAK SPACE
0xA1 0 #UNDEFINED
0xA2 0x00A2 #CENT SIGN
0xA3 0x00A3 #POUND SIGN
0xA4 0x00A4 #CURRENCY SIGN
0xA5 0 #UNDEFINED
0xA6 0x00A6 #BROKEN BAR
0xA7 0x00A7 #SECTION SIGN
0xA8 0x00D8 #LATIN CAPITAL LETTER O WITH STROKE
0xA9 0x00A9 #COPYRIGHT SIGN
0xAA 0x0156 #LATIN CAPITAL LETTER R WITH CEDILLA
0xAB 0x00AB #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
0xAC 0x00AC #NOT SIGN
0xAD 0x00AD #SOFT HYPHEN
0xAE 0x00AE #REGISTERED SIGN
0xAF 0x00C6 #LATIN CAPITAL LETTER AE
0xB0 0x00B0 #DEGREE SIGN
0xB1 0x00B1 #PLUS-MINUS SIGN
0xB2 0x00B2 #SUPERSCRIPT TWO
0xB3 0x00B3 #SUPERSCRIPT THREE
0xB4 0x00B4 #ACUTE ACCENT
0xB5 0x00B5 #MICRO SIGN
0xB6 0x00B6 #PILCROW SIGN
0xB7 0x00B7 #MIDDLE DOT
0xB8 0x00F8 #LATIN SMALL LETTER O WITH STROKE
0xB9 0x00B9 #SUPERSCRIPT ONE
0xBA 0x0157 #LATIN SMALL LETTER R WITH CEDILLA
0xBB 0x00BB #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
0xBC 0x00BC #VULGAR FRACTION ONE QUARTER
0xBD 0x00BD #VULGAR FRACTION ONE HALF
0xBE 0x00BE #VULGAR FRACTION THREE QUARTERS
0xBF 0x00E6 #LATIN SMALL LETTER AE
0xC0 0x0104 #LATIN CAPITAL LETTER A WITH OGONEK
0xC1 0x012E #LATIN CAPITAL LETTER I WITH OGONEK
0xC2 0x0100 #LATIN CAPITAL LETTER A WITH MACRON
0xC3 0x0106 #LATIN CAPITAL LETTER C WITH ACUTE
0xC4 0x00C4 #LATIN CAPITAL LETTER A WITH DIAERESIS
0xC5 0x00C5 #LATIN CAPITAL LETTER A WITH RING ABOVE
0xC6 0x0118 #LATIN CAPITAL LETTER E WITH OGONEK
0xC7 0x0112 #LATIN CAPITAL LETTER E WITH MACRON
0xC8 0x010C #LATIN CAPITAL LETTER C WITH CARON
0xC9 0x00C9 #LATIN CAPITAL LETTER E WITH ACUTE
0xCA 0x0179 #LATIN CAPITAL LETTER Z WITH ACUTE
0xCB 0x0116 #LATIN CAPITAL LETTER E WITH DOT ABOVE
0xCC 0x0122 #LATIN CAPITAL LETTER G WITH CEDILLA
0xCD 0x0136 #LATIN CAPITAL LETTER K WITH CEDILLA
0xCE 0x012A #LATIN CAPITAL LETTER I WITH MACRON
0xCF 0x013B #LATIN CAPITAL LETTER L WITH CEDILLA
0xD0 0x0160 #LATIN CAPITAL LETTER S WITH CARON
0xD1 0x0143 #LATIN CAPITAL LETTER N WITH ACUTE
0xD2 0x0145 #LATIN CAPITAL LETTER N WITH CEDILLA
0xD3 0x00D3 #LATIN CAPITAL LETTER O WITH ACUTE
0xD4 0x014C #LATIN CAPITAL LETTER O WITH MACRON
0xD5 0x00D5 #LATIN CAPITAL LETTER O WITH TILDE
0xD6 0x00D6 #LATIN CAPITAL LETTER O WITH DIAERESIS
0xD7 0x00D7 #MULTIPLICATION SIGN
0xD8 0x0172 #LATIN CAPITAL LETTER U WITH OGONEK
0xD9 0x0141 #LATIN CAPITAL LETTER L WITH STROKE
0xDA 0x015A #LATIN CAPITAL LETTER S WITH ACUTE
0xDB 0x016A #LATIN CAPITAL LETTER U WITH MACRON
0xDC 0x00DC #LATIN CAPITAL LETTER U WITH DIAERESIS
0xDD 0x017B #LATIN CAPITAL LETTER Z WITH DOT ABOVE
0xDE 0x017D #LATIN CAPITAL LETTER Z WITH CARON
0xDF 0x00DF #LATIN SMALL LETTER SHARP S
0xE0 0x0105 #LATIN SMALL LETTER A WITH OGONEK
0xE1 0x012F #LATIN SMALL LETTER I WITH OGONEK
0xE2 0x0101 #LATIN SMALL LETTER A WITH MACRON
0xE3 0x0107 #LATIN SMALL LETTER C WITH ACUTE
0xE4 0x00E4 #LATIN SMALL LETTER A WITH DIAERESIS
0xE5 0x00E5 #LATIN SMALL LETTER A WITH RING ABOVE
0xE6 0x0119 #LATIN SMALL LETTER E WITH OGONEK
0xE7 0x0113 #LATIN SMALL LETTER E WITH MACRON
0xE8 0x010D #LATIN SMALL LETTER C WITH CARON
0xE9 0x00E9 #LATIN SMALL LETTER E WITH ACUTE
0xEA 0x017A #LATIN SMALL LETTER Z WITH ACUTE
0xEB 0x0117 #LATIN SMALL LETTER E WITH DOT ABOVE
0xEC 0x0123 #LATIN SMALL LETTER G WITH CEDILLA
0xED 0x0137 #LATIN SMALL LETTER K WITH CEDILLA
0xEE 0x012B #LATIN SMALL LETTER I WITH MACRON
0xEF 0x013C #LATIN SMALL LETTER L WITH CEDILLA
0xF0 0x0161 #LATIN SMALL LETTER S WITH CARON
0xF1 0x0144 #LATIN SMALL LETTER N WITH ACUTE
0xF2 0x0146 #LATIN SMALL LETTER N WITH CEDILLA
0xF3 0x00F3 #LATIN SMALL LETTER O WITH ACUTE
0xF4 0x014D #LATIN SMALL LETTER O WITH MACRON
0xF5 0x00F5 #LATIN SMALL LETTER O WITH TILDE
0xF6 0x00F6 #LATIN SMALL LETTER O WITH DIAERESIS
0xF7 0x00F7 #DIVISION SIGN
0xF8 0x0173 #LATIN SMALL LETTER U WITH OGONEK
0xF9 0x0142 #LATIN SMALL LETTER L WITH STROKE
0xFA 0x015B #LATIN SMALL LETTER S WITH ACUTE
0xFB 0x016B #LATIN SMALL LETTER U WITH MACRON
0xFC 0x00FC #LATIN SMALL LETTER U WITH DIAERESIS
0xFD 0x017C #LATIN SMALL LETTER Z WITH DOT ABOVE
0xFE 0x017E #LATIN SMALL LETTER Z WITH CARON
0xFF 0x02D9 #DOT ABOVE

275
Unicode/cp437.cp Normal file
View File

@ -0,0 +1,275 @@
CP 437 (US)
"cp437", "437"
#
# Name: cp437_DOSLatinUS to Unicode table
# Unicode version: 2.0
# Table version: 2.00
# Table format: Format A
# Date: 04/24/96
# Authors: Lori Brownell <loribr@microsoft.com>
# K.D. Chang <a-kchang@microsoft.com>
# General notes: none
#
# Format: Three tab-separated columns
# Column #1 is the cp437_DOSLatinUS code (in hex)
# Column #2 is the Unicode (in hex as 0xXXXX)
# Column #3 is the Unicode name (follows a comment sign, '#')
#
# The entries are in cp437_DOSLatinUS order
#
0x00 0x0000 #NULL
0x01 0x0001 #START OF HEADING
0x02 0x0002 #START OF TEXT
0x03 0x0003 #END OF TEXT
0x04 0x0004 #END OF TRANSMISSION
0x05 0x0005 #ENQUIRY
0x06 0x0006 #ACKNOWLEDGE
0x07 0x0007 #BELL
0x08 0x0008 #BACKSPACE
0x09 0x0009 #HORIZONTAL TABULATION
0x0a 0x000a #LINE FEED
0x0b 0x000b #VERTICAL TABULATION
0x0c 0x000c #FORM FEED
0x0d 0x000d #CARRIAGE RETURN
0x0e 0x000e #SHIFT OUT
0x0f 0x000f #SHIFT IN
0x10 0x0010 #DATA LINK ESCAPE
0x11 0x0011 #DEVICE CONTROL ONE
0x12 0x0012 #DEVICE CONTROL TWO
0x13 0x0013 #DEVICE CONTROL THREE
0x14 0x0014 #DEVICE CONTROL FOUR
0x15 0x0015 #NEGATIVE ACKNOWLEDGE
0x16 0x0016 #SYNCHRONOUS IDLE
0x17 0x0017 #END OF TRANSMISSION BLOCK
0x18 0x0018 #CANCEL
0x19 0x0019 #END OF MEDIUM
0x1a 0x001a #SUBSTITUTE
0x1b 0x001b #ESCAPE
0x1c 0x001c #FILE SEPARATOR
0x1d 0x001d #GROUP SEPARATOR
0x1e 0x001e #RECORD SEPARATOR
0x1f 0x001f #UNIT SEPARATOR
0x20 0x0020 #SPACE
0x21 0x0021 #EXCLAMATION MARK
0x22 0x0022 #QUOTATION MARK
0x23 0x0023 #NUMBER SIGN
0x24 0x0024 #DOLLAR SIGN
0x25 0x0025 #PERCENT SIGN
0x26 0x0026 #AMPERSAND
0x27 0x0027 #APOSTROPHE
0x28 0x0028 #LEFT PARENTHESIS
0x29 0x0029 #RIGHT PARENTHESIS
0x2a 0x002a #ASTERISK
0x2b 0x002b #PLUS SIGN
0x2c 0x002c #COMMA
0x2d 0x002d #HYPHEN-MINUS
0x2e 0x002e #FULL STOP
0x2f 0x002f #SOLIDUS
0x30 0x0030 #DIGIT ZERO
0x31 0x0031 #DIGIT ONE
0x32 0x0032 #DIGIT TWO
0x33 0x0033 #DIGIT THREE
0x34 0x0034 #DIGIT FOUR
0x35 0x0035 #DIGIT FIVE
0x36 0x0036 #DIGIT SIX
0x37 0x0037 #DIGIT SEVEN
0x38 0x0038 #DIGIT EIGHT
0x39 0x0039 #DIGIT NINE
0x3a 0x003a #COLON
0x3b 0x003b #SEMICOLON
0x3c 0x003c #LESS-THAN SIGN
0x3d 0x003d #EQUALS SIGN
0x3e 0x003e #GREATER-THAN SIGN
0x3f 0x003f #QUESTION MARK
0x40 0x0040 #COMMERCIAL AT
0x41 0x0041 #LATIN CAPITAL LETTER A
0x42 0x0042 #LATIN CAPITAL LETTER B
0x43 0x0043 #LATIN CAPITAL LETTER C
0x44 0x0044 #LATIN CAPITAL LETTER D
0x45 0x0045 #LATIN CAPITAL LETTER E
0x46 0x0046 #LATIN CAPITAL LETTER F
0x47 0x0047 #LATIN CAPITAL LETTER G
0x48 0x0048 #LATIN CAPITAL LETTER H
0x49 0x0049 #LATIN CAPITAL LETTER I
0x4a 0x004a #LATIN CAPITAL LETTER J
0x4b 0x004b #LATIN CAPITAL LETTER K
0x4c 0x004c #LATIN CAPITAL LETTER L
0x4d 0x004d #LATIN CAPITAL LETTER M
0x4e 0x004e #LATIN CAPITAL LETTER N
0x4f 0x004f #LATIN CAPITAL LETTER O
0x50 0x0050 #LATIN CAPITAL LETTER P
0x51 0x0051 #LATIN CAPITAL LETTER Q
0x52 0x0052 #LATIN CAPITAL LETTER R
0x53 0x0053 #LATIN CAPITAL LETTER S
0x54 0x0054 #LATIN CAPITAL LETTER T
0x55 0x0055 #LATIN CAPITAL LETTER U
0x56 0x0056 #LATIN CAPITAL LETTER V
0x57 0x0057 #LATIN CAPITAL LETTER W
0x58 0x0058 #LATIN CAPITAL LETTER X
0x59 0x0059 #LATIN CAPITAL LETTER Y
0x5a 0x005a #LATIN CAPITAL LETTER Z
0x5b 0x005b #LEFT SQUARE BRACKET
0x5c 0x005c #REVERSE SOLIDUS
0x5d 0x005d #RIGHT SQUARE BRACKET
0x5e 0x005e #CIRCUMFLEX ACCENT
0x5f 0x005f #LOW LINE
0x60 0x0060 #GRAVE ACCENT
0x61 0x0061 #LATIN SMALL LETTER A
0x62 0x0062 #LATIN SMALL LETTER B
0x63 0x0063 #LATIN SMALL LETTER C
0x64 0x0064 #LATIN SMALL LETTER D
0x65 0x0065 #LATIN SMALL LETTER E
0x66 0x0066 #LATIN SMALL LETTER F
0x67 0x0067 #LATIN SMALL LETTER G
0x68 0x0068 #LATIN SMALL LETTER H
0x69 0x0069 #LATIN SMALL LETTER I
0x6a 0x006a #LATIN SMALL LETTER J
0x6b 0x006b #LATIN SMALL LETTER K
0x6c 0x006c #LATIN SMALL LETTER L
0x6d 0x006d #LATIN SMALL LETTER M
0x6e 0x006e #LATIN SMALL LETTER N
0x6f 0x006f #LATIN SMALL LETTER O
0x70 0x0070 #LATIN SMALL LETTER P
0x71 0x0071 #LATIN SMALL LETTER Q
0x72 0x0072 #LATIN SMALL LETTER R
0x73 0x0073 #LATIN SMALL LETTER S
0x74 0x0074 #LATIN SMALL LETTER T
0x75 0x0075 #LATIN SMALL LETTER U
0x76 0x0076 #LATIN SMALL LETTER V
0x77 0x0077 #LATIN SMALL LETTER W
0x78 0x0078 #LATIN SMALL LETTER X
0x79 0x0079 #LATIN SMALL LETTER Y
0x7a 0x007a #LATIN SMALL LETTER Z
0x7b 0x007b #LEFT CURLY BRACKET
0x7c 0x007c #VERTICAL LINE
0x7d 0x007d #RIGHT CURLY BRACKET
0x7e 0x007e #TILDE
0x7f 0x007f #DELETE
0x80 0x00c7 #LATIN CAPITAL LETTER C WITH CEDILLA
0x81 0x00fc #LATIN SMALL LETTER U WITH DIAERESIS
0x82 0x00e9 #LATIN SMALL LETTER E WITH ACUTE
0x83 0x00e2 #LATIN SMALL LETTER A WITH CIRCUMFLEX
0x84 0x00e4 #LATIN SMALL LETTER A WITH DIAERESIS
0x85 0x00e0 #LATIN SMALL LETTER A WITH GRAVE
0x86 0x00e5 #LATIN SMALL LETTER A WITH RING ABOVE
0x87 0x00e7 #LATIN SMALL LETTER C WITH CEDILLA
0x88 0x00ea #LATIN SMALL LETTER E WITH CIRCUMFLEX
0x89 0x00eb #LATIN SMALL LETTER E WITH DIAERESIS
0x8a 0x00e8 #LATIN SMALL LETTER E WITH GRAVE
0x8b 0x00ef #LATIN SMALL LETTER I WITH DIAERESIS
0x8c 0x00ee #LATIN SMALL LETTER I WITH CIRCUMFLEX
0x8d 0x00ec #LATIN SMALL LETTER I WITH GRAVE
0x8e 0x00c4 #LATIN CAPITAL LETTER A WITH DIAERESIS
0x8f 0x00c5 #LATIN CAPITAL LETTER A WITH RING ABOVE
0x90 0x00c9 #LATIN CAPITAL LETTER E WITH ACUTE
0x91 0x00e6 #LATIN SMALL LIGATURE AE
0x92 0x00c6 #LATIN CAPITAL LIGATURE AE
0x93 0x00f4 #LATIN SMALL LETTER O WITH CIRCUMFLEX
0x94 0x00f6 #LATIN SMALL LETTER O WITH DIAERESIS
0x95 0x00f2 #LATIN SMALL LETTER O WITH GRAVE
0x96 0x00fb #LATIN SMALL LETTER U WITH CIRCUMFLEX
0x97 0x00f9 #LATIN SMALL LETTER U WITH GRAVE
0x98 0x00ff #LATIN SMALL LETTER Y WITH DIAERESIS
0x99 0x00d6 #LATIN CAPITAL LETTER O WITH DIAERESIS
0x9a 0x00dc #LATIN CAPITAL LETTER U WITH DIAERESIS
0x9b 0x00a2 #CENT SIGN
0x9c 0x00a3 #POUND SIGN
0x9d 0x00a5 #YEN SIGN
0x9e 0x20a7 #PESETA SIGN
0x9f 0x0192 #LATIN SMALL LETTER F WITH HOOK
0xa0 0x00e1 #LATIN SMALL LETTER A WITH ACUTE
0xa1 0x00ed #LATIN SMALL LETTER I WITH ACUTE
0xa2 0x00f3 #LATIN SMALL LETTER O WITH ACUTE
0xa3 0x00fa #LATIN SMALL LETTER U WITH ACUTE
0xa4 0x00f1 #LATIN SMALL LETTER N WITH TILDE
0xa5 0x00d1 #LATIN CAPITAL LETTER N WITH TILDE
0xa6 0x00aa #FEMININE ORDINAL INDICATOR
0xa7 0x00ba #MASCULINE ORDINAL INDICATOR
0xa8 0x00bf #INVERTED QUESTION MARK
0xa9 0x2310 #REVERSED NOT SIGN
0xaa 0x00ac #NOT SIGN
0xab 0x00bd #VULGAR FRACTION ONE HALF
0xac 0x00bc #VULGAR FRACTION ONE QUARTER
0xad 0x00a1 #INVERTED EXCLAMATION MARK
0xae 0x00ab #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
0xaf 0x00bb #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
0xb0 0x2591 #LIGHT SHADE
0xb1 0x2592 #MEDIUM SHADE
0xb2 0x2593 #DARK SHADE
0xb3 0x2502 #BOX DRAWINGS LIGHT VERTICAL
0xb4 0x2524 #BOX DRAWINGS LIGHT VERTICAL AND LEFT
0xb5 0x2561 #BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
0xb6 0x2562 #BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
0xb7 0x2556 #BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
0xb8 0x2555 #BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
0xb9 0x2563 #BOX DRAWINGS DOUBLE VERTICAL AND LEFT
0xba 0x2551 #BOX DRAWINGS DOUBLE VERTICAL
0xbb 0x2557 #BOX DRAWINGS DOUBLE DOWN AND LEFT
0xbc 0x255d #BOX DRAWINGS DOUBLE UP AND LEFT
0xbd 0x255c #BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
0xbe 0x255b #BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
0xbf 0x2510 #BOX DRAWINGS LIGHT DOWN AND LEFT
0xc0 0x2514 #BOX DRAWINGS LIGHT UP AND RIGHT
0xc1 0x2534 #BOX DRAWINGS LIGHT UP AND HORIZONTAL
0xc2 0x252c #BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
0xc3 0x251c #BOX DRAWINGS LIGHT VERTICAL AND RIGHT
0xc4 0x2500 #BOX DRAWINGS LIGHT HORIZONTAL
0xc5 0x253c #BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
0xc6 0x255e #BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
0xc7 0x255f #BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
0xc8 0x255a #BOX DRAWINGS DOUBLE UP AND RIGHT
0xc9 0x2554 #BOX DRAWINGS DOUBLE DOWN AND RIGHT
0xca 0x2569 #BOX DRAWINGS DOUBLE UP AND HORIZONTAL
0xcb 0x2566 #BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
0xcc 0x2560 #BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
0xcd 0x2550 #BOX DRAWINGS DOUBLE HORIZONTAL
0xce 0x256c #BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
0xcf 0x2567 #BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
0xd0 0x2568 #BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
0xd1 0x2564 #BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
0xd2 0x2565 #BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
0xd3 0x2559 #BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
0xd4 0x2558 #BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
0xd5 0x2552 #BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
0xd6 0x2553 #BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
0xd7 0x256b #BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
0xd8 0x256a #BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
0xd9 0x2518 #BOX DRAWINGS LIGHT UP AND LEFT
0xda 0x250c #BOX DRAWINGS LIGHT DOWN AND RIGHT
0xdb 0x2588 #FULL BLOCK
0xdc 0x2584 #LOWER HALF BLOCK
0xdd 0x258c #LEFT HALF BLOCK
0xde 0x2590 #RIGHT HALF BLOCK
0xdf 0x2580 #UPPER HALF BLOCK
0xe0 0x03b1 #GREEK SMALL LETTER ALPHA
0xe1 0x00df #LATIN SMALL LETTER SHARP S
0xe2 0x0393 #GREEK CAPITAL LETTER GAMMA
0xe3 0x03c0 #GREEK SMALL LETTER PI
0xe4 0x03a3 #GREEK CAPITAL LETTER SIGMA
0xe5 0x03c3 #GREEK SMALL LETTER SIGMA
0xe6 0x00b5 #MICRO SIGN
0xe7 0x03c4 #GREEK SMALL LETTER TAU
0xe8 0x03a6 #GREEK CAPITAL LETTER PHI
0xe9 0x0398 #GREEK CAPITAL LETTER THETA
0xea 0x03a9 #GREEK CAPITAL LETTER OMEGA
0xeb 0x03b4 #GREEK SMALL LETTER DELTA
0xec 0x221e #INFINITY
0xed 0x03c6 #GREEK SMALL LETTER PHI
0xee 0x03b5 #GREEK SMALL LETTER EPSILON
0xef 0x2229 #INTERSECTION
0xf0 0x2261 #IDENTICAL TO
0xf1 0x00b1 #PLUS-MINUS SIGN
0xf2 0x2265 #GREATER-THAN OR EQUAL TO
0xf3 0x2264 #LESS-THAN OR EQUAL TO
0xf4 0x2320 #TOP HALF INTEGRAL
0xf5 0x2321 #BOTTOM HALF INTEGRAL
0xf6 0x00f7 #DIVISION SIGN
0xf7 0x2248 #ALMOST EQUAL TO
0xf8 0x00b0 #DEGREE SIGN
0xf9 0x2219 #BULLET OPERATOR
0xfa 0x00b7 #MIDDLE DOT
0xfb 0x221a #SQUARE ROOT
0xfc 0x207f #SUPERSCRIPT LATIN SMALL LETTER N
0xfd 0x00b2 #SUPERSCRIPT TWO
0xfe 0x25a0 #BLACK SQUARE
0xff 0x00a0 #NO-BREAK SPACE

275
Unicode/cp737.cp Normal file
View File

@ -0,0 +1,275 @@
CP 737 (Greek)
"cp737", "737"
#
# Name: cp737_DOSGreek to Unicode table
# Unicode version: 2.0
# Table version: 2.00
# Table format: Format A
# Date: 04/24/96
# Authors: Lori Brownell <loribr@microsoft.com>
# K.D. Chang <a-kchang@microsoft.com>
# General notes: none
#
# Format: Three tab-separated columns
# Column #1 is the cp737_DOSGreek code (in hex)
# Column #2 is the Unicode (in hex as 0xXXXX)
# Column #3 is the Unicode name (follows a comment sign, '#')
#
# The entries are in cp737_DOSGreek order
#
0x00 0x0000 #NULL
0x01 0x0001 #START OF HEADING
0x02 0x0002 #START OF TEXT
0x03 0x0003 #END OF TEXT
0x04 0x0004 #END OF TRANSMISSION
0x05 0x0005 #ENQUIRY
0x06 0x0006 #ACKNOWLEDGE
0x07 0x0007 #BELL
0x08 0x0008 #BACKSPACE
0x09 0x0009 #HORIZONTAL TABULATION
0x0a 0x000a #LINE FEED
0x0b 0x000b #VERTICAL TABULATION
0x0c 0x000c #FORM FEED
0x0d 0x000d #CARRIAGE RETURN
0x0e 0x000e #SHIFT OUT
0x0f 0x000f #SHIFT IN
0x10 0x0010 #DATA LINK ESCAPE
0x11 0x0011 #DEVICE CONTROL ONE
0x12 0x0012 #DEVICE CONTROL TWO
0x13 0x0013 #DEVICE CONTROL THREE
0x14 0x0014 #DEVICE CONTROL FOUR
0x15 0x0015 #NEGATIVE ACKNOWLEDGE
0x16 0x0016 #SYNCHRONOUS IDLE
0x17 0x0017 #END OF TRANSMISSION BLOCK
0x18 0x0018 #CANCEL
0x19 0x0019 #END OF MEDIUM
0x1a 0x001a #SUBSTITUTE
0x1b 0x001b #ESCAPE
0x1c 0x001c #FILE SEPARATOR
0x1d 0x001d #GROUP SEPARATOR
0x1e 0x001e #RECORD SEPARATOR
0x1f 0x001f #UNIT SEPARATOR
0x20 0x0020 #SPACE
0x21 0x0021 #EXCLAMATION MARK
0x22 0x0022 #QUOTATION MARK
0x23 0x0023 #NUMBER SIGN
0x24 0x0024 #DOLLAR SIGN
0x25 0x0025 #PERCENT SIGN
0x26 0x0026 #AMPERSAND
0x27 0x0027 #APOSTROPHE
0x28 0x0028 #LEFT PARENTHESIS
0x29 0x0029 #RIGHT PARENTHESIS
0x2a 0x002a #ASTERISK
0x2b 0x002b #PLUS SIGN
0x2c 0x002c #COMMA
0x2d 0x002d #HYPHEN-MINUS
0x2e 0x002e #FULL STOP
0x2f 0x002f #SOLIDUS
0x30 0x0030 #DIGIT ZERO
0x31 0x0031 #DIGIT ONE
0x32 0x0032 #DIGIT TWO
0x33 0x0033 #DIGIT THREE
0x34 0x0034 #DIGIT FOUR
0x35 0x0035 #DIGIT FIVE
0x36 0x0036 #DIGIT SIX
0x37 0x0037 #DIGIT SEVEN
0x38 0x0038 #DIGIT EIGHT
0x39 0x0039 #DIGIT NINE
0x3a 0x003a #COLON
0x3b 0x003b #SEMICOLON
0x3c 0x003c #LESS-THAN SIGN
0x3d 0x003d #EQUALS SIGN
0x3e 0x003e #GREATER-THAN SIGN
0x3f 0x003f #QUESTION MARK
0x40 0x0040 #COMMERCIAL AT
0x41 0x0041 #LATIN CAPITAL LETTER A
0x42 0x0042 #LATIN CAPITAL LETTER B
0x43 0x0043 #LATIN CAPITAL LETTER C
0x44 0x0044 #LATIN CAPITAL LETTER D
0x45 0x0045 #LATIN CAPITAL LETTER E
0x46 0x0046 #LATIN CAPITAL LETTER F
0x47 0x0047 #LATIN CAPITAL LETTER G
0x48 0x0048 #LATIN CAPITAL LETTER H
0x49 0x0049 #LATIN CAPITAL LETTER I
0x4a 0x004a #LATIN CAPITAL LETTER J
0x4b 0x004b #LATIN CAPITAL LETTER K
0x4c 0x004c #LATIN CAPITAL LETTER L
0x4d 0x004d #LATIN CAPITAL LETTER M
0x4e 0x004e #LATIN CAPITAL LETTER N
0x4f 0x004f #LATIN CAPITAL LETTER O
0x50 0x0050 #LATIN CAPITAL LETTER P
0x51 0x0051 #LATIN CAPITAL LETTER Q
0x52 0x0052 #LATIN CAPITAL LETTER R
0x53 0x0053 #LATIN CAPITAL LETTER S
0x54 0x0054 #LATIN CAPITAL LETTER T
0x55 0x0055 #LATIN CAPITAL LETTER U
0x56 0x0056 #LATIN CAPITAL LETTER V
0x57 0x0057 #LATIN CAPITAL LETTER W
0x58 0x0058 #LATIN CAPITAL LETTER X
0x59 0x0059 #LATIN CAPITAL LETTER Y
0x5a 0x005a #LATIN CAPITAL LETTER Z
0x5b 0x005b #LEFT SQUARE BRACKET
0x5c 0x005c #REVERSE SOLIDUS
0x5d 0x005d #RIGHT SQUARE BRACKET
0x5e 0x005e #CIRCUMFLEX ACCENT
0x5f 0x005f #LOW LINE
0x60 0x0060 #GRAVE ACCENT
0x61 0x0061 #LATIN SMALL LETTER A
0x62 0x0062 #LATIN SMALL LETTER B
0x63 0x0063 #LATIN SMALL LETTER C
0x64 0x0064 #LATIN SMALL LETTER D
0x65 0x0065 #LATIN SMALL LETTER E
0x66 0x0066 #LATIN SMALL LETTER F
0x67 0x0067 #LATIN SMALL LETTER G
0x68 0x0068 #LATIN SMALL LETTER H
0x69 0x0069 #LATIN SMALL LETTER I
0x6a 0x006a #LATIN SMALL LETTER J
0x6b 0x006b #LATIN SMALL LETTER K
0x6c 0x006c #LATIN SMALL LETTER L
0x6d 0x006d #LATIN SMALL LETTER M
0x6e 0x006e #LATIN SMALL LETTER N
0x6f 0x006f #LATIN SMALL LETTER O
0x70 0x0070 #LATIN SMALL LETTER P
0x71 0x0071 #LATIN SMALL LETTER Q
0x72 0x0072 #LATIN SMALL LETTER R
0x73 0x0073 #LATIN SMALL LETTER S
0x74 0x0074 #LATIN SMALL LETTER T
0x75 0x0075 #LATIN SMALL LETTER U
0x76 0x0076 #LATIN SMALL LETTER V
0x77 0x0077 #LATIN SMALL LETTER W
0x78 0x0078 #LATIN SMALL LETTER X
0x79 0x0079 #LATIN SMALL LETTER Y
0x7a 0x007a #LATIN SMALL LETTER Z
0x7b 0x007b #LEFT CURLY BRACKET
0x7c 0x007c #VERTICAL LINE
0x7d 0x007d #RIGHT CURLY BRACKET
0x7e 0x007e #TILDE
0x7f 0x007f #DELETE
0x80 0x0391 #GREEK CAPITAL LETTER ALPHA
0x81 0x0392 #GREEK CAPITAL LETTER BETA
0x82 0x0393 #GREEK CAPITAL LETTER GAMMA
0x83 0x0394 #GREEK CAPITAL LETTER DELTA
0x84 0x0395 #GREEK CAPITAL LETTER EPSILON
0x85 0x0396 #GREEK CAPITAL LETTER ZETA
0x86 0x0397 #GREEK CAPITAL LETTER ETA
0x87 0x0398 #GREEK CAPITAL LETTER THETA
0x88 0x0399 #GREEK CAPITAL LETTER IOTA
0x89 0x039a #GREEK CAPITAL LETTER KAPPA
0x8a 0x039b #GREEK CAPITAL LETTER LAMDA
0x8b 0x039c #GREEK CAPITAL LETTER MU
0x8c 0x039d #GREEK CAPITAL LETTER NU
0x8d 0x039e #GREEK CAPITAL LETTER XI
0x8e 0x039f #GREEK CAPITAL LETTER OMICRON
0x8f 0x03a0 #GREEK CAPITAL LETTER PI
0x90 0x03a1 #GREEK CAPITAL LETTER RHO
0x91 0x03a3 #GREEK CAPITAL LETTER SIGMA
0x92 0x03a4 #GREEK CAPITAL LETTER TAU
0x93 0x03a5 #GREEK CAPITAL LETTER UPSILON
0x94 0x03a6 #GREEK CAPITAL LETTER PHI
0x95 0x03a7 #GREEK CAPITAL LETTER CHI
0x96 0x03a8 #GREEK CAPITAL LETTER PSI
0x97 0x03a9 #GREEK CAPITAL LETTER OMEGA
0x98 0x03b1 #GREEK SMALL LETTER ALPHA
0x99 0x03b2 #GREEK SMALL LETTER BETA
0x9a 0x03b3 #GREEK SMALL LETTER GAMMA
0x9b 0x03b4 #GREEK SMALL LETTER DELTA
0x9c 0x03b5 #GREEK SMALL LETTER EPSILON
0x9d 0x03b6 #GREEK SMALL LETTER ZETA
0x9e 0x03b7 #GREEK SMALL LETTER ETA
0x9f 0x03b8 #GREEK SMALL LETTER THETA
0xa0 0x03b9 #GREEK SMALL LETTER IOTA
0xa1 0x03ba #GREEK SMALL LETTER KAPPA
0xa2 0x03bb #GREEK SMALL LETTER LAMDA
0xa3 0x03bc #GREEK SMALL LETTER MU
0xa4 0x03bd #GREEK SMALL LETTER NU
0xa5 0x03be #GREEK SMALL LETTER XI
0xa6 0x03bf #GREEK SMALL LETTER OMICRON
0xa7 0x03c0 #GREEK SMALL LETTER PI
0xa8 0x03c1 #GREEK SMALL LETTER RHO
0xa9 0x03c3 #GREEK SMALL LETTER SIGMA
0xaa 0x03c2 #GREEK SMALL LETTER FINAL SIGMA
0xab 0x03c4 #GREEK SMALL LETTER TAU
0xac 0x03c5 #GREEK SMALL LETTER UPSILON
0xad 0x03c6 #GREEK SMALL LETTER PHI
0xae 0x03c7 #GREEK SMALL LETTER CHI
0xaf 0x03c8 #GREEK SMALL LETTER PSI
0xb0 0x2591 #LIGHT SHADE
0xb1 0x2592 #MEDIUM SHADE
0xb2 0x2593 #DARK SHADE
0xb3 0x2502 #BOX DRAWINGS LIGHT VERTICAL
0xb4 0x2524 #BOX DRAWINGS LIGHT VERTICAL AND LEFT
0xb5 0x2561 #BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
0xb6 0x2562 #BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
0xb7 0x2556 #BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
0xb8 0x2555 #BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
0xb9 0x2563 #BOX DRAWINGS DOUBLE VERTICAL AND LEFT
0xba 0x2551 #BOX DRAWINGS DOUBLE VERTICAL
0xbb 0x2557 #BOX DRAWINGS DOUBLE DOWN AND LEFT
0xbc 0x255d #BOX DRAWINGS DOUBLE UP AND LEFT
0xbd 0x255c #BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
0xbe 0x255b #BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
0xbf 0x2510 #BOX DRAWINGS LIGHT DOWN AND LEFT
0xc0 0x2514 #BOX DRAWINGS LIGHT UP AND RIGHT
0xc1 0x2534 #BOX DRAWINGS LIGHT UP AND HORIZONTAL
0xc2 0x252c #BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
0xc3 0x251c #BOX DRAWINGS LIGHT VERTICAL AND RIGHT
0xc4 0x2500 #BOX DRAWINGS LIGHT HORIZONTAL
0xc5 0x253c #BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
0xc6 0x255e #BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
0xc7 0x255f #BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
0xc8 0x255a #BOX DRAWINGS DOUBLE UP AND RIGHT
0xc9 0x2554 #BOX DRAWINGS DOUBLE DOWN AND RIGHT
0xca 0x2569 #BOX DRAWINGS DOUBLE UP AND HORIZONTAL
0xcb 0x2566 #BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
0xcc 0x2560 #BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
0xcd 0x2550 #BOX DRAWINGS DOUBLE HORIZONTAL
0xce 0x256c #BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
0xcf 0x2567 #BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
0xd0 0x2568 #BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
0xd1 0x2564 #BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
0xd2 0x2565 #BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
0xd3 0x2559 #BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
0xd4 0x2558 #BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
0xd5 0x2552 #BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
0xd6 0x2553 #BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
0xd7 0x256b #BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
0xd8 0x256a #BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
0xd9 0x2518 #BOX DRAWINGS LIGHT UP AND LEFT
0xda 0x250c #BOX DRAWINGS LIGHT DOWN AND RIGHT
0xdb 0x2588 #FULL BLOCK
0xdc 0x2584 #LOWER HALF BLOCK
0xdd 0x258c #LEFT HALF BLOCK
0xde 0x2590 #RIGHT HALF BLOCK
0xdf 0x2580 #UPPER HALF BLOCK
0xe0 0x03c9 #GREEK SMALL LETTER OMEGA
0xe1 0x03ac #GREEK SMALL LETTER ALPHA WITH TONOS
0xe2 0x03ad #GREEK SMALL LETTER EPSILON WITH TONOS
0xe3 0x03ae #GREEK SMALL LETTER ETA WITH TONOS
0xe4 0x03ca #GREEK SMALL LETTER IOTA WITH DIALYTIKA
0xe5 0x03af #GREEK SMALL LETTER IOTA WITH TONOS
0xe6 0x03cc #GREEK SMALL LETTER OMICRON WITH TONOS
0xe7 0x03cd #GREEK SMALL LETTER UPSILON WITH TONOS
0xe8 0x03cb #GREEK SMALL LETTER UPSILON WITH DIALYTIKA
0xe9 0x03ce #GREEK SMALL LETTER OMEGA WITH TONOS
0xea 0x0386 #GREEK CAPITAL LETTER ALPHA WITH TONOS
0xeb 0x0388 #GREEK CAPITAL LETTER EPSILON WITH TONOS
0xec 0x0389 #GREEK CAPITAL LETTER ETA WITH TONOS
0xed 0x038a #GREEK CAPITAL LETTER IOTA WITH TONOS
0xee 0x038c #GREEK CAPITAL LETTER OMICRON WITH TONOS
0xef 0x038e #GREEK CAPITAL LETTER UPSILON WITH TONOS
0xf0 0x038f #GREEK CAPITAL LETTER OMEGA WITH TONOS
0xf1 0x00b1 #PLUS-MINUS SIGN
0xf2 0x2265 #GREATER-THAN OR EQUAL TO
0xf3 0x2264 #LESS-THAN OR EQUAL TO
0xf4 0x03aa #GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
0xf5 0x03ab #GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
0xf6 0x00f7 #DIVISION SIGN
0xf7 0x2248 #ALMOST EQUAL TO
0xf8 0x00b0 #DEGREE SIGN
0xf9 0x2219 #BULLET OPERATOR
0xfa 0x00b7 #MIDDLE DOT
0xfb 0x221a #SQUARE ROOT
0xfc 0x207f #SUPERSCRIPT LATIN SMALL LETTER N
0xfd 0x00b2 #SUPERSCRIPT TWO
0xfe 0x25a0 #BLACK SQUARE
0xff 0x00a0 #NO-BREAK SPACE

275
Unicode/cp850.cp Normal file
View File

@ -0,0 +1,275 @@
CP 850 (Western European)
"cp850", "850"
#
# Name: cp850_DOSLatin1 to Unicode table
# Unicode version: 2.0
# Table version: 2.00
# Table format: Format A
# Date: 04/24/96
# Authors: Lori Brownell <loribr@microsoft.com>
# K.D. Chang <a-kchang@microsoft.com>
# General notes: none
#
# Format: Three tab-separated columns
# Column #1 is the cp850_DOSLatin1 code (in hex)
# Column #2 is the Unicode (in hex as 0xXXXX)
# Column #3 is the Unicode name (follows a comment sign, '#')
#
# The entries are in cp850_DOSLatin1 order
#
0x00 0x0000 #NULL
0x01 0x0001 #START OF HEADING
0x02 0x0002 #START OF TEXT
0x03 0x0003 #END OF TEXT
0x04 0x0004 #END OF TRANSMISSION
0x05 0x0005 #ENQUIRY
0x06 0x0006 #ACKNOWLEDGE
0x07 0x0007 #BELL
0x08 0x0008 #BACKSPACE
0x09 0x0009 #HORIZONTAL TABULATION
0x0a 0x000a #LINE FEED
0x0b 0x000b #VERTICAL TABULATION
0x0c 0x000c #FORM FEED
0x0d 0x000d #CARRIAGE RETURN
0x0e 0x000e #SHIFT OUT
0x0f 0x000f #SHIFT IN
0x10 0x0010 #DATA LINK ESCAPE
0x11 0x0011 #DEVICE CONTROL ONE
0x12 0x0012 #DEVICE CONTROL TWO
0x13 0x0013 #DEVICE CONTROL THREE
0x14 0x0014 #DEVICE CONTROL FOUR
0x15 0x0015 #NEGATIVE ACKNOWLEDGE
0x16 0x0016 #SYNCHRONOUS IDLE
0x17 0x0017 #END OF TRANSMISSION BLOCK
0x18 0x0018 #CANCEL
0x19 0x0019 #END OF MEDIUM
0x1a 0x001a #SUBSTITUTE
0x1b 0x001b #ESCAPE
0x1c 0x001c #FILE SEPARATOR
0x1d 0x001d #GROUP SEPARATOR
0x1e 0x001e #RECORD SEPARATOR
0x1f 0x001f #UNIT SEPARATOR
0x20 0x0020 #SPACE
0x21 0x0021 #EXCLAMATION MARK
0x22 0x0022 #QUOTATION MARK
0x23 0x0023 #NUMBER SIGN
0x24 0x0024 #DOLLAR SIGN
0x25 0x0025 #PERCENT SIGN
0x26 0x0026 #AMPERSAND
0x27 0x0027 #APOSTROPHE
0x28 0x0028 #LEFT PARENTHESIS
0x29 0x0029 #RIGHT PARENTHESIS
0x2a 0x002a #ASTERISK
0x2b 0x002b #PLUS SIGN
0x2c 0x002c #COMMA
0x2d 0x002d #HYPHEN-MINUS
0x2e 0x002e #FULL STOP
0x2f 0x002f #SOLIDUS
0x30 0x0030 #DIGIT ZERO
0x31 0x0031 #DIGIT ONE
0x32 0x0032 #DIGIT TWO
0x33 0x0033 #DIGIT THREE
0x34 0x0034 #DIGIT FOUR
0x35 0x0035 #DIGIT FIVE
0x36 0x0036 #DIGIT SIX
0x37 0x0037 #DIGIT SEVEN
0x38 0x0038 #DIGIT EIGHT
0x39 0x0039 #DIGIT NINE
0x3a 0x003a #COLON
0x3b 0x003b #SEMICOLON
0x3c 0x003c #LESS-THAN SIGN
0x3d 0x003d #EQUALS SIGN
0x3e 0x003e #GREATER-THAN SIGN
0x3f 0x003f #QUESTION MARK
0x40 0x0040 #COMMERCIAL AT
0x41 0x0041 #LATIN CAPITAL LETTER A
0x42 0x0042 #LATIN CAPITAL LETTER B
0x43 0x0043 #LATIN CAPITAL LETTER C
0x44 0x0044 #LATIN CAPITAL LETTER D
0x45 0x0045 #LATIN CAPITAL LETTER E
0x46 0x0046 #LATIN CAPITAL LETTER F
0x47 0x0047 #LATIN CAPITAL LETTER G
0x48 0x0048 #LATIN CAPITAL LETTER H
0x49 0x0049 #LATIN CAPITAL LETTER I
0x4a 0x004a #LATIN CAPITAL LETTER J
0x4b 0x004b #LATIN CAPITAL LETTER K
0x4c 0x004c #LATIN CAPITAL LETTER L
0x4d 0x004d #LATIN CAPITAL LETTER M
0x4e 0x004e #LATIN CAPITAL LETTER N
0x4f 0x004f #LATIN CAPITAL LETTER O
0x50 0x0050 #LATIN CAPITAL LETTER P
0x51 0x0051 #LATIN CAPITAL LETTER Q
0x52 0x0052 #LATIN CAPITAL LETTER R
0x53 0x0053 #LATIN CAPITAL LETTER S
0x54 0x0054 #LATIN CAPITAL LETTER T
0x55 0x0055 #LATIN CAPITAL LETTER U
0x56 0x0056 #LATIN CAPITAL LETTER V
0x57 0x0057 #LATIN CAPITAL LETTER W
0x58 0x0058 #LATIN CAPITAL LETTER X
0x59 0x0059 #LATIN CAPITAL LETTER Y
0x5a 0x005a #LATIN CAPITAL LETTER Z
0x5b 0x005b #LEFT SQUARE BRACKET
0x5c 0x005c #REVERSE SOLIDUS
0x5d 0x005d #RIGHT SQUARE BRACKET
0x5e 0x005e #CIRCUMFLEX ACCENT
0x5f 0x005f #LOW LINE
0x60 0x0060 #GRAVE ACCENT
0x61 0x0061 #LATIN SMALL LETTER A
0x62 0x0062 #LATIN SMALL LETTER B
0x63 0x0063 #LATIN SMALL LETTER C
0x64 0x0064 #LATIN SMALL LETTER D
0x65 0x0065 #LATIN SMALL LETTER E
0x66 0x0066 #LATIN SMALL LETTER F
0x67 0x0067 #LATIN SMALL LETTER G
0x68 0x0068 #LATIN SMALL LETTER H
0x69 0x0069 #LATIN SMALL LETTER I
0x6a 0x006a #LATIN SMALL LETTER J
0x6b 0x006b #LATIN SMALL LETTER K
0x6c 0x006c #LATIN SMALL LETTER L
0x6d 0x006d #LATIN SMALL LETTER M
0x6e 0x006e #LATIN SMALL LETTER N
0x6f 0x006f #LATIN SMALL LETTER O
0x70 0x0070 #LATIN SMALL LETTER P
0x71 0x0071 #LATIN SMALL LETTER Q
0x72 0x0072 #LATIN SMALL LETTER R
0x73 0x0073 #LATIN SMALL LETTER S
0x74 0x0074 #LATIN SMALL LETTER T
0x75 0x0075 #LATIN SMALL LETTER U
0x76 0x0076 #LATIN SMALL LETTER V
0x77 0x0077 #LATIN SMALL LETTER W
0x78 0x0078 #LATIN SMALL LETTER X
0x79 0x0079 #LATIN SMALL LETTER Y
0x7a 0x007a #LATIN SMALL LETTER Z
0x7b 0x007b #LEFT CURLY BRACKET
0x7c 0x007c #VERTICAL LINE
0x7d 0x007d #RIGHT CURLY BRACKET
0x7e 0x007e #TILDE
0x7f 0x007f #DELETE
0x80 0x00c7 #LATIN CAPITAL LETTER C WITH CEDILLA
0x81 0x00fc #LATIN SMALL LETTER U WITH DIAERESIS
0x82 0x00e9 #LATIN SMALL LETTER E WITH ACUTE
0x83 0x00e2 #LATIN SMALL LETTER A WITH CIRCUMFLEX
0x84 0x00e4 #LATIN SMALL LETTER A WITH DIAERESIS
0x85 0x00e0 #LATIN SMALL LETTER A WITH GRAVE
0x86 0x00e5 #LATIN SMALL LETTER A WITH RING ABOVE
0x87 0x00e7 #LATIN SMALL LETTER C WITH CEDILLA
0x88 0x00ea #LATIN SMALL LETTER E WITH CIRCUMFLEX
0x89 0x00eb #LATIN SMALL LETTER E WITH DIAERESIS
0x8a 0x00e8 #LATIN SMALL LETTER E WITH GRAVE
0x8b 0x00ef #LATIN SMALL LETTER I WITH DIAERESIS
0x8c 0x00ee #LATIN SMALL LETTER I WITH CIRCUMFLEX
0x8d 0x00ec #LATIN SMALL LETTER I WITH GRAVE
0x8e 0x00c4 #LATIN CAPITAL LETTER A WITH DIAERESIS
0x8f 0x00c5 #LATIN CAPITAL LETTER A WITH RING ABOVE
0x90 0x00c9 #LATIN CAPITAL LETTER E WITH ACUTE
0x91 0x00e6 #LATIN SMALL LIGATURE AE
0x92 0x00c6 #LATIN CAPITAL LIGATURE AE
0x93 0x00f4 #LATIN SMALL LETTER O WITH CIRCUMFLEX
0x94 0x00f6 #LATIN SMALL LETTER O WITH DIAERESIS
0x95 0x00f2 #LATIN SMALL LETTER O WITH GRAVE
0x96 0x00fb #LATIN SMALL LETTER U WITH CIRCUMFLEX
0x97 0x00f9 #LATIN SMALL LETTER U WITH GRAVE
0x98 0x00ff #LATIN SMALL LETTER Y WITH DIAERESIS
0x99 0x00d6 #LATIN CAPITAL LETTER O WITH DIAERESIS
0x9a 0x00dc #LATIN CAPITAL LETTER U WITH DIAERESIS
0x9b 0x00f8 #LATIN SMALL LETTER O WITH STROKE
0x9c 0x00a3 #POUND SIGN
0x9d 0x00d8 #LATIN CAPITAL LETTER O WITH STROKE
0x9e 0x00d7 #MULTIPLICATION SIGN
0x9f 0x0192 #LATIN SMALL LETTER F WITH HOOK
0xa0 0x00e1 #LATIN SMALL LETTER A WITH ACUTE
0xa1 0x00ed #LATIN SMALL LETTER I WITH ACUTE
0xa2 0x00f3 #LATIN SMALL LETTER O WITH ACUTE
0xa3 0x00fa #LATIN SMALL LETTER U WITH ACUTE
0xa4 0x00f1 #LATIN SMALL LETTER N WITH TILDE
0xa5 0x00d1 #LATIN CAPITAL LETTER N WITH TILDE
0xa6 0x00aa #FEMININE ORDINAL INDICATOR
0xa7 0x00ba #MASCULINE ORDINAL INDICATOR
0xa8 0x00bf #INVERTED QUESTION MARK
0xa9 0x00ae #REGISTERED SIGN
0xaa 0x00ac #NOT SIGN
0xab 0x00bd #VULGAR FRACTION ONE HALF
0xac 0x00bc #VULGAR FRACTION ONE QUARTER
0xad 0x00a1 #INVERTED EXCLAMATION MARK
0xae 0x00ab #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
0xaf 0x00bb #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
0xb0 0x2591 #LIGHT SHADE
0xb1 0x2592 #MEDIUM SHADE
0xb2 0x2593 #DARK SHADE
0xb3 0x2502 #BOX DRAWINGS LIGHT VERTICAL
0xb4 0x2524 #BOX DRAWINGS LIGHT VERTICAL AND LEFT
0xb5 0x00c1 #LATIN CAPITAL LETTER A WITH ACUTE
0xb6 0x00c2 #LATIN CAPITAL LETTER A WITH CIRCUMFLEX
0xb7 0x00c0 #LATIN CAPITAL LETTER A WITH GRAVE
0xb8 0x00a9 #COPYRIGHT SIGN
0xb9 0x2563 #BOX DRAWINGS DOUBLE VERTICAL AND LEFT
0xba 0x2551 #BOX DRAWINGS DOUBLE VERTICAL
0xbb 0x2557 #BOX DRAWINGS DOUBLE DOWN AND LEFT
0xbc 0x255d #BOX DRAWINGS DOUBLE UP AND LEFT
0xbd 0x00a2 #CENT SIGN
0xbe 0x00a5 #YEN SIGN
0xbf 0x2510 #BOX DRAWINGS LIGHT DOWN AND LEFT
0xc0 0x2514 #BOX DRAWINGS LIGHT UP AND RIGHT
0xc1 0x2534 #BOX DRAWINGS LIGHT UP AND HORIZONTAL
0xc2 0x252c #BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
0xc3 0x251c #BOX DRAWINGS LIGHT VERTICAL AND RIGHT
0xc4 0x2500 #BOX DRAWINGS LIGHT HORIZONTAL
0xc5 0x253c #BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
0xc6 0x00e3 #LATIN SMALL LETTER A WITH TILDE
0xc7 0x00c3 #LATIN CAPITAL LETTER A WITH TILDE
0xc8 0x255a #BOX DRAWINGS DOUBLE UP AND RIGHT
0xc9 0x2554 #BOX DRAWINGS DOUBLE DOWN AND RIGHT
0xca 0x2569 #BOX DRAWINGS DOUBLE UP AND HORIZONTAL
0xcb 0x2566 #BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
0xcc 0x2560 #BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
0xcd 0x2550 #BOX DRAWINGS DOUBLE HORIZONTAL
0xce 0x256c #BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
0xcf 0x00a4 #CURRENCY SIGN
0xd0 0x00f0 #LATIN SMALL LETTER ETH
0xd1 0x00d0 #LATIN CAPITAL LETTER ETH
0xd2 0x00ca #LATIN CAPITAL LETTER E WITH CIRCUMFLEX
0xd3 0x00cb #LATIN CAPITAL LETTER E WITH DIAERESIS
0xd4 0x00c8 #LATIN CAPITAL LETTER E WITH GRAVE
0xd5 0x0131 #LATIN SMALL LETTER DOTLESS I
0xd6 0x00cd #LATIN CAPITAL LETTER I WITH ACUTE
0xd7 0x00ce #LATIN CAPITAL LETTER I WITH CIRCUMFLEX
0xd8 0x00cf #LATIN CAPITAL LETTER I WITH DIAERESIS
0xd9 0x2518 #BOX DRAWINGS LIGHT UP AND LEFT
0xda 0x250c #BOX DRAWINGS LIGHT DOWN AND RIGHT
0xdb 0x2588 #FULL BLOCK
0xdc 0x2584 #LOWER HALF BLOCK
0xdd 0x00a6 #BROKEN BAR
0xde 0x00cc #LATIN CAPITAL LETTER I WITH GRAVE
0xdf 0x2580 #UPPER HALF BLOCK
0xe0 0x00d3 #LATIN CAPITAL LETTER O WITH ACUTE
0xe1 0x00df #LATIN SMALL LETTER SHARP S
0xe2 0x00d4 #LATIN CAPITAL LETTER O WITH CIRCUMFLEX
0xe3 0x00d2 #LATIN CAPITAL LETTER O WITH GRAVE
0xe4 0x00f5 #LATIN SMALL LETTER O WITH TILDE
0xe5 0x00d5 #LATIN CAPITAL LETTER O WITH TILDE
0xe6 0x00b5 #MICRO SIGN
0xe7 0x00fe #LATIN SMALL LETTER THORN
0xe8 0x00de #LATIN CAPITAL LETTER THORN
0xe9 0x00da #LATIN CAPITAL LETTER U WITH ACUTE
0xea 0x00db #LATIN CAPITAL LETTER U WITH CIRCUMFLEX
0xeb 0x00d9 #LATIN CAPITAL LETTER U WITH GRAVE
0xec 0x00fd #LATIN SMALL LETTER Y WITH ACUTE
0xed 0x00dd #LATIN CAPITAL LETTER Y WITH ACUTE
0xee 0x00af #MACRON
0xef 0x00b4 #ACUTE ACCENT
0xf0 0x00ad #SOFT HYPHEN
0xf1 0x00b1 #PLUS-MINUS SIGN
0xf2 0x2017 #DOUBLE LOW LINE
0xf3 0x00be #VULGAR FRACTION THREE QUARTERS
0xf4 0x00b6 #PILCROW SIGN
0xf5 0x00a7 #SECTION SIGN
0xf6 0x00f7 #DIVISION SIGN
0xf7 0x00b8 #CEDILLA
0xf8 0x00b0 #DEGREE SIGN
0xf9 0x00a8 #DIAERESIS
0xfa 0x00b7 #MIDDLE DOT
0xfb 0x00b9 #SUPERSCRIPT ONE
0xfc 0x00b3 #SUPERSCRIPT THREE
0xfd 0x00b2 #SUPERSCRIPT TWO
0xfe 0x25a0 #BLACK SQUARE
0xff 0x00a0 #NO-BREAK SPACE

275
Unicode/cp852.cp Normal file
View File

@ -0,0 +1,275 @@
CP 852 (Central European)
"cp852", "852"
#
# Name: cp852_DOSLatin2 to Unicode table
# Unicode version: 2.0
# Table version: 2.00
# Table format: Format A
# Date: 04/24/96
# Authors: Lori Brownell <loribr@microsoft.com>
# K.D. Chang <a-kchang@microsoft.com>
# General notes: none
#
# Format: Three tab-separated columns
# Column #1 is the cp852_DOSLatin2 code (in hex)
# Column #2 is the Unicode (in hex as 0xXXXX)
# Column #3 is the Unicode name (follows a comment sign, '#')
#
# The entries are in cp852_DOSLatin2 order
#
0x00 0x0000 #NULL
0x01 0x0001 #START OF HEADING
0x02 0x0002 #START OF TEXT
0x03 0x0003 #END OF TEXT
0x04 0x0004 #END OF TRANSMISSION
0x05 0x0005 #ENQUIRY
0x06 0x0006 #ACKNOWLEDGE
0x07 0x0007 #BELL
0x08 0x0008 #BACKSPACE
0x09 0x0009 #HORIZONTAL TABULATION
0x0a 0x000a #LINE FEED
0x0b 0x000b #VERTICAL TABULATION
0x0c 0x000c #FORM FEED
0x0d 0x000d #CARRIAGE RETURN
0x0e 0x000e #SHIFT OUT
0x0f 0x000f #SHIFT IN
0x10 0x0010 #DATA LINK ESCAPE
0x11 0x0011 #DEVICE CONTROL ONE
0x12 0x0012 #DEVICE CONTROL TWO
0x13 0x0013 #DEVICE CONTROL THREE
0x14 0x0014 #DEVICE CONTROL FOUR
0x15 0x0015 #NEGATIVE ACKNOWLEDGE
0x16 0x0016 #SYNCHRONOUS IDLE
0x17 0x0017 #END OF TRANSMISSION BLOCK
0x18 0x0018 #CANCEL
0x19 0x0019 #END OF MEDIUM
0x1a 0x001a #SUBSTITUTE
0x1b 0x001b #ESCAPE
0x1c 0x001c #FILE SEPARATOR
0x1d 0x001d #GROUP SEPARATOR
0x1e 0x001e #RECORD SEPARATOR
0x1f 0x001f #UNIT SEPARATOR
0x20 0x0020 #SPACE
0x21 0x0021 #EXCLAMATION MARK
0x22 0x0022 #QUOTATION MARK
0x23 0x0023 #NUMBER SIGN
0x24 0x0024 #DOLLAR SIGN
0x25 0x0025 #PERCENT SIGN
0x26 0x0026 #AMPERSAND
0x27 0x0027 #APOSTROPHE
0x28 0x0028 #LEFT PARENTHESIS
0x29 0x0029 #RIGHT PARENTHESIS
0x2a 0x002a #ASTERISK
0x2b 0x002b #PLUS SIGN
0x2c 0x002c #COMMA
0x2d 0x002d #HYPHEN-MINUS
0x2e 0x002e #FULL STOP
0x2f 0x002f #SOLIDUS
0x30 0x0030 #DIGIT ZERO
0x31 0x0031 #DIGIT ONE
0x32 0x0032 #DIGIT TWO
0x33 0x0033 #DIGIT THREE
0x34 0x0034 #DIGIT FOUR
0x35 0x0035 #DIGIT FIVE
0x36 0x0036 #DIGIT SIX
0x37 0x0037 #DIGIT SEVEN
0x38 0x0038 #DIGIT EIGHT
0x39 0x0039 #DIGIT NINE
0x3a 0x003a #COLON
0x3b 0x003b #SEMICOLON
0x3c 0x003c #LESS-THAN SIGN
0x3d 0x003d #EQUALS SIGN
0x3e 0x003e #GREATER-THAN SIGN
0x3f 0x003f #QUESTION MARK
0x40 0x0040 #COMMERCIAL AT
0x41 0x0041 #LATIN CAPITAL LETTER A
0x42 0x0042 #LATIN CAPITAL LETTER B
0x43 0x0043 #LATIN CAPITAL LETTER C
0x44 0x0044 #LATIN CAPITAL LETTER D
0x45 0x0045 #LATIN CAPITAL LETTER E
0x46 0x0046 #LATIN CAPITAL LETTER F
0x47 0x0047 #LATIN CAPITAL LETTER G
0x48 0x0048 #LATIN CAPITAL LETTER H
0x49 0x0049 #LATIN CAPITAL LETTER I
0x4a 0x004a #LATIN CAPITAL LETTER J
0x4b 0x004b #LATIN CAPITAL LETTER K
0x4c 0x004c #LATIN CAPITAL LETTER L
0x4d 0x004d #LATIN CAPITAL LETTER M
0x4e 0x004e #LATIN CAPITAL LETTER N
0x4f 0x004f #LATIN CAPITAL LETTER O
0x50 0x0050 #LATIN CAPITAL LETTER P
0x51 0x0051 #LATIN CAPITAL LETTER Q
0x52 0x0052 #LATIN CAPITAL LETTER R
0x53 0x0053 #LATIN CAPITAL LETTER S
0x54 0x0054 #LATIN CAPITAL LETTER T
0x55 0x0055 #LATIN CAPITAL LETTER U
0x56 0x0056 #LATIN CAPITAL LETTER V
0x57 0x0057 #LATIN CAPITAL LETTER W
0x58 0x0058 #LATIN CAPITAL LETTER X
0x59 0x0059 #LATIN CAPITAL LETTER Y
0x5a 0x005a #LATIN CAPITAL LETTER Z
0x5b 0x005b #LEFT SQUARE BRACKET
0x5c 0x005c #REVERSE SOLIDUS
0x5d 0x005d #RIGHT SQUARE BRACKET
0x5e 0x005e #CIRCUMFLEX ACCENT
0x5f 0x005f #LOW LINE
0x60 0x0060 #GRAVE ACCENT
0x61 0x0061 #LATIN SMALL LETTER A
0x62 0x0062 #LATIN SMALL LETTER B
0x63 0x0063 #LATIN SMALL LETTER C
0x64 0x0064 #LATIN SMALL LETTER D
0x65 0x0065 #LATIN SMALL LETTER E
0x66 0x0066 #LATIN SMALL LETTER F
0x67 0x0067 #LATIN SMALL LETTER G
0x68 0x0068 #LATIN SMALL LETTER H
0x69 0x0069 #LATIN SMALL LETTER I
0x6a 0x006a #LATIN SMALL LETTER J
0x6b 0x006b #LATIN SMALL LETTER K
0x6c 0x006c #LATIN SMALL LETTER L
0x6d 0x006d #LATIN SMALL LETTER M
0x6e 0x006e #LATIN SMALL LETTER N
0x6f 0x006f #LATIN SMALL LETTER O
0x70 0x0070 #LATIN SMALL LETTER P
0x71 0x0071 #LATIN SMALL LETTER Q
0x72 0x0072 #LATIN SMALL LETTER R
0x73 0x0073 #LATIN SMALL LETTER S
0x74 0x0074 #LATIN SMALL LETTER T
0x75 0x0075 #LATIN SMALL LETTER U
0x76 0x0076 #LATIN SMALL LETTER V
0x77 0x0077 #LATIN SMALL LETTER W
0x78 0x0078 #LATIN SMALL LETTER X
0x79 0x0079 #LATIN SMALL LETTER Y
0x7a 0x007a #LATIN SMALL LETTER Z
0x7b 0x007b #LEFT CURLY BRACKET
0x7c 0x007c #VERTICAL LINE
0x7d 0x007d #RIGHT CURLY BRACKET
0x7e 0x007e #TILDE
0x7f 0x007f #DELETE
0x80 0x00c7 #LATIN CAPITAL LETTER C WITH CEDILLA
0x81 0x00fc #LATIN SMALL LETTER U WITH DIAERESIS
0x82 0x00e9 #LATIN SMALL LETTER E WITH ACUTE
0x83 0x00e2 #LATIN SMALL LETTER A WITH CIRCUMFLEX
0x84 0x00e4 #LATIN SMALL LETTER A WITH DIAERESIS
0x85 0x016f #LATIN SMALL LETTER U WITH RING ABOVE
0x86 0x0107 #LATIN SMALL LETTER C WITH ACUTE
0x87 0x00e7 #LATIN SMALL LETTER C WITH CEDILLA
0x88 0x0142 #LATIN SMALL LETTER L WITH STROKE
0x89 0x00eb #LATIN SMALL LETTER E WITH DIAERESIS
0x8a 0x0150 #LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
0x8b 0x0151 #LATIN SMALL LETTER O WITH DOUBLE ACUTE
0x8c 0x00ee #LATIN SMALL LETTER I WITH CIRCUMFLEX
0x8d 0x0179 #LATIN CAPITAL LETTER Z WITH ACUTE
0x8e 0x00c4 #LATIN CAPITAL LETTER A WITH DIAERESIS
0x8f 0x0106 #LATIN CAPITAL LETTER C WITH ACUTE
0x90 0x00c9 #LATIN CAPITAL LETTER E WITH ACUTE
0x91 0x0139 #LATIN CAPITAL LETTER L WITH ACUTE
0x92 0x013a #LATIN SMALL LETTER L WITH ACUTE
0x93 0x00f4 #LATIN SMALL LETTER O WITH CIRCUMFLEX
0x94 0x00f6 #LATIN SMALL LETTER O WITH DIAERESIS
0x95 0x013d #LATIN CAPITAL LETTER L WITH CARON
0x96 0x013e #LATIN SMALL LETTER L WITH CARON
0x97 0x015a #LATIN CAPITAL LETTER S WITH ACUTE
0x98 0x015b #LATIN SMALL LETTER S WITH ACUTE
0x99 0x00d6 #LATIN CAPITAL LETTER O WITH DIAERESIS
0x9a 0x00dc #LATIN CAPITAL LETTER U WITH DIAERESIS
0x9b 0x0164 #LATIN CAPITAL LETTER T WITH CARON
0x9c 0x0165 #LATIN SMALL LETTER T WITH CARON
0x9d 0x0141 #LATIN CAPITAL LETTER L WITH STROKE
0x9e 0x00d7 #MULTIPLICATION SIGN
0x9f 0x010d #LATIN SMALL LETTER C WITH CARON
0xa0 0x00e1 #LATIN SMALL LETTER A WITH ACUTE
0xa1 0x00ed #LATIN SMALL LETTER I WITH ACUTE
0xa2 0x00f3 #LATIN SMALL LETTER O WITH ACUTE
0xa3 0x00fa #LATIN SMALL LETTER U WITH ACUTE
0xa4 0x0104 #LATIN CAPITAL LETTER A WITH OGONEK
0xa5 0x0105 #LATIN SMALL LETTER A WITH OGONEK
0xa6 0x017d #LATIN CAPITAL LETTER Z WITH CARON
0xa7 0x017e #LATIN SMALL LETTER Z WITH CARON
0xa8 0x0118 #LATIN CAPITAL LETTER E WITH OGONEK
0xa9 0x0119 #LATIN SMALL LETTER E WITH OGONEK
0xaa 0x00ac #NOT SIGN
0xab 0x017a #LATIN SMALL LETTER Z WITH ACUTE
0xac 0x010c #LATIN CAPITAL LETTER C WITH CARON
0xad 0x015f #LATIN SMALL LETTER S WITH CEDILLA
0xae 0x00ab #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
0xaf 0x00bb #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
0xb0 0x2591 #LIGHT SHADE
0xb1 0x2592 #MEDIUM SHADE
0xb2 0x2593 #DARK SHADE
0xb3 0x2502 #BOX DRAWINGS LIGHT VERTICAL
0xb4 0x2524 #BOX DRAWINGS LIGHT VERTICAL AND LEFT
0xb5 0x00c1 #LATIN CAPITAL LETTER A WITH ACUTE
0xb6 0x00c2 #LATIN CAPITAL LETTER A WITH CIRCUMFLEX
0xb7 0x011a #LATIN CAPITAL LETTER E WITH CARON
0xb8 0x015e #LATIN CAPITAL LETTER S WITH CEDILLA
0xb9 0x2563 #BOX DRAWINGS DOUBLE VERTICAL AND LEFT
0xba 0x2551 #BOX DRAWINGS DOUBLE VERTICAL
0xbb 0x2557 #BOX DRAWINGS DOUBLE DOWN AND LEFT
0xbc 0x255d #BOX DRAWINGS DOUBLE UP AND LEFT
0xbd 0x017b #LATIN CAPITAL LETTER Z WITH DOT ABOVE
0xbe 0x017c #LATIN SMALL LETTER Z WITH DOT ABOVE
0xbf 0x2510 #BOX DRAWINGS LIGHT DOWN AND LEFT
0xc0 0x2514 #BOX DRAWINGS LIGHT UP AND RIGHT
0xc1 0x2534 #BOX DRAWINGS LIGHT UP AND HORIZONTAL
0xc2 0x252c #BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
0xc3 0x251c #BOX DRAWINGS LIGHT VERTICAL AND RIGHT
0xc4 0x2500 #BOX DRAWINGS LIGHT HORIZONTAL
0xc5 0x253c #BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
0xc6 0x0102 #LATIN CAPITAL LETTER A WITH BREVE
0xc7 0x0103 #LATIN SMALL LETTER A WITH BREVE
0xc8 0x255a #BOX DRAWINGS DOUBLE UP AND RIGHT
0xc9 0x2554 #BOX DRAWINGS DOUBLE DOWN AND RIGHT
0xca 0x2569 #BOX DRAWINGS DOUBLE UP AND HORIZONTAL
0xcb 0x2566 #BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
0xcc 0x2560 #BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
0xcd 0x2550 #BOX DRAWINGS DOUBLE HORIZONTAL
0xce 0x256c #BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
0xcf 0x00a4 #CURRENCY SIGN
0xd0 0x0111 #LATIN SMALL LETTER D WITH STROKE
0xd1 0x0110 #LATIN CAPITAL LETTER D WITH STROKE
0xd2 0x010e #LATIN CAPITAL LETTER D WITH CARON
0xd3 0x00cb #LATIN CAPITAL LETTER E WITH DIAERESIS
0xd4 0x010f #LATIN SMALL LETTER D WITH CARON
0xd5 0x0147 #LATIN CAPITAL LETTER N WITH CARON
0xd6 0x00cd #LATIN CAPITAL LETTER I WITH ACUTE
0xd7 0x00ce #LATIN CAPITAL LETTER I WITH CIRCUMFLEX
0xd8 0x011b #LATIN SMALL LETTER E WITH CARON
0xd9 0x2518 #BOX DRAWINGS LIGHT UP AND LEFT
0xda 0x250c #BOX DRAWINGS LIGHT DOWN AND RIGHT
0xdb 0x2588 #FULL BLOCK
0xdc 0x2584 #LOWER HALF BLOCK
0xdd 0x0162 #LATIN CAPITAL LETTER T WITH CEDILLA
0xde 0x016e #LATIN CAPITAL LETTER U WITH RING ABOVE
0xdf 0x2580 #UPPER HALF BLOCK
0xe0 0x00d3 #LATIN CAPITAL LETTER O WITH ACUTE
0xe1 0x00df #LATIN SMALL LETTER SHARP S
0xe2 0x00d4 #LATIN CAPITAL LETTER O WITH CIRCUMFLEX
0xe3 0x0143 #LATIN CAPITAL LETTER N WITH ACUTE
0xe4 0x0144 #LATIN SMALL LETTER N WITH ACUTE
0xe5 0x0148 #LATIN SMALL LETTER N WITH CARON
0xe6 0x0160 #LATIN CAPITAL LETTER S WITH CARON
0xe7 0x0161 #LATIN SMALL LETTER S WITH CARON
0xe8 0x0154 #LATIN CAPITAL LETTER R WITH ACUTE
0xe9 0x00da #LATIN CAPITAL LETTER U WITH ACUTE
0xea 0x0155 #LATIN SMALL LETTER R WITH ACUTE
0xeb 0x0170 #LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
0xec 0x00fd #LATIN SMALL LETTER Y WITH ACUTE
0xed 0x00dd #LATIN CAPITAL LETTER Y WITH ACUTE
0xee 0x0163 #LATIN SMALL LETTER T WITH CEDILLA
0xef 0x00b4 #ACUTE ACCENT
0xf0 0x00ad #SOFT HYPHEN
0xf1 0x02dd #DOUBLE ACUTE ACCENT
0xf2 0x02db #OGONEK
0xf3 0x02c7 #CARON
0xf4 0x02d8 #BREVE
0xf5 0x00a7 #SECTION SIGN
0xf6 0x00f7 #DIVISION SIGN
0xf7 0x00b8 #CEDILLA
0xf8 0x00b0 #DEGREE SIGN
0xf9 0x00a8 #DIAERESIS
0xfa 0x02d9 #DOT ABOVE
0xfb 0x0171 #LATIN SMALL LETTER U WITH DOUBLE ACUTE
0xfc 0x0158 #LATIN CAPITAL LETTER R WITH CARON
0xfd 0x0159 #LATIN SMALL LETTER R WITH CARON
0xfe 0x25a0 #BLACK SQUARE
0xff 0x00a0 #NO-BREAK SPACE

276
Unicode/cp866.cp Normal file
View File

@ -0,0 +1,276 @@
CP 866 (Cyrillic)
"cp866", "866"
#
# Name: cp866_DOSCyrillicRussian to Unicode table
# Unicode version: 2.0
# Table version: 2.00
# Table format: Format A
# Date: 04/24/96
# Authors: Lori Brownell <loribr@microsoft.com>
# K.D. Chang <a-kchang@microsoft.com>
# General notes: none
#
# Format: Three tab-separated columns
# Column #1 is the cp866_DOSCyrillicRussian code (in hex)
# Column #2 is the Unicode (in hex as 0xXXXX)
# Column #3 is the Unicode name (follows a comment sign, '#')
#
# The entries are in cp866_DOSCyrillicRussian order
#
0x00 0x0000 #NULL
0x01 0x0001 #START OF HEADING
0x02 0x0002 #START OF TEXT
0x03 0x0003 #END OF TEXT
0x04 0x0004 #END OF TRANSMISSION
0x05 0x0005 #ENQUIRY
0x06 0x0006 #ACKNOWLEDGE
0x07 0x0007 #BELL
0x08 0x0008 #BACKSPACE
0x09 0x0009 #HORIZONTAL TABULATION
0x0a 0x000a #LINE FEED
0x0b 0x000b #VERTICAL TABULATION
0x0c 0x000c #FORM FEED
0x0d 0x000d #CARRIAGE RETURN
0x0e 0x000e #SHIFT OUT
0x0f 0x000f #SHIFT IN
0x10 0x0010 #DATA LINK ESCAPE
0x11 0x0011 #DEVICE CONTROL ONE
0x12 0x0012 #DEVICE CONTROL TWO
0x13 0x0013 #DEVICE CONTROL THREE
0x14 0x0014 #DEVICE CONTROL FOUR
0x15 0x0015 #NEGATIVE ACKNOWLEDGE
0x16 0x0016 #SYNCHRONOUS IDLE
0x17 0x0017 #END OF TRANSMISSION BLOCK
0x18 0x0018 #CANCEL
0x19 0x0019 #END OF MEDIUM
0x1a 0x001a #SUBSTITUTE
0x1b 0x001b #ESCAPE
0x1c 0x001c #FILE SEPARATOR
0x1d 0x001d #GROUP SEPARATOR
0x1e 0x001e #RECORD SEPARATOR
0x1f 0x001f #UNIT SEPARATOR
0x20 0x0020 #SPACE
0x21 0x0021 #EXCLAMATION MARK
0x22 0x0022 #QUOTATION MARK
0x23 0x0023 #NUMBER SIGN
0x24 0x0024 #DOLLAR SIGN
0x25 0x0025 #PERCENT SIGN
0x26 0x0026 #AMPERSAND
0x27 0x0027 #APOSTROPHE
0x28 0x0028 #LEFT PARENTHESIS
0x29 0x0029 #RIGHT PARENTHESIS
0x2a 0x002a #ASTERISK
0x2b 0x002b #PLUS SIGN
0x2c 0x002c #COMMA
0x2d 0x002d #HYPHEN-MINUS
0x2e 0x002e #FULL STOP
0x2f 0x002f #SOLIDUS
0x30 0x0030 #DIGIT ZERO
0x31 0x0031 #DIGIT ONE
0x32 0x0032 #DIGIT TWO
0x33 0x0033 #DIGIT THREE
0x34 0x0034 #DIGIT FOUR
0x35 0x0035 #DIGIT FIVE
0x36 0x0036 #DIGIT SIX
0x37 0x0037 #DIGIT SEVEN
0x38 0x0038 #DIGIT EIGHT
0x39 0x0039 #DIGIT NINE
0x3a 0x003a #COLON
0x3b 0x003b #SEMICOLON
0x3c 0x003c #LESS-THAN SIGN
0x3d 0x003d #EQUALS SIGN
0x3e 0x003e #GREATER-THAN SIGN
0x3f 0x003f #QUESTION MARK
0x40 0x0040 #COMMERCIAL AT
0x41 0x0041 #LATIN CAPITAL LETTER A
0x42 0x0042 #LATIN CAPITAL LETTER B
0x43 0x0043 #LATIN CAPITAL LETTER C
0x44 0x0044 #LATIN CAPITAL LETTER D
0x45 0x0045 #LATIN CAPITAL LETTER E
0x46 0x0046 #LATIN CAPITAL LETTER F
0x47 0x0047 #LATIN CAPITAL LETTER G
0x48 0x0048 #LATIN CAPITAL LETTER H
0x49 0x0049 #LATIN CAPITAL LETTER I
0x4a 0x004a #LATIN CAPITAL LETTER J
0x4b 0x004b #LATIN CAPITAL LETTER K
0x4c 0x004c #LATIN CAPITAL LETTER L
0x4d 0x004d #LATIN CAPITAL LETTER M
0x4e 0x004e #LATIN CAPITAL LETTER N
0x4f 0x004f #LATIN CAPITAL LETTER O
0x50 0x0050 #LATIN CAPITAL LETTER P
0x51 0x0051 #LATIN CAPITAL LETTER Q
0x52 0x0052 #LATIN CAPITAL LETTER R
0x53 0x0053 #LATIN CAPITAL LETTER S
0x54 0x0054 #LATIN CAPITAL LETTER T
0x55 0x0055 #LATIN CAPITAL LETTER U
0x56 0x0056 #LATIN CAPITAL LETTER V
0x57 0x0057 #LATIN CAPITAL LETTER W
0x58 0x0058 #LATIN CAPITAL LETTER X
0x59 0x0059 #LATIN CAPITAL LETTER Y
0x5a 0x005a #LATIN CAPITAL LETTER Z
0x5b 0x005b #LEFT SQUARE BRACKET
0x5c 0x005c #REVERSE SOLIDUS
0x5d 0x005d #RIGHT SQUARE BRACKET
0x5e 0x005e #CIRCUMFLEX ACCENT
0x5f 0x005f #LOW LINE
0x60 0x0060 #GRAVE ACCENT
0x61 0x0061 #LATIN SMALL LETTER A
0x62 0x0062 #LATIN SMALL LETTER B
0x63 0x0063 #LATIN SMALL LETTER C
0x64 0x0064 #LATIN SMALL LETTER D
0x65 0x0065 #LATIN SMALL LETTER E
0x66 0x0066 #LATIN SMALL LETTER F
0x67 0x0067 #LATIN SMALL LETTER G
0x68 0x0068 #LATIN SMALL LETTER H
0x69 0x0069 #LATIN SMALL LETTER I
0x6a 0x006a #LATIN SMALL LETTER J
0x6b 0x006b #LATIN SMALL LETTER K
0x6c 0x006c #LATIN SMALL LETTER L
0x6d 0x006d #LATIN SMALL LETTER M
0x6e 0x006e #LATIN SMALL LETTER N
0x6f 0x006f #LATIN SMALL LETTER O
0x70 0x0070 #LATIN SMALL LETTER P
0x71 0x0071 #LATIN SMALL LETTER Q
0x72 0x0072 #LATIN SMALL LETTER R
0x73 0x0073 #LATIN SMALL LETTER S
0x74 0x0074 #LATIN SMALL LETTER T
0x75 0x0075 #LATIN SMALL LETTER U
0x76 0x0076 #LATIN SMALL LETTER V
0x77 0x0077 #LATIN SMALL LETTER W
0x78 0x0078 #LATIN SMALL LETTER X
0x79 0x0079 #LATIN SMALL LETTER Y
0x7a 0x007a #LATIN SMALL LETTER Z
0x7b 0x007b #LEFT CURLY BRACKET
0x7c 0x007c #VERTICAL LINE
0x7d 0x007d #RIGHT CURLY BRACKET
0x7e 0x007e #TILDE
0x7f 0x007f #DELETE
0x80 0x0410 #CYRILLIC CAPITAL LETTER A
0x81 0x0411 #CYRILLIC CAPITAL LETTER BE
0x82 0x0412 #CYRILLIC CAPITAL LETTER VE
0x83 0x0413 #CYRILLIC CAPITAL LETTER GHE
0x84 0x0414 #CYRILLIC CAPITAL LETTER DE
0x85 0x0415 #CYRILLIC CAPITAL LETTER IE
0x86 0x0416 #CYRILLIC CAPITAL LETTER ZHE
0x87 0x0417 #CYRILLIC CAPITAL LETTER ZE
0x88 0x0418 #CYRILLIC CAPITAL LETTER I
0x89 0x0419 #CYRILLIC CAPITAL LETTER SHORT I
0x8a 0x041a #CYRILLIC CAPITAL LETTER KA
0x8b 0x041b #CYRILLIC CAPITAL LETTER EL
0x8c 0x041c #CYRILLIC CAPITAL LETTER EM
0x8d 0x041d #CYRILLIC CAPITAL LETTER EN
0x8e 0x041e #CYRILLIC CAPITAL LETTER O
0x8f 0x041f #CYRILLIC CAPITAL LETTER PE
0x90 0x0420 #CYRILLIC CAPITAL LETTER ER
0x91 0x0421 #CYRILLIC CAPITAL LETTER ES
0x92 0x0422 #CYRILLIC CAPITAL LETTER TE
0x93 0x0423 #CYRILLIC CAPITAL LETTER U
0x94 0x0424 #CYRILLIC CAPITAL LETTER EF
0x95 0x0425 #CYRILLIC CAPITAL LETTER HA
0x96 0x0426 #CYRILLIC CAPITAL LETTER TSE
0x97 0x0427 #CYRILLIC CAPITAL LETTER CHE
0x98 0x0428 #CYRILLIC CAPITAL LETTER SHA
0x99 0x0429 #CYRILLIC CAPITAL LETTER SHCHA
0x9a 0x042a #CYRILLIC CAPITAL LETTER HARD SIGN
0x9b 0x042b #CYRILLIC CAPITAL LETTER YERU
0x9c 0x042c #CYRILLIC CAPITAL LETTER SOFT SIGN
0x9d 0x042d #CYRILLIC CAPITAL LETTER E
0x9e 0x042e #CYRILLIC CAPITAL LETTER YU
0x9f 0x042f #CYRILLIC CAPITAL LETTER YA
0xa0 0x0430 #CYRILLIC SMALL LETTER A
0xa1 0x0431 #CYRILLIC SMALL LETTER BE
0xa2 0x0432 #CYRILLIC SMALL LETTER VE
0xa3 0x0433 #CYRILLIC SMALL LETTER GHE
0xa4 0x0434 #CYRILLIC SMALL LETTER DE
0xa5 0x0435 #CYRILLIC SMALL LETTER IE
0xa6 0x0436 #CYRILLIC SMALL LETTER ZHE
0xa7 0x0437 #CYRILLIC SMALL LETTER ZE
0xa8 0x0438 #CYRILLIC SMALL LETTER I
0xa9 0x0439 #CYRILLIC SMALL LETTER SHORT I
0xaa 0x043a #CYRILLIC SMALL LETTER KA
0xab 0x043b #CYRILLIC SMALL LETTER EL
0xac 0x043c #CYRILLIC SMALL LETTER EM
0xad 0x043d #CYRILLIC SMALL LETTER EN
0xae 0x043e #CYRILLIC SMALL LETTER O
0xaf 0x043f #CYRILLIC SMALL LETTER PE
0xb0 0x2591 #LIGHT SHADE
0xb1 0x2592 #MEDIUM SHADE
0xb2 0x2593 #DARK SHADE
0xb3 0x2502 #BOX DRAWINGS LIGHT VERTICAL
0xb4 0x2524 #BOX DRAWINGS LIGHT VERTICAL AND LEFT
0xb5 0x2561 #BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
0xb6 0x2562 #BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
0xb7 0x2556 #BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
0xb8 0x2555 #BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
0xb9 0x2563 #BOX DRAWINGS DOUBLE VERTICAL AND LEFT
0xba 0x2551 #BOX DRAWINGS DOUBLE VERTICAL
0xbb 0x2557 #BOX DRAWINGS DOUBLE DOWN AND LEFT
0xbc 0x255d #BOX DRAWINGS DOUBLE UP AND LEFT
0xbd 0x255c #BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
0xbe 0x255b #BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
0xbf 0x2510 #BOX DRAWINGS LIGHT DOWN AND LEFT
0xc0 0x2514 #BOX DRAWINGS LIGHT UP AND RIGHT
0xc1 0x2534 #BOX DRAWINGS LIGHT UP AND HORIZONTAL
0xc2 0x252c #BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
0xc3 0x251c #BOX DRAWINGS LIGHT VERTICAL AND RIGHT
0xc4 0x2500 #BOX DRAWINGS LIGHT HORIZONTAL
0xc5 0x253c #BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
0xc6 0x255e #BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
0xc7 0x255f #BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
0xc8 0x255a #BOX DRAWINGS DOUBLE UP AND RIGHT
0xc9 0x2554 #BOX DRAWINGS DOUBLE DOWN AND RIGHT
0xca 0x2569 #BOX DRAWINGS DOUBLE UP AND HORIZONTAL
0xcb 0x2566 #BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
0xcc 0x2560 #BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
0xcd 0x2550 #BOX DRAWINGS DOUBLE HORIZONTAL
0xce 0x256c #BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
0xcf 0x2567 #BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
0xd0 0x2568 #BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
0xd1 0x2564 #BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
0xd2 0x2565 #BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
0xd3 0x2559 #BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
0xd4 0x2558 #BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
0xd5 0x2552 #BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
0xd6 0x2553 #BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
0xd7 0x256b #BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
0xd8 0x256a #BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
0xd9 0x2518 #BOX DRAWINGS LIGHT UP AND LEFT
0xda 0x250c #BOX DRAWINGS LIGHT DOWN AND RIGHT
0xdb 0x2588 #FULL BLOCK
0xdc 0x2584 #LOWER HALF BLOCK
0xdd 0x258c #LEFT HALF BLOCK
0xde 0x2590 #RIGHT HALF BLOCK
0xdf 0x2580 #UPPER HALF BLOCK
0xe0 0x0440 #CYRILLIC SMALL LETTER ER
0xe1 0x0441 #CYRILLIC SMALL LETTER ES
0xe2 0x0442 #CYRILLIC SMALL LETTER TE
0xe3 0x0443 #CYRILLIC SMALL LETTER U
0xe4 0x0444 #CYRILLIC SMALL LETTER EF
0xe5 0x0445 #CYRILLIC SMALL LETTER HA
0xe6 0x0446 #CYRILLIC SMALL LETTER TSE
0xe7 0x0447 #CYRILLIC SMALL LETTER CHE
0xe8 0x0448 #CYRILLIC SMALL LETTER SHA
0xe9 0x0449 #CYRILLIC SMALL LETTER SHCHA
0xea 0x044a #CYRILLIC SMALL LETTER HARD SIGN
0xeb 0x044b #CYRILLIC SMALL LETTER YERU
0xec 0x044c #CYRILLIC SMALL LETTER SOFT SIGN
0xed 0x044d #CYRILLIC SMALL LETTER E
0xee 0x044e #CYRILLIC SMALL LETTER YU
0xef 0x044f #CYRILLIC SMALL LETTER YA
0xf0 0x0401 #CYRILLIC CAPITAL LETTER IO
0xf1 0x0451 #CYRILLIC SMALL LETTER IO
0xf2 0x0404 #CYRILLIC CAPITAL LETTER UKRAINIAN IE
0xf3 0x0454 #CYRILLIC SMALL LETTER UKRAINIAN IE
0xf4 0x0407 #CYRILLIC CAPITAL LETTER YI
0xf5 0x0457 #CYRILLIC SMALL LETTER YI
0xf6 0x040e #CYRILLIC CAPITAL LETTER SHORT U
0xf7 0x045e #CYRILLIC SMALL LETTER SHORT U
0xf8 0x00b0 #DEGREE SIGN
0xf9 0x2219 #BULLET OPERATOR
0xfa 0x00b7 #MIDDLE DOT
0xfb 0x221a #SQUARE ROOT
0xfc 0x2116 #NUMERO SIGN
0xfd 0x00a4 #CURRENCY SIGN
0xfe 0x25a0 #BLACK SQUARE
0xff 0x00a0 #NO-BREAK SPACE

1110
Unicode/entities.lnx Normal file

File diff suppressed because it is too large Load Diff

6
Unicode/gen Executable file
View File

@ -0,0 +1,6 @@
#!/bin/sh
set -e
./gen-cp
./gen-7b
./gen-ent
./gen-upc

21
Unicode/gen-7b Executable file
View File

@ -0,0 +1,21 @@
#!/bin/sh
set -e
LC_ALL=C
export LC_ALL
echo
echo Generating Unicode2ascii translation table.
(
cat 7bitrepl.lnx | awk -f tr7bit.awk >tmp
N=`cat tmp | wc -l`
echo '/* Automatically generated by gen-7b */'
echo
echo 'static_const struct { int x; char *s; } unicode_7b ['`expr $N + 1`'] = {'
sort tmp | sed 's/\\/\\\\/g' | sed 's/\\\\\\\\/\\\\/g' | sed 's/:\\\\001$/:\\001/g' | sed 's/"/\\"/g' | sed 's/^/ { /' | sed 's/:/, "/' | sed 's/$/" },/'
echo ' { -1, NULL }'
echo '};'
echo
echo '#define N_UNICODE_7B' $N
)>../uni_7b.inc
rm -f tmp
echo Done.
echo

40
Unicode/gen-cp Executable file
View File

@ -0,0 +1,40 @@
#!/bin/sh
set -e
LC_ALL=C
export LC_ALL
echo
echo Generating code page translation tables.
codepages=`cat index.txt|sed 's/ //g'`
if [ -n "$codepages" ]; then
(
n=0
echo '/* Automatically generated by gen-cp */'
for i in $codepages; do
printf $i' ' 1>&2
echo
echo 'static_const struct table_entry table_'$i' [] = {'
tail -n +3 $i.cp | sed 's/#.*$//' | grep '^0x[89a-fA-F]' | sed 's/[ ][ ]*/ /g' | sed 's/[ ]*$/ },/' | sed 's/ /, /' | sed 's/^[ ]*/ { /' | grep '.*, .*,' | grep -v ', 0x0*[89][0-9a-fA-F] ' || true
echo ' { 0, 0 }'
echo '};'
echo
echo 'static_const const_char_ptr aliases_'$i' [] = {'`head -2 $i.cp | tail -n +2`', NULL };'
n=`expr $n + 1`
done
echo
echo 'static_const struct codepage_desc codepages [] = {'
for i in $codepages; do
echo ' { "'`head -1 $i.cp`'", aliases_'$i', table_'$i' },'
done
echo ' { NULL, NULL, NULL }'
echo '};'
echo '#define N_CODEPAGES '$n | sed 's/ //g' > codepage.h
if cmp -s ../codepage.h codepage.h; then
rm -f codepage.h
else
mv codepage.h ../codepage.h
fi
) | sed 's/ //g' > ../codepage.inc
echo
echo Done.
fi
echo

21
Unicode/gen-ent Executable file
View File

@ -0,0 +1,21 @@
#!/bin/sh
set -e
LC_ALL=C
export LC_ALL
echo
echo Generating entity table.
(
cat entities.lnx | sed 's/ $//' | grep '^[ ]*{"' | sort >tmp
N=`cat tmp | wc -l`
echo '/* Automatically generated by gen-ent */'
echo
echo 'static_const struct { const char *s; int c; } entities ['`expr $N + 1`'] = {'
cat tmp
echo ' {NULL, 0}'
echo '};'
echo
echo '#define N_ENTITIES' $N
) > ../entity.inc
rm -f tmp
echo Done.
echo

22
Unicode/gen-upc Executable file
View File

@ -0,0 +1,22 @@
#!/bin/sh
set -e
LC_ALL=C
export LC_ALL
echo
echo Generating Unicode upcase table.
for file in upcase locase; do
(
echo '/* Automatically generated by gen-upc */'
echo
echo "static_const struct { unsigned short o; unsigned short n; } unicode_$file [] = {"
(
if [ $file = upcase ]; then
echo '00A0 0020'
fi
cat $file.uni
) | sed 's/^\([0-9A-Z]*\) \([0-9A-Z]*\)$/ { 0x\1, 0x\2 },/' | sort
echo '};'
) > ../$file.inc
done
echo Done.
echo

35
Unicode/index.txt Normal file
View File

@ -0,0 +1,35 @@
7bit
8859_1
8859_2
8859_3
8859_4
8859_5
8859_6
8859_7
8859_8
8859_9
8859_10
8859_13
8859_14
8859_15
8859_16
cp1250
cp1251
cp1252
cp1256
cp1257
cp437
cp737
cp850
cp852
cp866
cp1125
macroman
mac_lat2
kamen
koi8_r
koi8_u
koi8_ru
tcvn5712
viscii
utf_8

263
Unicode/kamen.cp Normal file
View File

@ -0,0 +1,263 @@
Kamenicky Brothers
"x-kam-cs", "kam", "867", "869"
# Kamenicky Brothers Charset File
# Czech characters extracted from CStoCS "kam.enc" and others copied from
# IBM charset by Martin Mares <mj@atrey.karlin.mff.cuni.cz>
0x00 0x0000 #<control>
0x01 0x263A #WHITE SMILING FACE
0x02 0x263B #BLACK SMILING FACE
0x03 0x2665 #BLACK HEART SUIT
0x04 0x2666 #BLACK DIAMOND SUIT
0x05 0x2663 #BLACK CLUB SUIT
0x06 0x2660 #BLACK SPADE SUIT
0x07 0x2022 #BULLET
0x08 0x25D8 #INVERSE BULLET
0x09 0x25CB #WHITE CIRCLE
0x0A 0x25D9 #INVERSE WHITE CIRCLE
0x0B 0x2642 #MALE SIGN
0x0C 0x2640 #FEMALE SIGN
0x0D 0x266A #EIGHTH NOTE
0x0E 0x266B #BEAMED EIGHTH NOTES
0x0F 0x263C #WHITE SUN WITH RAYS
0x10 0x25B6 #BLACK RIGHT-POINTING TRIANGLE
0x11 0x25C0 #BLACK LEFT-POINTING TRIANGLE
0x12 0x2195 #UP DOWN ARROW
0x13 0x203C #DOUBLE EXCLAMATION MARK
0x14 0x00B6 #PILCROW SIGN
0x15 0x00A7 #SECTION SIGN
0x16 0x25AC #BLACK RECTANGLE
0x17 0x21A8 #UP DOWN ARROW WITH BASE
0x18 0x2191 #UPWARDS ARROW
0x19 0x2193 #DOWNWARDS ARROW
0x1A 0x2192 #RIGHTWARDS ARROW
0x1B 0x2190 #LEFTWARDS ARROW
0x1C 0x221F #RIGHT ANGLE
0x1D 0x2194 #LEFT RIGHT ARROW
0x1E 0x25B2 #BLACK UP-POINTING TRIANGLE
0x1F 0x25BC #BLACK DOWN-POINTING TRIANGLE
0x20 0x0020 #SPACE
0x21 0x0021 #EXCLAMATION MARK
0x22 0x0022 #QUOTATION MARK
0x23 0x0023 #NUMBER SIGN
0x24 0x0024 #DOLLAR SIGN
0x25 0x0025 #PERCENT SIGN
0x26 0x0026 #AMPERSAND
0x27 0x0027 #APOSTROPHE
0x28 0x0028 #LEFT PARENTHESIS
0x29 0x0029 #RIGHT PARENTHESIS
0x2A 0x002A #ASTERISK
0x2B 0x002B #PLUS SIGN
0x2C 0x002C #COMMA
0x2D 0x002D #HYPHEN-MINUS
0x2E 0x002E #FULL STOP
0x2F 0x002F #SOLIDUS
0x30 0x0030 #DIGIT ZERO
0x31 0x0031 #DIGIT ONE
0x32 0x0032 #DIGIT TWO
0x33 0x0033 #DIGIT THREE
0x34 0x0034 #DIGIT FOUR
0x35 0x0035 #DIGIT FIVE
0x36 0x0036 #DIGIT SIX
0x37 0x0037 #DIGIT SEVEN
0x38 0x0038 #DIGIT EIGHT
0x39 0x0039 #DIGIT NINE
0x3A 0x003A #COLON
0x3B 0x003B #SEMICOLON
0x3C 0x003C #LESS-THAN SIGN
0x3D 0x003D #EQUALS SIGN
0x3E 0x003E #GREATER-THAN SIGN
0x3F 0x003F #QUESTION MARK
0x40 0x0040 #COMMERCIAL AT
0x41 0x0041 #LATIN CAPITAL LETTER A
0x42 0x0042 #LATIN CAPITAL LETTER B
0x43 0x0043 #LATIN CAPITAL LETTER C
0x44 0x0044 #LATIN CAPITAL LETTER D
0x45 0x0045 #LATIN CAPITAL LETTER E
0x46 0x0046 #LATIN CAPITAL LETTER F
0x47 0x0047 #LATIN CAPITAL LETTER G
0x48 0x0048 #LATIN CAPITAL LETTER H
0x49 0x0049 #LATIN CAPITAL LETTER I
0x4A 0x004A #LATIN CAPITAL LETTER J
0x4B 0x004B #LATIN CAPITAL LETTER K
0x4C 0x004C #LATIN CAPITAL LETTER L
0x4D 0x004D #LATIN CAPITAL LETTER M
0x4E 0x004E #LATIN CAPITAL LETTER N
0x4F 0x004F #LATIN CAPITAL LETTER O
0x50 0x0050 #LATIN CAPITAL LETTER P
0x51 0x0051 #LATIN CAPITAL LETTER Q
0x52 0x0052 #LATIN CAPITAL LETTER R
0x53 0x0053 #LATIN CAPITAL LETTER S
0x54 0x0054 #LATIN CAPITAL LETTER T
0x55 0x0055 #LATIN CAPITAL LETTER U
0x56 0x0056 #LATIN CAPITAL LETTER V
0x57 0x0057 #LATIN CAPITAL LETTER W
0x58 0x0058 #LATIN CAPITAL LETTER X
0x59 0x0059 #LATIN CAPITAL LETTER Y
0x5A 0x005A #LATIN CAPITAL LETTER Z
0x5B 0x005B #LEFT SQUARE BRACKET
0x5C 0x005C #REVERSE SOLIDUS
0x5D 0x005D #RIGHT SQUARE BRACKET
0x5E 0x005E #CIRCUMFLEX ACCENT
0x5F 0x005F #LOW LINE
0x60 0x0060 #GRAVE ACCENT
0x61 0x0061 #LATIN SMALL LETTER A
0x62 0x0062 #LATIN SMALL LETTER B
0x63 0x0063 #LATIN SMALL LETTER C
0x64 0x0064 #LATIN SMALL LETTER D
0x65 0x0065 #LATIN SMALL LETTER E
0x66 0x0066 #LATIN SMALL LETTER F
0x67 0x0067 #LATIN SMALL LETTER G
0x68 0x0068 #LATIN SMALL LETTER H
0x69 0x0069 #LATIN SMALL LETTER I
0x6A 0x006A #LATIN SMALL LETTER J
0x6B 0x006B #LATIN SMALL LETTER K
0x6C 0x006C #LATIN SMALL LETTER L
0x6D 0x006D #LATIN SMALL LETTER M
0x6E 0x006E #LATIN SMALL LETTER N
0x6F 0x006F #LATIN SMALL LETTER O
0x70 0x0070 #LATIN SMALL LETTER P
0x71 0x0071 #LATIN SMALL LETTER Q
0x72 0x0072 #LATIN SMALL LETTER R
0x73 0x0073 #LATIN SMALL LETTER S
0x74 0x0074 #LATIN SMALL LETTER T
0x75 0x0075 #LATIN SMALL LETTER U
0x76 0x0076 #LATIN SMALL LETTER V
0x77 0x0077 #LATIN SMALL LETTER W
0x78 0x0078 #LATIN SMALL LETTER X
0x79 0x0079 #LATIN SMALL LETTER Y
0x7A 0x007A #LATIN SMALL LETTER Z
0x7B 0x007B #LEFT CURLY BRACKET
0x7C 0x007C #VERTICAL LINE
0x7D 0x007D #RIGHT CURLY BRACKET
0x7E 0x007E #TILDE
0x7F 0x2302 #HOUSE
0x80 0x010C #LATIN CAPITAL LETTER C WITH CARON
0x81 0x00FC #LATIN SMALL LETTER U WITH DIAERESIS
0x82 0x00E9 #LATIN SMALL LETTER E WITH ACUTE
0x83 0x010F #LATIN SMALL LETTER D WITH CARON
0x84 0x00E4 #LATIN SMALL LETTER A WITH DIAERESIS
0x85 0x010E #LATIN CAPITAL LETTER D WITH CARON
0x86 0x0164 #LATIN CAPITAL LETTER T WITH CARON
0x87 0x010D #LATIN SMALL LETTER C WITH CARON
0x88 0x011B #LATIN SMALL LETTER E WITH CARON
0x89 0x011A #LATIN CAPITAL LETTER E WITH CARON
0x8A 0x0139 #LATIN CAPITAL LETTER L WITH ACUTE
0x8B 0x00CD #LATIN CAPITAL LETTER I WITH ACUTE
0x8C 0x013E #LATIN SMALL LETTER L WITH CARON
0x8D 0x013A #LATIN SMALL LETTER L WITH ACUTE
0x8E 0x00C4 #LATIN CAPITAL LETTER A WITH DIAERESIS
0x8F 0x00C1 #LATIN CAPITAL LETTER A WITH ACUTE
0x90 0x00C9 #LATIN CAPITAL LETTER E WITH ACUTE
0x91 0x017E #LATIN SMALL LETTER Z WITH CARON
0x92 0x017D #LATIN CAPITAL LETTER Z WITH CARON
0x93 0x00F4 #LATIN SMALL LETTER O WITH CIRCUMFLEX
0x94 0x00F6 #LATIN SMALL LETTER O WITH DIAERESIS
0x95 0x00D3 #LATIN CAPITAL LETTER O WITH ACUTE
0x96 0x016F #LATIN SMALL LETTER U WITH RING ABOVE
0x97 0x00DA #LATIN CAPITAL LETTER U WITH ACUTE
0x98 0x00FD #LATIN SMALL LETTER Y WITH ACUTE
0x99 0x00D6 #LATIN CAPITAL LETTER O WITH DIAERESIS
0x9A 0x00DC #LATIN CAPITAL LETTER U WITH DIAERESIS
0x9B 0x0160 #LATIN CAPITAL LETTER S WITH CARON
0x9C 0x013D #LATIN CAPITAL LETTER L WITH CARON
0x9D 0x00DD #LATIN CAPITAL LETTER Y WITH ACUTE
0x9E 0x0158 #LATIN CAPITAL LETTER R WITH CARON
0x9F 0x0165 #LATIN SMALL LETTER T WITH CARON
0xA0 0x00E1 #LATIN SMALL LETTER A WITH ACUTE
0xA1 0x00ED #LATIN SMALL LETTER I WITH ACUTE
0xA2 0x00F3 #LATIN SMALL LETTER O WITH ACUTE
0xA3 0x00FA #LATIN SMALL LETTER U WITH ACUTE
0xA4 0x0148 #LATIN SMALL LETTER N WITH CARON
0xA5 0x0147 #LATIN CAPITAL LETTER N WITH CARON
0xA6 0x016E #LATIN CAPITAL LETTER U WITH RING ABOVE
0xA7 0x00D4 #LATIN CAPITAL LETTER O WITH CIRCUMFLEX
0xA8 0x0161 #LATIN SMALL LETTER S WITH CARON
0xA9 0x0159 #LATIN SMALL LETTER R WITH CARON
0xAA 0x0155 #LATIN SMALL LETTER R WITH ACUTE
0xAB 0x0154 #LATIN CAPITAL LETTER R WITH ACUTE
0xAC 0x00BC #VULGAR FRACTION ONE QUARTER
0xAD 0x00A7 #SECTION SIGN
0xAE 0x00BB #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
0xAF 0x00AB #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
0xB0 0x2591 #LIGHT SHADE
0xB1 0x2592 #MEDIUM SHADE
0xB2 0x2593 #DARK SHADE
0xB3 0x2502 #BOX DRAWINGS LIGHT VERTICAL
0xB4 0x2524 #BOX DRAWINGS LIGHT VERTICAL AND LEFT
0xB5 0x2561 #BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
0xB6 0x2562 #BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
0xB7 0x2556 #BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
0xB8 0x2555 #BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
0xB9 0x2563 #BOX DRAWINGS DOUBLE VERTICAL AND LEFT
0xBA 0x2551 #BOX DRAWINGS DOUBLE VERTICAL
0xBB 0x2557 #BOX DRAWINGS DOUBLE DOWN AND LEFT
0xBC 0x255D #BOX DRAWINGS DOUBLE UP AND LEFT
0xBD 0x255C #BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
0xBE 0x255B #BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
0xBF 0x2510 #BOX DRAWINGS LIGHT DOWN AND LEFT
0xC0 0x2514 #BOX DRAWINGS LIGHT UP AND RIGHT
0xC1 0x2534 #BOX DRAWINGS LIGHT UP AND HORIZONTAL
0xC2 0x252C #BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
0xC3 0x251C #BOX DRAWINGS LIGHT VERTICAL AND RIGHT
0xC4 0x2500 #BOX DRAWINGS LIGHT HORIZONTAL
0xC5 0x253C #BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
0xC6 0x255E #BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
0xC7 0x255F #BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
0xC8 0x255A #BOX DRAWINGS DOUBLE UP AND RIGHT
0xC9 0x2554 #BOX DRAWINGS DOUBLE DOWN AND RIGHT
0xCA 0x2569 #BOX DRAWINGS DOUBLE UP AND HORIZONTAL
0xCB 0x2566 #BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
0xCC 0x2560 #BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
0xCD 0x2550 #BOX DRAWINGS DOUBLE HORIZONTAL
0xCE 0x256C #BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
0xCF 0x2567 #BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
0xD0 0x2568 #BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
0xD1 0x2564 #BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
0xD2 0x2565 #BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
0xD3 0x2559 #BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
0xD4 0x2558 #BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
0xD5 0x2552 #BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
0xD6 0x2553 #BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
0xD7 0x256B #BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
0xD8 0x256A #BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
0xD9 0x2518 #BOX DRAWINGS LIGHT UP AND LEFT
0xDA 0x250C #BOX DRAWINGS LIGHT DOWN AND RIGHT
0xDB 0x2588 #FULL BLOCK
0xDC 0x2584 #LOWER HALF BLOCK
0xDD 0x258C #LEFT HALF BLOCK
0xDE 0x2590 #RIGHT HALF BLOCK
0xDF 0x2580 #UPPER HALF BLOCK
0xE0 0x03B1 #GREEK SMALL LETTER ALPHA
0xE1 0x03B2 #GREEK SMALL LETTER BETA
0xE2 0x0194 #LATIN CAPITAL LETTER GAMMA
0xE3 0x03C0 #GREEK SMALL LETTER PI
0xE4 0x03A3 #GREEK CAPITAL LETTER SIGMA
0xE5 0x03C3 #GREEK SMALL LETTER SIGMA
0xE6 0x03BC #GREEK SMALL LETTER MU
0xE7 0x03C4 #GREEK SMALL LETTER TAU
0xE8 0x03A6 #GREEK CAPITAL LETTER PHI
0xE9 0x0398 #GREEK CAPITAL LETTER THETA
0xEA 0x03A9 #GREEK CAPITAL LETTER OMEGA
0xEB 0x03B4 #GREEK SMALL LETTER DELTA
0xEC 0x221E #INFINITY
0xED 0x03C6 #GREEK SMALL LETTER PHI
0xEE 0x2208 #ELEMENT OF
0xEF 0x2229 #INTERSECTION
0xF0 0x224D #EQUIVALENT TO
0xF1 0x00B1 #PLUS-MINUS SIGN
0xF2 0x2265 #GREATER-THAN OR EQUAL TO
0xF3 0x2264 #LESS-THAN OR EQUAL TO
0xF4 0x2320 #TOP HALF INTEGRAL
0xF5 0x2321 #BOTTOM HALF INTEGRAL
0xF6 0x00F7 #DIVISION SIGN
0xF7 0x2248 #ALMOST EQUAL TO
0xF8 0x00B0 #DEGREE SIGN
0xF9 0x2219 #BULLET OPERATOR
0xFA 0x00B7 #MIDDLE DOT
0xFB 0x221A #SQUARE ROOT
0xFC 0x207F #SUPERSCRIPT LATIN SMALL LETTER N
0xFD 0x00B2 #SUPERSCRIPT TWO
0xFE 0x25A0 #BLACK SQUARE
0xFF 0x00A0 #NO-BREAK SPACE

226
Unicode/koi8_r.cp Normal file
View File

@ -0,0 +1,226 @@
KOI8-R
"koi8-r"
0x20 0x0020 # SPACE
0x21 0x0021 # EXCLAMATION MARK
0x22 0x0022 # QUOTATION MARK
0x23 0x0023 # NUMBER SIGN
0x24 0x0024 # DOLLAR SIGN
0x25 0x0025 # PERCENT SIGN
0x26 0x0026 # AMPERSAND
0x27 0x0027 # APOSTROPHE
0x28 0x0028 # LEFT PARENTHESIS
0x29 0x0029 # RIGHT PARENTHESIS
0x2A 0x002A # ASTERISK
0x2B 0x002B # PLUS SIGN
0x2C 0x002C # COMMA
0x2D 0x002D # HYPHEN-MINUS
0x2E 0x002E # FULL STOP
0x2F 0x002F # SOLIDUS
0x30 0x0030 # DIGIT ZERO
0x31 0x0031 # DIGIT ONE
0x32 0x0032 # DIGIT TWO
0x33 0x0033 # DIGIT THREE
0x34 0x0034 # DIGIT FOUR
0x35 0x0035 # DIGIT FIVE
0x36 0x0036 # DIGIT SIX
0x37 0x0037 # DIGIT SEVEN
0x38 0x0038 # DIGIT EIGHT
0x39 0x0039 # DIGIT NINE
0x3A 0x003A # COLON
0x3B 0x003B # SEMICOLON
0x3C 0x003C # LESS-THAN SIGN
0x3D 0x003D # EQUALS SIGN
0x3E 0x003E # GREATER-THAN SIGN
0x3F 0x003F # QUESTION MARK
0x40 0x0040 # COMMERCIAL AT
0x41 0x0041 # LATIN CAPITAL LETTER A
0x42 0x0042 # LATIN CAPITAL LETTER B
0x43 0x0043 # LATIN CAPITAL LETTER C
0x44 0x0044 # LATIN CAPITAL LETTER D
0x45 0x0045 # LATIN CAPITAL LETTER E
0x46 0x0046 # LATIN CAPITAL LETTER F
0x47 0x0047 # LATIN CAPITAL LETTER G
0x48 0x0048 # LATIN CAPITAL LETTER H
0x49 0x0049 # LATIN CAPITAL LETTER I
0x4A 0x004A # LATIN CAPITAL LETTER J
0x4B 0x004B # LATIN CAPITAL LETTER K
0x4C 0x004C # LATIN CAPITAL LETTER L
0x4D 0x004D # LATIN CAPITAL LETTER M
0x4E 0x004E # LATIN CAPITAL LETTER N
0x4F 0x004F # LATIN CAPITAL LETTER O
0x50 0x0050 # LATIN CAPITAL LETTER P
0x51 0x0051 # LATIN CAPITAL LETTER Q
0x52 0x0052 # LATIN CAPITAL LETTER R
0x53 0x0053 # LATIN CAPITAL LETTER S
0x54 0x0054 # LATIN CAPITAL LETTER T
0x55 0x0055 # LATIN CAPITAL LETTER U
0x56 0x0056 # LATIN CAPITAL LETTER V
0x57 0x0057 # LATIN CAPITAL LETTER W
0x58 0x0058 # LATIN CAPITAL LETTER X
0x59 0x0059 # LATIN CAPITAL LETTER Y
0x5A 0x005A # LATIN CAPITAL LETTER Z
0x5B 0x005B # LEFT SQUARE BRACKET
0x5C 0x005C # REVERSE SOLIDUS
0x5D 0x005D # RIGHT SQUARE BRACKET
0x5E 0x005E # CIRCUMFLEX ACCENT
0x5F 0x005F # LOW LINE
0x60 0x0060 # GRAVE ACCENT
0x61 0x0061 # LATIN SMALL LETTER A
0x62 0x0062 # LATIN SMALL LETTER B
0x63 0x0063 # LATIN SMALL LETTER C
0x64 0x0064 # LATIN SMALL LETTER D
0x65 0x0065 # LATIN SMALL LETTER E
0x66 0x0066 # LATIN SMALL LETTER F
0x67 0x0067 # LATIN SMALL LETTER G
0x68 0x0068 # LATIN SMALL LETTER H
0x69 0x0069 # LATIN SMALL LETTER I
0x6A 0x006A # LATIN SMALL LETTER J
0x6B 0x006B # LATIN SMALL LETTER K
0x6C 0x006C # LATIN SMALL LETTER L
0x6D 0x006D # LATIN SMALL LETTER M
0x6E 0x006E # LATIN SMALL LETTER N
0x6F 0x006F # LATIN SMALL LETTER O
0x70 0x0070 # LATIN SMALL LETTER P
0x71 0x0071 # LATIN SMALL LETTER Q
0x72 0x0072 # LATIN SMALL LETTER R
0x73 0x0073 # LATIN SMALL LETTER S
0x74 0x0074 # LATIN SMALL LETTER T
0x75 0x0075 # LATIN SMALL LETTER U
0x76 0x0076 # LATIN SMALL LETTER V
0x77 0x0077 # LATIN SMALL LETTER W
0x78 0x0078 # LATIN SMALL LETTER X
0x79 0x0079 # LATIN SMALL LETTER Y
0x7A 0x007A # LATIN SMALL LETTER Z
0x7B 0x007B # LEFT CURLY BRACKET
0x7C 0x007C # VERTICAL LINE
0x7D 0x007D # RIGHT CURLY BRACKET
0x7E 0x007E # TILDE
0x80 0x2500 # BOX DRAWINGS LIGHT HORIZONTAL
0x81 0x2502 # BOX DRAWINGS LIGHT VERTICAL
0x82 0x250C # BOX DRAWINGS LIGHT DOWN AND RIGHT
0x83 0x2510 # BOX DRAWINGS LIGHT DOWN AND LEFT
0x84 0x2514 # BOX DRAWINGS LIGHT UP AND RIGHT
0x85 0x2518 # BOX DRAWINGS LIGHT UP AND LEFT
0x86 0x251C # BOX DRAWINGS LIGHT VERTICAL AND RIGHT
0x87 0x2524 # BOX DRAWINGS LIGHT VERTICAL AND LEFT
0x88 0x252C # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
0x89 0x2534 # BOX DRAWINGS LIGHT UP AND HORIZONTAL
0x8A 0x253C # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
0x8B 0x2580 # UPPER HALF BLOCK
0x8C 0x2584 # LOWER HALF BLOCK
0x8D 0x2588 # FULL BLOCK
0x8E 0x258C # LEFT HALF BLOCK
0x8F 0x2590 # RIGHT HALF BLOCK
0x90 0x2591 # LIGHT SHADE
0x91 0x2592 # MEDIUM SHADE
0x92 0x2593 # DARK SHADE
0x93 0x2320 # TOP HALF INTEGRAL
0x94 0x25A0 # BLACK SQUARE
0x95 0x2022 # BULLET
0x96 0x221A # SQUARE ROOT
0x97 0x2248 # ALMOST EQUAL TO
0x98 0x2264 # LESS-THAN OR EQUAL TO
0x99 0x2265 # GREATER-THAN OR EQUAL TO
0x9A 0x00A0 # NO-BREAK SPACE
0x9B 0x2321 # BOTTOM HALF INTEGRAL
0x9C 0x00B0 # DEGREE SIGN
0x9D 0x00B2 # SUPERSCRIPT TWO
0x9E 0x00B7 # MIDDLE DOT
0x9F 0x00F7 # DIVISION SIGN
0xA0 0x2550 # BOX DRAWINGS DOUBLE HORIZONTAL
0xA1 0x2551 # BOX DRAWINGS DOUBLE VERTICAL
0xA2 0x2552 # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
0xA3 0x0451 # CYRILLIC SMALL LETTER IO
0xA4 0x2553 # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
0xA5 0x2554 # BOX DRAWINGS DOUBLE DOWN AND RIGHT
0xA6 0x2555 # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
0xA7 0x2556 # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
0xA8 0x2557 # BOX DRAWINGS DOUBLE DOWN AND LEFT
0xA9 0x2558 # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
0xAA 0x2559 # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
0xAB 0x255A # BOX DRAWINGS DOUBLE UP AND RIGHT
0xAC 0x255B # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
0xAD 0x255C # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
0xAE 0x255D # BOX DRAWINGS DOUBLE UP AND LEFT
0xAF 0x255E # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
0xB0 0x255F # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
0xB1 0x2560 # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
0xB2 0x2561 # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
0xB3 0x0401 # CYRILLIC CAPITAL LETTER IO
0xB4 0x2562 # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
0xB5 0x2563 # BOX DRAWINGS DOUBLE VERTICAL AND LEFT
0xB6 0x2564 # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
0xB7 0x2565 # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
0xB8 0x2566 # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
0xB9 0x2567 # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
0xBA 0x2568 # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
0xBB 0x2569 # BOX DRAWINGS DOUBLE UP AND HORIZONTAL
0xBC 0x256A # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
0xBD 0x256B # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
0xBE 0x256C # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
0xBF 0x00A9 # COPYRIGHT SIGN
0xC0 0x044E # CYRILLIC SMALL LETTER YU
0xC1 0x0430 # CYRILLIC SMALL LETTER A
0xC2 0x0431 # CYRILLIC SMALL LETTER BE
0xC3 0x0446 # CYRILLIC SMALL LETTER TSE
0xC4 0x0434 # CYRILLIC SMALL LETTER DE
0xC5 0x0435 # CYRILLIC SMALL LETTER IE
0xC6 0x0444 # CYRILLIC SMALL LETTER EF
0xC7 0x0433 # CYRILLIC SMALL LETTER GHE
0xC8 0x0445 # CYRILLIC SMALL LETTER HA
0xC9 0x0438 # CYRILLIC SMALL LETTER I
0xCA 0x0439 # CYRILLIC SMALL LETTER SHORT I
0xCB 0x043A # CYRILLIC SMALL LETTER KA
0xCC 0x043B # CYRILLIC SMALL LETTER EL
0xCD 0x043C # CYRILLIC SMALL LETTER EM
0xCE 0x043D # CYRILLIC SMALL LETTER EN
0xCF 0x043E # CYRILLIC SMALL LETTER O
0xD0 0x043F # CYRILLIC SMALL LETTER PE
0xD1 0x044F # CYRILLIC SMALL LETTER YA
0xD2 0x0440 # CYRILLIC SMALL LETTER ER
0xD3 0x0441 # CYRILLIC SMALL LETTER ES
0xD4 0x0442 # CYRILLIC SMALL LETTER TE
0xD5 0x0443 # CYRILLIC SMALL LETTER U
0xD6 0x0436 # CYRILLIC SMALL LETTER ZHE
0xD7 0x0432 # CYRILLIC SMALL LETTER VE
0xD8 0x044C # CYRILLIC SMALL LETTER SOFT SIGN
0xD9 0x044B # CYRILLIC SMALL LETTER YERU
0xDA 0x0437 # CYRILLIC SMALL LETTER ZE
0xDB 0x0448 # CYRILLIC SMALL LETTER SHA
0xDC 0x044D # CYRILLIC SMALL LETTER E
0xDD 0x0449 # CYRILLIC SMALL LETTER SHCHA
0xDE 0x0447 # CYRILLIC SMALL LETTER CHE
0xDF 0x044A # CYRILLIC SMALL LETTER HARD SIGN
0xE0 0x042E # CYRILLIC CAPITAL LETTER YU
0xE1 0x0410 # CYRILLIC CAPITAL LETTER A
0xE2 0x0411 # CYRILLIC CAPITAL LETTER BE
0xE3 0x0426 # CYRILLIC CAPITAL LETTER TSE
0xE4 0x0414 # CYRILLIC CAPITAL LETTER DE
0xE5 0x0415 # CYRILLIC CAPITAL LETTER IE
0xE6 0x0424 # CYRILLIC CAPITAL LETTER EF
0xE7 0x0413 # CYRILLIC CAPITAL LETTER GHE
0xE8 0x0425 # CYRILLIC CAPITAL LETTER HA
0xE9 0x0418 # CYRILLIC CAPITAL LETTER I
0xEA 0x0419 # CYRILLIC CAPITAL LETTER SHORT I
0xEB 0x041A # CYRILLIC CAPITAL LETTER KA
0xEC 0x041B # CYRILLIC CAPITAL LETTER EL
0xED 0x041C # CYRILLIC CAPITAL LETTER EM
0xEE 0x041D # CYRILLIC CAPITAL LETTER EN
0xEF 0x041E # CYRILLIC CAPITAL LETTER O
0xF0 0x041F # CYRILLIC CAPITAL LETTER PE
0xF1 0x042F # CYRILLIC CAPITAL LETTER YA
0xF2 0x0420 # CYRILLIC CAPITAL LETTER ER
0xF3 0x0421 # CYRILLIC CAPITAL LETTER ES
0xF4 0x0422 # CYRILLIC CAPITAL LETTER TE
0xF5 0x0423 # CYRILLIC CAPITAL LETTER U
0xF6 0x0416 # CYRILLIC CAPITAL LETTER ZHE
0xF7 0x0412 # CYRILLIC CAPITAL LETTER VE
0xF8 0x042C # CYRILLIC CAPITAL LETTER SOFT SIGN
0xF9 0x042B # CYRILLIC CAPITAL LETTER YERU
0xFA 0x0417 # CYRILLIC CAPITAL LETTER ZE
0xFB 0x0428 # CYRILLIC CAPITAL LETTER SHA
0xFC 0x042D # CYRILLIC CAPITAL LETTER E
0xFD 0x0429 # CYRILLIC CAPITAL LETTER SHCHA
0xFE 0x0427 # CYRILLIC CAPITAL LETTER CHE
0xFF 0x042A # CYRILLIC CAPITAL LETTER HARD SIGN

137
Unicode/koi8_ru.cp Normal file
View File

@ -0,0 +1,137 @@
KOI8-RU
"koi8-ru"
#
# UNIX Belarusian and Ukrainian (koi8-u) to UNICODE translation table
#
# Based on koi8u_uni.tbl from lynx 2.8.2 distribution
# by porokh
# Belarusian language support by Yevgeny Gromov <yevgeny@tut.by>
#
0x80 0x2500 # BOX DRAWINGS LIGHT HORIZONTAL
0x81 0x2502 # BOX DRAWINGS LIGHT VERTICAL
0x82 0x250C # BOX DRAWINGS LIGHT DOWN AND RIGHT
0x83 0x2510 # BOX DRAWINGS LIGHT DOWN AND LEFT
0x84 0x2514 # BOX DRAWINGS LIGHT UP AND RIGHT
0x85 0x2518 # BOX DRAWINGS LIGHT UP AND LEFT
0x86 0x251C # BOX DRAWINGS LIGHT VERTICAL AND RIGHT
0x87 0x2524 # BOX DRAWINGS LIGHT VERTICAL AND LEFT
0x88 0x252C # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
0x89 0x2534 # BOX DRAWINGS LIGHT UP AND HORIZONTAL
0x8A 0x253C # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
0x8B 0x2580 # UPPER HALF BLOCK
0x8C 0x2584 # LOWER HALF BLOCK
0x8D 0x2588 # FULL BLOCK
0x8E 0x258C # LEFT HALF BLOCK
0x8F 0x2590 # RIGHT HALF BLOCK
0x90 0x2591 # LIGHT SHADE
0x91 0x2592 # MEDIUM SHADE
0x92 0x2593 # DARK SHADE
0x93 0x2320 # TOP HALF INTEGRAL
0x94 0x25A0 # BLACK SQUARE
0x95 0x2219 # BULLET OPERATOR
0x96 0x221A # SQUARE ROOT
0x97 0x2248 # ALMOST EQUAL TO
0x98 0x2264 # LESS THAN OR EQUAL TO
0x99 0x2265 # GREATER THAN OR EQUAL TO
0x9A 0x00A0 # NO-BREAK SPACE
0x9B 0x2321 # BOTTOM HALF INTEGRAL
0x9C 0x00B0 # DEGREE SIGN
0x9D 0x00B2 # SUPERSCRIPT TWO
0x9E 0x00B7 # MIDDLE DOT
0x9F 0x00F7 # DIVISION SIGN
0xA0 0x2550 # BOX DRAWINGS DOUBLE HORIZONTAL
0xA1 0x2551 # BOX DRAWINGS DOUBLE VERTICAL
0xA2 0x2552 # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
0xA3 0x0451 # CYRILLIC SMALL LETTER IO
0xA4 0x0454 # CYRILLIC SMALL LETTER UKRAINIAN IE
0xA5 0x2554 # BOX DRAWINGS DOUBLE DOWN AND RIGHT
0xA6 0x0456 # CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
0xA7 0x0457 # CYRILLIC SMALL LETTER YI (UKRAINIAN)
0xA8 0x2557 # BOX DRAWINGS DOUBLE DOWN AND LEFT
0xA9 0x2558 # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
0xAA 0x2559 # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
0xAB 0x255A # BOX DRAWINGS DOUBLE UP AND RIGHT
0xAC 0x255B # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
0xAD 0x0491 # CYRILLIC SMALL LETTER GHE WITH UPTURN
0xAE 0x045E # CYRILLIC SMALL LETTER SHORT U
0xAF 0x255E # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
0xB0 0x255F # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
0xB1 0x2560 # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
0xB2 0x2561 # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
0xB3 0x0401 # CYRILLIC CAPITAL LETTER IO
0xB4 0x0404 # CYRILLIC CAPITAL LETTER UKRAINIAN IE
0xB5 0x2563 # BOX DRAWINGS DOUBLE VERTICAL AND LEFT
0xB6 0x0406 # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
0xB7 0x0407 # CYRILLIC CAPITAL LETTER YI (UKRAINIAN)
0xB8 0x2566 # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
0xB9 0x2567 # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
0xBA 0x2568 # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
0xBB 0x2569 # BOX DRAWINGS DOUBLE UP AND HORIZONTAL
0xBC 0x256A # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
0xBD 0x0490 # CYRILLIC CAPITAL LETTER GHE WITH UPTURN
0xBE 0x040E # CYRILLIC CAPITAL LETTER SHORT U
0xBF 0x00A9 # COPYRIGHT SIGN
0xC0 0x044E # CYRILLIC SMALL LETTER YU
0xC1 0x0430 # CYRILLIC SMALL LETTER A
0xC2 0x0431 # CYRILLIC SMALL LETTER BE
0xC3 0x0446 # CYRILLIC SMALL LETTER TSE
0xC4 0x0434 # CYRILLIC SMALL LETTER DE
0xC5 0x0435 # CYRILLIC SMALL LETTER IE
0xC6 0x0444 # CYRILLIC SMALL LETTER EF
0xC7 0x0433 # CYRILLIC SMALL LETTER GHE
0xC8 0x0445 # CYRILLIC SMALL LETTER KHA
0xC9 0x0438 # CYRILLIC SMALL LETTER I
0xCA 0x0439 # CYRILLIC SMALL LETTER SHORT I
0xCB 0x043A # CYRILLIC SMALL LETTER KA
0xCC 0x043B # CYRILLIC SMALL LETTER EL
0xCD 0x043C # CYRILLIC SMALL LETTER EM
0xCE 0x043D # CYRILLIC SMALL LETTER EN
0xCF 0x043E # CYRILLIC SMALL LETTER O
0xD0 0x043F # CYRILLIC SMALL LETTER PE
0xD1 0x044F # CYRILLIC SMALL LETTER YA
0xD2 0x0440 # CYRILLIC SMALL LETTER ER
0xD3 0x0441 # CYRILLIC SMALL LETTER ES
0xD4 0x0442 # CYRILLIC SMALL LETTER TE
0xD5 0x0443 # CYRILLIC SMALL LETTER U
0xD6 0x0436 # CYRILLIC SMALL LETTER ZHE
0xD7 0x0432 # CYRILLIC SMALL LETTER VE
0xD8 0x044C # CYRILLIC SMALL LETTER SOFT SIGN
0xD9 0x044B # CYRILLIC SMALL LETTER YERU
0xDA 0x0437 # CYRILLIC SMALL LETTER ZE
0xDB 0x0448 # CYRILLIC SMALL LETTER SHA
0xDC 0x044D # CYRILLIC SMALL LETTER E
0xDD 0x0449 # CYRILLIC SMALL LETTER SHCHA
0xDE 0x0447 # CYRILLIC SMALL LETTER CHE
0xDF 0x044A # CYRILLIC SMALL LETTER HARD SIGN
0xE0 0x042E # CYRILLIC CAPITAL LETTER YU
0xE1 0x0410 # CYRILLIC CAPITAL LETTER A
0xE2 0x0411 # CYRILLIC CAPITAL LETTER BE
0xE3 0x0426 # CYRILLIC CAPITAL LETTER TSE
0xE4 0x0414 # CYRILLIC CAPITAL LETTER DE
0xE5 0x0415 # CYRILLIC CAPITAL LETTER IE
0xE6 0x0424 # CYRILLIC CAPITAL LETTER EF
0xE7 0x0413 # CYRILLIC CAPITAL LETTER GHE
0xE8 0x0425 # CYRILLIC CAPITAL LETTER KHA
0xE9 0x0418 # CYRILLIC CAPITAL LETTER I
0xEA 0x0419 # CYRILLIC CAPITAL LETTER SHORT I
0xEB 0x041A # CYRILLIC CAPITAL LETTER KA
0xEC 0x041B # CYRILLIC CAPITAL LETTER EL
0xED 0x041C # CYRILLIC CAPITAL LETTER EM
0xEE 0x041D # CYRILLIC CAPITAL LETTER EN
0xEF 0x041E # CYRILLIC CAPITAL LETTER O
0xF0 0x041F # CYRILLIC CAPITAL LETTER PE
0xF1 0x042F # CYRILLIC CAPITAL LETTER YA
0xF2 0x0420 # CYRILLIC CAPITAL LETTER ER
0xF3 0x0421 # CYRILLIC CAPITAL LETTER ES
0xF4 0x0422 # CYRILLIC CAPITAL LETTER TE
0xF5 0x0423 # CYRILLIC CAPITAL LETTER U
0xF6 0x0416 # CYRILLIC CAPITAL LETTER ZHE
0xF7 0x0412 # CYRILLIC CAPITAL LETTER VE
0xF8 0x042C # CYRILLIC CAPITAL LETTER SOFT SIGN
0xF9 0x042B # CYRILLIC CAPITAL LETTER YERU
0xFA 0x0417 # CYRILLIC CAPITAL LETTER ZE
0xFB 0x0428 # CYRILLIC CAPITAL LETTER SHA
0xFC 0x042D # CYRILLIC CAPITAL LETTER E
0xFD 0x0429 # CYRILLIC CAPITAL LETTER SHCHA
0xFE 0x0427 # CYRILLIC CAPITAL LETTER CHE
0xFF 0x042A # CYRILLIC CAPITAL LETTER HARD SIGN

136
Unicode/koi8_u.cp Normal file
View File

@ -0,0 +1,136 @@
KOI8-U
"koi8-u"
#
# UNIX Ukrainian (koi8-u) to UNICODE translation table
#
# Based on koi8u_uni.tbl from lynx 2.8.2 distribution
# by porokh
#
0x80 0x2500 # BOX DRAWINGS LIGHT HORIZONTAL
0x81 0x2502 # BOX DRAWINGS LIGHT VERTICAL
0x82 0x250C # BOX DRAWINGS LIGHT DOWN AND RIGHT
0x83 0x2510 # BOX DRAWINGS LIGHT DOWN AND LEFT
0x84 0x2514 # BOX DRAWINGS LIGHT UP AND RIGHT
0x85 0x2518 # BOX DRAWINGS LIGHT UP AND LEFT
0x86 0x251C # BOX DRAWINGS LIGHT VERTICAL AND RIGHT
0x87 0x2524 # BOX DRAWINGS LIGHT VERTICAL AND LEFT
0x88 0x252C # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
0x89 0x2534 # BOX DRAWINGS LIGHT UP AND HORIZONTAL
0x8A 0x253C # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
0x8B 0x2580 # UPPER HALF BLOCK
0x8C 0x2584 # LOWER HALF BLOCK
0x8D 0x2588 # FULL BLOCK
0x8E 0x258C # LEFT HALF BLOCK
0x8F 0x2590 # RIGHT HALF BLOCK
0x90 0x2591 # LIGHT SHADE
0x91 0x2592 # MEDIUM SHADE
0x92 0x2593 # DARK SHADE
0x93 0x2320 # TOP HALF INTEGRAL
0x94 0x25A0 # BLACK SQUARE
0x95 0x2219 # BULLET OPERATOR
0x96 0x221A # SQUARE ROOT
0x97 0x2248 # ALMOST EQUAL TO
0x98 0x2264 # LESS THAN OR EQUAL TO
0x99 0x2265 # GREATER THAN OR EQUAL TO
0x9A 0x00A0 # NO-BREAK SPACE
0x9B 0x2321 # BOTTOM HALF INTEGRAL
0x9C 0x00B0 # DEGREE SIGN
0x9D 0x00B2 # SUPERSCRIPT TWO
0x9E 0x00B7 # MIDDLE DOT
0x9F 0x00F7 # DIVISION SIGN
0xA0 0x2550 # BOX DRAWINGS DOUBLE HORIZONTAL
0xA1 0x2551 # BOX DRAWINGS DOUBLE VERTICAL
0xA2 0x2552 # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
0xA3 0x0451 # CYRILLIC SMALL LETTER IO
0xA4 0x0454 # CYRILLIC SMALL LETTER UKRAINIAN IE
0xA5 0x2554 # BOX DRAWINGS DOUBLE DOWN AND RIGHT
0xA6 0x0456 # CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
0xA7 0x0457 # CYRILLIC SMALL LETTER YI (UKRAINIAN)
0xA8 0x2557 # BOX DRAWINGS DOUBLE DOWN AND LEFT
0xA9 0x2558 # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
0xAA 0x2559 # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
0xAB 0x255A # BOX DRAWINGS DOUBLE UP AND RIGHT
0xAC 0x255B # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
0xAD 0x0491 # CYRILLIC SMALL LETTER GHE WITH UPTURN
0xAE 0x255D # BOX DRAWINGS DOUBLE UP AND LEFT
0xAF 0x255E # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
0xB0 0x255F # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
0xB1 0x2560 # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
0xB2 0x2561 # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
0xB3 0x0401 # CYRILLIC CAPITAL LETTER IO
0xB4 0x0404 # CYRILLIC CAPITAL LETTER UKRAINIAN IE
0xB5 0x2563 # BOX DRAWINGS DOUBLE VERTICAL AND LEFT
0xB6 0x0406 # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
0xB7 0x0407 # CYRILLIC CAPITAL LETTER YI (UKRAINIAN)
0xB8 0x2566 # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
0xB9 0x2567 # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
0xBA 0x2568 # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
0xBB 0x2569 # BOX DRAWINGS DOUBLE UP AND HORIZONTAL
0xBC 0x256A # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
0xBD 0x0490 # CYRILLIC CAPITAL LETTER GHE WITH UPTURN
0xBE 0x256C # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
0xBF 0x00A9 # COPYRIGHT SIGN
0xC0 0x044E # CYRILLIC SMALL LETTER YU
0xC1 0x0430 # CYRILLIC SMALL LETTER A
0xC2 0x0431 # CYRILLIC SMALL LETTER BE
0xC3 0x0446 # CYRILLIC SMALL LETTER TSE
0xC4 0x0434 # CYRILLIC SMALL LETTER DE
0xC5 0x0435 # CYRILLIC SMALL LETTER IE
0xC6 0x0444 # CYRILLIC SMALL LETTER EF
0xC7 0x0433 # CYRILLIC SMALL LETTER GHE
0xC8 0x0445 # CYRILLIC SMALL LETTER KHA
0xC9 0x0438 # CYRILLIC SMALL LETTER I
0xCA 0x0439 # CYRILLIC SMALL LETTER SHORT I
0xCB 0x043A # CYRILLIC SMALL LETTER KA
0xCC 0x043B # CYRILLIC SMALL LETTER EL
0xCD 0x043C # CYRILLIC SMALL LETTER EM
0xCE 0x043D # CYRILLIC SMALL LETTER EN
0xCF 0x043E # CYRILLIC SMALL LETTER O
0xD0 0x043F # CYRILLIC SMALL LETTER PE
0xD1 0x044F # CYRILLIC SMALL LETTER YA
0xD2 0x0440 # CYRILLIC SMALL LETTER ER
0xD3 0x0441 # CYRILLIC SMALL LETTER ES
0xD4 0x0442 # CYRILLIC SMALL LETTER TE
0xD5 0x0443 # CYRILLIC SMALL LETTER U
0xD6 0x0436 # CYRILLIC SMALL LETTER ZHE
0xD7 0x0432 # CYRILLIC SMALL LETTER VE
0xD8 0x044C # CYRILLIC SMALL LETTER SOFT SIGN
0xD9 0x044B # CYRILLIC SMALL LETTER YERU
0xDA 0x0437 # CYRILLIC SMALL LETTER ZE
0xDB 0x0448 # CYRILLIC SMALL LETTER SHA
0xDC 0x044D # CYRILLIC SMALL LETTER E
0xDD 0x0449 # CYRILLIC SMALL LETTER SHCHA
0xDE 0x0447 # CYRILLIC SMALL LETTER CHE
0xDF 0x044A # CYRILLIC SMALL LETTER HARD SIGN
0xE0 0x042E # CYRILLIC CAPITAL LETTER YU
0xE1 0x0410 # CYRILLIC CAPITAL LETTER A
0xE2 0x0411 # CYRILLIC CAPITAL LETTER BE
0xE3 0x0426 # CYRILLIC CAPITAL LETTER TSE
0xE4 0x0414 # CYRILLIC CAPITAL LETTER DE
0xE5 0x0415 # CYRILLIC CAPITAL LETTER IE
0xE6 0x0424 # CYRILLIC CAPITAL LETTER EF
0xE7 0x0413 # CYRILLIC CAPITAL LETTER GHE
0xE8 0x0425 # CYRILLIC CAPITAL LETTER KHA
0xE9 0x0418 # CYRILLIC CAPITAL LETTER I
0xEA 0x0419 # CYRILLIC CAPITAL LETTER SHORT I
0xEB 0x041A # CYRILLIC CAPITAL LETTER KA
0xEC 0x041B # CYRILLIC CAPITAL LETTER EL
0xED 0x041C # CYRILLIC CAPITAL LETTER EM
0xEE 0x041D # CYRILLIC CAPITAL LETTER EN
0xEF 0x041E # CYRILLIC CAPITAL LETTER O
0xF0 0x041F # CYRILLIC CAPITAL LETTER PE
0xF1 0x042F # CYRILLIC CAPITAL LETTER YA
0xF2 0x0420 # CYRILLIC CAPITAL LETTER ER
0xF3 0x0421 # CYRILLIC CAPITAL LETTER ES
0xF4 0x0422 # CYRILLIC CAPITAL LETTER TE
0xF5 0x0423 # CYRILLIC CAPITAL LETTER U
0xF6 0x0416 # CYRILLIC CAPITAL LETTER ZHE
0xF7 0x0412 # CYRILLIC CAPITAL LETTER VE
0xF8 0x042C # CYRILLIC CAPITAL LETTER SOFT SIGN
0xF9 0x042B # CYRILLIC CAPITAL LETTER YERU
0xFA 0x0417 # CYRILLIC CAPITAL LETTER ZE
0xFB 0x0428 # CYRILLIC CAPITAL LETTER SHA
0xFC 0x042D # CYRILLIC CAPITAL LETTER E
0xFD 0x0429 # CYRILLIC CAPITAL LETTER SHCHA
0xFE 0x0427 # CYRILLIC CAPITAL LETTER CHE
0xFF 0x042A # CYRILLIC CAPITAL LETTER HARD SIGN

1111
Unicode/locase.uni Normal file

File diff suppressed because it is too large Load Diff

276
Unicode/mac_lat2.cp Normal file
View File

@ -0,0 +1,276 @@
Mac latin 2
"x-mac-ce", "mac-ce", "maclatin2", "10029"
#
# Name: cp10029_MacLatin2 to Unicode table
# Unicode version: 2.0
# Table version: 2.00
# Table format: Format A
# Date: 04/24/96
# Authors: Lori Brownell <loribr@microsoft.com>
# K.D. Chang <a-kchang@microsoft.com>
# General notes: none
#
# Format: Three tab-separated columns
# Column #1 is the cp10029_MacLatin2 code (in hex)
# Column #2 is the Unicode (in hex as 0xXXXX)
# Column #3 is the Unicode name (follows a comment sign, '#')
#
# The entries are in cp10029_MacLatin2 order
#
0x00 0x0000 #NULL
0x01 0x0001 #START OF HEADING
0x02 0x0002 #START OF TEXT
0x03 0x0003 #END OF TEXT
0x04 0x0004 #END OF TRANSMISSION
0x05 0x0005 #ENQUIRY
0x06 0x0006 #ACKNOWLEDGE
0x07 0x0007 #BELL
0x08 0x0008 #BACKSPACE
0x09 0x0009 #HORIZONTAL TABULATION
0x0A 0x000A #LINE FEED
0x0B 0x000B #VERTICAL TABULATION
0x0C 0x000C #FORM FEED
0x0D 0x000D #CARRIAGE RETURN
0x0E 0x000E #SHIFT OUT
0x0F 0x000F #SHIFT IN
0x10 0x0010 #DATA LINK ESCAPE
0x11 0x0011 #DEVICE CONTROL ONE
0x12 0x0012 #DEVICE CONTROL TWO
0x13 0x0013 #DEVICE CONTROL THREE
0x14 0x0014 #DEVICE CONTROL FOUR
0x15 0x0015 #NEGATIVE ACKNOWLEDGE
0x16 0x0016 #SYNCHRONOUS IDLE
0x17 0x0017 #END OF TRANSMISSION BLOCK
0x18 0x0018 #CANCEL
0x19 0x0019 #END OF MEDIUM
0x1A 0x001A #SUBSTITUTE
0x1B 0x001B #ESCAPE
0x1C 0x001C #FILE SEPARATOR
0x1D 0x001D #GROUP SEPARATOR
0x1E 0x001E #RECORD SEPARATOR
0x1F 0x001F #UNIT SEPARATOR
0x20 0x0020 #SPACE
0x21 0x0021 #EXCLAMATION MARK
0x22 0x0022 #QUOTATION MARK
0x23 0x0023 #NUMBER SIGN
0x24 0x0024 #DOLLAR SIGN
0x25 0x0025 #PERCENT SIGN
0x26 0x0026 #AMPERSAND
0x27 0x0027 #APOSTROPHE
0x28 0x0028 #LEFT PARENTHESIS
0x29 0x0029 #RIGHT PARENTHESIS
0x2A 0x002A #ASTERISK
0x2B 0x002B #PLUS SIGN
0x2C 0x002C #COMMA
0x2D 0x002D #HYPHEN-MINUS
0x2E 0x002E #FULL STOP
0x2F 0x002F #SOLIDUS
0x30 0x0030 #DIGIT ZERO
0x31 0x0031 #DIGIT ONE
0x32 0x0032 #DIGIT TWO
0x33 0x0033 #DIGIT THREE
0x34 0x0034 #DIGIT FOUR
0x35 0x0035 #DIGIT FIVE
0x36 0x0036 #DIGIT SIX
0x37 0x0037 #DIGIT SEVEN
0x38 0x0038 #DIGIT EIGHT
0x39 0x0039 #DIGIT NINE
0x3A 0x003A #COLON
0x3B 0x003B #SEMICOLON
0x3C 0x003C #LESS-THAN SIGN
0x3D 0x003D #EQUALS SIGN
0x3E 0x003E #GREATER-THAN SIGN
0x3F 0x003F #QUESTION MARK
0x40 0x0040 #COMMERCIAL AT
0x41 0x0041 #LATIN CAPITAL LETTER A
0x42 0x0042 #LATIN CAPITAL LETTER B
0x43 0x0043 #LATIN CAPITAL LETTER C
0x44 0x0044 #LATIN CAPITAL LETTER D
0x45 0x0045 #LATIN CAPITAL LETTER E
0x46 0x0046 #LATIN CAPITAL LETTER F
0x47 0x0047 #LATIN CAPITAL LETTER G
0x48 0x0048 #LATIN CAPITAL LETTER H
0x49 0x0049 #LATIN CAPITAL LETTER I
0x4A 0x004A #LATIN CAPITAL LETTER J
0x4B 0x004B #LATIN CAPITAL LETTER K
0x4C 0x004C #LATIN CAPITAL LETTER L
0x4D 0x004D #LATIN CAPITAL LETTER M
0x4E 0x004E #LATIN CAPITAL LETTER N
0x4F 0x004F #LATIN CAPITAL LETTER O
0x50 0x0050 #LATIN CAPITAL LETTER P
0x51 0x0051 #LATIN CAPITAL LETTER Q
0x52 0x0052 #LATIN CAPITAL LETTER R
0x53 0x0053 #LATIN CAPITAL LETTER S
0x54 0x0054 #LATIN CAPITAL LETTER T
0x55 0x0055 #LATIN CAPITAL LETTER U
0x56 0x0056 #LATIN CAPITAL LETTER V
0x57 0x0057 #LATIN CAPITAL LETTER W
0x58 0x0058 #LATIN CAPITAL LETTER X
0x59 0x0059 #LATIN CAPITAL LETTER Y
0x5A 0x005A #LATIN CAPITAL LETTER Z
0x5B 0x005B #LEFT SQUARE BRACKET
0x5C 0x005C #REVERSE SOLIDUS
0x5D 0x005D #RIGHT SQUARE BRACKET
0x5E 0x005E #CIRCUMFLEX ACCENT
0x5F 0x005F #LOW LINE
0x60 0x0060 #GRAVE ACCENT
0x61 0x0061 #LATIN SMALL LETTER A
0x62 0x0062 #LATIN SMALL LETTER B
0x63 0x0063 #LATIN SMALL LETTER C
0x64 0x0064 #LATIN SMALL LETTER D
0x65 0x0065 #LATIN SMALL LETTER E
0x66 0x0066 #LATIN SMALL LETTER F
0x67 0x0067 #LATIN SMALL LETTER G
0x68 0x0068 #LATIN SMALL LETTER H
0x69 0x0069 #LATIN SMALL LETTER I
0x6A 0x006A #LATIN SMALL LETTER J
0x6B 0x006B #LATIN SMALL LETTER K
0x6C 0x006C #LATIN SMALL LETTER L
0x6D 0x006D #LATIN SMALL LETTER M
0x6E 0x006E #LATIN SMALL LETTER N
0x6F 0x006F #LATIN SMALL LETTER O
0x70 0x0070 #LATIN SMALL LETTER P
0x71 0x0071 #LATIN SMALL LETTER Q
0x72 0x0072 #LATIN SMALL LETTER R
0x73 0x0073 #LATIN SMALL LETTER S
0x74 0x0074 #LATIN SMALL LETTER T
0x75 0x0075 #LATIN SMALL LETTER U
0x76 0x0076 #LATIN SMALL LETTER V
0x77 0x0077 #LATIN SMALL LETTER W
0x78 0x0078 #LATIN SMALL LETTER X
0x79 0x0079 #LATIN SMALL LETTER Y
0x7A 0x007A #LATIN SMALL LETTER Z
0x7B 0x007B #LEFT CURLY BRACKET
0x7C 0x007C #VERTICAL LINE
0x7D 0x007D #RIGHT CURLY BRACKET
0x7E 0x007E #TILDE
0x7F 0x007F #DELETE
0x80 0x00C4 #LATIN CAPITAL LETTER A WITH DIAERESIS
0x81 0x0100 #LATIN CAPITAL LETTER A WITH MACRON
0x82 0x0101 #LATIN SMALL LETTER A WITH MACRON
0x83 0x00C9 #LATIN CAPITAL LETTER E WITH ACUTE
0x84 0x0104 #LATIN CAPITAL LETTER A WITH OGONEK
0x85 0x00D6 #LATIN CAPITAL LETTER O WITH DIAERESIS
0x86 0x00DC #LATIN CAPITAL LETTER U WITH DIAERESIS
0x87 0x00E1 #LATIN SMALL LETTER A WITH ACUTE
0x88 0x0105 #LATIN SMALL LETTER A WITH OGONEK
0x89 0x010C #LATIN CAPITAL LETTER C WITH CARON
0x8A 0x00E4 #LATIN SMALL LETTER A WITH DIAERESIS
0x8B 0x010D #LATIN SMALL LETTER C WITH CARON
0x8C 0x0106 #LATIN CAPITAL LETTER C WITH ACUTE
0x8D 0x0107 #LATIN SMALL LETTER C WITH ACUTE
0x8E 0x00E9 #LATIN SMALL LETTER E WITH ACUTE
0x8F 0x0179 #LATIN CAPITAL LETTER Z WITH ACUTE
0x90 0x017A #LATIN SMALL LETTER Z WITH ACUTE
0x91 0x010E #LATIN CAPITAL LETTER D WITH CARON
0x92 0x00ED #LATIN SMALL LETTER I WITH ACUTE
0x93 0x010F #LATIN SMALL LETTER D WITH CARON
0x94 0x0112 #LATIN CAPITAL LETTER E WITH MACRON
0x95 0x0113 #LATIN SMALL LETTER E WITH MACRON
0x96 0x0116 #LATIN CAPITAL LETTER E WITH DOT ABOVE
0x97 0x00F3 #LATIN SMALL LETTER O WITH ACUTE
0x98 0x0117 #LATIN SMALL LETTER E WITH DOT ABOVE
0x99 0x00F4 #LATIN SMALL LETTER O WITH CIRCUMFLEX
0x9A 0x00F6 #LATIN SMALL LETTER O WITH DIAERESIS
0x9B 0x00F5 #LATIN SMALL LETTER O WITH TILDE
0x9C 0x00FA #LATIN SMALL LETTER U WITH ACUTE
0x9D 0x011A #LATIN CAPITAL LETTER E WITH CARON
0x9E 0x011B #LATIN SMALL LETTER E WITH CARON
0x9F 0x00FC #LATIN SMALL LETTER U WITH DIAERESIS
0xA0 0x2020 #DAGGER
0xA1 0x00B0 #DEGREE SIGN
0xA2 0x0118 #LATIN CAPITAL LETTER E WITH OGONEK
0xA3 0x00A3 #POUND SIGN
0xA4 0x00A7 #SECTION SIGN
0xA5 0x2022 #BULLET
0xA6 0x00B6 #PILCROW SIGN
0xA7 0x00DF #LATIN SMALL LETTER SHARP S
0xA8 0x00AE #REGISTERED SIGN
0xA9 0x00A9 #COPYRIGHT SIGN
0xAA 0x2122 #TRADE MARK SIGN
0xAB 0x0119 #LATIN SMALL LETTER E WITH OGONEK
0xAC 0x00A8 #DIAERESIS
0xAD 0x2260 #NOT EQUAL TO
0xAE 0x0123 #LATIN SMALL LETTER G WITH CEDILLA
0xAF 0x012E #LATIN CAPITAL LETTER I WITH OGONEK
0xB0 0x012F #LATIN SMALL LETTER I WITH OGONEK
0xB1 0x012A #LATIN CAPITAL LETTER I WITH MACRON
0xB2 0x2264 #LESS-THAN OR EQUAL TO
0xB3 0x2265 #GREATER-THAN OR EQUAL TO
0xB4 0x012B #LATIN SMALL LETTER I WITH MACRON
0xB5 0x0136 #LATIN CAPITAL LETTER K WITH CEDILLA
0xB6 0x2202 #PARTIAL DIFFERENTIAL
0xB7 0x2211 #N-ARY SUMMATION
0xB8 0x0142 #LATIN SMALL LETTER L WITH STROKE
0xB9 0x013B #LATIN CAPITAL LETTER L WITH CEDILLA
0xBA 0x013C #LATIN SMALL LETTER L WITH CEDILLA
0xBB 0x013D #LATIN CAPITAL LETTER L WITH CARON
0xBC 0x013E #LATIN SMALL LETTER L WITH CARON
0xBD 0x0139 #LATIN CAPITAL LETTER L WITH ACUTE
0xBE 0x013A #LATIN SMALL LETTER L WITH ACUTE
0xBF 0x0145 #LATIN CAPITAL LETTER N WITH CEDILLA
0xC0 0x0146 #LATIN SMALL LETTER N WITH CEDILLA
0xC1 0x0143 #LATIN CAPITAL LETTER N WITH ACUTE
0xC2 0x00AC #NOT SIGN
0xC3 0x221A #SQUARE ROOT
0xC4 0x0144 #LATIN SMALL LETTER N WITH ACUTE
0xC5 0x0147 #LATIN CAPITAL LETTER N WITH CARON
0xC6 0x2206 #INCREMENT
0xC7 0x00AB #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
0xC8 0x00BB #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
0xC9 0x2026 #HORIZONTAL ELLIPSIS
0xCA 0x00A0 #NO-BREAK SPACE
0xCB 0x0148 #LATIN SMALL LETTER N WITH CARON
0xCC 0x0150 #LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
0xCD 0x00D5 #LATIN CAPITAL LETTER O WITH TILDE
0xCE 0x0151 #LATIN SMALL LETTER O WITH DOUBLE ACUTE
0xCF 0x014C #LATIN CAPITAL LETTER O WITH MACRON
0xD0 0x2013 #EN DASH
0xD1 0x2014 #EM DASH
0xD2 0x201C #LEFT DOUBLE QUOTATION MARK
0xD3 0x201D #RIGHT DOUBLE QUOTATION MARK
0xD4 0x2018 #LEFT SINGLE QUOTATION MARK
0xD5 0x2019 #RIGHT SINGLE QUOTATION MARK
0xD6 0x00F7 #DIVISION SIGN
0xD7 0x25CA #LOZENGE
0xD8 0x014D #LATIN SMALL LETTER O WITH MACRON
0xD9 0x0154 #LATIN CAPITAL LETTER R WITH ACUTE
0xDA 0x0155 #LATIN SMALL LETTER R WITH ACUTE
0xDB 0x0158 #LATIN CAPITAL LETTER R WITH CARON
0xDC 0x2039 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK
0xDD 0x203A #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
0xDE 0x0159 #LATIN SMALL LETTER R WITH CARON
0xDF 0x0156 #LATIN CAPITAL LETTER R WITH CEDILLA
0xE0 0x0157 #LATIN SMALL LETTER R WITH CEDILLA
0xE1 0x0160 #LATIN CAPITAL LETTER S WITH CARON
0xE2 0x201A #SINGLE LOW-9 QUOTATION MARK
0xE3 0x201E #DOUBLE LOW-9 QUOTATION MARK
0xE4 0x0161 #LATIN SMALL LETTER S WITH CARON
0xE5 0x015A #LATIN CAPITAL LETTER S WITH ACUTE
0xE6 0x015B #LATIN SMALL LETTER S WITH ACUTE
0xE7 0x00C1 #LATIN CAPITAL LETTER A WITH ACUTE
0xE8 0x0164 #LATIN CAPITAL LETTER T WITH CARON
0xE9 0x0165 #LATIN SMALL LETTER T WITH CARON
0xEA 0x00CD #LATIN CAPITAL LETTER I WITH ACUTE
0xEB 0x017D #LATIN CAPITAL LETTER Z WITH CARON
0xEC 0x017E #LATIN SMALL LETTER Z WITH CARON
0xED 0x016A #LATIN CAPITAL LETTER U WITH MACRON
0xEE 0x00D3 #LATIN CAPITAL LETTER O WITH ACUTE
0xEF 0x00D4 #LATIN CAPITAL LETTER O WITH CIRCUMFLEX
0xF0 0x016B #LATIN SMALL LETTER U WITH MACRON
0xF1 0x016E #LATIN CAPITAL LETTER U WITH RING ABOVE
0xF2 0x00DA #LATIN CAPITAL LETTER U WITH ACUTE
0xF3 0x016F #LATIN SMALL LETTER U WITH RING ABOVE
0xF4 0x0170 #LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
0xF5 0x0171 #LATIN SMALL LETTER U WITH DOUBLE ACUTE
0xF6 0x0172 #LATIN CAPITAL LETTER U WITH OGONEK
0xF7 0x0173 #LATIN SMALL LETTER U WITH OGONEK
0xF8 0x00DD #LATIN CAPITAL LETTER Y WITH ACUTE
0xF9 0x00FD #LATIN SMALL LETTER Y WITH ACUTE
0xFA 0x0137 #LATIN SMALL LETTER K WITH CEDILLA
0xFB 0x017B #LATIN CAPITAL LETTER Z WITH DOT ABOVE
0xFC 0x0141 #LATIN CAPITAL LETTER L WITH STROKE
0xFD 0x017C #LATIN SMALL LETTER Z WITH DOT ABOVE
0xFE 0x0122 #LATIN CAPITAL LETTER G WITH CEDILLA
0xFF 0x02C7 #CARON

258
Unicode/macroman.cp Normal file
View File

@ -0,0 +1,258 @@
MacRoman 2000
"x-mac", "mac", "macroman"
0x00 0x0000 #NULL
0x01 0x0001 #START OF HEADING
0x02 0x0002 #START OF TEXT
0x03 0x0003 #END OF TEXT
0x04 0x0004 #END OF TRANSMISSION
0x05 0x0005 #ENQUIRY
0x06 0x0006 #ACKNOWLEDGE
0x07 0x0007 #BELL
0x08 0x0008 #BACKSPACE
0x09 0x0009 #HORIZONTAL TABULATION
0x0A 0x000A #LINE FEED
0x0B 0x000B #VERTICAL TABULATION
0x0C 0x000C #FORM FEED
0x0D 0x000D #CARRIAGE RETURN
0x0E 0x000E #SHIFT OUT
0x0F 0x000F #SHIFT IN
0x10 0x0010 #DATA LINK ESCAPE
0x11 0x0011 #DEVICE CONTROL ONE
0x12 0x0012 #DEVICE CONTROL TWO
0x13 0x0013 #DEVICE CONTROL THREE
0x14 0x0014 #DEVICE CONTROL FOUR
0x15 0x0015 #NEGATIVE ACKNOWLEDGE
0x16 0x0016 #SYNCHRONOUS IDLE
0x17 0x0017 #END OF TRANSMISSION BLOCK
0x18 0x0018 #CANCEL
0x19 0x0019 #END OF MEDIUM
0x1A 0x001A #SUBSTITUTE
0x1B 0x001B #ESCAPE
0x1C 0x001C #FILE SEPARATOR
0x1D 0x001D #GROUP SEPARATOR
0x1E 0x001E #RECORD SEPARATOR
0x1F 0x001F #UNIT SEPARATOR
0x20 0x0020 #SPACE
0x21 0x0021 #EXCLAMATION MARK
0x22 0x0022 #QUOTATION MARK
0x23 0x0023 #NUMBER SIGN
0x24 0x0024 #DOLLAR SIGN
0x25 0x0025 #PERCENT SIGN
0x26 0x0026 #AMPERSAND
0x27 0x0027 #APOSTROPHE
0x28 0x0028 #LEFT PARENTHESIS
0x29 0x0029 #RIGHT PARENTHESIS
0x2A 0x002A #ASTERISK
0x2B 0x002B #PLUS SIGN
0x2C 0x002C #COMMA
0x2D 0x002D #HYPHEN-MINUS
0x2E 0x002E #FULL STOP
0x2F 0x002F #SOLIDUS
0x30 0x0030 #DIGIT ZERO
0x31 0x0031 #DIGIT ONE
0x32 0x0032 #DIGIT TWO
0x33 0x0033 #DIGIT THREE
0x34 0x0034 #DIGIT FOUR
0x35 0x0035 #DIGIT FIVE
0x36 0x0036 #DIGIT SIX
0x37 0x0037 #DIGIT SEVEN
0x38 0x0038 #DIGIT EIGHT
0x39 0x0039 #DIGIT NINE
0x3A 0x003A #COLON
0x3B 0x003B #SEMICOLON
0x3C 0x003C #LESS-THAN SIGN
0x3D 0x003D #EQUALS SIGN
0x3E 0x003E #GREATER-THAN SIGN
0x3F 0x003F #QUESTION MARK
0x40 0x0040 #COMMERCIAL AT
0x41 0x0041 #LATIN CAPITAL LETTER A
0x42 0x0042 #LATIN CAPITAL LETTER B
0x43 0x0043 #LATIN CAPITAL LETTER C
0x44 0x0044 #LATIN CAPITAL LETTER D
0x45 0x0045 #LATIN CAPITAL LETTER E
0x46 0x0046 #LATIN CAPITAL LETTER F
0x47 0x0047 #LATIN CAPITAL LETTER G
0x48 0x0048 #LATIN CAPITAL LETTER H
0x49 0x0049 #LATIN CAPITAL LETTER I
0x4A 0x004A #LATIN CAPITAL LETTER J
0x4B 0x004B #LATIN CAPITAL LETTER K
0x4C 0x004C #LATIN CAPITAL LETTER L
0x4D 0x004D #LATIN CAPITAL LETTER M
0x4E 0x004E #LATIN CAPITAL LETTER N
0x4F 0x004F #LATIN CAPITAL LETTER O
0x50 0x0050 #LATIN CAPITAL LETTER P
0x51 0x0051 #LATIN CAPITAL LETTER Q
0x52 0x0052 #LATIN CAPITAL LETTER R
0x53 0x0053 #LATIN CAPITAL LETTER S
0x54 0x0054 #LATIN CAPITAL LETTER T
0x55 0x0055 #LATIN CAPITAL LETTER U
0x56 0x0056 #LATIN CAPITAL LETTER V
0x57 0x0057 #LATIN CAPITAL LETTER W
0x58 0x0058 #LATIN CAPITAL LETTER X
0x59 0x0059 #LATIN CAPITAL LETTER Y
0x5A 0x005A #LATIN CAPITAL LETTER Z
0x5B 0x005B #LEFT SQUARE BRACKET
0x5C 0x005C #REVERSE SOLIDUS
0x5D 0x005D #RIGHT SQUARE BRACKET
0x5E 0x005E #CIRCUMFLEX ACCENT
0x5F 0x005F #LOW LINE
0x60 0x0060 #GRAVE ACCENT
0x61 0x0061 #LATIN SMALL LETTER A
0x62 0x0062 #LATIN SMALL LETTER B
0x63 0x0063 #LATIN SMALL LETTER C
0x64 0x0064 #LATIN SMALL LETTER D
0x65 0x0065 #LATIN SMALL LETTER E
0x66 0x0066 #LATIN SMALL LETTER F
0x67 0x0067 #LATIN SMALL LETTER G
0x68 0x0068 #LATIN SMALL LETTER H
0x69 0x0069 #LATIN SMALL LETTER I
0x6A 0x006A #LATIN SMALL LETTER J
0x6B 0x006B #LATIN SMALL LETTER K
0x6C 0x006C #LATIN SMALL LETTER L
0x6D 0x006D #LATIN SMALL LETTER M
0x6E 0x006E #LATIN SMALL LETTER N
0x6F 0x006F #LATIN SMALL LETTER O
0x70 0x0070 #LATIN SMALL LETTER P
0x71 0x0071 #LATIN SMALL LETTER Q
0x72 0x0072 #LATIN SMALL LETTER R
0x73 0x0073 #LATIN SMALL LETTER S
0x74 0x0074 #LATIN SMALL LETTER T
0x75 0x0075 #LATIN SMALL LETTER U
0x76 0x0076 #LATIN SMALL LETTER V
0x77 0x0077 #LATIN SMALL LETTER W
0x78 0x0078 #LATIN SMALL LETTER X
0x79 0x0079 #LATIN SMALL LETTER Y
0x7A 0x007A #LATIN SMALL LETTER Z
0x7B 0x007B #LEFT CURLY BRACKET
0x7C 0x007C #VERTICAL LINE
0x7D 0x007D #RIGHT CURLY BRACKET
0x7E 0x007E #TILDE
0x7F 0x007F #DELETE
0x80 0x00C4 #LATIN CAPITAL LETTER A WITH DIAERESIS
0x81 0x00C5 #LATIN CAPITAL LETTER A WITH RING ABOVE
0x82 0x00C7 #LATIN CAPITAL LETTER C WITH CEDILLA
0x83 0x00C9 #LATIN CAPITAL LETTER E WITH ACUTE
0x84 0x00D1 #LATIN CAPITAL LETTER N WITH TILDE
0x85 0x00D6 #LATIN CAPITAL LETTER O WITH DIAERESIS
0x86 0x00DC #LATIN CAPITAL LETTER U WITH DIAERESIS
0x87 0x00E1 #LATIN SMALL LETTER A WITH ACUTE
0x88 0x00E0 #LATIN SMALL LETTER A WITH GRAVE
0x89 0x00E2 #LATIN SMALL LETTER A WITH CIRCUMFLEX
0x8A 0x00E4 #LATIN SMALL LETTER A WITH DIAERESIS
0x8B 0x00E3 #LATIN SMALL LETTER A WITH TILDE
0x8C 0x00E5 #LATIN SMALL LETTER A WITH RING ABOVE
0x8D 0x00E7 #LATIN SMALL LETTER C WITH CEDILLA
0x8E 0x00E9 #LATIN SMALL LETTER E WITH ACUTE
0x8F 0x00E8 #LATIN SMALL LETTER E WITH GRAVE
0x90 0x00EA #LATIN SMALL LETTER E WITH CIRCUMFLEX
0x91 0x00EB #LATIN SMALL LETTER E WITH DIAERESIS
0x92 0x00ED #LATIN SMALL LETTER I WITH ACUTE
0x93 0x00EC #LATIN SMALL LETTER I WITH GRAVE
0x94 0x00EE #LATIN SMALL LETTER I WITH CIRCUMFLEX
0x95 0x00EF #LATIN SMALL LETTER I WITH DIAERESIS
0x96 0x00F1 #LATIN SMALL LETTER N WITH TILDE
0x97 0x00F3 #LATIN SMALL LETTER O WITH ACUTE
0x98 0x00F2 #LATIN SMALL LETTER O WITH GRAVE
0x99 0x00F4 #LATIN SMALL LETTER O WITH CIRCUMFLEX
0x9A 0x00F6 #LATIN SMALL LETTER O WITH DIAERESIS
0x9B 0x00F5 #LATIN SMALL LETTER O WITH TILDE
0x9C 0x00FA #LATIN SMALL LETTER U WITH ACUTE
0x9D 0x00F9 #LATIN SMALL LETTER U WITH GRAVE
0x9E 0x00FB #LATIN SMALL LETTER U WITH CIRCUMFLEX
0x9F 0x00FC #LATIN SMALL LETTER U WITH DIAERESIS
0xA0 0x2020 #DAGGER
0xA1 0x00B0 #DEGREE SIGN
0xA2 0x00A2 #CENT SIGN
0xA3 0x00A3 #POUND SIGN
0xA4 0x00A7 #SECTION SIGN
0xA5 0x2022 #PUCE
0xA6 0x00B6 #PILCROW SIGN
0xA7 0x00DF #LATIN SMALL LETTER SHARP S (GERMAN)
0xA8 0x00AE #REGISTERED SIGN
0xA9 0x00A9 #COPYRIGHT SIGN
0xAA 0x2122 #TRADE MARK SIGN
0xAB 0x00B4 #ACUTE ACCENT
0xAC 0x00A8 #DIAERESIS
0xAD 0x2260 #NOT EQUAL TO
0xAE 0x00C6 #LATIN CAPITAL LETTER AE
0xAF 0x00D8 #LATIN CAPITAL LETTER O WITH STROKE
0xB0 0x221E #INFINITY
0xB1 0x00B1 #PLUS-MINUS SIGN
0xB2 0x2264 #LESS-THAN OR EQUAL TO
0xB3 0x2265 #GREATER-THAN OR EQUAL TO
0xB4 0x00A5 #YEN SIGN
0xB5 0x00B5 #MICRO SIGN
0xB6 0x2202 #PARTIAL DIFFERENTIAL
0xB7 0x2211 #N-ARY SUMMATION
0xB8 0x220F #N-ARY PRODUCT
0xB9 0x03C0 #GREEK SMALL LETTER PI
0xBA 0x222B #INTEGRAL
0xBB 0x00AA #FEMININE ORDINAL INDICATOR
0xBC 0x00BA #MASCULINE ORDINAL INDICATOR
0xBD 0x03A9 #GREEK CAPITAL LETTER OMEGA
0xBE 0x00E6 #LATIN SMALL LETTER AE
0xBF 0x00F8 #LATIN SMALL LETTER O WITH STROKE
0xC0 0x00BF #INVERTED QUESTION MARK
0xC1 0x00A1 #INVERTED EXCLAMATION MARK
0xC2 0x00AC #NOT SIGN
0xC3 0x221A #SQUARE ROOT
0xC4 0x0192 #LETTRE MINUSCULE LATINE F CEDILLE
0xC5 0x2248 #ALMOST EQUAL TO
0xC6 0x0394 #GREEK CAPITAL LETTER DELTA
0xC7 0x00AB #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
0xC8 0x00BB #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
0xC9 0x2026 #MIDLINE HORIZONTAL ELLIPSIS
0xCA 0x00A0 #NO-BREAK SPACE
0xCB 0x00C0 #LATIN CAPITAL LETTER A WITH GRAVE
0xCC 0x00C3 #LATIN CAPITAL LETTER A WITH TILDE
0xCD 0x00D5 #LATIN CAPITAL LETTER O WITH TILDE
0xCE 0x0152 #LATIN CAPITAL LIGATURE OE
0xCF 0x0153 #LATIN SMALL LIGATURE OE
0xD0 0x2013 #EN DASH
0xD1 0x2014 #EM DASH
0xD2 0x201C #LEFT DOUBLE QUOTATION MARK
0xD3 0x201D #RIGHT DOUBLE QUOTATION MARK
0xD4 0x2018 #LEFT SINGLE QUOTATION MARK
0xD5 0x2019 #RIGHT SINGLE QUOTATION MARK
0xD6 0x00F7 #DIVISION SIGN
0xD7 0x25CA #LOZENGE
0xD8 0x00FF #LATIN SMALL LETTER Y WITH DIAERESIS
0xD9 0x0178 #LATIN CAPITAL LETTER Y WITH DIAERESIS
0xDA 0x2044 #FRACTION SLASH
0xDB 0x20AC #SYMBOLE EURO
0xDC 0x2039 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK
0xDD 0x203A #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
0xDE 0xFB01 #LATIN SMALL LIGATURE FI
0xDF 0xFB02 #LATIN SMALL LIGATURE FL
0xE0 0x2021 #DOUBLE DAGGER
0xE1 0x00B7 #MIDDLE DOT
0xE2 0x201A #SINGLE LOW-9 QUOTATION MARK
0xE3 0x201E #DOUBLE LOW-9 QUOTATION MARK
0xE4 0x2030 #PER MILLE SIGN
0xE5 0x00C2 #LATIN CAPITAL LETTER A WITH CIRCUMFLEX
0xE6 0x00CA #LATIN CAPITAL LETTER E WITH CIRCUMFLEX
0xE7 0x00C1 #LATIN CAPITAL LETTER A WITH ACUTE
0xE8 0x00CB #LATIN CAPITAL LETTER E WITH DIAERESIS
0xE9 0x00C8 #LATIN CAPITAL LETTER E WITH GRAVE
0xEA 0x00CD #LATIN CAPITAL LETTER I WITH ACUTE
0xEB 0x00CE #LATIN CAPITAL LETTER I WITH CIRCUMFLEX
0xEC 0x00CF #LATIN CAPITAL LETTER I WITH DIAERESIS
0xED 0x00CC #LATIN CAPITAL LETTER I WITH GRAVE
0xEE 0x00D3 #LATIN CAPITAL LETTER O WITH ACUTE
0xEF 0x00D4 #LATIN CAPITAL LETTER O WITH CIRCUMFLEX
0xF0 0xF8FF #Mac Logo (in Private Use Area)
0xF1 0x00D2 #LATIN CAPITAL LETTER O WITH GRAVE
0xF2 0x00DA #LATIN CAPITAL LETTER U WITH ACUTE
0xF3 0x00DB #LATIN CAPITAL LETTER U WITH CIRCUMFLEX
0xF4 0x00D9 #LATIN CAPITAL LETTER U WITH GRAVE
0xF5 0x0131 #LATIN SMALL LETTER I DOTLESS
0xF6 0x02C6 #LETTRE MODIFICATIVE ACCENT CIRCONFLEXE
0xF7 0x02DC #PETIT TILDE
0xF8 0x00AF #MACRON
0xF9 0x02D8 #BREVE
0xFA 0x02D9 #DOT ABOVE
0xFB 0x02DA #RING ABOVE
0xFC 0x00B8 #CEDILLA
0xFD 0x02DD #DOUBLE ACUTE ACCENT
0xFE 0x02DB #OGONEK
0xFF 0x02C7 #CARON

264
Unicode/tcvn5712.cp Normal file
View File

@ -0,0 +1,264 @@
TCVN-5712 (Vietnamese)
"TCVN-5712", "TCVN", "TCVN-0", "TCVN-1"
0x00 0x0000 # NUL
0x00 0x0000 # NULL (NUL)
0x01 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE
0x02 0x1EE4 # LATIN CAPITAL LETTER U WITH DOT BELOW
0x03 0x0003 # END OF TEXT (ETX)
0x04 0x1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE
0x05 0x1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
0x06 0x1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE
0x07 0x0007 # BELL (BEL)
0x08 0x0008 # BACKSPACE (BS)
0x09 0x0009 # CHARACTER TABULATION (HT)
0x0A 0x000A # LINE FEED (LF)
0x0B 0x000B # LINE TABULATION (VT)
0x0C 0x000C # FORM FEED (FF)
0x0D 0x000D # CARRIAGE RETURN (CR)
0x0E 0x000E # SHIFT OUT (SO)
0x0F 0x000F # SHIFT IN (SI)
0x10 0x0010 # DATALINK ESCAPE (DLE)
0x11 0x1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE
0x12 0x1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
0x13 0x1EF2 # LATIN CAPITAL LETTER Y WITH GRAVE
0x14 0x1EF6 # LATIN CAPITAL LETTER Y WITH HOOK ABOVE
0x15 0x1EF8 # LATIN CAPITAL LETTER Y WITH TILDE
0x16 0x00DD # LATIN CAPITAL LETTER Y WITH ACUTE
0x17 0x1EF4 # LATIN CAPITAL LETTER Y WITH DOT BELOW
0x18 0x0018 # CANCEL (CAN)
0x19 0x0019 # END OF MEDIUM (EM)
0x1A 0x001A # SUBSTITUTE (SUB)
0x1B 0x001B # ESCAPE (ESC)
0x1C 0x001C # FILE SEPARATOR (IS4)
0x1D 0x001D # GROUP SEPARATOR (IS3)
0x1E 0x001E # RECORD SEPARATOR (IS2)
0x1F 0x001F # UNIT SEPARATOR (IS1)
0x20 0x0020 # SPACE
0x21 0x0021 # EXCLAMATION MARK
0x22 0x0022 # QUOTATION MARK
0x23 0x0023 # NUMBER SIGN
0x24 0x0024 # DOLLAR SIGN
0x25 0x0025 # PERCENT SIGN
0x26 0x0026 # AMPERSAND
0x27 0x0027 # APOSTROPHE
0x28 0x0028 # LEFT PARENTHESIS
0x29 0x0029 # RIGHT PARENTHESIS
0x2A 0x002A # ASTERISK
0x2B 0x002B # PLUS SIGN
0x2C 0x002C # COMMA
0x2D 0x002D # HYPHEN-MINUS
0x2E 0x002E # FULL STOP
0x2F 0x002F # SOLIDUS
0x30 0x0030 # DIGIT ZERO
0x31 0x0031 # DIGIT ONE
0x32 0x0032 # DIGIT TWO
0x33 0x0033 # DIGIT THREE
0x34 0x0034 # DIGIT FOUR
0x35 0x0035 # DIGIT FIVE
0x36 0x0036 # DIGIT SIX
0x37 0x0037 # DIGIT SEVEN
0x38 0x0038 # DIGIT EIGHT
0x39 0x0039 # DIGIT NINE
0x3A 0x003A # COLON
0x3B 0x003B # SEMICOLON
0x3C 0x003C # LESS-THAN SIGN
0x3D 0x003D # EQUALS SIGN
0x3E 0x003E # GREATER-THAN SIGN
0x3F 0x003F # QUESTION MARK
0x40 0x0040 # COMMERCIAL AT
0x41 0x0041 # LATIN CAPITAL LETTER A
0x42 0x0042 # LATIN CAPITAL LETTER B
0x43 0x0043 # LATIN CAPITAL LETTER C
0x44 0x0044 # LATIN CAPITAL LETTER D
0x45 0x0045 # LATIN CAPITAL LETTER E
0x46 0x0046 # LATIN CAPITAL LETTER F
0x47 0x0047 # LATIN CAPITAL LETTER G
0x48 0x0048 # LATIN CAPITAL LETTER H
0x49 0x0049 # LATIN CAPITAL LETTER I
0x4A 0x004A # LATIN CAPITAL LETTER J
0x4B 0x004B # LATIN CAPITAL LETTER K
0x4C 0x004C # LATIN CAPITAL LETTER L
0x4D 0x004D # LATIN CAPITAL LETTER M
0x4E 0x004E # LATIN CAPITAL LETTER N
0x4F 0x004F # LATIN CAPITAL LETTER O
0x50 0x0050 # LATIN CAPITAL LETTER P
0x51 0x0051 # LATIN CAPITAL LETTER Q
0x52 0x0052 # LATIN CAPITAL LETTER R
0x53 0x0053 # LATIN CAPITAL LETTER S
0x54 0x0054 # LATIN CAPITAL LETTER T
0x55 0x0055 # LATIN CAPITAL LETTER U
0x56 0x0056 # LATIN CAPITAL LETTER V
0x57 0x0057 # LATIN CAPITAL LETTER W
0x58 0x0058 # LATIN CAPITAL LETTER X
0x59 0x0059 # LATIN CAPITAL LETTER Y
0x5A 0x005A # LATIN CAPITAL LETTER Z
0x5B 0x005B # LEFT SQUARE BRACKET
0x5C 0x005C # REVERSE SOLIDUS
0x5D 0x005D # RIGHT SQUARE BRACKET
0x5E 0x005E # CIRCUMFLEX ACCENT
0x5F 0x005F # LOW LINE
0x60 0x0060 # GRAVE ACCENT
0x61 0x0061 # LATIN SMALL LETTER A
0x62 0x0062 # LATIN SMALL LETTER B
0x63 0x0063 # LATIN SMALL LETTER C
0x64 0x0064 # LATIN SMALL LETTER D
0x65 0x0065 # LATIN SMALL LETTER E
0x66 0x0066 # LATIN SMALL LETTER F
0x67 0x0067 # LATIN SMALL LETTER G
0x68 0x0068 # LATIN SMALL LETTER H
0x69 0x0069 # LATIN SMALL LETTER I
0x6A 0x006A # LATIN SMALL LETTER J
0x6B 0x006B # LATIN SMALL LETTER K
0x6C 0x006C # LATIN SMALL LETTER L
0x6D 0x006D # LATIN SMALL LETTER M
0x6E 0x006E # LATIN SMALL LETTER N
0x6F 0x006F # LATIN SMALL LETTER O
0x70 0x0070 # LATIN SMALL LETTER P
0x71 0x0071 # LATIN SMALL LETTER Q
0x72 0x0072 # LATIN SMALL LETTER R
0x73 0x0073 # LATIN SMALL LETTER S
0x74 0x0074 # LATIN SMALL LETTER T
0x75 0x0075 # LATIN SMALL LETTER U
0x76 0x0076 # LATIN SMALL LETTER V
0x77 0x0077 # LATIN SMALL LETTER W
0x78 0x0078 # LATIN SMALL LETTER X
0x79 0x0079 # LATIN SMALL LETTER Y
0x7A 0x007A # LATIN SMALL LETTER Z
0x7B 0x007B # LEFT CURLY BRACKET
0x7C 0x007C # VERTICAL LINE
0x7D 0x007D # RIGHT CURLY BRACKET
0x7E 0x007E # TILDE
0x7F 0x007F # DELETE (DEL)
0x80 0x00C0 # LATIN CAPITAL LETTER A WITH GRAVE
0x81 0x1EA2 # LATIN CAPITAL LETTER A WITH HOOK ABOVE
0x82 0x00C3 # LATIN CAPITAL LETTER A WITH TILDE
0x83 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE
0x84 0x1EA0 # LATIN CAPITAL LETTER A WITH DOT BELOW
0x85 0x1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
0x86 0x1EAC # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
0x87 0x00C8 # LATIN CAPITAL LETTER E WITH GRAVE
0x88 0x1EBA # LATIN CAPITAL LETTER E WITH HOOK ABOVE
0x89 0x1EBC # LATIN CAPITAL LETTER E WITH TILDE
0x8A 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE
0x8B 0x1EB8 # LATIN CAPITAL LETTER E WITH DOT BELOW
0x8C 0x1EC6 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
0x8D 0x00CC # LATIN CAPITAL LETTER I WITH GRAVE
0x8E 0x1EC8 # LATIN CAPITAL LETTER I WITH HOOK ABOVE
0x8F 0x0128 # LATIN CAPITAL LETTER I WITH TILDE
0x90 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE
0x91 0x1ECA # LATIN CAPITAL LETTER I WITH DOT BELOW
0x92 0x00D2 # LATIN CAPITAL LETTER O WITH GRAVE
0x93 0x1ECE # LATIN CAPITAL LETTER O WITH HOOK ABOVE
0x94 0x00D5 # LATIN CAPITAL LETTER O WITH TILDE
0x95 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE
0x96 0x1ECC # LATIN CAPITAL LETTER O WITH DOT BELOW
0x97 0x1ED8 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
0x98 0x1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE
0x99 0x1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
0x9A 0x1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE
0x9B 0x1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE
0x9C 0x1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
0x9D 0x00D9 # LATIN CAPITAL LETTER U WITH GRAVE
0x9E 0x1EE6 # LATIN CAPITAL LETTER U WITH HOOK ABOVE
0x9F 0x0168 # LATIN CAPITAL LETTER U WITH TILDE
0xA0 0x00A0 # NO-BREAK SPACE
0xA1 0x0102 # LATIN CAPITAL LETTER A WITH BREVE
0xA2 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
0xA3 0x00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
0xA4 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
0xA5 0x01A0 # LATIN CAPITAL LETTER O WITH HOOK
0xA6 0x01AF # LATIN CAPITAL LETTER U WITH HORN
0xA7 0x0110 # LATIN CAPITAL LETTER D WITH STROKE
0xA8 0x0103 # LATIN SMALL LETTER A WITH BREVE
0xA9 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX
0xAA 0x00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX
0xAB 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX
0xAC 0x01A1 # LATIN SMALL LETTER O WITH HOOK
0xAD 0x01B0 # LATIN SMALL LETTER U WITH HORN
0xAE 0x0111 # LATIN SMALL LETTER D WITH STROKE
0xAF 0x1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
0xB0 0x0300 # COMBINING GRAVE ACCENT
0xB1 0x0309 # COMBINING HOOK ABOVE
0xB2 0x0303 # COMBINING TILDE
0xB3 0x0301 # COMBINING ACUTE ACCENT
0xB4 0x0323 # COMBINING DOT BELOW
0xB5 0x00E0 # LATIN SMALL LETTER A WITH GRAVE
0xB6 0x1EA3 # LATIN SMALL LETTER A WITH HOOK ABOVE
0xB7 0x00E3 # LATIN SMALL LETTER A WITH TILDE
0xB8 0x00E1 # LATIN SMALL LETTER A WITH ACUTE
0xB9 0x1EA1 # LATIN SMALL LETTER A WITH DOT BELOW
0xBA 0x1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
0xBB 0x1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE
0xBC 0x1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
0xBD 0x1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE
0xBE 0x1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE
0xBF 0x1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE
0xC0 0x1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
0xC1 0x1EA6 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
0xC2 0x1EA8 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
0xC3 0x1EAA # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
0xC4 0x1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
0xC5 0x1EC0 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
0xC6 0x1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
0xC7 0x1EA7 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
0xC8 0x1EA9 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
0xC9 0x1EAB # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
0xCA 0x1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
0xCB 0x1EAD # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
0xCC 0x00E8 # LATIN SMALL LETTER E WITH GRAVE
0xCD 0x1EC2 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
0xCE 0x1EBB # LATIN SMALL LETTER E WITH HOOK ABOVE
0xCF 0x1EBD # LATIN SMALL LETTER E WITH TILDE
0xD0 0x00E9 # LATIN SMALL LETTER E WITH ACUTE
0xD1 0x1EB9 # LATIN SMALL LETTER E WITH DOT BELOW
0xD2 0x1EC1 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
0xD3 0x1EC3 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
0xD4 0x1EC5 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
0xD5 0x1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
0xD6 0x1EC7 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
0xD7 0x00EC # LATIN SMALL LETTER I WITH GRAVE
0xD8 0x1EC9 # LATIN SMALL LETTER I WITH HOOK ABOVE
0xD9 0x1EC4 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
0xDA 0x1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
0xDB 0x1ED2 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
0xDC 0x0129 # LATIN SMALL LETTER I WITH TILDE
0xDD 0x00ED # LATIN SMALL LETTER I WITH ACUTE
0xDE 0x1ECB # LATIN SMALL LETTER I WITH DOT BELOW
0xDF 0x00F2 # LATIN SMALL LETTER O WITH GRAVE
0xE0 0x1ED4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
0xE1 0x1ECF # LATIN SMALL LETTER O WITH HOOK ABOVE
0xE2 0x00F5 # LATIN SMALL LETTER O WITH TILDE
0xE3 0x00F3 # LATIN SMALL LETTER O WITH ACUTE
0xE4 0x1ECD # LATIN SMALL LETTER O WITH DOT BELOW
0xE5 0x1ED3 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
0xE6 0x1ED5 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
0xE7 0x1ED7 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
0xE8 0x1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
0xE9 0x1ED9 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
0xEA 0x1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE
0xEB 0x1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
0xEC 0x1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE
0xED 0x1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE
0xEE 0x1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW
0xEF 0x00F9 # LATIN SMALL LETTER U WITH GRAVE
0xF0 0x1ED6 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
0xF1 0x1EE7 # LATIN SMALL LETTER U WITH HOOK ABOVE
0xF2 0x0169 # LATIN SMALL LETTER U WITH TILDE
0xF3 0x00FA # LATIN SMALL LETTER U WITH ACUTE
0xF4 0x1EE5 # LATIN SMALL LETTER U WITH DOT BELOW
0xF5 0x1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE
0xF6 0x1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
0xF7 0x1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE
0xF8 0x1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE
0xF9 0x1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW
0xFA 0x1EF3 # LATIN SMALL LETTER Y WITH GRAVE
0xFB 0x1EF7 # LATIN SMALL LETTER Y WITH HOOK ABOVE
0xFC 0x1EF9 # LATIN SMALL LETTER Y WITH TILDE
0xFD 0x00FD # LATIN SMALL LETTER Y WITH ACUTE
0xFE 0x1EF5 # LATIN SMALL LETTER Y WITH DOT BELOW
0xFF 0x1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
# compatibility
0xA7 0x00D0 # letter ETH
0xAE 0x00F0

37
Unicode/tr7bit.awk Executable file
View File

@ -0,0 +1,37 @@
#!/bin/awk -f
function hex2dec(xx) {
nn = 0;
while (xx != "") {
aa = substr(xx, 1, 1);
ii = index("0123456789ABCDEF", aa);
if (!ii) ii = index("0123456789abcdef", aa);
if (!ii) return -1;
nn = nn * 16 + ii - 1;
xx = substr(xx, 2);
}
return nn;
}
/^U/{
gsub("\\\\", "\\\\");
printf("0x%s\n", substr($0, 3));
}
/^0x[0-9a-fA-F]*[ ]/{
c = hex2dec(substr($1, 3));
for (i = 2; i <= NF; i++) {
if (substr($i, 1, 1) == "#") break;
if (p = index($i, "-")) {
p1 = hex2dec(substr($i, 3, p - 3));
p2 = hex2dec(substr($i, p + 3));
} else {
p1 = hex2dec(substr($i, 3));
p2 = p1;
}
for (p = p1; p <= p2; p++) printf("0x%04x:%c\n", p, c);
}
}
BEGIN{
printf("0x00a0:\\001\n");
printf("0x202f:\\001\n");
printf("0x00ad:\n");
}

1132
Unicode/upcase.uni Normal file

File diff suppressed because it is too large Load Diff

3
Unicode/utf_8.cp Normal file
View File

@ -0,0 +1,3 @@
Unicode UTF-8
"utf-8", "utf8"
# Handled specially in charsets.c

264
Unicode/viscii.cp Normal file
View File

@ -0,0 +1,264 @@
VISCII
"VISCII", "VISCII-1", "VISCII 1.1", "VISCII-1.1", "VISCII1.1-1"
0x00 0x0000 # NUL
0x00 0x0000 # NULL (NUL)
0x01 0x0001 # START OF HEADING (SOH)
0x02 0x1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
0x03 0x0003 # END OF TEXT (ETX)
0x04 0x0004 # END OF TRANSMISSION (EOT)
0x05 0x1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE
0x06 0x1EAA # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
0x07 0x0007 # BELL (BEL)
0x08 0x0008 # BACKSPACE (BS)
0x09 0x0009 # CHARACTER TABULATION (HT)
0x0A 0x000A # LINE FEED (LF)
0x0B 0x000B # LINE TABULATION (VT)
0x0C 0x000C # FORM FEED (FF)
0x0D 0x000D # CARRIAGE RETURN (CR)
0x0E 0x000E # SHIFT OUT (SO)
0x0F 0x000F # SHIFT IN (SI)
0x10 0x0010 # DATALINK ESCAPE (DLE)
0x11 0x0011 # DEVICE CONTROL ONE (DC1)
0x12 0x0012 # DEVICE CONTROL TWO (DC2)
0x13 0x0013 # DEVICE CONTROL THREE (DC3)
0x14 0x1EF6 # LATIN CAPITAL LETTER Y WITH HOOK ABOVE
0x15 0x0015 # NEGATIVE ACKNOWLEDGE (NAK)
0x16 0x0016 # SYNCHRONOUS IDLE (SYN)
0x17 0x0017 # END OF TRANSMISSION BLOCK (ETB)
0x18 0x0018 # CANCEL (CAN)
0x19 0x1EF8 # LATIN CAPITAL LETTER Y WITH TILDE
0x1A 0x001A # SUBSTITUTE (SUB)
0x1B 0x001B # ESCAPE (ESC)
0x1C 0x001C # FILE SEPARATOR (IS4)
0x1D 0x001D # GROUP SEPARATOR (IS3)
0x1E 0x1EF4 # LATIN CAPITAL LETTER Y WITH DOT BELOW
0x1F 0x001F # UNIT SEPARATOR (IS1)
0x20 0x0020 # SPACE
0x21 0x0021 # EXCLAMATION MARK
0x22 0x0022 # QUOTATION MARK
0x23 0x0023 # NUMBER SIGN
0x24 0x0024 # DOLLAR SIGN
0x25 0x0025 # PERCENT SIGN
0x26 0x0026 # AMPERSAND
0x27 0x0027 # APOSTROPHE
0x28 0x0028 # LEFT PARENTHESIS
0x29 0x0029 # RIGHT PARENTHESIS
0x2A 0x002A # ASTERISK
0x2B 0x002B # PLUS SIGN
0x2C 0x002C # COMMA
0x2D 0x002D # HYPHEN-MINUS
0x2E 0x002E # FULL STOP
0x2F 0x002F # SOLIDUS
0x30 0x0030 # DIGIT ZERO
0x31 0x0031 # DIGIT ONE
0x32 0x0032 # DIGIT TWO
0x33 0x0033 # DIGIT THREE
0x34 0x0034 # DIGIT FOUR
0x35 0x0035 # DIGIT FIVE
0x36 0x0036 # DIGIT SIX
0x37 0x0037 # DIGIT SEVEN
0x38 0x0038 # DIGIT EIGHT
0x39 0x0039 # DIGIT NINE
0x3A 0x003A # COLON
0x3B 0x003B # SEMICOLON
0x3C 0x003C # LESS-THAN SIGN
0x3D 0x003D # EQUALS SIGN
0x3E 0x003E # GREATER-THAN SIGN
0x3F 0x003F # QUESTION MARK
0x40 0x0040 # COMMERCIAL AT
0x41 0x0041 # LATIN CAPITAL LETTER A
0x42 0x0042 # LATIN CAPITAL LETTER B
0x43 0x0043 # LATIN CAPITAL LETTER C
0x44 0x0044 # LATIN CAPITAL LETTER D
0x45 0x0045 # LATIN CAPITAL LETTER E
0x46 0x0046 # LATIN CAPITAL LETTER F
0x47 0x0047 # LATIN CAPITAL LETTER G
0x48 0x0048 # LATIN CAPITAL LETTER H
0x49 0x0049 # LATIN CAPITAL LETTER I
0x4A 0x004A # LATIN CAPITAL LETTER J
0x4B 0x004B # LATIN CAPITAL LETTER K
0x4C 0x004C # LATIN CAPITAL LETTER L
0x4D 0x004D # LATIN CAPITAL LETTER M
0x4E 0x004E # LATIN CAPITAL LETTER N
0x4F 0x004F # LATIN CAPITAL LETTER O
0x50 0x0050 # LATIN CAPITAL LETTER P
0x51 0x0051 # LATIN CAPITAL LETTER Q
0x52 0x0052 # LATIN CAPITAL LETTER R
0x53 0x0053 # LATIN CAPITAL LETTER S
0x54 0x0054 # LATIN CAPITAL LETTER T
0x55 0x0055 # LATIN CAPITAL LETTER U
0x56 0x0056 # LATIN CAPITAL LETTER V
0x57 0x0057 # LATIN CAPITAL LETTER W
0x58 0x0058 # LATIN CAPITAL LETTER X
0x59 0x0059 # LATIN CAPITAL LETTER Y
0x5A 0x005A # LATIN CAPITAL LETTER Z
0x5B 0x005B # LEFT SQUARE BRACKET
0x5C 0x005C # REVERSE SOLIDUS
0x5D 0x005D # RIGHT SQUARE BRACKET
0x5E 0x005E # CIRCUMFLEX ACCENT
0x5F 0x005F # LOW LINE
0x60 0x0060 # GRAVE ACCENT
0x61 0x0061 # LATIN SMALL LETTER A
0x62 0x0062 # LATIN SMALL LETTER B
0x63 0x0063 # LATIN SMALL LETTER C
0x64 0x0064 # LATIN SMALL LETTER D
0x65 0x0065 # LATIN SMALL LETTER E
0x66 0x0066 # LATIN SMALL LETTER F
0x67 0x0067 # LATIN SMALL LETTER G
0x68 0x0068 # LATIN SMALL LETTER H
0x69 0x0069 # LATIN SMALL LETTER I
0x6A 0x006A # LATIN SMALL LETTER J
0x6B 0x006B # LATIN SMALL LETTER K
0x6C 0x006C # LATIN SMALL LETTER L
0x6D 0x006D # LATIN SMALL LETTER M
0x6E 0x006E # LATIN SMALL LETTER N
0x6F 0x006F # LATIN SMALL LETTER O
0x70 0x0070 # LATIN SMALL LETTER P
0x71 0x0071 # LATIN SMALL LETTER Q
0x72 0x0072 # LATIN SMALL LETTER R
0x73 0x0073 # LATIN SMALL LETTER S
0x74 0x0074 # LATIN SMALL LETTER T
0x75 0x0075 # LATIN SMALL LETTER U
0x76 0x0076 # LATIN SMALL LETTER V
0x77 0x0077 # LATIN SMALL LETTER W
0x78 0x0078 # LATIN SMALL LETTER X
0x79 0x0079 # LATIN SMALL LETTER Y
0x7A 0x007A # LATIN SMALL LETTER Z
0x7B 0x007B # LEFT CURLY BRACKET
0x7C 0x007C # VERTICAL LINE
0x7D 0x007D # RIGHT CURLY BRACKET
0x7E 0x007E # TILDE
0x7F 0x007F # DELETE (DEL)
0x80 0x1EA0 # LATIN CAPITAL LETTER A WITH DOT BELOW
0x81 0x1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
0x82 0x1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
0x83 0x1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
0x84 0x1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
0x85 0x1EA6 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
0x86 0x1EA8 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
0x87 0x1EAC # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
0x88 0x1EBC # LATIN CAPITAL LETTER E WITH TILDE
0x89 0x1EB8 # LATIN CAPITAL LETTER E WITH DOT BELOW
0x8A 0x1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
0x8B 0x1EC0 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
0x8C 0x1EC2 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
0x8D 0x1EC4 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
0x8E 0x1EC6 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
0x8F 0x1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
0x90 0x1ED2 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
0x91 0x1ED4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
0x92 0x1ED6 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
0x93 0x1ED8 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
0x94 0x1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
0x95 0x1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE
0x96 0x1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE
0x97 0x1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
0x98 0x1ECA # LATIN CAPITAL LETTER I WITH DOT BELOW
0x99 0x1ECE # LATIN CAPITAL LETTER O WITH HOOK ABOVE
0x9A 0x1ECC # LATIN CAPITAL LETTER O WITH DOT BELOW
0x9B 0x1EC8 # LATIN CAPITAL LETTER I WITH HOOK ABOVE
0x9C 0x1EE6 # LATIN CAPITAL LETTER U WITH HOOK ABOVE
0x9D 0x0168 # LATIN CAPITAL LETTER U WITH TILDE
0x9E 0x1EE4 # LATIN CAPITAL LETTER U WITH DOT BELOW
0x9F 0x1EF2 # LATIN CAPITAL LETTER Y WITH GRAVE
0xA0 0x00D5 # LATIN CAPITAL LETTER O WITH TILDE
0xA1 0x1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE
0xA2 0x1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE
0xA3 0x1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
0xA4 0x1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
0xA5 0x1EA7 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
0xA6 0x1EA9 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
0xA7 0x1EAD # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
0xA8 0x1EBD # LATIN SMALL LETTER E WITH TILDE
0xA9 0x1EB9 # LATIN SMALL LETTER E WITH DOT BELOW
0xAA 0x1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
0xAB 0x1EC1 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
0xAC 0x1EC3 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
0xAD 0x1EC5 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
0xAE 0x1EC7 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
0xAF 0x1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
0xB0 0x1ED3 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
0xB1 0x1ED5 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
0xB2 0x1ED7 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
0xB3 0x1EE0 # LATIN CAPITAL LETTER O WITH HOOK AND TILDE
0xB4 0x01A0 # LATIN CAPITAL LETTER O WITH HOOK
0xB5 0x1ED9 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
0xB6 0x1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE
0xB7 0x1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
0xB8 0x1ECB # LATIN SMALL LETTER I WITH DOT BELOW
0xB9 0x1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
0xBA 0x1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE
0xBB 0x1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE
0xBC 0x1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
0xBD 0x01A1 # LATIN SMALL LETTER O WITH HORN
0xBE 0x1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE
0xBF 0x01AF # LATIN CAPITAL LETTER U WITH HORN
0xC0 0x00C0 # LATIN CAPITAL LETTER A WITH GRAVE
0xC1 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE
0xC2 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
0xC3 0x00C3 # LATIN CAPITAL LETTER A WITH TILDE
0xC4 0x1EA2 # LATIN CAPITAL LETTER A WITH HOOK ABOVE
0xC5 0x0102 # LATIN CAPITAL LETTER A WITH BREVE
0xC6 0x1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
0xC7 0x1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE
0xC8 0x00C8 # LATIN CAPITAL LETTER E WITH GRAVE
0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE
0xCA 0x00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
0xCB 0x1EBA # LATIN CAPITAL LETTER E WITH HOOK ABOVE
0xCC 0x00CC # LATIN CAPITAL LETTER I WITH GRAVE
0xCD 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE
0xCE 0x0128 # LATIN CAPITAL LETTER I WITH TILDE
0xCF 0x1EF3 # LATIN SMALL LETTER Y WITH GRAVE
0xD0 0x0110 # LATIN CAPITAL LETTER D WITH STROKE
0xD1 0x1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE
0xD2 0x00D2 # LATIN CAPITAL LETTER O WITH GRAVE
0xD3 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE
0xD4 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
0xD5 0x1EA1 # LATIN SMALL LETTER A WITH DOT BELOW
0xD6 0x1EF7 # LATIN SMALL LETTER Y WITH HOOK ABOVE
0xD7 0x1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE
0xD8 0x1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
0xD9 0x00D9 # LATIN CAPITAL LETTER U WITH GRAVE
0xDA 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE
0xDB 0x1EF9 # LATIN SMALL LETTER Y WITH TILDE
0xDC 0x1EF5 # LATIN SMALL LETTER Y WITH DOT BELOW
0xDD 0x00DD # LATIN CAPITAL LETTER Y WITH ACUTE
0xDE 0x1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE
0xDF 0x01B0 # LATIN SMALL LETTER U WITH HORN
0xE0 0x00E0 # LATIN SMALL LETTER A WITH GRAVE
0xE1 0x00E1 # LATIN SMALL LETTER A WITH ACUTE
0xE2 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX
0xE3 0x00E3 # LATIN SMALL LETTER A WITH TILDE
0xE4 0x1EA3 # LATIN SMALL LETTER A WITH HOOK ABOVE
0xE5 0x0103 # LATIN SMALL LETTER A WITH BREVE
0xE6 0x1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE
0xE7 0x1EAB # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
0xE8 0x00E8 # LATIN SMALL LETTER E WITH GRAVE
0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE
0xEA 0x00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX
0xEB 0x1EBB # LATIN SMALL LETTER E WITH HOOK ABOVE
0xEC 0x00EC # LATIN SMALL LETTER I WITH GRAVE
0xED 0x00ED # LATIN SMALL LETTER I WITH ACUTE
0xEE 0x0129 # LATIN SMALL LETTER I WITH TILDE
0xEF 0x1EC9 # LATIN SMALL LETTER I WITH HOOK ABOVE
0xF0 0x0111 # LATIN SMALL LETTER D WITH STROKE
0xF1 0x1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW
0xF2 0x00F2 # LATIN SMALL LETTER O WITH GRAVE
0xF3 0x00F3 # LATIN SMALL LETTER O WITH ACUTE
0xF4 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX
0xF5 0x00F5 # LATIN SMALL LETTER O WITH TILDE
0xF6 0x1ECF # LATIN SMALL LETTER O WITH HOOK ABOVE
0xF7 0x1ECD # LATIN SMALL LETTER O WITH DOT BELOW
0xF8 0x1EE5 # LATIN SMALL LETTER U WITH DOT BELOW
0xF9 0x00F9 # LATIN SMALL LETTER U WITH GRAVE
0xFA 0x00FA # LATIN SMALL LETTER U WITH ACUTE
0xFB 0x0169 # LATIN SMALL LETTER U WITH TILDE
0xFC 0x1EE7 # LATIN SMALL LETTER U WITH HOOK ABOVE
0xFD 0x00FD # LATIN SMALL LETTER Y WITH ACUTE
0xFE 0x1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW
0xFF 0x1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE
# compatibility
0xD0 0x00D0 # letter ETH
0xF0 0x00F0

245
acconfig.h Normal file
View File

@ -0,0 +1,245 @@
@BOTTOM@
/* */
#undef VERSION
/* */
#undef HAVE_OPENMP
/* */
#undef HAVE_LONG_LONG
/* */
#undef HAVE_POINTER_COMPARISON_BUG
/* */
#undef HAVE_MAXINT_CONVERSION_BUG
/* */
#undef HAVE_STDLIB_H_X
/* */
#undef HAVE_SOCKLEN_T
/* */
#undef HAVE_VOLATILE
/* */
#undef HAVE_RESTRICT
/* */
#undef HAVE___RESTRICT
/* */
#undef HAVE_ERRNO
/* */
#undef C_BIG_ENDIAN
/* */
#undef C_LITTLE_ENDIAN
/* */
#undef RENAME_OVER_EXISTING_FILES
/* */
#undef HAVE_STRLEN
/* */
#undef HAVE_STRNLEN
/* */
#undef HAVE_STRCPY
/* */
#undef HAVE_STRNCPY
/* */
#undef HAVE_STRCHR
/* */
#undef HAVE_STRRCHR
/* */
#undef HAVE_STRCMP
/* */
#undef HAVE_STRNCMP
/* */
#undef HAVE_STRCSPN
/* */
#undef HAVE_STRSPN
/* */
#undef HAVE_STRSTR
/* */
#undef HAVE_MEMCMP
/* */
#undef HAVE_MEMCHR
/* */
#undef HAVE_MEMRCHR
/* */
#undef HAVE_MEMCPY
/* */
#undef HAVE_MEMMOVE
/* */
#undef HAVE_MEMSET
/* */
#undef HAVE_MEMMEM
/* */
#undef HAVE_STRERROR
/* */
#undef HAVE_SIGFILLSET
/* */
#undef HAVE_SIGSETJMP
/* */
#undef HAVE_GCC_ASSEMBLER
/* */
#undef HAVE___BUILTIN_ADD_OVERFLOW
/* */
#undef HAVE___BUILTIN_CLZ
/* */
#undef DEBUGLEVEL
/* */
#undef HAVE_CLOCK_GETTIME
/* */
#undef HAVE_GETHOSTBYNAME
/* */
#undef HAVE_GETHOSTBYNAME_BUG
/* */
#undef SUPPORT_IPV6
/* */
#undef SUPPORT_IPV6_SCOPE
/* */
#undef HAVE_POW
/* */
#undef HAVE_POWF
/* */
#undef JS
/* */
#undef CHCEME_FLEXI_LIBU
/* */
#undef HAVE_PCRE
/* */
#undef HAVE_REGEX
/* */
#undef ENABLE_UTF8
/* */
#undef HAVE_BEGINTHREAD
/* */
#undef HAVE_PTHREADS
/* */
#undef X2
/* */
#undef HAVE_XSETLOCALE
/* */
#undef HAVE_SSL
/* */
#undef HAVE_OPENSSL
/* */
#undef HAVE_NSS
/* */
#undef HAVE_CRYPTO_SET_MEM_FUNCTIONS_1
/* */
#undef HAVE_CRYPTO_SET_MEM_FUNCTIONS_2
/* */
#undef HAVE_ZLIB
/* */
#undef HAVE_BROTLI
/* */
#undef HAVE_ZSTD
/* */
#undef HAVE_BZIP2
/* */
#undef HAVE_LZMA
/* */
#undef HAVE_LZIP
/* */
#undef G
/* */
#undef GRDRV_SVGALIB
/* */
#undef GRDRV_FB
/* */
#undef GRDRV_DIRECTFB
/* */
#undef GRDRV_X
/* */
#undef GRDRV_SDL
/* */
#undef GRDRV_PMSHELL
/* */
#undef GRDRV_ATHEOS
/* */
#undef GRDRV_HAIKU
/* */
#undef GRDRV_GRX
/* Have freetype */
#undef HAVE_FREETYPE
/* Jpeg by Clock */
#undef HAVE_JPEG
/* Tiff by Brain */
#undef HAVE_TIFF
/* SVG */
#undef HAVE_SVG
/* Gpm_Event has wdx and wdy */
#undef HAVE_WDX_WDY

228
aclocal.m4 vendored Normal file
View File

@ -0,0 +1,228 @@
dnl aclocal.m4 generated automatically by aclocal 1.4-p6
dnl Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl This program is distributed in the hope that it will be useful,
dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without
dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A
dnl PARTICULAR PURPOSE.
# Do all the work for Automake. This macro actually does too much --
# some checks are only needed if your package does certain things.
# But this isn't really a big deal.
# serial 1
dnl Usage:
dnl AM_INIT_AUTOMAKE(package,version, [no-define])
AC_DEFUN([AM_INIT_AUTOMAKE],
[AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
AC_REQUIRE([AC_PROG_INSTALL])
PACKAGE=[$1]
AC_SUBST(PACKAGE)
VERSION=[$2]
AC_SUBST(VERSION)
dnl test to see if srcdir already configured
if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
fi
ifelse([$3],,
AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package]))
AC_REQUIRE([AM_SANITY_CHECK])
AC_REQUIRE([AC_ARG_PROGRAM])
dnl FIXME This is truly gross.
missing_dir=`cd $ac_aux_dir && pwd`
AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}, $missing_dir)
AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}, $missing_dir)
AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
AC_REQUIRE([AC_PROG_MAKE_SET])])
# Copyright 2002 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
# AM_AUTOMAKE_VERSION(VERSION)
# ----------------------------
# Automake X.Y traces this macro to ensure aclocal.m4 has been
# generated from the m4 files accompanying Automake X.Y.
AC_DEFUN([AM_AUTOMAKE_VERSION],[am__api_version="1.4"])
# AM_SET_CURRENT_AUTOMAKE_VERSION
# -------------------------------
# Call AM_AUTOMAKE_VERSION so it can be traced.
# This function is AC_REQUIREd by AC_INIT_AUTOMAKE.
AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
[AM_AUTOMAKE_VERSION([1.4-p6])])
#
# Check to make sure that the build environment is sane.
#
AC_DEFUN([AM_SANITY_CHECK],
[AC_MSG_CHECKING([whether build environment is sane])
# Just in case
sleep 1
echo timestamp > conftestfile
# Do `set' in a subshell so we don't clobber the current shell's
# arguments. Must try -L first in case configure is actually a
# symlink; some systems play weird games with the mod time of symlinks
# (eg FreeBSD returns the mod time of the symlink's containing
# directory).
if (
set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null`
if test "[$]*" = "X"; then
# -L didn't work.
set X `ls -t $srcdir/configure conftestfile`
fi
if test "[$]*" != "X $srcdir/configure conftestfile" \
&& test "[$]*" != "X conftestfile $srcdir/configure"; then
# If neither matched, then we have a broken ls. This can happen
# if, for instance, CONFIG_SHELL is bash and it inherits a
# broken ls alias from the environment. This has actually
# happened. Such a system could not be considered "sane".
AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
alias in your environment])
fi
test "[$]2" = conftestfile
)
then
# Ok.
:
else
AC_MSG_ERROR([newly created file is older than distributed files!
Check your system clock])
fi
rm -f conftest*
AC_MSG_RESULT(yes)])
dnl AM_MISSING_PROG(NAME, PROGRAM, DIRECTORY)
dnl The program must properly implement --version.
AC_DEFUN([AM_MISSING_PROG],
[AC_MSG_CHECKING(for working $2)
# Run test in a subshell; some versions of sh will print an error if
# an executable is not found, even if stderr is redirected.
# Redirect stdin to placate older versions of autoconf. Sigh.
if ($2 --version) < /dev/null > /dev/null 2>&1; then
$1=$2
AC_MSG_RESULT(found)
else
$1="$3/missing $2"
AC_MSG_RESULT(missing)
fi
AC_SUBST($1)])
# Like AC_CONFIG_HEADER, but automatically create stamp file.
AC_DEFUN([AM_CONFIG_HEADER],
[AC_PREREQ([2.12])
AC_CONFIG_HEADER([$1])
dnl When config.status generates a header, we must update the stamp-h file.
dnl This file resides in the same directory as the config header
dnl that is generated. We must strip everything past the first ":",
dnl and everything past the last "/".
AC_OUTPUT_COMMANDS(changequote(<<,>>)dnl
ifelse(patsubst(<<$1>>, <<[^ ]>>, <<>>), <<>>,
<<test -z "<<$>>CONFIG_HEADERS" || echo timestamp > patsubst(<<$1>>, <<^\([^:]*/\)?.*>>, <<\1>>)stamp-h<<>>dnl>>,
<<am_indx=1
for am_file in <<$1>>; do
case " <<$>>CONFIG_HEADERS " in
*" <<$>>am_file "*<<)>>
echo timestamp > `echo <<$>>am_file | sed -e 's%:.*%%' -e 's%[^/]*$%%'`stamp-h$am_indx
;;
esac
am_indx=`expr "<<$>>am_indx" + 1`
done<<>>dnl>>)
changequote([,]))])
dnl PKG_CHECK_MODULES(GSTUFF, gtk+-2.0 >= 1.3 glib = 1.3.4, action-if, action-not)
dnl defines GSTUFF_LIBS, GSTUFF_CFLAGS, see pkg-config man page
dnl also defines GSTUFF_PKG_ERRORS on error
AC_DEFUN(PKG_CHECK_MODULES, [
succeeded=no
if test -z "$PKG_CONFIG"; then
AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
fi
if test "$PKG_CONFIG" = "no" ; then
echo "*** The pkg-config script could not be found. Make sure it is"
echo "*** in your path, or set the PKG_CONFIG environment variable"
echo "*** to the full path to pkg-config."
echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config."
else
PKG_CONFIG_MIN_VERSION=0.9.0
if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
AC_MSG_CHECKING(for $2)
if $PKG_CONFIG --exists "$2" ; then
AC_MSG_RESULT(yes)
succeeded=yes
AC_MSG_CHECKING($1_CFLAGS)
$1_CFLAGS=`$PKG_CONFIG --cflags "$2"`
AC_MSG_RESULT($$1_CFLAGS)
AC_MSG_CHECKING($1_LIBS)
$1_LIBS=`$PKG_CONFIG --libs "$2"`
AC_MSG_RESULT($$1_LIBS)
else
$1_CFLAGS=""
$1_LIBS=""
## If we have a custom action on failure, don't print errors, but
## do set a variable so people can do so.
$1_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"`
ifelse([$4], ,echo $$1_PKG_ERRORS,)
fi
AC_SUBST($1_CFLAGS)
AC_SUBST($1_LIBS)
else
echo "*** Your version of pkg-config is too old. You need version $PKG_CONFIG_MIN_VERSION or newer."
echo "*** See http://www.freedesktop.org/software/pkgconfig"
fi
fi
if test $succeeded = yes; then
ifelse([$3], , :, [$3])
else
ifelse([$4], , AC_MSG_ERROR([Library requirements ($2) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them.]), [$4])
fi
])
# Define a conditional.
AC_DEFUN([AM_CONDITIONAL],
[AC_SUBST($1_TRUE)
AC_SUBST($1_FALSE)
if $2; then
$1_TRUE=
$1_FALSE='#'
else
$1_TRUE='#'
$1_FALSE=
fi])

312
af_unix.c Normal file
View File

@ -0,0 +1,312 @@
/* af_unix.c
* (c) 2002 Mikulas Patocka
* This file is a part of the Links program, released under GPL
*/
#include "links.h"
#ifndef USE_AF_UNIX
int s_unix_fd = -1;
int bind_to_af_unix(unsigned char *name)
{
return -1;
}
void af_unix_close(void)
{
}
#else
#ifdef OS2
#ifndef HAVE_SYS_UN_H
#define HAVE_SYS_UN_H
#endif
struct os2_sockaddr_un {
u_short sun_family;
char sun_path[108];
};
#define sockaddr_un os2_sockaddr_un
#ifndef AF_UNIX
#define AF_UNIX 1
#endif
#ifndef PF_UNIX
#define PF_UNIX 1
#endif
#elif defined(HAVE_SYS_UN_H)
#include <sys/un.h>
#endif
#if defined(__GNU__)
#define SOCKET_TIMEOUT_HACK
#endif
static void af_unix_connection(void *);
#define ADDR_SIZE 4096
union address {
struct sockaddr s;
#ifdef HAVE_SYS_UN_H
struct sockaddr_un suni;
#endif
struct sockaddr_in sin;
unsigned char buffer[ADDR_SIZE];
};
static union address s_unix;
static union address s_unix_acc;
static socklen_t s_unix_l;
int s_unix_fd = -1;
static int s_unix_master = 0;
#define S2C1_HANDSHAKE_LENGTH 6
#define C2S2_HANDSHAKE_LENGTH sizeof(struct links_handshake)
#define S2C3_HANDSHAKE_LENGTH sizeof(struct links_handshake)
static struct links_handshake {
unsigned char version[30];
unsigned char system_name[32];
unsigned char system_id;
unsigned char sizeof_long;
} links_handshake;
#define HANDSHAKE_WRITE(hndl, sz) \
if ((r = hard_write(hndl, (unsigned char *)&links_handshake, sz)) != (sz))
#define HANDSHAKE_READ(hndl, sz) \
if ((r = hard_read(hndl, (unsigned char *)&received_handshake, sz)) != (sz) || memcmp(&received_handshake, &links_handshake, sz))
#ifdef OS2
static inline int have_pf_unix(void)
{
s_unix_fd = c_socket(PF_UNIX, SOCK_STREAM, 0);
return s_unix_fd >= 0;
}
#endif
#if !defined(HAVE_SYS_UN_H) || defined(OS2)
static inline int get_address_localhost(unsigned char *name)
{
unsigned short port;
if (!name) {
port = LINKS_PORT;
} else if (!strcmp(cast_const_char name, "pmshell")) {
port = LINKS_PORT + 2;
} else {
port = LINKS_PORT;
while (*name) {
port = 257 * port + (*name * 2);
name++;
}
port %= LINKS_G_PORT_LEN;
port += LINKS_G_PORT_START;
port &= ~1;
}
if (anonymous) {
port++;
}
memset(&s_unix, 0, sizeof s_unix);
s_unix.sin.sin_family = AF_INET;
s_unix.sin.sin_port = htons(port);
s_unix.sin.sin_addr.s_addr = htonl(0x7f000001);
s_unix_l = sizeof(struct sockaddr_in);
/*debug("get address %d", port);*/
return PF_INET;
}
#endif
static int get_address(unsigned char *name)
{
#ifdef HAVE_SYS_UN_H
unsigned char *path;
#ifdef OS2
if (!have_pf_unix()) {
return get_address_localhost(name);
}
path = stracpy(cast_uchar "\\socket\\links\\");
#else
if (!links_home) return -1;
path = stracpy(links_home);
#endif
add_to_strn(&path, cast_uchar LINKS_SOCK_NAME);
if (anonymous) {
add_to_strn(&path, cast_uchar LINKS_ANONYMOUS_SOCK_SUFFIX);
}
if (name) {
unsigned char *n = stracpy(name);
check_filename(&n);
add_to_strn(&path, cast_uchar "-");
add_to_strn(&path, n);
mem_free(n);
}
#ifdef OS2
s_unix_l = sizeof(struct sockaddr_un);
#else
s_unix_l = (socklen_t)((unsigned char *)&s_unix.suni.sun_path - (unsigned char *)&s_unix.suni + strlen(cast_const_char path) + 1);
#endif
if (strlen(cast_const_char path) > sizeof(union address) || (size_t)s_unix_l > sizeof(union address)) {
mem_free(path);
return -1;
}
memset(&s_unix, 0, sizeof s_unix);
s_unix.suni.sun_family = AF_UNIX;
strcpy(cast_char s_unix.suni.sun_path, cast_const_char path);
mem_free(path);
return PF_UNIX;
#else
return get_address_localhost(name);
#endif
}
static void unlink_unix(void)
{
#if defined(HAVE_SYS_UN_H) && !defined(OS2)
if (s_unix.s.sa_family == AF_UNIX) {
int rs;
/*debug("unlink: %s", s_unix.suni.sun_path);*/
EINTRLOOP(rs, unlink(s_unix.suni.sun_path));
if (rs) {
/*perror("unlink");*/
}
}
#endif
}
int bind_to_af_unix(unsigned char *name)
{
int u = 0;
int a1 = 1;
int cnt = 0;
int af;
int r;
int rs;
struct links_handshake received_handshake;
memset(&links_handshake, 0, sizeof links_handshake);
safe_strncpy(links_handshake.version, cast_uchar("Links " VERSION_STRING), sizeof links_handshake.version);
safe_strncpy(links_handshake.system_name, system_name, sizeof links_handshake.system_name);
links_handshake.system_id = SYSTEM_ID;
links_handshake.sizeof_long = sizeof(long);
if ((af = get_address(name)) == -1) {
close_socket(&s_unix_fd);
return -1;
}
again:
if (s_unix_fd == -1) {
s_unix_fd = c_socket(af, SOCK_STREAM, 0);
if (s_unix_fd == -1) return -1;
}
#if defined(SOL_SOCKET) && defined(SO_REUSEADDR)
EINTRLOOP(rs, setsockopt(s_unix_fd, SOL_SOCKET, SO_REUSEADDR, (void *)&a1, sizeof a1));
#endif
EINTRLOOP(rs, bind(s_unix_fd, &s_unix.s, s_unix_l));
if (rs) {
/*debug("bind: %d, %s", errno, strerror(errno));*/
if (af == PF_INET && errno == EADDRNOTAVAIL) {
/* do not try to connect if the user has not configured loopback interface */
EINTRLOOP(rs, close(s_unix_fd));
return -1;
}
EINTRLOOP(rs, close(s_unix_fd));
s_unix_fd = c_socket(af, SOCK_STREAM, 0);
if (s_unix_fd == -1) return -1;
#if defined(SOL_SOCKET) && defined(SO_REUSEADDR)
EINTRLOOP(rs, setsockopt(s_unix_fd, SOL_SOCKET, SO_REUSEADDR, (void *)&a1, sizeof a1));
#endif
EINTRLOOP(rs, connect(s_unix_fd, &s_unix.s, s_unix_l));
if (rs) {
retry:
/*debug("connect: %d, %s", errno, strerror(errno));*/
if (++cnt < MAX_BIND_TRIES) {
portable_sleep(100);
EINTRLOOP(rs, close(s_unix_fd));
s_unix_fd = -1;
goto again;
}
#ifdef SOCKET_TIMEOUT_HACK
retry_unlink:
#endif
EINTRLOOP(rs, close(s_unix_fd));
s_unix_fd = -1;
if (!u) {
unlink_unix();
u = 1;
goto again;
}
return -1;
}
#ifdef SOCKET_TIMEOUT_HACK
if (!can_read_timeout(s_unix_fd, AF_UNIX_SOCKET_TIMEOUT))
goto retry_unlink;
#endif
HANDSHAKE_READ(s_unix_fd, S2C1_HANDSHAKE_LENGTH) {
if (r != S2C1_HANDSHAKE_LENGTH) goto retry;
goto close_and_fail;
}
HANDSHAKE_WRITE(s_unix_fd, C2S2_HANDSHAKE_LENGTH)
goto close_and_fail;
HANDSHAKE_READ(s_unix_fd, S2C3_HANDSHAKE_LENGTH)
goto close_and_fail;
return s_unix_fd;
}
EINTRLOOP(rs, listen(s_unix_fd, 100));
if (rs) {
error("ERROR: listen failed: %d", errno);
close_and_fail:
EINTRLOOP(rs, close(s_unix_fd));
s_unix_fd = -1;
return -1;
}
s_unix_master = 1;
set_handlers(s_unix_fd, af_unix_connection, NULL, NULL);
return -1;
}
static void af_unix_connection(void *xxx)
{
socklen_t l = s_unix_l;
int ns;
int r;
int rs;
struct links_handshake received_handshake;
memset(&s_unix_acc, 0, sizeof s_unix_acc);
ns = c_accept(s_unix_fd, &s_unix_acc.s, &l);
if (ns == -1) return;
HANDSHAKE_WRITE(ns, S2C1_HANDSHAKE_LENGTH) {
EINTRLOOP(rs, close(ns));
return;
}
HANDSHAKE_READ(ns, C2S2_HANDSHAKE_LENGTH) {
portable_sleep(100); /* workaround for a race in previous Links version */
EINTRLOOP(rs, close(ns));
return;
}
HANDSHAKE_WRITE(ns, S2C3_HANDSHAKE_LENGTH) {
EINTRLOOP(rs, close(ns));
return;
}
if (!F) {
init_term(ns, ns, win_func);
set_highpri();
}
#ifdef G
else {
gfx_connection(ns);
}
#endif
}
void af_unix_close(void)
{
close_socket(&s_unix_fd);
if (s_unix_master) {
unlink_unix();
s_unix_master = 0;
}
}
#endif

38
arrow.inc Normal file
View File

@ -0,0 +1,38 @@
/* Automatically generated by the program "arrow" (arrow.c) */
enum {arrow_width=32, arrow_height=32, arrow_area=1024};
static_const unsigned int arrow[64]={
0xf0000000U,0x00000000U,
0x9c000000U,0x60000000U,
0x87000000U,0x78000000U,
0xc1c00000U,0x3e000000U,
0x40700000U,0x3f800000U,
0x601c0000U,0x1fe00000U,
0x20070000U,0x1ff80000U,
0x3001c000U,0x0ffe0000U,
0x10007000U,0x0fff8000U,
0x18001c00U,0x07ffe000U,
0x08000700U,0x07fff800U,
0x0c000100U,0x03fffe00U,
0x04000f00U,0x03fff000U,
0x06003c00U,0x01ffc000U,
0x0200f000U,0x01ff0000U,
0x03006000U,0x00ff8000U,
0x01023000U,0x00fdc000U,
0x01831800U,0x007ce000U,
0x00878c00U,0x00787000U,
0x00c6c600U,0x00383800U,
0x004c6300U,0x00301c00U,
0x006c3180U,0x00100e00U,
0x002818c0U,0x00100700U,
0x00380c60U,0x00000380U,
0x00000630U,0x000001c0U,
0x00000318U,0x000000e0U,
0x0000018cU,0x00000070U,
0x000000c6U,0x00000038U,
0x00000063U,0x0000001cU,
0x00000031U,0x0000000eU,
0x0000001bU,0x00000004U,
0x0000000eU,0x00000000U,
};

643
atheos.cpp Normal file
View File

@ -0,0 +1,643 @@
#include "cfg.h"
#ifdef GRDRV_ATHEOS
#include <atheos/threads.h>
#include <gui/view.h>
#include <gui/window.h>
#include <gui/desktop.h>
#include <gui/bitmap.h>
#include <util/locker.h>
#include <util/application.h>
#include <string>
using namespace std;
extern "C" {
#include "links.h"
}
#define WINDOW_TITLE_SIZE 16
#define TOP_PANEL_SIZE 32
#define NEW_WINDOW_X_ADD 16
#define NEW_WINDOW_Y_ADD 16
#define NEW_WINDOW_X_MIN 8
#define NEW_WINDOW_Y_MIN 8
#ifdef debug
#undef debug
#endif
#ifdef debug2
#undef debug2
#endif
#define debug(x)
#define debug2(x)
extern struct graphics_driver atheos_driver;
using namespace os;
class LinksApplication : public Application {
public:
LinksApplication():Application("application/x-vnd.links"){}
virtual bool OkToQuit(){return false;}
};
class LinksView;
class LinksWindow : public Window {
public:
LinksWindow(Rect r);
~LinksWindow();
virtual void FrameSized(const Point &d);
virtual bool OkToQuit();
int resized;
LinksView *view;
};
class LinksView : public View {
public:
LinksView(LinksWindow *w);
~LinksView();
virtual void Paint(const Rect &r);
virtual void MouseDown(const Point &p, uint32 b);
virtual void MouseUp(const Point &p, uint32 b, Message *m);
virtual void MouseMove(const Point &p, int c, uint32 b, Message *m);
virtual void KeyDown(const char *s, const char *rs, uint32 q);
virtual void WheelMoved(const Point &d);
LinksWindow *win;
struct graphics_device *dev;
void d_flush();
int flushing;
int last_x, last_y;
};
#define lv(dev) ((LinksView *)(dev)->driver_data)
#define lock_dev(dev) do { if (lv(dev)->win->Lock()) return; } while (0)
#define lock_dev0(dev) do { if (lv(dev)->win->Lock()) return 0; } while (0)
#define unlock_dev(dev) do { lv(dev)->win->Unlock(); } while (0)
static LinksApplication *ath_links_app;
static Locker *ath_lock = NULL;
static int msg_pipe[2];
static thread_id ath_app_thread_id;
#define rpipe (msg_pipe[0])
#define wpipe (msg_pipe[1])
#define small_color (sizeof(Color32_s) <= sizeof(long))
#define get_color32(c, rgb) Color32_s c((rgb >> 16) & 255, (rgb >> 8) & 255, rgb & 255, 255)
static color_space ath_cs_desktop, ath_cs_bmp;
static int ath_x_size, ath_y_size;
static int ath_y_panel;
static int ath_win_x_size, ath_win_y_size;
static int ath_win_x_pos, ath_win_y_pos;
LinksWindow::LinksWindow(Rect r):Window(r, "links_wnd", "Links")
{
debug2("LINKSWINDOW\n");
resized = 0;
view = NULL;
}
LinksWindow::~LinksWindow()
{
view = NULL;
debug2("~LINKSWINDOW\n");
}
void LinksWindow::FrameSized(const Point &d)
{
resized = 1;
}
bool LinksWindow::OkToQuit()
{
ath_lock->Lock();
Lock();
if (view) if (view->dev) view->dev->keyboard_handler(view->dev, KBD_CTRL_C, 0);
Unlock();
ath_lock->Unlock();
write(wpipe, " ", 1);
/*debug2("key: :%s: :%s: %d %d\n", s, rs, q, c);*/
return false;
}
static void do_flush(void *p_dev)
{
struct graphics_device *dev = (struct graphics_device *)p_dev;
LinksView *v = lv(dev);
v->win->Lock();
v->win->Flush();
v->win->Unlock();
v->flushing = 0;
}
LinksView::LinksView(LinksWindow *w):View(w->GetBounds(), "Links", CF_FOLLOW_ALL, WID_WILL_DRAW | WID_FULL_UPDATE_ON_RESIZE)
{
debug2("LINKSVIEW\n");
(win = w)->AddChild(this);
w->SetFocusChild(this);
w->view = this;
flushing = 0;
last_x = last_y = 0;
}
LinksView::~LinksView()
{
win->view = NULL;
debug2("~LINKSVIEW\n");
}
void LinksView::d_flush()
{
if (flushing) return;
register_bottom_half(do_flush, this->dev);
flushing = 1;
}
#undef select
int ath_select(int n, fd_set *r, fd_set *w, fd_set *e, struct timeval *t)
{
int v;
if (ath_lock) ath_lock->Unlock();
v = select(n, r, w, e, t);
if (ath_lock) {
ath_lock->Lock();
check_bottom_halves();
}
return v;
}
static void ath_get_event(void *dummy)
{
char dummy_buffer[256];
read(rpipe, dummy_buffer, 256);
debug2("GETE\n");
}
static void ath_get_size(struct graphics_device *dev)
{
Rect r = lv(dev)->GetBounds();
dev->size.x1 = dev->size.y1 = 0;
dev->size.x2 = (int)r.Width() + 1;
dev->size.y2 = (int)r.Height() + 1;
}
void LinksView::Paint(const Rect &r)
{
struct rect rr;
win->Unlock();
ath_lock->Lock();
win->Lock();
rr.x1 = (int)r.left;
rr.x2 = (int)r.right + 1;
rr.y1 = (int)r.top;
rr.y2 = (int)r.bottom + 1;
/*debug2("paint: %d %d %d %d\n", rr.x1, rr.x2, rr.y1, rr.y2);*/
if (dev) {
if (!win->resized) dev->redraw_handler(dev, &rr);
else {
ath_get_size(dev);
win->resized = 0;
dev->resize_handler(dev);
}
}
check_bottom_halves();
ath_lock->Unlock();
write(wpipe, " ", 1);
}
void LinksView::MouseDown(const Point &p, uint32 b)
{
win->Unlock();
ath_lock->Lock();
win->Lock();
if (dev) dev->mouse_handler(dev, last_x = (int)p.x, last_y = (int)p.y, B_DOWN | (b == 2 ? B_RIGHT : b == 3 ? B_MIDDLE : B_LEFT));
ath_lock->Unlock();
write(wpipe, " ", 1);
}
void LinksView::MouseUp(const Point &p, uint32 b, Message *m)
{
win->Unlock();
ath_lock->Lock();
win->Lock();
if (dev) dev->mouse_handler(dev, last_x = (int)p.x, last_y = (int)p.y, B_UP | (b == 2 ? B_RIGHT : b == 3 ? B_MIDDLE : B_LEFT));
ath_lock->Unlock();
write(wpipe, " ", 1);
}
void LinksView::MouseMove(const Point &p, int c, uint32 b, Message *m)
{
win->Unlock();
ath_lock->Lock();
win->Lock();
if (dev) dev->mouse_handler(dev, last_x = (int)p.x, last_y = (int)p.y, !b ? B_MOVE : B_DRAG | (b & 1 ? B_LEFT : b & 2 ? B_RIGHT : b & 4 ? B_MIDDLE : B_LEFT));
ath_lock->Unlock();
write(wpipe, " ", 1);
}
void LinksView::WheelMoved(const Point &d)
{
win->Unlock();
ath_lock->Lock();
win->Lock();
if (d.y) if (dev) dev->mouse_handler(dev, last_x, last_y, B_MOVE | (d.y > 0 ? B_WHEELDOWN : B_WHEELUP));
if (d.x) if (dev) dev->mouse_handler(dev, last_x, last_y, B_MOVE | (d.x < 0 ? B_WHEELLEFT : B_WHEELRIGHT));
ath_lock->Unlock();
write(wpipe, " ", 1);
}
void LinksView::KeyDown(const char *s, const char *rs, uint32 q)
{
int c;
unsigned char *ss = q & (QUAL_CTRL | QUAL_ALT) ? (unsigned char *)rs : (unsigned char *)s;
win->Unlock();
ath_lock->Lock();
win->Lock();
GET_UTF_8(ss, c);
switch (c) {
case VK_BACKSPACE: c = KBD_BS; break;
case VK_ENTER: c = KBD_ENTER; break;
case VK_SPACE: c = ' '; break;
case VK_TAB: c = KBD_TAB; break;
case VK_ESCAPE: c = KBD_ESC; break;
case VK_LEFT_ARROW: c = KBD_LEFT; break;
case VK_RIGHT_ARROW: c = KBD_RIGHT; break;
case VK_UP_ARROW: c = KBD_UP; break;
case VK_DOWN_ARROW: c = KBD_DOWN; break;
case VK_INSERT: c = KBD_INS; break;
case VK_DELETE: c = KBD_DEL; break;
case VK_HOME: c = KBD_HOME; break;
case VK_END: c = KBD_END; break;
case VK_PAGE_UP: c = KBD_PAGE_UP; break;
case VK_PAGE_DOWN: c = KBD_PAGE_DOWN; break;
default: if (c < 32) c = 0;
else q &= ~QUAL_SHIFT;
break;
}
if (c) if (dev) dev->keyboard_handler(dev, c, (q & QUAL_SHIFT ? KBD_SHIFT : 0) | (q & QUAL_CTRL ? KBD_CTRL : 0) | (q & QUAL_ALT ? KBD_ALT : 0));
ath_lock->Unlock();
write(wpipe, " ", 1);
/*debug2("key: :%s: :%s: %d %d\n", s, rs, q, c);*/
}
static uint32 ath_app_thread(void *p)
{
ath_links_app->Run();
delete ath_links_app;
return 0;
}
static unsigned char *ath_init_driver(unsigned char *param, unsigned char *display)
{
Desktop *d;
ath_links_app = new LinksApplication();
if (!ath_links_app) {
return stracpy((unsigned char *)"Unable to allocate Application object.\n");
}
ath_lock = new Locker("links_sem", false, false);
if (!ath_lock || ath_lock->Lock()) {
delete ath_links_app;
return stracpy((unsigned char *)"Could not create lock.\n");
}
if (c_pipe(msg_pipe)) {
delete ath_lock; ath_lock = NULL;
delete ath_links_app;
return stracpy((unsigned char *)"Could not create pipe.\n");
}
set_nonblock(rpipe);
set_nonblock(wpipe);
set_handlers(rpipe, ath_get_event, NULL, NULL);
ath_app_thread_id = spawn_thread("links_app", (void *)ath_app_thread, 0, 0, NULL);
if (ath_app_thread_id == -1) {
int r;
EINTRLOOP(r, close(rpipe));
EINTRLOOP(r, close(wpipe));
delete ath_lock; ath_lock = NULL;
delete ath_links_app;
return stracpy((unsigned char *)"Could not spawn thread.\n");
}
resume_thread(ath_app_thread_id);
if ((d = new Desktop)) {
ath_cs_desktop = d->GetColorSpace();
ath_x_size = d->GetResolution().x;
ath_y_size = d->GetResolution().y;
delete d;
} else {
ath_cs_desktop = CS_NO_COLOR_SPACE;
ath_x_size = 640;
ath_y_size = 480;
}
ath_y_panel = WINDOW_TITLE_SIZE;
#ifdef __SYLLABLE__
ath_y_panel += TOP_PANEL_SIZE;
#endif
if (ath_y_panel > ath_y_size) ath_y_panel = 0;
ath_win_y_size = (ath_y_size - ath_y_panel) * 9 / 10;
ath_win_x_size = ath_win_y_size;
/*
debug2("%d %d\n", ath_x_size, ath_y_size);
debug2("%d %d\n", ath_win_x_size, ath_win_y_size);
*/
ath_win_y_pos = (ath_y_size - ath_y_panel - ath_win_y_size) / 2 + ath_y_panel;
ath_win_x_pos = ath_x_size - ath_win_x_size - ath_win_y_pos;
if (/*ath_cs_desktop == CS_RGB32 ||*/ ath_cs_desktop == CS_RGB24 || ath_cs_desktop == CS_RGB16 || ath_cs_desktop == CS_RGB15)
ath_cs_bmp = ath_cs_desktop;
else if (ath_cs_desktop == CS_RGB32 || ath_cs_desktop == CS_RGBA32) ath_cs_bmp = CS_RGB24;
else ath_cs_bmp = CS_RGB15;
switch (ath_cs_bmp) {
case CS_RGB24:
atheos_driver.depth = 0xc3;
break;
case CS_RGB16:
atheos_driver.depth = 0x82;
break;
case CS_RGB15:
atheos_driver.depth = 0x7a;
break;
default:
internal_error("unknown depth");
}
return NULL;
}
static void ath_shutdown_driver()
{
int r;
debug((unsigned char *)"D");
set_handlers(rpipe, NULL, NULL, NULL);
EINTRLOOP(r, close(rpipe));
EINTRLOOP(r, close(wpipe));
ath_lock->Unlock();
debug((unsigned char *)"DD");
ath_links_app->PostMessage(M_TERMINATE);
debug((unsigned char *)"E");
/*delete ath_lock; ath_lock = NULL;*/
debug((unsigned char *)"F");
}
static void ath_after_fork()
{
int r;
EINTRLOOP(r, close(rpipe));
EINTRLOOP(r, close(wpipe));
}
static struct graphics_device *ath_init_device()
{
LinksView *view;
LinksWindow *win;
struct graphics_device *dev = (struct graphics_device *)mem_calloc(sizeof(struct graphics_device));
if (!dev) return NULL;
debug((unsigned char *)"1");
retry:
win = new LinksWindow(Rect(ath_win_x_pos, ath_win_y_pos, ath_win_x_pos + ath_win_x_size, ath_win_y_pos + ath_win_y_size));
debug((unsigned char *)"2");
if (!win) {
if (out_of_memory(0, NULL, 0))
goto retry;
mem_free(dev);
return NULL;
}
debug((unsigned char *)"3");
retry2:
view = new LinksView(win);
if (!view) {
if (out_of_memory(0, NULL, 0))
goto retry2;
delete win;
mem_free(dev);
return NULL;
}
view->dev = dev;
dev->driver_data = view;
ath_get_size(dev);
memcpy(&dev->clip, &dev->size, sizeof(struct rect));
debug((unsigned char *)"4");
win->Show();
win->MakeFocus();
debug((unsigned char *)"5");
ath_win_x_pos += NEW_WINDOW_X_ADD;
ath_win_y_pos += NEW_WINDOW_Y_ADD;
if (ath_win_x_pos + ath_win_x_size > ath_x_size - NEW_WINDOW_X_MIN)
ath_win_x_pos = NEW_WINDOW_X_MIN;
if (ath_win_y_pos + ath_win_y_size > ath_y_size - NEW_WINDOW_Y_MIN)
ath_win_y_pos = ath_y_panel + NEW_WINDOW_Y_MIN;
return dev;
}
static void ath_shutdown_device(struct graphics_device *dev)
{
LinksWindow *win = lv(dev)->win;
unregister_bottom_half(do_flush, dev);
lv(dev)->dev = NULL;
win->PostMessage(M_TERMINATE);
mem_free(dev);
}
static void ath_set_title(struct graphics_device *dev, unsigned char *title)
{
LinksWindow *win = lv(dev)->win;
lock_dev(dev);
win->SetTitle(string((char *)title));
lv(dev)->d_flush();
unlock_dev(dev);
}
static int ath_get_empty_bitmap(struct bitmap *bmp)
{
debug2("bmp\n");
Bitmap *b;
retry:
b = new Bitmap(bmp->x, bmp->y, ath_cs_bmp, Bitmap::SHARE_FRAMEBUFFER);
if (!b) {
if (out_of_memory(0, NULL, 0))
goto retry;
bmp->data = NULL;
bmp->flags = NULL;
return -1;
}
bmp->data = b->LockRaster();
bmp->skip = b->GetBytesPerRow();
bmp->flags = b;
return 0;
}
static void ath_register_bitmap(struct bitmap *bmp)
{
Bitmap *b = (Bitmap *)bmp->flags;
if (!b) return;
b->UnlockRaster();
}
static void *ath_prepare_strip(struct bitmap *bmp, int top, int lines)
{
debug2("preps\n");
Bitmap *b = (Bitmap *)bmp->flags;
if (!b) return NULL;
bmp->data = b->LockRaster();
bmp->skip = b->GetBytesPerRow();
return ((char *)bmp->data) + bmp->skip * top;
}
static void ath_commit_strip(struct bitmap *bmp, int top, int lines)
{
Bitmap *b = (Bitmap *)bmp->flags;
if (!b) return;
b->UnlockRaster();
}
static void ath_unregister_bitmap(struct bitmap *bmp)
{
debug2("unb\n");
Bitmap *b = (Bitmap *)bmp->flags;
if (!b) return;
delete b;
}
static void ath_draw_bitmap(struct graphics_device *dev, struct bitmap *bmp, int x, int y)
{
debug2("drawb\n");
Bitmap *b = (Bitmap *)bmp->flags;
if (!b) return;
CLIP_DRAW_BITMAP
lock_dev(dev);
lv(dev)->DrawBitmap(b, b->GetBounds(), Rect(x, y, x + bmp->x - 1, y + bmp->y - 1));
lv(dev)->d_flush();
unlock_dev(dev);
}
static long ath_get_color(int rgb)
{
if (small_color) {
get_color32(c, rgb);
return *(long *)(void *)&c;
} else return rgb & 0xffffff;
}
static void ath_fill_area(struct graphics_device *dev, int x1, int y1, int x2, int y2, long color)
{
debug2("fill\n");
CLIP_FILL_AREA
lock_dev(dev);
if (small_color)
lv(dev)->FillRect(Rect(x1, y1, x2 - 1, y2 - 1), *(Color32_s *)(void *)&color);
else
lv(dev)->FillRect(Rect(x1, y1, x2 - 1, y2 - 1), get_color32(, color));
lv(dev)->d_flush();
unlock_dev(dev);
}
static void ath_draw_hline(struct graphics_device *dev, int x1, int y, int x2, long color)
{
debug2("hline\n");
CLIP_DRAW_HLINE
lock_dev(dev);
if (small_color)
lv(dev)->SetFgColor(*(Color32_s *)(void *)&color);
else
lv(dev)->SetFgColor(get_color32(, color));
lv(dev)->DrawLine(Point(IPoint(x1, y)), Point(IPoint(x2 - 1, y)));
lv(dev)->d_flush();
unlock_dev(dev);
}
static void ath_draw_vline(struct graphics_device *dev, int x, int y1, int y2, long color)
{
debug2("vline\n");
CLIP_DRAW_VLINE
lock_dev(dev);
if (small_color)
lv(dev)->SetFgColor(*(Color32_s *)(void *)&color);
else
lv(dev)->SetFgColor(get_color32(, color));
lv(dev)->DrawLine(Point(IPoint(x, y1)), Point(IPoint(x, y2 - 1)));
lv(dev)->d_flush();
unlock_dev(dev);
}
static int ath_scroll(struct graphics_device *dev, struct rect_set **ignore, int scx, int scy)
{
debug2("hscroll\n");
lock_dev0(dev);
lv(dev)->ScrollRect(
Rect( dev->clip.x1 - (scx < 0 ? scx : 0),
dev->clip.y1 - (scy < 0 ? scy : 0),
dev->clip.x2 - (scx >= 0 ? scx : 0) - 1,
dev->clip.y2 - (scy >= 0 ? scy : 0) - 1),
Rect( dev->clip.x1 + (scx >= 0 ? scx : 0),
dev->clip.y1 + (scy >= 0 ? scy : 0),
dev->clip.x2 + (scx < 0 ? scx : 0) - 1,
dev->clip.y2 + (scy < 0 ? scy : 0) - 1)
);
lv(dev)->d_flush();
unlock_dev(dev);
return 1;
}
static void ath_set_clip_area(struct graphics_device *dev)
{
debug2("setc\n");
lock_dev(dev);
lv(dev)->SetDrawingRegion(Region(IRect(dev->clip.x1, dev->clip.y1, dev->clip.x2 - 1, dev->clip.y2 - 1)));
unlock_dev(dev);
}
static void ath_flush(struct graphics_device *dev)
{
unregister_bottom_half(do_flush, dev);
do_flush(dev);
}
struct graphics_driver atheos_driver = {
(unsigned char *)"atheos",
ath_init_driver,
ath_init_device,
ath_shutdown_device,
ath_shutdown_driver,
NULL,
ath_after_fork,
NULL,
NULL,
NULL,
NULL,
ath_get_empty_bitmap,
ath_register_bitmap,
ath_prepare_strip,
ath_commit_strip,
ath_unregister_bitmap,
ath_draw_bitmap,
ath_get_color,
ath_fill_area,
ath_draw_hline,
ath_draw_vline,
ath_scroll,
ath_set_clip_area,
ath_flush,
NULL, /* block */
NULL, /* unblock */
NULL, /* set_palette */
NULL, /* get_real_colors */
ath_set_title,
NULL, /* exec */
NULL, /* set_clipboard_text */
NULL, /* get_clipboard_text */
0, /* depth */
0, 0, /* size */
GD_UNICODE_KEYS | GD_NO_OS_SHELL | GD_NO_LIBEVENT,/* flags */
NULL, /* param */
};
#endif

264
auth.c Normal file
View File

@ -0,0 +1,264 @@
#include "links.h"
static struct list_head auth = {&auth, &auth};
struct http_auth {
list_entry_1st
unsigned char *host;
int port;
unsigned char *realm;
unsigned char *user;
unsigned char *password;
unsigned char *directory;
unsigned char *user_password_encoded;
int proxy;
list_entry_last
};
static_const unsigned char base64_chars[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
unsigned char *base64_encode(unsigned char *in, int inlen, unsigned char *prefix, unsigned char *suffix, int line_bits)
{
unsigned char *out, *outstr;
int data_len;
int line_mask = ~0;
int col;
int prefix_len = (int)strlen(cast_const_char prefix);
int suffix_len = (int)strlen(cast_const_char suffix);
if (inlen > MAXINT / 2) overalloc();
data_len = ((inlen + 2) / 3) * 4;
if (line_bits >= 0) {
line_mask = (1 << line_bits) - 1;
data_len += (data_len + line_mask) >> line_bits;
}
outstr = mem_alloc(prefix_len + data_len + suffix_len + 1);
memcpy(outstr, prefix, prefix_len);
out = outstr + prefix_len;
col = 0;
while (inlen >= 3) {
*out++ = base64_chars[ (int)(in[0] >> 2) ];
*out++ = base64_chars[ (int)((in[0] << 4 | in[1] >> 4) & 63) ];
*out++ = base64_chars[ (int)((in[1] << 2 | in[2] >> 6) & 63) ];
*out++ = base64_chars[ (int)(in[2] & 63) ];
inlen -= 3; in += 3;
if (!((col += 4) & line_mask))
*out++ = '\n';
}
if (inlen == 1) {
*out++ = base64_chars[ (int)(in[0] >> 2) ];
*out++ = base64_chars[ (int)(in[0] << 4 & 63) ];
*out++ = '=';
*out++ = '=';
}
if (inlen == 2) {
*out++ = base64_chars[ (int)(in[0] >> 2) ];
*out++ = base64_chars[ (int)((in[0] << 4 | in[1] >> 4) & 63) ];
*out++ = base64_chars[ (int)((in[1] << 2) & 63) ];
*out++ = '=';
}
if (line_bits >= 0 && out > outstr + prefix_len && out[-1] != '\n')
*out++ = '\n';
strcpy(cast_char out, cast_const_char suffix);
/*fprintf(stderr, "%d - %d = %d\n", prefix_len + data_len + suffix_len + 1, strlen(cast_const_char outstr) + 1, prefix_len + data_len + suffix_len - strlen(cast_const_char outstr));*/
return outstr;
}
static unsigned char *basic_encode(unsigned char *user, unsigned char *password)
{
unsigned char *e, *p;
p = stracpy(user);
add_to_strn(&p, cast_uchar ":");
add_to_strn(&p, password);
e = base64_encode(p, (int)strlen(cast_const_char p), cast_uchar "", cast_uchar "", -1);
mem_free(p);
return e;
}
unsigned char *get_auth_realm(unsigned char *url, unsigned char *head, int proxy)
{
unsigned char *ch = head;
unsigned char *h, *q, *r;
int l;
int unknown = 0;
int known = 0;
try_next:
h = parse_http_header(ch, !proxy ? (unsigned char *)"WWW-Authenticate" : (unsigned char *)"Proxy-Authenticate", &ch);
if (!h) {
if (unknown && !known) return NULL;
if (proxy) {
unsigned char *p = get_proxy_string(url);
if (!p) p = cast_uchar "";
return stracpy(p);
} else {
unsigned char *u = get_host_name(url);
if (u) return u;
return stracpy(cast_uchar "");
}
}
if (casecmp(h, cast_uchar "Basic", 5)) {
mem_free(h);
unknown = 1;
goto try_next;
}
known = 1;
q = cast_uchar strchr(cast_const_char h, '"');
if (!q) {
mem_free(h);
goto try_next;
}
q++;
r = init_str();
l = 0;
while (*q && *q != '"') {
if (*q == '\\' && !*++q) break;
add_chr_to_str(&r, &l, *q++);
}
mem_free(h);
return r;
}
static unsigned char *auth_from_url(unsigned char *url, int proxy)
{
unsigned char *r = NULL;
int l = 0;
unsigned char *user, *password;
user = get_user_name(url);
password = get_pass(url);
if (user && *user && password) {
unsigned char *e = basic_encode(user, password);
r = init_str();
if (proxy) add_to_str(&r, &l, cast_uchar "Proxy-");
add_to_str(&r, &l, cast_uchar "Authorization: Basic ");
add_to_str(&r, &l, e);
add_to_str(&r, &l, cast_uchar "\r\n");
mem_free(e);
if (user) mem_free(user);
if (password) mem_free(password);
return r;
}
if (user) mem_free(user);
if (password) mem_free(password);
return NULL;
}
unsigned char *get_auth_string(unsigned char *url, int proxy)
{
struct http_auth *a;
struct list_head *la;
unsigned char *host;
int port;
unsigned char *r = NULL;
int l = 0;
if (proxy && !is_proxy_url(url)) return NULL;
if (!(host = get_host_name(url))) return NULL;
port = get_port(url);
if (!proxy && (r = auth_from_url(url, proxy))) goto have_passwd;
foreach(struct http_auth, a, la, auth) if (a->proxy == proxy && !casestrcmp(a->host, host) && a->port == port) {
unsigned char *d, *data;
if (proxy) goto skip_dir_check;
data = get_url_data(url);
d = cast_uchar strrchr(cast_const_char data, '/');
if (!d) d = data;
else d++;
if ((size_t)(d - data) >= strlen(cast_const_char a->directory) && !memcmp(data, a->directory, strlen(cast_const_char a->directory))) {
skip_dir_check:
r = init_str();
if (proxy) add_to_str(&r, &l, cast_uchar "Proxy-");
add_to_str(&r, &l, cast_uchar "Authorization: Basic ");
add_to_str(&r, &l, a->user_password_encoded);
add_to_str(&r, &l, cast_uchar "\r\n");
goto have_passwd;
}
}
if (proxy && (r = auth_from_url(url, proxy))) goto have_passwd;
have_passwd:
mem_free(host);
return r;
}
static void free_auth_entry(struct http_auth *a)
{
mem_free(a->host);
mem_free(a->realm);
mem_free(a->user);
mem_free(a->password);
if (a->directory) mem_free(a->directory);
mem_free(a->user_password_encoded);
del_from_list(a);
mem_free(a);
}
void free_auth(void)
{
while (!list_empty(auth)) free_auth_entry(list_struct(auth.next, struct http_auth));
}
void add_auth(unsigned char *url, unsigned char *realm, unsigned char *user, unsigned char *password, int proxy)
{
struct http_auth *a;
struct list_head *la;
unsigned char *host = NULL;
int port = 0 /* against warning */;
if (!proxy) {
host = get_host_name(url);
port = get_port(url);
} else {
unsigned char *p = get_proxy(url);
if (strcmp(cast_const_char p, cast_const_char url)) {
host = get_host_name(p);
port = get_port(p);
}
mem_free(p);
}
if (!host) return;
foreach(struct http_auth, a, la, auth) if (a->proxy == proxy && !casestrcmp(a->host, host) && a->port == port && !strcmp(cast_const_char a->realm, cast_const_char realm)) {
la = la->prev;
free_auth_entry(a);
}
a = mem_alloc(sizeof(struct http_auth));
a->host = host;
a->port = port;
a->realm = stracpy(realm);
a->user = stracpy(user);
a->password = stracpy(password);
if (!proxy) {
unsigned char *data = stracpy(get_url_data(url));
unsigned char *d = cast_uchar strrchr(cast_const_char data, '/');
if (d) d[1] = 0;
else data[0] = 0;
a->directory = data;
} else a->directory = NULL;
a->proxy = proxy;
a->user_password_encoded = basic_encode(a->user, a->password);
add_to_list(auth, a);
}
int find_auth(unsigned char *url, unsigned char *realm)
{
struct http_auth *a;
struct list_head *la;
unsigned char *data, *d;
unsigned char *host = get_host_name(url);
int port = get_port(url);
if (!host) return -1;
data = stracpy(get_url_data(url));
d = cast_uchar strrchr(cast_const_char data, '/');
if (d) d[1] = 0;
foreach(struct http_auth, a, la, auth) if (!a->proxy && !casestrcmp(a->host, host) && a->port == port && !strcmp(cast_const_char a->realm, cast_const_char realm) && strcmp(cast_const_char a->directory, cast_const_char data)) {
mem_free(a->directory);
a->directory = data;
mem_free(host);
del_from_list(a);
add_to_list(auth, a);
return 0;
}
mem_free(host);
mem_free(data);
return -1;
}

265
beos.c Normal file
View File

@ -0,0 +1,265 @@
/* beos.c
* (c) 2002 Mikulas Patocka
* This file is a part of the Links program, released under GPL
*/
#if defined(__BEOS__)
#include "com-defs.h"
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/time.h>
#include <netinet/in.h>
#include <be/kernel/OS.h>
#define SHS 128
#ifndef MAXINT
#define MAXINT 0x7fffffff
#endif
#ifdef __HAIKU__
int closesocket(int);
#endif
#include "beos.h"
int be_read(int s, void *ptr, int len)
{
if (s >= SHS) return recv(s - SHS, ptr, len, 0);
return read(s, ptr, len);
}
int be_write(int s, void *ptr, int len)
{
if (s >= SHS) return send(s - SHS, ptr, len, 0);
return write(s, ptr, len);
}
int be_close(int s)
{
if (s >= SHS) return closesocket(s - SHS);
return close(s);
}
int be_socket(int af, int sock, int prot)
{
int h = socket(af, sock, prot);
if (h < 0) return h;
return h + SHS;
}
int be_connect(int s, struct sockaddr *sa, int sal)
{
return connect(s - SHS, sa, sal);
}
int be_getpeername(int s, struct sockaddr *sa, int *sal)
{
return getpeername(s - SHS, sa, sal);
}
int be_getsockname(int s, struct sockaddr *sa, int *sal)
{
return getsockname(s - SHS, sa, sal);
}
int be_listen(int s, int c)
{
return listen(s - SHS, c);
}
int be_accept(int s, struct sockaddr *sa, int *sal)
{
int a = accept(s - SHS, sa, sal);
if (a < 0) return -1;
return a + SHS;
}
int be_bind(int s, struct sockaddr *sa, int sal)
{
/*struct sockaddr_in *sin = (struct sockaddr_in *)sa;
if (!ntohs(sin->sin_port)) {
int i;
for (i = 16384; i < 49152; i++) {
sin->sin_port = htons(i);
if (!be_bind(s, sa, sal)) return 0;
}
return -1;
}*/
if (bind(s - SHS, sa, sal)) return -1;
getsockname(s - SHS, sa, &sal);
return 0;
}
#define PIPE_RETRIES 10
int be_pipe(int fd[2])
{
int s1, s2, s3, l;
struct sockaddr_in sa1, sa2;
int retry_count = 0;
again:
if ((s1 = be_socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) {
/*perror("socket1");*/
goto fatal_retry;
}
if ((s2 = be_socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) {
/*perror("socket2");*/
be_close(s1);
goto fatal_retry;
}
memset(&sa1, 0, sizeof(sa1));
sa1.sin_family = AF_INET;
sa1.sin_port = htons(0);
sa1.sin_addr.s_addr = INADDR_ANY;
if (be_bind(s1, (struct sockaddr *)&sa1, sizeof(sa1))) {
/*perror("bind");*/
clo:
be_close(s1);
be_close(s2);
goto fatal_retry;
}
if (be_listen(s1, 1)) {
/*perror("listen");*/
goto clo;
}
if (be_connect(s2, (struct sockaddr *)&sa1, sizeof(sa1))) {
/*perror("connect");*/
goto clo;
}
l = sizeof(sa2);
if ((s3 = be_accept(s1, (struct sockaddr *)&sa2, &l)) < 0) {
/*perror("accept");*/
goto clo;
}
be_getsockname(s3, (struct sockaddr *)&sa1, &l);
if (sa1.sin_addr.s_addr != sa2.sin_addr.s_addr) {
be_close(s3);
goto clo;
}
be_close(s1);
fd[0] = s2;
fd[1] = s3;
return 0;
fatal_retry:
if (++retry_count > PIPE_RETRIES) return -1;
sleep(1);
goto again;
}
int be_select(int n, struct fd_set *rd, struct fd_set *wr, struct fd_set *exc, struct timeval *tm)
{
int i, s;
struct fd_set d, rrd;
retry:
FD_ZERO(&d);
if (!rd) rd = &d;
if (!wr) wr = &d;
if (!exc) exc = &d;
if (n >= FD_SETSIZE) n = FD_SETSIZE;
FD_ZERO(exc);
for (i = 0; i < n; i++) if ((i < SHS && FD_ISSET(i, rd)) || FD_ISSET(i, wr)) {
for (i = SHS; i < n; i++) FD_CLR(i, rd);
return MAXINT;
}
FD_ZERO(&rrd);
for (i = SHS; i < n; i++) if (FD_ISSET(i, rd)) FD_SET(i - SHS, &rrd);
if ((s = select(FD_SETSIZE, &rrd, &d, &d, tm)) < 0) {
if (errno == EINTR) goto retry;
FD_ZERO(rd);
return 0;
}
FD_ZERO(rd);
for (i = SHS; i < n; i++) if (FD_ISSET(i - SHS, &rrd)) FD_SET(i, rd);
return s;
}
#ifndef SO_ERROR
#define SO_ERROR 10001
#endif
int be_getsockopt(int s, int level, int optname, void *optval, int *optlen)
{
if (optname == SO_ERROR && *optlen >= sizeof(int)) {
*(int *)optval = 0;
*optlen = sizeof(int);
return 0;
}
return -1;
}
static int ihpipe[2];
static int inth;
static void input_handle_th(void *p)
{
char c;
int b = 0;
setsockopt(ihpipe[1], SOL_SOCKET, SO_NONBLOCK, &b, sizeof(b));
while (1) if (read(0, &c, 1) == 1) be_write(ihpipe[1], &c, 1);
}
int get_input_handle(void)
{
static int h = -1;
if (h >= 0) return h;
if (be_pipe(ihpipe) < 0) return -1;
if ((inth = start_thr(input_handle_th, NULL, "input_thread")) < 0) {
closesocket(ihpipe[0]);
closesocket(ihpipe[1]);
fatal_exit("Can't spawn input thread");
}
return h = ihpipe[0];
}
void block_stdin(void)
{
suspend_thread(inth);
}
void unblock_stdin(void)
{
resume_thread(inth);
}
/*int ohpipe[2];
#define O_BUF 16384
static void output_handle_th(void *p)
{
char *c = malloc(O_BUF);
int r, b = 0;
if (!c) return;
setsockopt(ohpipe[1], SOL_SOCKET, SO_NONBLOCK, &b, sizeof(b));
while ((r = be_read(ohpipe[0], c, O_BUF)) > 0) write(1, c, r);
free(c);
}
int get_output_handle(void)
{
static int h = -1;
if (h >= 0) return h;
if (be_pipe(ohpipe) < 0) return -1;
if (start_thr(output_handle_th, NULL, "output_thread") < 0) {
closesocket(ohpipe[0]);
closesocket(ohpipe[1]);
fatal_exit("Can't spawn output thread");
}
return h = ohpipe[1];
}*/
#else
typedef int beos_c_no_empty_unit;
#endif

21
beos.h Normal file
View File

@ -0,0 +1,21 @@
int be_socket(int, int, int);
int be_connect(int, struct sockaddr *, int);
int be_getpeername(int, struct sockaddr *, int *);
int be_getsockname(int, struct sockaddr *, int *);
int be_listen(int, int);
int be_accept(int, struct sockaddr *, int *);
int be_bind(int, struct sockaddr *, int);
int be_pipe(int [2]);
int be_read(int, void *, int);
int be_write(int, void *, int);
int be_close(int);
int be_select(int, struct fd_set *, struct fd_set *, struct fd_set *, struct timeval *);
int be_getsockopt(int, int, int, void *, int *);
int start_thr(void (*fn)(void *), void *data, unsigned char *name);
int get_input_handle(void);
void block_stdin(void);
void unblock_stdin(void);
void fatal_exit(const char *, ...);

2512
bfu.c Normal file

File diff suppressed because it is too large Load Diff

55
bits.h Normal file
View File

@ -0,0 +1,55 @@
/* bits.h
* (c) 2002 Karel 'Clock' Kulhavy
* This file is a part of the Links program, released under GPL.
*/
/* t2c
* Type that has exactly 2 chars.
* If there is none, t2c is not defined
* The type may be signed or unsigned, it doesn't matter
*/
#if SIZEOF_UNSIGNED_SHORT == 2
#define t2c unsigned short
#elif SIZEOF_UNSIGNED == 2
#define t2c unsigned
#elif SIZEOF_UNSIGNED_LONG == 2
#define t2c unsigned long
#elif defined(SIZEOF_UNSIGNED_LONG_LONG) && SIZEOF_UNSIGNED_LONG_LONG == 2
#define t2c unsigned long long
#endif /* #if sizeof(short) */
/* t4c
* Type that has exactly 4 chars.
* If there is none, t4c is not defined
* The type may be signed or unsigned, it doesn't matter
*/
#if SIZEOF_UNSIGNED_SHORT == 4
#define t4c unsigned short
#elif SIZEOF_UNSIGNED == 4
#define t4c unsigned
#elif SIZEOF_UNSIGNED_LONG == 4
#define t4c unsigned long
#elif defined(SIZEOF_UNSIGNED_LONG_LONG) && SIZEOF_UNSIGNED_LONG_LONG == 4
#define t4c unsigned long long
#endif /* #if sizeof(short) */
/* t8c
* Type that has exactly 8 chars.
* If there is none, t8c is not defined
* The type may be signed or unsigned, it doesn't matter
*/
#if SIZEOF_UNSIGNED_SHORT == 8
#define t8c unsigned short
#elif SIZEOF_UNSIGNED == 8
#define t8c unsigned
#elif SIZEOF_UNSIGNED_LONG == 8
#define t8c unsigned long
#elif defined(SIZEOF_UNSIGNED_LONG_LONG) && SIZEOF_UNSIGNED_LONG_LONG == 8
#define t8c unsigned long long
#endif /* #if sizeof(short) */
#ifdef t8c
#if SIZEOF_UNSIGNED_LONG >= 8 || defined(__x86_64__) || defined(__aarch64__)
#define t8c_is_efficient
#endif
#endif

357
block.c Normal file
View File

@ -0,0 +1,357 @@
#include "links.h"
static struct list *block_new_item(void *ignore);
static void block_delete_item(struct list *data);
static void block_copy_item(struct list *in, struct list *out);
static unsigned char *block_type_item(struct terminal *term, struct list *data, int x);
static void block_edit_item(struct dialog_data *dlg, struct list *data, void (*ok_fn)(struct dialog_data *, struct list *, struct list *, struct list_description *), struct list *ok_arg, unsigned char dlg_title);
static struct list *block_find_item(struct list *start, unsigned char *str, int direction);
static struct history block_search_histroy = { 0, {&block_search_histroy.items, &block_search_histroy.items} };
struct list blocks = { init_list_1st(&blocks.list_entry) 0, -1, NULL, init_list_last(&blocks.list_entry) };
static struct list_description blocks_ld = {
0, /* flat */
&blocks, /* list head */
block_new_item,
block_edit_item,
NULL,
block_delete_item,
block_copy_item,
block_type_item,
block_find_item,
&block_search_histroy,
0, /* this is set in init_assoc function */
15, /* # of items in main window */
T_BLOCKED_IMAGE, /* item title */
T_BLOCK_LIST_IN_USE, /* Already open message */
T_BLOCK_LIST_MANAGER, /* Window title */
T_BLOCK_DELETE,
0, /* no button */
NULL, /* no button */
NULL, /* no save */
NULL, NULL, 0, 0, /* internal vars */
0, /* modified */
NULL,
NULL,
0,
};
static struct list *block_new_item(void *ignore)
{
/*Default constructor*/
struct block *neww;
neww = mem_alloc(sizeof(struct block));
neww->url = stracpy(cast_uchar "");
return &neww->head;
}
static void block_delete_item(struct list *data)
{
/*Destructor */
struct block *del = get_struct(data, struct block, head);
if (del->head.list_entry.next) del_from_list(&del->head);
mem_free(del->url);
mem_free(del);
}
static void block_copy_item(struct list *in, struct list *out)
{
/*Copy construction */
struct block *item_in = get_struct(in, struct block, head);
struct block *item_out = get_struct(out, struct block, head);
mem_free(item_out->url);
item_out->url = stracpy(item_in->url);
}
/*This is used to display the items in the menu*/
static unsigned char *block_type_item(struct terminal *term, struct list *data, int x)
{
unsigned char *txt, *txt1;
struct block *item;
if (data == &blocks) return stracpy(get_text_translation(TEXT_(T_BLOCK_LIST), term));
item = get_struct(data, struct block, head);
txt = stracpy(item->url);
/*I have no idea what this does, but it os copied from working code in types.c*/
txt1 = convert(blocks_ld.codepage, term_charset(term), txt, NULL);
mem_free(txt);
return txt1;
}
struct assoc_ok_struct {
void (*fn)(struct dialog_data *, struct list *, struct list *, struct list_description *);
struct list *data;
struct dialog_data *dlg;
};
/* destroys an item, this function is called when edit window is aborted */
static void block_edit_abort(struct dialog_data *data)
{
struct block *item = (struct block *)data->dlg->udata;
struct dialog *dlg = data->dlg;
mem_free(dlg->udata2);
if (item) block_delete_item(&item->head);
}
/* Puts url into the block list */
static void block_edit_done(void *data)
{
/*Copied from types.c*/
struct dialog *d = (struct dialog *)data;
struct block *item = (struct block *)d->udata;
struct assoc_ok_struct *s = (struct assoc_ok_struct *)d->udata2;
unsigned char *txt;
unsigned char *url;
/*See block_edit_item*/
url = (unsigned char *)&d->items[4];
txt = convert(term_charset(s->dlg->win->term), blocks_ld.codepage, url, NULL);
mem_free(item->url);
item->url = txt;
s->fn(s->dlg, s->data, &item->head, &blocks_ld);
d->udata = NULL; /* for abort function */
}
static void block_edit_item_fn(struct dialog_data *dlg)
{
/*Copied from input_field. I don't know how most of it works.*/
#define LL gf_val(1, G_BFU_FONT_SIZE)
struct terminal *term = dlg->win->term;
int max = 0, min = 0;
int w, rw;
int y = gf_val(-1, -G_BFU_FONT_SIZE);
unsigned char *text = TEXT_(T_ENTER_URL);
if (dlg->win->term->spec->braille) y += gf_val(1, G_BFU_FONT_SIZE);
max_text_width(term, text, &max, AL_LEFT);
min_text_width(term, text, &min, AL_LEFT);
max_buttons_width(term, dlg->items + 1, 2, &max);
min_buttons_width(term, dlg->items + 1, 2, &min);
if (max < dlg->dlg->items->dlen) max = dlg->dlg->items->dlen;
w = term->x * 9 / 10 - 2 * DIALOG_LB;
if (w > max) w = max;
if (w < min) w = min;
rw = w;
dlg_format_text_and_field(dlg, NULL, text, dlg->items, 0, &y, w, &rw, COLOR_DIALOG_TEXT, AL_LEFT);
y += LL;
dlg_format_buttons(dlg, NULL, dlg->items + 1, 2, 0, &y, w, &rw, AL_CENTER);
w = rw;
dlg->xw = rw + 2 * DIALOG_LB;
dlg->yw = y + 2 * DIALOG_TB;
center_dlg(dlg);
draw_dlg(dlg);
y = dlg->y + DIALOG_TB;
if (dlg->win->term->spec->braille) y += gf_val(1, G_BFU_FONT_SIZE);
dlg_format_text_and_field(dlg, term, text, dlg->items, dlg->x + DIALOG_LB, &y, w, NULL, COLOR_DIALOG_TEXT, AL_LEFT);
y += LL;
dlg_format_buttons(dlg, term, dlg->items + 1, 2, dlg->x + DIALOG_LB, &y, w, NULL, AL_CENTER);
}
static void block_edit_item(struct dialog_data *dlg, struct list *data, void (*ok_fn)(struct dialog_data *, struct list *, struct list *, struct list_description *), struct list *ok_arg, unsigned char dlg_title)
{
/*Copied from types.c */
/*Data is a new item generated by the "default" function*/
struct block *neww = get_struct(data, struct block, head);
struct terminal *term = dlg->win->term;
struct dialog *d;
struct assoc_ok_struct *s;
unsigned char *url, *txt;
/*Allocate space for dialog, 4 items followed by 1 string*/
d = mem_alloc(sizeof(struct dialog) + 4 * sizeof(struct dialog_item) + 1 * MAX_STR_LEN);
memset(d, 0, sizeof(struct dialog) + 4 * sizeof(struct dialog_item) + 1 * MAX_STR_LEN);
/*Set up this string */
url = (unsigned char *)&d->items[4];
txt = convert(blocks_ld.codepage, term_charset(dlg->win->term), neww->url, NULL);
safe_strncpy(url, txt, MAX_STR_LEN);
mem_free(txt);
/* Create the dialog */
s = mem_alloc(sizeof(struct assoc_ok_struct));
s->fn = ok_fn;
s->data = ok_arg;
s->dlg = dlg;
switch (dlg_title) {
case TITLE_EDIT:
d->title = TEXT_(T_BLOCK_EDIT);
break;
case TITLE_ADD:
d->title = TEXT_(T_BLOCK_ADD);
break;
default:
internal_error("Unsupported dialog title.\n");
}
d->udata = neww;
d->udata2 = s;
d->fn = block_edit_item_fn;
d->abort = block_edit_abort;
d->refresh = block_edit_done;
d->refresh_data = d;
d->items[0].type = D_FIELD;
d->items[0].dlen = MAX_STR_LEN;
d->items[0].data = url;
d->items[0].fn = check_nonempty;
d->items[1].type = D_BUTTON;
d->items[1].gid = B_ENTER;
d->items[1].fn = ok_dialog;
d->items[1].text = TEXT_(T_OK);
d->items[2].type = D_BUTTON;
d->items[2].gid = B_ESC;
d->items[2].text = TEXT_(T_CANCEL);
d->items[2].fn = cancel_dialog;
d->items[3].type = D_END;
do_dialog(term, d, getml(d, NULL));
}
static int test_entry(struct list *e, unsigned char *str)
{
return casestrstr(get_struct(e, struct block, head)->url, str);
}
static struct list *block_find_item(struct list *s, unsigned char *str, int direction)
{
struct list *e;
if (direction >= 0) {
for (e = list_next(s); e != s; e = list_next(e)) {
if (e->depth >= 0 && test_entry(e, str))
return e;
}
} else {
for (e = list_prev(s); e != s; e = list_prev(e)) {
if (e->depth >= 0 && test_entry(e, str))
return e;
}
}
if (e->depth >= 0 && test_entry(e, str))
return e;
return NULL;
}
void block_manager(struct terminal *term, void *fcp, void *ses_)
{
struct session *ses = (struct session *)ses_;
create_list_window(&blocks_ld, &blocks, term, ses);
}
void *block_url_add(void *ses_, unsigned char *url)
{
struct session *ses = (struct session *)ses_;
/*Callback from the dialog box created from the link menu*/
struct list *new_list;
struct block *new_b;
struct terminal *term = ses ? ses->term : NULL;
if (test_list_window_in_use(&blocks_ld, term))
return NULL;
new_list = block_new_item(0);
new_b = get_struct(new_list, struct block, head);
mem_free(new_b->url);
new_b->url = stracpy(url);
new_b->head.type = 0;
add_to_list(blocks.list_entry, &new_b->head);
return NULL;
}
void block_url_query(struct session *ses, unsigned char *u)
{
if (test_list_window_in_use(&blocks_ld, ses->term))
return;
input_field(ses->term, NULL, TEXT_(T_BLOCK_URL), TEXT_(T_BLOCK_ADD), ses, 0, MAX_INPUT_URL_LEN, u, 0, 0, NULL, 2, TEXT_(T_OK), block_url_add, TEXT_(T_CANCEL), input_field_null);
}
static unsigned char *find_first_match(unsigned char *s, unsigned char *p, unsigned *ii)
{
unsigned i;
retry:
for (i = 0; s[i] && p[i] && p[i] != '*'; i++) {
if (s[i] != p[i] && p[i] != '?') {
s++;
goto retry;
}
}
*ii = i;
if (!p[i] || p[i] == '*') return s;
return NULL;
}
static int simple_glob_match(unsigned char *s, unsigned char *p)
{
unsigned i;
if (find_first_match(s, p, &i) != s) return 0;
if (!p[i]) return !s[i];
while (1) {
s += i;
p += i + 1;
if (!(s = find_first_match(s, p, &i))) return 0;
if (!p[i]) {
s += strlen(cast_const_char s) - i;
return !!find_first_match(s, p, &i);
}
}
}
int is_url_blocked(unsigned char *url)
{
struct list *b;
struct list_head *lb;
foreach(struct list, b, lb, blocks.list_entry) {
if (simple_glob_match(url, get_struct(b, struct block, head)->url))
return 1;
}
return 0;
}
void init_blocks(void)
{
blocks_ld.codepage = utf8_table;
}
void free_blocks(void)
{
/*List destructor */
struct list *b;
struct list_head *lb;
foreach(struct list, b, lb, blocks.list_entry) {
struct block *bm = get_struct(b, struct block, head);
mem_free(bm->url);
lb = lb->prev;
del_from_list(b);
mem_free(bm);
}
free_history(block_search_histroy);
}

811
bookmark.c Normal file
View File

@ -0,0 +1,811 @@
/* bookmark.c
* (c) 2002 Petr 'Brain' Kulhavy, Karel 'Clock' Kulhavy
* This file is a part of the Links program, released under GPL.
*/
#include "links.h"
#define SEARCH_IN_URL
#ifdef SEARCH_IN_URL
#define SHOW_URL
#endif
static struct stat bookmarks_st;
static struct list *bookmark_new_item(void *);
static unsigned char *bookmark_type_item(struct terminal *, struct list *, int);
static void bookmark_delete_item(struct list *);
static void bookmark_edit_item(struct dialog_data *, struct list *, void (*)(struct dialog_data *, struct list *, struct list *, struct list_description *), struct list *, unsigned char);
static void bookmark_copy_item(struct list *, struct list *);
static void bookmark_goto_item(struct session *, struct list *);
static void *bookmark_default_value(struct session *, unsigned char);
static struct list *bookmark_find_item(struct list *start, unsigned char *str, int direction);
static void save_bookmarks(struct session *ses);
struct list bookmarks = { init_list_1st(&bookmarks.list_entry) 0, -1, NULL, init_list_last(&bookmarks.list_entry) };
static struct history bookmark_search_history = { 0, { &bookmark_search_history.items, &bookmark_search_history.items } };
/* when you change anything, don't forget to change it in reinit_bookmarks too !*/
struct bookmark_ok_struct {
void (*fn)(struct dialog_data *, struct list *, struct list *, struct list_description *);
struct list *data;
struct dialog_data *dlg;
};
struct bookmark_list {
list_head_1st
/* bookmark specific */
unsigned char *title;
unsigned char *url;
list_head_last
};
static struct list_description bookmark_ld = {
1, /* 0= flat; 1=tree */
&bookmarks, /* list */
bookmark_new_item, /* no codepage translations */
bookmark_edit_item, /* translate when create dialog and translate back when ok is pressed */
bookmark_default_value, /* codepage translation from current_page_encoding to UTF8 */
bookmark_delete_item, /* no codepage translations */
bookmark_copy_item, /* no codepage translations */
bookmark_type_item, /* no codepage translations (bookmarks are internally in UTF8) */
bookmark_find_item,
&bookmark_search_history,
0, /* this is set in init_bookmarks function */
15, /* # of items in main window */
T_BOOKMARK,
T_BOOKMARKS_ALREADY_IN_USE,
T_BOOKMARK_MANAGER,
T_DELETE_BOOKMARK,
T_GOTO,
bookmark_goto_item, /* FIXME: should work (URL in UTF8), but who knows? */
save_bookmarks,
NULL,NULL,0,0, /* internal vars */
0, /* modified */
NULL,
NULL,
0,
};
struct kawasaki {
unsigned char *title;
unsigned char *url;
};
/* clears the bookmark list */
static void free_bookmarks(void)
{
struct list *b;
struct list_head *lb;
foreach(struct list, b, lb, bookmarks.list_entry) {
struct bookmark_list *bm = get_struct(b, struct bookmark_list, head);
mem_free(bm->title);
mem_free(bm->url);
lb = lb->prev;
del_from_list(b);
mem_free(bm);
}
}
/* called before exiting the links */
void finalize_bookmarks(void)
{
free_bookmarks();
free_history(bookmark_search_history);
}
/* allocates struct kawasaki and puts current page title and url */
/* type: 0=item, 1=directory */
/* on error returns NULL */
static void *bookmark_default_value(struct session *ses, unsigned char type)
{
struct kawasaki *zelena;
unsigned char *txt;
txt=mem_alloc(MAX_STR_LEN);
zelena=mem_alloc(sizeof(struct kawasaki));
zelena->url=NULL;
zelena->title=NULL;
if (get_current_url(ses,txt,MAX_STR_LEN))
{
if (ses->screen->f_data)
{
zelena->url=convert(term_charset(ses->term),bookmark_ld.codepage,txt,NULL);
clr_white(zelena->url);
}
else
zelena->url=stracpy(txt);
}
if (get_current_title(ses->screen,txt,MAX_STR_LEN)) /* ses->screen->f_data must exist here */
{
zelena->title=convert(term_charset(ses->term),bookmark_ld.codepage,txt,NULL);
clr_white(zelena->title);
}
mem_free(txt);
return zelena;
}
static void bookmark_copy_item(struct list *in, struct list *out)
{
struct bookmark_list *item_in = get_struct(in, struct bookmark_list, head);
struct bookmark_list *item_out = get_struct(out, struct bookmark_list, head);
item_out->head.type = item_in->head.type;
item_out->head.depth = item_in->head.depth;
mem_free(item_out->title);
item_out->title = stracpy(item_in->title);
mem_free(item_out->url);
item_out->url = stracpy(item_in->url);
}
static unsigned char * const bm_add_msg[] = {
TEXT_(T_NNAME),
TEXT_(T_URL),
};
/* Called to setup the add bookmark dialog */
static void bookmark_edit_item_fn(struct dialog_data *dlg)
{
int max = 0, min = 0;
int w, rw;
int y = gf_val(-1, -1 * G_BFU_FONT_SIZE);
struct terminal *term;
int a;
if (dlg->win->term->spec->braille) y += gf_val(1, G_BFU_FONT_SIZE);
term = dlg->win->term;
for (a=0;a<dlg->n-2;a++)
{
max_text_width(term, bm_add_msg[a], &max, AL_LEFT);
min_text_width(term, bm_add_msg[a], &min, AL_LEFT);
}
max_buttons_width(term, dlg->items + dlg->n-2, 2, &max);
min_buttons_width(term, dlg->items + dlg->n-2, 2, &min);
w = term->x * 9 / 10 - 2 * DIALOG_LB;
if (w < min) w = min;
rw = w;
for (a = 0; a < dlg->n - 2; a++) {
dlg_format_text_and_field(dlg, NULL, bm_add_msg[a], &dlg->items[a], 0, &y, w, &rw, COLOR_DIALOG_TEXT, AL_LEFT);
y += gf_val(1, 1 * G_BFU_FONT_SIZE);
}
dlg_format_buttons(dlg, NULL, dlg->items+dlg->n-2, 2, 0, &y, w, &rw, AL_CENTER);
w = rw;
dlg->xw = w + 2 * DIALOG_LB;
dlg->yw = y + 2 * DIALOG_TB;
center_dlg(dlg);
draw_dlg(dlg);
y = dlg->y + DIALOG_TB;
if (dlg->win->term->spec->braille) y += gf_val(1, G_BFU_FONT_SIZE);
for (a = 0; a < dlg->n - 2; a++) {
dlg_format_text_and_field(dlg, term, bm_add_msg[a], &dlg->items[a], dlg->x + DIALOG_LB, &y, w, NULL, COLOR_DIALOG_TEXT, AL_LEFT);
y += gf_val(1, G_BFU_FONT_SIZE);
}
dlg_format_buttons(dlg, term, &dlg->items[dlg->n-2], 2, dlg->x + DIALOG_LB, &y, w, NULL, AL_CENTER);
}
/* Puts url and title into the bookmark item */
static void bookmark_edit_done(void *data)
{
struct dialog *d = (struct dialog *)data;
struct bookmark_list *item = (struct bookmark_list *)d->udata;
unsigned char *title, *url;
struct bookmark_ok_struct *s = (struct bookmark_ok_struct *)d->udata2;
int a;
if (item->head.type & 1) a = 4; /* folder */
else a = 5;
title = (unsigned char *)&d->items[a];
url = title + MAX_STR_LEN;
mem_free(item->title);
item->title = convert(term_charset(s->dlg->win->term), bookmark_ld.codepage, title, NULL);
clr_white(item->title);
mem_free(item->url);
item->url = convert(term_charset(s->dlg->win->term), bookmark_ld.codepage, url, NULL);
clr_white(item->url);
s->fn(s->dlg, s->data, &item->head, &bookmark_ld);
d->udata = NULL; /* for abort function */
}
/* destroys an item, this function is called when edit window is aborted */
static void bookmark_edit_abort(struct dialog_data *data)
{
struct bookmark_list *item = (struct bookmark_list *)data->dlg->udata;
struct dialog *dlg = data->dlg;
mem_free(dlg->udata2);
if (item) bookmark_delete_item(&item->head);
}
/* dlg_title is TITLE_EDIT or TITLE_ADD */
/* edit item function */
static void bookmark_edit_item(struct dialog_data *dlg, struct list *data, void (*ok_fn)(struct dialog_data *, struct list *, struct list *, struct list_description *), struct list *ok_arg, unsigned char dlg_title)
{
struct bookmark_list *item = get_struct(data, struct bookmark_list, head);
unsigned char *title, *url;
struct dialog *d;
struct bookmark_ok_struct *s;
int a;
/* Create the dialog */
s = mem_alloc(sizeof(struct bookmark_ok_struct));
s->fn = ok_fn;
s->data = ok_arg;
s->dlg = dlg;
if (item->head.type & 1) a = 4; /* folder */
else a = 5;
d = mem_calloc(sizeof(struct dialog) + a * sizeof(struct dialog_item) + 2 * MAX_STR_LEN);
title = (unsigned char *)&d->items[a];
url = title + MAX_STR_LEN;
{
unsigned char *txt;
txt = convert(bookmark_ld.codepage, term_charset(dlg->win->term), item->title, NULL);
clr_white(txt);
safe_strncpy(title, txt, MAX_STR_LEN);
mem_free(txt);
txt = convert(bookmark_ld.codepage, term_charset(dlg->win->term), item->url, NULL);
clr_white(txt);
safe_strncpy(url, txt, MAX_STR_LEN);
mem_free(txt);
}
switch (dlg_title)
{
case TITLE_EDIT:
if (item->head.type & 1) d->title = TEXT_(T_EDIT_FOLDER);
else d->title = TEXT_(T_EDIT_BOOKMARK);
break;
case TITLE_ADD:
if (item->head.type & 1) d->title = TEXT_(T_ADD_FOLDER);
else d->title = TEXT_(T_ADD_BOOKMARK);
break;
default:
internal_error("Unsupported dialog title.\n");
}
d->fn = bookmark_edit_item_fn;
d->udata = item; /* item */
d->udata2 = s;
d->refresh = bookmark_edit_done;
d->abort = bookmark_edit_abort;
d->refresh_data = d;
d->items[0].type = D_FIELD;
d->items[0].dlen = MAX_STR_LEN;
d->items[0].data = title;
d->items[0].fn = check_nonempty;
a = 0;
if (!(item->head.type & 1)) /* item */
{
d->items[1].type = D_FIELD;
d->items[1].dlen = MAX_STR_LEN;
d->items[1].data = url;
d->items[1].fn = check_nonempty;
a++;
}
d->items[a+1].type = D_BUTTON;
d->items[a+1].gid = B_ENTER;
d->items[a+1].fn = ok_dialog;
d->items[a+1].text = TEXT_(T_OK);
d->items[a+2].type = D_BUTTON;
d->items[a+2].gid = B_ESC;
d->items[a+2].text = TEXT_(T_CANCEL);
d->items[a+2].fn = cancel_dialog;
d->items[a+3].type = D_END;
do_dialog(dlg->win->term, d, getml(d, NULL));
}
/* create new bookmark item and returns pointer to it, on error returns 0*/
/* bookmark is filled with given data, data are deallocated afterwards */
static struct list *bookmark_new_item(void *data)
{
struct bookmark_list *b;
struct kawasaki *zelena = (struct kawasaki *)data;
b = mem_alloc(sizeof(struct bookmark_list));
if (zelena && zelena->title)
b->title = zelena->title;
else
b->title = stracpy(cast_uchar "");
if (zelena && zelena->url)
b->url = zelena->url;
else
b->url = stracpy(cast_uchar "");
if (zelena)
mem_free(zelena);
return &b->head;
}
/* allocate string and print bookmark into it */
/* x: 0=type all, 1=type title only */
static unsigned char *bookmark_type_item(struct terminal *term, struct list *data, int x)
{
unsigned char *txt, *txt1;
struct bookmark_list *item;
if (data == &bookmarks) /* head */
return stracpy(get_text_translation(TEXT_(T_BOOKMARKS), term));
item = get_struct(data, struct bookmark_list, head);
txt = stracpy(item->title);
#ifdef SHOW_URL
x = 0;
#endif
if (!x && !(item->head.type & 1)) {
add_to_strn(&txt, cast_uchar " (");
add_to_strn(&txt, item->url);
add_to_strn(&txt, cast_uchar ")");
}
txt1 = convert(bookmark_ld.codepage, term_charset(term), txt, NULL);
clr_white(txt1);
mem_free(txt);
return txt1;
}
/* goto bookmark (called when goto button is pressed) */
static void bookmark_goto_item(struct session *ses, struct list *i)
{
struct bookmark_list *item = get_struct(i, struct bookmark_list, head);
goto_url_utf8(ses, item->url);
}
/* delete bookmark from list */
static void bookmark_delete_item(struct list *data)
{
struct bookmark_list *item = get_struct(data, struct bookmark_list, head);
if (item->head.list_entry.next) del_from_list(&item->head);
mem_free(item->url);
mem_free(item->title);
mem_free(item);
}
static int substr_utf8(unsigned char *string, unsigned char *substr)
{
int r;
string = unicode_upcase_string(string);
substr = unicode_upcase_string(substr);
r = !!strstr(cast_const_char string, cast_const_char substr);
mem_free(string);
mem_free(substr);
return r;
}
static int test_entry(struct list *e, unsigned char *str)
{
struct bookmark_list *list = get_struct(e, struct bookmark_list, head);
if (substr_utf8(list->title, str))
return 1;
#ifdef SEARCH_IN_URL
return casestrstr(list->url, str);
#else
return 0;
#endif
}
static struct list *bookmark_find_item(struct list *s, unsigned char *str, int direction)
{
struct list *e;
if (direction >= 0) {
for (e = list_next(s); e != s; e = list_next(e)) {
if (e->depth >= 0 && test_entry(e, str))
return e;
}
} else {
for (e = list_prev(s); e != s; e = list_prev(e)) {
if (e->depth >= 0 && test_entry(e, str))
return e;
}
}
if (e->depth >= 0 && test_entry(e, str))
return e;
return NULL;
}
/* returns previous item in the same folder and with same the depth, or father if there's no previous item */
/* we suppose that previous items have correct pointer fotr */
static struct list *previous_on_this_level(struct list *item)
{
struct list *p;
for (p = list_prev(item); p->depth > item->depth; p = p->fotr)
;
return p;
}
/* create new bookmark at the end of the list */
/* if url is NULL, create folder */
/* both strings are null terminated */
static void add_bookmark(unsigned char *title, unsigned char *url, int depth)
{
struct bookmark_list *b;
struct list *p;
struct document_options *dop;
if (!title) return;
b = mem_alloc(sizeof(struct bookmark_list));
dop = mem_calloc(sizeof(struct document_options));
dop->cp = bookmark_ld.codepage;
b->title = convert(bookmarks_codepage, bookmark_ld.codepage, title, dop);
clr_white(b->title);
if (url) {
b->url = convert(bookmarks_codepage, bookmark_ld.codepage, url, NULL);
clr_white(b->url);
b->head.type = 0;
} else {
b->url = stracpy(cast_uchar "");
b->head.type = 1;
}
b->head.depth = depth;
add_to_list_end(bookmarks.list_entry, &b->head);
p = previous_on_this_level(&b->head);
if (p->depth < b->head.depth) b->head.fotr = p; /* directory b belongs into */
else b->head.fotr = p->fotr;
mem_free(dop);
}
/* Created pre-cooked bookmarks */
static void create_initial_bookmarks(void)
{
add_bookmark(cast_uchar "Links", NULL, 0);
add_bookmark(cast_uchar "English", NULL, 1);
add_bookmark(cast_uchar "Calibration Procedure", cast_uchar "http://atrey.karlin.mff.cuni.cz/~clock/twibright/links/calibration.html", 2);
add_bookmark(cast_uchar "Links Homepage", cast_uchar "http://atrey.karlin.mff.cuni.cz/~clock/twibright/links/", 2);
add_bookmark(cast_uchar "Links Manual", cast_uchar "http://links.twibright.com/user_en.html", 2);
add_bookmark(cast_uchar "Cesky", NULL, 1);
add_bookmark(cast_uchar "Kalibracni procedura", cast_uchar "http://atrey.karlin.mff.cuni.cz/~clock/twibright/links/kalibrace.html", 2);
add_bookmark(cast_uchar "Links: domaci stranka", cast_uchar "http://atrey.karlin.mff.cuni.cz/~clock/twibright/links/index_cz.html", 2);
add_bookmark(cast_uchar "Manual k Linksu", cast_uchar "http://links.twibright.com/user.html", 2);
}
static void load_bookmarks(struct session *ses)
{
unsigned char *buf;
long len;
unsigned char *p, *end;
unsigned char *name, *attr;
int namelen;
int status;
unsigned char *title = 0;
unsigned char *url = 0;
int depth;
struct document_options dop;
int rs;
memset(&dop, 0, sizeof(dop));
dop.plain = 1;
/* status:
* 0 = find <dt> or </dl> element
* 1 = find <a> or <h3> element
* 2 = reading bookmark, find </a> element, title is pointer
* behind the leading <a> element
* 3 = reading folder name, find </h3> element, title is
* pointer behind leading <h3> element
*/
buf = read_config_file(bookmarks_file);
if (!buf) {
create_initial_bookmarks();
bookmark_ld.modified = 1;
save_bookmarks(ses);
return;
}
len = strlen(cast_const_char buf);
p = buf;
end = buf + len;
status = 0; /* find bookmark */
depth = 0;
d_opt = &dop;
while (1) {
unsigned char *s;
while (p < end && *p != '<') p++; /* find start of html tag */
if (p >= end) break; /* parse end */
s = p;
if (end - p >= 2 && (p[1] == '!' || p[1]== '?')) { p = skip_comment(p, end); continue; }
if (parse_element(p, end, &name, &namelen, &attr, &p)) { p++; continue; }
switch (status) {
case 0: /* <dt> or </dl> */
if (namelen == 2 && !casecmp(name, cast_uchar "dt", 2))
status = 1;
else if (namelen == 3 && !casecmp(name, cast_uchar "/dl", 3)) {
depth--;
if (depth == -1) goto smitec;
}
continue;
case 1: /* find "a" element */
if (namelen == 1 && !casecmp(name, cast_uchar "a", 1)) {
if (!(url = get_attr_val(attr, cast_uchar "href"))) continue;
status = 2;
title = p;
} else if (namelen == 2 && !casecmp(name, cast_uchar "h3", 1)) {
status = 3;
title = p;
}
continue;
case 2: /* find "/a" element */
if (namelen != 2 || casecmp(name, cast_uchar "/a", 2)) continue; /* ignore all other elements */
*s = 0;
add_bookmark(title, url, depth);
mem_free(url);
status = 0;
continue;
case 3: /* find "/h3" element */
if (namelen !=3 || casecmp(name, cast_uchar "/h3", 2)) continue; /* ignore all other elements */
*s = 0;
add_bookmark(title, NULL, depth);
status = 0;
depth++;
continue;
}
}
if (status == 2) mem_free(url);
smitec:
mem_free(buf);
d_opt = &dd_opt;
bookmark_ld.modified = 0;
EINTRLOOP(rs, stat(cast_const_char bookmarks_file, &bookmarks_st));
if (rs)
memset(&bookmarks_st, -1, sizeof bookmarks_st);
}
void init_bookmarks(void)
{
memset(&bookmarks_st, -1, sizeof bookmarks_st);
if (!*bookmarks_file) {
unsigned char *e;
safe_strncpy(bookmarks_file, links_home ? links_home : (unsigned char*)"", MAX_STR_LEN);
e = cast_uchar strchr(cast_const_char bookmarks_file, 0);
#ifdef DOS_FS_8_3
safe_strncpy(e, cast_uchar "bookmark.htm", MAX_STR_LEN - (e - bookmarks_file));
#else
safe_strncpy(e, cast_uchar "bookmarks.html", MAX_STR_LEN - (e - bookmarks_file));
#endif
}
bookmark_ld.codepage = utf8_table;
load_bookmarks(NULL);
}
void reinit_bookmarks(struct session *ses, unsigned char *new_bookmarks_file, int new_bookmarks_codepage)
{
unsigned char *buf;
if (test_list_window_in_use(&bookmark_ld, ses->term))
return;
if (!strcmp(cast_const_char bookmarks_file, cast_const_char new_bookmarks_file)) {
goto save_only;
}
buf = read_config_file(new_bookmarks_file);
if (buf) {
mem_free(buf);
free_bookmarks();
safe_strncpy(bookmarks_file, new_bookmarks_file, MAX_STR_LEN);
bookmarks_codepage = new_bookmarks_codepage;
load_bookmarks(ses);
reinit_list_window(&bookmark_ld);
} else {
save_only:
safe_strncpy(bookmarks_file, new_bookmarks_file, MAX_STR_LEN);
bookmarks_codepage = new_bookmarks_codepage;
bookmark_ld.modified = 1;
save_bookmarks(ses);
}
}
/* gets str, converts all < = > & to appropriate entity
* returns allocated string with result
*/
static unsigned char *convert_to_entity_string(unsigned char *str)
{
unsigned char *dst, *p;
int dstl;
dst = init_str();
dstl = 0;
for (p = str; *p; p++) {
switch(*p) {
case '<':
add_to_str(&dst, &dstl, cast_uchar "&lt;");
break;
case '>':
add_to_str(&dst, &dstl, cast_uchar "&gt;");
break;
case '=':
add_to_str(&dst, &dstl, cast_uchar "&equals;");
break;
case '&':
add_to_str(&dst, &dstl, cast_uchar "&amp;");
break;
case '"':
add_to_str(&dst, &dstl, cast_uchar "&quot;");
break;
default:
add_chr_to_str(&dst, &dstl, *p);
break;
}
}
return dst;
}
/* writes bookmarks to disk */
static void save_bookmarks(struct session *ses)
{
struct list *li;
struct list_head *lli;
int depth;
int a;
unsigned char *data;
int l;
int err;
int rs;
if (!bookmark_ld.modified)return;
data = init_str();
l = 0;
add_to_str(&data, &l, cast_uchar
"<HTML>\n"
"<HEAD>\n"
"<!-- This is an automatically generated file.\n"
"It will be read and overwritten.\n"
"Do Not Edit! -->\n"
"<TITLE>Links bookmarks</TITLE>\n"
"</HEAD>\n"
"<H1>Links bookmarks</H1>\n\n"
"<DL><P>\n"
);
depth = 0;
foreach(struct list, li, lli, bookmarks.list_entry) {
struct bookmark_list *b = get_struct(li, struct bookmark_list, head);
for (a = b->head.depth; a < depth; a++) add_to_str(&data, &l, cast_uchar "</DL>\n");
depth = b->head.depth;
if (b->head.type & 1) {
unsigned char *txt, *txt1;
txt = convert(bookmark_ld.codepage, bookmarks_codepage, b->title, NULL);
clr_white(txt);
txt1 = convert_to_entity_string(txt);
add_to_str(&data, &l, cast_uchar " <DT><H3>");
add_to_str(&data, &l, txt1);
add_to_str(&data, &l, cast_uchar "</H3>\n<DL>\n");
mem_free(txt);
mem_free(txt1);
depth++;
} else {
unsigned char *txt1, *txt2, *txt11;
txt1 = convert(bookmark_ld.codepage, bookmarks_codepage, b->title, NULL);
clr_white(txt1);
txt2 = convert(bookmark_ld.codepage, bookmarks_codepage, b->url, NULL);
clr_white(txt2);
txt11 = convert_to_entity_string(txt1);
add_to_str(&data, &l, cast_uchar " <DT><A HREF=\"");
add_to_str(&data, &l, txt2);
add_to_str(&data, &l, cast_uchar "\">");
add_to_str(&data, &l, txt11);
add_to_str(&data, &l, cast_uchar "</A>\n");
mem_free(txt1);
mem_free(txt2);
mem_free(txt11);
}
}
for (a = 0; a <depth; a++) add_to_str(&data, &l, cast_uchar "</DL>\n");
add_to_str(&data, &l, cast_uchar
"</DL><P>\n"
"</HTML>\n"
);
err = write_to_config_file(bookmarks_file, data, 1);
mem_free(data);
if (!err) {
bookmark_ld.modified = 0;
} else {
if (ses) {
unsigned char *f = stracpy(bookmarks_file);
msg_box(ses->term, getml(f, NULL), TEXT_(T_BOOKMARK_ERROR), AL_CENTER, TEXT_(T_UNABLE_TO_WRITE_TO_BOOKMARK_FILE), cast_uchar " ", f, cast_uchar ": ", get_err_msg(err, ses->term), MSG_BOX_END, NULL, 1, TEXT_(T_CANCEL), msg_box_null, B_ENTER | B_ESC);
}
}
EINTRLOOP(rs, stat(cast_const_char bookmarks_file, &bookmarks_st));
if (rs)
memset(&bookmarks_st, -1, sizeof bookmarks_st);
}
void menu_bookmark_manager(struct terminal *term, void *fcp, void *ses_)
{
struct session *ses = (struct session *)ses_;
struct stat st;
int rs;
EINTRLOOP(rs, stat(cast_const_char bookmarks_file, &st));
if (!rs &&
(st.st_ctime != bookmarks_st.st_ctime ||
st.st_mtime != bookmarks_st.st_mtime ||
st.st_size != bookmarks_st.st_size)) {
if (!test_list_window_in_use(&bookmark_ld, NULL)) {
free_bookmarks();
load_bookmarks(ses);
reinit_list_window(&bookmark_ld);
}
}
create_list_window(&bookmark_ld, &bookmarks, term, ses);
}

549
cache.c Normal file
View File

@ -0,0 +1,549 @@
/* cache.c
* (c) 2002 Mikulas Patocka
* This file is a part of the Links program, released under GPL.
*/
#include "links.h"
#if defined(HAVE_SEARCH_H) && defined(HAVE_TDELETE) && defined(HAVE_TFIND) && defined(HAVE_TSEARCH)
#define USE_TREE
#endif
static struct list_head cache = {&cache, &cache};
static my_uintptr_t cache_size = 0;
static tcount cache_count = 1;
#ifdef USE_TREE
static void *cache_root = NULL;
static int ce_compare(const void *p1, const void *p2)
{
const unsigned char *u1 = (const unsigned char *)p1;
const unsigned char *u2 = (const unsigned char *)p2;
if (u1 == u2) return 0;
return strcmp(cast_const_char u1, cast_const_char u2);
}
static void cache_add_to_tree(struct cache_entry *e)
{
void **p;
if (!e->url[0]) return;
#if !defined(__GLIBC__)
if (!cache_root) {
/*
* Some implementations misbehave when deleting the last
* element. They leak memory or return NULL from tdelete.
* To guard against misbehavior, we insert one static element
* and never delete it.
* Glibc doesn't have this bug.
*/
static unsigned char empty = 0;
retry_static:
p = tsearch(&empty, &cache_root, ce_compare);
if (!p) {
out_of_memory(0, cast_uchar "tsearch static", 0);
goto retry_static;
}
if ((unsigned char *)*p != &empty) internal_error("cache_add_to_tree: static entry not added: %p, %p", *p, &empty);
}
#endif
retry:
p = tsearch(e->url, &cache_root, ce_compare);
if (!p) {
out_of_memory(0, cast_uchar "tsearch", 0);
goto retry;
}
if ((unsigned char *)*p != e->url) internal_error("cache_add_to_tree: url '%s' is already present", e->url);
}
static void cache_delete_from_tree(struct cache_entry *e)
{
void *p;
if (!e->url[0]) return;
p = tdelete(e->url, &cache_root, ce_compare);
if (!p) internal_error("cache_delete_from_tree: url '%s' not found", e->url);
}
static struct cache_entry *cache_search_tree(unsigned char *url)
{
void **p;
p = tfind(url, (void *)&cache_root, ce_compare);
if (!p) return NULL;
return get_struct(*p, struct cache_entry, url);
}
#else
static void cache_add_to_tree(struct cache_entry *e) { }
static void cache_delete_from_tree(struct cache_entry *e) { }
static struct cache_entry *cache_search_tree(unsigned char *url)
{
struct cache_entry *e;
struct list_head *le;
foreach(struct cache_entry, e, le, cache)
if (!strcmp(cast_const_char e->url, cast_const_char url))
return e;
return NULL;
}
#endif
my_uintptr_t cache_info(int type)
{
my_uintptr_t i = 0;
struct cache_entry *ce;
struct list_head *lce;
switch (type) {
case CI_BYTES:
return cache_size;
case CI_FILES:
return (my_uintptr_t)list_size(&cache);
case CI_LOCKED:
foreach(struct cache_entry, ce, lce, cache) i += !!ce->refcount;
return i;
case CI_LOADING:
foreach(struct cache_entry, ce, lce, cache) i += is_entry_used(ce);
return i;
default:
internal_error("cache_info: bad request");
}
return 0;
}
my_uintptr_t decompress_info(int type)
{
my_uintptr_t i = 0;
struct cache_entry *ce;
struct list_head *lce;
switch (type) {
case CI_BYTES:
return decompressed_cache_size;
case CI_FILES:
foreach(struct cache_entry, ce, lce, cache) i += !!ce->decompressed;
return i;
case CI_LOCKED:
foreach(struct cache_entry, ce, lce, cache) i += ce->decompressed && ce->refcount;
return i;
default:
internal_error("compress_info: bad request");
}
return 0;
}
int find_in_cache(unsigned char *url, struct cache_entry **f)
{
struct cache_entry *e;
url = remove_proxy_prefix(url);
e = cache_search_tree(url);
if (e) {
e->refcount++;
del_from_list(e);
add_to_list(cache, e);
*f = e;
return 0;
}
return -1;
}
static int get_cache_entry(unsigned char *url, struct cache_entry **f)
{
if (!find_in_cache(url, f)) return 0;
return new_cache_entry(url, f);
}
int get_connection_cache_entry(struct connection *c)
{
struct cache_entry *e;
if (get_cache_entry(c->url, &c->cache))
return -1;
e = c->cache;
if (e->ip_address) mem_free(e->ip_address), e->ip_address = NULL;
if (!*c->socks_proxy && !is_proxy_url(c->url) && c->last_lookup_state.addr.n) {
unsigned char *a;
unsigned char *s = init_str();
int l = 0;
a = print_address(&c->last_lookup_state.addr.a[c->last_lookup_state.addr_index]);
if (a)
add_to_str(&s, &l, a);
if (c->last_lookup_state.addr.n > 1) {
int i, d = 0;
if (l) add_chr_to_str(&s, &l, ' ');
add_chr_to_str(&s, &l, '(');
for (i = 0; i < c->last_lookup_state.addr.n; i++) {
if (i == c->last_lookup_state.addr_index)
continue;
a = print_address(&c->last_lookup_state.addr.a[i]);
if (a) {
if (d)
add_to_str(&s, &l, cast_uchar ", ");
add_to_str(&s, &l, a);
d = 1;
}
}
add_chr_to_str(&s, &l, ')');
}
e->ip_address = s;
}
return 0;
}
int new_cache_entry(unsigned char *url, struct cache_entry **f)
{
struct cache_entry *e;
shrink_memory(SH_CHECK_QUOTA, 0);
url = remove_proxy_prefix(url);
e = mem_calloc_mayfail(sizeof(struct cache_entry) + strlen(cast_const_char url));
if (!e)
return -1;
strcpy(cast_char e->url, cast_const_char url);
e->length = 0;
e->incomplete = 1;
e->data_size = 0;
e->http_code = -1;
init_list(e->frag);
e->count = cache_count++;
e->count2 = cache_count++;
e->refcount = 1;
e->decompressed = NULL;
e->decompressed_len = 0;
cache_add_to_tree(e);
add_to_list(cache, e);
*f = e;
return 0;
}
void detach_cache_entry(struct cache_entry *e)
{
cache_delete_from_tree(e);
e->url[0] = 0;
}
static void mem_free_fragment(struct fragment *f)
{
size_t s = (size_t)f->length;
mem_free(f);
s += sizeof(struct fragment);
}
#define sf(x) e->data_size += (x), cache_size += (my_uintptr_t)(x)
#define C_ALIGN(x) ((((x) + (sizeof(struct fragment) + alloc_overhead - 1)) | (page_size - 1)) - (sizeof(struct fragment) + alloc_overhead - 1))
int add_fragment(struct cache_entry *e, off_t offset, const unsigned char *data, off_t length)
{
struct fragment *f;
struct list_head *lf;
struct fragment *nf;
int trunc = 0;
icc_volatile off_t ca;
if (!length) return 0;
free_decompressed_data(e);
e->incomplete = 1;
if ((off_t)(0UL + offset + length) < 0 || (off_t)(0UL + offset + length) < offset) return S_LARGE_FILE;
if ((off_t)(0UL + offset + (off_t)C_ALIGN(length)) < 0 || (off_t)(0UL + offset + (off_t)C_ALIGN(length)) < offset) return S_LARGE_FILE;
if (e->length < offset + length) e->length = offset + length;
e->count = cache_count++;
if (list_empty(e->frag)) e->count2 = cache_count++;
else {
f = list_struct(e->frag.prev, struct fragment);
if (f->offset + f->length != offset) e->count2 = cache_count++;
else {
lf = &f->list_entry;
goto have_f;
}
}
foreach(struct fragment, f, lf, e->frag) {
have_f:
if (f->offset > offset) break;
if (f->offset <= offset && f->offset + f->length >= offset) {
if (offset+length > f->offset + f->length) {
if (memcmp(f->data + offset - f->offset, data, (size_t)(f->offset + f->length - offset))) trunc = 1;
if (offset - f->offset + length <= f->real_length) {
sf((offset + length) - (f->offset + f->length));
f->length = offset - f->offset + length;
} else {
sf(-(f->offset + f->length - offset));
f->length = offset - f->offset;
lf = f->list_entry.next;
break;
}
} else {
if (memcmp(f->data + offset-f->offset, data, (size_t)length)) trunc = 1;
}
memcpy(f->data+offset - f->offset, data, (size_t)length);
goto ch_o;
}
}
/* Intel C 9 has a bug and miscompiles this statement (< 0 test is true) */
/*if (C_ALIGN(length) > MAXINT - sizeof(struct fragment) || C_ALIGN(length) < 0) overalloc();*/
ca = C_ALIGN(length);
if (ca > MAXINT - (int)sizeof(struct fragment) || ca < 0) return S_LARGE_FILE;
nf = mem_alloc_mayfail(sizeof(struct fragment) + (size_t)ca);
if (!nf) return S_OUT_OF_MEM;
sf(length);
nf->offset = offset;
nf->length = length;
nf->real_length = C_ALIGN(length);
memcpy(nf->data, data, (size_t)length);
add_before_list_entry(lf, &nf->list_entry);
f = nf;
ch_o:
while (f->list_entry.next != &e->frag && f->offset + f->length > list_struct(f->list_entry.next, struct fragment)->offset) {
struct fragment *next = list_struct(f->list_entry.next, struct fragment);
if (f->offset + f->length < next->offset + next->length) {
f = mem_realloc(f, sizeof(struct fragment) + (size_t)(next->offset - f->offset + next->length));
fix_list_after_realloc(f);
if (memcmp(f->data + next->offset - f->offset, next->data, (size_t)(f->offset + f->length - next->offset))) trunc = 1;
memcpy(f->data + f->length, next->data + f->offset + f->length - next->offset, (size_t)(next->offset + next->length - f->offset - f->length));
sf(next->offset + next->length - f->offset - f->length);
f->length = f->real_length = next->offset + next->length - f->offset;
} else {
if (memcmp(f->data + next->offset - f->offset, next->data, (size_t)next->length)) trunc = 1;
}
del_from_list(next);
sf(-next->length);
mem_free_fragment(next);
}
if (trunc) truncate_entry(e, offset + length, 0);
if (e->length > e->max_length) {
e->max_length = e->length;
return 1;
}
return 0;
}
int defrag_entry(struct cache_entry *e)
{
struct fragment *f, *n;
struct list_head *g, *h;
off_t l;
if (list_empty(e->frag)) {
return 0;
}
f = list_struct(e->frag.next, struct fragment);
if (f->offset) {
return 0;
}
for (g = f->list_entry.next;
g != &e->frag &&
list_struct(g, struct fragment)->offset <= list_struct(g->prev, struct fragment)->offset + list_struct(g->prev, struct fragment)->length; g = g->next)
if (list_struct(g, struct fragment)->offset < list_struct(g->prev, struct fragment)->offset + list_struct(g->prev, struct fragment)->length) {
internal_error("fragments overlay");
return S_INTERNAL;
}
if (g == f->list_entry.next) {
if (f->length != f->real_length) {
f = mem_realloc_mayfail(f, sizeof(struct fragment) + (size_t)f->length);
if (f) {
f->real_length = f->length;
fix_list_after_realloc(f);
}
}
return 0;
}
for (l = 0, h = &f->list_entry; h != g; h = h->next) {
if ((off_t)(0UL + l + list_struct(h, struct fragment)->length) < 0 || (off_t)(0UL + l + list_struct(h, struct fragment)->length) < l) return S_LARGE_FILE;
l += list_struct(h, struct fragment)->length;
}
if (l > MAXINT - (int)sizeof(struct fragment)) return S_LARGE_FILE;
n = mem_alloc_mayfail(sizeof(struct fragment) + (size_t)l);
if (!n) return S_OUT_OF_MEM;
n->offset = 0;
n->length = l;
n->real_length = l;
for (l = 0, h = &f->list_entry; h != g; h = h->next) {
struct fragment *hf = list_struct(h, struct fragment);
memcpy(n->data + l, hf->data, (size_t)hf->length);
l += hf->length;
h = h->prev;
del_from_list(hf);
mem_free_fragment(hf);
}
add_to_list(e->frag, n);
return 0;
}
void truncate_entry(struct cache_entry *e, off_t off, int final)
{
int modified = final == 2;
struct fragment *f, *g;
struct list_head *lf;
if (e->length > off) e->length = off, e->incomplete = 1;
foreach(struct fragment, f, lf, e->frag) {
if (f->offset >= off) {
modified = 1;
sf(-f->length);
lf = lf->prev;
del_from_list(f);
mem_free_fragment(f);
continue;
}
if (f->offset + f->length > off) {
modified = 1;
sf(-(f->offset + f->length - off));
f->length = off - f->offset;
if (final) {
g = mem_realloc_mayfail(f, sizeof(struct fragment) + (size_t)f->length);
if (g) {
f = g;
fix_list_after_realloc(f);
f->real_length = f->length;
lf = &f->list_entry;
}
}
}
}
if (modified) {
free_decompressed_data(e);
e->count = cache_count++;
e->count2 = cache_count++;
}
}
void free_entry_to(struct cache_entry *e, off_t off)
{
struct fragment *f;
struct list_head *lf;
e->incomplete = 1;
free_decompressed_data(e);
foreach(struct fragment, f, lf, e->frag) {
if (f->offset + f->length <= off) {
sf(-f->length);
lf = lf->prev;
del_from_list(f);
mem_free_fragment(f);
} else if (f->offset < off) {
sf(f->offset - off);
memmove(f->data, f->data + (off - f->offset), (size_t)(f->length -= off - f->offset));
f->offset = off;
} else break;
}
}
void delete_entry_content(struct cache_entry *e)
{
truncate_entry(e, 0, 2);
if (e->last_modified) {
mem_free(e->last_modified);
e->last_modified = NULL;
}
}
void trim_cache_entry(struct cache_entry *e)
{
struct fragment *f, *nf;
struct list_head *lf;
foreach(struct fragment, f, lf, e->frag) {
if (f->length != f->real_length) {
nf = mem_realloc_mayfail(f, sizeof(struct fragment) + (size_t)f->length);
if (nf) {
f = nf;
fix_list_after_realloc(f);
f->real_length = f->length;
lf = &f->list_entry;
}
}
}
}
void delete_cache_entry(struct cache_entry *e)
{
if (e->refcount) internal_error("deleting locked cache entry");
#ifdef DEBUG
if (is_entry_used(e)) internal_error("deleting loading cache entry");
#endif
cache_delete_from_tree(e);
delete_entry_content(e);
del_from_list(e);
if (e->head) mem_free(e->head);
if (e->redirect) mem_free(e->redirect);
if (e->ip_address) mem_free(e->ip_address);
#ifdef HAVE_SSL
if (e->ssl_info) mem_free(e->ssl_info);
if (e->ssl_authority) mem_free(e->ssl_authority);
#endif
mem_free(e);
}
static int shrink_file_cache(int u)
{
int r = 0;
struct cache_entry *e, *f;
struct list_head *le, *lf;
my_uintptr_t ncs = cache_size;
my_uintptr_t ccs = 0, ccs2 = 0;
if (u == SH_CHECK_QUOTA && cache_size + decompressed_cache_size <= (my_uintptr_t)memory_cache_size) goto ret;
foreachback(struct cache_entry, e, le, cache) {
if (e->refcount || is_entry_used(e)) {
if (ncs < (my_uintptr_t)e->data_size) {
internal_error("cache_size underflow: %lu, %lu", (unsigned long)ncs, (unsigned long)e->data_size);
}
ncs -= (my_uintptr_t)e->data_size;
} else if (u == SH_FREE_SOMETHING) {
if (e->decompressed_len) free_decompressed_data(e);
else delete_cache_entry(e);
r |= ST_SOMETHING_FREED;
goto ret;
}
if (!e->refcount && e->decompressed_len && cache_size + decompressed_cache_size > (my_uintptr_t)memory_cache_size) {
free_decompressed_data(e);
r |= ST_SOMETHING_FREED;
}
ccs += (my_uintptr_t)e->data_size;
ccs2 += e->decompressed_len;
}
if (ccs != cache_size) internal_error("cache size badly computed: %lu != %lu", (unsigned long)cache_size, (unsigned long)ccs), cache_size = ccs;
if (ccs2 != decompressed_cache_size) internal_error("decompressed cache size badly computed: %lu != %lu", (unsigned long)decompressed_cache_size, (unsigned long)ccs2), decompressed_cache_size = ccs2;
if (u == SH_CHECK_QUOTA && ncs <= (my_uintptr_t)memory_cache_size) goto ret;
foreachback(struct cache_entry, e, le, cache) {
if (u == SH_CHECK_QUOTA && (longlong)ncs <= (longlong)memory_cache_size * MEMORY_CACHE_GC_PERCENT) goto g;
if (e->refcount || is_entry_used(e)) {
e->tgc = 0;
continue;
}
e->tgc = 1;
if (ncs < (my_uintptr_t)e->data_size) {
internal_error("cache_size underflow: %lu, %lu", (unsigned long)ncs, (unsigned long)e->data_size);
}
ncs -= (my_uintptr_t)e->data_size;
}
if (ncs) internal_error("cache_size(%lu) is larger than size of all objects(%lu)", (unsigned long)cache_size, (unsigned long)(cache_size - ncs));
g:
if (le->next == &cache) goto ret;
le = le->next;
if (u == SH_CHECK_QUOTA) {
foreachfrom(struct cache_entry, f, lf, cache, le) {
if (f->data_size && (longlong)ncs + f->data_size <= (longlong)memory_cache_size * MEMORY_CACHE_GC_PERCENT) {
ncs += (my_uintptr_t)f->data_size;
f->tgc = 0;
}
}
}
foreachfrom(struct cache_entry, f, lf, cache, le) {
if (f->tgc) {
lf = lf->prev;
delete_cache_entry(f);
r |= ST_SOMETHING_FREED;
}
}
ret:
return r | (list_empty(cache) ? ST_CACHE_EMPTY : 0);
}
void init_cache(void)
{
register_cache_upcall(shrink_file_cache, 0, cast_uchar "file");
}

144
certs.inc Normal file

File diff suppressed because one or more lines are too long

38
certs/gen Executable file
View File

@ -0,0 +1,38 @@
#!/bin/sh
set -e
LC_ALL=C
export LC_ALL
echo
echo Generating certificates.
rm -f cert.tmp
mangle_unprintable_command="`../intl/mangle-unprintable`"
(
echo '/* Automatically generated by certs/gen */'
echo
echo 'static_const struct {'
echo ' int len;'
echo ' const char *data;'
echo '} certificates[] = {'
total=`wc -l links.crt | sed 's/^ *//' | sed 's/ .*//'`
line=0
while read x; do
line=`expr $line + 1`
if echo "$x" | grep ^----- >/dev/null; then
if echo "$x" | grep ^-----END >/dev/null; then
printf "`expr $line \* 100 / $total || true`%%\r" 1>&2
base64 --decode <cert.tmp >cert.bin
printf "{ `wc -c cert.bin|sed 's/^ *//'|sed 's/ .*//'`, \""
# hexdump -v <cert.bin -e '/1 "-%o"'|sed 's/-/\\/g'
sed 's/\([\"]\)/\\\1/g' <cert.bin | eval "$mangle_unprintable_command" | tr '\000' '\t' | sed 's/ /\\000/g' | tr '\012' '\t' | sed 's/ /\\012/g'
echo "\" },"
rm -f cert.tmp cert.bin
fi
else
echo "$x" >>cert.tmp
fi
done <links.crt
echo '};'
) | sed 's/\\012$/" },/' | sed '/^"/d' >../certs.inc
echo
echo Done.
echo

3512
certs/links.crt Normal file

File diff suppressed because it is too large Load Diff

82
cfg.h Normal file
View File

@ -0,0 +1,82 @@
/* cfg.h
* (c) 2002 Mikulas Patocka
* This file is a part of the Links program, released under GPL.
*/
#ifndef CFG_H
#define CFG_H
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#ifdef HAVE_CONFIG2_H
#include "config2.h"
#endif
#ifdef HAVE_CONFIG_VMS_H
#include "config-vms.h"
#define HAVE_RAND_ADD 1
#define HAVE_RAND_FILE_NAME 1
#define HAVE_RAND_LOAD_FILE 1
#define HAVE_RAND_WRITE_FILE 1
#define HAVE_SSL_GET1_SESSION 1
#define HAVE_ASN1_STRING_TO_UTF8 1
#ifdef VMS_DEBUGLEVEL
#undef DEBUGLEVEL
#define DEBUGLEVEL VMS_DEBUGLEVEL
#endif
#ifdef __VAX
#undef HAVE_LONG_LONG
#undef SIZEOF_UNSIGNED_LONG_LONG
#undef HAVE_SNPRINTF
#undef HAVE_STRTOLL
#undef HAVE_STRTOQ
#undef HAVE_SOCKETPAIR
#undef HAVE_GETADDRINFO
#undef HAVE_FREEADDRINFO
#undef SUPPORT_IPV6
#undef SUPPORT_IPV6_SCOPE
#endif
#endif
#if !defined(G) && DEBUGLEVEL >= 0 && defined(HAVE_SETJMP_H)
#undef HAVE_SETJMP_H
#endif
/* no one will probably ever port svgalib on atheos or beos or port atheos
interface to beos, but anyway: make sure they don't clash */
#if defined(__BEOS__) || defined(__HAIKU__) || defined(__VMS) || defined(__DJGPP)
#ifdef GRDRV_SVGALIB
#undef GRDRV_SVGALIB
#endif
#ifdef GRDRV_ATHEOS
#undef GRDRV_ATHEOS
#endif
#endif
#ifdef GRDRV_ATHEOS
#ifdef GRDRV_SVGALIB
#undef GRDRV_SVGALIB
#endif
#endif
#if !(defined(__EMX__) || defined(_WIN32) || defined(__CYGWIN__))
#ifdef GRDRV_PMSHELL
#undef GRDRV_PMSHELL
#endif
#endif
#ifndef HAVE_VOLATILE
#define volatile
#endif
#if defined(HAVE_RESTRICT) && !defined(__cplusplus)
#define my_restrict restrict
#elif defined(HAVE___RESTRICT) && !defined(__cplusplus)
#define my_restrict __restrict
#else
#define my_restrict
#endif
typedef int cfg_h_no_empty_unit;
#endif

630
charsets.c Normal file
View File

@ -0,0 +1,630 @@
/* charsets.c
* (c) 2002 Mikulas Patocka, Karel 'Clock' Kulhavy
* This file is a part of the Links program, released under GPL.
*/
#include "links.h"
int utf8_table;
struct table_entry {
unsigned char c;
int u;
};
struct codepage_desc {
const char *name;
const char * const *aliases;
const struct table_entry *table;
};
#include "codepage.inc"
#include "uni_7b.inc"
#include "entity.inc"
#include "upcase.inc"
#include "locase.inc"
static_const unsigned char strings[256][2] = {
"\000", "\001", "\002", "\003", "\004", "\005", "\006", "\007",
"\010", "\011", "\012", "\013", "\014", "\015", "\016", "\017",
"\020", "\021", "\022", "\023", "\024", "\025", "\026", "\033",
"\030", "\031", "\032", "\033", "\034", "\035", "\036", "\033",
"\040", "\041", "\042", "\043", "\044", "\045", "\046", "\047",
"\050", "\051", "\052", "\053", "\054", "\055", "\056", "\057",
"\060", "\061", "\062", "\063", "\064", "\065", "\066", "\067",
"\070", "\071", "\072", "\073", "\074", "\075", "\076", "\077",
"\100", "\101", "\102", "\103", "\104", "\105", "\106", "\107",
"\110", "\111", "\112", "\113", "\114", "\115", "\116", "\117",
"\120", "\121", "\122", "\123", "\124", "\125", "\126", "\127",
"\130", "\131", "\132", "\133", "\134", "\135", "\136", "\137",
"\140", "\141", "\142", "\143", "\144", "\145", "\146", "\147",
"\150", "\151", "\152", "\153", "\154", "\155", "\156", "\157",
"\160", "\161", "\162", "\163", "\164", "\165", "\166", "\167",
"\170", "\171", "\172", "\173", "\174", "\175", "\176", "\177",
"\200", "\201", "\202", "\203", "\204", "\205", "\206", "\207",
"\210", "\211", "\212", "\213", "\214", "\215", "\216", "\217",
"\220", "\221", "\222", "\223", "\224", "\225", "\226", "\227",
"\230", "\231", "\232", "\233", "\234", "\235", "\236", "\237",
"\240", "\241", "\242", "\243", "\244", "\245", "\246", "\247",
"\250", "\251", "\252", "\253", "\254", "\255", "\256", "\257",
"\260", "\261", "\262", "\263", "\264", "\265", "\266", "\267",
"\270", "\271", "\272", "\273", "\274", "\275", "\276", "\277",
"\300", "\301", "\302", "\303", "\304", "\305", "\306", "\307",
"\310", "\311", "\312", "\313", "\314", "\315", "\316", "\317",
"\320", "\321", "\322", "\323", "\324", "\325", "\326", "\327",
"\330", "\331", "\332", "\333", "\334", "\335", "\336", "\337",
"\340", "\341", "\342", "\343", "\344", "\345", "\346", "\347",
"\350", "\351", "\352", "\353", "\354", "\355", "\356", "\357",
"\360", "\361", "\362", "\363", "\364", "\365", "\366", "\367",
"\370", "\371", "\372", "\373", "\374", "\375", "\376", "\377",
};
static void free_translation_table(struct conv_table *p)
{
int i;
for (i = 0; i < 256; i++) if (p[i].t) free_translation_table(p[i].u.tbl);
mem_free(p);
}
static_const unsigned char no_str[] = "*";
static void new_translation_table(struct conv_table *p)
{
int i;
for (i = 0; i < 256; i++) if (p[i].t) free_translation_table(p[i].u.tbl);
for (i = 0; i < 128; i++) p[i].t = 0, p[i].u.str = cast_uchar strings[i];
for (; i < 256; i++) p[i].t = 0, p[i].u.str = cast_uchar no_str;
}
static_const unsigned short strange_chars[32] = {
0x20ac, 0x0000, 0x002a, 0x0000, 0x201e, 0x2026, 0x2020, 0x2021,
0x005e, 0x2030, 0x0160, 0x003c, 0x0152, 0x0000, 0x0000, 0x0000,
0x0000, 0x0060, 0x0027, 0x0022, 0x0022, 0x002a, 0x2013, 0x2014,
0x007e, 0x2122, 0x0161, 0x003e, 0x0153, 0x0000, 0x0000, 0x0000,
};
#define U_EQUAL(a, b) unicode_7b[a].x == (b)
#define U_ABOVE(a, b) unicode_7b[a].x > (b)
static int is_nbsp(int u)
{
return u == 0xa0 || u == 0x202f;
}
unsigned char *u2cp(int u, int to, int fallback)
{
int j, s;
again:
if (u < 0) return cast_uchar "";
if (u < 128) return cast_uchar strings[u];
if (is_nbsp(u)) return cast_uchar strings[1];
if (u == 0xad) return cast_uchar strings[0];
if (to == utf8_table) return encode_utf_8(u);
if (u < 0xa0) {
u = strange_chars[u - 0x80];
if (!u) return NULL;
goto again;
}
for (j = 0; codepages[to].table[j].c; j++)
if (codepages[to].table[j].u == u)
return cast_uchar strings[codepages[to].table[j].c];
if (!fallback) return NULL;
BIN_SEARCH(N_UNICODE_7B, U_EQUAL, U_ABOVE, u, s);
if (s != -1) return cast_uchar unicode_7b[s].s;
return NULL;
}
int cp2u(unsigned ch, int from)
{
const struct table_entry *e;
if (from == utf8_table) return ch;
if (from < 0 || ch < 0x80) return ch;
for (e = codepages[from].table; e->c; e++) if (e->c == ch) return e->u;
return -1;
}
static unsigned char utf_buffer[7];
unsigned char *encode_utf_8(int u)
{
memset(utf_buffer, 0, 7);
if (u < 0) ;
else if (u < 0x80) utf_buffer[0] = (unsigned char)u;
else if (u < 0x800)
utf_buffer[0] = 0xc0 | ((u >> 6) & 0x1f),
utf_buffer[1] = 0x80 | (u & 0x3f);
else if (u < 0x10000)
utf_buffer[0] = 0xe0 | ((u >> 12) & 0x0f),
utf_buffer[1] = 0x80 | ((u >> 6) & 0x3f),
utf_buffer[2] = 0x80 | (u & 0x3f);
else if (u < 0x200000)
utf_buffer[0] = 0xf0 | ((u >> 18) & 0x0f),
utf_buffer[1] = 0x80 | ((u >> 12) & 0x3f),
utf_buffer[2] = 0x80 | ((u >> 6) & 0x3f),
utf_buffer[3] = 0x80 | (u & 0x3f);
else if (u < 0x4000000)
utf_buffer[0] = 0xf8 | ((u >> 24) & 0x0f),
utf_buffer[1] = 0x80 | ((u >> 18) & 0x3f),
utf_buffer[2] = 0x80 | ((u >> 12) & 0x3f),
utf_buffer[3] = 0x80 | ((u >> 6) & 0x3f),
utf_buffer[4] = 0x80 | (u & 0x3f);
else utf_buffer[0] = 0xfc | ((u >> 30) & 0x01),
utf_buffer[1] = 0x80 | ((u >> 24) & 0x3f),
utf_buffer[2] = 0x80 | ((u >> 18) & 0x3f),
utf_buffer[3] = 0x80 | ((u >> 12) & 0x3f),
utf_buffer[4] = 0x80 | ((u >> 6) & 0x3f),
utf_buffer[5] = 0x80 | (u & 0x3f);
return utf_buffer;
}
static void add_utf_8(struct conv_table *ct, int u, unsigned char *str)
{
unsigned char *p = encode_utf_8(u);
while (p[1]) {
if (ct[*p].t) ct = ct[*p].u.tbl;
else {
struct conv_table *nct;
if (ct[*p].u.str != no_str) {
internal_error("bad utf encoding #1");
return;
}
nct = mem_alloc(sizeof(struct conv_table) * 256);
memset(nct, 0, sizeof(struct conv_table) * 256);
new_translation_table(nct);
ct[*p].t = 1;
ct[*p].u.tbl = nct;
ct = nct;
}
p++;
}
if (ct[*p].t) {
internal_error("bad utf encoding #2");
return;
}
if (ct[*p].u.str == no_str) ct[*p].u.str = str;
}
static struct conv_table utf_table[256];
static int utf_table_init = 1;
static void free_utf_table(void)
{
int i;
for (i = 128; i < 256; i++) mem_free(utf_table[i].u.str);
}
static struct conv_table *get_translation_table_to_utf_8(int from)
{
int i;
static int lfr = -1;
if (from == -1) return NULL;
if (from == lfr) return utf_table;
lfr = from;
if (utf_table_init) {
memset(utf_table, 0, sizeof(struct conv_table) * 256);
for (i = 0; i < 128; i++) utf_table[i].u.str = cast_uchar strings[i];
utf_table_init = 0;
} else {
free_utf_table();
}
if (from == utf8_table) {
for (i = 128; i < 256; i++) utf_table[i].u.str = stracpy(strings[i]);
return utf_table;
}
for (i = 128; i < 256; i++) utf_table[i].u.str = NULL;
for (i = 0; codepages[from].table[i].c; i++) {
int u = codepages[from].table[i].u;
if (!utf_table[codepages[from].table[i].c].u.str)
utf_table[codepages[from].table[i].c].u.str = stracpy(encode_utf_8(u));
}
for (i = 128; i < 256; i++)
if (!utf_table[i].u.str) utf_table[i].u.str = stracpy(no_str);
return utf_table;
}
unsigned char utf_8_1[256] = {
6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
6, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 1, 1, 6, 6,
};
static_const unsigned min_utf_8[8] = {
0, 0x4000000, 0x200000, 0x10000, 0x800, 0x80, 0x100, 0x1,
};
unsigned get_utf_8(unsigned char **s)
{
unsigned v, min;
int l;
unsigned char *p = *s;
l = utf_8_1[p[0]];
min = min_utf_8[l];
v = p[0] & ((1 << l) - 1);
(*s)++;
while (l++ <= 5) {
unsigned c = **s - 0x80;
if (c >= 0x40) {
return 0;
}
(*s)++;
v = (v << 6) + c;
}
if (v < min)
return 0;
if (v > 0x10FFFF)
return 0;
return v;
}
static struct conv_table table[256];
static int table_init = 1;
void free_conv_table(void)
{
if (!utf_table_init) free_utf_table();
if (!table_init) new_translation_table(table);
}
struct conv_table *get_translation_table(int from, int to)
{
int i;
static int lfr = -1;
static int lto = -1;
if (/*from == to ||*/ from == -1 || to == -1) return NULL;
if (to == utf8_table) return get_translation_table_to_utf_8(from);
if (table_init) memset(table, 0, sizeof(struct conv_table) * 256), table_init = 0;
if (from == lfr && to == lto) return table;
lfr = from; lto = to;
new_translation_table(table);
if (from == utf8_table) {
int j;
for (j = 0; codepages[to].table[j].c; j++) add_utf_8(table, codepages[to].table[j].u, is_nbsp(codepages[to].table[j].u) ? cast_uchar strings[1] : codepages[to].table[j].u == 0xad ? cast_uchar strings[0] : cast_uchar strings[codepages[to].table[j].c]);
for (i = 0; unicode_7b[i].x != -1; i++) if (unicode_7b[i].x >= 0x80) add_utf_8(table, unicode_7b[i].x, cast_uchar unicode_7b[i].s);
} else for (i = 128; i < 256; i++) {
int j;
unsigned char *u;
for (j = 0; codepages[from].table[j].c; j++) {
if (codepages[from].table[j].c == i) goto f;
}
continue;
f:
u = u2cp(codepages[from].table[j].u, to, 1);
if (u) table[i].u.str = u;
}
return table;
}
static inline int xxstrcmp(unsigned char *s1, unsigned char *s2, int l2)
{
while (l2) {
if (*s1 > *s2) return 1;
if (!*s1 || *s1 < *s2) return -1;
s1++, s2++, l2--;
}
return !!*s1;
}
int get_entity_number(unsigned char *st, int l)
{
int n = 0;
if (upcase(st[0]) == 'X') {
st++, l--;
if (!l) return -1;
do {
unsigned char c = upcase(*(st++));
if (c >= '0' && c <= '9') n = n * 16 + c - '0';
else if (c >= 'A' && c <= 'F') n = n * 16 + c - 'A' + 10;
else return -1;
if (n > 0x10FFFF) return -1;
} while (--l);
} else {
if (!l) return -1;
do {
unsigned char c = *(st++);
if (c >= '0' && c <= '9') n = n * 10 + c - '0';
else return -1;
if (n > 0x10FFFF) return -1;
} while (--l);
}
return n;
}
unsigned char *get_entity_string(unsigned char *st, int l, int encoding)
{
int n;
if (l <= 0) return NULL;
if (st[0] == '#') {
if (l == 1) return NULL;
if ((n = get_entity_number(st + 1, l - 1)) == -1) return NULL;
if (n < 32 && get_attr_val_nl != 2) n = 32;
} else {
int s = 0, e = N_ENTITIES - 1;
while (s <= e) {
int c;
int m = (s + e) / 2;
c = xxstrcmp(cast_uchar entities[m].s, st, l);
if (!c) {
n = entities[m].c;
goto f;
}
if (c > 0) e = m - 1;
else s = m + 1;
}
return NULL;
f:;
}
return u2cp(n, encoding, 1);
}
unsigned char *convert_string(struct conv_table *ct, unsigned char *c, int l, struct document_options *dopt)
{
unsigned char *buffer;
int bp = 0;
int pp = 0;
if (!ct) {
int i;
for (i = 0; i < l; i++) if (c[i] == '&') goto xx;
return memacpy(c, l);
xx:;
}
buffer = mem_alloc(ALLOC_GR);
while (pp < l) {
unsigned char *e = NULL; /* against warning */
if (c[pp] < 128 && c[pp] != '&') {
put_c:
buffer[bp++] = c[pp++];
if (!(bp & (ALLOC_GR - 1))) {
if ((unsigned)bp > MAXINT - ALLOC_GR) overalloc();
buffer = mem_realloc(buffer, bp + ALLOC_GR);
}
continue;
}
if (c[pp] != '&') {
struct conv_table *t;
int i;
if (!ct) goto put_c;
t = ct;
i = pp;
decode:
if (!t[c[i]].t) {
e = t[c[i]].u.str;
} else {
t = t[c[i++]].u.tbl;
if (i >= l) goto put_c;
goto decode;
}
pp = i + 1;
} else {
int i = pp + 1;
if (!dopt || dopt->plain) goto put_c;
while (i < l && !is_entity_terminator(c[i])) i++;
if (!(e = get_entity_string(&c[pp + 1], i - pp - 1, dopt->cp))) goto put_c;
pp = i + (i < l && c[i] == ';');
}
if (!e[0]) continue;
if (!e[1]) {
buffer[bp++] = e[0];
if (!(bp & (ALLOC_GR - 1))) {
if ((unsigned)bp > MAXINT - ALLOC_GR) overalloc();
buffer = mem_realloc(buffer, bp + ALLOC_GR);
}
continue;
}
while (*e) {
buffer[bp++] = *(e++);
if (!(bp & (ALLOC_GR - 1))) {
if ((unsigned)bp > MAXINT - ALLOC_GR) overalloc();
buffer = mem_realloc(buffer, bp + ALLOC_GR);
}
}
}
buffer[bp] = 0;
return buffer;
}
unsigned char *convert(int from, int to, unsigned char *c, struct document_options *dopt)
{
unsigned char *cc;
struct conv_table *ct;
for (cc = c; *cc; cc++) {
if (*cc >= 128 && from != to)
goto need_table;
if (*cc == '&' && dopt && !dopt->plain)
goto need_table;
}
return stracpy(c);
need_table:
ct = get_translation_table(from, to);
return convert_string(ct, c, (int)strlen(cast_const_char c), dopt);
}
int get_cp_index(unsigned char *n)
{
decc_volatile int i, a, p, q, sl, ii = -1, ll = 0;
for (i = 0; codepages[i].name; i++) {
for (a = 0; codepages[i].aliases[a]; a++) {
for (p = 0; n[p]; p++) {
if (upcase(n[p]) == upcase(codepages[i].aliases[a][0])) {
for (q = 1; codepages[i].aliases[a][q]; q++) {
if (upcase(n[p+q]) != upcase(codepages[i].aliases[a][q])) goto fail;
}
sl = (int)strlen(cast_const_char codepages[i].aliases[a]);
if (sl > ll) {
ll = sl;
ii = i;
}
}
fail:;
}
}
}
return ii;
}
unsigned char *get_cp_name(int index)
{
if (index < 0) return cast_uchar "none";
return cast_uchar codepages[index].name;
}
unsigned char *get_cp_mime_name(int index)
{
if (index < 0) return cast_uchar "none";
if (!codepages[index].aliases) return NULL;
return cast_uchar codepages[index].aliases[0];
}
#define LO_EQUAL(a, b) unicode_locase[a].o == (b)
#define LO_ABOVE(a, b) unicode_locase[a].o > (b)
unsigned uni_locase(unsigned ch)
{
int res;
BIN_SEARCH(array_elements(unicode_locase), LO_EQUAL, LO_ABOVE, ch, res);
if (res == -1) return ch;
return unicode_locase[res].n;
}
#define UP_EQUAL(a, b) unicode_upcase[a].o == (b)
#define UP_ABOVE(a, b) unicode_upcase[a].o > (b)
unsigned charset_upcase(unsigned ch, int cp)
{
unsigned u;
int res;
unsigned char *str;
if (ch < 0x80) return upcase(ch);
u = cp2u(ch, cp);
BIN_SEARCH(array_elements(unicode_upcase), UP_EQUAL, UP_ABOVE, u, res);
if (res == -1) return ch;
if (cp == utf8_table) return unicode_upcase[res].n;
str = u2cp(unicode_upcase[res].n, cp, 0);
if (!str || !str[0] || str[1]) return ch;
return str[0];
}
unsigned uni_upcase(unsigned ch)
{
return charset_upcase(ch, utf8_table);
}
void charset_upcase_string(unsigned char **chp, int cp)
{
unsigned char *ch = *chp;
int i;
if (cp == utf8_table) {
ch = unicode_upcase_string(ch);
mem_free(*chp);
*chp = ch;
} else {
for (i = 0; ch[i]; i++) ch[i] = charset_upcase(ch[i], cp);
}
}
unsigned char *unicode_upcase_string(unsigned char *ch)
{
unsigned char *r = init_str();
int rl = 0;
while (1) {
unsigned c;
int res;
GET_UTF_8(ch, c);
if (!c) break;
BIN_SEARCH(array_elements(unicode_upcase), UP_EQUAL, UP_ABOVE, c, res);
if (res != -1) c = unicode_upcase[res].n;
add_to_str(&r, &rl, encode_utf_8(c));
}
return r;
}
unsigned char *to_utf8_upcase(unsigned char *str, int cp)
{
unsigned char *str1, *str2;
str1 = convert(cp, utf8_table, str, NULL);
str2 = unicode_upcase_string(str1);
mem_free(str1);
return str2;
}
int compare_case_utf8(unsigned char *u1, unsigned char *u2)
{
unsigned char *uu1 = u1;
unsigned c1, c2;
int cc1;
while (1) {
GET_UTF_8(u2, c2);
if (!c2) return (int)(u1 - uu1);
skip_discr:
GET_UTF_8(u1, c1);
BIN_SEARCH(array_elements(unicode_upcase), UP_EQUAL, UP_ABOVE, c1, cc1);
if (cc1 != -1) c1 = unicode_upcase[cc1].n;
if (c1 == 0xad) goto skip_discr;
if (c1 != c2) return 0;
if (c1 == ' ') {
unsigned char *x1;
do {
x1 = u1;
GET_UTF_8(u1, c1);
BIN_SEARCH(array_elements(unicode_upcase), UP_EQUAL, UP_ABOVE, c1, cc1);
if (cc1 >= 0) c1 = unicode_upcase[cc1].n;
} while (c1 == ' ');
u1 = x1;
}
}
}
int strlen_utf8(unsigned char *s)
{
int len = 0;
while (1) {
unsigned c;
GET_UTF_8(s, c);
if (!c) return len;
len++;
}
}
int cp_len(int cp, unsigned char *s)
{
if (cp == utf8_table) return strlen_utf8(s);
return (int)strlen(cast_const_char s);
}
unsigned char *cp_strchr(int charset, unsigned char *str, unsigned chr)
{
if (charset != utf8_table) {
if (chr >= 0x100)
return NULL;
return cast_uchar strchr(cast_const_char str, chr);
}
while (1) {
unsigned char *o_str = str;
unsigned c;
GET_UTF_8(str, c);
if (!c) return NULL;
if (c == chr) return o_str;
}
}
void init_charset(void)
{
utf8_table = get_cp_index(cast_uchar "UTF-8");
if (utf8_table == -1) internal_error("no UTF-8 charset");
bookmarks_codepage = utf8_table;
}

1
codepage.h Normal file
View File

@ -0,0 +1 @@
#define N_CODEPAGES 35

3927
codepage.inc Normal file

File diff suppressed because it is too large Load Diff

41
com-defs.h Normal file
View File

@ -0,0 +1,41 @@
#ifndef COM_DEFS_H
#define COM_DEFS_H
#ifndef __EXTENSIONS__
#define __EXTENSIONS__
#endif
#ifndef _LARGEFILE_SOURCE
#define _LARGEFILE_SOURCE 1
#endif
#ifndef _LARGEFILE
#define _LARGEFILE 1
#endif
#ifndef _ALL_SOURCE
#define _ALL_SOURCE 1
#endif
#ifndef _GNU_SOURCE
#define _GNU_SOURCE 1
#endif
#ifndef _FILE_OFFSET_BITS
#define _FILE_OFFSET_BITS 64
#endif
#if defined(vax) && !defined(__vax)
#define __vax vax
#endif
#if defined(__VMS) && !defined(__VAX)
#define _SOCKADDR_LEN
#endif
#ifdef __DJGPP
unsigned long __ntohl(unsigned long);
unsigned short __ntohs(unsigned short);
#endif
#endif

979
compress.c Normal file
View File

@ -0,0 +1,979 @@
#include "links.h"
#ifdef write
#undef write
#endif
my_uintptr_t decompressed_cache_size = 0;
static int display_error(struct terminal *term, unsigned char *msg, int *errp)
{
if (errp) *errp = 1;
if (!term) return 0;
if (!errp) if (find_msg_box(term, msg, NULL, NULL)) return 0;
return 1;
}
#ifdef HAVE_ANY_COMPRESSION
static void decoder_memory_init(unsigned char **p, size_t *size, off_t init_length)
{
if (init_length > 0 && init_length < MAXINT) *size = (int)init_length;
else *size = 4096;
again:
if (*size <= 4096) {
*p = mem_alloc(*size);
} else {
*p = mem_alloc_mayfail(*size);
if (!*p) {
*size >>= 1;
goto again;
}
}
}
static int decoder_memory_expand(unsigned char **p, size_t size, size_t *addsize)
{
unsigned char *pp;
size_t add = size / 4 + 1;
if (add > MAXINT) add = MAXINT;
while (size + add < size || !(pp = mem_realloc_mayfail(*p, size + add))) {
if (add > 1) add >>= 1;
else goto ovf;
}
*addsize = add;
*p = pp;
return 0;
ovf:
*addsize = 0;
return -1;
}
static void decompress_error(struct terminal *term, struct cache_entry *ce, unsigned char *lib, unsigned char *msg, int *errp)
{
unsigned char *u, *server;
if ((u = parse_http_header(ce->head, cast_uchar "Content-Encoding", NULL))) {
mem_free(u);
if ((server = get_host_name(ce->url))) {
add_blacklist_entry(server, BL_NO_COMPRESSION);
mem_free(server);
}
}
if (!display_error(term, TEXT_(T_DECOMPRESSION_ERROR), errp)) return;
u = display_url(term, ce->url, 1);
msg_box(term, getml(u, NULL), TEXT_(T_DECOMPRESSION_ERROR), AL_CENTER, TEXT_(T_ERROR_DECOMPRESSING_), u, TEXT_(T__wITH_), lib, cast_uchar ": ", msg, MSG_BOX_END, NULL, 1, TEXT_(T_CANCEL), msg_box_null, B_ENTER | B_ESC);
}
#endif
#ifdef HAVE_ZLIB
#include <zlib.h>
static int decode_gzip(struct terminal *term, struct cache_entry *ce, int defl, int *errp)
{
unsigned char err;
unsigned char memory_error;
unsigned char skip_gzip_header;
unsigned char old_zlib;
z_stream z;
off_t offset;
int r;
unsigned char *p;
struct fragment *f;
struct list_head *lf;
size_t size;
retry_after_memory_error:
memory_error = 0;
decoder_memory_init(&p, &size, ce->length);
init_again:
err = 0;
skip_gzip_header = 0;
old_zlib = 0;
memset(&z, 0, sizeof z);
z.next_in = NULL;
z.avail_in = 0;
z.next_out = p;
z.avail_out = (unsigned)size;
z.zalloc = NULL;
z.zfree = NULL;
z.opaque = NULL;
r = inflateInit2(&z, defl == 1 ? 15 : defl == 2 ? -15 : 15 + 16);
init_failed:
switch (r) {
case Z_OK: break;
case Z_MEM_ERROR: memory_error = 1;
err = 1;
goto after_inflateend;
case Z_STREAM_ERROR:
if (!defl && !old_zlib) {
if (defrag_entry(ce)) {
memory_error = 1;
err = 1;
goto after_inflateend;
}
r = inflateInit2(&z, -15);
skip_gzip_header = 1;
old_zlib = 1;
goto init_failed;
}
decompress_error(term, ce, cast_uchar "zlib", z.msg ? (unsigned char *)z.msg : (unsigned char *)"Invalid parameter", errp);
err = 1;
goto after_inflateend;
case Z_VERSION_ERROR: decompress_error(term, ce, cast_uchar "zlib", z.msg ? (unsigned char *)z.msg : (unsigned char *)"Bad zlib version", errp);
err = 1;
goto after_inflateend;
default: decompress_error(term, ce, cast_uchar "zlib", z.msg ? (unsigned char *)z.msg : (unsigned char *)"Unknown return value on inflateInit2", errp);
err = 1;
goto after_inflateend;
}
offset = 0;
foreach(struct fragment, f, lf, ce->frag) {
if (f->offset != offset) break;
z.next_in = f->data;
z.avail_in = (unsigned)f->length;
if ((off_t)z.avail_in != f->length) overalloc();
repeat_frag:
if (skip_gzip_header == 2) {
if (z.avail_in < 8) goto finish;
z.next_in = (unsigned char *)z.next_in + 8;
z.avail_in -= 8;
skip_gzip_header = 1;
}
if (skip_gzip_header) {
/* if zlib is old, we have to skip gzip header manually
otherwise zlib 1.2.x can do it automatically */
unsigned char *head = z.next_in;
unsigned headlen = 10;
if (z.avail_in <= 11) goto finish;
if (head[0] != 0x1f || head[1] != 0x8b) {
decompress_error(term, ce, cast_uchar "zlib", TEXT_(T_COMPRESSED_ERROR), errp);
err = 1;
goto finish;
}
if (head[2] != 8 || head[3] & 0xe0) {
decompress_error(term, ce, cast_uchar "zlib", TEXT_(T_UNKNOWN_COMPRESSION_METHOD), errp);
err = 1;
goto finish;
}
if (head[3] & 0x04) {
headlen += 2 + head[10] + (head[11] << 8);
if (headlen >= z.avail_in) goto finish;
}
if (head[3] & 0x08) {
do {
headlen++;
if (headlen >= z.avail_in) goto finish;
} while (head[headlen - 1]);
}
if (head[3] & 0x10) {
do {
headlen++;
if (headlen >= z.avail_in) goto finish;
} while (head[headlen - 1]);
}
if (head[3] & 0x01) {
headlen += 2;
if (headlen >= z.avail_in) goto finish;
}
z.next_in = (unsigned char *)z.next_in + headlen;
z.avail_in -= headlen;
skip_gzip_header = 0;
}
r = inflate(&z, f->list_entry.next == &ce->frag ? Z_SYNC_FLUSH : Z_NO_FLUSH);
switch (r) {
case Z_OK: break;
case Z_BUF_ERROR: break;
case Z_STREAM_END: r = inflateEnd(&z);
if (r != Z_OK) goto end_failed;
r = inflateInit2(&z, old_zlib ? -15 : defl ? 15 : 15 + 16);
if (r != Z_OK) {
old_zlib = 0;
goto init_failed;
}
if (old_zlib) {
skip_gzip_header = 2;
}
break;
case Z_NEED_DICT:
case Z_DATA_ERROR: if (defl == 1) {
defl = 2;
r = inflateEnd(&z);
if (r != Z_OK) goto end_failed;
goto init_again;
}
decompress_error(term, ce, cast_uchar "zlib", z.msg ? (unsigned char *)z.msg : TEXT_(T_COMPRESSED_ERROR), errp);
err = 1;
goto finish;
case Z_STREAM_ERROR: decompress_error(term, ce, cast_uchar "zlib", z.msg ? (unsigned char *)z.msg : (unsigned char *)"Internal error on inflate", errp);
err = 1;
goto finish;
case Z_MEM_ERROR:
mem_error: memory_error = 1;
err = 1;
goto finish;
default: decompress_error(term, ce, cast_uchar "zlib", z.msg ? (unsigned char *)z.msg : (unsigned char *)"Unknown return value on inflate", errp);
err = 1;
break;
}
if (!z.avail_out) {
size_t addsize;
if (decoder_memory_expand(&p, size, &addsize) < 0)
goto mem_error;
z.next_out = p + size;
z.avail_out = (unsigned)addsize;
size += addsize;
}
if (z.avail_in) goto repeat_frag;
/* In zlib 1.1.3, inflate(Z_SYNC_FLUSH) doesn't work.
The following line fixes it --- for last fragment, loop until
we get an eof. */
if (r == Z_OK && f->list_entry.next == &ce->frag) goto repeat_frag;
offset += f->length;
}
finish:
r = inflateEnd(&z);
end_failed:
switch (r) {
case Z_OK: break;
case Z_STREAM_ERROR: decompress_error(term, ce, cast_uchar "zlib", z.msg ? (unsigned char *)z.msg : (unsigned char *)"Internal error on inflateEnd", errp);
err = 1;
break;
case Z_MEM_ERROR: memory_error = 1;
err = 1;
break;
default: decompress_error(term, ce, cast_uchar "zlib", z.msg ? (unsigned char *)z.msg : (unsigned char *)"Unknown return value on inflateEnd", errp);
err = 1;
break;
}
after_inflateend:
if (memory_error) {
mem_free(p);
if (out_of_memory(0, NULL, 0))
goto retry_after_memory_error;
decompress_error(term, ce, cast_uchar "zlib", z.msg ? (unsigned char *)z.msg : TEXT_(T_OUT_OF_MEMORY), errp);
return 1;
}
if (err && (unsigned char *)z.next_out == p) {
mem_free(p);
return 1;
}
ce->decompressed = p;
ce->decompressed_len = (unsigned char *)z.next_out - (unsigned char *)p;
decompressed_cache_size += ce->decompressed_len;
ce->decompressed = mem_realloc(ce->decompressed, ce->decompressed_len);
return 0;
}
#endif
#ifdef HAVE_BROTLI
#if defined(__TINYC__) && defined(__STDC_VERSION__)
#undef __STDC_VERSION__
#endif
#include <brotli/decode.h>
static void *brotli_alloc(void *opaque, size_t size)
{
return mem_alloc_mayfail(size);
}
static void brotli_free(void *opaque, void *ptr)
{
if (ptr) mem_free(ptr);
}
static int decode_brotli(struct terminal *term, struct cache_entry *ce, int *errp)
{
unsigned char err;
BrotliDecoderState *br;
const unsigned char *next_in;
size_t avail_in;
unsigned char *next_out;
size_t avail_out;
off_t offset;
BrotliDecoderResult res;
unsigned char *p;
struct fragment *f;
struct list_head *lf;
size_t size;
err = 0;
decoder_memory_init(&p, &size, ce->length);
next_out = p;
avail_out = size;
br = BrotliDecoderCreateInstance(brotli_alloc, brotli_free, NULL);
if (!br) {
decompress_error(term, ce, cast_uchar "brotli", TEXT_(T_OUT_OF_MEMORY), errp);
err = 1;
goto after_inflateend;
}
offset = 0;
foreach(struct fragment, f, lf, ce->frag) {
if (f->offset != offset) break;
next_in = f->data;
avail_in = (size_t)f->length;
if ((off_t)avail_in != f->length) overalloc();
repeat_frag:
res = BrotliDecoderDecompressStream(br, &avail_in, &next_in, &avail_out, &next_out, NULL);
if (res == BROTLI_DECODER_RESULT_ERROR) {
decompress_error(term, ce, cast_uchar "brotli", cast_uchar BrotliDecoderErrorString(BrotliDecoderGetErrorCode(br)), errp);
err = 1;
goto finish;
}
if (!avail_out) {
size_t addsize;
if (decoder_memory_expand(&p, size, &addsize) < 0) {
decompress_error(term, ce, cast_uchar "brotli", TEXT_(T_OUT_OF_MEMORY), errp);
err = 1;
goto finish;
}
next_out = p + size;
avail_out = addsize;
size += addsize;
goto repeat_frag;
}
if (avail_in) goto repeat_frag;
/*
BrotliDecoderHasMoreOutput(br) returns BROTLI_BOOL which is defined differently for different compilers, so we must not use it
if (BrotliDecoderHasMoreOutput(br)) goto repeat_frag;
*/
offset += f->length;
}
finish:
BrotliDecoderDestroyInstance(br);
after_inflateend:
if (err && next_out == p) {
mem_free(p);
return 1;
}
ce->decompressed = p;
ce->decompressed_len = next_out - p;
decompressed_cache_size += ce->decompressed_len;
ce->decompressed = mem_realloc(ce->decompressed, ce->decompressed_len);
return 0;
}
#endif
#ifdef HAVE_ZSTD
#include <zstd.h>
static int decode_zstd(struct terminal *term, struct cache_entry *ce, int *errp)
{
ZSTD_DStream *zstd_stream = NULL;
struct fragment *f;
struct list_head *lf;
off_t offset;
#ifdef HAVE_LONG_LONG
unsigned long long dec_size;
#else
size_t dec_size;
#endif
size_t ret;
unsigned char *p = NULL;
size_t size;
ZSTD_inBuffer in;
ZSTD_outBuffer out;
zstd_stream = ZSTD_createDStream();
if (!zstd_stream) {
mem_error:
decompress_error(term, ce, cast_uchar "zstd", TEXT_(T_OUT_OF_MEMORY), errp);
goto err_ret;
}
ret = ZSTD_initDStream(zstd_stream);
if (ZSTD_isError(ret)) {
decompress_error(term, ce, cast_uchar "zstd", cast_uchar ZSTD_getErrorName(ret), errp);
goto err_ret;
}
dec_size = 0;
if (!list_empty(ce->frag)) {
f = list_struct(ce->frag.next, struct fragment);
dec_size = ZSTD_getDecompressedSize(f->data, f->length);
/*debug("dec size %llx\n", dec_size);*/
if (ZSTD_isError(dec_size))
dec_size = 0;
}
decoder_memory_init(&p, &size, dec_size && dec_size < MAXINT ? (off_t)dec_size : ce->length);
out.dst = p;
out.size = size;
out.pos = 0;
offset = 0;
foreach(struct fragment, f, lf, ce->frag) {
if (f->offset != offset) break;
in.src = f->data;
in.size = f->length;
in.pos = 0;
repeat_frag:
ret = ZSTD_decompressStream(zstd_stream, &out, &in);
if (ZSTD_isError(ret)) {
decompress_error(term, ce, cast_uchar "zstd", cast_uchar ZSTD_getErrorName(ret), errp);
goto err_ret;
}
if (out.pos == out.size) {
size_t addsize;
if (decoder_memory_expand(&p, size, &addsize) < 0)
goto mem_error;
out.dst = p + size;
out.size = addsize;
out.pos = 0;
size += addsize;
goto repeat_frag;
}
if (in.pos < in.size)
goto repeat_frag;
offset += f->length;
}
ZSTD_freeDStream(zstd_stream);
zstd_stream = NULL;
ce->decompressed = p;
ce->decompressed_len = (unsigned char *)out.dst + out.pos - p;
decompressed_cache_size += ce->decompressed_len;
ce->decompressed = mem_realloc(ce->decompressed, ce->decompressed_len);
return 0;
err_ret:
if (p)
mem_free(p);
if (zstd_stream)
ZSTD_freeDStream(zstd_stream);
return 1;
}
#endif
#ifdef HAVE_BZIP2
#include <bzlib.h>
static int decode_bzip2(struct terminal *term, struct cache_entry *ce, int *errp)
{
unsigned char err;
unsigned char memory_error;
bz_stream z;
off_t offset;
int r;
unsigned char *p;
struct fragment *f;
struct list_head *lf;
size_t size;
retry_after_memory_error:
err = 0;
memory_error = 0;
decoder_memory_init(&p, &size, ce->length);
memset(&z, 0, sizeof z);
z.next_in = NULL;
z.avail_in = 0;
z.next_out = cast_char p;
z.avail_out = (unsigned)size;
z.bzalloc = NULL;
z.bzfree = NULL;
z.opaque = NULL;
r = BZ2_bzDecompressInit(&z, 0, 0);
init_failed:
switch (r) {
case BZ_OK: break;
case BZ_MEM_ERROR: memory_error = 1;
err = 1;
goto after_inflateend;
case BZ_PARAM_ERROR:
decompress_error(term, ce, cast_uchar "bzip2", cast_uchar "Invalid parameter", errp);
err = 1;
goto after_inflateend;
case BZ_CONFIG_ERROR: decompress_error(term, ce, cast_uchar "bzip2", cast_uchar "Bzlib is miscompiled", errp);
err = 1;
goto after_inflateend;
default: decompress_error(term, ce, cast_uchar "bzip2", cast_uchar "Unknown return value on BZ2_bzDecompressInit", errp);
err = 1;
goto after_inflateend;
}
offset = 0;
foreach(struct fragment, f, lf, ce->frag) {
if (f->offset != offset) break;
z.next_in = cast_char f->data;
z.avail_in = (unsigned)f->length;
if ((off_t)z.avail_in != f->length) overalloc();
repeat_frag:
r = BZ2_bzDecompress(&z);
switch (r) {
case BZ_OK: break;
case BZ_STREAM_END:
r = BZ2_bzDecompressEnd(&z);
if (r != BZ_OK) goto end_failed;
r = BZ2_bzDecompressInit(&z, 0, 0);
if (r != BZ_OK) goto init_failed;
break;
case BZ_DATA_ERROR_MAGIC:
case BZ_DATA_ERROR: decompress_error(term, ce, cast_uchar "bzip2", TEXT_(T_COMPRESSED_ERROR), errp);
err = 1;
goto finish;
case BZ_PARAM_ERROR: decompress_error(term, ce, cast_uchar "bzip2", cast_uchar "Internal error on BZ2_bzDecompress", errp);
err = 1;
goto finish;
case BZ_MEM_ERROR:
mem_error: memory_error = 1;
err = 1;
goto finish;
default: decompress_error(term, ce, cast_uchar "bzip2", cast_uchar "Unknown return value on BZ2_bzDecompress", errp);
err = 1;
break;
}
if (!z.avail_out) {
size_t addsize;
if (decoder_memory_expand(&p, size, &addsize) < 0)
goto mem_error;
z.next_out = cast_char(p + size);
z.avail_out = (unsigned)addsize;
size += addsize;
goto repeat_frag;
}
if (z.avail_in) goto repeat_frag;
offset += f->length;
}
finish:
r = BZ2_bzDecompressEnd(&z);
end_failed:
switch (r) {
case BZ_OK: break;
case BZ_PARAM_ERROR: decompress_error(term, ce, cast_uchar "bzip2", cast_uchar "Internal error on BZ2_bzDecompressEnd", errp);
err = 1;
break;
case BZ_MEM_ERROR: memory_error = 1;
err = 1;
break;
default: decompress_error(term, ce, cast_uchar "bzip2", cast_uchar "Unknown return value on BZ2_bzDecompressEnd", errp);
err = 1;
break;
}
after_inflateend:
if (memory_error) {
mem_free(p);
if (out_of_memory(0, NULL, 0))
goto retry_after_memory_error;
decompress_error(term, ce, cast_uchar "bzip2", TEXT_(T_OUT_OF_MEMORY), errp);
return 1;
}
if (err && (unsigned char *)z.next_out == p) {
mem_free(p);
return 1;
}
ce->decompressed = p;
ce->decompressed_len = (unsigned char *)z.next_out - (unsigned char *)p;
decompressed_cache_size += ce->decompressed_len;
ce->decompressed = mem_realloc(ce->decompressed, ce->decompressed_len);
return 0;
}
#endif
#ifdef HAVE_LZMA
#include <lzma.h>
#define internal internal_
static int decode_lzma(struct terminal *term, struct cache_entry *ce, int *errp)
{
unsigned char err;
unsigned char memory_error;
lzma_stream z = LZMA_STREAM_INIT;
off_t offset;
int r;
unsigned char *p;
struct fragment *f;
struct list_head *lf;
size_t size;
retry_after_memory_error:
err = 0;
memory_error = 0;
decoder_memory_init(&p, &size, ce->length);
z.next_in = NULL;
z.avail_in = 0;
z.next_out = p;
z.avail_out = size;
r = lzma_auto_decoder(&z, UINT64_MAX, 0);
init_failed:
switch (r) {
case LZMA_OK: break;
case LZMA_MEM_ERROR: memory_error = 1;
err = 1;
goto after_inflateend;
case LZMA_OPTIONS_ERROR:
decompress_error(term, ce, cast_uchar "lzma", cast_uchar "Invalid parameter", errp);
err = 1;
goto after_inflateend;
case LZMA_PROG_ERROR: decompress_error(term, ce, cast_uchar "lzma", cast_uchar "Lzma is miscompiled", errp);
err = 1;
goto after_inflateend;
default: decompress_error(term, ce, cast_uchar "lzma", cast_uchar "Unknown return value on lzma_auto_decoder", errp);
err = 1;
goto after_inflateend;
}
offset = 0;
foreach(struct fragment, f, lf, ce->frag) {
if (f->offset != offset) break;
z.next_in = f->data;
z.avail_in = (size_t)f->length;
if ((off_t)z.avail_in != f->length) overalloc();
repeat_frag:
r = lzma_code(&z, LZMA_RUN);
switch (r) {
case LZMA_OK:
case LZMA_NO_CHECK:
case LZMA_UNSUPPORTED_CHECK:
case LZMA_GET_CHECK:
break;
case LZMA_STREAM_END:
lzma_end(&z);
r = lzma_auto_decoder(&z, UINT64_MAX, 0);
if (r != LZMA_OK) goto init_failed;
break;
case LZMA_MEM_ERROR:
mem_error: memory_error = 1;
err = 1;
goto finish;
case LZMA_MEMLIMIT_ERROR:
decompress_error(term, ce, cast_uchar "lzma", cast_uchar "Memory limit was exceeded", errp);
err = 1;
goto finish;
case LZMA_FORMAT_ERROR:
case LZMA_DATA_ERROR:
case LZMA_BUF_ERROR:
decompress_error(term, ce, cast_uchar "lzma", TEXT_(T_COMPRESSED_ERROR), errp);
err = 1;
goto finish;
case LZMA_OPTIONS_ERROR:decompress_error(term, ce, cast_uchar "lzma", cast_uchar "File contains unsupported options", errp);
err = 1;
goto finish;
case LZMA_PROG_ERROR: decompress_error(term, ce, cast_uchar "lzma", cast_uchar "Lzma is miscompiled", errp);
err = 1;
goto finish;
default: decompress_error(term, ce, cast_uchar "lzma", cast_uchar "Unknown return value on lzma_code", errp);
err = 1;
break;
}
if (!z.avail_out) {
size_t addsize;
if (decoder_memory_expand(&p, size, &addsize) < 0)
goto mem_error;
z.next_out = p + size;
z.avail_out = addsize;
size += addsize;
goto repeat_frag;
}
if (z.avail_in) goto repeat_frag;
offset += f->length;
}
finish:
lzma_end(&z);
after_inflateend:
if (memory_error) {
mem_free(p);
if (out_of_memory(0, NULL, 0))
goto retry_after_memory_error;
decompress_error(term, ce, cast_uchar "lzma", TEXT_(T_OUT_OF_MEMORY), errp);
return 1;
}
if (err && (unsigned char *)z.next_out == p) {
mem_free(p);
return 1;
}
ce->decompressed = p;
ce->decompressed_len = (unsigned char *)z.next_out - (unsigned char *)p;
decompressed_cache_size += ce->decompressed_len;
ce->decompressed = mem_realloc(ce->decompressed, ce->decompressed_len);
return 0;
}
#endif
#ifdef HAVE_LZIP
#include <lzlib.h>
static int decode_lzip(struct terminal *term, struct cache_entry *ce, int *errp)
{
unsigned char err;
unsigned char memory_error;
void *lz;
off_t offset;
int r;
enum LZ_Errno le;
unsigned char *p;
struct fragment *f;
struct list_head *lf;
size_t size;
size_t used_size;
retry_after_memory_error:
err = 0;
memory_error = 0;
decoder_memory_init(&p, &size, ce->length);
used_size = 0;
lz = LZ_decompress_open();
if (!lz) {
err = 1;
memory_error = 1;
goto after_inflateend;
}
if (LZ_decompress_errno(lz) != LZ_ok) {
lz_error:
le = LZ_decompress_errno(lz);
if (0)
mem_error: le = LZ_mem_error;
err = 1;
if (le == LZ_mem_error) {
memory_error = 1;
} else if (!ce->incomplete) {
decompress_error(term, ce, cast_uchar "lzip", cast_uchar LZ_strerror(le), errp);
}
goto finish;
}
offset = 0;
foreach(struct fragment, f, lf, ce->frag) {
unsigned char *current_ptr;
int current_len;
if (f->offset != offset) break;
current_ptr = f->data;
current_len = (int)f->length;
while (current_len) {
r = LZ_decompress_write(lz, current_ptr, current_len);
if (r == -1)
goto lz_error;
current_ptr += r;
current_len -= r;
do {
if (used_size == size) {
size_t addsize;
if (decoder_memory_expand(&p, size, &addsize) < 0)
goto mem_error;
size += addsize;
}
r = LZ_decompress_read(lz, p + used_size, (int)(size - used_size));
if (r == -1)
goto lz_error;
used_size += r;
} while (r);
}
offset += f->length;
}
r = LZ_decompress_finish(lz);
if (r == -1)
goto lz_error;
while ((r = LZ_decompress_finished(lz)) == 0) {
if (used_size == size) {
size_t addsize;
if (decoder_memory_expand(&p, size, &addsize) < 0)
goto mem_error;
size += addsize;
}
r = LZ_decompress_read(lz, p + used_size, (int)(size - used_size));
if (r == -1)
goto lz_error;
used_size += r;
}
if (r == -1)
goto lz_error;
finish:
LZ_decompress_close(lz);
after_inflateend:
if (memory_error) {
mem_free(p);
if (out_of_memory(0, NULL, 0))
goto retry_after_memory_error;
decompress_error(term, ce, cast_uchar "lzip", TEXT_(T_OUT_OF_MEMORY), errp);
return 1;
}
if (err && !used_size) {
mem_free(p);
return 1;
}
ce->decompressed = p;
ce->decompressed_len = used_size;
decompressed_cache_size += ce->decompressed_len;
ce->decompressed = mem_realloc(ce->decompressed, ce->decompressed_len);
return 0;
}
#endif
int get_file_by_term(struct terminal *term, struct cache_entry *ce, unsigned char **start, size_t *len, int *errp)
{
unsigned char *enc;
struct fragment *fr;
int e;
if (errp) *errp = 0;
*start = NULL;
*len = 0;
if (!ce) return 1;
if (ce->decompressed) {
#if defined(HAVE_ANY_COMPRESSION)
return_decompressed:
#endif
*start = ce->decompressed;
*len = ce->decompressed_len;
return 0;
}
enc = get_content_encoding(ce->head, ce->url, 0);
if (enc) {
#ifdef HAVE_ZLIB
if (!casestrcmp(enc, cast_uchar "gzip") || !casestrcmp(enc, cast_uchar "x-gzip") || !casestrcmp(enc, cast_uchar "deflate")) {
int defl = !casestrcmp(enc, cast_uchar "deflate");
mem_free(enc);
if (decode_gzip(term, ce, defl, errp)) goto uncompressed;
goto return_decompressed;
}
#endif
#ifdef HAVE_BROTLI
if (!casestrcmp(enc, cast_uchar "br")) {
mem_free(enc);
if (decode_brotli(term, ce, errp)) goto uncompressed;
goto return_decompressed;
}
#endif
#ifdef HAVE_ZSTD
if (!casestrcmp(enc, cast_uchar "zstd")) {
mem_free(enc);
if (decode_zstd(term, ce, errp)) goto uncompressed;
goto return_decompressed;
}
#endif
#ifdef HAVE_BZIP2
if (!casestrcmp(enc, cast_uchar "bzip2")) {
mem_free(enc);
if (decode_bzip2(term, ce, errp)) goto uncompressed;
goto return_decompressed;
}
#endif
#ifdef HAVE_LZMA
if (!casestrcmp(enc, cast_uchar "lzma") || !casestrcmp(enc, cast_uchar "lzma2")) {
mem_free(enc);
if (decode_lzma(term, ce, errp)) goto uncompressed;
goto return_decompressed;
}
#endif
#ifdef HAVE_LZIP
if (!casestrcmp(enc, cast_uchar "lzip")) {
mem_free(enc);
if (decode_lzip(term, ce, errp)) goto uncompressed;
goto return_decompressed;
}
#endif
mem_free(enc);
goto uncompressed;
}
uncompressed:
if ((e = defrag_entry(ce)) < 0) {
unsigned char *msg = get_err_msg(e, term);
if (display_error(term, TEXT_(T_ERROR), errp)) {
unsigned char *u = display_url(term, ce->url, 1);
msg_box(term, getml(u, NULL), TEXT_(T_ERROR), AL_CENTER, TEXT_(T_ERROR_LOADING), cast_uchar " ", u, cast_uchar ":\n\n", msg, MSG_BOX_END, NULL, 1, TEXT_(T_CANCEL), msg_box_null, B_ENTER | B_ESC);
}
}
if (list_empty(ce->frag)) return 1;
fr = list_struct(ce->frag.next, struct fragment);
if (fr->offset || !fr->length) return 1;
*start = fr->data;
*len = fr->length;
return 0;
}
int get_file(struct object_request *o, unsigned char **start, size_t *len)
{
struct terminal *term;
*start = NULL;
*len = 0;
if (!o) return 1;
term = find_terminal(o->term);
return get_file_by_term(term, o->ce, start, len, NULL);
}
void free_decompressed_data(struct cache_entry *e)
{
if (e->decompressed) {
if (decompressed_cache_size < e->decompressed_len)
internal_error("free_decompressed_data: decompressed_cache_size underflow %lu, %lu", (unsigned long)decompressed_cache_size, (unsigned long)e->decompressed_len);
decompressed_cache_size -= e->decompressed_len;
e->decompressed_len = 0;
mem_free(e->decompressed);
e->decompressed = NULL;
}
}
#ifdef HAVE_ANY_COMPRESSION
void add_compress_methods(unsigned char **s, int *l)
{
int cl = 0;
#ifdef HAVE_ZLIB
{
if (!cl) cl = 1; else add_to_str(s, l, cast_uchar ", ");
add_to_str(s, l, cast_uchar "ZLIB");
#ifdef zlib_version
add_to_str(s, l, cast_uchar " (");
add_to_str(s, l, (unsigned char *)zlib_version);
add_chr_to_str(s, l, ')');
#endif
}
#endif
#ifdef HAVE_BROTLI
{
unsigned bv = BrotliDecoderVersion();
if (!cl) cl = 1; else add_to_str(s, l, cast_uchar ", ");
add_to_str(s, l, cast_uchar "BROTLI");
add_to_str(s, l, cast_uchar " (");
add_num_to_str(s, l, bv >> 24);
add_chr_to_str(s, l, '.');
add_num_to_str(s, l, (bv >> 12) & 0xfff);
add_chr_to_str(s, l, '.');
add_num_to_str(s, l, bv & 0xfff);
add_chr_to_str(s, l, ')');
}
#endif
#ifdef HAVE_ZSTD
{
unsigned zv = ZSTD_versionNumber();
if (!cl) cl = 1; else add_to_str(s, l, cast_uchar ", ");
add_to_str(s, l, cast_uchar "ZSTD");
add_to_str(s, l, cast_uchar " (");
add_num_to_str(s, l, zv / 10000);
add_chr_to_str(s, l, '.');
add_num_to_str(s, l, zv / 100 % 100);
add_chr_to_str(s, l, '.');
add_num_to_str(s, l, zv % 100);
add_chr_to_str(s, l, ')');
}
#endif
#ifdef HAVE_BZIP2
{
unsigned char *b = (unsigned char *)BZ2_bzlibVersion();
int bl = (int)strcspn(cast_const_char b, ",");
if (!cl) cl = 1; else add_to_str(s, l, cast_uchar ", ");
add_to_str(s, l, cast_uchar "BZIP2");
add_to_str(s, l, cast_uchar " (");
add_bytes_to_str(s, l, b, bl);
add_chr_to_str(s, l, ')');
}
#endif
#ifdef HAVE_LZMA
{
if (!cl) cl = 1; else add_to_str(s, l, cast_uchar ", ");
add_to_str(s, l, cast_uchar "LZMA");
add_to_str(s, l, cast_uchar " (");
add_to_str(s, l, cast_uchar lzma_version_string());
add_chr_to_str(s, l, ')');
}
#endif
#ifdef HAVE_LZIP
{
if (!cl) cl = 1; else add_to_str(s, l, cast_uchar ", ");
add_to_str(s, l, cast_uchar "LZIP");
add_to_str(s, l, cast_uchar " (");
add_to_str(s, l, cast_uchar LZ_version());
add_chr_to_str(s, l, ')');
}
#endif
}
#endif

1160
config-vms.h Normal file

File diff suppressed because it is too large Load Diff

976
config.guess vendored Normal file
View File

@ -0,0 +1,976 @@
#! /bin/sh
# Attempt to guess a canonical system name.
# Copyright (C) 1992, 93, 94, 95, 96, 97, 1998 Free Software Foundation, Inc.
#
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
# configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that program.
# Written by Per Bothner <bothner@cygnus.com>.
# The master version of this file is at the FSF in /home/gd/gnu/lib.
#
# This script attempts to guess a canonical system name similar to
# config.sub. If it succeeds, it prints the system name on stdout, and
# exits with 0. Otherwise, it exits with 1.
#
# The plan is that this can be called by configure scripts if you
# don't specify an explicit system type (host/target name).
#
# Only a few systems have been added to this list; please add others
# (but try to keep the structure clean).
#
# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
# (ghazi@noc.rutgers.edu 8/24/94.)
if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
PATH=$PATH:/.attbin ; export PATH
fi
UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
dummy=dummy-$$
trap 'rm -f $dummy.c $dummy.o $dummy; exit 1' 1 2 15
# Note: order is significant - the case branches are not exclusive.
case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
*:OS/2:*:*)
echo "i386-pc-os2_emx"
exit 0;;
alpha:OSF1:*:*)
if test $UNAME_RELEASE = "V4.0"; then
UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
fi
# A Vn.n version is a released version.
# A Tn.n version is a released field test version.
# A Xn.n version is an unreleased experimental baselevel.
# 1.2 uses "1.2" for uname -r.
cat <<EOF >$dummy.s
.globl main
.ent main
main:
.frame \$30,0,\$26,0
.prologue 0
.long 0x47e03d80 # implver $0
lda \$2,259
.long 0x47e20c21 # amask $2,$1
srl \$1,8,\$2
sll \$2,2,\$2
sll \$0,3,\$0
addl \$1,\$0,\$0
addl \$2,\$0,\$0
ret \$31,(\$26),1
.end main
EOF
${CC-cc} $dummy.s -o $dummy 2>/dev/null
if test "$?" = 0 ; then
./$dummy
case "$?" in
7)
UNAME_MACHINE="alpha"
;;
15)
UNAME_MACHINE="alphaev5"
;;
14)
UNAME_MACHINE="alphaev56"
;;
10)
UNAME_MACHINE="alphapca56"
;;
16)
UNAME_MACHINE="alphaev6"
;;
esac
fi
rm -f $dummy.s $dummy
echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr [[A-Z]] [[a-z]]`
exit 0 ;;
21064:Windows_NT:50:3)
echo alpha-dec-winnt3.5
exit 0 ;;
Amiga*:UNIX_System_V:4.0:*)
echo m68k-cbm-sysv4
exit 0;;
amiga:NetBSD:*:*)
echo m68k-cbm-netbsd${UNAME_RELEASE}
exit 0 ;;
amiga:OpenBSD:*:*)
echo m68k-unknown-openbsd${UNAME_RELEASE}
exit 0 ;;
*:[Aa]miga[Oo][Ss]:*:*)
echo ${UNAME_MACHINE}-unknown-amigaos
exit 0 ;;
arc64:OpenBSD:*:*)
echo mips64el-unknown-openbsd${UNAME_RELEASE}
exit 0 ;;
arc:OpenBSD:*:*)
echo mipsel-unknown-openbsd${UNAME_RELEASE}
exit 0 ;;
hkmips:OpenBSD:*:*)
echo mips-unknown-openbsd${UNAME_RELEASE}
exit 0 ;;
pmax:OpenBSD:*:*)
echo mipsel-unknown-openbsd${UNAME_RELEASE}
exit 0 ;;
sgi:OpenBSD:*:*)
echo mips-unknown-openbsd${UNAME_RELEASE}
exit 0 ;;
wgrisc:OpenBSD:*:*)
echo mipsel-unknown-openbsd${UNAME_RELEASE}
exit 0 ;;
arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
echo arm-acorn-riscix${UNAME_RELEASE}
exit 0;;
arm32:NetBSD:*:*)
echo arm-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
exit 0 ;;
SR2?01:HI-UX/MPP:*:*)
echo hppa1.1-hitachi-hiuxmpp
exit 0;;
Pyramid*:OSx*:*:*|MIS*:OSx*:*:*|MIS*:SMP_DC-OSx*:*:*)
# akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
if test "`(/bin/universe) 2>/dev/null`" = att ; then
echo pyramid-pyramid-sysv3
else
echo pyramid-pyramid-bsd
fi
exit 0 ;;
NILE:*:*:dcosx)
echo pyramid-pyramid-svr4
exit 0 ;;
sun4H:SunOS:5.*:*)
echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
exit 0 ;;
sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
exit 0 ;;
i86pc:SunOS:5.*:*)
echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
exit 0 ;;
sun4*:SunOS:6*:*)
# According to config.sub, this is the proper way to canonicalize
# SunOS6. Hard to guess exactly what SunOS6 will be like, but
# it's likely to be more like Solaris than SunOS4.
echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
exit 0 ;;
sun4*:SunOS:*:*)
case "`/usr/bin/arch -k`" in
Series*|S4*)
UNAME_RELEASE=`uname -v`
;;
esac
# Japanese Language versions have a version number like `4.1.3-JL'.
echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
exit 0 ;;
sun3*:SunOS:*:*)
echo m68k-sun-sunos${UNAME_RELEASE}
exit 0 ;;
sun*:*:4.2BSD:*)
UNAME_RELEASE=`(head -1 /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
case "`/bin/arch`" in
sun3)
echo m68k-sun-sunos${UNAME_RELEASE}
;;
sun4)
echo sparc-sun-sunos${UNAME_RELEASE}
;;
esac
exit 0 ;;
aushp:SunOS:*:*)
echo sparc-auspex-sunos${UNAME_RELEASE}
exit 0 ;;
atari*:NetBSD:*:*)
echo m68k-atari-netbsd${UNAME_RELEASE}
exit 0 ;;
atari*:OpenBSD:*:*)
echo m68k-unknown-openbsd${UNAME_RELEASE}
exit 0 ;;
sun3*:NetBSD:*:*)
echo m68k-sun-netbsd${UNAME_RELEASE}
exit 0 ;;
sun3*:OpenBSD:*:*)
echo m68k-unknown-openbsd${UNAME_RELEASE}
exit 0 ;;
mac68k:NetBSD:*:*)
echo m68k-apple-netbsd${UNAME_RELEASE}
exit 0 ;;
mac68k:OpenBSD:*:*)
echo m68k-unknown-openbsd${UNAME_RELEASE}
exit 0 ;;
mvme68k:OpenBSD:*:*)
echo m68k-unknown-openbsd${UNAME_RELEASE}
exit 0 ;;
mvme88k:OpenBSD:*:*)
echo m88k-unknown-openbsd${UNAME_RELEASE}
exit 0 ;;
powerpc:machten:*:*)
echo powerpc-apple-machten${UNAME_RELEASE}
exit 0 ;;
macppc:NetBSD:*:*)
echo powerpc-apple-netbsd${UNAME_RELEASE}
exit 0 ;;
RISC*:Mach:*:*)
echo mips-dec-mach_bsd4.3
exit 0 ;;
RISC*:ULTRIX:*:*)
echo mips-dec-ultrix${UNAME_RELEASE}
exit 0 ;;
VAX*:ULTRIX*:*:*)
echo vax-dec-ultrix${UNAME_RELEASE}
exit 0 ;;
2020:CLIX:*:*)
echo clipper-intergraph-clix${UNAME_RELEASE}
exit 0 ;;
mips:*:*:UMIPS | mips:*:*:RISCos)
sed 's/^ //' << EOF >$dummy.c
int main (argc, argv) int argc; char **argv; {
#if defined (host_mips) && defined (MIPSEB)
#if defined (SYSTYPE_SYSV)
printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
#endif
#if defined (SYSTYPE_SVR4)
printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
#endif
#if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
#endif
#endif
exit (-1);
}
EOF
${CC-cc} $dummy.c -o $dummy \
&& ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
&& rm $dummy.c $dummy && exit 0
rm -f $dummy.c $dummy
echo mips-mips-riscos${UNAME_RELEASE}
exit 0 ;;
Night_Hawk:Power_UNIX:*:*)
echo powerpc-harris-powerunix
exit 0 ;;
m88k:CX/UX:7*:*)
echo m88k-harris-cxux7
exit 0 ;;
m88k:*:4*:R4*)
echo m88k-motorola-sysv4
exit 0 ;;
m88k:*:3*:R3*)
echo m88k-motorola-sysv3
exit 0 ;;
AViiON:dgux:*:*)
# DG/UX returns AViiON for all architectures
UNAME_PROCESSOR=`/usr/bin/uname -p`
if [ $UNAME_PROCESSOR = mc88100 -o $UNAME_PROCESSOR = mc88110 ] ; then
if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx \
-o ${TARGET_BINARY_INTERFACE}x = x ] ; then
echo m88k-dg-dgux${UNAME_RELEASE}
else
echo m88k-dg-dguxbcs${UNAME_RELEASE}
fi
else echo i586-dg-dgux${UNAME_RELEASE}
fi
exit 0 ;;
M88*:DolphinOS:*:*) # DolphinOS (SVR3)
echo m88k-dolphin-sysv3
exit 0 ;;
M88*:*:R3*:*)
# Delta 88k system running SVR3
echo m88k-motorola-sysv3
exit 0 ;;
XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
echo m88k-tektronix-sysv3
exit 0 ;;
Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
echo m68k-tektronix-bsd
exit 0 ;;
*:IRIX*:*:*)
echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
exit 0 ;;
????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX '
i?86:AIX:*:*)
echo i386-ibm-aix
exit 0 ;;
*:AIX:2:3)
if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
sed 's/^ //' << EOF >$dummy.c
#include <sys/systemcfg.h>
main()
{
if (!__power_pc())
exit(1);
puts("powerpc-ibm-aix3.2.5");
exit(0);
}
EOF
${CC-cc} $dummy.c -o $dummy && ./$dummy && rm $dummy.c $dummy && exit 0
rm -f $dummy.c $dummy
echo rs6000-ibm-aix3.2.5
elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
echo rs6000-ibm-aix3.2.4
else
echo rs6000-ibm-aix3.2
fi
exit 0 ;;
*:AIX:*:4)
IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | head -1 | awk '{ print $1 }'`
if /usr/sbin/lsattr -EHl ${IBM_CPU_ID} | grep POWER >/dev/null 2>&1; then
IBM_ARCH=rs6000
else
IBM_ARCH=powerpc
fi
if [ -x /usr/bin/oslevel ] ; then
IBM_REV=`/usr/bin/oslevel`
else
IBM_REV=4.${UNAME_RELEASE}
fi
echo ${IBM_ARCH}-ibm-aix${IBM_REV}
exit 0 ;;
*:AIX:*:*)
echo rs6000-ibm-aix
exit 0 ;;
ibmrt:4.4BSD:*|romp-ibm:BSD:*)
echo romp-ibm-bsd4.4
exit 0 ;;
ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC NetBSD and
echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
exit 0 ;; # report: romp-ibm BSD 4.3
*:BOSX:*:*)
echo rs6000-bull-bosx
exit 0 ;;
DPX/2?00:B.O.S.:*:*)
echo m68k-bull-sysv3
exit 0 ;;
9000/[34]??:4.3bsd:1.*:*)
echo m68k-hp-bsd
exit 0 ;;
hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
echo m68k-hp-bsd4.4
exit 0 ;;
9000/[34678]??:HP-UX:*:*)
case "${UNAME_MACHINE}" in
9000/31? ) HP_ARCH=m68000 ;;
9000/[34]?? ) HP_ARCH=m68k ;;
9000/6?? | 9000/7?? | 9000/80[24] | 9000/8?[13679] | 9000/892 )
sed 's/^ //' << EOF >$dummy.c
#include <stdlib.h>
#include <unistd.h>
int main ()
{
#if defined(_SC_KERNEL_BITS)
long bits = sysconf(_SC_KERNEL_BITS);
#endif
long cpu = sysconf (_SC_CPU_VERSION);
switch (cpu)
{
case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
case CPU_PA_RISC2_0:
#if defined(_SC_KERNEL_BITS)
switch (bits)
{
case 64: puts ("hppa2.0w"); break;
case 32: puts ("hppa2.0n"); break;
default: puts ("hppa2.0"); break;
} break;
#else /* !defined(_SC_KERNEL_BITS) */
puts ("hppa2.0"); break;
#endif
default: puts ("hppa1.0"); break;
}
exit (0);
}
EOF
(${CC-cc} $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy`
rm -f $dummy.c $dummy
esac
HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
echo ${HP_ARCH}-hp-hpux${HPUX_REV}
exit 0 ;;
3050*:HI-UX:*:*)
sed 's/^ //' << EOF >$dummy.c
#include <unistd.h>
int
main ()
{
long cpu = sysconf (_SC_CPU_VERSION);
/* The order matters, because CPU_IS_HP_MC68K erroneously returns
true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct
results, however. */
if (CPU_IS_PA_RISC (cpu))
{
switch (cpu)
{
case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
default: puts ("hppa-hitachi-hiuxwe2"); break;
}
}
else if (CPU_IS_HP_MC68K (cpu))
puts ("m68k-hitachi-hiuxwe2");
else puts ("unknown-hitachi-hiuxwe2");
exit (0);
}
EOF
${CC-cc} $dummy.c -o $dummy && ./$dummy && rm $dummy.c $dummy && exit 0
rm -f $dummy.c $dummy
echo unknown-hitachi-hiuxwe2
exit 0 ;;
9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
echo hppa1.1-hp-bsd
exit 0 ;;
9000/8??:4.3bsd:*:*)
echo hppa1.0-hp-bsd
exit 0 ;;
hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
echo hppa1.1-hp-osf
exit 0 ;;
hp8??:OSF1:*:*)
echo hppa1.0-hp-osf
exit 0 ;;
i?86:OSF1:*:*)
if [ -x /usr/sbin/sysversion ] ; then
echo ${UNAME_MACHINE}-unknown-osf1mk
else
echo ${UNAME_MACHINE}-unknown-osf1
fi
exit 0 ;;
parisc*:Lites*:*:*)
echo hppa1.1-hp-lites
exit 0 ;;
C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
echo c1-convex-bsd
exit 0 ;;
C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
if getsysinfo -f scalar_acc
then echo c32-convex-bsd
else echo c2-convex-bsd
fi
exit 0 ;;
C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
echo c34-convex-bsd
exit 0 ;;
C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
echo c38-convex-bsd
exit 0 ;;
C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
echo c4-convex-bsd
exit 0 ;;
CRAY*X-MP:*:*:*)
echo xmp-cray-unicos
exit 0 ;;
CRAY*Y-MP:*:*:*)
echo ymp-cray-unicos${UNAME_RELEASE}
exit 0 ;;
CRAY*[A-Z]90:*:*:*)
echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
| sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
-e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/
exit 0 ;;
CRAY*TS:*:*:*)
echo t90-cray-unicos${UNAME_RELEASE}
exit 0 ;;
CRAY*T3E:*:*:*)
echo t3e-cray-unicosmk${UNAME_RELEASE}
exit 0 ;;
CRAY-2:*:*:*)
echo cray2-cray-unicos
exit 0 ;;
F300:UNIX_System_V:*:*)
FUJITSU_SYS=`uname -p | tr [A-Z] [a-z] | sed -e 's/\///'`
FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
echo "f300-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
exit 0 ;;
F301:UNIX_System_V:*:*)
echo f301-fujitsu-uxpv`echo $UNAME_RELEASE | sed 's/ .*//'`
exit 0 ;;
hp3[0-9][05]:NetBSD:*:*)
echo m68k-hp-netbsd${UNAME_RELEASE}
exit 0 ;;
hp300:OpenBSD:*:*)
echo m68k-unknown-openbsd${UNAME_RELEASE}
exit 0 ;;
sparc*:BSD/OS:*:*)
echo sparc-unknown-bsdi${UNAME_RELEASE}
exit 0 ;;
i?86:BSD/386:*:* | i?86:BSD/OS:*:*)
echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
exit 0 ;;
*:BSD/OS:*:*)
echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
exit 0 ;;
*:FreeBSD:*:*)
echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
exit 0 ;;
*:NetBSD:*:*)
echo ${UNAME_MACHINE}-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
exit 0 ;;
*:OpenBSD:*:*)
echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
exit 0 ;;
i*:CYGWIN*:*)
echo ${UNAME_MACHINE}-pc-cygwin
exit 0 ;;
i*:MINGW*:*)
echo ${UNAME_MACHINE}-pc-mingw32
exit 0 ;;
p*:CYGWIN*:*)
echo powerpcle-unknown-cygwin
exit 0 ;;
prep*:SunOS:5.*:*)
echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
exit 0 ;;
*:GNU:*:*)
echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
exit 0 ;;
*:Linux:*:*)
# uname on the ARM produces all sorts of strangeness, and we need to
# filter it out.
case "$UNAME_MACHINE" in
arm* | sa110*) UNAME_MACHINE="arm" ;;
esac
# The BFD linker knows what the default object file format is, so
# first see if it will tell us.
ld_help_string=`ld --help 2>&1`
ld_supported_emulations=`echo $ld_help_string \
| sed -ne '/supported emulations:/!d
s/[ ][ ]*/ /g
s/.*supported emulations: *//
s/ .*//
p'`
case "$ld_supported_emulations" in
i?86linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" ; exit 0 ;;
i?86coff) echo "${UNAME_MACHINE}-pc-linux-gnucoff" ; exit 0 ;;
sparclinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;;
armlinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;;
m68klinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;;
elf32ppc) echo "powerpc-unknown-linux-gnu" ; exit 0 ;;
esac
if test "${UNAME_MACHINE}" = "alpha" ; then
sed 's/^ //' <<EOF >$dummy.s
.globl main
.ent main
main:
.frame \$30,0,\$26,0
.prologue 0
.long 0x47e03d80 # implver $0
lda \$2,259
.long 0x47e20c21 # amask $2,$1
srl \$1,8,\$2
sll \$2,2,\$2
sll \$0,3,\$0
addl \$1,\$0,\$0
addl \$2,\$0,\$0
ret \$31,(\$26),1
.end main
EOF
LIBC=""
${CC-cc} $dummy.s -o $dummy 2>/dev/null
if test "$?" = 0 ; then
./$dummy
case "$?" in
7)
UNAME_MACHINE="alpha"
;;
15)
UNAME_MACHINE="alphaev5"
;;
14)
UNAME_MACHINE="alphaev56"
;;
10)
UNAME_MACHINE="alphapca56"
;;
16)
UNAME_MACHINE="alphaev6"
;;
esac
objdump --private-headers $dummy | \
grep ld.so.1 > /dev/null
if test "$?" = 0 ; then
LIBC="libc1"
fi
fi
rm -f $dummy.s $dummy
echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} ; exit 0
elif test "${UNAME_MACHINE}" = "mips" ; then
cat >$dummy.c <<EOF
main(argc, argv)
int argc;
char *argv[];
{
#ifdef __MIPSEB__
printf ("%s-unknown-linux-gnu\n", argv[1]);
#endif
#ifdef __MIPSEL__
printf ("%sel-unknown-linux-gnu\n", argv[1]);
#endif
return 0;
}
EOF
${CC-cc} $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm $dummy.c $dummy && exit 0
rm -f $dummy.c $dummy
else
# Either a pre-BFD a.out linker (linux-gnuoldld)
# or one that does not give us useful --help.
# GCC wants to distinguish between linux-gnuoldld and linux-gnuaout.
# If ld does not provide *any* "supported emulations:"
# that means it is gnuoldld.
echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations:"
test $? != 0 && echo "${UNAME_MACHINE}-pc-linux-gnuoldld" && exit 0
case "${UNAME_MACHINE}" in
i?86)
VENDOR=pc;
;;
*)
VENDOR=unknown;
;;
esac
# Determine whether the default compiler is a.out or elf
cat >$dummy.c <<EOF
#include <features.h>
main(argc, argv)
int argc;
char *argv[];
{
#ifdef __ELF__
# ifdef __GLIBC__
# if __GLIBC__ >= 2
printf ("%s-${VENDOR}-linux-gnu\n", argv[1]);
# else
printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]);
# endif
# else
printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]);
# endif
#else
printf ("%s-${VENDOR}-linux-gnuaout\n", argv[1]);
#endif
return 0;
}
EOF
${CC-cc} $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm $dummy.c $dummy && exit 0
rm -f $dummy.c $dummy
fi ;;
# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. earlier versions
# are messed up and put the nodename in both sysname and nodename.
i?86:DYNIX/ptx:4*:*)
echo i386-sequent-sysv4
exit 0 ;;
i?86:UNIX_SV:4.2MP:2.*)
# Unixware is an offshoot of SVR4, but it has its own version
# number series starting with 2...
# I am not positive that other SVR4 systems won't match this,
# I just have to hope. -- rms.
# Use sysv4.2uw... so that sysv4* matches it.
echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
exit 0 ;;
i?86:*:4.*:* | i?86:SYSTEM_V:4.*:*)
if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
echo ${UNAME_MACHINE}-univel-sysv${UNAME_RELEASE}
else
echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE}
fi
exit 0 ;;
i?86:*:3.2:*)
if test -f /usr/options/cb.name; then
UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
elif /bin/uname -X 2>/dev/null >/dev/null ; then
UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')`
(/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486
(/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \
&& UNAME_MACHINE=i586
echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
else
echo ${UNAME_MACHINE}-pc-sysv32
fi
exit 0 ;;
i?86:UnixWare:*:*)
if /bin/uname -X 2>/dev/null >/dev/null ; then
(/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \
&& UNAME_MACHINE=i586
fi
echo ${UNAME_MACHINE}-unixware-${UNAME_RELEASE}-${UNAME_VERSION}
exit 0 ;;
pc:*:*:*)
# uname -m prints for DJGPP always 'pc', but it prints nothing about
# the processor, so we play safe by assuming i386.
echo i386-pc-msdosdjgpp
exit 0 ;;
Intel:Mach:3*:*)
echo i386-pc-mach3
exit 0 ;;
paragon:*:*:*)
echo i860-intel-osf1
exit 0 ;;
i860:*:4.*:*) # i860-SVR4
if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
else # Add other i860-SVR4 vendors below as they are discovered.
echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4
fi
exit 0 ;;
mini*:CTIX:SYS*5:*)
# "miniframe"
echo m68010-convergent-sysv
exit 0 ;;
M68*:*:R3V[567]*:*)
test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
3[34]??:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0)
OS_REL=''
test -r /etc/.relid \
&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
&& echo i486-ncr-sysv4.3${OS_REL} && exit 0
/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
&& echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;;
3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
&& echo i486-ncr-sysv4 && exit 0 ;;
m68*:LynxOS:2.*:*)
echo m68k-unknown-lynxos${UNAME_RELEASE}
exit 0 ;;
mc68030:UNIX_System_V:4.*:*)
echo m68k-atari-sysv4
exit 0 ;;
i?86:LynxOS:2.*:*)
echo i386-unknown-lynxos${UNAME_RELEASE}
exit 0 ;;
TSUNAMI:LynxOS:2.*:*)
echo sparc-unknown-lynxos${UNAME_RELEASE}
exit 0 ;;
rs6000:LynxOS:2.*:* | PowerPC:LynxOS:2.*:*)
echo rs6000-unknown-lynxos${UNAME_RELEASE}
exit 0 ;;
SM[BE]S:UNIX_SV:*:*)
echo mips-dde-sysv${UNAME_RELEASE}
exit 0 ;;
RM*:SINIX-*:*:*)
echo mips-sni-sysv4
exit 0 ;;
*:SINIX-*:*:*)
if uname -p 2>/dev/null >/dev/null ; then
UNAME_MACHINE=`(uname -p) 2>/dev/null`
echo ${UNAME_MACHINE}-sni-sysv4
else
echo ns32k-sni-sysv
fi
exit 0 ;;
PENTIUM:CPunix:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
# says <Richard.M.Bartel@ccMail.Census.GOV>
echo i586-unisys-sysv4
exit 0 ;;
*:UNIX_System_V:4*:FTX*)
# From Gerald Hewes <hewes@openmarket.com>.
# How about differentiating between stratus architectures? -djm
echo hppa1.1-stratus-sysv4
exit 0 ;;
*:*:*:FTX*)
# From seanf@swdc.stratus.com.
echo i860-stratus-sysv4
exit 0 ;;
mc68*:A/UX:*:*)
echo m68k-apple-aux${UNAME_RELEASE}
exit 0 ;;
news*:NEWS-OS:*:6*)
echo mips-sony-newsos6
exit 0 ;;
R3000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R4000:UNIX_SV:*:*)
if [ -d /usr/nec ]; then
echo mips-nec-sysv${UNAME_RELEASE}
else
echo mips-unknown-sysv${UNAME_RELEASE}
fi
exit 0 ;;
BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
echo powerpc-be-beos
exit 0 ;;
BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only.
echo powerpc-apple-beos
exit 0 ;;
BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
echo i586-pc-beos
exit 0 ;;
SX-4:SUPER-UX:*:*)
echo sx4-nec-superux${UNAME_RELEASE}
exit 0 ;;
SX-5:SUPER-UX:*:*)
echo sx5-nec-superux${UNAME_RELEASE}
exit 0 ;;
Power*:Rhapsody:*:*)
echo powerpc-apple-rhapsody${UNAME_RELEASE}
exit 0 ;;
*:Rhapsody:*:*)
echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
exit 0 ;;
esac
#echo '(No uname command or uname output not recognized.)' 1>&2
#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
cat >$dummy.c <<EOF
#ifdef _SEQUENT_
# include <sys/types.h>
# include <sys/utsname.h>
#endif
main ()
{
#if defined (sony)
#if defined (MIPSEB)
/* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
I don't know.... */
printf ("mips-sony-bsd\n"); exit (0);
#else
#include <sys/param.h>
printf ("m68k-sony-newsos%s\n",
#ifdef NEWSOS4
"4"
#else
""
#endif
); exit (0);
#endif
#endif
#if defined (__arm) && defined (__acorn) && defined (__unix)
printf ("arm-acorn-riscix"); exit (0);
#endif
#if defined (hp300) && !defined (hpux)
printf ("m68k-hp-bsd\n"); exit (0);
#endif
#if defined (NeXT)
#if !defined (__ARCHITECTURE__)
#define __ARCHITECTURE__ "m68k"
#endif
int version;
version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
if (version < 4)
printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
else
printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
exit (0);
#endif
#if defined (MULTIMAX) || defined (n16)
#if defined (UMAXV)
printf ("ns32k-encore-sysv\n"); exit (0);
#else
#if defined (CMU)
printf ("ns32k-encore-mach\n"); exit (0);
#else
printf ("ns32k-encore-bsd\n"); exit (0);
#endif
#endif
#endif
#if defined (__386BSD__)
printf ("i386-pc-bsd\n"); exit (0);
#endif
#if defined (sequent)
#if defined (i386)
printf ("i386-sequent-dynix\n"); exit (0);
#endif
#if defined (ns32000)
printf ("ns32k-sequent-dynix\n"); exit (0);
#endif
#endif
#if defined (_SEQUENT_)
struct utsname un;
uname(&un);
if (strncmp(un.version, "V2", 2) == 0) {
printf ("i386-sequent-ptx2\n"); exit (0);
}
if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
printf ("i386-sequent-ptx1\n"); exit (0);
}
printf ("i386-sequent-ptx\n"); exit (0);
#endif
#if defined (vax)
#if !defined (ultrix)
printf ("vax-dec-bsd\n"); exit (0);
#else
printf ("vax-dec-ultrix\n"); exit (0);
#endif
#endif
#if defined (alliant) && defined (i860)
printf ("i860-alliant-bsd\n"); exit (0);
#endif
exit (1);
}
EOF
${CC-cc} $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm $dummy.c $dummy && exit 0
rm -f $dummy.c $dummy
# Apollos put the system type in the environment.
test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; }
# Convex versions that predate uname can use getsysinfo(1)
if [ -x /usr/convex/getsysinfo ]
then
case `getsysinfo -f cpu_type` in
c1*)
echo c1-convex-bsd
exit 0 ;;
c2*)
if getsysinfo -f scalar_acc
then echo c32-convex-bsd
else echo c2-convex-bsd
fi
exit 0 ;;
c34*)
echo c34-convex-bsd
exit 0 ;;
c38*)
echo c38-convex-bsd
exit 0 ;;
c4*)
echo c4-convex-bsd
exit 0 ;;
esac
fi
#echo '(Unable to guess system type)' 1>&2
exit 1

1189
config.h.in Normal file

File diff suppressed because it is too large Load Diff

958
config.sub vendored Normal file
View File

@ -0,0 +1,958 @@
#! /bin/sh
# Configuration validation subroutine script, version 1.1.
# Copyright (C) 1991, 92-97, 1998 Free Software Foundation, Inc.
# This file is (in principle) common to ALL GNU software.
# The presence of a machine in this file suggests that SOME GNU software
# can handle that machine. It does not imply ALL GNU software can.
#
# This file is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330,
# Boston, MA 02111-1307, USA.
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
# configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that program.
# Configuration subroutine to validate and canonicalize a configuration type.
# Supply the specified configuration type as an argument.
# If it is invalid, we print an error message on stderr and exit with code 1.
# Otherwise, we print the canonical config type on stdout and succeed.
# This file is supposed to be the same for all GNU packages
# and recognize all the CPU types, system types and aliases
# that are meaningful with *any* GNU software.
# Each package is responsible for reporting which valid configurations
# it does not support. The user should be able to distinguish
# a failure to support a valid configuration from a meaningless
# configuration.
# The goal of this file is to map all the various variations of a given
# machine specification into a single specification in the form:
# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
# or in some cases, the newer four-part form:
# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
# It is wrong to echo any other type of specification.
if [ x$1 = x ]
then
echo Configuration name missing. 1>&2
echo "Usage: $0 CPU-MFR-OPSYS" 1>&2
echo "or $0 ALIAS" 1>&2
echo where ALIAS is a recognized configuration type. 1>&2
exit 1
fi
# First pass through any local machine types.
case $1 in
*local*)
echo $1
exit 0
;;
*)
;;
esac
# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
# Here we must recognize all the valid KERNEL-OS combinations.
maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
case $maybe_os in
linux-gnu*)
os=-$maybe_os
basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
;;
*)
basic_machine=`echo $1 | sed 's/-[^-]*$//'`
if [ $basic_machine != $1 ]
then os=`echo $1 | sed 's/.*-/-/'`
else os=; fi
;;
esac
### Let's recognize common machines as not being operating systems so
### that things like config.sub decstation-3100 work. We also
### recognize some manufacturers as not being operating systems, so we
### can provide default operating systems below.
case $os in
-sun*os*)
# Prevent following clause from handling this invalid input.
;;
-dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
-att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
-unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
-apple)
os=
basic_machine=$1
;;
-hiux*)
os=-hiuxwe2
;;
-sco5)
os=sco3.2v5
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
;;
-sco4)
os=-sco3.2v4
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
;;
-sco3.2.[4-9]*)
os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
;;
-sco3.2v[4-9]*)
# Don't forget version if it is 3.2v4 or newer.
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
;;
-sco*)
os=-sco3.2v2
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
;;
-isc)
os=-isc2.2
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
;;
-clix*)
basic_machine=clipper-intergraph
;;
-isc*)
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
;;
-lynx*)
os=-lynxos
;;
-ptx*)
basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
;;
-windowsnt*)
os=`echo $os | sed -e 's/windowsnt/winnt/'`
;;
-psos*)
os=-psos
;;
esac
# Decode aliases for certain CPU-COMPANY combinations.
case $basic_machine in
# Recognize the basic CPU types without company name.
# Some are omitted here because they have special meanings below.
tahoe | i860 | m32r | m68k | m68000 | m88k | ns32k | arc | arm \
| arme[lb] | pyramid | mn10200 | mn10300 | tron | a29k \
| 580 | i960 | h8300 | hppa | hppa1.0 | hppa1.1 | hppa2.0 \
| alpha | alphaev5 | alphaev56 | we32k | ns16k | clipper \
| i370 | sh | powerpc | powerpcle | 1750a | dsp16xx | pdp11 \
| mips64 | mipsel | mips64el | mips64orion | mips64orionel \
| mipstx39 | mipstx39el \
| sparc | sparclet | sparclite | sparc64 | v850)
basic_machine=$basic_machine-unknown
;;
# We use `pc' rather than `unknown'
# because (1) that's what they normally are, and
# (2) the word "unknown" tends to confuse beginning users.
i[34567]86)
basic_machine=$basic_machine-pc
;;
# Object if more than one company name word.
*-*-*)
echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
exit 1
;;
# Recognize the basic CPU types with company name.
vax-* | tahoe-* | i[34567]86-* | i860-* | m32r-* | m68k-* | m68000-* \
| m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | arm-* | c[123]* \
| mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \
| power-* | none-* | 580-* | cray2-* | h8300-* | i960-* \
| xmp-* | ymp-* | hppa-* | hppa1.0-* | hppa1.1-* | hppa2.0-* \
| alpha-* | alphaev5-* | alphaev56-* | we32k-* | cydra-* \
| ns16k-* | pn-* | np1-* | xps100-* | clipper-* | orion-* \
| sparclite-* | pdp11-* | sh-* | powerpc-* | powerpcle-* \
| sparc64-* | mips64-* | mipsel-* \
| mips64el-* | mips64orion-* | mips64orionel-* \
| mipstx39-* | mipstx39el-* \
| f301-*)
;;
# Recognize the various machine names and aliases which stand
# for a CPU type and a company and sometimes even an OS.
3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
basic_machine=m68000-att
;;
3b*)
basic_machine=we32k-att
;;
alliant | fx80)
basic_machine=fx80-alliant
;;
altos | altos3068)
basic_machine=m68k-altos
;;
am29k)
basic_machine=a29k-none
os=-bsd
;;
amdahl)
basic_machine=580-amdahl
os=-sysv
;;
amiga | amiga-*)
basic_machine=m68k-cbm
;;
amigaos | amigados)
basic_machine=m68k-cbm
os=-amigaos
;;
amigaunix | amix)
basic_machine=m68k-cbm
os=-sysv4
;;
apollo68)
basic_machine=m68k-apollo
os=-sysv
;;
aux)
basic_machine=m68k-apple
os=-aux
;;
balance)
basic_machine=ns32k-sequent
os=-dynix
;;
convex-c1)
basic_machine=c1-convex
os=-bsd
;;
convex-c2)
basic_machine=c2-convex
os=-bsd
;;
convex-c32)
basic_machine=c32-convex
os=-bsd
;;
convex-c34)
basic_machine=c34-convex
os=-bsd
;;
convex-c38)
basic_machine=c38-convex
os=-bsd
;;
cray | ymp)
basic_machine=ymp-cray
os=-unicos
;;
cray2)
basic_machine=cray2-cray
os=-unicos
;;
[ctj]90-cray)
basic_machine=c90-cray
os=-unicos
;;
crds | unos)
basic_machine=m68k-crds
;;
da30 | da30-*)
basic_machine=m68k-da30
;;
decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
basic_machine=mips-dec
;;
delta | 3300 | motorola-3300 | motorola-delta \
| 3300-motorola | delta-motorola)
basic_machine=m68k-motorola
;;
delta88)
basic_machine=m88k-motorola
os=-sysv3
;;
dpx20 | dpx20-*)
basic_machine=rs6000-bull
os=-bosx
;;
dpx2* | dpx2*-bull)
basic_machine=m68k-bull
os=-sysv3
;;
ebmon29k)
basic_machine=a29k-amd
os=-ebmon
;;
elxsi)
basic_machine=elxsi-elxsi
os=-bsd
;;
encore | umax | mmax)
basic_machine=ns32k-encore
;;
fx2800)
basic_machine=i860-alliant
;;
genix)
basic_machine=ns32k-ns
;;
gmicro)
basic_machine=tron-gmicro
os=-sysv
;;
h3050r* | hiux*)
basic_machine=hppa1.1-hitachi
os=-hiuxwe2
;;
h8300hms)
basic_machine=h8300-hitachi
os=-hms
;;
harris)
basic_machine=m88k-harris
os=-sysv3
;;
hp300-*)
basic_machine=m68k-hp
;;
hp300bsd)
basic_machine=m68k-hp
os=-bsd
;;
hp300hpux)
basic_machine=m68k-hp
os=-hpux
;;
hp9k2[0-9][0-9] | hp9k31[0-9])
basic_machine=m68000-hp
;;
hp9k3[2-9][0-9])
basic_machine=m68k-hp
;;
hp9k7[0-9][0-9] | hp7[0-9][0-9] | hp9k8[0-9]7 | hp8[0-9]7)
basic_machine=hppa1.1-hp
;;
hp9k8[0-9][0-9] | hp8[0-9][0-9])
basic_machine=hppa1.0-hp
;;
hppa-next)
os=-nextstep3
;;
i370-ibm* | ibm*)
basic_machine=i370-ibm
os=-mvs
;;
# I'm not sure what "Sysv32" means. Should this be sysv3.2?
i[34567]86v32)
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
os=-sysv32
;;
i[34567]86v4*)
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
os=-sysv4
;;
i[34567]86v)
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
os=-sysv
;;
i[34567]86sol2)
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
os=-solaris2
;;
iris | iris4d)
basic_machine=mips-sgi
case $os in
-irix*)
;;
*)
os=-irix4
;;
esac
;;
isi68 | isi)
basic_machine=m68k-isi
os=-sysv
;;
m88k-omron*)
basic_machine=m88k-omron
;;
magnum | m3230)
basic_machine=mips-mips
os=-sysv
;;
merlin)
basic_machine=ns32k-utek
os=-sysv
;;
miniframe)
basic_machine=m68000-convergent
;;
mipsel*-linux*)
basic_machine=mipsel-unknown
os=-linux-gnu
;;
mips*-linux*)
basic_machine=mips-unknown
os=-linux-gnu
;;
mips3*-*)
basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
;;
mips3*)
basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
;;
ncr3000)
basic_machine=i486-ncr
os=-sysv4
;;
news | news700 | news800 | news900)
basic_machine=m68k-sony
os=-newsos
;;
news1000)
basic_machine=m68030-sony
os=-newsos
;;
news-3600 | risc-news)
basic_machine=mips-sony
os=-newsos
;;
next | m*-next )
basic_machine=m68k-next
case $os in
-nextstep* )
;;
-ns2*)
os=-nextstep2
;;
*)
os=-nextstep3
;;
esac
;;
nh3000)
basic_machine=m68k-harris
os=-cxux
;;
nh[45]000)
basic_machine=m88k-harris
os=-cxux
;;
nindy960)
basic_machine=i960-intel
os=-nindy
;;
np1)
basic_machine=np1-gould
;;
pa-hitachi)
basic_machine=hppa1.1-hitachi
os=-hiuxwe2
;;
paragon)
basic_machine=i860-intel
os=-osf
;;
pbd)
basic_machine=sparc-tti
;;
pbb)
basic_machine=m68k-tti
;;
pc532 | pc532-*)
basic_machine=ns32k-pc532
;;
pentium | p5 | k5 | nexen)
basic_machine=i586-pc
;;
pentiumpro | p6 | k6 | 6x86)
basic_machine=i686-pc
;;
pentiumii | pentium2)
basic_machine=i786-pc
;;
pentium-* | p5-* | k5-* | nexen-*)
basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
;;
pentiumpro-* | p6-* | k6-* | 6x86-*)
basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
;;
pentiumii-* | pentium2-*)
basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
;;
pn)
basic_machine=pn-gould
;;
power) basic_machine=rs6000-ibm
;;
ppc) basic_machine=powerpc-unknown
;;
ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
;;
ppcle | powerpclittle | ppc-le | powerpc-little)
basic_machine=powerpcle-unknown
;;
ppcle-* | powerpclittle-*)
basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
;;
ps2)
basic_machine=i386-ibm
;;
rm[46]00)
basic_machine=mips-siemens
;;
rtpc | rtpc-*)
basic_machine=romp-ibm
;;
sequent)
basic_machine=i386-sequent
;;
sh)
basic_machine=sh-hitachi
os=-hms
;;
sps7)
basic_machine=m68k-bull
os=-sysv2
;;
spur)
basic_machine=spur-unknown
;;
sun2)
basic_machine=m68000-sun
;;
sun2os3)
basic_machine=m68000-sun
os=-sunos3
;;
sun2os4)
basic_machine=m68000-sun
os=-sunos4
;;
sun3os3)
basic_machine=m68k-sun
os=-sunos3
;;
sun3os4)
basic_machine=m68k-sun
os=-sunos4
;;
sun4os3)
basic_machine=sparc-sun
os=-sunos3
;;
sun4os4)
basic_machine=sparc-sun
os=-sunos4
;;
sun4sol2)
basic_machine=sparc-sun
os=-solaris2
;;
sun3 | sun3-*)
basic_machine=m68k-sun
;;
sun4)
basic_machine=sparc-sun
;;
sun386 | sun386i | roadrunner)
basic_machine=i386-sun
;;
symmetry)
basic_machine=i386-sequent
os=-dynix
;;
tx39)
basic_machine=mipstx39-unknown
;;
tx39el)
basic_machine=mipstx39el-unknown
;;
tower | tower-32)
basic_machine=m68k-ncr
;;
udi29k)
basic_machine=a29k-amd
os=-udi
;;
ultra3)
basic_machine=a29k-nyu
os=-sym1
;;
vaxv)
basic_machine=vax-dec
os=-sysv
;;
vms)
basic_machine=vax-dec
os=-vms
;;
vpp*|vx|vx-*)
basic_machine=f301-fujitsu
;;
vxworks960)
basic_machine=i960-wrs
os=-vxworks
;;
vxworks68)
basic_machine=m68k-wrs
os=-vxworks
;;
vxworks29k)
basic_machine=a29k-wrs
os=-vxworks
;;
xmp)
basic_machine=xmp-cray
os=-unicos
;;
xps | xps100)
basic_machine=xps100-honeywell
;;
none)
basic_machine=none-none
os=-none
;;
# Here we handle the default manufacturer of certain CPU types. It is in
# some cases the only manufacturer, in others, it is the most popular.
mips)
if [ x$os = x-linux-gnu ]; then
basic_machine=mips-unknown
else
basic_machine=mips-mips
fi
;;
romp)
basic_machine=romp-ibm
;;
rs6000)
basic_machine=rs6000-ibm
;;
vax)
basic_machine=vax-dec
;;
pdp11)
basic_machine=pdp11-dec
;;
we32k)
basic_machine=we32k-att
;;
sparc)
basic_machine=sparc-sun
;;
cydra)
basic_machine=cydra-cydrome
;;
orion)
basic_machine=orion-highlevel
;;
orion105)
basic_machine=clipper-highlevel
;;
*)
echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
exit 1
;;
esac
# Here we canonicalize certain aliases for manufacturers.
case $basic_machine in
*-digital*)
basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
;;
*-commodore*)
basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
;;
*)
;;
esac
# Decode manufacturer-specific aliases for certain operating systems.
if [ x"$os" != x"" ]
then
case $os in
# First match some system type aliases
# that might get confused with valid system types.
# -solaris* is a basic system type, with this one exception.
-solaris1 | -solaris1.*)
os=`echo $os | sed -e 's|solaris1|sunos4|'`
;;
-solaris)
os=-solaris2
;;
-svr4*)
os=-sysv4
;;
-unixware*)
os=-sysv4.2uw
;;
-gnu/linux*)
os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
;;
-os2_emx)
;;
# First accept the basic system types.
# The portable systems comes first.
# Each alternative MUST END IN A *, to match a version number.
# -sysv* is not here because it comes later, after sysvr4.
-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
| -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
| -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
| -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
| -aos* \
| -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
| -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
| -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \
| -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* \
| -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
| -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
| -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
| -mingw32* | -linux-gnu* | -uxpv* | -beos* | -rhapsody* \
| -openstep*)
# Remember, each alternative MUST END IN *, to match a version number.
;;
-linux*)
os=`echo $os | sed -e 's|linux|linux-gnu|'`
;;
-sunos5*)
os=`echo $os | sed -e 's|sunos5|solaris2|'`
;;
-sunos6*)
os=`echo $os | sed -e 's|sunos6|solaris3|'`
;;
-osfrose*)
os=-osfrose
;;
-osf*)
os=-osf
;;
-utek*)
os=-bsd
;;
-dynix*)
os=-bsd
;;
-acis*)
os=-aos
;;
-ctix* | -uts*)
os=-sysv
;;
-ns2 )
os=-nextstep2
;;
# Preserve the version number of sinix5.
-sinix5.*)
os=`echo $os | sed -e 's|sinix|sysv|'`
;;
-sinix*)
os=-sysv4
;;
-triton*)
os=-sysv3
;;
-oss*)
os=-sysv3
;;
-svr4)
os=-sysv4
;;
-svr3)
os=-sysv3
;;
-sysvr4)
os=-sysv4
;;
# This must come after -sysvr4.
-sysv*)
;;
-xenix)
os=-xenix
;;
-none)
;;
*)
# Get rid of the `-' at the beginning of $os.
os=`echo $os | sed 's/[^-]*-//'`
echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
exit 1
;;
esac
else
# Here we handle the default operating systems that come with various machines.
# The value should be what the vendor currently ships out the door with their
# machine or put another way, the most popular os provided with the machine.
# Note that if you're going to try to match "-MANUFACTURER" here (say,
# "-sun"), then you have to tell the case statement up towards the top
# that MANUFACTURER isn't an operating system. Otherwise, code above
# will signal an error saying that MANUFACTURER isn't an operating
# system, and we'll never get to this point.
case $basic_machine in
*-acorn)
os=-riscix1.2
;;
arm*-semi)
os=-aout
;;
pdp11-*)
os=-none
;;
*-dec | vax-*)
os=-ultrix4.2
;;
m68*-apollo)
os=-domain
;;
i386-sun)
os=-sunos4.0.2
;;
m68000-sun)
os=-sunos3
# This also exists in the configure program, but was not the
# default.
# os=-sunos4
;;
*-tti) # must be before sparc entry or we get the wrong os.
os=-sysv3
;;
sparc-* | *-sun)
os=-sunos4.1.1
;;
*-be)
os=-beos
;;
*-ibm)
os=-aix
;;
*-hp)
os=-hpux
;;
*-hitachi)
os=-hiux
;;
i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
os=-sysv
;;
*-cbm)
os=-amigaos
;;
*-dg)
os=-dgux
;;
*-dolphin)
os=-sysv3
;;
m68k-ccur)
os=-rtu
;;
m88k-omron*)
os=-luna
;;
*-next )
os=-nextstep
;;
*-sequent)
os=-ptx
;;
*-crds)
os=-unos
;;
*-ns)
os=-genix
;;
i370-*)
os=-mvs
;;
*-next)
os=-nextstep3
;;
*-gould)
os=-sysv
;;
*-highlevel)
os=-bsd
;;
*-encore)
os=-bsd
;;
*-sgi)
os=-irix
;;
*-siemens)
os=-sysv4
;;
*-masscomp)
os=-rtu
;;
f301-fujitsu)
os=-uxpv
;;
*)
os=-none
;;
esac
fi
# Here we handle the case where we know the os, and the CPU type, but not the
# manufacturer. We pick the logical manufacturer.
vendor=unknown
case $basic_machine in
*-unknown)
case $os in
-riscix*)
vendor=acorn
;;
-sunos*)
vendor=sun
;;
-aix*)
vendor=ibm
;;
-hpux*)
vendor=hp
;;
-hiux*)
vendor=hitachi
;;
-unos*)
vendor=crds
;;
-dgux*)
vendor=dg
;;
-luna*)
vendor=omron
;;
-genix*)
vendor=ns
;;
-mvs*)
vendor=ibm
;;
-ptx*)
vendor=sequent
;;
-vxsim* | -vxworks*)
vendor=wrs
;;
-aux*)
vendor=apple
;;
esac
basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
;;
esac
echo $basic_machine$os

12396
configure vendored Executable file

File diff suppressed because it is too large Load Diff

1543
configure.in Normal file

File diff suppressed because it is too large Load Diff

1127
connect.c Normal file

File diff suppressed because it is too large Load Diff

399
cookies.c Normal file
View File

@ -0,0 +1,399 @@
/* cookies.c
* Cookies
* (c) 2002 Mikulas Patocka
* This file is a part of the Links program, released under GPL
*/
#include "links.h"
#define ACCEPT_NONE 0
#define ACCEPT_ALL 1
struct list_head all_cookies = { &all_cookies, &all_cookies };
struct list_head c_domains = { &c_domains, &c_domains };
void free_cookie(struct cookie *c)
{
mem_free(c->name);
if (c->value) mem_free(c->value);
mem_free(c->server);
mem_free(c->path);
mem_free(c->domain);
mem_free(c);
}
static void accept_cookie(struct cookie *);
/* sezere 1 cookie z retezce str, na zacatku nesmi byt zadne whitechars
* na konci muze byt strednik nebo 0
* cookie musi byt ve tvaru nazev=hodnota, kolem rovnase nesmi byt zadne mezery
* (respektive mezery se budou pocitat do nazvu a do hodnoty)
*/
void set_cookie(unsigned char *url, unsigned char *str)
{
int noval = 0;
struct cookie *cookie;
unsigned char *p, *q, *s, *server, *date, *max_age, *dom;
if (!enable_cookies)
return;
for (p = str; *p != ';' && *p; p++) { /*if (WHITECHAR(*p)) return;*/ }
for (q = str; *q != '='; q++) if (!*q || q >= p) {
noval = 1;
break;
}
if (str == q || q + 1 == p) return;
cookie = mem_alloc(sizeof(struct cookie));
server = get_host_name(url);
cookie->saved_cookie = 0;
cookie->name = memacpy(str, q - str);
cookie->value = !noval ? memacpy(q + 1, p - q - 1) : NULL;
cookie->server = stracpy(server);
cookie->created = get_absolute_seconds();
cookie->expires = (time_t)-1;
date = parse_header_param(str, cast_uchar "expires", 0);
if (date) {
cookie->expires = parse_http_date(date);
/* if (!cookie->expires) debug("unable to parse '%s'", date); */
mem_free(date);
}
max_age = parse_header_param(str, cast_uchar "max-age", 0);
if (max_age) {
char *end;
long ma = strtol(cast_const_char max_age, &end, 10);
if (*max_age && !*end) {
if (ma < 0) {
cookie->expires = 0;
} else {
cookie->expires = (time_t)((uttime)cookie->created + (uttime)ma);
}
}
mem_free(max_age);
}
if (!(cookie->path = parse_header_param(str, cast_uchar "path", 0))) {
cookie->path = stracpy(cast_uchar "/");
} else {
if (cookie->path[0] != '/') {
add_to_strn(&cookie->path, cast_uchar "x");
memmove(cookie->path + 1, cookie->path, strlen(cast_const_char cookie->path) - 1);
cookie->path[0] = '/';
}
}
dom = parse_header_param(str, cast_uchar "domain", 0);
if (!dom) {
cookie->domain = stracpy(server);
} else {
cookie->domain = idn_encode_host(dom, (int)strlen(cast_const_char dom), cast_uchar ".", 0);
if (!cookie->domain)
cookie->domain = stracpy(server);
mem_free(dom);
}
if (cookie->domain[0] == '.') memmove(cookie->domain, cookie->domain + 1, strlen(cast_const_char cookie->domain));
if ((s = parse_header_param(str, cast_uchar "secure", 0))) {
cookie->secure = 1;
mem_free(s);
} else cookie->secure = 0;
if (!allow_cookie_domain(server, cookie->domain)) {
mem_free(cookie->domain);
cookie->domain = stracpy(server);
}
accept_cookie(cookie);
mem_free(server);
}
static void accept_cookie(struct cookie *c)
{
struct c_domain *cd;
struct list_head *lcd;
struct cookie *d;
struct list_head *ld;
size_t sl;
foreach(struct cookie, d, ld, all_cookies) if (!casestrcmp(d->name, c->name) && !casestrcmp(d->domain, c->domain)) {
ld = ld->prev;
del_from_list(d);
free_cookie(d);
}
if (c->value && !casestrcmp(c->value, cast_uchar "deleted")) {
free_cookie(c);
return;
}
add_to_list(all_cookies, c);
foreach(struct c_domain, cd, lcd, c_domains) if (!casestrcmp(cd->domain, c->domain)) return;
sl = strlen(cast_const_char c->domain);
if (sl > MAXINT - sizeof(struct c_domain)) overalloc();
cd = mem_alloc(sizeof(struct c_domain) + sl);
strcpy(cast_char cd->domain, cast_const_char c->domain);
add_to_list(c_domains, cd);
}
int is_in_domain(unsigned char *d, unsigned char *s)
{
int dl = (int)strlen(cast_const_char d);
int sl = (int)strlen(cast_const_char s);
if (dl > sl) return 0;
if (dl == sl) return !casestrcmp(d, s);
if (s[sl - dl - 1] != '.') return 0;
return !casecmp(d, s + sl - dl, dl);
}
int is_path_prefix(unsigned char *d, unsigned char *s)
{
int dl = (int)strlen(cast_const_char d);
int sl = (int)strlen(cast_const_char s);
if (!dl) return 1;
if (dl > sl) return 0;
if (memcmp(d, s, dl)) return 0;
return d[dl - 1] == '/' || !s[dl] || s[dl] == '/' || s[dl] == POST_CHAR || s[dl] == '?' || s[dl] == '&';
}
int cookie_expired(struct cookie *c, time_t now)
{
if (c->expires != (time_t)-1 && c->expires < now)
return 1;
if (max_cookie_age && now - c->created > max_cookie_age * 86400)
return 1;
return 0;
}
void add_cookies(unsigned char **s, int *l, unsigned char *url)
{
int nc = 0;
struct c_domain *cd;
struct list_head *lcd;
struct cookie *c;
struct list_head *lc;
unsigned char *server, *data;
time_t now;
if (!enable_cookies)
return;
server = get_host_name(url);
data = get_url_data(url);
if (data > url) data--;
foreach(struct c_domain, cd, lcd, c_domains) if (is_in_domain(cd->domain, server)) goto ok;
mem_free(server);
return;
ok:
now = get_absolute_seconds();
foreachback(struct cookie, c, lc, all_cookies) if (is_in_domain(c->domain, server)) if (is_path_prefix(c->path, data)) {
if (cookie_expired(c, now)) {
lc = lc->prev;
del_from_list(c);
free_cookie(c);
continue;
}
if (c->saved_cookie && !save_cookies) continue;
if (c->secure && casecmp(url, cast_uchar "https://", 8)) continue;
if (!nc) add_to_str(s, l, cast_uchar "Cookie: "), nc = 1;
else add_to_str(s, l, cast_uchar "; ");
add_to_str(s, l, c->name);
if (c->value) {
add_chr_to_str(s, l, '=');
add_to_str(s, l, c->value);
}
}
if (nc) add_to_str(s, l, cast_uchar "\r\n");
mem_free(server);
}
void clear_cookies_file(void)
{
unsigned char *cookies_file;
if (!links_home)
return;
cookies_file = stracpy(links_home);
add_to_strn(&cookies_file, cast_uchar "cookies.txt");
delete_config_file(cookies_file);
mem_free(cookies_file);
}
void do_save_cookies(void)
{
unsigned char *cookies_file;
unsigned char *s;
int sl;
time_t now;
struct cookie *c;
struct list_head *lc;
if (anonymous || !save_cookies || proxies.only_proxies)
return;
if (!links_home)
return;
s = init_str();
sl = 0;
cookies_file = stracpy(links_home);
add_to_strn(&cookies_file, cast_uchar "cookies.txt");
now = get_absolute_seconds();
foreachback(struct cookie, c, lc, all_cookies) {
if (cookie_expired(c, now) || c->expires == (time_t)-1)
continue;
add_quoted_to_str(&s, &sl, c->domain);
add_chr_to_str(&s, &sl, ' ');
add_quoted_to_str(&s, &sl, c->server);
add_chr_to_str(&s, &sl, ' ');
add_quoted_to_str(&s, &sl, c->path);
add_chr_to_str(&s, &sl, ' ');
add_quoted_to_str(&s, &sl, c->name);
add_chr_to_str(&s, &sl, ' ');
add_quoted_to_str(&s, &sl, c->value ? c->value : cast_uchar "");
add_chr_to_str(&s, &sl, ' ');
add_chr_to_str(&s, &sl, '0' + c->secure);
add_chr_to_str(&s, &sl, ' ');
add_chr_to_str(&s, &sl, '"');
add_to_str(&s, &sl, print_http_date(c->created));
add_chr_to_str(&s, &sl, '"');
add_chr_to_str(&s, &sl, ' ');
add_chr_to_str(&s, &sl, '"');
add_to_str(&s, &sl, print_http_date(c->expires));
add_chr_to_str(&s, &sl, '"');
add_to_str(&s, &sl, cast_uchar NEWLINE);
}
write_to_config_file(cookies_file, s, 0);
mem_free(cookies_file);
mem_free(s);
}
unsigned long free_cookies(void)
{
unsigned long cnt = 0;
time_t now = get_absolute_seconds();
free_list(struct c_domain, c_domains);
while (!list_empty(all_cookies)) {
struct cookie *c = list_struct(all_cookies.next, struct cookie);
if (!cookie_expired(c, now))
cnt++;
del_from_list(c);
free_cookie(c);
}
return cnt;
}
static time_t parse_cookie_time(unsigned char *t)
{
time_t tm;
if (t[strspn(cast_const_char t, "0123456789")] != 0) {
tm = parse_http_date(t);
} else {
char *end;
tm = (time_t)strtod(cast_const_char t, &end);
if (*end)
tm = (time_t)-1;
}
if (tm == (time_t)-1) {
fprintf(stderr, "Invalid cookie time '%s'\n", t);
return (time_t)-1;
}
return tm;
}
void init_cookies(void)
{
int err = 0;
unsigned char *cookies_file;
unsigned char *s, *p;
if (anonymous || proxies.only_proxies)
return;
if (!links_home)
return;
cookies_file = stracpy(links_home);
add_to_strn(&cookies_file, cast_uchar "cookies.txt");
s = read_config_file(cookies_file);
p = s;
if (s) while (*p) {
unsigned char *l, *line;
unsigned char *domain, *server, *path, *name, *value, *secure, *created, *expires;
if (*p == '\r' || *p == '\n') {
p++;
continue;
}
l = p;
while (*l && *l != '\r' && *l != '\n')
l++;
line = memacpy(p, l - p);
p = l;
l = line;
domain = get_token(&l);
server = get_token(&l);
path = get_token(&l);
name = get_token(&l);
value = get_token(&l);
secure = get_token(&l);
created = get_token(&l);
expires = get_token(&l);
mem_free(line);
/*debug("%s %s %s %s %s %s %s %s", name, value, server, path, domain, secure, created expires);*/
if (expires) {
struct cookie *c;
time_t created_time, expire_time;
created_time = parse_cookie_time(created);
expire_time = parse_cookie_time(expires);
if (created_time == (time_t)-1 || expire_time == (time_t)-1)
goto er;
c = mem_alloc(sizeof(struct cookie));
c->saved_cookie = 1;
c->name = name, name = NULL;
if (*value)
c->value = value, value = NULL;
else
c->value = NULL;
c->server = server, server = NULL;
c->path = path, path = NULL;
c->domain = domain, domain = NULL;
c->secure = *secure >= '1';
c->created = created_time;
c->expires = expire_time;
accept_cookie(c);
}
er:
if (domain) mem_free(domain);
if (server) mem_free(server);
if (path) mem_free(path);
if (name) mem_free(name);
if (value) mem_free(value);
if (secure) mem_free(secure);
if (expires) mem_free(expires);
if (created) mem_free(created);
}
mem_free(cookies_file);
if (s)
mem_free(s);
if (err) fprintf(stderr, "\007"), portable_sleep(1000);
/*{
time_t nt, t;
nt = get_absolute_seconds();
unsigned char *now;
now = print_http_date(nt);
debug("now: %s", now);
t = parse_http_date(now);
debug("%ld - %ld", t, nt);
now = print_http_date(t);
debug("now: %s", now);
}*/
}

120
data.c Normal file
View File

@ -0,0 +1,120 @@
#include "links.h"
static void base64_decode(unsigned char **d, int *dl, unsigned char *s, int sl)
{
int bits = 0;
unsigned tmp = 0;
for (; sl > 0; s++, sl--) {
unsigned char val;
unsigned char c = *s;
if (c >= 'A' && c <= 'Z') val = c - 'A';
else if (c >= 'a' && c <= 'z') val = c - 'a' + 26;
else if (c >= '0' && c <= '9') val = c - '0' + 52;
else if (c == '+') val = 62;
else if (c == '/') val = 63;
else continue;
tmp <<= 6;
tmp |= val;
bits += 6;
if (bits >= 8) {
bits -= 8;
add_chr_to_str(d, dl, tmp >> bits);
tmp &= (1 << bits) - 1;
}
}
}
void data_func(struct connection *c)
{
unsigned char *data, *flags, *mime, *str;
size_t length;
int strl;
struct cache_entry *e;
int r;
int base64 = 0;
int was_charset = 0;
flags = cast_uchar strchr(cast_const_char c->url, ':');
if (!flags) {
bad_url:
setcstate(c, S_BAD_URL);
abort_connection(c);
return;
}
flags++;
while (*flags == '/') flags++;
length = strcspn(cast_const_char flags, ";,");
mime = memacpy(flags, length);
while (*(flags += length) == ';') {
unsigned char *arg;
flags++;
length = strcspn(cast_const_char flags, ";,");
arg = memacpy(flags, length);
if (!casestrcmp(arg, cast_uchar "base64")) {
base64 = 1;
} else if (!casecmp(arg, cast_uchar "charset=", 8)) {
if (!was_charset) {
add_to_strn(&mime, cast_uchar ";");
add_to_strn(&mime, arg);
was_charset = 1;
}
}
mem_free(arg);
}
if (*flags != ',') {
mem_free(mime);
goto bad_url;
}
data = flags + 1;
if (!c->cache) {
if (get_connection_cache_entry(c)) {
mem_free(mime);
setcstate(c, S_OUT_OF_MEM);
abort_connection(c);
return;
}
c->cache->refcount--;
}
e = c->cache;
if (e->head) mem_free(e->head);
e->head = stracpy(cast_uchar "");
if (*mime) {
add_to_strn(&e->head, cast_uchar "\r\nContent-type: ");
add_to_strn(&e->head, mime);
add_to_strn(&e->head, cast_uchar "\r\n");
}
mem_free(mime);
str = init_str();
strl = 0;
add_conv_str(&str, &strl, data, (int)strlen(cast_const_char data), -2);
if (!base64) {
r = add_fragment(e, 0, str, strl);
} else {
unsigned char *b64 = init_str();
int b64l = 0;
base64_decode(&b64, &b64l, str, strl);
r = add_fragment(e, 0, b64, b64l);
mem_free(b64);
}
mem_free(str);
if (r < 0) {
setcstate(c, r);
abort_connection(c);
return;
}
truncate_entry(e, strl, 1);
c->cache->incomplete = 0;
setcstate(c, S__OK);
abort_connection(c);
}

2513
default.c Normal file

File diff suppressed because it is too large Load Diff

88
descrip.mms Normal file
View File

@ -0,0 +1,88 @@
.IFDEF MMSVAX
.IFDEF EXTERNAL_SSL
.ELSE
NO_SSL=1
.ENDIF
CFLAGS_ARCH=/PRECISION=SINGLE/ASSUME=(NOWRITABLE_STRING_LITERALS)/LIST/MACHINE_CODE=BEFORE
.ELSE
CFLAGS_ARCH=/FLOAT=IEEE/IEEE_MODE=UNDERFLOW_TO_ZERO/PRECISION=SINGLE/ASSUME=(NOACCURACY_SENSITIVE,NOMATH_ERRNO,WEAK_VOLATILE,NOWRITABLE_STRING_LITERALS)/WARNINGS=(DISABLE=NOMAINUFLO)/LIST/MACHINE_CODE
.ENDIF
.IFDEF DEBUG
CFLAGS_OPTIMIZE=/DEBUG/NOOPTIMIZE
DEFS_OPTIMIZE=,VMS_DEBUGLEVEL=2
.ELSE
.IFDEF MMSVAX
CFLAGS_OPTIMIZE=/OPTIMIZE
.ELSE
CFLAGS_OPTIMIZE=/OPTIMIZE=(LEVEL=5,TUNE=GENERIC)
.ENDIF
DEFS_OPTIMIZE=
.ENDIF
.IFDEF 64BIT
CFLAGS_64=/POINTER_SIZE=64
.ELSE
CFLAGS_64=
.ENDIF
.IFDEF NO_SSL
DEFS_SSL=
INCLUDE_SSL=
LIBS_SSL=
.ELSE
DEFS_SSL=,HAVE_SSL,HAVE_OPENSSL
INCLUDE_SSL=
.IFDEF 64BIT
.IFDEF EXTERNAL_SSL
.IFDEF MMSALPHA
LIBS_SSL=,VMS-SSL-EXTERNAL-ALPHA-64/OPT
.ELSE
LIBS_SSL=,VMS-SSL-EXTERNAL-I64-64/OPT
.ENDIF
.ELSE
LIBS_SSL=,VMS-SSL-64/OPT
.ENDIF
.ELSE
.IFDEF EXTERNAL_SSL
.IFDEF MMSVAX
LIBS_SSL=,VMS-SSL-EXTERNAL-VAX-32/OPT
.ELSE
.IFDEF MMSALPHA
LIBS_SSL=,VMS-SSL-EXTERNAL-ALPHA-32/OPT
.ELSE
LIBS_SSL=,VMS-SSL-EXTERNAL-I64-32/OPT
.ENDIF
.ENDIF
.ELSE
LIBS_SSL=,VMS-SSL-32/OPT
.ENDIF
.ENDIF
.ENDIF
.IFDEF EXTERNAL_GFX
DEFS_GFX=,HAVE_ZLIB,G,HAVE_PNG_H,HAVE_PNG_SET_RGB_TO_GRAY,HAVE_PNG_GET_LIBPNG_VER,HAVE_JPEG,GRDRV_X,HAVE_X11_XLOCALE_H,HAVE_XSETLOCALE,X_INPUT_METHOD
.IFDEF 64BIT
LIBS_GFX=,VMS-GFX-64/OPT
.ELSE
LIBS_GFX=,VMS-GFX-32/OPT
.ENDIF
.ELSE
DEFS_GFX=
LIBS_GFX=
.ENDIF
CFLAGS=/DEFINE=(HAVE_CONFIG_VMS_H$(DEFS_OPTIMIZE)$(DEFS_SSL)$(DEFS_GFX)) /INCLUDE_DIRECTORY=(GNU:[INCLUDE]$(INCLUDE_SSL)) $(CFLAGS_ARCH) $(CFLAGS_OPTIMIZE) $(CFLAGS_64) $(CFLAGS_EXTRA)
LINKFLAGS=$(LIBS_SSL)$(LIBS_GFX)/MAP/FULL/THREADS_ENABLE
OBJS=AF_UNIX.OBJ,AUTH.OBJ,BEOS.OBJ,BFU.OBJ,BLOCK.OBJ,BOOKMARK.OBJ,CACHE.OBJ,CHARSETS.OBJ,COMPRESS.OBJ,CONNECT.OBJ,COOKIES.OBJ,DATA.OBJ,DEFAULT.OBJ,DIP.OBJ,DIRECTFB.OBJ,DITHER.OBJ,DNS.OBJ,DOS.OBJ,DRIVERS.OBJ,ERROR.OBJ,FILE.OBJ,FINGER.OBJ,FN_IMPL.OBJ,FONT_INC.OBJ,FRAMEBUF.OBJ,FTP.OBJ,GIF.OBJ,HPUX.OBJ,HTML.OBJ,HTML_GR.OBJ,HTML_R.OBJ,HTML_TBL.OBJ,HTTP.OBJ,HTTPS.OBJ,IMG.OBJ,IMGCACHE.OBJ,JPEG.OBJ,JSINT.OBJ,KBD.OBJ,LANGUAGE.OBJ,LISTEDIT.OBJ,LRU.OBJ,MAILTO.OBJ,MAIN.OBJ,MEMORY.OBJ,MENU.OBJ,OBJREQ.OBJ,OS_DEP.OBJ,PMSHELL.OBJ,PNG.OBJ,SCHED.OBJ,SELECT.OBJ,SESSION.OBJ,SMB.OBJ,STRING.OBJ,SUFFIX.OBJ,SVG.OBJ,SVGALIB.OBJ,TERMINAL.OBJ,TIFF.OBJ,TYPES.OBJ,URL.OBJ,VIEW.OBJ,VIEW_GR.OBJ,VMS.OBJ,X.OBJ,XBM.OBJ
LINKS.EXE : $(OBJS)
$(LINK) /EXECUTABLE=LINKS.EXE $(OBJS)$(LINKFLAGS)
CLEAN :
- DELETE /NOCONFIRM /NOLOG *.OBJ;*
- DELETE /NOCONFIRM /NOLOG *.EXE;*
- DELETE /NOCONFIRM /NOLOG *.LIS;*
- DELETE /NOCONFIRM /NOLOG *.MAP;*

98
dfb_cur.h Normal file
View File

@ -0,0 +1,98 @@
/* DirectFB surface dump created by directfb-csource 0.9.14 */
/* This arrow cursor surface is based on a cursor drawn by Ville Pätsi. */
static_const unsigned char arrow_data[] =
"\0\0\0\0\0\0\0#\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0/\253\253\253\320\0\0\0N\0\0\0\3\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\0\0\0\0\0H\306\306\306\363\200\200\200\320\0\0\0Y\0"
"\0\0\21\0\0\0\3\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0Z\377\377\377\377\301"
"\301\301\372\223\223\223\347\0\0\0k\0\0\0\30\0\0\0\6\0\0\0\2\0\0\0\1"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0]\377\377\377\377\377\377\377\377\264\264\264\373\213\213\213"
"\352\0\0\0u\0\0\0\36\0\0\0\10\0\0\0\3\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\377\377\377\377\375\375"
"\375\377\356\356\356\377\254\254\254\374\206\206\206\354\0\0\0y\0\0\0"
"!\0\0\0\10\0\0\0\3\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\0\0`\377\377\377\377\372\372\372\377\355\355\355\377"
"\343\343\343\377\247\247\247\374\203\203\203\354\0\0\0z\0\0\0\"\0\0\0"
"\11\0\0\0\3\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0`\377\377\377\377\365\365\365\377\351\351\351\377\341\341\341\377"
"\335\335\335\377\243\243\243\374\177\177\177\355\0\0\0{\0\0\0\"\0\0\0"
"\11\0\0\0\3\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\371"
"\371\371\377\360\360\360\377\346\346\346\377\337\337\337\377\333\333"
"\333\377\327\327\327\377\236\236\236\374{{{\355\0\0\0{\0\0\0\"\0\0\0"
"\11\0\0\0\3\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\365\365\365"
"\377\355\355\355\377\342\342\342\377\333\333\333\377\330\330\330\377"
"\325\325\325\377\317\317\317\377\227\227\227\374vvv\355\0\0\0{\0\0\0"
"\"\0\0\0\11\0\0\0\3\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\361\361\361"
"\377\350\350\350\377\335\335\335\377\326\326\326\377\324\324\324\377"
"\317\317\317\377\307\307\307\377\277\277\277\377\216\216\216\374qqq\352"
"\0\0\0r\0\0\0\33\0\0\0\11\0\0\0\3\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0`\353"
"\353\353\377\340\340\340\377\324\324\324\377\317\317\317\377\315\315"
"\315\377\307\307\307\377\274\274\274\377\257\257\257\377\212\212\212"
"\375ggg\357\\\\\\\313\0\0\0F\0\0\0\24\0\0\0\11\0\0\0\3\0\0\0\1\0\0\0"
"\0\0\0\0`\340\340\340\377\321\321\321\377\305\305\305\377\304\304\304"
"\377\307\307\307\377\302\302\302\377\242\242\242\376HHH\361\0\0\0\267"
"\0\0\0\224\0\0\0t\0\0\0?\0\0\0\"\0\0\0\22\0\0\0\7\0\0\0\2\0\0\0\0\0\0"
"\0]\321\321\321\377\277\277\277\377\207\207\207\374jjj\367\302\302\302"
"\377\301\301\301\377\263\263\263\377!!!\334\0\0\0\215\0\0\0d\0\0\0Q\0"
"\0\0>\0\0\0-\0\0\0\33\0\0\0\14\0\0\0\4\0\0\0\1\0\0\0E\230\230\230\363"
"kkk\353\0\0\0\243\0\0\0\254\200\200\200\370\304\304\304\377\271\271\271"
"\377ttt\371\0\0\0\233\0\0\0Y\0\0\0F\0\0\0<\0\0\0.\0\0\0\36\0\0\0\16\0"
"\0\0\4\0\0\0\1\0\0\0\7\0\0\0M\0\0\0]\0\0\0O\0\0\0f'''\305\304\304\304"
"\377\274\274\274\377\253\253\253\377\22\22\22\277\0\0\0e\0\0\0A\0\0\0"
"3\0\0\0%\0\0\0\27\0\0\0\13\0\0\0\4\0\0\0\1\0\0\0\0\0\0\0\3\0\0\0\24\0"
"\0\0)\0\0\0<\0\0\0\207\223\223\223\373\267\267\267\377\252\252\252\377"
"YYY\360\0\0\0\203\0\0\0@\0\0\0+\0\0\0\32\0\0\0\15\0\0\0\6\0\0\0\2\0\0"
"\0\0\0\0\0\0\0\0\0\2\0\0\0\11\0\0\0\27\0\0\0'\0\0\0N===\312\257\257\257"
"\377\242\242\242\377lll\370\0\0\0\221\0\0\0E\0\0\0)\0\0\0\26\0\0\0\11"
"\0\0\0\3\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\5\0\0\0\15\0\0\0\26\0"
"\0\0\33\0\0\0\\CCC\322ppp\366MMM\345\0\0\0\204\0\0\0I\0\0\0-\0\0\0\31"
"\0\0\0\12\0\0\0\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\5\0\0"
"\0\11\0\0\0\13\0\0\0\20\0\0\0E\0\0\0s\0\0\0w\0\0\0Z\0\0\0E\0\0\0""2\0"
"\0\0\35\0\0\0\14\0\0\0\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\1\0\0\0\2\0\0\0\3\0\0\0\4\0\0\0\12\0\0\0\36\0\0\0""4\0\0\0>\0\0\0"
"<\0\0\0""1\0\0\0\36\0\0\0\15\0\0\0\4\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\4\0\0\0\15\0\0\0\33\0"
"\0\0)\0\0\0.\0\0\0(\0\0\0\31\0\0\0\13\0\0\0\3\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\6\0\0"
"\0\15\0\0\0\26\0\0\0\33\0\0\0\30\0\0\0\17\0\0\0\7\0\0\0\2\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\1\0\0\0\4\0\0\0\10\0\0\0\13\0\0\0\12\0\0\0\6\0\0\0\3\0\0\0\1\0"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\2\0\0\0\3\0\0\0\3\0\0\0\1\0\0\0\1\0"
"\0\0\0\0\0\0\0\0\0\0\0";
static DFBSurfaceDescription *directfb_get_arrow_desc(void)
{
static DFBSurfaceDescription arrow_desc;
arrow_desc.flags = (DFBSurfaceDescriptionFlags)(
DSDESC_WIDTH | DSDESC_HEIGHT | DSDESC_PIXELFORMAT |
DSDESC_PREALLOCATED),
arrow_desc.width = 18,
arrow_desc.height = 25,
arrow_desc.pixelformat = DSPF_ARGB,
arrow_desc.preallocated[0].data = (void *) arrow_data,
arrow_desc.preallocated[0].pitch = 72;
return &arrow_desc;
}
#if 0 /* this is GNU extension, not C */
static DFBSurfaceDescription arrow_desc = {
flags : DSDESC_WIDTH | DSDESC_HEIGHT | DSDESC_PIXELFORMAT |
DSDESC_PREALLOCATED,
width : 18,
height : 25,
pixelformat : DSPF_ARGB,
preallocated : {{ data : (void *) arrow_data,
pitch : 72 }}
};
#endif
#define arrow_hot_x 1
#define arrow_hot_y 1

2462
dip.c Normal file

File diff suppressed because it is too large Load Diff

811
directfb.c Normal file
View File

@ -0,0 +1,811 @@
/* directfb.c
* DirectFB graphics driver
* (c) 2002 Sven Neumann <sven@directfb.org>
*
* This file is a part of the Links program, released under GPL.
*/
/* TODO:
* - Store window size as driver params (?)
* - Fix wrong colors on big-endian systems (fixed?)
* - Make everything work correctly ;-)
*
* KNOWN PROBLEMS:
* - If mouse drags don't work for you, update DirectFB
* (the upcoming 0.9.14 release fixes this).
*/
#include "cfg.h"
#ifdef GRDRV_DIRECTFB
#include "links.h"
#undef debug
#include <directfb.h>
#include "dfb_cur.h"
#define FOCUSED_OPACITY 0xFF
#define UNFOCUSED_OPACITY 0xC0
#define DIRECTFB_HASH_TABLE_SIZE 23
static struct graphics_device **directfb_hash_table[DIRECTFB_HASH_TABLE_SIZE];
typedef struct _DFBDeviceData DFBDeviceData;
struct _DFBDeviceData
{
DFBWindowID id;
IDirectFBWindow *window;
IDirectFBSurface *surface;
DFBRegion flip_region;
int flip_pending;
};
extern struct graphics_driver directfb_driver;
static IDirectFB *dfb = NULL;
static IDirectFBDisplayLayer *layer = NULL;
static IDirectFBSurface *arrow = NULL;
static IDirectFBEventBuffer *events = NULL;
static DFBSurfacePixelFormat pixelformat = DSPF_UNKNOWN;
static struct timer *event_timer = NULL;
static void directfb_register_flip (DFBDeviceData *data,
int x, int y, int w, int h);
static void directfb_flip_surface (void *pointer);
static void directfb_check_events (void *pointer);
static void directfb_translate_key (DFBWindowEvent *event,
int *key, int *flag);
static void directfb_add_to_table (struct graphics_device *dev);
static void directfb_remove_from_table (struct graphics_device *dev);
static struct graphics_device * directfb_lookup_in_table (DFBWindowID id);
static unsigned char *
directfb_init_driver (unsigned char *param, unsigned char *display)
{
DFBDisplayLayerConfig config;
DFBResult ret;
unsigned char *error;
unsigned char *result;
DirectFBInit (&g_argc, (char ***)(void *)&g_argv);
if ((ret = DirectFBCreate (&dfb)) != DFB_OK) {
error = (unsigned char *)DirectFBErrorString(ret);
goto ret;
}
if ((ret = dfb->GetDisplayLayer (dfb, DLID_PRIMARY, &layer)) != DFB_OK) {
error = (unsigned char *)DirectFBErrorString(ret);
goto ret_dfb;
}
if ((ret = layer->GetConfiguration (layer, &config)) != DFB_OK) {
error = (unsigned char *)DirectFBErrorString(ret);
goto ret_layer;
}
pixelformat = config.pixelformat;
directfb_driver.depth = (((DFB_BYTES_PER_PIXEL (pixelformat) & 0x7)) |
((DFB_COLOR_BITS_PER_PIXEL (pixelformat) & 0x1F) << 3));
if (directfb_driver.depth == 4)
directfb_driver.depth = 196;
/* endian test */
if (big_endian) {
if ((directfb_driver.depth & 0x7) == 2)
directfb_driver.depth |= 0x100;
if ((directfb_driver.depth & 0x7) == 4)
directfb_driver.depth |= 0x200;
}
if (!get_color_fn(directfb_driver.depth)) {
error = cast_uchar "Unsupported color depth";
goto ret_layer;
}
directfb_driver.x = config.width;
directfb_driver.y = config.height;
memset (directfb_hash_table, 0, sizeof (directfb_hash_table));
if ((ret = dfb->CreateEventBuffer (dfb, &events)) != DFB_OK) {
error = (unsigned char *)DirectFBErrorString(ret);
goto ret_layer;
}
event_timer = install_timer (20, directfb_check_events, events);
if (dfb->CreateSurface (dfb, directfb_get_arrow_desc(), &arrow) != DFB_OK)
arrow = NULL;
return NULL;
ret_layer:
layer->Release(layer);
ret_dfb:
dfb->Release(dfb);
ret:
result = init_str();
add_to_strn(&result, error);
add_to_strn(&result, cast_uchar "\n");
return result;
}
static struct graphics_device *
directfb_init_device (void)
{
struct graphics_device *dev;
DFBDeviceData *data;
IDirectFBWindow *window;
DFBWindowDescription desc;
desc.flags = (DFBWindowDescriptionFlags)(DWDESC_WIDTH | DWDESC_HEIGHT | DWDESC_POSX | DWDESC_POSY);
desc.width = directfb_driver.x;
desc.height = directfb_driver.y;
desc.posx = 0;
desc.posy = 0;
retry:
if (layer->CreateWindow (layer, &desc, &window) != DFB_OK) {
if (out_of_memory(MF_GPI, NULL, 0))
goto retry;
return NULL;
}
dev = mem_alloc (sizeof (struct graphics_device));
dev->size.x1 = 0;
dev->size.y1 = 0;
window->GetSize (window, &dev->size.x2, &dev->size.y2);
dev->clip = dev->size;
data = mem_alloc (sizeof (DFBDeviceData));
data->window = window;
data->flip_pending = 0;
if (arrow)
window->SetCursorShape (window, arrow, arrow_hot_x, arrow_hot_y);
window->GetSurface (window, &data->surface);
window->GetID (window, &data->id);
dev->driver_data = data;
dev->user_data = NULL;
directfb_add_to_table (dev);
window->AttachEventBuffer (window, events);
window->SetOpacity (window, FOCUSED_OPACITY);
return dev;
}
static void
directfb_shutdown_device (struct graphics_device *dev)
{
DFBDeviceData *data;
if (!dev)
return;
data = dev->driver_data;
unregister_bottom_half (directfb_flip_surface, data);
directfb_remove_from_table (dev);
data->surface->Release (data->surface);
data->window->Destroy (data->window);
data->window->Release (data->window);
mem_free (data);
mem_free (dev);
}
static void
directfb_shutdown_driver (void)
{
int i;
kill_timer (event_timer);
events->Release (events);
events = NULL;
if (arrow)
arrow->Release (arrow);
layer->Release (layer);
dfb->Release (dfb);
for (i = 0; i < DIRECTFB_HASH_TABLE_SIZE; i++)
if (directfb_hash_table[i])
mem_free (directfb_hash_table[i]);
dfb = NULL;
}
static int
directfb_get_empty_bitmap (struct bitmap *bmp)
{
IDirectFBSurface *surface;
DFBSurfaceDescription desc;
int skip;
bmp->data = bmp->flags = NULL;
desc.flags = (DFBSurfaceDescriptionFlags)(DSDESC_WIDTH | DSDESC_HEIGHT);
desc.width = bmp->x;
desc.height = bmp->y;
retry:
if (dfb->CreateSurface (dfb, &desc, &surface) != DFB_OK) {
if (out_of_memory(MF_GPI, NULL, 0))
goto retry;
return -1;
}
surface->Lock (surface, (DFBSurfaceLockFlags)(DSLF_READ | DSLF_WRITE), &bmp->data, &skip);
bmp->skip = skip;
bmp->flags = surface;
return 0;
}
static void
directfb_register_bitmap (struct bitmap *bmp)
{
IDirectFBSurface *surface = bmp->flags;
if (!surface) return;
surface->Unlock (surface);
bmp->data = NULL;
}
static void *
directfb_prepare_strip (struct bitmap *bmp, int top, int lines)
{
IDirectFBSurface *surface = bmp->flags;
int skip;
if (!surface) return NULL;
surface->Lock (surface, (DFBSurfaceLockFlags)(DSLF_READ | DSLF_WRITE), &bmp->data, &skip);
return ((unsigned char *) bmp->data + top * bmp->skip);
}
static void
directfb_commit_strip (struct bitmap *bmp, int top, int lines)
{
IDirectFBSurface *surface = bmp->flags;
if (!surface) return;
surface->Unlock (surface);
bmp->data = NULL;
}
static void
directfb_unregister_bitmap (struct bitmap *bmp)
{
IDirectFBSurface *surface = bmp->flags;
if (!surface) return;
surface->Release (surface);
}
static void
directfb_draw_bitmap (struct graphics_device *dev, struct bitmap *bmp,
int x, int y)
{
DFBDeviceData *data = dev->driver_data;
IDirectFBSurface *src = bmp->flags;
if (!src) return;
CLIP_DRAW_BITMAP
data->surface->Blit (data->surface, src, NULL, x, y);
directfb_register_flip (data, x, y, bmp->x, bmp->y);
}
static long
directfb_get_color (int rgb)
{
return rgb;
}
static inline void directfb_set_color (IDirectFBSurface *surface, long color)
{
surface->SetColor (surface,
(color & 0xFF0000) >> 16,
(color & 0xFF00) >> 8,
(color & 0xFF),
0xFF);
}
static void
directfb_fill_area (struct graphics_device *dev,
int x1, int y1, int x2, int y2, long color)
{
DFBDeviceData *data = dev->driver_data;
int w, h;
CLIP_FILL_AREA
w = x2 - x1;
h = y2 - y1;
directfb_set_color (data->surface, color);
data->surface->FillRectangle (data->surface, x1, y1, w, h);
directfb_register_flip (data, x1, y1, w, h);
}
static void
directfb_draw_hline (struct graphics_device *dev,
int x1, int y, int x2, long color)
{
DFBDeviceData *data = dev->driver_data;
CLIP_DRAW_HLINE
x2--;
directfb_set_color (data->surface, color);
data->surface->DrawLine (data->surface, x1, y, x2, y);
directfb_register_flip (data, x1, y, x2 - x1, 1);
}
static void
directfb_draw_vline (struct graphics_device *dev,
int x, int y1, int y2, long color)
{
DFBDeviceData *data = dev->driver_data;
CLIP_DRAW_VLINE
y2--;
directfb_set_color (data->surface, color);
data->surface->DrawLine (data->surface, x, y1, x, y2);
directfb_register_flip (data, x, y1, 1, y2 - y1);
}
static void
directfb_set_clip_area (struct graphics_device *dev)
{
DFBDeviceData *data = dev->driver_data;
DFBRegion region;
region.x1 = dev->clip.x1;
region.y1 = dev->clip.y1;
region.x2 = dev->clip.x2 - 1;
region.y2 = dev->clip.y2 - 1;
data->surface->SetClip (data->surface, &region);
}
static int
directfb_scroll (struct graphics_device *dev, struct rect_set **set, int scx, int scy)
{
DFBDeviceData *data = dev->driver_data;
DFBRectangle rect;
rect.x = dev->clip.x1;
rect.y = dev->clip.y1;
rect.w = dev->clip.x2 - rect.x;
rect.h = dev->clip.y2 - rect.y;
data->surface->Blit (data->surface,
data->surface, &rect, rect.x + scx, rect.y + scy);
directfb_register_flip (data, rect.x, rect.y, rect.w, rect.h);
return 1;
}
static void directfb_register_flip (DFBDeviceData *data,
int x, int y, int w, int h)
{
if (x < 0 || y < 0 || w < 1 || h < 1)
return;
w = x + w - 1;
h = y + h - 1;
if (data->flip_pending)
{
if (data->flip_region.x1 > x) data->flip_region.x1 = x;
if (data->flip_region.y1 > y) data->flip_region.y1 = y;
if (data->flip_region.x2 < w) data->flip_region.x2 = w;
if (data->flip_region.y2 < h) data->flip_region.y2 = h;
}
else
{
data->flip_region.x1 = x;
data->flip_region.y1 = y;
data->flip_region.x2 = w;
data->flip_region.y2 = h;
data->flip_pending = 1;
register_bottom_half (directfb_flip_surface, data);
}
}
static void
directfb_flip_surface (void *pointer)
{
DFBDeviceData *data = pointer;
if (!data->flip_pending)
return;
data->surface->Flip (data->surface, &data->flip_region, (DFBSurfaceFlipFlags)0);
data->flip_pending = 0;
}
static void
directfb_flush(struct graphics_device *dev)
{
DFBDeviceData *data = dev->driver_data;
unregister_bottom_half (directfb_flip_surface, data);
directfb_flip_surface(data);
}
static void
directfb_check_events (void *pointer)
{
struct graphics_device *dev = NULL;
DFBDeviceData *data = NULL;
DFBWindowEvent event;
DFBWindowEvent next;
while (events->GetEvent (events, DFB_EVENT (&event)) == DFB_OK)
{
switch (event.type)
{
case DWET_GOTFOCUS:
case DWET_LOSTFOCUS:
case DWET_POSITION_SIZE:
case DWET_SIZE:
case DWET_KEYDOWN:
case DWET_BUTTONDOWN:
case DWET_BUTTONUP:
case DWET_WHEEL:
case DWET_MOTION:
break;
default:
continue;
}
if (!dev || data->id != event.window_id)
{
dev = directfb_lookup_in_table (event.window_id);
if (!dev)
continue;
}
data = dev->driver_data;
switch (event.type)
{
#if 0
case DWET_GOTFOCUS:
data->window->SetOpacity (data->window, FOCUSED_OPACITY);
break;
case DWET_LOSTFOCUS:
data->window->SetOpacity (data->window, UNFOCUSED_OPACITY);
break;
#endif
case DWET_POSITION_SIZE:
case DWET_SIZE:
while ((events->PeekEvent (events, DFB_EVENT (&next)) == DFB_OK) &&
(next.type == DWET_SIZE || next.type == DWET_POSITION_SIZE) &&
(next.window_id == data->id))
events->GetEvent (events, DFB_EVENT (&event));
dev->size.x2 = event.w;
dev->size.y2 = event.h;
dev->resize_handler (dev);
break;
case DWET_KEYDOWN:
{
int key, flag;
directfb_translate_key (&event, &key, &flag);
if (key)
dev->keyboard_handler (dev, key, flag);
}
break;
case DWET_BUTTONDOWN:
case DWET_BUTTONUP:
{
int flags;
/*
* For unknown reason, we get the event twice
*/
while ((events->PeekEvent (events, DFB_EVENT (&next)) == DFB_OK) &&
(next.type == event.type && next.button == event.button &&
next.x == event.x && next.y == event.y && next.window_id == data->id))
events->GetEvent (events, DFB_EVENT (&event));
if (event.type == DWET_BUTTONUP)
{
flags = B_UP;
data->window->UngrabPointer (data->window);
}
else
{
flags = B_DOWN;
data->window->GrabPointer (data->window);
}
switch (event.button)
{
case DIBI_LEFT:
flags |= B_LEFT;
break;
case DIBI_RIGHT:
flags |= B_RIGHT;
break;
case DIBI_MIDDLE:
flags |= B_MIDDLE;
break;
default:
continue;
}
dev->mouse_handler (dev, event.x, event.y, flags);
}
break;
case DWET_WHEEL:
dev->mouse_handler (dev, event.x, event.y,
B_MOVE |
(event.step > 0 ? B_WHEELUP : B_WHEELDOWN));
break;
case DWET_MOTION:
{
int flags;
while ((events->PeekEvent (events, DFB_EVENT (&next)) == DFB_OK) &&
(next.type == DWET_MOTION) &&
(next.window_id == data->id))
events->GetEvent (events, DFB_EVENT (&event));
switch (event.buttons)
{
case DIBM_LEFT:
flags = B_DRAG | B_LEFT;
break;
case DIBM_RIGHT:
flags = B_DRAG | B_RIGHT;
break;
case DIBM_MIDDLE:
flags = B_DRAG | B_MIDDLE;
break;
default:
flags = B_MOVE;
break;
}
dev->mouse_handler (dev, event.x, event.y, flags);
}
break;
case DWET_CLOSE:
dev->keyboard_handler (dev, KBD_CLOSE, 0);
break;
default:
break;
}
}
event_timer = install_timer (20, directfb_check_events, events);
}
static void
directfb_translate_key (DFBWindowEvent *event, int *key, int *flag)
{
*key = 0;
*flag = 0;
if (event->modifiers & DIMM_CONTROL && event->key_id == DIKI_C)
{
*key = KBD_CTRL_C;
return;
}
/* setting Shift seems to break things
*
* if (event->modifiers & DIMM_SHIFT)
* *flag |= KBD_SHIFT;
*/
if (event->modifiers & DIMM_CONTROL)
*flag |= KBD_CTRL;
if (event->modifiers & DIMM_ALT)
*flag |= KBD_ALT;
switch (event->key_symbol)
{
case DIKS_ENTER: *key = KBD_ENTER; break;
case DIKS_BACKSPACE: *key = KBD_BS; break;
case DIKS_TAB: *key = KBD_TAB; break;
case DIKS_ESCAPE: *key = KBD_ESC; break;
case DIKS_CURSOR_UP: *key = KBD_UP; break;
case DIKS_CURSOR_DOWN: *key = KBD_DOWN; break;
case DIKS_CURSOR_LEFT: *key = KBD_LEFT; break;
case DIKS_CURSOR_RIGHT: *key = KBD_RIGHT; break;
case DIKS_INSERT: *key = KBD_INS; break;
case DIKS_DELETE: *key = KBD_DEL; break;
case DIKS_HOME: *key = KBD_HOME; break;
case DIKS_END: *key = KBD_END; break;
case DIKS_PAGE_UP: *key = KBD_PAGE_UP; break;
case DIKS_PAGE_DOWN: *key = KBD_PAGE_DOWN; break;
case DIKS_F1: *key = KBD_F1; break;
case DIKS_F2: *key = KBD_F2; break;
case DIKS_F3: *key = KBD_F3; break;
case DIKS_F4: *key = KBD_F4; break;
case DIKS_F5: *key = KBD_F5; break;
case DIKS_F6: *key = KBD_F6; break;
case DIKS_F7: *key = KBD_F7; break;
case DIKS_F8: *key = KBD_F8; break;
case DIKS_F9: *key = KBD_F9; break;
case DIKS_F10: *key = KBD_F10; break;
case DIKS_F11: *key = KBD_F11; break;
case DIKS_F12: *key = KBD_F12; break;
default:
if (DFB_KEY_TYPE (event->key_symbol) == DIKT_UNICODE)
*key = event->key_symbol;
break;
}
}
static void
directfb_add_to_table (struct graphics_device *dev)
{
DFBDeviceData *data = dev->driver_data;
struct graphics_device **devices;
int i;
i = data->id % DIRECTFB_HASH_TABLE_SIZE;
devices = directfb_hash_table[i];
if (devices)
{
int c = 0;
while (devices[c++])
if (c == MAXINT) overalloc();
if ((unsigned)c > MAXINT / sizeof(void *) - 1) overalloc();
devices = mem_realloc (devices, (c + 1) * sizeof (void *));
devices[c-1] = dev;
devices[c] = NULL;
}
else
{
devices = mem_alloc (2 * sizeof (void *));
devices[0] = dev;
devices[1] = NULL;
}
directfb_hash_table[i] = devices;
}
static void
directfb_remove_from_table (struct graphics_device *dev)
{
DFBDeviceData *data = dev->driver_data;
struct graphics_device **devices;
int i, j, c;
i = data->id % DIRECTFB_HASH_TABLE_SIZE;
devices = directfb_hash_table[i];
if (!devices)
return;
for (j = 0, c = -1; devices[j]; j++)
if (devices[j] == dev)
c = j;
if (c < 0)
return;
memmove (devices + c, devices + c + 1, (j - c) * sizeof (void *));
devices = mem_realloc (devices, j * sizeof (void *));
directfb_hash_table[i] = devices;
}
static struct graphics_device *
directfb_lookup_in_table (DFBWindowID id)
{
struct graphics_device **devices;
int i;
i = id % DIRECTFB_HASH_TABLE_SIZE;
devices = directfb_hash_table[i];
if (!devices)
return NULL;
while (*devices)
{
DFBDeviceData *data = (*devices)->driver_data;
if (data->id == id)
return *devices;
devices++;
}
return NULL;
}
struct graphics_driver directfb_driver =
{
cast_uchar "directfb",
directfb_init_driver,
directfb_init_device,
directfb_shutdown_device,
directfb_shutdown_driver,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
directfb_get_empty_bitmap,
directfb_register_bitmap,
directfb_prepare_strip,
directfb_commit_strip,
directfb_unregister_bitmap,
directfb_draw_bitmap,
directfb_get_color,
directfb_fill_area,
directfb_draw_hline,
directfb_draw_vline,
directfb_scroll,
directfb_set_clip_area,
directfb_flush,
NULL, /* block */
NULL, /* unblock */
NULL, /* set_palette */
NULL, /* get_real_colors */
NULL, /* set_title */
NULL, /* exec */
NULL, /* set_clipboard_text */
NULL, /* get_clipboard_text */
0, /* depth */
0, 0, /* size */
GD_UNICODE_KEYS | GD_NO_OS_SHELL | GD_NOAUTO, /* flags */
NULL, /* param */
};
#endif /* GRDRV_DIRECTFB */

1146
dither.c Normal file

File diff suppressed because it is too large Load Diff

838
dns.c Normal file
View File

@ -0,0 +1,838 @@
/* dns.c
* (c) 2002 Mikulas Patocka
* This file is a part of the Links program, released under GPL
*/
#include "links.h"
#ifdef SUPPORT_IPV6
int support_ipv6;
#endif
#if !defined(USE_GETADDRINFO) && (defined(HAVE_GETHOSTBYNAME_BUG) || !defined(HAVE_GETHOSTBYNAME))
#define EXTERNAL_LOOKUP
#endif
#if defined(WIN) || defined(INTERIX)
#define EXTRA_IPV6_LOOKUP
#endif
#ifdef OPENVMS_64BIT
/* 64-bit getaddrinfo with _SOCKADDR_LEN is broken and returns garbage */
#undef addrinfo
#undef getaddrinfo
#undef freeaddrinfo
#define addrinfo __addrinfo32
static int my_getaddrinfo(const char *host, const char *service, const struct addrinfo *hints, struct addrinfo **res)
{
int r;
#pragma __pointer_size 32
char *host_32;
struct addrinfo hints_32;
struct addrinfo *res_32;
#pragma __pointer_size 64
host_32 = _malloc32(strlen(host) + 1);
if (!host_32) {
errno = ENOMEM;
return EAI_SYSTEM;
}
strcpy(host_32, host);
memcpy(&hints_32, hints, sizeof(struct addrinfo));
r = __getaddrinfo32(host_32, NULL, &hints_32, &res_32);
free(host_32);
if (!r)
*res = res_32;
return r;
}
static void my_freeaddrinfo(struct addrinfo *res)
{
#pragma __pointer_size 32
struct addrinfo *res_32 = (struct addrinfo *)res;
#pragma __pointer_size 64
__freeaddrinfo32(res_32);
}
#define getaddrinfo my_getaddrinfo
#define freeaddrinfo my_freeaddrinfo
#endif
struct dnsentry {
list_entry_1st
uttime absolute_time;
struct lookup_result addr;
list_entry_last
unsigned char name[1];
};
#ifndef THREAD_SAFE_LOOKUP
struct dnsquery *dns_queue = NULL;
#endif
struct dnsquery {
#ifndef THREAD_SAFE_LOOKUP
struct dnsquery *next_in_queue;
#endif
void (*fn)(void *, int);
void *data;
int h;
struct dnsquery **s;
struct lookup_result *addr;
int addr_preference;
unsigned char name[1];
};
static int dns_cache_addr_preference = -1;
static struct list_head dns_cache = {&dns_cache, &dns_cache};
static void end_dns_lookup(struct dnsquery *q, int a);
static int shrink_dns_cache(int u);
static int get_addr_byte(unsigned char **ptr, unsigned char *res, unsigned char stp)
{
unsigned u = 0;
if (!(**ptr >= '0' && **ptr <= '9')) return -1;
while (**ptr >= '0' && **ptr <= '9') {
u = u * 10 + **ptr - '0';
if (u >= 256) return -1;
(*ptr)++;
}
if (stp != 255 && **ptr != stp) return -1;
(*ptr)++;
*res = (unsigned char)u;
return 0;
}
int numeric_ip_address(unsigned char *name, unsigned char address[4])
{
unsigned char dummy[4];
if (!address) address = dummy;
if (get_addr_byte(&name, address + 0, '.')) return -1;
if (get_addr_byte(&name, address + 1, '.')) return -1;
if (get_addr_byte(&name, address + 2, '.')) return -1;
if (get_addr_byte(&name, address + 3, 0)) return -1;
return 0;
}
#ifdef SUPPORT_IPV6
static int extract_ipv6_address(struct addrinfo *p, unsigned char address[16], unsigned *scope_id)
{
/*{
int i;
for (i = 0; i < p->ai_addrlen; i++)
fprintf(stderr, "%02x%c", ((unsigned char *)p->ai_addr)[i], i != p->ai_addrlen - 1 ? ':' : '\n');
}*/
if (p->ai_family == AF_INET6 && (socklen_t)p->ai_addrlen >= (socklen_t)sizeof(struct sockaddr_in6) && p->ai_addr->sa_family == AF_INET6) {
memcpy(address, &((struct sockaddr_in6 *)p->ai_addr)->sin6_addr, 16);
#ifdef SUPPORT_IPV6_SCOPE
*scope_id = ((struct sockaddr_in6 *)p->ai_addr)->sin6_scope_id;
#else
*scope_id = 0;
#endif
return 0;
}
return -1;
}
int numeric_ipv6_address(unsigned char *name, unsigned char address[16], unsigned *scope_id)
{
unsigned char dummy_a[16];
unsigned dummy_s;
int r;
#ifdef HAVE_INET_PTON
struct in6_addr i6a;
#endif
struct addrinfo hints, *res;
if (!address) address = dummy_a;
if (!scope_id) scope_id = &dummy_s;
#ifdef HAVE_INET_PTON
if (inet_pton(AF_INET6, cast_const_char name, &i6a) == 1) {
memcpy(address, &i6a, 16);
*scope_id = 0;
return 0;
}
if (!strchr(cast_const_char name, '%'))
return -1;
#endif
memset(&hints, 0, sizeof(struct addrinfo));
hints.ai_family = AF_INET6;
hints.ai_flags = AI_NUMERICHOST;
if (getaddrinfo(cast_const_char name, NULL, &hints, &res))
return -1;
r = extract_ipv6_address(res, address, scope_id);
freeaddrinfo(res);
return r;
}
#endif
#ifdef EXTERNAL_LOOKUP
static int do_external_lookup(unsigned char *name, unsigned char *host)
{
unsigned char buffer[1024];
unsigned char sink[16];
int rd;
int pi[2];
pid_t f;
unsigned char *n;
int rs;
if (c_pipe(pi) == -1)
return -1;
EINTRLOOP(f, fork());
if (f == -1) {
EINTRLOOP(rs, close(pi[0]));
EINTRLOOP(rs, close(pi[1]));
return -1;
}
if (!f) {
#ifdef HAVE_SETSID
/* without setsid it gets stuck when on background */
EINTRLOOP(rs, setsid());
#endif
EINTRLOOP(rs, close(pi[0]));
EINTRLOOP(rs, dup2(pi[1], 1));
if (rs == -1) _exit(1);
EINTRLOOP(rs, dup2(pi[1], 2));
if (rs == -1) _exit(1);
EINTRLOOP(rs, close(pi[1]));
EINTRLOOP(rs, execlp("host", "host", cast_const_char name, (char *)NULL));
EINTRLOOP(rs, execl("/usr/sbin/host", "host", cast_const_char name, (char *)NULL));
_exit(1);
}
EINTRLOOP(rs, close(pi[1]));
rd = hard_read(pi[0], buffer, sizeof buffer - 1);
if (rd >= 0) buffer[rd] = 0;
if (rd > 0) {
while (hard_read(pi[0], sink, sizeof sink) > 0);
}
EINTRLOOP(rs, close(pi[0]));
/* Don't wait for the process, we already have sigchld handler that
* does cleanup.
* waitpid(f, NULL, 0); */
if (rd < 0) return -1;
/*fprintf(stderr, "query: '%s', result: %s\n", name, buffer);*/
while ((n = strstr(buffer, name))) {
memset(n, '-', strlen(cast_const_char name));
}
for (n = buffer; n < buffer + rd; n++) {
if (*n >= '0' && *n <= '9') {
if (get_addr_byte(&n, host + 0, '.')) goto skip_addr;
if (get_addr_byte(&n, host + 1, '.')) goto skip_addr;
if (get_addr_byte(&n, host + 2, '.')) goto skip_addr;
if (get_addr_byte(&n, host + 3, 255)) goto skip_addr;
return 0;
skip_addr:
if (n >= buffer + rd) break;
}
}
return -1;
}
#endif
#if MAX_ADDRESSES > 1
static int memcmp_host_address(struct host_address *a, struct host_address *b)
{
if (a->af != b->af || a->scope_id != b->scope_id)
return 1;
return memcmp(a->addr, b->addr, sizeof a->addr);
}
#endif
static void add_address(struct lookup_result *host, int af, unsigned char *address, unsigned scope_id, int preference)
{
struct host_address neww;
struct host_address *e, *t;
#if MAX_ADDRESSES > 1
struct host_address *n;
#endif
if (af != AF_INET && preference == ADDR_PREFERENCE_IPV4_ONLY)
return;
#ifdef SUPPORT_IPV6
if (af != AF_INET6 && preference == ADDR_PREFERENCE_IPV6_ONLY)
return;
#endif
if (host->n >= MAX_ADDRESSES)
return;
memset(&neww, 0, sizeof(struct host_address));
neww.af = af;
memcpy(neww.addr, address, af == AF_INET ? 4 : 16);
neww.scope_id = scope_id;
e = &host->a[host->n];
t = e;
#if MAX_ADDRESSES > 1
for (n = host->a; n != e; n++) {
if (!memcmp_host_address(n, &neww))
return;
if (preference == ADDR_PREFERENCE_IPV4 && af == AF_INET && n->af != AF_INET) {
t = n;
break;
}
#ifdef SUPPORT_IPV6
if (preference == ADDR_PREFERENCE_IPV6 && af == AF_INET6 && n->af != AF_INET6) {
t = n;
break;
}
#endif
}
memmove(t + 1, t, (e - t) * sizeof(struct host_address));
#endif
memcpy(t, &neww, sizeof(struct host_address));
host->n++;
}
#ifdef USE_GETADDRINFO
static int use_getaddrinfo(unsigned char *name, struct addrinfo *hints, int preference, struct lookup_result *host)
{
int gai_err;
struct addrinfo *res, *p;
#ifdef OPENVMS
struct addrinfo default_hints;
if (!hints) {
memset(&default_hints, 0, sizeof default_hints);
default_hints.ai_flags = AI_V4MAPPED | AI_ADDRCONFIG;
hints = &default_hints;
}
#endif
gai_err = getaddrinfo(cast_const_char name, NULL, hints, &res);
if (gai_err)
return gai_err;
for (p = res; p; p = p->ai_next) {
if (p->ai_family == AF_INET && (socklen_t)p->ai_addrlen >= (socklen_t)sizeof(struct sockaddr_in) && p->ai_addr->sa_family == AF_INET) {
add_address(host, AF_INET, (unsigned char *)&((struct sockaddr_in *)p->ai_addr)->sin_addr.s_addr, 0, preference);
continue;
}
#ifdef SUPPORT_IPV6
{
unsigned char address[16];
unsigned scope_id;
if (!extract_ipv6_address(p, address, &scope_id)) {
add_address(host, AF_INET6, address, scope_id, preference);
continue;
}
}
#endif
}
freeaddrinfo(res);
return 0;
}
#endif
void rotate_addresses(struct lookup_result *host)
{
#if MAX_ADDRESSES > 1
int first_type, first_different, i;
if (host->n <= 2)
return;
first_type = host->a[0].af;
for (i = 1; i < host->n; i++) {
if (host->a[i].af != first_type) {
first_different = i;
goto do_swap;
}
}
return;
do_swap:
if (first_different > 1) {
struct host_address ha;
memcpy(&ha, &host->a[first_different], sizeof(struct host_address));
memmove(&host->a[2], &host->a[1], (first_different - 1) * sizeof(struct host_address));
memcpy(&host->a[1], &ha, sizeof(struct host_address));
}
#endif
}
void do_real_lookup(unsigned char *name, int preference, struct lookup_result *host)
{
unsigned char address[16];
#ifdef SUPPORT_IPV6
size_t nl;
#endif
memset(host, 0, sizeof(struct lookup_result));
if (strlen(cast_const_char name) >= 6 && !casestrcmp(name + strlen(cast_const_char name) - 6, cast_uchar ".onion"))
goto ret;
if (!support_ipv6) preference = ADDR_PREFERENCE_IPV4_ONLY;
if (!numeric_ip_address(name, address)) {
add_address(host, AF_INET, address, 0, preference);
goto ret;
}
#ifdef SUPPORT_IPV6
nl = strlen(cast_const_char name);
if (name[0] == '[' && name[nl - 1] == ']') {
unsigned char *n2 = cast_uchar strdup(cast_const_char(name + 1));
if (n2) {
unsigned scope_id;
n2[nl - 2] = 0;
if (!numeric_ipv6_address(n2, address, &scope_id)) {
free(n2);
add_address(host, AF_INET6, address, scope_id, preference);
goto ret;
}
free(n2);
}
} else {
unsigned scope_id;
if (!numeric_ipv6_address(name, address, &scope_id)) {
add_address(host, AF_INET6, address, scope_id, preference);
goto ret;
}
}
#endif
#if defined(USE_GETADDRINFO)
use_getaddrinfo(name, NULL, preference, host);
#if defined(SUPPORT_IPV6) && defined(EXTRA_IPV6_LOOKUP)
if ((preference == ADDR_PREFERENCE_IPV4 && !host->n) ||
preference == ADDR_PREFERENCE_IPV6 ||
preference == ADDR_PREFERENCE_IPV6_ONLY) {
struct addrinfo hints;
int i;
for (i = 0; i < host->n; i++)
if (host->a[i].af == AF_INET6)
goto already_have_inet6;
memset(&hints, 0, sizeof hints);
hints.ai_family = AF_INET6;
hints.ai_flags = 0;
use_getaddrinfo(name, &hints, preference, host);
}
already_have_inet6:;
#endif
#elif defined(HAVE_GETHOSTBYNAME)
{
int i;
struct hostent *hst;
if ((hst = gethostbyname(cast_const_char name))) {
if (hst->h_addrtype != AF_INET || hst->h_length != 4 || !hst->h_addr)
goto ret;
#ifdef h_addr
for (i = 0; hst->h_addr_list[i]; i++) {
add_address(host, AF_INET, cast_uchar hst->h_addr_list[i], 0, preference);
}
#else
add_address(host, AF_INET, cast_uchar hst->h_addr, 0, preference);
#endif
goto ret;
}
}
#endif
#ifdef EXTERNAL_LOOKUP
if (!do_external_lookup(name, address)) {
add_address(host, AF_INET, address, 0, preference);
goto ret;
}
#endif
ret:
return;
}
#ifndef NO_ASYNC_LOOKUP
static void lookup_fn(void *q_, int h)
{
struct dnsquery *q = (struct dnsquery *)q_;
struct lookup_result host;
do_real_lookup(q->name, q->addr_preference, &host);
/*{
int i;
for (i = 0; i < sizeof(struct lookup_result); i++) {
if (i == 1) portable_sleep(1000);
hard_write(h, (unsigned char *)&host + i, 1);
}
}*/
hard_write(h, (unsigned char *)&host, sizeof(struct lookup_result));
}
static void end_real_lookup(void *q_)
{
struct dnsquery *q = (struct dnsquery *)q_;
int r = 1;
int rs;
if (!q->addr || hard_read(q->h, (unsigned char *)q->addr, sizeof(struct lookup_result)) != sizeof(struct lookup_result) || !q->addr->n) goto end;
r = 0;
end:
set_handlers(q->h, NULL, NULL, NULL);
EINTRLOOP(rs, close(q->h));
end_dns_lookup(q, r);
}
#endif
static int do_lookup(struct dnsquery *q, int force_async)
{
/*debug("starting lookup for %s", q->name);*/
#ifndef NO_ASYNC_LOOKUP
if (!async_lookup && !force_async) {
#endif
#ifndef NO_ASYNC_LOOKUP
sync_lookup:
#endif
do_real_lookup(q->name, q->addr_preference, q->addr);
end_dns_lookup(q, !q->addr->n);
return 0;
#ifndef NO_ASYNC_LOOKUP
} else {
q->h = start_thread(lookup_fn, q, (int)((unsigned char *)strchr(cast_const_char q->name, 0) + 1 - (unsigned char *)q), 1);
if (q->h == -1) goto sync_lookup;
set_handlers(q->h, end_real_lookup, NULL, q);
return 1;
}
#endif
}
static int do_queued_lookup(struct dnsquery *q)
{
#ifndef THREAD_SAFE_LOOKUP
q->next_in_queue = NULL;
if (!dns_queue) {
dns_queue = q;
/*debug("direct lookup");*/
#endif
return do_lookup(q, 0);
#ifndef THREAD_SAFE_LOOKUP
} else {
/*debug("queuing lookup for %s", q->name);*/
if (dns_queue->next_in_queue) internal_error("DNS queue corrupted");
dns_queue->next_in_queue = q;
dns_queue = q;
return 1;
}
#endif
}
static void check_dns_cache_addr_preference(void)
{
if (dns_cache_addr_preference != ipv6_options.addr_preference) {
shrink_dns_cache(SH_FREE_ALL);
dns_cache_addr_preference = ipv6_options.addr_preference;
}
}
static int find_in_dns_cache(unsigned char *name, struct dnsentry **dnsentry)
{
struct dnsentry *e;
struct list_head *le;
check_dns_cache_addr_preference();
foreach(struct dnsentry, e, le, dns_cache)
if (!casestrcmp(e->name, name)) {
del_from_list(e);
add_to_list(dns_cache, e);
*dnsentry = e;
return 0;
}
return -1;
}
static void free_dns_entry(struct dnsentry *dnsentry)
{
del_from_list(dnsentry);
mem_free(dnsentry);
}
static void end_dns_lookup(struct dnsquery *q, int a)
{
struct dnsentry *dnsentry;
size_t sl;
void (*fn)(void *, int);
void *data;
/*debug("end lookup %s", q->name);*/
#ifndef THREAD_SAFE_LOOKUP
if (q->next_in_queue) {
/*debug("processing next in queue: %s", q->next_in_queue->name);*/
do_lookup(q->next_in_queue, 1);
} else dns_queue = NULL;
#endif
if (!q->fn || !q->addr) {
free(q);
return;
}
if (!find_in_dns_cache(q->name, &dnsentry)) {
if (a) {
memcpy(q->addr, &dnsentry->addr, sizeof(struct lookup_result));
a = 0;
goto e;
}
free_dns_entry(dnsentry);
}
if (a) goto e;
if (q->addr_preference != ipv6_options.addr_preference) goto e;
check_dns_cache_addr_preference();
sl = strlen(cast_const_char q->name);
if (sl > MAXINT - sizeof(struct dnsentry)) overalloc();
dnsentry = mem_alloc(sizeof(struct dnsentry) + sl);
strcpy(cast_char dnsentry->name, cast_const_char q->name);
memcpy(&dnsentry->addr, q->addr, sizeof(struct lookup_result));
dnsentry->absolute_time = get_absolute_time();
add_to_list(dns_cache, dnsentry);
e:
if (q->s) *q->s = NULL;
fn = q->fn;
data = q->data;
free(q);
fn(data, a);
}
int find_host_no_cache(unsigned char *name, struct lookup_result *addr, void **qp, void (*fn)(void *, int), void *data)
{
struct dnsquery *q;
retry:
q = (struct dnsquery *)malloc(sizeof(struct dnsquery) + strlen(cast_const_char name));
if (!q) {
if (out_of_memory(0, NULL, 0))
goto retry;
fn(data, 1);
return 0;
}
q->fn = fn;
q->data = data;
q->s = (struct dnsquery **)qp;
q->addr = addr;
q->addr_preference = ipv6_options.addr_preference;
strcpy(cast_char q->name, cast_const_char name);
if (qp) *qp = q;
return do_queued_lookup(q);
}
int find_host(unsigned char *name, struct lookup_result *addr, void **qp, void (*fn)(void *, int), void *data)
{
struct dnsentry *dnsentry;
if (qp) *qp = NULL;
if (!find_in_dns_cache(name, &dnsentry)) {
if (get_absolute_time() - dnsentry->absolute_time > DNS_TIMEOUT) goto timeout;
memcpy(addr, &dnsentry->addr, sizeof(struct lookup_result));
fn(data, 0);
return 0;
}
timeout:
return find_host_no_cache(name, addr, qp, fn, data);
}
void kill_dns_request(void **qp)
{
struct dnsquery *q = *qp;
q->fn = NULL;
q->addr = NULL;
*qp = NULL;
}
#ifndef NO_ASYNC_LOOKUP
static void dns_prefetch_end(void *addr_, int status)
{
struct lookup_result *addr = (struct lookup_result *)addr_;
free(addr);
}
#endif
void dns_prefetch(unsigned char *name)
{
#ifndef NO_ASYNC_LOOKUP
struct lookup_result *addr;
if (!async_lookup)
return;
addr = (struct lookup_result *)malloc(sizeof(struct lookup_result));
if (!addr)
return;
find_host(name, addr, NULL, dns_prefetch_end, addr);
#endif
}
#if MAX_ADDRESSES > 1
void dns_set_priority(unsigned char *name, struct host_address *address, int prefer)
{
int i;
struct dnsentry *dnsentry;
if (find_in_dns_cache(name, &dnsentry))
return;
for (i = 0; i < dnsentry->addr.n; i++)
if (!memcmp_host_address(&dnsentry->addr.a[i], address)) goto found_it;
return;
found_it:
if (prefer) {
memmove(&dnsentry->addr.a[1], &dnsentry->addr.a[0], i * sizeof(struct host_address));
memcpy(&dnsentry->addr.a[0], address, sizeof(struct host_address));
} else {
memmove(&dnsentry->addr.a[i], &dnsentry->addr.a[i + 1], (dnsentry->addr.n - i - 1) * sizeof(struct host_address));
memcpy(&dnsentry->addr.a[dnsentry->addr.n - 1], address, sizeof(struct host_address));
}
}
#endif
void dns_clear_host(unsigned char *name)
{
struct dnsentry *dnsentry;
if (find_in_dns_cache(name, &dnsentry))
return;
free_dns_entry(dnsentry);
}
unsigned long dns_info(int type)
{
switch (type) {
case CI_FILES:
return list_size(&dns_cache);
default:
internal_error("dns_info: bad request");
}
return 0;
}
static int shrink_dns_cache(int u)
{
uttime now = get_absolute_time();
struct dnsentry *d;
struct list_head *ld;
int f = 0;
if (u == SH_FREE_SOMETHING && !list_empty(dns_cache)) {
d = list_struct(dns_cache.prev, struct dnsentry);
goto delete_last;
}
foreach(struct dnsentry, d, ld, dns_cache) if (u == SH_FREE_ALL || now - d->absolute_time > DNS_TIMEOUT) {
delete_last:
ld = d->list_entry.prev;
free_dns_entry(d);
f = ST_SOMETHING_FREED;
}
return f | (list_empty(dns_cache) ? ST_CACHE_EMPTY : 0);
}
unsigned char *print_address(struct host_address *a)
{
#define SCOPE_ID_LEN 11
#ifdef SUPPORT_IPV6
static unsigned char buffer[INET6_ADDRSTRLEN + SCOPE_ID_LEN];
#else
static unsigned char buffer[INET_ADDRSTRLEN + SCOPE_ID_LEN];
#endif
#ifdef HAVE_INET_NTOP
union {
struct in_addr in;
#ifdef SUPPORT_IPV6
struct in6_addr in6;
#endif
char pad[16];
} u;
memcpy(&u, a->addr, 16);
if (!inet_ntop(a->af, &u, cast_char buffer, sizeof buffer - SCOPE_ID_LEN))
return NULL;
#else
if (a->af == AF_INET)
snprintf(cast_char buffer, sizeof buffer, "%d.%d.%d.%d", a->addr[0], a->addr[1], a->addr[2], a->addr[3]);
#ifdef SUPPORT_IPV6
else if (a->af == AF_INET6)
snprintf(cast_char buffer, sizeof buffer, "%x:%x:%x:%x:%x:%x:%x:%x",
(a->addr[0] << 8) | a->addr[1],
(a->addr[2] << 8) | a->addr[3],
(a->addr[4] << 8) | a->addr[5],
(a->addr[6] << 8) | a->addr[7],
(a->addr[8] << 8) | a->addr[9],
(a->addr[10] << 8) | a->addr[11],
(a->addr[12] << 8) | a->addr[13],
(a->addr[14] << 8) | a->addr[15]);
#endif
else
return NULL;
#endif
if (a->scope_id) {
unsigned char *end = cast_uchar strchr(cast_const_char buffer, 0);
snprintf(cast_char end, buffer + sizeof(buffer) - end, "%%%u", a->scope_id);
}
return buffer;
}
int ipv6_full_access(void)
{
#ifdef SUPPORT_IPV6
/*
* Test if we can access global IPv6 address space.
* This doesn't send anything anywhere, it just creates an UDP socket,
* connects it and closes it.
*/
struct sockaddr_in6 sin6;
int h, c, rs;
if (!support_ipv6) return 0;
h = c_socket(AF_INET6, SOCK_DGRAM, IPPROTO_UDP);
if (h == -1) return 0;
memset(&sin6, 0, sizeof sin6);
sin6.sin6_family = AF_INET6;
sin6.sin6_port = htons(1024);
memcpy(&sin6.sin6_addr.s6_addr, "\052\001\004\060\000\015\000\000\002\314\236\377\376\044\176\032", 16);
EINTRLOOP(c, connect(h, (struct sockaddr *)(void *)&sin6, sizeof sin6));
EINTRLOOP(rs, close(h));
if (!c) return 1;
#endif
return 0;
}
#ifdef FLOOD_MEMORY
void flood_memory(void)
{
struct list_head list;
size_t s = 32768 * 32;
struct dnsentry *de;
dns_cache_addr_preference = ipv6_options.addr_preference;
#if defined(HAVE__HEAPMIN)
_heapmin();
#endif
init_list(list);
while (!list_empty(dns_cache)) {
de = list_struct(dns_cache.prev, struct dnsentry);
del_from_list(de);
add_to_list(list, de);
}
while (1) {
while ((de = mem_alloc_mayfail(s))) {
de->absolute_time = get_absolute_time();
memset(&de->addr, 0, sizeof de->addr);
de->name[0] = 0;
add_to_list(list, de);
}
if (s == sizeof(struct dnsentry)) break;
s = s / 2;
if (s < sizeof(struct dnsentry)) s = sizeof(struct dnsentry);
}
while (!list_empty(list)) {
de = list_struct(list.prev, struct dnsentry);
del_from_list(de);
add_to_list(dns_cache, de);
}
}
#endif
void init_dns(void)
{
register_cache_upcall(shrink_dns_cache, 0, cast_uchar "dns");
#ifdef FLOOD_MEMORY
flood_memory();
#endif
#ifdef SUPPORT_IPV6
{
int h, rs;
h = c_socket(AF_INET6, SOCK_STREAM, 0);
if (h == -1) {
support_ipv6 = 0;
} else {
EINTRLOOP(rs, close(h));
support_ipv6 = 1;
}
}
#endif
}

BIN
doc/links_cal/adjusted.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 135 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 396 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 253 B

View File

@ -0,0 +1,68 @@
<!doctype html public "-//W3C/DTD HTML 3.0//EN">
<html>
<head><title>Links Calibration</title></head>
<body bgcolor="#000000" text="#ffffff">
<h1>Links Calibration Procedure</h1>
<p>To get a flawless picture while browsing the Web with Links,
you have to perform the described procedure step-by-step. A test pattern
for the adjustment follows:
<br><center><img src="test_pattern.png" width=480 height=480
alt="Monoscope"></center>
<br><center><table border=1>
<tr><td>1.</td><td>Set &quot;Setup -&gt; Video options -&gt; User gamma&quot; to
1.0</td></tr>
<tr><td>2.</td><td>Switch off &quot;Setup -&gt; Video options -&gt; Aspect
correction on&quot;.</td></tr>
<tr><td>3.</td><td>Set &quot;View -&gt; Html options -&gt; Scale all images by (%)&quot;
to 100.</td></tr>
<tr><td>4. <img src="picture-crank-0.png" alt="Contrast to 0"></td><td>Turn
&quot;Contrast <img src="picture-icon.png" alt="Contrast">&quot; to it's
minimum.</td></tr>
<tr><td>5. <img src="black-control-rocking.png" alt="Set brightness"></td><td>Set &quot; Brightness <img
src="black-icon.png" alt="Brightness">&quot; to the highest level where black
just still stays black. <img src="elbow.png" alt="Find the elbow"> The gradient (where light
output is proportional to horizontal offset) in
the lower part of the image may assist you to perform this task or you may
diminish horizontal size of the picture on your monitor's controls and
check at the edge of the screen.</td></tr>
<tr><td>6. <img src="picture-crank-up.png" alt="Set contrast"></td><td>Set &quot;Contrast
<img src="picture-icon.png" alt="Contrast">&quot; as you like it.</td></tr>
<tr><td>7.</td><td>Adjust &quot;Setup -&gt; Video options -&gt; Red,
Green, Blue display gamma&quot; until the inside of the test pattern looks
like this: <img src="adjusted.png" alt="The center of the monoscope should look like this"> Red gamma influences the red field,
green gamma green field, blue gamma blue field. When right part of
particularly coloured field is too dark, increase the appropriate gamma. When the right
part is too light, decrease the gamma. The white
field is there for confidence only. You shall not see the fringes in left
parts of the fields. If you see them, go farther from the screen or take
off glasses.</td></tr>
<tr><td>8.</td><td>Set &quot;Setup -&gt; Video options -&gt; User
gamma&quot; according to recommended setting that are provided in the
dialog box.</td></tr>
<tr><td>9.</td><td>Switch on &quot;Setup -&gt; Video options -&gt; Aspect
correction on&quot;.</td></tr>
<tr><td>10.</td><td>Adjust you picture's size so that it just fits on the
screen</td></tr>
<tr><td>11.</td><td>Adjust &quot;Setup -&gt; Video options -&gt; Aspect
ratio&quot; so that the white circle is perfectly circular.</td></tr>
<tr><td>12.</td><td>If you are using a picture tube monitor, set
&quot;Setup -&gt; Video options -&gt; Display optimization for CRT&quot;.
If you have got a flat panel LCD monitor, choose between &quot;Setup -&gt;
Video options -&gt; Display optimization for LCD (RGB)&quot; and &quot;Setup -&gt;
Video options -&gt; Display optimization for LCD (BGR)&quot; , whichever looks
better.</td></tr>
<tr><td>13.</td><td>Save your settings with &quot;Setup -&gt; Save
options&quot;.</td></tr>
<tr><td>14.</td><td>Do not touch &quot;Brightness <img
src="black-icon.png" alt="Brightness">&quot; any more. You may adjust &quot;Contrast <img
src="picture-icon.png" alt="Contrast">&quot; whenever you want.</td></tr>
</table></center>
<h1>Recommendation</h1>
<p>If you have got an X Server that supports built-in software gamma
correction, switch this gamma correction completely off. You will get a
better picture. To switch the gamma correction off, edit the configuration file and set all &quot;gamma&quot;
values to 1.0. After doing that, restart X Server, run Links and calibrate
Links and the monitor.
</body>
</html>

Some files were not shown because too many files have changed in this diff Show More