feat: initial commit

Code is from cxx.uclibc.org, modified by catty to implement c++17
features
This commit is contained in:
2025-03-26 09:29:24 +08:00
commit d068332b88
370 changed files with 65488 additions and 0 deletions
+41
View File
@@ -0,0 +1,41 @@
#
# Never ignore these
#
!.gitignore
#
# Generated files
#
*.a
*.i
*.o
*.depend
.config*
.*.dep
/*.log
cscope.*
bin/g++-uc
bin/env_check
libuClibc++*.so
libuClibc++*.so.0
include/system_configuration.h
include/bits/
#
# Debugging files
#
.gdb_history
.gdbinit
core
#
# Backups / patches
#
*~
*.orig
*.rej
/*.patch
/*.diff
# Playground
playground
+111
View File
@@ -0,0 +1,111 @@
//This file lists everybody who has sent me bug problems/fixes starting Jan 24, 2005
//The list will be in order of total number of points, with the most at the top
//Anybody who sends me a bug listing with some sample code gets 1 point
//If that sample code is a minimal test case, it becomes 2 points
//If a patch or usable instructions for correction are included, it is 3 points
//Note that I am the final arbiter on how many points a bug report is worth
//I reserve the right to alter any and all bug points at a whim without any recourse
//Functionality that isn't part of the standard isn't included
//Stuff that hasn't been implemented yet doesn't count
//Saying "this piece of software doesn't work" doesn't count
//I reserve the right to modify the rules at any point without notice
//I suggest killing all the lawyers
//Using the bug tracking system at bugs.uclibc.org gets you a bonus point
tommi: 39 Points
2007-05-29: 1+1: Found problem with string.compare(), provided solution / BTS
2007-04-27: 1 : Found missing formatflags initialization in ios_base::init / BTS
2007-04-27: 1+1: Found problem with fstreambuf reading closed file descriptor / BTS
2007-03-07: 1+1: Found that ostream was improperly flushing on destruction
2006-09-04: 1+1: Wanted implementation of locale::name, used BTS and provided patch
2006-09-04: 1+1: Found problem with default flags for ios plus provided patch
2005-07-20: 1+2: Compared code sizes and sent patch to minimize code size / BTS
2005-07-20: 1+1: Found problem in streambuf::xsputn / BTS
2005-07-13: 1+1: Fixed setting of error flags in certain istream code. / BTS
2005-07-12: 1+2: Fixed implemenation of certain exceptions / BTS
2005-07-12: 1+2: Provided implemenation of istreambuf_iterator::equal() / BTS
2005-07-12: 1+1: Set eofbit as appropriate. Provided partial solution/BTS
2005-07-11: 1+1: Found problem in uflow(). Provided fix/BTS
2005-07-09: 1+1: Found probelm with exception declarations. Provided Fix/BTS
2005-07-08: 1+1: Found inefficiency in sterambuf code. Provided fix/BTS
2005-07-08: 1+1: Found problem in ostream code with infinite loop. Provided fix/BTS
2005-07-08: 1+1: Found problem in ostream code calling flush(). Provided partial fix/BTS
2005-07-04: 1+2: Found need for basic_ios(). Used BTS and provided test case.
2005-07-04: 1+1: Found string::compare ambiguity. Used BTS.
asierllano: 18 Points
2006-02-08: 1+2: Provided reworking of some map internals to better meet spec and to be smaller
2006-02-08: 1+2: Found problem in functional and provided fix
2006-02-08: 1+2: Reported compilation problems with no C99 math support and provided fix
2006-02-08: 0+1: Found gcc4 bug already fixed - provided better fix.
2005-07-02: 1+1: Minor fix to list::swap. Now swaps number of elements. Used BTS & patch
2005-07-02: 1+2: Found invalid functionality in lower_bound and upper_bound for map
2005-07-02: 1+2: Found missing const on some data types. Used BTS & provided patch
scott: 7 Points
2005-02-01: 1+2: Found problem with wchar needing ifdefs. Used bug system and provided partial solution
2005-01-20: 1+1: Found problem in string internal typedefs. Used bug system
2005-01-18: 1+1: Found duplicate declaration of size_t. Used bug system
Peter Schueller: 5 Points
2006-12-14: 1 : Provided a fix for an unused variable warning. Used BTS.
2006-12-14: 1+1: Provided implementation of deque::swap. Used BTS.
2006-10-06: 1+1: Found map = instead of equals error. Use BTS, provided solution.
dcas: 5 Points
2006-03-07: 0+1: Found lack of string resize specifier and provided fix in BTS
2006-03-07: 0+2: Found missing string::find_last_not_of - prop. fix in BTS
2006-03-07: 0+2: Found missing std::ws and submitted proposed fix in BTS
Vijay: 4 Points
2007-04-03: 2: Found problem with set and map iterators - provided test case.
2007-04-01: 2: Found problem with set construct-from-iterators. Provided test case.
2007-03-10: 2: Found lack of ios::exception support
Ciaran: 4 Points
2005-12-21: 1+1: Found that a const iterator doesn't handle operator*
2005-12-20: 1+1: Found that iterator and const_iterator weren't compatible
thritter: 3 Points
2005-02-11: 1+2: Found problem in cstdlib needing ifdefs for wchar. Used BTS & provided solution
Faye2040: 3 Points
2006-02-10: 1 : Noted that long_double support should depend upon float support
2006-02-09: 1+1: Found problem with functional binder. Used BTS.
Peter Nixon: 3 Points
2008-06-18: 2 : Found that limits<bool> asn't definied and provided implementation.
2008-06-18: 1 : Found that ios_base::width was not being honored and provided partial fix.
Olivier Hochreutiner: 2 Points
2009-04-03: 1+1: Found a problem with map::operator[] and provided test case.
Christian Taedcke: 2 Points
2007-04-11: 1+1: Found a problem with find dereferencing end(). Provided fix.
Thomas Volpini: 2 Points
2006-08-11: Found memory leak in vector. Provided test case and fix.
Gavin Lambert: 2 Points
2006-06-30: 1+1: Found memory leak and provided a proposed fix.
Natanael Copa: 2 Points
2006-06-22: 1+1: Found ios_base::app error. Provided minimal test case.
Ted Schroeder: 2 Points
2005-05-20: 1+1: Found error in functional. Provided fix.
Thomas Giesel: 2 Points
2005-03-02: 2 : Found problems in getline code with minimal test case.
Vladimir Dronnikov: 1 Point
2009-04-01: 1: Found a problem with map and mmap now exporting swap correctly.
Manjuantha Srinivasan: 1 Point
2006-11-28: 1 : Found that the iostream library did not flush contents on destruction.
Anthony Lee: 1 Point
2005-01-24: 1 : Found problem in functional which had const missing causing havok
+319
View File
@@ -0,0 +1,319 @@
0.2.5
- wrapper: Fix handling arguments with spaces
- stream: Add support for 64-bit integers
- buildsys: allow to pass in LDFLAGS
- __base_associative: fix erase(iter,iter), e.g. multimap
- list: fix splice to empty list from other.begin()
- add refcounted exceptions
- tests: Allow to run tests via a simulator
- algorithm: Fix decl of stable_sort
- string: assign(): fix two bugs
- C++14 sized allocation
- buildsys: Revamp. Fix spurious rebuilds, check CXXFLAGS with CXX
- iostream: fix string getline to set noskipws
- istream: add missing operator >> implementation
- buildsys: rename .config WARNINGS to UCLIBCXX_WARNINGS
- unwind: Fix for __ARM_EABI_UNWINDER__
0.2.4
- valarray: Fix operator=(const valarray<T>&) DR 630
- valarray: Adjust constness of operator[](size_t)
- valarray: Properly implement class member valarray<bool> operator!()
- valarray: Fix operator|= (const T&) to or, not not
- valarray: Fix both shift() and cshift() for any overrun and +- offsets
- valarray: Fix slice_array& operator=(const slice_array&) to return properly
- valarray: Adjust class gslice default constructor DR 543
- valarray: Fix valarray<bool> operator>(const T&, const valarray<T>&)
- valarray: Return the result of all algo
- valarray: Fix copy'n paster error in atan2() inner fn call
- valarray: Fix pow (const T& const valarray<T>&)
- istream: fix readin<traits, char, bool>
- fix compilation with >= gcc-4.7
- ios: Fix typo in operator!=
- tests: Fix typo in chartraitstest
- bitset: reset(), flip(): Fix off-by-one error
- tests: Show diff when V=1 was given
- buildsys: several fixes (ccache, Makefile deps, portability)
0.2.3
- eh: Add alloc/free for dependent exception
- cstring: Provide inlines only if __CORRECT_ISO_CPP_STRING_H_PROTO is not defined
- Several compile fixes for recent gcc versions
- Have string use some of the base class insert functions to be more complete
- Change map::operator[] to not create unnecessary temp objects.
- Ensure that map and mmap swap functions are properly exported
- Add support for ostream adjustwidth support
- Add support for bool limits support
- Misc fstream fixes
- Add support for comparison between deque iteractors and deque const_iterators
0.2.2
- Fixed default flags for ios
- Implemented locale::name() for compatability reasons
- Found embarassing = instead of == in code. Fixed.
- Made algotest active.
- Ifdef out GCC specific pragmas and attribute foo to be more portable. Thanks to asierllano.
- Stop initializing variables in destructor.
- Have destruction of ostream objects cause the buffers to be flushed.
- Implement deque::swap
- Remove variable name to avoid unused variable declaration warning.
- Add #pragma GCC visibility push/pop in header files at the request of Peter S. Mazinger
- Convert string test suite to use new test framework.
- Don't have ostream do flushing - leave that to subclasses.
- Now support ios::exception properly
- istream::get(char *s, streamsize n) is now more standards-compliant.
- Added new base to be used for associative containers (map, set, multimap, multiset).
- Fixed iterator returned by list::erase when erasing first element in list.
- Map and multimap classes have been rewritten with the new associative base. Now passes test suite!
- Set and multiset classes have been rewritten with the new associative base.
- Set and Map now should insert from iterators correctly.
- Fix fstreambuf to not segfault on reading from a closed file descripter.
- Have ios_Base::init reset the stream flags as per the spec.
- Fixed string.compare() to do math on the correct variables.
- Added location for complex tests, plus a preliminary test attempting to reproduce suspected issue.
0.2.1
- Now export std::calloc & std::realloc
- Implement std::ws
- Implement istream>> (*pf)(istream)
- Implement istream>> (*pf)(ios_base)
- Implement string::find_last_not_of
- Convert some string functions to use traits::eq in spec compliance
- String now accepts resize filler character
- String::assign(iterator first, iterator last) now implemented
- Clean up double-semicolons
- Add parent class scoping as appropriate
- Make ios::Init() exported again
- Replace cwchar and cstdio with my own versions, getting rid of GNU badness
- Add eh_alloc to source - replacing more objects from the GNU implementation
- Add configurable use of TLS as appropriate (migrating this way - no support deprecated)
- Make ostream formating more accurately reflect specification (curtesy Gavin Lambert)
- Make streams respect the ios_base::app flag. Added test case to check for this in fstream
- Elliminate unuse architecture config code (Thanks to Mike Frysinger)
- Added preliminary implementation of <limits>
- Fixed memory error in list::remove implementation
- Fix memory leak in vector
0.2.0
- Now can compare set iterators and const_iterators
- Now can compare map iterators and const_iterators
- Now can get a const value from operator* on set/map iterator
- Added fixed to std::map / std::multimap
- Clean up test suite
- Map test now tests for some additional error conditions
- Map iterators still invalidated improperly
- Fix to functional binder using wrong type
- Long double support now depends on float support
0.1.12
- Add missing const declarators to some data types (thanks to asierllano)
- Fix list::swap to alter the nubmer of elements
- Fix map and mmap code find functions
- Add const operator== and operator!= to multiple containers
- Removied 3-argument string::compare and substituted 5-arguement compare with defaults
- Re-instituted basic_ios() constructor. istream/ostream now manually call protected init()
- Fixed implementation of uflow() (Thanks tommi)
- badbit now set if data not written in ostream code
- fix implementation of traits::copy
- Call flush far less often
- Now with multimap::operator== (thanks to tommi)
- Implementation of istreambuf_iterator::equal() (Thanks to tommi)
- Fix certain exception implementations
- Istream now sets error bits correctly (thanks to tommi)
- Change implementation of streambuf::xsputn
- Fix of binder2nd operator implementation
- Elliminated unneccessary pointers in ostream and istream - use pointers in base class instead
- Added tests of utilities
- Now handle calls to new() requesting 0 bytes without throwing exception
- Changed behaviour of sstream to more closely match standard, GNU libstdc++ and the rest of iostream
- Fix implementation for man_fun to use mem_fun1_t as appropriate
- Fix const on mem_fun1_t
- Remove const from auto_ptr::release()
- Add const to map::const_iterator operator->()
- Add const to set::const_iterator operator->()
- Provide for default argument to vector::resize()
- Implemented std::ends
- Implemented [multi]set comparison operators
- Fixed deque operator==
- Deque const_iterator now works properly
- Fix auto_ptr() copy constructor to not be const
- Better fix for deque const_iterator
- Undef min/max in algorithm to get rid of macro versions
- Yet Another Implementation of deque::iterator
- Implemented swap(string, string)
- Change algorithms swap to use copy constructor instead of default constructor
- Added a little more from gslice_array
- Created comparison operatators for list
- Added binary operators to valarray
- Added trig operators to valarray
- Fixed typos in valarray (thanks to psm)
- Broke spec slightly in slice_array to allow copying to make borken apps/compilers work
- More fixes to auto_ptr const correctness
- Fix deque constness in deque const_iterator typenames
- Fix stringstream buffer xsputn implementation
0.1.11
- Expanding basic_string<char> automatically expands vector<char>, even if not
explicitly expanding vector for other data types. No cost and may save space.
- Explicitly share istream code for tokenizing stream
- Fix of bind2nd in function (Thanks to Ted Schroeder)
- Properly implement fstream::sync() - now works
- Added std::streamoff
- Added operators for fpos in ios
- Fix resize() call in string wrapping non-existant resize() call
- Fix operator >= in string
- Performance speedup in vector/string (now *use* preallocated buffer space)
- Showbase is no longer on by default
- i|ostream now call the constructor for basic_ios properly
- Fixes to how snextc() works. Code now fixed
- seekoff() and thus tellg now returns ftell to give useful information
- General iostream cleanups
- Additions to io and other tests
- Added test for streambuf
- Made changes to iostream - now reads first and last character!
- Update istream::read to list amount of data last read successfully
- Add configuration option to avoid expanding pesky [con|de]structors
- Implemented std::auto_ptr - don't know how I missed that one
- Now able to have all support libraries imported (libgcc_eh)
- wchar output now works properly - note that performance sucks necessarily
- Fix to string::erase() so it now actually erases
0.1.10
- Implemented clog and changed cerr to meet spec (unbuffered)
- Implemented wcout, wcin, wcerr and wclog
- Added functions to support conversion of wchar to appropriate types
- Cleanup of #includes in header files to reduce bloat and compilation time
- Added ostream support for wchar
- Fixed missing const declaration in functional causing problems with algorithms
Peter S. Mazinger: Added -z defs to $(CC) -shared
- Fixed wchar enhancements if wchar is not enabled
- Cleaned up tests system to be much easier to add additional tests
- Fixed problems in getline() code
- Major performance increase on fstream input code (4.5X, approximately)
- Move libgcc_eh and libsupc++ code into separate directories
- More code expansion into the library to make executibles much smaller
- Remove unneeded typedefs to clean up the code and make it easier to understand
- <complex> nearly complete - only need to implement pow()
- Fixed problem with failing to handle end-of-file notification
- Removed certain enhancements until I can figure out why they are spewing warnings
0.1.9
Peter S. Mazinger: wchar cleanups across the board
- Make sure that operator= changes the number of elements in the vector.
- Fix to string::pop_back function scope
- reverse_iterator copying fixed
- Have max string length test aginst proper variable (oops)
- Change sstream to use append instead of push_back all of the time
- Make string::append start reading at the correct location
- Convert sstream to allow seeking on write stream without truncation
- Convert sstream xsputn to use either append or replace
- Elliminate duplicate size_t definition - now use C library version
- Make sure string assign(size_type n, Ch c) clears the string before resizing
- Fix string insert functions to move the correct amount of data
- Reimplemented cstring, cassert, cerrno, cstdlib
0.1.8
- Fixed problem in <map> which returned this instead of *this for operator=
- Fixed an problem using . instead of -> Oops.
- Added string find, rfind, find_first_of and find_last_of functions
- Moved operator+(string, string) into library binary.
- Added <iomanip> header. Forgot that little thing. Oops.
- Fixed insert for vector<int>. Technique shamelessly stolen from glibc++
- fix problem in list which incorrectly handles pointers
- Create native std::string::find(Ch) instead of calling through string constructor.
- Fix of istream getline (only sets failbit if extracted 0 chars, not copied 0 chars)
- Fix string::find so we can scan the last character in the string.
- Fix map iterator overloading class definion
- Fix map iterator returning value not reference
- Change tests to check changes
- Change ios::operator() to return 1 instead of this
- Fix [i|o]stream to check open() return value
- Change fstream open functions to use the proper bitwise operators
- Change allocator functionality so that it works according to spec.
- Conversion of STL to use allocator::construct/destroy
- Make test suite nicer.
0.1.7 - 2004-12-23
- Significant changes to the library
- Converted a lot of forced instanteation from double definitions to ifdef tricks
- Merged some of the helper functions into the main files
- Split off i/ostream string code from core string header
- Lots of little bugfixes done involving function definitions, etc.
- Fixed a spec error in list code - erase now returns a pointer after deleted elements, not before
- Fixed a spec error in streambuf - now call pbackfail instead of returning error.
- Added more code to valarray - now supports slice_array - untested
- Modified test suite (by popular demand). Now the process can be automated
- Added targets make tests and make test. tests builds tests and test runs them
0.1.6 - 2004-11-30
- Fixed problem with straembuf where a value was being returned instead of a pointer
- Fixed a problem where a buffer was not flushed on close of an fstraem
- Added basic test for fstream
- Started working on better way to expand symbols in library
0.1.5 - 2004-09-26
- Added code for all algorithms
- Fixed map/set code to prevent infinite loops. Oops.
- Fixed list code to prevent most memory leaks. 1 still remains, but unknown location
- stlport v 1.00 test suite now compiles, links and runs. Some issues remain
- Fix deque constructor using the wrong end_pointer value
- Added erase capability to vector
- Changed multimap::find to point to first matching element instead of any matching element
- Added more tests to test suite based upon problems from stlport test suite
- Altered istream_iterator template so that it handles begining of stream conditions properly
- Fixed make_heap and sort_heap functions to sort in the correct order
- Fixed a few pedantic errors in std::string as it relates to the vector base
- All (known) stlport issues have been resolved. Compiles and runs properly.
0.1.4 - 2004-09-10
- Fixed minor previous errors
- Added <algorithm> heap functions. Just treat as a descending sorted list
- Added more code to <valarray>
- Added <, <=, >, >= comparisons to deque iterators (don't know why I missed them in the first place)
- Making Makefiles a little bit better.
0.1.3 - 2004-09-06
- Compiles with gcc 3.4, thus it is far more "correct" than previously
- Started adding code for valarray
0.1.2 - 2004-09-05
- Completed all core code for set, multiset, map and multimap. Rewrote to use inheritance to cut code duplication
- Added more algorithms
- Now compiles the stlport 1.0 testsuite (some minor changes to not test extensions needed)
- Does not yet link stlport testsuite - missing implementations of a number of functions
- Added sort algorithm - using a bubble sort for now.
- sort_stable will likely remain bubble sort for some time (It is both stable and in-place)
- sort will likely be converted to a heap sort eventually (It is in-place, but non-stable)
- List sort is a bubble sort. Might change later (insertion sort?), but it is difficult to work with list limitations
- Split iterator code into two sections to cut down on dependency hell
- Compiles ncurses c++ library and test application
0.1.1 - 2004-09-01
- Removed semicolons on the closing of namespaces. My compiler doesn't warn, so I may have missed one or two
- Fixed a problem with the istream code which caused it to fail to read in the first character of input.
- Changed compiler flags to not generate some warnings on >=GCC 3.4
- Changed build process to prevent misconfiguration under certain circumstances
- Added stringstream and all of it's incarnations
- Added <bitset>
- Added <set> - code is considered 'under development' - not finished
0.1.0 - 2004-08-28
- Nearly done all algorithms
- Added some SGI extensions
- Completed numerics libraries
- Only multimap has yet to be started of containers
- Lots of bug fixes
- Coompiles all of the stlport C++ STL tests up to mmap1.cpp (no multimap)
+37
View File
@@ -0,0 +1,37 @@
Source Files
All of the forward declarations and templates are defined in header files in
the include/ directory.
All of the .cpp files in the src/ directory are supposed to produce binary output
at compile time to be linked into the library. There is one such file per header
file located in include. These .cpp files may not actually contain any code or
instanteated objects and instead simply be place holders.
Source categories.
Source code can be broken down into 4 separate categories:
- uClibc++ support code
- new and delete operators
- GNU libstdc++ support code
- Code taken to be compatible with compiler ABI requirements
- Difficult to replace
- IOStream code
- This code is used by almost anything. It is extremely
convoluted internally and has been rewritten on more than one
occasion because it is very difficult to understand
- STL Containers and Algorithms
- These are hardest to keep small because of code expansion.
- Fairly self-contained in their own right
Deviations from spec
- Map and set iterators are currently invalidated if you erase or insert an
element into the map/set
- Locales are not supported. This is intentional.
+36
View File
@@ -0,0 +1,36 @@
For those just beginning with the uClibc++ library, the steps to
begin are fairly easy.
1) Find the location of the GNU libsupc++.a file on your computer.
It will likely be in a location like:
/usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.4/libsupc++.a
Make a note of this file path
2) Run 'make menuconfig' which will bring up a nifty ncurses-based
configuration dialog system. This is similar to the Linux kernel
configuration system, and was ripped directly from uClibc.
3) Configure to fit your system. Defaults will be good enough for
now.
4) Under 'Library Installation Options', put the path to libsupc++.a
in the appropriate location.
5) Save your configuration
6) Compile by typing 'make'
7) Install the library by typing 'make install'
8) If you want to use this library as a part of your working system
and you did not install the library to a directory in the library
search path, you can either add the installation directory to
the /etc/ld.so.conf file, or (preferred) make a symlink from
the libuClibc++.so symlink into a directory in your search path,
such as /usr/lib
9) Compile applications using the wrapper script provided in the bin
directory of the install path. If you run into problems, please
let me know.
10) Enjoy!
+7
View File
@@ -0,0 +1,7 @@
top_srcdir=./
top_builddir=$(if $(O),$(O),.)/
export top_builddir
all:
include $(top_srcdir)Rules.mak
include Makefile.in
include $(top_srcdir)Makefile.end
+44
View File
@@ -0,0 +1,44 @@
# Rules.mak
# vi: ft=make :
# Copyright Garrett Kajmowicz, 2004-2006
# Copyright (C) 2000 by Lineo, inc.
# Copyright (C) 2000-2002 Erik Andersen <andersen@uclibc.org>
#
# This program is free software; you can redistribute it and/or modify it under
# the terms of the GNU Library 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 Library General Public License for more
# details.
#
# You should have received a copy of the GNU Library 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
# This file and most of the menuconfiguration system have been taken wholesale from
# the uClibc package availalble at www.uclibc.org
ifeq ($(HAVE_DOT_CONFIG),y)
# dependency tracking
files.dep := $(libcxx-a-y) $(libcxx-so-y) $(libcxx-nonshared-y) \
$(libgcc_eh-y) $(libsupc-y)
.depends.dep := \
$(patsubst %.s,%.s.dep,$(filter %.s,$(files.dep))) \
$(patsubst %.o,%.o.dep,$(filter %.o,$(files.dep)))
# Oh, and prepend a dot to the basename so i don't have to change my habit of
# calling 'size thefile.o*'
.depends.dep := $(foreach f,$(.depends.dep),$(dir $(f)).$(notdir $(f)))
.depends.dep := $(wildcard $(.depends.dep)) $(manual.depends.dep)
ifeq ($(filter $(noconfig_targets),$(MAKECMDGOALS)),)
ifneq ($(strip $(.depends.dep)),)
.NOEXPORT:
-include $(.depends.dep)
endif # filter
endif # any .dep file
endif # ifeq ($(HAVE_DOT_CONFIG),y)
+129
View File
@@ -0,0 +1,129 @@
ifeq ($(HAVE_DOT_CONFIG),y)
all: lib
else
all: defconfig
endif
include $(top_srcdir)bin/Makefile.in
include $(top_srcdir)include/Makefile.in
include $(top_srcdir)src/Makefile.in
include $(top_srcdir)extra/Makefile.in
$(headers-y) $(libcxx-a-y) $(libcxx-so-y): include/system_configuration.h
DISTCLEAN_tests:
$(Q)$(MAKE) -C tests distclean
tests: lib
$(Q)$(MAKE) -C tests all
check test: tests
$(Q)$(MAKE) -C tests test
release:
$(RM) ../uClibc++-$(VERSION).tar
git archive --format=tar --prefix=uClibc++-$(VERSION)/ HEAD \
> ../uClibc++-$(VERSION).tar
cat ../uClibc++-$(VERSION).tar | bzip2 -c9 > ../uClibc++-$(VERSION).tar.bz2
cat ../uClibc++-$(VERSION).tar | xz -e -c8 > ../uClibc++-$(VERSION).tar.xz
du -b $(addprefix ../uClibc++-$(VERSION).tar.,bz2 xz)
install: install-bin install-include install-lib
clean: CLEAN_bin CLEAN_src
#$(MAKE) -C $(top_builddir)extra/locale clean
realclean: clean DISTCLEAN_extra DISTCLEAN_include DISTCLEAN_src DISTCLEAN_tests
distclean: realclean DISTCLEAN_.config
DISTCLEAN_.config:
$(do_rm) $(addprefix $(top_builddir),.config .config.cmd .config.old)
#Menu configuration system
extra/config/conf:
$(Q)$(MAKE) -C extra/config conf
extra/config/mconf:
$(Q)$(MAKE) -C extra/config ncurses mconf
menuconfig: extra/config/mconf
$(Q)$< extra/Configs/Config.in
config: extra/config/conf
$(Q)$< extra/Configs/Config.in
oldconfig: extra/config/conf
$(Q)$< -o extra/Configs/Config.in
silentoldconfig: extra/config/conf
$(Q)$< -s extra/Configs/Config.in
randconfig: extra/config/conf
$(Q)$< -r extra/Configs/Config.in
allyesconfig: extra/config/conf
$(Q)$< -y extra/Configs/Config.in
allnoconfig: extra/config/conf
$(Q)$< -n extra/Configs/Config.in
defconfig: extra/config/conf
$(Q)$< -d extra/Configs/Config.in
include/system_configuration.h: .config | extra/config/conf
$(Q)extra/config/conf -o extra/Configs/Config.in
ifeq ($(HAVE_DOT_CONFIG),)
.config: defconfig
endif
help:
@echo 'Cleaning:'
@echo ' clean - delete temporary object files'
@echo ' realclean - delete temporary object files, including dependencies'
@echo ' distclean - delete all non-source files (including .config)'
@echo
@echo 'Build:'
@echo ' all - libraries'
@echo
@echo 'Configuration:'
@echo ' allnoconfig - disable all symbols in .config'
@echo ' allyesconfig - enable all symbols in .config (see defconfig)'
@echo ' config - text based configurator (of last resort)'
@echo ' defconfig - set .config to arch-specific defaults'
@echo ' menuconfig - interactive curses-based configurator'
@echo ' oldconfig - resolve any unresolved symbols in .config'
@echo ' silentoldconfig - resolve any unresolved symbols in .config, silently'
@echo ' randconfig - generate a random .config'
@$(if $(arch-defconfigs), \
@echo ''; \
echo 'Architecture specific configs ($(ARCH))'; \
$(foreach c, $(arch-defconfigs), \
printf " %-21s - Build for %s\\n" $(c) $(subst _defconfig,,$(c));) \
)
@echo
@echo 'Installation:'
@echo ' install - install both the runtime and the headers'
@echo
@echo 'Development:'
@echo ' check - run testsuite'
@echo ' tests - compile testsuite binaries'
@echo ' release - create a distribution tarball'
@echo
@echo 'Environment variables:'
@echo ' V="" - Quiet build (default)'
@echo ' V=1 - Brief build (show defines, ld flags)'
@echo ' V=2 - Very verbose build'
@echo ' CROSS_COMPILE= - Override CROSS_COMPILER_PREFIX from .config'
@echo ' SHELL= - Shell to use for make'
@echo ' HOSTCC= - C Compiler for compiling host binaries'
@echo ' HOSTCXX= - C++ Compiler for compiling host binaries'
@echo ' HOSTCFLAGS= - extra CFLAGS for compiling host binaries'
@echo ' HOSTCXXFLAGS= - extra CXXFLAGS for compiling host binaries'
@echo ' HOSTLDFLAGS= - extra LDFLAGS for linking host binaries'
@echo
@echo ' DESTDIR= - Prepended prefix to installation paths'
@echo ' CPU_CFLAGS - extra C- and CXX- FLAGS for compiling uClibc++'
@echo ' LDFLAGS - extra LDFLAGS for linking uClibc++ itself'
@echo ' BUILD_EXTRA_LIBRARIES - extra LDFLAGS for linking uClibc++ itself'
+32
View File
@@ -0,0 +1,32 @@
A few notes:
- Most of the uClibc++ development is done against relatively recent versions of
GCC. Currently that means something in the 4.2 series. The 3 series was great,
but has a large number of known issues.
- If you are looking to statically compile an application, you must compile it
without the use of either rtti or exceptions. The library should be compiled
likewise. Since the application will be statically compiled, you may run a
dynamic library with exception support.
- As of version 0.1.11 uClibc+ throws LOTS of warnings when compiling about inline
functions used but never defined. There warnings are known errors in GCC
versions 3.3.3 3.4.0 4.0.0 4.1.0 [Bug #21627]. Either ignore these warnings or
upgrade your compiler. Note that these warnings will exist when compiling software
as well as the library itself.
- uClibc++ is not capable of bootstrapping itself. The library depends upon some
of the gcc support files and libstdc++ for exception support. Linking in libsupc++
moves all of the required code into the library so that the GNU library is no
longer required AFTER COMPILATION. Thus you can build uClibc++ on a development
system against libstdc++, but when deployed you will not need any of the GNU library
files.
- The debugging option now has an impact on produced code. For now it simply zeros out
pointers used internally which should never be used, or which are considered to be
invalidated anyways. This will help track down bugs easier (this change was in result
of a memory-related error).
- The files in the tests/testoutput directory ending in good are used as reference for
the test suite - this allows a byte-for-byte comparison of the output of the streams
library, and so on.
+596
View File
@@ -0,0 +1,596 @@
# Rules.mak
# vi: ft=make :
# Copyright Garrett Kajmowicz, 2004-2006
# Copyright (C) 2000 by Lineo, inc.
# Copyright (C) 2000-2002 Erik Andersen <andersen@uclibc.org>
#
# This program is free software; you can redistribute it and/or modify it under
# the terms of the GNU Library 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 Library General Public License for more
# details.
#
# You should have received a copy of the GNU Library 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
# This file and most of the menuconfiguration system have been taken wholesale from
# the uClibc package availalble at www.uclibc.org
.SUFFIXES:
.SUFFIXES: .cpp .c .S .o .so .a .s .i
PHONY := FORCE
.PHONY: $(PHONY) all clean realclean distclean install
FORCE:
ifdef CROSS
# CROSS is still supported for backward compatibily only
$(warning CROSS is deprecated, please use CROSS_COMPILE instead)
ifneq ($(CROSS_COMPILE),)
$(warning CROSS_COMPILE has precedence over CROSS, ignoring the latter)
endif
endif
CROSS_COMPILE ?= $(CROSS)
CC= $(CROSS_COMPILE)gcc
CXX= $(CROSS_COMPILE)g++
AR= $(CROSS_COMPILE)ar
LD= $(CROSS_COMPILE)ld
NM= $(CROSS_COMPILE)nm
RANLIB= $(CROSS_COMPILE)ranlib
STRIPTOOL= $(CROSS_COMPILE)strip
INSTALL = install
LN = ln
RM = rm -f
TAR = tar
SED = sed
AWK = awk
ARFLAGS:= cr
# Select the compiler needed to build binaries for your development system
HOSTCC=gcc
HOSTCFLAGS=-O2 -Wall
HOSTCXX=g++
HOSTCXXFLAGS=-O2 -Wall
#--------------------------------------------------------
# Nothing beyond this point should ever be touched by mere mortals.
# Unless you hang out with the gods, you should probably leave all
# this stuff alone.
MAJOR_VERSION:=0
MINOR_VERSION:=2
SUBLEVEL:=5
VERSION:=$(MAJOR_VERSION).$(MINOR_VERSION).$(SUBLEVEL)
ABI_VERSION:=$(MAJOR_VERSION)
export MAJOR_VERSION MINOR_VERSION SUBLEVEL VERSION ABI_VERSION
LNAME:=uClibc++
LIBNAME:=libuClibc++
SHARED_FULLNAME:=$(LIBNAME)-$(MAJOR_VERSION).$(MINOR_VERSION).$(SUBLEVEL).so
SHARED_MAJORNAME:=$(LIBNAME).so.$(ABI_VERSION)
# Make sure DESTDIR and PREFIX can be used to install
ifdef PREFIX
# PREFIX is a uClibcism while DESTDIR is a common GNUism
$(warning PREFIX is deprecated, please use DESTDIR instead)
ifneq ($(DESTDIR),)
$(warning DESTDIR has precedence over PREFIX, ignoring the latter)
endif
endif
DESTDIR ?= $(PREFIX)
clean_targets := clean realclean distclean CLEAN_% DISTCLEAN_%
noconfig_targets := conf mconf \
menuconfig config oldconfig silentoldconfig randconfig \
defconfig allyesconfig allnoconfig $(clean_targets) \
release tags TAGS help
# Pull in the user's uClibc++ configuration
ifeq ($(filter $(noconfig_targets),$(MAKECMDGOALS)),)
# Prevent make from searching
-include $(abspath $(top_builddir).config)
endif
comma:=,
space:= #
# A nifty macro to make testing gcc features easier
check_gcc=$(shell \
if $(CC) $(1) -S -o /dev/null -xc /dev/null > /dev/null 2>&1; \
then echo "$(1)"; else echo "$(2)"; fi)
check_gxx=$(shell \
if $(CXX) $(1) -S -o /dev/null -xc++ /dev/null > /dev/null 2>&1; \
then echo "$(1)"; else echo "$(2)"; fi)
check_as=$(shell \
if $(CC) -Wa,$(1) -Wa,-Z -c -o /dev/null -xassembler /dev/null > /dev/null 2>&1; \
then echo "-Wa,$(1)"; fi)
check_ld=$(shell \
if $(LD) $(1) -o /dev/null -b binary /dev/null > /dev/null 2>&1; \
then echo "$(1)"; fi)
# Use variable indirection here so that we can have variable
# names with fun chars in them like equal signs
define check-tool-var
ifeq ($(filter $(clean_targets) CLEAN_%,$(MAKECMDGOALS)),)
_v = $(2)_$(3)
ifndef $$(_v)
$$(_v) := $$(call $(1),$(subst %, ,$(3)))
export $$(_v)
endif
endif
endef
# Usage: check-gcc-var,<flag>
# Check the C compiler to see if it supports <flag>.
# Export the variable CFLAG_<flag> if it does.
define check-gcc-var
$(call check-tool-var,check_gcc,CFLAG,$(1))
endef
# Check the C++ compiler to see if it supports <flag>.
# Export the variable CXXFLAG_<flag> if it does.
define check-gxx-var
$(call check-tool-var,check_gxx,CXXFLAG,$(1))
endef
# Usage: check-as-var,<flag>
# Check the assembler to see if it supports <flag>. Export the
# variable ASFLAG_<flag> if it does (for invoking the assembler),
# as well CFLAG_-Wa<flag> (for invoking the compiler driver).
define check-as-var
$(call check-tool-var,check_as,ASFLAG,$(1))
_v = CFLAG_-Wa$(1)
export $$(_v) = $$(if $$(ASFLAG_$(1)),-Wa$$(comma)$$(ASFLAG_$(1)))
endef
# Usage: check-ld-var,<flag>
# Check the linker to see if it supports <flag>. Export the
# variable LDFLAG_<flag> if it does (for invoking the linker),
# as well CFLAG_-Wl<flag> (for invoking the compiler driver).
define check-ld-var
$(call check-tool-var,check_ld,LDFLAG,$(1))
_v = CFLAG_-Wl$(1)
export $$(_v) = $$(if $$(LDFLAG_$(1)),-Wl$$(comma)$$(LDFLAG_$(1)))
endef
# Usage: cache-output-var,<variable>,<shell command>
# Execute <shell command> and cache the output in <variable>.
define cache-output-var
ifndef $(1)
$(1) := $$(shell $(2))
export $(1)
endif
endef
$(eval $(call cache-output-var,GCC_VER,$(CC) -dumpversion))
GCC_VER := $(subst ., ,$(GCC_VER))
GCC_MAJOR_VER ?= $(word 1,$(GCC_VER))
#GCC_MINOR_VER ?= $(word 2,$(GCC_VER))
# strip quotes
qstrip = $(strip $(subst ",,$(1)))
#"))
BUILD_EXTRA_LIBRARIES:=$(call qstrip,$(BUILD_EXTRA_LIBRARIES))
# Make certain these contain a final "/", but no "//"s.
UCLIBCXX_RUNTIME_PREFIX:=$(strip $(subst //,/, $(subst ,/, $(call qstrip,$(UCLIBCXX_RUNTIME_PREFIX)))))
UCLIBCXX_RUNTIME_LIBDIR:=$(strip $(subst //,/, $(subst //,/, $(subst ,/, $(call qstrip,$(UCLIBCXX_RUNTIME_PREFIX)$(UCLIBCXX_RUNTIME_LIB_SUBDIR))))))
UCLIBCXX_RUNTIME_BINDIR:=$(strip $(subst //,/, $(subst //,/, $(subst ,/, $(call qstrip,$(UCLIBCXX_RUNTIME_PREFIX)$(UCLIBCXX_RUNTIME_BIN_SUBDIR))))))
UCLIBCXX_RUNTIME_INCLUDEDIR:=$(strip $(subst //,/, $(subst //,/, $(subst ,/, $(call qstrip,$(UCLIBCXX_RUNTIME_PREFIX)$(UCLIBCXX_RUNTIME_INCLUDE_SUBDIR))))))
export UCLIBCXX_RUNTIME_PREFIX UCLIBCXX_RUNTIME_LIBDIR UCLIBCXX_RUNTIME_BINDIR UCLIBCXX_RUNTIME_INCLUDEDIR
WRAPPER = $(top_builddir)bin/g++-uc
OPTIMIZATION:=
PICFLAG:=-fPIC
# use '-Os' optimization if available, else use -O2, allow Config to override
$(eval $(call check-gcc-var,-Os))
ifneq ($(CFLAG_-Os),)
OPTIMIZATION += $(CFLAG_-Os)
else
$(eval $(call check-gcc-var,-O2))
OPTIMIZATION += $(CFLAG_-O2)
endif
$(eval $(call check-gxx-var,-fvisibility-inlines-hidden))
$(eval $(call check-gxx-var,-std=gnu++14))
$(eval $(call check-gxx-var,-Wno-sized-deallocation))
$(eval $(call check-gxx-var,-Wno-tautological-compare))
# Add a bunch of extra pedantic annoyingly strict checks
XWARNINGS=$(call qstrip,$(UCLIBCXX_WARNINGS)) -Wno-trigraphs -pedantic
CPU_CFLAGS=$(call qstrip,$(CPU_CFLAGS-y))
# Some nice CFLAGS to work with
GEN_CFLAGS:=-fno-builtin
CFLAGS:=$(XWARNINGS) $(CPU_CFLAGS)
LDFLAGS-$(LIBNAME).so:=-Wl,--warn-common -Wl,--warn-once -Wl,-z,combreloc -Wl,-z,defs
STRIP_FLAGS-src := -x -R .note -R .comment
STRIP_FLAGS-src/abi := -x -R .note -R .comment
ifeq ($(DODEBUG),y)
CFLAGS += -O0 -g3
STRIPTOOL:= true -Since_we_are_debugging
else
CFLAGS += $(OPTIMIZATION)
endif
ifneq ($(BUILD_ONLY_STATIC_LIB),y)
CFLAGS += $(PICFLAG)
endif
EH_CXXFLAGS:=
ifneq ($(UCLIBCXX_EXCEPTION_SUPPORT),y)
EH_CXXFLAGS += -fno-exceptions -fno-rtti
endif
GEN_CXXFLAGS:=-nostdinc++
GEN_CXXFLAGS+=$(if $(CXXFLAG_-fvisibility-inlines-hidden),-DGCC_HASCLASSVISIBILITY)
CXXFLAGS:=$(CFLAGS)
CFLAGS += -ansi
LIBGCC:=$(shell $(CC) -print-libgcc-file-name)
LIBGCC_DIR:=$(dir $(LIBGCC))
# Let users override these
ifndef LIBGCC_EH
$(eval $(call cache-output-var,FILE_LIBGCC_EH,$(CXX) -print-file-name=libgcc_eh.a))
LIBGCC_EH:=$(strip $(if $(IMPORT_LIBGCC_EH),$(FILE_LIBGCC_EH)))
endif
ifndef LIBSUP
$(eval $(call cache-output-var,FILE_LIBSUP,$(CXX) -print-file-name=libsupc++.a))
LIBSUP:=$(strip $(if $(IMPORT_LIBSUP),$(FILE_LIBSUP)))
endif
list-archive-members = $(if $(1),$(shell $(AR) t $(1)))
variablify = $(strip $(subst /,_,$(subst :,_,$(subst ;,_,$(subst |,_,$(subst >,_,$(subst <,_,$(1))))))))
GEN_LIBS:= -lc
ifneq ($(LIBGCC_DIR),$(UCLIBCXX_RUNTIME_LIBDIR))
GEN_LIBS += -L$(LIBGCC_DIR)
endif
ifneq ($(IMPORT_LIBSUP),y)
GEN_LIBS += -lsupc++
endif
LIBS := $(GEN_LIBS)
STATIC_LIBS := $(GEN_LIBS)
$(eval $(call cache-output-var,LDASNEEDED,$(LD) --help 2>/dev/null | grep -q -- --as-needed && echo y))
link.asneeded = $(if $1,$(if $(LDASNEEDED),-Wl$(comma)--as-needed $(1) -Wl$(comma)--no-as-needed,$(1)))
#ifneq ($(GCC_MAJOR_VER),3)
#LIBS-ASNEEDED-$(LIBNAME).so = -lgcc_s
#endif
ifneq ($(IMPORT_LIBGCC_EH),y)
STATIC_LIBS += -lgcc_eh
LIBS-ASNEEDED-$(LIBNAME).so+= -lgcc_eh
endif
# We do not need built-in implicit rules
MAKEFLAGS += -r
ifneq ($(findstring s,$(MAKEFLAGS)),)
export MAKE_IS_SILENT := y
SECHO := -@false
DISP := sil
Q := @
else
export MAKE_IS_SILENT := n
SECHO := @echo
ifneq ($(V)$(VERBOSE),)
ifeq ($(V),1)
DISP := bri# brief, like pur but with defines
Q := @
else
SHELL_SET_X := set -x
DISP := ver
Q :=
endif
else
DISP := pur
Q := @
endif
endif
show_objs = $(subst $(top_builddir),,$(subst ../,,$@))
define show_defs
$(filter -D%,$(call unwrapper,$(1)))
endef
define show_ldflags
$(subst $(comma), ,$(subst -Wl$(comma),,$(filter -Wl%,$(1))))
endef
pur_disp_compile.cxx = echo " "CXX $(show_objs)
pur_disp_compile.c = echo " "CC $(show_objs)
pur_disp_compile.ixx = echo " "CPP $(show_objs)
pur_disp_compile.i = echo " "CPP $(show_objs)
pur_disp_compile.sxx = echo " "CXX-S $(show_objs)
pur_disp_compile.s = echo " "CC-S $(show_objs)
pur_disp_compile.u = echo " "CC $(show_objs)
pur_disp_compile.S = echo " "AS $(show_objs)
pur_disp_compile.uxx = echo " "CXX $(show_objs)
pur_disp_compile.oxx = echo " "CXX-o $(show_objs)
pur_disp_hcompile.u = echo " "HOSTCC $(show_objs)
pur_disp_hcompile.o = echo " "HOSTCC-o $(show_objs)
pur_disp_hcompile.uxx= echo " "HOSTCXX $(show_objs)
pur_disp_hcompile.oxx= echo " "HOSTCXX-o $(show_objs)
pur_disp_strip = echo " "STRIP $(STRIP_FLAGS) $@
pur_disp_t_strip = echo " "STRIP $(STRIP_FLAGS-$(@D)) $@
pur_disp_ar = echo " "AR $(ARFLAGS) $@
pur_disp_ranlib = echo " "RANLIB $(RANLIBFLAGS) $@
pur_disp_ld = echo " "LD $(call dirify,$(1))
pur_disp_ln = echo " "LN $(show_objs)
pur_disp_mkdir = echo " "MKDIR $(show_objs)
pur_disp_gen = echo " "GEN $(show_objs)
pur_disp_install = echo " "INSTALL $(1)
pur_disp_unifdef = echo " "UNIFDEF $(show_objs)
pur_disp_rm = echo " "CLEAN $(subst CLEAN_,,$(subst DISTCLEAN_,,$@))
sil_disp_compile.cxx = true
sil_disp_compile.c = true
sil_disp_compile.ixx = true
sil_disp_compile.i = true
sil_disp_compile.sxx = true
sil_disp_compile.s = true
sil_disp_compile.u = true
sil_disp_compile.S = true
sil_disp_compile.uxx = true
sil_disp_compile.oxx = true
sil_disp_hcompile.u = true
sil_disp_hcompile.o = true
sil_disp_hcompile.uxx= true
sil_disp_hcompile.oxx= true
sil_disp_strip = true
sil_disp_t_strip = true
sil_disp_ar = true
sil_disp_ranlib = true
sil_disp_ld = true
sil_disp_ln = true
sil_disp_mkdir = true
sil_disp_gen = true
sil_disp_install = true
sil_disp_unifdef = true
sil_disp_rm = true
bri_disp_compile.cxx = $(pur_disp_compile.cxx) $(call show_defs,$(cmd_compile.cxx))
bri_disp_compile.c = $(pur_disp_compile.c) $(call show_defs,$(cmd_compile.c))
bri_disp_compile.ixx = $(pur_disp_compile.ixx) $(call show_defs,$(cmd_compile.ixx))
bri_disp_compile.i = $(pur_disp_compile.i) $(call show_defs,$(cmd_compile.i))
bri_disp_compile.sxx = $(pur_disp_compile.sxx) $(call show_defs,$(cmd_compile.sxx))
bri_disp_compile.s = $(pur_disp_compile.s) $(call show_defs,$(cmd_compile.s))
bri_disp_compile.u = $(pur_disp_compile.u) $(call show_defs,$(cmd_compile.u))
bri_disp_compile.S = $(pur_disp_compile.S) $(call show_defs,$(cmd_compile.S))
bri_disp_compile.uxx = $(pur_disp_compile.uxx) $(call show_defs,$(cmd_compile.uxx))
bri_disp_compile.oxx = $(pur_disp_compile.oxx) $(call show_defs,$(cmd_compile.oxx))
bri_disp_hcompile.u = $(pur_disp_hcompile.u) $(call show_defs,$(cmd_hcompile.u))
bri_disp_hcompile.o = $(pur_disp_hcompile.o) $(call show_defs,$(cmd_hcompile.o))
bri_disp_hcompile.uxx=$(pur_disp_hcompile.uxx) $(call show_defs,$(cmd_hcompile.uxx))
bri_disp_hcompile.oxx=$(pur_disp_hcompile.oxx) $(call show_defs,$(cmd_hcompile.oxx))
bri_disp_strip = $(pur_disp_strip)
bri_disp_t_strip = $(pur_disp_t_strip)
bri_disp_ar = $(pur_disp_ar)
bri_disp_ranlib = $(pur_disp_ranlib)
bri_disp_ld = $(pur_disp_ld) $(call show_ldflags,$(cmd_ld))
bri_disp_ln = $(pur_disp_ln)
bri_disp_mkdir = $(pur_disp_mkdir)
bri_disp_gen = $(pur_disp_gen)
bri_disp_install = $(pur_disp_install)
bri_disp_unifdef = $(pur_disp_unifdef)
bri_disp_rm = $(pur_disp_rm)
esc=$(subst ','\'',$(1))
# ')
ver_disp_compile.cxx = echo '$(call esc,$(cmd_compile.cxx))'
ver_disp_compile.c = echo '$(call esc,$(cmd_compile.c))'
ver_disp_compile.ixx = echo '$(call esc,$(cmd_compile.ixx))'
ver_disp_compile.i = echo '$(call esc,$(cmd_compile.i))'
ver_disp_compile.sxx = echo '$(call esc,$(cmd_compile.sxx))'
ver_disp_compile.s = echo '$(call esc,$(cmd_compile.s))'
ver_disp_compile.u = echo '$(call esc,$(cmd_compile.u))'
ver_disp_compile.S = echo '$(call esc,$(cmd_compile.S))'
ver_disp_compile.uxx = echo '$(call esc,$(cmd_compile.uxx))'
ver_disp_compile.oxx = echo '$(call esc,$(cmd_compile.oxx))'
ver_disp_hcompile.u = echo '$(call esc,$(cmd_hcompile.u))'
ver_disp_hcompile.o = echo '$(call esc,$(cmd_hcompile.o))'
ver_disp_hcompile.uxx= echo '$(call esc,$(cmd_hcompile.uxx))'
ver_disp_hcompile.oxx= echo '$(call esc,$(cmd_hcompile.oxx))'
ver_disp_strip = echo '$(call esc,$(cmd_strip))'
ver_disp_t_strip = echo '$(call esc,$(cmd_t_strip))'
ver_disp_ar = echo '$(call esc,$(cmd_ar))'
ver_disp_ranlib = echo '$(call esc,$(cmd_ranlib))'
ver_disp_ld =
ver_disp_ln =
ver_disp_mkdir =
ver_disp_gen =
ver_disp_install =
ver_disp_unifdef = echo '$(call esc,$(cmd_unifdef))'
ver_disp_rm =
disp_compile.cxx = $($(DISP)_disp_compile.cxx)
disp_compile.c = $($(DISP)_disp_compile.c)
disp_compile.ixx = $($(DISP)_disp_compile.ixx)
disp_compile.i = $($(DISP)_disp_compile.i)
disp_compile.s = $($(DISP)_disp_compile.s)
disp_compile.sxx = $($(DISP)_disp_compile.sxx)
disp_compile.u = $($(DISP)_disp_compile.u)
disp_compile.S = $($(DISP)_disp_compile.S)
disp_compile.uxx = $($(DISP)_disp_compile.uxx)
disp_compile.oxx = $($(DISP)_disp_compile.oxx)
disp_hcompile.u = $($(DISP)_disp_hcompile.u)
disp_hcompile.o = $($(DISP)_disp_hcompile.o)
disp_hcompile.uxx= $($(DISP)_disp_hcompile.uxx)
disp_hcompile.oxx= $($(DISP)_disp_hcompile.oxx)
disp_strip = $($(DISP)_disp_strip)
disp_t_strip = $($(DISP)_disp_t_strip)
disp_ar = $($(DISP)_disp_ar)
disp_ranlib = $($(DISP)_disp_ranlib)
disp_ld = $($(DISP)_disp_ld)
disp_ln = $($(DISP)_disp_ln)
disp_mkdir = $($(DISP)_disp_mkdir)
disp_gen = $($(DISP)_disp_gen)
disp_install = $($(DISP)_disp_install)
disp_unifdef = $($(DISP)_disp_unifdef)
disp_rm = $($(DISP)_disp_rm)
any-prereq = $(filter-out $(PHONY),$?) $(filter-out $(PHONY) $(wildcard $^),$^)
# strip the top_builddir off everything to make the *string* idempotent for -C
dirify = $(subst $(top_builddir),,$(patsubst -L$(top_builddir)%,-L%,$(patsubst -I$(top_builddir)%,-I%,$(1))))
unwrapper = $(call dirify,$(subst $(call dirify,$(WRAPPER)),$(CXX) $(GEN_CFLAGS) $(GEN_CXXFLAGS) $(EH_CXXFLAGS),$(subst WRAPPER_INCLUDEDIR=,,$(subst WRAPPER_LIBDIR=,,$(1)))))
# True if not identical. Neither order nor whitespace nor identical flags
# matter.
compare_flags = \
$(strip $(filter-out $(call unwrapper,$(cmd_$(call variablify,$(call dirify,$(1))))), \
$(call unwrapper,$(cmd_$(call variablify,$(call dirify,$(@)))))) \
$(filter-out $(call unwrapper,$(cmd_$(call variablify,$(call dirify,$(@))))), \
$(call unwrapper,$(cmd_$(call variablify,$(call dirify,$(1)))))))
# Rebuild if any prerequisite, the used CC or flags changed.
# Previously used flags are stored in the corresponding .%.dep files
maybe_exec = \
$(if $(strip $(compare_flags) $(any-prereq)), \
@set -e; \
$(disp_$(1)); \
$(cmd_$(1)); \
echo 'cmd_$(call variablify,$(call dirify,$(@))) := $(call dirify,$(cmd_$(call variablify,$(call dirify,$(1)))))' >> $(dir $@).$(notdir $@).dep)
CFLAGS_gen.dep = -MT $@ -MD -MP -MF $(dir $@).$(notdir $@).dep
cmd_compile.c = $(CC) \
$(CFLAGS-$(suffix $@)) \
$(filter-out $(CFLAGS-OMIT-$(notdir $<)),$(CFLAGS-$(notdir $(<D)))) \
$(CFLAGS-$(subst $(top_srcdir),,$(dir $<))) \
$(CFLAGS-$(notdir $<)) \
$(CFLAGS-$(notdir $@)) \
$(CFLAGS_gen.dep) \
$(CFLAGS) \
-c $< -o $@
cmd_compile.i = $(cmd_compile.c:-c=-E -dD) $(UCLIBC_EXTRA_CPPFLAGS)
cmd_compile.s = $(cmd_compile.c:-c=-S)
cmd_compile.cxx.flags = \
$(filter-out $(CXXFLAGS-OMIT-$(notdir $<)),$(CXXFLAGS-$(notdir $(<D)))) \
$(CXXFLAGS-$(subst $(top_srcdir),,$(dir $<))) \
$(CXXFLAGS-$(notdir $<)) \
$(CXXFLAGS-$(notdir $@)) \
$(CXXFLAGS)
cmd_compile.cxx = $(WR_CXX) \
$(CXXFLAGS-$(suffix $@)) \
$(cmd_compile.cxx.flags) \
$(CFLAGS_gen.dep) \
-c $< -o $@
cmd_compile.ixx = $(cmd_compile.cxx:-c=-E -dD) $(CXXCPPFLAGS)
cmd_compile.sxx = $(cmd_compile.cxx:-c=-S)
cmd_compile.oxx = $(WR_CXX) \
$(CXXFLAGS-$(suffix $@)) \
$(cmd_compile.cxx.flags) \
$(CFLAGS_gen.dep) \
-c $< -o $@
cmd_compile.uxx = $(WR_CXX) \
$(cmd_compile.cxx.flags) \
$(CFLAGS_gen.dep) \
$^ $(LDFLAGS) $(LDFLAGS-$(@F)) $(LDFLAGS-y-$(@F)) \
$(LIBS-$(notdir $@)) $(LIBS-y) \
-o $@
cmd_compile.u = $(CC) $(CFLAGS_gen.dep) $(CFLAGS) $(CFLAGS-$(notdir $(^D))) $(CFLAGS-$(notdir $@)) $^ $(LIBS-$(notdir $@)) -o $@
cmd_compile.S = $(filter-out -std=gnu99, $(cmd_compile.c)) -D__ASSEMBLER__ $(ASFLAGS) $(ARCH_ASFLAGS) $(ASFLAGS-$(suffix $@)) $(ASFLAGS-$(notdir $<)) $(ASFLAGS-$(notdir $@))
cmd_hcompile.uxx = $(HOSTCXX) $(CFLAGS_gen.dep) $(HOSTCXXFLAGS) $(CXXFLAGS-$(notdir $(^D))) $(CXXFLAGS-$(notdir $@)) $^ $(HOSTLDFLAGS) $(LIBS-$(notdir $@)) -o $@
cmd_hcompile.oxx = $(HOSTCXX) $(CFLAGS_gen.dep) $(HOSTCXXFLAGS) $(HOSTCXXFLAGS-$(notdir $(^D))) $(HOSTCXXFLAGS-$(notdir $@)) -c $< -o $@
cmd_strip = $(STRIPTOOL) $(STRIP_FLAGS) $^
cmd_t_strip = $(STRIPTOOL) $(STRIP_FLAGS) $@
cmd_ar = $(AR) $(ARFLAGS) $@ $^
cmd_ranlib = $(RANLIB) $(RANLIBFLAGS) $@
define do_ln
@$(disp_ln)
$(Q)$(LN) -f -s
endef
define do_mkdir
@$(disp_mkdir)
$(Q)$(INSTALL) -d $@
endef
define do_rm
@$(disp_rm)
$(Q)$(RM)
endef
define do_awk
@$(disp_gen)
$(Q)$(AWK) -f
endef
define do_sed
@$(disp_gen)
$(Q)$(SED)
endef
compile.cxx = @$(call maybe_exec,compile.cxx)
compile.c = @$(call maybe_exec,compile.c)
compile.ixx = $(call maybe_exec,compile.ixx)
compile.i = $(call maybe_exec,compile.i)
compile.sxx = $(call maybe_exec,compile.sxx)
compile.s = $(call maybe_exec,compile.s)
compile.S = @$(call maybe_exec,compile.S)
compile.uxx = @$(call maybe_exec,compile.uxx)
compile.oxx = @$(call maybe_exec,compile.oxx)
do_strip = @$(disp_strip) ; $(cmd_strip)
do_t_strip = @$(disp_t_strip) ; $(cmd_t_strip)
do_unifdef = @$(disp_unifdef) ; $(cmd_unifdef)
hcompile.u = @$(disp_hcompile.u); $(cmd_hcompile.u)
hcompile.o = @$(disp_hcompile.o); $(cmd_hcompile.o)
hcompile.uxx= @$(call maybe_exec,hcompile.uxx)
hcompile.oxx= @$(call maybe_exec,hcompile.oxx)
define do_ar
@$(disp_ar) ; $(cmd_ar)
@$(disp_ranlib) ; $(cmd_ranlib)
endef
define compile.u
@$(disp_compile.u) ; $(cmd_compile.u)
@$(disp_t_strip)
endef
cmd_hcompile.u = $(HOSTCC) $(filter-out $(PHONY),$^) $(LIBS-$(notdir $@)) -o $@ $(HOSTLDFLAGS) $(HOSTLDFLAGS-$(notdir $(^D))) $(HOSTLDFLAGS-$(notdir $@)) $(HOSTCFLAGS) $(HOSTCFLAGS-$(notdir $(^D))) $(HOSTCFLAGS-$(notdir $@))
cmd_hcompile.o = $(HOSTCC) $(filter-out $(PHONY),$<) $(LIBS-$(notdir $@)) -c -o $@ $(HOSTCFLAGS) $(HOSTCFLAGS-$(notdir $(^D))) $(HOSTCFLAGS-$(notdir $@))
define link.so
$(Q)$(RM) $@ $@.$(2) $(1)
@$(disp_ld)
$(Q)$(CXX) $(cmd_compile.cxx.flags) \
$(LDFLAGS) \
$(LDFLAGS-$(@F)) \
$(LDFLAGS-y-$(@F)) \
-Wl,-soname=$(@F).$(2) \
-o $(1) $^ \
$(START_FILE-$(@F)) \
$(LIBS-$(@F)) $(call link.asneeded,$(LIBS-ASNEEDED-$(@F))) \
$(END_FILE-$(@F))
$(Q)$(LN) -sf $(notdir $(1)) $@.$(2)
$(Q)$(LN) -sf $(@F).$(2) $@
endef
$(top_builddir)%.o: $(top_srcdir)%.cpp FORCE ; $(compile.cxx)
$(top_builddir)%.o: $(top_srcdir)%.c FORCE ; $(compile.c)
$(top_builddir)%.o: $(top_srcdir)%.S FORCE ; $(compile.S)
$(top_builddir)%.o: $(top_srcdir)%.s FORCE ; $(compile.S)
$(top_builddir)%.i: $(top_srcdir)%.cpp FORCE ; $(compile.ixx)
$(top_builddir)%.i: $(top_srcdir)%.c FORCE ; $(compile.i)
$(top_builddir)%.i: $(top_srcdir)%.S FORCE ; $(compile.i)
$(top_builddir)%.s: $(top_srcdir)%.cpp FORCE ; $(compile.sxx)
$(top_builddir)%.s: $(top_srcdir)%.c FORCE ; $(compile.s)
$(top_builddir)%.s: $(top_srcdir)%.S FORCE ; $(compile.s)
#$(top_builddir)tests/%.o: $(top_srcdir)tests/%.cpp FORCE ; $(hcompile.oxx)
#$(top_builddir)tests/%: $(top_builddir)tests/%.o FORCE ; $(hcompile.uxx)
$(top_builddir)%.dep:
FORCE: ;
ifeq ($(HAVE_DOT_CONFIG),y)
$(DESTDIR)$(UCLIBCXX_RUNTIME_LIBDIR) $(DESTDIR)$(UCLIBCXX_RUNTIME_BINDIR) $(DESTDIR)$(UCLIBCXX_RUNTIME_INCLUDEDIR):
$(do_mkdir)
endif
+26
View File
@@ -0,0 +1,26 @@
Things TODO.
Write more tests. Try to test every function with at least two valid and
one invalid value. For templates test with at least two primitive
as well as one class data type.
Replace the IO stream library with an unbuffered version. This should be
both easier to maintain as well as result in smaller code.
Remember that pbackfail and similar functions must work properly
according to spec.
Change ostream code so that it uses fill/width properly
Clean up the list header - factor out common code of many of the function
to make everything smaller - maybe
Convert bitset code to a common code-base to factor out code. This should
cut down code size at the cost of additional performance overhead.
Clean up istream code so that a lot of the checking for stuff is put into
the sentry class.
Find out why utilities pair operator= isn't working correctly
slice_array: remove fill(), constify operator=
+6
View File
@@ -0,0 +1,6 @@
top_srcdir=../
top_builddir=../
all:
include $(top_srcdir)Rules.mak
include Makefile.in
include $(top_srcdir)Makefile.end
+57
View File
@@ -0,0 +1,57 @@
BIN_DIR := $(top_builddir)bin/
CLEAN_bin:
$(do_rm) $(WRAPPER) $(BIN_DIR)env_check
install-bin: $(WRAPPER) | $(DESTDIR)$(UCLIBCXX_RUNTIME_BINDIR)
@$(call disp_install,$(call dirify,$(WRAPPER)))
$(Q)$(INSTALL) -m 0755 $(WRAPPER) $(DESTDIR)$(UCLIBCXX_RUNTIME_BINDIR)
# Rebuild wrapper whenever any of these vars change
# Hardcoding these in the wrapper is arguably bad design but handy
cmd_bin_env_check = CXX="$(CXX)" GEN_CFLAGS="$(GEN_CFLAGS)" GEN_CXXFLAGS="$(GEN_CXXFLAGS)" EH_CXXFLAGS="$(EH_CXXFLAGS)" UCLIBCXX_RUNTIME_INCLUDEDIR="$(UCLIBCXX_RUNTIME_INCLUDEDIR)" UCLIBCXX_RUNTIME_LIBDIR="$(UCLIBCXX_RUNTIME_LIBDIR)"
manual.depends.dep += $(BIN_DIR)env_check
$(BIN_DIR)env_check: FORCE
@echo 'cmd_$(call variablify,$(call dirify,$(WRAPPER))) := $(cmd_bin_env_check)' > $@.new
@echo '' >> $@.new
@if cmp -s $@ $@.new ; then \
$(RM) $@.new ; \
else \
mv $@.new $@ ; \
$(RM) $(WRAPPER) ; \
fi
define do_wrapper
@$(disp_gen)
$(Q)echo '#!/bin/sh' > $@.tmp
$(Q)echo '' >> $@.tmp
$(Q)echo 'WRAPPER_INCLUDEDIR="$${WRAPPER_INCLUDEDIR:=-I$(UCLIBCXX_RUNTIME_INCLUDEDIR)}"' >> $@.tmp
$(Q)echo 'WRAPPER_LIBDIR="$${WRAPPER_LIBDIR:=-L$(UCLIBCXX_RUNTIME_LIBDIR)}"' >> $@.tmp
$(Q)echo '' >> $@.tmp
$(Q)echo 'WRAPPER_OPTIONS=""' >> $@.tmp
$(Q)echo 'WRAPPER_LIBS="$(strip $(LIBS))"' >> $@.tmp
$(Q)echo '' >> $@.tmp
$(Q)echo 'WRAPPER_INCLIB="Y"' >> $@.tmp
$(Q)echo 'for arg' >> $@.tmp
$(Q)echo 'do' >> $@.tmp
$(Q)echo ' case "$$arg" in' >> $@.tmp
$(Q)echo ' -c|-E|-S) WRAPPER_INCLIB="N" ;;' >> $@.tmp
$(Q)echo ' -static) [ "$$WRAPPER_LIBS" != "$(strip $(STATIC_LIBS))" ] && WRAPPER_LIBS="$(strip $(STATIC_LIBS))" ;;' >> $@.tmp
$(Q)echo ' esac' >> $@.tmp
$(Q)echo 'done' >> $@.tmp
$(Q)echo 'if [ "$$WRAPPER_INCLIB" = "Y" ]' >> $@.tmp
$(Q)echo 'then' >> $@.tmp
$(Q)echo ' WRAPPER_OPTIONS="$$WRAPPER_OPTIONS -nodefaultlibs $$WRAPPER_LIBDIR -l$(LNAME) $$WRAPPER_LIBS"' >> $@.tmp
$(Q)echo 'fi' >> $@.tmp
$(Q)echo '' >> $@.tmp
$(Q)echo '[ -n "$$V" ] && [ $$V -gt 1 ] && echo $(CXX) $(GEN_CFLAGS) $(GEN_CXXFLAGS) $(EH_CXXFLAGS) $$WRAPPER_INCLUDEDIR "$$@" $$WRAPPER_OPTIONS' >> $@.tmp
$(Q)echo 'exec $(CXX) $(GEN_CFLAGS) $(GEN_CXXFLAGS) $(EH_CXXFLAGS) $$WRAPPER_INCLUDEDIR "$$@" $$WRAPPER_OPTIONS' >> $@.tmp
$(Q)echo '' >> $@.tmp
$(Q)chmod 0755 $@.tmp
$(Q)mv $@.tmp $@
endef
$(WRAPPER) $(BIN_DIR)env_check: $(BIN_DIR)Makefile.in
$(WRAPPER): $(BIN_DIR)env_check
$(if $(strip $(call compare_flags,$<) $(any-prereq)),$(do_wrapper))
+2
View File
@@ -0,0 +1,2 @@
# This file is empty to let people select their own
# build options however they like....
+380
View File
@@ -0,0 +1,380 @@
#
# For a description of the syntax of this configuration file,
# see extra/config/Kconfig-language.txt
#
mainmenu "uClibc++ C++ Library Configuration"
menu "Target Features and Options"
source "extra/Configs/Config.in.arch"
endmenu
menu "String and I/O Stream Support"
config UCLIBCXX_HAS_WCHAR
bool "Wide Character Support (Not Currently Supported)"
default n
help
Answer Y to enable wide character support. This will make
uClibc++ much larger. It also requires support from the underlying
C library. Note that this code is currently unmaintained and may
not work.
Most people will answer N.
config UCLIBCXX_IOSTREAM_BUFSIZE
int "I/O stream buffer size"
default 32
help
Please select a value for BUFSIZE. This will be used by the
iostream subsystem as the default buffer size for a file, and
affects cin, cout, fstream, etc. This is independent of the
buffering provided by the underlying C library. This must be a
multiple of 2.
NOTE: Setting this to '0' will disable buffering completely.
This may break applications which extend the I/O stream
subsystem, but those are few and far between. Disabling will
result in both smaller and very likely faster code.
THIS DOESN'T WORK YET - FIXME
config UCLIBCXX_HAS_LFS
bool "Large File Support"
default y
depends on !CONFIG_CRIS
help
If you wish to build uClibc++ with support for accessing large
files (i.e. files greater then 2 GiB) then answer Y. Do not enable
this if you are using an older Linux kernel (2.0.x) that lacks
large file support. Enabling this option will increase the size
of uClibc++.
THIS DOESN'T WORK YET - FIXME
config UCLIBCXX_SUPPORT_CDIR
bool "Enable support for standard streams like cin and cout"
default y
help
Answer Y to enable the framework for cin, cout, cerr and clog as well
as their wide character versions wcin, wcout, wcerr and wclog. Note
that each of those can be manually altered at a later point.
Disabling this option will result in space savings as well as
performance improvements as some startup code can be eliminated.
This is a widely used feature. Most people will answer Y.
config UCLIBCXX_SUPPORT_CIN
bool "Enable cin"
default y
depends on UCLIBCXX_SUPPORT_CDIR
help
Answer y to have support for std::cin. This is a commonly used
feature, so you will probably want to say yes here.
config UCLIBCXX_SUPPORT_COUT
bool "Enable cout"
default y
depends on UCLIBCXX_SUPPORT_CDIR
help
Answer y to have support for std::cout. This is a commonly used
feature, so you will probably want to say yes here.
config UCLIBCXX_SUPPORT_CERR
bool "Enable cerr"
default y
depends on UCLIBCXX_SUPPORT_CDIR
help
Answer y to have support for std::cerr. This is a commonly used
feature, so you will probably want to say yes here.
config UCLIBCXX_SUPPORT_CLOG
bool "Enable clog"
default n
depends on UCLIBCXX_SUPPORT_CDIR
help
Answer y to have support for std::clog. This stream is the same as
std::cerr except that it is buffered, where cerr is not.
config UCLIBCXX_SUPPORT_WCIN
bool "Enable wcin"
default y
depends on UCLIBCXX_SUPPORT_CDIR
depends on UCLIBCXX_HAS_WCHAR
help
Answer y to have support for std::wcin. This is the wide-character
version of cin. You will probably want to say yes here.
config UCLIBCXX_SUPPORT_WCOUT
bool "Enable wcout"
default y
depends on UCLIBCXX_SUPPORT_CDIR
depends on UCLIBCXX_HAS_WCHAR
help
Answer y to have support for std::wcout. This is the wide-character
version of cout. You will probably want to say yes here.
config UCLIBCXX_SUPPORT_WCERR
bool "Enable wcerr"
default y
depends on UCLIBCXX_SUPPORT_CDIR
depends on UCLIBCXX_HAS_WCHAR
help
Answer y to have support for std::wcerr. This is the wide-character
version of cerr. You will probably want to say yes here.
config UCLIBCXX_SUPPORT_WCLOG
bool "Enable wclog"
default n
depends on UCLIBCXX_SUPPORT_CDIR
depends on UCLIBCXX_HAS_WCHAR
help
Answer y to have support for std::wclog. This is the wide-character
version of clog.
endmenu
menu "STL and Code Expansion"
config UCLIBCXX_STL_BUFFER_SIZE
int "STL buffer size"
default 32
help
Much of the STL code relies on allocating memory for a number
of objects. For objects like vectors which must reallocate
all of their memory when resizing, aquiring a few extra
objects-worth can provide a dramatic performance improvement.
This specifies the number of spare objects allocated.
NOTE: This number must be at least 4. Default: 32
config UCLIBCXX_CODE_EXPANSION
bool "Template code expansion"
default y
help
Most of the code in the C++ standard library is in the form of
templates which are compiled and linked into each executable
on demand. Answering 'Y' here will allow you to select a
number of templates to pre-expand for certain data types so
that the code is stored in the library instead of the
executable.
Almost everybody will want to answer Y
config UCLIBCXX_EXPAND_CONSTRUCTORS_DESTRUCTORS
bool "Expand constructors and destructors"
default y
depends on UCLIBCXX_CODE_EXPANSION
help
Some compilers will produce warnings or errors if some
techniques are used for code expansion (notably old versions
of gcc). Say yes to minimize the size of compiled
applications. Say no to avoid these errors and warnings.
You should say Y.
config UCLIBCXX_EXPAND_STRING_CHAR
bool "Expand std::basic_string for <char>"
default y
depends on UCLIBCXX_CODE_EXPANSION
help
If you use std::string at all, you will want to answer Y here.
The largest portions of the code for basic_string will be
expanded and placed into the library, shrinking executables.
You should only say N if you don't use strings at all.
config UCLIBCXX_EXPAND_VECTOR_BASIC
bool "Expand std::vector for basic data types"
default y
depends on UCLIBCXX_CODE_EXPANSION
help
std::basic string inherits from vector, so saying Y here is
always a good idea. This will expand std::vector for all
primitive data types, shrinking executables.
config UCLIBCXX_EXPAND_IOS_CHAR
bool "Expand ios core code for char"
default y
depends on UCLIBCXX_CODE_EXPANSION
help
Much of the STL code uses core ios classes. These classes,
though small, are used frequently and will use a lot of space
in your executibles. Expanding this code will save space.
config UCLIBCXX_EXPAND_STREAMBUF_CHAR
bool "Expand std::streambuf for char"
default y
depends on UCLIBCXX_CODE_EXPANSION
help
std::streambuf is used extensively throughout the C++ library.
Expanding this code will shrink the size of your executables.
config UCLIBCXX_EXPAND_ISTREAM_CHAR
bool "Expand std::istream for <char>"
default y
depends on UCLIBCXX_CODE_EXPANSION
help
If you use istream or it's derivatives, including fstream
and iostream with characters, you will want to say yes here
to expand the code and place it into the library.
config UCLIBCXX_EXPAND_OSTREAM_CHAR
bool "Expand std::ostream for <char>"
default y
depends on UCLIBCXX_CODE_EXPANSION
help
If you use any ostream derivative, including fstream and
iostream with characters, you will want to say yes here to
expand the code and place it into the library.
config UCLIBCXX_EXPAND_FSTREAM_CHAR
bool "Expand std::fstream for <char>"
default y
depends on UCLIBCXX_CODE_EXPANSION
help
If you use any fstream derivative, you will want to say
yes here to expand the code and place it into the library.
config UCLIBCXX_EXPAND_SSTREAM_CHAR
bool "Expand std::sstream for <char>"
default y
depends on UCLIBCXX_CODE_EXPANSION
help
If you use any stringstream derivative, you will want to say
yes here to expand the code and place it into the library.
endmenu
menu "Library Installation Options"
config UCLIBCXX_RUNTIME_PREFIX
string "uClibc++ runtime prefix directory"
default "/usr/uClibc++"
help
UCLIBCXX_RUNTIME_PREFIX is the directory into which the uClibc++
runtime libraries will be installed.
For a typical target system this should be set to "/usr", so
that 'make install' will install libuClibc++.so into
/usr/lib.
config UCLIBCXX_RUNTIME_INCLUDE_SUBDIR
string "uClibc++ header file subdirectory"
default "/include"
help
UCLIBCXX_RUNTIME_INCLUDE_SUBDIR is the subdirectory of
UCLIBCXX_RUNTIME_PREFIX in which the header files for the library
are installed. If you set the prefix to /usr, set this to /include
to install the headers into /include
config UCLIBCXX_RUNTIME_LIB_SUBDIR
string "uClibc++ library subdirectory"
default "/lib"
help
UCLIBCXX_RUNTIME_LIB_SUBDIR is the subdirectory of
UCLIBCXX_RUNTIME_PREFIX in which the library binaries are installed.
If you set the prefix to /usr, set this to /lib to install the
headers into /lib
config UCLIBCXX_RUNTIME_BIN_SUBDIR
string "uClibc++ application file subdirectory"
default "/bin"
help
UCLIBCXX_RUNTIME_BIN_SUBDIR is the subdirectory of
UCLIBCXX_RUNTIME_PREFIX in which the binary applicatons for the
library are installed - right now this is just the g++ wrapper. If
you set the prefix to /usr, set this to /bin to install the
applications headers into /bin
config UCLIBCXX_EXCEPTION_SUPPORT
bool "Exception and RTTI support"
default y
help
This option enables exception support in the library.
Exception support is part of the C++ standard, and as such
should almost always be enabled. This increases the size of
the library.
RTTI support is used for exceptions as well as operators such
as dynamic_cast<>() and others.
Using this increases the size of the library.
Most people will answer Y.
config IMPORT_LIBSUP
bool "Import libsupc++.a"
depends on UCLIBCXX_EXCEPTION_SUPPORT
default y
help
libsupc++.a is a file which comes with the g++ compiler and
provides all of the language support features required for C++
programs to run, such as exception support, rtti support, as well
as support for the C++ ABI. This is largely compiler dependent.
Since the library is statically compiled, this code would normally
need to be compiled into each executable. However, it can also be
imported into this library and shared. uClibc++ imports this code.
There is no point in importing this if you disable exception and
rtti support above.
You should say yes.
config IMPORT_LIBGCC_EH
bool "Import libgcc_eh.a"
depends on UCLIBCXX_EXCEPTION_SUPPORT
default y
help
libgcc_eh.a is a file which comes with the g++ compiler and
provides unwind support for static apps (the dynamically linked
apps use libgcc_s.so instead).
This code is largely compiler dependent.
Currently for gcc-4.0.0 it is imported only into libuClibc++.a, the
shared library will depend on libgcc_s.so.
config BUILD_STATIC_LIB
bool "Build static library"
default y
help
By default, libuClibc++ is built only as a shared library. Choosing
'y' here will also build a static library which can be used to build
statically linked executables.
There is little reason to say 'no' here.
You should say yes.
config BUILD_ONLY_STATIC_LIB
bool "Build only static library"
depends on BUILD_STATIC_LIB
default n
help
By default, libuClibc++ is built as a shared library. Choosing
'y' here will disable building the shared library. You should
only choose 'y' here if you are on a system which does not
support shared libraries.
You should say no.
config DODEBUG
bool "Build uClibc++ with debugging symbols"
default n
help
Say Y here if you wish to compile uClibc++ with debugging symbols.
This will allow you to use a debugger to examine uClibc++ internals
while applications are running. This increases the size of the
library considerably and should only be used when doing development.
If you are doing development and want to debug uClibc++, answer Y.
Otherwise, answer N.
endmenu
+54
View File
@@ -0,0 +1,54 @@
#
# For a description of the syntax of this configuration file,
# see extra/config/Kconfig-language.txt
#
config UCLIBCXX_HAS_FLOATS
bool "Enable floating point number support"
default y
help
This option allows you to entirely omit all floating point number
support from uClibc++. This will cause floating point functions like
strtod() to be omitted from uClibc++. Other floating point functions,
such as printf() and scanf() will still be included in the library,
but will not contain support for floating point numbers.
Answering N to this option can reduce the size of uClibc++.
Most people will answer Y.
THIS DOESN'T DO ANYTHING YET - FIXME
config UCLIBCXX_HAS_LONG_DOUBLE
bool "Math operations with long double"
depends on UCLIBCXX_HAS_FLOATS
default y
help
Answer Y to enable math support for long double types.
It requires support from the underlying C library.
config UCLIBCXX_HAS_TLS
bool "Toolchain supports Thread-Local Storage"
default y
help
Answer Y if your toolchain supports Thread-Local Storage. This should
work with GCC versions 3.4 and greater, depending on platform.
Answering no will use non thread-safe exception handling.
config UCLIBCXX_WARNINGS
string "Compiler Warnings"
default "-Wall"
help
Set this to the set of gcc warnings you wish to see while compiling.
config BUILD_EXTRA_LIBRARIES
string "Extra Library Link Flags"
default ""
help
Set this to link against extra libraries when building the library.
This is useful if you need to link in POSIX threads or TLS support.
config HAVE_DOT_CONFIG
bool
default y
+28
View File
@@ -0,0 +1,28 @@
# Makefile for uClibc
#
# Copyright (C) 2000 by Lineo, inc.
# Copyright (C) 2000,2001 Erik Andersen <andersen@uclibc.org>
#
# This program is free software; you can redistribute it and/or modify it under
# the terms of the GNU Library 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 Library General Public License for more
# details.
#
# You should have received a copy of the GNU Library 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
#
# Derived in part from the Linux-8086 C library, the GNU C Library, and several
# other sundry sources. Files within this library are copyright by their
# respective copyright holders.
top_srcdir=../
top_builddir=../
all:
include $(top_srcdir)Rules.mak
include Makefile.in
+3
View File
@@ -0,0 +1,3 @@
EXTRA_DIR := $(top_srcdir)extra/
DISTCLEAN_extra: $(PHONY)
$(Q)$(MAKE) -C $(EXTRA_DIR)config CLEAN_extra/config
+19
View File
@@ -0,0 +1,19 @@
#
# Generated files
#
config*
lex.*.c
*.tab.c
*.tab.h
zconf.hash.c
*.moc
lkc_defs.h
#
# configuration programs
#
conf
mconf
qconf
gconf
kxgettext
+282
View File
@@ -0,0 +1,282 @@
Introduction
------------
The configuration database is collection of configuration options
organized in a tree structure:
+- Code maturity level options
| +- Prompt for development and/or incomplete code/drivers
+- General setup
| +- Networking support
| +- System V IPC
| +- BSD Process Accounting
| +- Sysctl support
+- Loadable module support
| +- Enable loadable module support
| +- Set version information on all module symbols
| +- Kernel module loader
+- ...
Every entry has its own dependencies. These dependencies are used
to determine the visibility of an entry. Any child entry is only
visible if its parent entry is also visible.
Menu entries
------------
Most entries define a config option, all other entries help to organize
them. A single configuration option is defined like this:
config MODVERSIONS
bool "Set version information on all module symbols"
depends MODULES
help
Usually, modules have to be recompiled whenever you switch to a new
kernel. ...
Every line starts with a key word and can be followed by multiple
arguments. "config" starts a new config entry. The following lines
define attributes for this config option. Attributes can be the type of
the config option, input prompt, dependencies, help text and default
values. A config option can be defined multiple times with the same
name, but every definition can have only a single input prompt and the
type must not conflict.
Menu attributes
---------------
A menu entry can have a number of attributes. Not all of them are
applicable everywhere (see syntax).
- type definition: "bool"/"tristate"/"string"/"hex"/"integer"
Every config option must have a type. There are only two basic types:
tristate and string, the other types are based on these two. The type
definition optionally accepts an input prompt, so these two examples
are equivalent:
bool "Networking support"
and
bool
prompt "Networking support"
- input prompt: "prompt" <prompt> ["if" <expr>]
Every menu entry can have at most one prompt, which is used to display
to the user. Optionally dependencies only for this prompt can be added
with "if".
- default value: "default" <expr> ["if" <expr>]
A config option can have any number of default values. If multiple
default values are visible, only the first defined one is active.
Default values are not limited to the menu entry, where they are
defined, this means the default can be defined somewhere else or be
overridden by an earlier definition.
The default value is only assigned to the config symbol if no other
value was set by the user (via the input prompt above). If an input
prompt is visible the default value is presented to the user and can
be overridden by him.
Optionally dependencies only for this default value can be added with
"if".
- dependencies: "depends on"/"requires" <expr>
This defines a dependency for this menu entry. If multiple
dependencies are defined they are connected with '&&'. Dependencies
are applied to all other options within this menu entry (which also
accept an "if" expression), so these two examples are equivalent:
bool "foo" if BAR
default y if BAR
and
depends on BAR
bool "foo"
default y
- reverse dependencies: "select" <symbol> ["if" <expr>]
While normal dependencies reduce the upper limit of a symbol (see
below), reverse dependencies can be used to force a lower limit of
another symbol. The value of the current menu symbol is used as the
minimal value <symbol> can be set to. If <symbol> is selected multiple
times, the limit is set to the largest selection.
Reverse dependencies can only be used with boolean or tristate
symbols.
- numerical ranges: "range" <symbol> <symbol> ["if" <expr>]
This allows to limit the range of possible input values for integer
and hex symbols. The user can only input a value which is larger than
or equal to the first symbol and smaller than or equal to the second
symbol.
- help text: "help" or "---help---"
This defines a help text. The end of the help text is determined by
the indentation level, this means it ends at the first line which has
a smaller indentation than the first line of the help text.
"---help---" and "help" do not differ in behaviour, "---help---" is
used to help visually seperate configuration logic from help within
the file as an aid to developers.
Menu dependencies
-----------------
Dependencies define the visibility of a menu entry and can also reduce
the input range of tristate symbols. The tristate logic used in the
expressions uses one more state than normal boolean logic to express the
module state. Dependency expressions have the following syntax:
<expr> ::= <symbol> (1)
<symbol> '=' <symbol> (2)
<symbol> '!=' <symbol> (3)
'(' <expr> ')' (4)
'!' <expr> (5)
<expr> '&&' <expr> (6)
<expr> '||' <expr> (7)
Expressions are listed in decreasing order of precedence.
(1) Convert the symbol into an expression. Boolean and tristate symbols
are simply converted into the respective expression values. All
other symbol types result in 'n'.
(2) If the values of both symbols are equal, it returns 'y',
otherwise 'n'.
(3) If the values of both symbols are equal, it returns 'n',
otherwise 'y'.
(4) Returns the value of the expression. Used to override precedence.
(5) Returns the result of (2-/expr/).
(6) Returns the result of max(/expr/, /expr/).
(7) Returns the result of min(/expr/, /expr/).
An expression can have a value of 'n', 'm' or 'y' (or 0, 1, 2
respectively for calculations). A menu entry becomes visible when it's
expression evaluates to 'm' or 'y'.
There are two types of symbols: constant and nonconstant symbols.
Nonconstant symbols are the most common ones and are defined with the
'config' statement. Nonconstant symbols consist entirely of alphanumeric
characters or underscores.
Constant symbols are only part of expressions. Constant symbols are
always surrounded by single or double quotes. Within the quote any
other character is allowed and the quotes can be escaped using '\'.
Menu structure
--------------
The position of a menu entry in the tree is determined in two ways. First
it can be specified explicitly:
menu "Network device support"
depends NET
config NETDEVICES
...
endmenu
All entries within the "menu" ... "endmenu" block become a submenu of
"Network device support". All subentries inherit the dependencies from
the menu entry, e.g. this means the dependency "NET" is added to the
dependency list of the config option NETDEVICES.
The other way to generate the menu structure is done by analyzing the
dependencies. If a menu entry somehow depends on the previous entry, it
can be made a submenu of it. First, the previous (parent) symbol must
be part of the dependency list and then one of these two conditions
must be true:
- the child entry must become invisible, if the parent is set to 'n'
- the child entry must only be visible, if the parent is visible
config MODULES
bool "Enable loadable module support"
config MODVERSIONS
bool "Set version information on all module symbols"
depends MODULES
comment "module support disabled"
depends !MODULES
MODVERSIONS directly depends on MODULES, this means it's only visible if
MODULES is different from 'n'. The comment on the other hand is always
visible when MODULES is visible (the (empty) dependency of MODULES is
also part of the comment dependencies).
Kconfig syntax
--------------
The configuration file describes a series of menu entries, where every
line starts with a keyword (except help texts). The following keywords
end a menu entry:
- config
- menuconfig
- choice/endchoice
- comment
- menu/endmenu
- if/endif
- source
The first five also start the definition of a menu entry.
config:
"config" <symbol>
<config options>
This defines a config symbol <symbol> and accepts any of above
attributes as options.
menuconfig:
"menuconfig" <symbol>
<config options>
This is similiar to the simple config entry above, but it also gives a
hint to front ends, that all suboptions should be displayed as a
separate list of options.
choices:
"choice"
<choice options>
<choice block>
"endchoice"
This defines a choice group and accepts any of above attributes as
options. A choice can only be of type bool or tristate, while a boolean
choice only allows a single config entry to be selected, a tristate
choice also allows any number of config entries to be set to 'm'. This
can be used if multiple drivers for a single hardware exists and only a
single driver can be compiled/loaded into the kernel, but all drivers
can be compiled as modules.
A choice accepts another option "optional", which allows to set the
choice to 'n' and no entry needs to be selected.
comment:
"comment" <prompt>
<comment options>
This defines a comment which is displayed to the user during the
configuration process and is also echoed to the output files. The only
possible options are dependencies.
menu:
"menu" <prompt>
<menu options>
<menu block>
"endmenu"
This defines a menu block, see "Menu structure" above for more
information. The only possible options are dependencies.
if:
"if" <expr>
<if block>
"endif"
This defines an if block. The dependency expression <expr> is appended
to all enclosed menu entries.
source:
"source" <prompt>
This reads the specified configuration file. This file is always parsed.
+128
View File
@@ -0,0 +1,128 @@
# Makefile for uClibc
#
# Copyright (C) 2002 Erik Andersen <andersen@codepoet.org>
#
# This program is free software; you can redistribute it and/or modify it under
# the terms of the GNU Library 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 Library General Public License for more
# details.
#
# You should have received a copy of the GNU Library 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
top_srcdir=../../
include $(top_srcdir)Rules.mak
all: ncurses conf mconf
LIBS = -lncurses
ifeq (/usr/include/ncursesw/ncurses.h, $(wildcard /usr/include/ncursesw/ncurses.h))
HOSTNCURSES += -I/usr/include/ncursesw -DCURSES_LOC="<ncurses.h>"
LIBS = -lncursesw
else
ifeq (/usr/include/ncurses/ncurses.h, $(wildcard /usr/include/ncurses/ncurses.h))
HOSTNCURSES += -I/usr/include/ncurses -DCURSES_LOC="<ncurses.h>"
else
ifeq (/usr/include/ncurses/curses.h, $(wildcard /usr/include/ncurses/curses.h))
HOSTNCURSES += -I/usr/include/ncurses -DCURSES_LOC="<ncurses/curses.h>"
else
ifeq (/usr/local/include/ncurses/ncurses.h, $(wildcard /usr/local/include/ncurses/ncurses.h))
HOSTCFLAGS += -I/usr/local/include/ncurses -DCURSES_LOC="<ncurses.h>"
else
ifeq (/usr/local/include/ncurses/curses.h, $(wildcard /usr/local/include/ncurses/curses.h))
HOSTCFLAGS += -I/usr/local/include/ncurses -DCURSES_LOC="<ncurses/curses.h>"
else
ifeq (/usr/include/ncurses.h, $(wildcard /usr/include/ncurses.h))
HOSTNCURSES += -DCURSES_LOC="<ncurses.h>"
else
HOSTNCURSES += -DCURSES_LOC="<curses.h>"
endif
endif
endif
endif
endif
endif
CONF_SRC =conf.c
MCONF_SRC =mconf.c checklist.c menubox.c textbox.c yesno.c inputbox.c util.c msgbox.c
SHARED_SRC=zconf.tab.c
SHARED_DEPS:=lkc.h lkc_proto.h lkc_defs.h expr.h zconf.tab.h
CONF_OBJS =$(patsubst %.c,%.o, $(CONF_SRC))
MCONF_OBJS=$(patsubst %.c,%.o, $(MCONF_SRC))
SHARED_OBJS=$(patsubst %.c,%.o, $(SHARED_SRC))
conf: $(CONF_OBJS) $(SHARED_OBJS)
$(HOSTCC) $(NATIVE_LDFLAGS) $^ -o $@
mconf: $(MCONF_OBJS) $(SHARED_OBJS)
$(HOSTCC) $(NATIVE_LDFLAGS) $^ -o $@ $(LIBS)
$(CONF_OBJS): %.o : %.c $(SHARED_DEPS)
$(HOSTCC) $(HOSTCFLAGS) -I. -c $< -o $@
$(MCONF_OBJS): %.o : %.c $(SHARED_DEPS)
$(HOSTCC) $(HOSTCFLAGS) $(HOSTNCURSES) -I. -c $< -o $@
lkc_defs.h: lkc_proto.h
@sed < $< > $@ 's/P(\([^,]*\),.*/#define \1 (\*\1_p)/'
###
# The following requires flex/bison
# By default we use the _shipped versions, uncomment the
# following line if you are modifying the flex/bison src.
#LKC_GENPARSER := 1
ifdef LKC_GENPARSER
%.tab.c %.tab.h: %.y
bison -t -d -v -b $* -p $(notdir $*) $<
lex.%.c: %.l
flex -P$(notdir $*) -o$@ $<
else
lex.zconf.o: lex.zconf.c $(SHARED_DEPS)
$(HOSTCC) $(HOSTCFLAGS) -I. -c $< -o $@
lex.zconf.c: lex.zconf.c_shipped
cp lex.zconf.c_shipped lex.zconf.c
zconf.tab.o: zconf.tab.c lex.zconf.c confdata.c expr.c symbol.c menu.c $(SHARED_DEPS)
$(HOSTCC) $(HOSTCFLAGS) -I. -c $< -o $@
zconf.tab.c: zconf.tab.c_shipped
cp zconf.tab.c_shipped zconf.tab.c
zconf.tab.h: zconf.tab.h_shipped
cp zconf.tab.h_shipped zconf.tab.h
endif
.PHONY: ncurses
ncurses:
@echo "int main() {return 0;}" > lxtemp.c
@if $(HOSTCC) lxtemp.c $(LIBS) ; then \
$(RM) lxtemp.c a.out; \
else \
$(RM) lxtemp.c; \
echo -e "\007" ;\
echo ">> Unable to find the Ncurses libraries." ;\
echo ">>" ;\
echo ">> You must have Ncurses installed in order" ;\
echo ">> to use 'make menuconfig'" ;\
echo ">>" ;\
echo ">> Maybe you want to try 'make config', which" ;\
echo ">> doesn't depend on the Ncurses libraries." ;\
echo ;\
exit 1 ;\
fi
CLEAN_extra/config:
$(do_rm) *.o *~ core $(TARGETS) $(MCONF_OBJS) $(CONF_OBJS) \
conf mconf zconf.tab.c zconf.tab.h lex.zconf.c lkc_defs.h
+363
View File
@@ -0,0 +1,363 @@
/*
* checklist.c -- implements the checklist box
*
* ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk)
* Stuart Herbert - S.Herbert@sheffield.ac.uk: radiolist extension
* Alessandro Rubini - rubini@ipvvis.unipv.it: merged the two
* MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcap@cfw.com)
*
* 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., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include "dialog.h"
static int list_width, check_x, item_x, checkflag;
/*
* Print list item
*/
static void
print_item (WINDOW * win, const char *item, int status,
int choice, int selected)
{
int i;
/* Clear 'residue' of last item */
wattrset (win, menubox_attr);
wmove (win, choice, 0);
for (i = 0; i < list_width; i++)
waddch (win, ' ');
wmove (win, choice, check_x);
wattrset (win, selected ? check_selected_attr : check_attr);
if (checkflag == FLAG_CHECK)
wprintw (win, "[%c]", status ? 'X' : ' ');
else
wprintw (win, "(%c)", status ? 'X' : ' ');
wattrset (win, selected ? tag_selected_attr : tag_attr);
mvwaddch(win, choice, item_x, item[0]);
wattrset (win, selected ? item_selected_attr : item_attr);
waddstr (win, (char *)item+1);
if (selected) {
wmove (win, choice, check_x+1);
wrefresh (win);
}
}
/*
* Print the scroll indicators.
*/
static void
print_arrows (WINDOW * win, int choice, int item_no, int scroll,
int y, int x, int height)
{
wmove(win, y, x);
if (scroll > 0) {
wattrset (win, uarrow_attr);
waddch (win, ACS_UARROW);
waddstr (win, "(-)");
}
else {
wattrset (win, menubox_attr);
waddch (win, ACS_HLINE);
waddch (win, ACS_HLINE);
waddch (win, ACS_HLINE);
waddch (win, ACS_HLINE);
}
y = y + height + 1;
wmove(win, y, x);
if ((height < item_no) && (scroll + choice < item_no - 1)) {
wattrset (win, darrow_attr);
waddch (win, ACS_DARROW);
waddstr (win, "(+)");
}
else {
wattrset (win, menubox_border_attr);
waddch (win, ACS_HLINE);
waddch (win, ACS_HLINE);
waddch (win, ACS_HLINE);
waddch (win, ACS_HLINE);
}
}
/*
* Display the termination buttons
*/
static void
print_buttons( WINDOW *dialog, int height, int width, int selected)
{
int x = width / 2 - 11;
int y = height - 2;
print_button (dialog, "Select", y, x, selected == 0);
print_button (dialog, " Help ", y, x + 14, selected == 1);
wmove(dialog, y, x+1 + 14*selected);
wrefresh (dialog);
}
/*
* Display a dialog box with a list of options that can be turned on or off
* The `flag' parameter is used to select between radiolist and checklist.
*/
int
dialog_checklist (const char *title, const char *prompt, int height, int width,
int list_height, int item_no, struct dialog_list_item ** items,
int flag)
{
int i, x, y, box_x, box_y;
int key = 0, button = 0, choice = 0, scroll = 0, max_choice, *status;
WINDOW *dialog, *list;
checkflag = flag;
/* Allocate space for storing item on/off status */
if ((status = malloc (sizeof (int) * item_no)) == NULL) {
endwin ();
fprintf (stderr,
"\nCan't allocate memory in dialog_checklist().\n");
exit (-1);
}
/* Initializes status */
for (i = 0; i < item_no; i++) {
status[i] = items[i]->selected;
if (!choice && status[i])
choice = i;
}
max_choice = MIN (list_height, item_no);
/* center dialog box on screen */
x = (COLS - width) / 2;
y = (LINES - height) / 2;
draw_shadow (stdscr, y, x, height, width);
dialog = newwin (height, width, y, x);
keypad (dialog, TRUE);
draw_box (dialog, 0, 0, height, width, dialog_attr, border_attr);
wattrset (dialog, border_attr);
mvwaddch (dialog, height-3, 0, ACS_LTEE);
for (i = 0; i < width - 2; i++)
waddch (dialog, ACS_HLINE);
wattrset (dialog, dialog_attr);
waddch (dialog, ACS_RTEE);
if (title != NULL && strlen(title) >= width-2 ) {
/* truncate long title -- mec */
char * title2 = malloc(width-2+1);
memcpy( title2, title, width-2 );
title2[width-2] = '\0';
title = title2;
}
if (title != NULL) {
wattrset (dialog, title_attr);
mvwaddch (dialog, 0, (width - strlen(title))/2 - 1, ' ');
waddstr (dialog, (char *)title);
waddch (dialog, ' ');
}
wattrset (dialog, dialog_attr);
print_autowrap (dialog, prompt, width - 2, 1, 3);
list_width = width - 6;
box_y = height - list_height - 5;
box_x = (width - list_width) / 2 - 1;
/* create new window for the list */
list = subwin (dialog, list_height, list_width, y+box_y+1, x+box_x+1);
keypad (list, TRUE);
/* draw a box around the list items */
draw_box (dialog, box_y, box_x, list_height + 2, list_width + 2,
menubox_border_attr, menubox_attr);
/* Find length of longest item in order to center checklist */
check_x = 0;
for (i = 0; i < item_no; i++)
check_x = MAX (check_x, + strlen (items[i]->name) + 4);
check_x = (list_width - check_x) / 2;
item_x = check_x + 4;
if (choice >= list_height) {
scroll = choice - list_height + 1;
choice -= scroll;
}
/* Print the list */
for (i = 0; i < max_choice; i++) {
print_item (list, items[scroll + i]->name,
status[i+scroll], i, i == choice);
}
print_arrows(dialog, choice, item_no, scroll,
box_y, box_x + check_x + 5, list_height);
print_buttons(dialog, height, width, 0);
wnoutrefresh (list);
wnoutrefresh (dialog);
doupdate ();
while (key != ESC) {
key = wgetch (dialog);
for (i = 0; i < max_choice; i++)
if (toupper(key) == toupper(items[scroll + i]->name[0]))
break;
if ( i < max_choice || key == KEY_UP || key == KEY_DOWN ||
key == '+' || key == '-' ) {
if (key == KEY_UP || key == '-') {
if (!choice) {
if (!scroll)
continue;
/* Scroll list down */
if (list_height > 1) {
/* De-highlight current first item */
print_item (list, items[scroll]->name,
status[scroll], 0, FALSE);
scrollok (list, TRUE);
wscrl (list, -1);
scrollok (list, FALSE);
}
scroll--;
print_item (list, items[scroll]->name,
status[scroll], 0, TRUE);
wnoutrefresh (list);
print_arrows(dialog, choice, item_no, scroll,
box_y, box_x + check_x + 5, list_height);
wrefresh (dialog);
continue; /* wait for another key press */
} else
i = choice - 1;
} else if (key == KEY_DOWN || key == '+') {
if (choice == max_choice - 1) {
if (scroll + choice >= item_no - 1)
continue;
/* Scroll list up */
if (list_height > 1) {
/* De-highlight current last item before scrolling up */
print_item (list, items[scroll + max_choice - 1]->name,
status[scroll + max_choice - 1],
max_choice - 1, FALSE);
scrollok (list, TRUE);
scroll (list);
scrollok (list, FALSE);
}
scroll++;
print_item (list, items[scroll + max_choice - 1]->name,
status[scroll + max_choice - 1],
max_choice - 1, TRUE);
wnoutrefresh (list);
print_arrows(dialog, choice, item_no, scroll,
box_y, box_x + check_x + 5, list_height);
wrefresh (dialog);
continue; /* wait for another key press */
} else
i = choice + 1;
}
if (i != choice) {
/* De-highlight current item */
print_item (list, items[scroll + choice]->name,
status[scroll + choice], choice, FALSE);
/* Highlight new item */
choice = i;
print_item (list, items[scroll + choice]->name,
status[scroll + choice], choice, TRUE);
wnoutrefresh (list);
wrefresh (dialog);
}
continue; /* wait for another key press */
}
switch (key) {
case 'H':
case 'h':
case '?':
delwin (dialog);
free (status);
return 1;
case TAB:
case KEY_LEFT:
case KEY_RIGHT:
button = ((key == KEY_LEFT ? --button : ++button) < 0)
? 1 : (button > 1 ? 0 : button);
print_buttons(dialog, height, width, button);
wrefresh (dialog);
break;
case 'S':
case 's':
case ' ':
case '\n':
if (!button) {
if (flag == FLAG_CHECK) {
status[scroll + choice] = !status[scroll + choice];
wmove (list, choice, check_x);
wattrset (list, check_selected_attr);
wprintw (list, "[%c]", status[scroll + choice] ? 'X' : ' ');
} else {
if (!status[scroll + choice]) {
for (i = 0; i < item_no; i++)
status[i] = 0;
status[scroll + choice] = 1;
for (i = 0; i < max_choice; i++)
print_item (list, items[scroll + i]->name,
status[scroll + i], i, i == choice);
}
}
wnoutrefresh (list);
wrefresh (dialog);
for (i = 0; i < item_no; i++) {
items[i]->selected = status[i];
}
}
delwin (dialog);
free (status);
return button;
case 'X':
case 'x':
key = ESC;
case ESC:
break;
}
/* Now, update everything... */
doupdate ();
}
delwin (dialog);
free (status);
return -1; /* ESC pressed */
}
+161
View File
@@ -0,0 +1,161 @@
/*
* colors.h -- color attribute definitions
*
* AUTHOR: Savio Lam (lam836@cs.cuhk.hk)
*
* 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., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/*
* Default color definitions
*
* *_FG = foreground
* *_BG = background
* *_HL = highlight?
*/
#define SCREEN_FG COLOR_CYAN
#define SCREEN_BG COLOR_BLUE
#define SCREEN_HL TRUE
#define SHADOW_FG COLOR_BLACK
#define SHADOW_BG COLOR_BLACK
#define SHADOW_HL TRUE
#define DIALOG_FG COLOR_BLACK
#define DIALOG_BG COLOR_WHITE
#define DIALOG_HL FALSE
#define TITLE_FG COLOR_YELLOW
#define TITLE_BG COLOR_WHITE
#define TITLE_HL TRUE
#define BORDER_FG COLOR_WHITE
#define BORDER_BG COLOR_WHITE
#define BORDER_HL TRUE
#define BUTTON_ACTIVE_FG COLOR_WHITE
#define BUTTON_ACTIVE_BG COLOR_BLUE
#define BUTTON_ACTIVE_HL TRUE
#define BUTTON_INACTIVE_FG COLOR_BLACK
#define BUTTON_INACTIVE_BG COLOR_WHITE
#define BUTTON_INACTIVE_HL FALSE
#define BUTTON_KEY_ACTIVE_FG COLOR_WHITE
#define BUTTON_KEY_ACTIVE_BG COLOR_BLUE
#define BUTTON_KEY_ACTIVE_HL TRUE
#define BUTTON_KEY_INACTIVE_FG COLOR_RED
#define BUTTON_KEY_INACTIVE_BG COLOR_WHITE
#define BUTTON_KEY_INACTIVE_HL FALSE
#define BUTTON_LABEL_ACTIVE_FG COLOR_YELLOW
#define BUTTON_LABEL_ACTIVE_BG COLOR_BLUE
#define BUTTON_LABEL_ACTIVE_HL TRUE
#define BUTTON_LABEL_INACTIVE_FG COLOR_BLACK
#define BUTTON_LABEL_INACTIVE_BG COLOR_WHITE
#define BUTTON_LABEL_INACTIVE_HL TRUE
#define INPUTBOX_FG COLOR_BLACK
#define INPUTBOX_BG COLOR_WHITE
#define INPUTBOX_HL FALSE
#define INPUTBOX_BORDER_FG COLOR_BLACK
#define INPUTBOX_BORDER_BG COLOR_WHITE
#define INPUTBOX_BORDER_HL FALSE
#define SEARCHBOX_FG COLOR_BLACK
#define SEARCHBOX_BG COLOR_WHITE
#define SEARCHBOX_HL FALSE
#define SEARCHBOX_TITLE_FG COLOR_YELLOW
#define SEARCHBOX_TITLE_BG COLOR_WHITE
#define SEARCHBOX_TITLE_HL TRUE
#define SEARCHBOX_BORDER_FG COLOR_WHITE
#define SEARCHBOX_BORDER_BG COLOR_WHITE
#define SEARCHBOX_BORDER_HL TRUE
#define POSITION_INDICATOR_FG COLOR_YELLOW
#define POSITION_INDICATOR_BG COLOR_WHITE
#define POSITION_INDICATOR_HL TRUE
#define MENUBOX_FG COLOR_BLACK
#define MENUBOX_BG COLOR_WHITE
#define MENUBOX_HL FALSE
#define MENUBOX_BORDER_FG COLOR_WHITE
#define MENUBOX_BORDER_BG COLOR_WHITE
#define MENUBOX_BORDER_HL TRUE
#define ITEM_FG COLOR_BLACK
#define ITEM_BG COLOR_WHITE
#define ITEM_HL FALSE
#define ITEM_SELECTED_FG COLOR_WHITE
#define ITEM_SELECTED_BG COLOR_BLUE
#define ITEM_SELECTED_HL TRUE
#define TAG_FG COLOR_YELLOW
#define TAG_BG COLOR_WHITE
#define TAG_HL TRUE
#define TAG_SELECTED_FG COLOR_YELLOW
#define TAG_SELECTED_BG COLOR_BLUE
#define TAG_SELECTED_HL TRUE
#define TAG_KEY_FG COLOR_YELLOW
#define TAG_KEY_BG COLOR_WHITE
#define TAG_KEY_HL TRUE
#define TAG_KEY_SELECTED_FG COLOR_YELLOW
#define TAG_KEY_SELECTED_BG COLOR_BLUE
#define TAG_KEY_SELECTED_HL TRUE
#define CHECK_FG COLOR_BLACK
#define CHECK_BG COLOR_WHITE
#define CHECK_HL FALSE
#define CHECK_SELECTED_FG COLOR_WHITE
#define CHECK_SELECTED_BG COLOR_BLUE
#define CHECK_SELECTED_HL TRUE
#define UARROW_FG COLOR_GREEN
#define UARROW_BG COLOR_WHITE
#define UARROW_HL TRUE
#define DARROW_FG COLOR_GREEN
#define DARROW_BG COLOR_WHITE
#define DARROW_HL TRUE
/* End of default color definitions */
#define C_ATTR(x,y) ((x ? A_BOLD : 0) | COLOR_PAIR((y)))
#define COLOR_NAME_LEN 10
#define COLOR_COUNT 8
/*
* Global variables
*/
typedef struct {
char name[COLOR_NAME_LEN];
int value;
} color_names_st;
extern color_names_st color_names[];
extern int color_table[][3];
+566
View File
@@ -0,0 +1,566 @@
/*
* Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
* Released under the terms of the GNU GPL v2.0.
*/
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <time.h>
#include <sys/stat.h>
#define LKC_DIRECT_LINK
#include "lkc.h"
static void conf(struct menu *menu);
static void check_conf(struct menu *menu);
enum {
ask_all,
ask_new,
ask_silent,
set_default,
set_yes,
set_mod,
set_no,
set_random
} input_mode = ask_all;
static int indent = 1;
static int valid_stdin = 1;
static int conf_cnt;
static char line[128];
static struct menu *rootEntry;
static char nohelp_text[] = "Sorry, no help available for this option yet.\n";
static void strip(char *str)
{
char *p = str;
int l;
while ((isspace(*p)))
p++;
l = strlen(p);
if (p != str)
memmove(str, p, l + 1);
if (!l)
return;
p = str + l - 1;
while ((isspace(*p)))
*p-- = 0;
}
static void check_stdin(void)
{
if (!valid_stdin && input_mode == ask_silent) {
printf("aborted!\n\n");
printf("Console input/output is redirected. ");
printf("Run 'make oldconfig' to update configuration.\n\n");
exit(1);
}
}
static void conf_askvalue(struct symbol *sym, const char *def)
{
enum symbol_type type = sym_get_type(sym);
tristate val;
if (!sym_has_value(sym))
printf("(NEW) ");
line[0] = '\n';
line[1] = 0;
if (!sym_is_changable(sym)) {
printf("%s\n", def);
line[0] = '\n';
line[1] = 0;
return;
}
switch (input_mode) {
case ask_new:
case ask_silent:
if (sym_has_value(sym)) {
printf("%s\n", def);
return;
}
check_stdin();
case ask_all:
fflush(stdout);
fgets(line, 128, stdin);
return;
case set_default:
printf("%s\n", def);
return;
default:
break;
}
switch (type) {
case S_INT:
case S_HEX:
case S_STRING:
printf("%s\n", def);
return;
default:
;
}
switch (input_mode) {
case set_yes:
if (sym_tristate_within_range(sym, yes)) {
line[0] = 'y';
line[1] = '\n';
line[2] = 0;
break;
}
case set_mod:
if (type == S_TRISTATE) {
if (sym_tristate_within_range(sym, mod)) {
line[0] = 'm';
line[1] = '\n';
line[2] = 0;
break;
}
} else {
if (sym_tristate_within_range(sym, yes)) {
line[0] = 'y';
line[1] = '\n';
line[2] = 0;
break;
}
}
case set_no:
if (sym_tristate_within_range(sym, no)) {
line[0] = 'n';
line[1] = '\n';
line[2] = 0;
break;
}
case set_random:
do {
val = (tristate)(random() % 3);
} while (!sym_tristate_within_range(sym, val));
switch (val) {
case no: line[0] = 'n'; break;
case mod: line[0] = 'm'; break;
case yes: line[0] = 'y'; break;
}
line[1] = '\n';
line[2] = 0;
break;
default:
break;
}
printf("%s", line);
}
int conf_string(struct menu *menu)
{
struct symbol *sym = menu->sym;
const char *def, *help;
while (1) {
printf("%*s%s ", indent - 1, "", menu->prompt->text);
printf("(%s) ", sym->name);
def = sym_get_string_value(sym);
if (sym_get_string_value(sym))
printf("[%s] ", def);
conf_askvalue(sym, def);
switch (line[0]) {
case '\n':
break;
case '?':
/* print help */
if (line[1] == 0) {
help = nohelp_text;
if (menu->sym->help)
help = menu->sym->help;
printf("\n%s\n", menu->sym->help);
def = NULL;
break;
}
default:
line[strlen(line)-1] = 0;
def = line;
}
if (def && sym_set_string_value(sym, def))
return 0;
}
}
static int conf_sym(struct menu *menu)
{
struct symbol *sym = menu->sym;
int type;
tristate oldval, newval;
const char *help;
while (1) {
printf("%*s%s ", indent - 1, "", menu->prompt->text);
if (sym->name)
printf("(%s) ", sym->name);
type = sym_get_type(sym);
putchar('[');
oldval = sym_get_tristate_value(sym);
switch (oldval) {
case no:
putchar('N');
break;
case mod:
putchar('M');
break;
case yes:
putchar('Y');
break;
}
if (oldval != no && sym_tristate_within_range(sym, no))
printf("/n");
if (oldval != mod && sym_tristate_within_range(sym, mod))
printf("/m");
if (oldval != yes && sym_tristate_within_range(sym, yes))
printf("/y");
if (sym->help)
printf("/?");
printf("] ");
conf_askvalue(sym, sym_get_string_value(sym));
strip(line);
switch (line[0]) {
case 'n':
case 'N':
newval = no;
if (!line[1] || !strcmp(&line[1], "o"))
break;
continue;
case 'm':
case 'M':
newval = mod;
if (!line[1])
break;
continue;
case 'y':
case 'Y':
newval = yes;
if (!line[1] || !strcmp(&line[1], "es"))
break;
continue;
case 0:
newval = oldval;
break;
case '?':
goto help;
default:
continue;
}
if (sym_set_tristate_value(sym, newval))
return 0;
help:
help = nohelp_text;
if (sym->help)
help = sym->help;
printf("\n%s\n", help);
}
}
static int conf_choice(struct menu *menu)
{
struct symbol *sym, *def_sym;
struct menu *child;
int type;
bool is_new;
sym = menu->sym;
type = sym_get_type(sym);
is_new = !sym_has_value(sym);
if (sym_is_changable(sym)) {
conf_sym(menu);
sym_calc_value(sym);
switch (sym_get_tristate_value(sym)) {
case no:
return 1;
case mod:
return 0;
case yes:
break;
}
} else {
switch (sym_get_tristate_value(sym)) {
case no:
return 1;
case mod:
printf("%*s%s\n", indent - 1, "", menu_get_prompt(menu));
return 0;
case yes:
break;
}
}
while (1) {
int cnt, def;
printf("%*s%s\n", indent - 1, "", menu_get_prompt(menu));
def_sym = sym_get_choice_value(sym);
cnt = def = 0;
line[0] = '0';
line[1] = 0;
for (child = menu->list; child; child = child->next) {
if (!menu_is_visible(child))
continue;
if (!child->sym) {
printf("%*c %s\n", indent, '*', menu_get_prompt(child));
continue;
}
cnt++;
if (child->sym == def_sym) {
def = cnt;
printf("%*c", indent, '>');
} else
printf("%*c", indent, ' ');
printf(" %d. %s", cnt, menu_get_prompt(child));
if (child->sym->name)
printf(" (%s)", child->sym->name);
if (!sym_has_value(child->sym))
printf(" (NEW)");
printf("\n");
}
printf("%*schoice", indent - 1, "");
if (cnt == 1) {
printf("[1]: 1\n");
goto conf_childs;
}
printf("[1-%d", cnt);
if (sym->help)
printf("?");
printf("]: ");
switch (input_mode) {
case ask_new:
case ask_silent:
if (!is_new) {
cnt = def;
printf("%d\n", cnt);
break;
}
check_stdin();
case ask_all:
fflush(stdout);
fgets(line, 128, stdin);
strip(line);
if (line[0] == '?') {
printf("\n%s\n", menu->sym->help ?
menu->sym->help : nohelp_text);
continue;
}
if (!line[0])
cnt = def;
else if (isdigit(line[0]))
cnt = atoi(line);
else
continue;
break;
case set_random:
def = (random() % cnt) + 1;
case set_default:
case set_yes:
case set_mod:
case set_no:
cnt = def;
printf("%d\n", cnt);
break;
}
conf_childs:
for (child = menu->list; child; child = child->next) {
if (!child->sym || !menu_is_visible(child))
continue;
if (!--cnt)
break;
}
if (!child)
continue;
if (line[strlen(line) - 1] == '?') {
printf("\n%s\n", child->sym->help ?
child->sym->help : nohelp_text);
continue;
}
sym_set_choice_value(sym, child->sym);
if (child->list) {
indent += 2;
conf(child->list);
indent -= 2;
}
return 1;
}
}
static void conf(struct menu *menu)
{
struct symbol *sym;
struct property *prop;
struct menu *child;
if (!menu_is_visible(menu))
return;
sym = menu->sym;
prop = menu->prompt;
if (prop) {
const char *prompt;
switch (prop->type) {
case P_MENU:
if (input_mode == ask_silent && rootEntry != menu) {
check_conf(menu);
return;
}
case P_COMMENT:
prompt = menu_get_prompt(menu);
if (prompt)
printf("%*c\n%*c %s\n%*c\n",
indent, '*',
indent, '*', prompt,
indent, '*');
default:
;
}
}
if (!sym)
goto conf_childs;
if (sym_is_choice(sym)) {
conf_choice(menu);
if (sym->curr.tri != mod)
return;
goto conf_childs;
}
switch (sym->type) {
case S_INT:
case S_HEX:
case S_STRING:
conf_string(menu);
break;
default:
conf_sym(menu);
break;
}
conf_childs:
if (sym)
indent += 2;
for (child = menu->list; child; child = child->next)
conf(child);
if (sym)
indent -= 2;
}
static void check_conf(struct menu *menu)
{
struct symbol *sym;
struct menu *child;
if (!menu_is_visible(menu))
return;
sym = menu->sym;
if (sym) {
if (sym_is_changable(sym) && !sym_has_value(sym)) {
if (!conf_cnt++)
printf("*\n* Restart config...\n*\n");
rootEntry = menu_get_parent_menu(menu);
conf(rootEntry);
}
if (sym_is_choice(sym) && sym_get_tristate_value(sym) != mod)
return;
}
for (child = menu->list; child; child = child->next)
check_conf(child);
}
int main(int ac, char **av)
{
const char *name;
struct stat tmpstat;
if (ac > 1 && av[1][0] == '-') {
switch (av[1][1]) {
case 'o':
input_mode = ask_new;
break;
case 's':
input_mode = ask_silent;
valid_stdin = isatty(0) && isatty(1) && isatty(2);
break;
case 'd':
input_mode = set_default;
break;
case 'n':
input_mode = set_no;
break;
case 'm':
input_mode = set_mod;
break;
case 'y':
input_mode = set_yes;
break;
case 'r':
input_mode = set_random;
srandom(time(NULL));
break;
case 'h':
case '?':
printf("%s [-o|-s] config\n", av[0]);
exit(0);
}
name = av[2];
} else
name = av[1];
conf_parse(name);
//zconfdump(stdout);
switch (input_mode) {
case set_default:
name = conf_get_default_confname();
if (conf_read(name)) {
printf("***\n"
"*** Can't find default configuration \"%s\"!\n"
"***\n", name);
exit(1);
}
break;
case ask_silent:
if (stat(".config", &tmpstat)) {
printf("***\n"
"*** You have not yet configured uClibc!\n"
"***\n"
"*** Please run some configurator (e.g. \"make config\" or\n"
"*** \"make oldconfig\" or \"make menuconfig\").\n"
"***\n");
exit(1);
}
case ask_all:
case ask_new:
conf_read(NULL);
break;
default:
break;
}
if (input_mode != ask_silent) {
rootEntry = &rootmenu;
conf(&rootmenu);
if (input_mode == ask_all) {
input_mode = ask_silent;
valid_stdin = 1;
}
}
do {
conf_cnt = 0;
check_conf(&rootmenu);
} while (conf_cnt);
conf_write(NULL);
return 0;
}
+435
View File
@@ -0,0 +1,435 @@
/*
* Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
* Released under the terms of the GNU GPL v2.0.
*/
#include <sys/stat.h>
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#define LKC_DIRECT_LINK
#include "lkc.h"
const char conf_def_filename[] = ".config";
const char conf_defname[] = "extra/Configs/Config.default";
const char *conf_confnames[] = {
".config",
conf_defname,
NULL,
};
static char *conf_expand_value(const char *in)
{
struct symbol *sym;
const char *src;
static char res_value[SYMBOL_MAXLENGTH];
char *dst, name[SYMBOL_MAXLENGTH];
res_value[0] = 0;
dst = name;
while ((src = strchr(in, '$'))) {
strncat(res_value, in, src - in);
src++;
dst = name;
while (isalnum(*src) || *src == '_')
*dst++ = *src++;
*dst = 0;
sym = sym_lookup(name, 0);
sym_calc_value(sym);
strcat(res_value, sym_get_string_value(sym));
in = src;
}
strcat(res_value, in);
return res_value;
}
char *conf_get_default_confname(void)
{
struct stat buf;
static char fullname[4096+1];
char *env, *name;
name = conf_expand_value(conf_defname);
env = getenv(SRCTREE);
if (env) {
sprintf(fullname, "%s/%s", env, name);
if (!stat(fullname, &buf))
return fullname;
}
return name;
}
int conf_read(const char *name)
{
FILE *in = NULL;
char line[1024];
char *p, *p2;
int lineno = 0;
struct symbol *sym;
struct property *prop;
struct expr *e;
int i;
if (name) {
in = zconf_fopen(name);
} else {
const char **names = conf_confnames;
while ((name = *names++)) {
name = conf_expand_value(name);
in = zconf_fopen(name);
if (in) {
printf("#\n"
"# using defaults found in %s\n"
"#\n", name);
break;
}
}
}
if (!in)
return 1;
for_all_symbols(i, sym) {
sym->flags |= SYMBOL_NEW | SYMBOL_CHANGED;
sym->flags &= ~SYMBOL_VALID;
switch (sym->type) {
case S_INT:
case S_HEX:
case S_STRING:
if (sym->user.val)
free(sym->user.val);
default:
sym->user.val = NULL;
sym->user.tri = no;
}
}
while (fgets(line, sizeof(line), in)) {
lineno++;
sym = NULL;
switch (line[0]) {
case '#':
if (line[1]!=' ')
continue;
p = strchr(line + 2, ' ');
if (!p)
continue;
*p++ = 0;
if (strncmp(p, "is not set", 10))
continue;
sym = sym_find(line + 2);
if (!sym) {
fprintf(stderr, "%s:%d: trying to assign nonexistent symbol %s\n", name, lineno, line + 2);
break;
}
switch (sym->type) {
case S_BOOLEAN:
case S_TRISTATE:
sym->user.tri = no;
sym->flags &= ~SYMBOL_NEW;
break;
default:
;
}
break;
case 'A' ... 'Z':
p = strchr(line, '=');
if (!p)
continue;
*p++ = 0;
p2 = strchr(p, '\n');
if (p2)
*p2 = 0;
sym = sym_find(line);
if (!sym) {
fprintf(stderr, "%s:%d: trying to assign nonexistent symbol %s\n", name, lineno, line);
break;
}
switch (sym->type) {
case S_TRISTATE:
if (p[0] == 'm') {
sym->user.tri = mod;
sym->flags &= ~SYMBOL_NEW;
break;
}
case S_BOOLEAN:
if (p[0] == 'y') {
sym->user.tri = yes;
sym->flags &= ~SYMBOL_NEW;
break;
}
if (p[0] == 'n') {
sym->user.tri = no;
sym->flags &= ~SYMBOL_NEW;
break;
}
break;
case S_STRING:
if (*p++ != '"')
break;
for (p2 = p; (p2 = strpbrk(p2, "\"\\")); p2++) {
if (*p2 == '"') {
*p2 = 0;
break;
}
memmove(p2, p2 + 1, strlen(p2));
}
if (!p2) {
fprintf(stderr, "%s:%d: invalid string found\n", name, lineno);
exit(1);
}
case S_INT:
case S_HEX:
if (sym_string_valid(sym, p)) {
sym->user.val = strdup(p);
sym->flags &= ~SYMBOL_NEW;
} else {
fprintf(stderr, "%s:%d: symbol value '%s' invalid for %s\n", name, lineno, p, sym->name);
exit(1);
}
break;
default:
;
}
break;
case '\n':
break;
default:
continue;
}
if (sym && sym_is_choice_value(sym)) {
struct symbol *cs = prop_get_symbol(sym_get_choice_prop(sym));
switch (sym->user.tri) {
case no:
break;
case mod:
if (cs->user.tri == yes)
/* warn? */;
break;
case yes:
if (cs->user.tri != no)
/* warn? */;
cs->user.val = sym;
break;
}
cs->user.tri = E_OR(cs->user.tri, sym->user.tri);
cs->flags &= ~SYMBOL_NEW;
}
}
fclose(in);
for_all_symbols(i, sym) {
sym_calc_value(sym);
if (sym_has_value(sym) && !sym_is_choice_value(sym)) {
if (sym->visible == no)
sym->flags |= SYMBOL_NEW;
switch (sym->type) {
case S_STRING:
case S_INT:
case S_HEX:
if (!sym_string_within_range(sym, sym->user.val))
sym->flags |= SYMBOL_NEW;
default:
break;
}
}
if (!sym_is_choice(sym))
continue;
prop = sym_get_choice_prop(sym);
for (e = prop->expr; e; e = e->left.expr)
if (e->right.sym->visible != no)
sym->flags |= e->right.sym->flags & SYMBOL_NEW;
}
sym_change_count = 1;
return 0;
}
int conf_write(const char *name)
{
FILE *out, *out_h;
struct symbol *sym;
struct menu *menu;
const char *basename;
char dirname[128], tmpname[128], newname[128];
int type, l;
const char *str;
dirname[0] = 0;
if (name && name[0]) {
char *slash = strrchr(name, '/');
if (slash) {
int size = slash - name + 1;
memcpy(dirname, name, size);
dirname[size] = 0;
if (slash[1])
basename = slash + 1;
else
basename = conf_def_filename;
} else
basename = name;
} else
basename = conf_def_filename;
sprintf(newname, "%s.tmpconfig.%d", dirname, getpid());
out = fopen(newname, "w");
if (!out)
return 1;
out_h = NULL;
if (!name) {
out_h = fopen(".tmpconfig.h", "w");
if (!out_h)
return 1;
}
fprintf(out, "#\n"
"# Automatically generated make config: don't edit\n"
"#\n");
if (out_h)
fprintf(out_h, "/*\n"
" * Automatically generated C config: don't edit\n"
" */\n"
"/*\n"
" * Version Number\n"
" */\n"
"#define __UCLIBCXX_MAJOR__ %s\n"
"#define __UCLIBCXX_MINOR__ %s\n"
"#define __UCLIBCXX_SUBLEVEL__ %s\n",
getenv("MAJOR_VERSION"),
getenv("MINOR_VERSION"),
getenv("SUBLEVEL"));
if (!sym_change_count)
sym_clear_all_valid();
menu = rootmenu.list;
while (menu) {
sym = menu->sym;
if (!sym) {
if (!menu_is_visible(menu))
goto next;
str = menu_get_prompt(menu);
fprintf(out, "\n"
"#\n"
"# %s\n"
"#\n", str);
if (out_h)
fprintf(out_h, "\n"
"/*\n"
" * %s\n"
" */\n", str);
} else if (!(sym->flags & SYMBOL_CHOICE)) {
sym_calc_value(sym);
if (!(sym->flags & SYMBOL_WRITE))
goto next;
sym->flags &= ~SYMBOL_WRITE;
type = sym->type;
if (type == S_TRISTATE) {
sym_calc_value(modules_sym);
if (modules_sym->curr.tri == no)
type = S_BOOLEAN;
}
switch (type) {
case S_BOOLEAN:
case S_TRISTATE:
switch (sym_get_tristate_value(sym)) {
case no:
fprintf(out, "# %s is not set\n", sym->name);
if (out_h)
fprintf(out_h, "#undef __%s__\n", sym->name);
break;
case mod:
fprintf(out, "%s=m\n", sym->name);
if (out_h)
fprintf(out_h, "#define %s_MODULE 1\n", sym->name);
break;
case yes:
fprintf(out, "%s=y\n", sym->name);
if (out_h)
fprintf(out_h, "#define __%s__ 1\n", sym->name);
break;
}
break;
case S_STRING:
// fix me
str = sym_get_string_value(sym);
fprintf(out, "%s=\"", sym->name);
if (out_h)
fprintf(out_h, "#define __%s__ \"", sym->name);
do {
l = strcspn(str, "\"\\");
if (l) {
fwrite(str, l, 1, out);
if (out_h)
fwrite(str, l, 1, out_h);
}
str += l;
while (*str == '\\' || *str == '"') {
fprintf(out, "\\%c", *str);
if (out_h)
fprintf(out_h, "\\%c", *str);
str++;
}
} while (*str);
fputs("\"\n", out);
if (out_h)
fputs("\"\n", out_h);
break;
case S_HEX:
str = sym_get_string_value(sym);
if (str[0] != '0' || (str[1] != 'x' && str[1] != 'X')) {
fprintf(out, "%s=%s\n", sym->name, str);
if (out_h)
fprintf(out_h, "#define __%s__ 0x%s\n", sym->name, str);
break;
}
case S_INT:
str = sym_get_string_value(sym);
fprintf(out, "%s=%s\n", sym->name, str);
if (out_h)
fprintf(out_h, "#define __%s__ %s\n", sym->name, str);
break;
}
}
next:
if (menu->list) {
menu = menu->list;
continue;
}
if (menu->next)
menu = menu->next;
else while ((menu = menu->parent)) {
if (menu->next) {
menu = menu->next;
break;
}
}
}
fclose(out);
if (out_h) {
fclose(out_h);
rename(".tmpconfig.h", "include/system_configuration.h");
file_write_dep(NULL);
}
if (!name || basename != conf_def_filename) {
if (!name)
name = conf_def_filename;
sprintf(tmpname, "%s.old", name);
rename(name, tmpname);
}
sprintf(tmpname, "%s%s", dirname, basename);
if (rename(newname, tmpname))
return 1;
sym_change_count = 0;
return 0;
}
+196
View File
@@ -0,0 +1,196 @@
/*
* dialog.h -- common declarations for all dialog modules
*
* AUTHOR: Savio Lam (lam836@cs.cuhk.hk)
*
* 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., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include <sys/types.h>
#include <fcntl.h>
#include <unistd.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
#ifdef CURSES_LOC
#include CURSES_LOC
/*
* Colors in ncurses 1.9.9e do not work properly since foreground and
* background colors are OR'd rather than separately masked. This version
* of dialog was hacked to work with ncurses 1.9.9e, making it incompatible
* with standard curses. The simplest fix (to make this work with standard
* curses) uses the wbkgdset() function, not used in the original hack.
* Turn it off if we're building with 1.9.9e, since it just confuses things.
*/
#if defined(NCURSES_VERSION) && defined(_NEED_WRAP) && !defined(GCC_PRINTFLIKE)
#define OLD_NCURSES 1
#undef wbkgdset
#define wbkgdset(w,p) /*nothing*/
#else
#define OLD_NCURSES 0
#endif
#define TR(params) _tracef params
#define ESC 27
#define TAB 9
#define MAX_LEN 2048
#define BUF_SIZE (10*1024)
#define MIN(x,y) (x < y ? x : y)
#define MAX(x,y) (x > y ? x : y)
#ifndef ACS_ULCORNER
#define ACS_ULCORNER '+'
#endif
#ifndef ACS_LLCORNER
#define ACS_LLCORNER '+'
#endif
#ifndef ACS_URCORNER
#define ACS_URCORNER '+'
#endif
#ifndef ACS_LRCORNER
#define ACS_LRCORNER '+'
#endif
#ifndef ACS_HLINE
#define ACS_HLINE '-'
#endif
#ifndef ACS_VLINE
#define ACS_VLINE '|'
#endif
#ifndef ACS_LTEE
#define ACS_LTEE '+'
#endif
#ifndef ACS_RTEE
#define ACS_RTEE '+'
#endif
#ifndef ACS_UARROW
#define ACS_UARROW '^'
#endif
#ifndef ACS_DARROW
#define ACS_DARROW 'v'
#endif
/*
* Attribute names
*/
#define screen_attr attributes[0]
#define shadow_attr attributes[1]
#define dialog_attr attributes[2]
#define title_attr attributes[3]
#define border_attr attributes[4]
#define button_active_attr attributes[5]
#define button_inactive_attr attributes[6]
#define button_key_active_attr attributes[7]
#define button_key_inactive_attr attributes[8]
#define button_label_active_attr attributes[9]
#define button_label_inactive_attr attributes[10]
#define inputbox_attr attributes[11]
#define inputbox_border_attr attributes[12]
#define searchbox_attr attributes[13]
#define searchbox_title_attr attributes[14]
#define searchbox_border_attr attributes[15]
#define position_indicator_attr attributes[16]
#define menubox_attr attributes[17]
#define menubox_border_attr attributes[18]
#define item_attr attributes[19]
#define item_selected_attr attributes[20]
#define tag_attr attributes[21]
#define tag_selected_attr attributes[22]
#define tag_key_attr attributes[23]
#define tag_key_selected_attr attributes[24]
#define check_attr attributes[25]
#define check_selected_attr attributes[26]
#define uarrow_attr attributes[27]
#define darrow_attr attributes[28]
/* number of attributes */
#define ATTRIBUTE_COUNT 29
/*
* Global variables
*/
extern bool use_colors;
extern chtype attributes[];
#endif
extern char *backtitle;
struct dialog_list_item {
char *name;
int namelen;
char *tag;
int selected; /* Set to 1 by dialog_*() function. */
};
/*
* Function prototypes
*/
void init_dialog (void);
void end_dialog (void);
void dialog_clear (void);
#ifdef CURSES_LOC
void attr_clear (WINDOW * win, int height, int width, chtype attr);
void color_setup (void);
void print_autowrap (WINDOW * win, const char *prompt, int width, int y, int x);
void print_button (WINDOW * win, const char *label, int y, int x, int selected);
void draw_box (WINDOW * win, int y, int x, int height, int width, chtype box,
chtype border);
void draw_shadow (WINDOW * win, int y, int x, int height, int width);
#endif
int first_alpha (const char *string, const char *exempt);
int dialog_yesno (const char *title, const char *prompt, int height, int width);
int dialog_msgbox (const char *title, const char *prompt, int height,
int width, int pause);
int dialog_textbox (const char *title, const char *file, int height, int width);
int dialog_menu (const char *title, const char *prompt, int height, int width,
int menu_height, const char *choice, int item_no,
struct dialog_list_item ** items);
int dialog_checklist (const char *title, const char *prompt, int height,
int width, int list_height, int item_no,
struct dialog_list_item ** items, int flag);
extern unsigned char dialog_input_result[];
int dialog_inputbox (const char *title, const char *prompt, int height,
int width, const char *init);
struct dialog_list_item *first_sel_item(int item_no,
struct dialog_list_item ** items);
/*
* This is the base for fictitious keys, which activate
* the buttons.
*
* Mouse-generated keys are the following:
* -- the first 32 are used as numbers, in addition to '0'-'9'
* -- the lowercase are used to signal mouse-enter events (M_EVENT + 'o')
* -- uppercase chars are used to invoke the button (M_EVENT + 'O')
*/
#ifdef CURSES_LOC
#define M_EVENT (KEY_MAX+1)
#endif
/*
* The `flag' parameter in checklist is used to select between
* radiolist and checklist
*/
#define FLAG_CHECK 1
#define FLAG_RADIO 0
+1083
View File
File diff suppressed because it is too large Load Diff
+194
View File
@@ -0,0 +1,194 @@
/*
* Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
* Released under the terms of the GNU GPL v2.0.
*/
#ifndef EXPR_H
#define EXPR_H
#ifdef __cplusplus
extern "C" {
#endif
#include <stdio.h>
#ifndef __cplusplus
#include <stdbool.h>
#endif
struct file {
struct file *next;
struct file *parent;
char *name;
int lineno;
int flags;
};
#define FILE_BUSY 0x0001
#define FILE_SCANNED 0x0002
#define FILE_PRINTED 0x0004
typedef enum tristate {
no, mod, yes
} tristate;
enum expr_type {
E_NONE, E_OR, E_AND, E_NOT, E_EQUAL, E_UNEQUAL, E_CHOICE, E_SYMBOL, E_RANGE
};
union expr_data {
struct expr *expr;
struct symbol *sym;
};
struct expr {
enum expr_type type;
union expr_data left, right;
};
#define E_OR(dep1, dep2) (((dep1)>(dep2))?(dep1):(dep2))
#define E_AND(dep1, dep2) (((dep1)<(dep2))?(dep1):(dep2))
#define E_NOT(dep) (2-(dep))
struct expr_value {
struct expr *expr;
tristate tri;
};
struct symbol_value {
void *val;
tristate tri;
};
enum symbol_type {
S_UNKNOWN, S_BOOLEAN, S_TRISTATE, S_INT, S_HEX, S_STRING, S_OTHER
};
struct symbol {
struct symbol *next;
char *name;
char *help;
enum symbol_type type;
struct symbol_value curr, user;
tristate visible;
int flags;
struct property *prop;
struct expr *dep, *dep2;
struct expr_value rev_dep;
};
#define for_all_symbols(i, sym) for (i = 0; i < 257; i++) for (sym = symbol_hash[i]; sym; sym = sym->next) if (sym->type != S_OTHER)
#define SYMBOL_YES 0x0001
#define SYMBOL_MOD 0x0002
#define SYMBOL_NO 0x0004
#define SYMBOL_CONST 0x0007
#define SYMBOL_CHECK 0x0008
#define SYMBOL_CHOICE 0x0010
#define SYMBOL_CHOICEVAL 0x0020
#define SYMBOL_PRINTED 0x0040
#define SYMBOL_VALID 0x0080
#define SYMBOL_OPTIONAL 0x0100
#define SYMBOL_WRITE 0x0200
#define SYMBOL_CHANGED 0x0400
#define SYMBOL_NEW 0x0800
#define SYMBOL_AUTO 0x1000
#define SYMBOL_CHECKED 0x2000
#define SYMBOL_CHECK_DONE 0x4000
#define SYMBOL_WARNED 0x8000
#define SYMBOL_MAXLENGTH 256
#define SYMBOL_HASHSIZE 257
#define SYMBOL_HASHMASK 0xff
enum prop_type {
P_UNKNOWN, P_PROMPT, P_COMMENT, P_MENU, P_DEFAULT, P_CHOICE, P_SELECT, P_RANGE
};
struct property {
struct property *next;
struct symbol *sym;
enum prop_type type;
const char *text;
struct expr_value visible;
struct expr *expr;
struct menu *menu;
struct file *file;
int lineno;
};
#define for_all_properties(sym, st, tok) \
for (st = sym->prop; st; st = st->next) \
if (st->type == (tok))
#define for_all_defaults(sym, st) for_all_properties(sym, st, P_DEFAULT)
#define for_all_choices(sym, st) for_all_properties(sym, st, P_CHOICE)
#define for_all_prompts(sym, st) \
for (st = sym->prop; st; st = st->next) \
if (st->text)
struct menu {
struct menu *next;
struct menu *parent;
struct menu *list;
struct symbol *sym;
struct property *prompt;
struct expr *dep;
unsigned int flags;
//char *help;
struct file *file;
int lineno;
void *data;
};
#define MENU_CHANGED 0x0001
#define MENU_ROOT 0x0002
#ifndef SWIG
extern struct file *file_list;
extern struct file *current_file;
struct file *lookup_file(const char *name);
extern struct symbol symbol_yes, symbol_no, symbol_mod;
extern struct symbol *modules_sym;
extern int cdebug;
struct expr *expr_alloc_symbol(struct symbol *sym);
struct expr *expr_alloc_one(enum expr_type type, struct expr *ce);
struct expr *expr_alloc_two(enum expr_type type, struct expr *e1, struct expr *e2);
struct expr *expr_alloc_comp(enum expr_type type, struct symbol *s1, struct symbol *s2);
struct expr *expr_alloc_and(struct expr *e1, struct expr *e2);
struct expr *expr_alloc_or(struct expr *e1, struct expr *e2);
struct expr *expr_copy(struct expr *org);
void expr_free(struct expr *e);
int expr_eq(struct expr *e1, struct expr *e2);
void expr_eliminate_eq(struct expr **ep1, struct expr **ep2);
tristate expr_calc_value(struct expr *e);
struct expr *expr_eliminate_yn(struct expr *e);
struct expr *expr_trans_bool(struct expr *e);
struct expr *expr_eliminate_dups(struct expr *e);
struct expr *expr_transform(struct expr *e);
int expr_contains_symbol(struct expr *dep, struct symbol *sym);
bool expr_depends_symbol(struct expr *dep, struct symbol *sym);
struct expr *expr_extract_eq_and(struct expr **ep1, struct expr **ep2);
struct expr *expr_extract_eq_or(struct expr **ep1, struct expr **ep2);
void expr_extract_eq(enum expr_type type, struct expr **ep, struct expr **ep1, struct expr **ep2);
struct expr *expr_trans_compare(struct expr *e, enum expr_type type, struct symbol *sym);
void expr_fprint(struct expr *e, FILE *out);
void print_expr(int mask, struct expr *e, int prevtoken);
static inline int expr_is_yes(struct expr *e)
{
return !e || (e->type == E_SYMBOL && e->left.sym == &symbol_yes);
}
static inline int expr_is_no(struct expr *e)
{
return e && (e->type == E_SYMBOL && e->left.sym == &symbol_no);
}
#endif
#ifdef __cplusplus
}
#endif
#endif /* EXPR_H */
+240
View File
@@ -0,0 +1,240 @@
/*
* inputbox.c -- implements the input box
*
* ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk)
* MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcap@cfw.com)
*
* 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., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include "dialog.h"
unsigned char dialog_input_result[MAX_LEN + 1];
/*
* Print the termination buttons
*/
static void
print_buttons(WINDOW *dialog, int height, int width, int selected)
{
int x = width / 2 - 11;
int y = height - 2;
print_button (dialog, " Ok ", y, x, selected==0);
print_button (dialog, " Help ", y, x + 14, selected==1);
wmove(dialog, y, x+1+14*selected);
wrefresh(dialog);
}
/*
* Display a dialog box for inputing a string
*/
int
dialog_inputbox (const char *title, const char *prompt, int height, int width,
const char *init)
{
int i, x, y, box_y, box_x, box_width;
int input_x = 0, scroll = 0, key = 0, button = -1;
unsigned char *instr = dialog_input_result;
WINDOW *dialog;
/* center dialog box on screen */
x = (COLS - width) / 2;
y = (LINES - height) / 2;
draw_shadow (stdscr, y, x, height, width);
dialog = newwin (height, width, y, x);
keypad (dialog, TRUE);
draw_box (dialog, 0, 0, height, width, dialog_attr, border_attr);
wattrset (dialog, border_attr);
mvwaddch (dialog, height-3, 0, ACS_LTEE);
for (i = 0; i < width - 2; i++)
waddch (dialog, ACS_HLINE);
wattrset (dialog, dialog_attr);
waddch (dialog, ACS_RTEE);
if (title != NULL && strlen(title) >= width-2 ) {
/* truncate long title -- mec */
char * title2 = malloc(width-2+1);
memcpy( title2, title, width-2 );
title2[width-2] = '\0';
title = title2;
}
if (title != NULL) {
wattrset (dialog, title_attr);
mvwaddch (dialog, 0, (width - strlen(title))/2 - 1, ' ');
waddstr (dialog, (char *)title);
waddch (dialog, ' ');
}
wattrset (dialog, dialog_attr);
print_autowrap (dialog, prompt, width - 2, 1, 3);
/* Draw the input field box */
box_width = width - 6;
getyx (dialog, y, x);
box_y = y + 2;
box_x = (width - box_width) / 2;
draw_box (dialog, y + 1, box_x - 1, 3, box_width + 2,
border_attr, dialog_attr);
print_buttons(dialog, height, width, 0);
/* Set up the initial value */
wmove (dialog, box_y, box_x);
wattrset (dialog, inputbox_attr);
if (!init)
instr[0] = '\0';
else
strcpy (instr, init);
input_x = strlen (instr);
if (input_x >= box_width) {
scroll = input_x - box_width + 1;
input_x = box_width - 1;
for (i = 0; i < box_width - 1; i++)
waddch (dialog, instr[scroll + i]);
} else
waddstr (dialog, instr);
wmove (dialog, box_y, box_x + input_x);
wrefresh (dialog);
while (key != ESC) {
key = wgetch (dialog);
if (button == -1) { /* Input box selected */
switch (key) {
case TAB:
case KEY_UP:
case KEY_DOWN:
break;
case KEY_LEFT:
continue;
case KEY_RIGHT:
continue;
case KEY_BACKSPACE:
case 127:
if (input_x || scroll) {
wattrset (dialog, inputbox_attr);
if (!input_x) {
scroll = scroll < box_width - 1 ?
0 : scroll - (box_width - 1);
wmove (dialog, box_y, box_x);
for (i = 0; i < box_width; i++)
waddch (dialog, instr[scroll + input_x + i] ?
instr[scroll + input_x + i] : ' ');
input_x = strlen (instr) - scroll;
} else
input_x--;
instr[scroll + input_x] = '\0';
mvwaddch (dialog, box_y, input_x + box_x, ' ');
wmove (dialog, box_y, input_x + box_x);
wrefresh (dialog);
}
continue;
default:
if (key < 0x100 && isprint (key)) {
if (scroll + input_x < MAX_LEN) {
wattrset (dialog, inputbox_attr);
instr[scroll + input_x] = key;
instr[scroll + input_x + 1] = '\0';
if (input_x == box_width - 1) {
scroll++;
wmove (dialog, box_y, box_x);
for (i = 0; i < box_width - 1; i++)
waddch (dialog, instr[scroll + i]);
} else {
wmove (dialog, box_y, input_x++ + box_x);
waddch (dialog, key);
}
wrefresh (dialog);
} else
flash (); /* Alarm user about overflow */
continue;
}
}
}
switch (key) {
case 'O':
case 'o':
delwin (dialog);
return 0;
case 'H':
case 'h':
delwin (dialog);
return 1;
case KEY_UP:
case KEY_LEFT:
switch (button) {
case -1:
button = 1; /* Indicates "Cancel" button is selected */
print_buttons(dialog, height, width, 1);
break;
case 0:
button = -1; /* Indicates input box is selected */
print_buttons(dialog, height, width, 0);
wmove (dialog, box_y, box_x + input_x);
wrefresh (dialog);
break;
case 1:
button = 0; /* Indicates "OK" button is selected */
print_buttons(dialog, height, width, 0);
break;
}
break;
case TAB:
case KEY_DOWN:
case KEY_RIGHT:
switch (button) {
case -1:
button = 0; /* Indicates "OK" button is selected */
print_buttons(dialog, height, width, 0);
break;
case 0:
button = 1; /* Indicates "Cancel" button is selected */
print_buttons(dialog, height, width, 1);
break;
case 1:
button = -1; /* Indicates input box is selected */
print_buttons(dialog, height, width, 0);
wmove (dialog, box_y, box_x + input_x);
wrefresh (dialog);
break;
}
break;
case ' ':
case '\n':
delwin (dialog);
return (button == -1 ? 0 : button);
case 'X':
case 'x':
key = ESC;
case ESC:
break;
}
}
delwin (dialog);
return -1; /* ESC pressed */
}
File diff suppressed because it is too large Load Diff
+113
View File
@@ -0,0 +1,113 @@
/*
* Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
* Released under the terms of the GNU GPL v2.0.
*/
#ifndef LKC_H
#define LKC_H
#include "expr.h"
#ifdef __cplusplus
extern "C" {
#endif
#ifdef LKC_DIRECT_LINK
#define P(name,type,arg) extern type name arg
#else
#include "lkc_defs.h"
#define P(name,type,arg) extern type (*name ## _p) arg
#endif
#include "lkc_proto.h"
#undef P
#define SRCTREE "srctree"
int zconfparse(void);
void zconfdump(FILE *out);
extern int zconfdebug;
void zconf_starthelp(void);
FILE *zconf_fopen(const char *name);
void zconf_initscan(const char *name);
void zconf_nextfile(const char *name);
int zconf_lineno(void);
char *zconf_curname(void);
/* confdata.c */
extern const char conf_def_filename[];
extern char conf_filename[];
char *conf_get_default_confname(void);
/* kconfig_load.c */
void kconfig_load(void);
/* menu.c */
void menu_init(void);
void menu_add_menu(void);
void menu_end_menu(void);
void menu_add_entry(struct symbol *sym);
void menu_end_entry(void);
void menu_add_dep(struct expr *dep);
struct property *menu_add_prop(enum prop_type type, char *prompt, struct expr *expr, struct expr *dep);
void menu_add_prompt(enum prop_type type, char *prompt, struct expr *dep);
void menu_add_expr(enum prop_type type, struct expr *expr, struct expr *dep);
void menu_add_symbol(enum prop_type type, struct symbol *sym, struct expr *dep);
void menu_finalize(struct menu *parent);
void menu_set_type(int type);
struct file *file_lookup(const char *name);
int file_write_dep(const char *name);
extern struct menu *current_entry;
extern struct menu *current_menu;
/* symbol.c */
void sym_init(void);
void sym_clear_all_valid(void);
void sym_set_changed(struct symbol *sym);
struct symbol *sym_check_deps(struct symbol *sym);
struct property *prop_alloc(enum prop_type type, struct symbol *sym);
struct symbol *prop_get_symbol(struct property *prop);
static inline tristate sym_get_tristate_value(struct symbol *sym)
{
return sym->curr.tri;
}
static inline struct symbol *sym_get_choice_value(struct symbol *sym)
{
return (struct symbol *)sym->curr.val;
}
static inline bool sym_set_choice_value(struct symbol *ch, struct symbol *chval)
{
return sym_set_tristate_value(chval, yes);
}
static inline bool sym_is_choice(struct symbol *sym)
{
return sym->flags & SYMBOL_CHOICE ? true : false;
}
static inline bool sym_is_choice_value(struct symbol *sym)
{
return sym->flags & SYMBOL_CHOICEVAL ? true : false;
}
static inline bool sym_is_optional(struct symbol *sym)
{
return sym->flags & SYMBOL_OPTIONAL ? true : false;
}
static inline bool sym_has_value(struct symbol *sym)
{
return sym->flags & SYMBOL_NEW ? false : true;
}
#ifdef __cplusplus
}
#endif
#endif /* LKC_H */
+39
View File
@@ -0,0 +1,39 @@
/* confdata.c */
P(conf_parse,void,(const char *name));
P(conf_read,int,(const char *name));
P(conf_write,int,(const char *name));
/* menu.c */
P(rootmenu,struct menu,);
P(menu_is_visible,bool,(struct menu *menu));
P(menu_get_prompt,const char *,(struct menu *menu));
P(menu_get_root_menu,struct menu *,(struct menu *menu));
P(menu_get_parent_menu,struct menu *,(struct menu *menu));
/* symbol.c */
P(symbol_hash,struct symbol *,[SYMBOL_HASHSIZE]);
P(sym_change_count,int,);
P(sym_lookup,struct symbol *,(const char *name, int isconst));
P(sym_find,struct symbol *,(const char *name));
P(sym_type_name,const char *,(enum symbol_type type));
P(sym_calc_value,void,(struct symbol *sym));
P(sym_get_type,enum symbol_type,(struct symbol *sym));
P(sym_tristate_within_range,bool,(struct symbol *sym,tristate tri));
P(sym_set_tristate_value,bool,(struct symbol *sym,tristate tri));
P(sym_toggle_tristate_value,tristate,(struct symbol *sym));
P(sym_string_valid,bool,(struct symbol *sym, const char *newval));
P(sym_string_within_range,bool,(struct symbol *sym, const char *str));
P(sym_set_string_value,bool,(struct symbol *sym, const char *newval));
P(sym_is_changable,bool,(struct symbol *sym));
P(sym_get_choice_prop,struct property *,(struct symbol *sym));
P(sym_get_default_prop,struct property *,(struct symbol *sym));
P(sym_get_string_value,const char *,(struct symbol *sym));
P(prop_get_type_name,const char *,(enum prop_type type));
/* expr.c */
P(expr_compare_type,int,(enum expr_type t1, enum expr_type t2));
P(expr_print,void,(struct expr *e, void (*fn)(void *, const char *), void *data, int prevtoken));
+703
View File
@@ -0,0 +1,703 @@
/*
* Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
* Released under the terms of the GNU GPL v2.0.
*
* Introduced single menu mode (show all sub-menus in one large tree).
* 2002-11-06 Petr Baudis <pasky@ucw.cz>
*
* Directly use liblxdialog library routines.
* 2002-11-14 Petr Baudis <pasky@ucw.cz>
*/
#include <sys/ioctl.h>
#include <sys/wait.h>
#include <sys/termios.h>
#include <ctype.h>
#include <errno.h>
#include <fcntl.h>
#include <limits.h>
#include <signal.h>
#include <stdarg.h>
#include <stdlib.h>
#include <string.h>
#include <termios.h>
#include <unistd.h>
#include "dialog.h"
#define LKC_DIRECT_LINK
#include "lkc.h"
static char menu_backtitle[128];
static const char menu_instructions[] =
"Arrow keys navigate the menu. "
"<Enter> selects submenus --->. "
"Highlighted letters are hotkeys. "
"Pressing <Y> selectes a feature, while <N> will exclude a feature. "
"Press <Esc><Esc> to exit, <?> for Help. "
"Legend: [*] feature is selected [ ] feature is excluded",
radiolist_instructions[] =
"Use the arrow keys to navigate this window or "
"press the hotkey of the item you wish to select "
"followed by the <SPACE BAR>. "
"Press <?> for additional information about this option.",
inputbox_instructions_int[] =
"Please enter a decimal value. "
"Fractions will not be accepted. "
"Use the <TAB> key to move from the input field to the buttons below it.",
inputbox_instructions_hex[] =
"Please enter a hexadecimal value. "
"Use the <TAB> key to move from the input field to the buttons below it.",
inputbox_instructions_string[] =
"Please enter a string value. "
"Use the <TAB> key to move from the input field to the buttons below it.",
setmod_text[] =
"This feature depends on another which has been configured as a module.\n"
"As a result, this feature will be built as a module.",
nohelp_text[] =
"There is no help available for this option.\n",
load_config_text[] =
"Enter the name of the configuration file you wish to load. "
"Accept the name shown to restore the configuration you "
"last retrieved. Leave blank to abort.",
load_config_help[] =
"\n"
"For various reasons, one may wish to keep several different uClibc\n"
"configurations available on a single machine.\n"
"\n"
"If you have saved a previous configuration in a file other than the\n"
"uClibc's default, entering the name of the file here will allow you\n"
"to modify that configuration.\n"
"\n"
"If you are uncertain, then you have probably never used alternate\n"
"configuration files. You should therefor leave this blank to abort.\n",
save_config_text[] =
"Enter a filename to which this configuration should be saved "
"as an alternate. Leave blank to abort.",
save_config_help[] =
"\n"
"For various reasons, one may wish to keep different uClibc\n"
"configurations available on a single machine.\n"
"\n"
"Entering a file name here will allow you to later retrieve, modify\n"
"and use the current configuration as an alternate to whatever\n"
"configuration options you have selected at that time.\n"
"\n"
"If you are uncertain what all this means then you should probably\n"
"leave this blank.\n",
top_menu_help[] =
"\n"
"Use the Up/Down arrow keys (cursor keys) to highlight the item\n"
"you wish to change or submenu wish to select and press <Enter>.\n"
"Submenus are designated by \"--->\".\n"
"\n"
"Shortcut: Press the option's highlighted letter (hotkey).\n"
"\n"
"You may also use the <PAGE UP> and <PAGE DOWN> keys to scroll\n"
"unseen options into view.\n"
;
static char filename[PATH_MAX+1] = ".config";
static int indent = 0;
static struct termios ios_org;
static int rows, cols;
static int child_count;
static int single_menu_mode;
static struct dialog_list_item *items[16384]; /* FIXME: This ought to be dynamic. */
static int item_no;
static void conf(struct menu *menu);
static void conf_choice(struct menu *menu);
static void conf_string(struct menu *menu);
static void conf_load(void);
static void conf_save(void);
static void show_textbox(const char *title, const char *text, int r, int c);
static void show_helptext(const char *title, const char *text);
static void show_help(struct menu *menu);
static void show_readme(void);
static void init_wsize(void)
{
struct winsize ws;
char *env;
if (ioctl(1, TIOCGWINSZ, &ws) == -1) {
rows = 24;
cols = 80;
} else {
rows = ws.ws_row;
cols = ws.ws_col;
if (!rows) {
env = getenv("LINES");
if (env)
rows = atoi(env);
if (!rows)
rows = 24;
}
if (!cols) {
env = getenv("COLUMNS");
if (env)
cols = atoi(env);
if (!cols)
cols = 80;
}
}
if (rows < 19 || cols < 80) {
fprintf(stderr, "Your display is too small to run Menuconfig!\n");
fprintf(stderr, "It must be at least 19 lines by 80 columns.\n");
exit(1);
}
rows -= 4;
cols -= 5;
}
static void cinit(void)
{
item_no = 0;
}
static void cmake(void)
{
items[item_no] = malloc(sizeof(struct dialog_list_item));
memset(items[item_no], 0, sizeof(struct dialog_list_item));
items[item_no]->tag = malloc(32); items[item_no]->tag[0] = 0;
items[item_no]->name = malloc(512); items[item_no]->name[0] = 0;
items[item_no]->namelen = 0;
item_no++;
}
static int cprint_name(const char *fmt, ...)
{
va_list ap;
int res;
if (!item_no)
cmake();
va_start(ap, fmt);
res = vsnprintf(items[item_no - 1]->name + items[item_no - 1]->namelen,
512 - items[item_no - 1]->namelen, fmt, ap);
if (res > 0)
items[item_no - 1]->namelen += res;
va_end(ap);
return res;
}
static int cprint_tag(const char *fmt, ...)
{
va_list ap;
int res;
if (!item_no)
cmake();
va_start(ap, fmt);
res = vsnprintf(items[item_no - 1]->tag, 32, fmt, ap);
va_end(ap);
return res;
}
static void cdone(void)
{
int i;
for (i = 0; i < item_no; i++) {
free(items[i]->tag);
free(items[i]->name);
free(items[i]);
}
item_no = 0;
}
static void build_conf(struct menu *menu)
{
struct symbol *sym;
struct property *prop;
struct menu *child;
int type, tmp, doint = 2;
tristate val;
char ch;
if (!menu_is_visible(menu))
return;
sym = menu->sym;
prop = menu->prompt;
if (!sym) {
if (prop && menu != current_menu) {
const char *prompt = menu_get_prompt(menu);
switch (prop->type) {
case P_MENU:
child_count++;
cmake();
cprint_tag("m%p", menu);
if (single_menu_mode) {
cprint_name("%s%*c%s",
menu->data ? "-->" : "++>",
indent + 1, ' ', prompt);
} else {
cprint_name(" %*c%s --->", indent + 1, ' ', prompt);
}
if (single_menu_mode && menu->data)
goto conf_childs;
return;
default:
if (prompt) {
child_count++;
cmake();
cprint_tag(":%p", menu);
cprint_name("---%*c%s", indent + 1, ' ', prompt);
}
}
} else
doint = 0;
goto conf_childs;
}
cmake();
type = sym_get_type(sym);
if (sym_is_choice(sym)) {
struct symbol *def_sym = sym_get_choice_value(sym);
struct menu *def_menu = NULL;
child_count++;
for (child = menu->list; child; child = child->next) {
if (menu_is_visible(child) && child->sym == def_sym)
def_menu = child;
}
val = sym_get_tristate_value(sym);
if (sym_is_changable(sym)) {
cprint_tag("t%p", menu);
switch (type) {
case S_BOOLEAN:
cprint_name("[%c]", val == no ? ' ' : '*');
break;
case S_TRISTATE:
switch (val) {
case yes: ch = '*'; break;
case mod: ch = 'M'; break;
default: ch = ' '; break;
}
cprint_name("<%c>", ch);
break;
}
} else {
cprint_tag("%c%p", def_menu ? 't' : ':', menu);
cprint_name(" ");
}
cprint_name("%*c%s", indent + 1, ' ', menu_get_prompt(menu));
if (val == yes) {
if (def_menu) {
cprint_name(" (%s)", menu_get_prompt(def_menu));
cprint_name(" --->");
if (def_menu->list) {
indent += 2;
build_conf(def_menu);
indent -= 2;
}
}
return;
}
} else {
child_count++;
val = sym_get_tristate_value(sym);
if (sym_is_choice_value(sym) && val == yes) {
cprint_tag(":%p", menu);
cprint_name(" ");
} else {
switch (type) {
case S_BOOLEAN:
cprint_tag("t%p", menu);
if (sym_is_changable(sym))
cprint_name("[%c]", val == no ? ' ' : '*');
else
cprint_name("---");
break;
case S_TRISTATE:
cprint_tag("t%p", menu);
switch (val) {
case yes: ch = '*'; break;
case mod: ch = 'M'; break;
default: ch = ' '; break;
}
if (sym_is_changable(sym))
cprint_name("<%c>", ch);
else
cprint_name("---");
break;
default:
cprint_tag("s%p", menu);
tmp = cprint_name("(%s)", sym_get_string_value(sym));
tmp = indent - tmp + 4;
if (tmp < 0)
tmp = 0;
cprint_name("%*c%s%s", tmp, ' ', menu_get_prompt(menu),
(sym_has_value(sym) || !sym_is_changable(sym)) ?
"" : " (NEW)");
goto conf_childs;
}
}
cprint_name("%*c%s%s", indent + 1, ' ', menu_get_prompt(menu),
(sym_has_value(sym) || !sym_is_changable(sym)) ?
"" : " (NEW)");
if (menu->prompt->type == P_MENU) {
cprint_name(" --->");
return;
}
}
conf_childs:
indent += doint;
for (child = menu->list; child; child = child->next)
build_conf(child);
indent -= doint;
}
static void conf(struct menu *menu)
{
struct dialog_list_item *active_item = NULL;
struct menu *submenu;
const char *prompt = menu_get_prompt(menu);
struct symbol *sym;
char active_entry[40];
int stat, type;
unlink("lxdialog.scrltmp");
active_entry[0] = 0;
while (1) {
indent = 0;
child_count = 0;
current_menu = menu;
cdone(); cinit();
build_conf(menu);
if (!child_count)
break;
if (menu == &rootmenu) {
cmake(); cprint_tag(":"); cprint_name("--- ");
cmake(); cprint_tag("L"); cprint_name("Load an Alternate Configuration File");
cmake(); cprint_tag("S"); cprint_name("Save Configuration to an Alternate File");
}
dialog_clear();
stat = dialog_menu(prompt ? prompt : "Main Menu",
menu_instructions, rows, cols, rows - 10,
active_entry, item_no, items);
if (stat < 0)
return;
if (stat == 1 || stat == 255)
break;
active_item = first_sel_item(item_no, items);
if (!active_item)
continue;
active_item->selected = 0;
strncpy(active_entry, active_item->tag, sizeof(active_entry));
active_entry[sizeof(active_entry)-1] = 0;
type = active_entry[0];
if (!type)
continue;
sym = NULL;
submenu = NULL;
if (sscanf(active_entry + 1, "%p", &submenu) == 1)
sym = submenu->sym;
switch (stat) {
case 0:
switch (type) {
case 'm':
if (single_menu_mode)
submenu->data = (void *) (long) !submenu->data;
else
conf(submenu);
break;
case 't':
if (sym_is_choice(sym) && sym_get_tristate_value(sym) == yes)
conf_choice(submenu);
else if (submenu->prompt->type == P_MENU)
conf(submenu);
break;
case 's':
conf_string(submenu);
break;
case 'L':
conf_load();
break;
case 'S':
conf_save();
break;
}
break;
case 2:
if (sym)
show_help(submenu);
else
show_readme();
break;
case 3:
if (type == 't') {
if (sym_set_tristate_value(sym, yes))
break;
if (sym_set_tristate_value(sym, mod))
show_textbox(NULL, setmod_text, 6, 74);
}
break;
case 4:
if (type == 't')
sym_set_tristate_value(sym, no);
break;
case 5:
if (type == 't')
sym_set_tristate_value(sym, mod);
break;
case 6:
if (type == 't')
sym_toggle_tristate_value(sym);
else if (type == 'm')
conf(submenu);
break;
}
}
}
static void show_textbox(const char *title, const char *text, int r, int c)
{
int fd;
fd = creat(".help.tmp", 0777);
write(fd, text, strlen(text));
close(fd);
while (dialog_textbox(title, ".help.tmp", r, c) < 0)
;
unlink(".help.tmp");
}
static void show_helptext(const char *title, const char *text)
{
show_textbox(title, text, rows, cols);
}
static void show_help(struct menu *menu)
{
const char *help;
char *helptext;
struct symbol *sym = menu->sym;
help = sym->help;
if (!help)
help = nohelp_text;
if (sym->name) {
helptext = malloc(strlen(sym->name) + strlen(help) + 16);
sprintf(helptext, "%s:\n\n%s", sym->name, help);
show_helptext(menu_get_prompt(menu), helptext);
free(helptext);
} else
show_helptext(menu_get_prompt(menu), help);
}
static void show_readme(void)
{
show_helptext("Help", top_menu_help);
}
static void conf_choice(struct menu *menu)
{
const char *prompt = menu_get_prompt(menu);
struct menu *child;
struct symbol *active;
while (1) {
current_menu = menu;
active = sym_get_choice_value(menu->sym);
cdone(); cinit();
for (child = menu->list; child; child = child->next) {
if (!menu_is_visible(child))
continue;
cmake();
cprint_tag("%p", child);
cprint_name("%s", menu_get_prompt(child));
items[item_no - 1]->selected = (child->sym == active);
}
switch (dialog_checklist(prompt ? prompt : "Main Menu",
radiolist_instructions, 15, 70, 6,
item_no, items, FLAG_RADIO)) {
case 0:
if (sscanf(first_sel_item(item_no, items)->tag, "%p", &menu) != 1)
break;
sym_set_tristate_value(menu->sym, yes);
return;
case 1:
show_help(menu);
break;
case 255:
return;
}
}
}
static void conf_string(struct menu *menu)
{
const char *prompt = menu_get_prompt(menu);
while (1) {
char *heading;
switch (sym_get_type(menu->sym)) {
case S_INT:
heading = (char *) inputbox_instructions_int;
break;
case S_HEX:
heading = (char *) inputbox_instructions_hex;
break;
case S_STRING:
heading = (char *) inputbox_instructions_string;
break;
default:
heading = "Internal mconf error!";
/* panic? */;
}
switch (dialog_inputbox(prompt ? prompt : "Main Menu",
heading, 10, 75,
sym_get_string_value(menu->sym))) {
case 0:
if (sym_set_string_value(menu->sym, dialog_input_result))
return;
show_textbox(NULL, "You have made an invalid entry.", 5, 43);
break;
case 1:
show_help(menu);
break;
case 255:
return;
}
}
}
static void conf_load(void)
{
while (1) {
switch (dialog_inputbox(NULL, load_config_text, 11, 55,
filename)) {
case 0:
if (!dialog_input_result[0])
return;
if (!conf_read(dialog_input_result))
return;
show_textbox(NULL, "File does not exist!", 5, 38);
break;
case 1:
show_helptext("Load Alternate Configuration", load_config_help);
break;
case 255:
return;
}
}
}
static void conf_save(void)
{
while (1) {
switch (dialog_inputbox(NULL, save_config_text, 11, 55,
filename)) {
case 0:
if (!dialog_input_result[0])
return;
if (!conf_write(dialog_input_result))
return;
show_textbox(NULL, "Can't create file! Probably a nonexistent directory.", 5, 60);
break;
case 1:
show_helptext("Save Alternate Configuration", save_config_help);
break;
case 255:
return;
}
}
}
static void conf_cleanup(void)
{
tcsetattr(1, TCSAFLUSH, &ios_org);
unlink(".help.tmp");
}
static void winch_handler(int sig)
{
struct winsize ws;
if (ioctl(1, TIOCGWINSZ, &ws) == -1) {
rows = 24;
cols = 80;
} else {
rows = ws.ws_row;
cols = ws.ws_col;
}
if (rows < 19 || cols < 80) {
end_dialog();
fprintf(stderr, "Your display is too small to run Menuconfig!\n");
fprintf(stderr, "It must be at least 19 lines by 80 columns.\n");
exit(1);
}
rows -= 4;
cols -= 5;
}
int main(int ac, char **av)
{
int stat;
char *mode;
struct symbol *sym;
conf_parse(av[1]);
conf_read(NULL);
sym = sym_lookup("VERSION", 0);
sym_calc_value(sym);
snprintf(menu_backtitle, 128, "uClibc v%s Configuration",
sym_get_string_value(sym));
mode = getenv("MENUCONFIG_MODE");
if (mode) {
if (!strcasecmp(mode, "single_menu"))
single_menu_mode = 1;
}
tcgetattr(1, &ios_org);
atexit(conf_cleanup);
init_wsize();
init_dialog();
signal(SIGWINCH, winch_handler);
conf(&rootmenu);
end_dialog();
/* Restart dialog to act more like when lxdialog was still separate */
init_dialog();
do {
stat = dialog_yesno(NULL,
"Do you wish to save your new uClibc configuration?", 5, 60);
} while (stat < 0);
end_dialog();
if (stat == 0) {
conf_write(NULL);
printf("\n\n"
"*** End of uClibc configuration.\n"
"*** Check the top-level Makefile for additional configuration options.\n\n");
} else
printf("\n\nYour uClibc configuration changes were NOT saved.\n\n");
return 0;
}
+396
View File
@@ -0,0 +1,396 @@
/*
* Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
* Released under the terms of the GNU GPL v2.0.
*/
#include <stdlib.h>
#include <string.h>
#define LKC_DIRECT_LINK
#include "lkc.h"
struct menu rootmenu;
struct menu *current_menu, *current_entry;
static struct menu **last_entry_ptr;
struct file *file_list;
struct file *current_file;
void menu_init(void)
{
current_entry = current_menu = &rootmenu;
last_entry_ptr = &rootmenu.list;
}
void menu_add_entry(struct symbol *sym)
{
struct menu *menu;
menu = malloc(sizeof(*menu));
memset(menu, 0, sizeof(*menu));
menu->sym = sym;
menu->parent = current_menu;
menu->file = current_file;
menu->lineno = zconf_lineno();
*last_entry_ptr = menu;
last_entry_ptr = &menu->next;
current_entry = menu;
}
void menu_end_entry(void)
{
}
void menu_add_menu(void)
{
current_menu = current_entry;
last_entry_ptr = &current_entry->list;
}
void menu_end_menu(void)
{
last_entry_ptr = &current_menu->next;
current_menu = current_menu->parent;
}
struct expr *menu_check_dep(struct expr *e)
{
if (!e)
return e;
switch (e->type) {
case E_NOT:
e->left.expr = menu_check_dep(e->left.expr);
break;
case E_OR:
case E_AND:
e->left.expr = menu_check_dep(e->left.expr);
e->right.expr = menu_check_dep(e->right.expr);
break;
case E_SYMBOL:
/* change 'm' into 'm' && MODULES */
if (e->left.sym == &symbol_mod)
return expr_alloc_and(e, expr_alloc_symbol(modules_sym));
break;
default:
break;
}
return e;
}
void menu_add_dep(struct expr *dep)
{
current_entry->dep = expr_alloc_and(current_entry->dep, menu_check_dep(dep));
}
void menu_set_type(int type)
{
struct symbol *sym = current_entry->sym;
if (sym->type == type)
return;
if (sym->type == S_UNKNOWN) {
sym->type = type;
return;
}
fprintf(stderr, "%s:%d:warning: type of '%s' redefined from '%s' to '%s'\n",
current_entry->file->name, current_entry->lineno,
sym->name ? sym->name : "<choice>", sym_type_name(sym->type), sym_type_name(type));
}
struct property *menu_add_prop(enum prop_type type, char *prompt, struct expr *expr, struct expr *dep)
{
struct property *prop = prop_alloc(type, current_entry->sym);
prop->menu = current_entry;
prop->text = prompt;
prop->expr = expr;
prop->visible.expr = menu_check_dep(dep);
if (prompt) {
if (current_entry->prompt)
fprintf(stderr, "%s:%d: prompt redefined\n",
current_entry->file->name, current_entry->lineno);
current_entry->prompt = prop;
}
return prop;
}
void menu_add_prompt(enum prop_type type, char *prompt, struct expr *dep)
{
menu_add_prop(type, prompt, NULL, dep);
}
void menu_add_expr(enum prop_type type, struct expr *expr, struct expr *dep)
{
menu_add_prop(type, NULL, expr, dep);
}
void menu_add_symbol(enum prop_type type, struct symbol *sym, struct expr *dep)
{
menu_add_prop(type, NULL, expr_alloc_symbol(sym), dep);
}
void menu_finalize(struct menu *parent)
{
struct menu *menu, *last_menu;
struct symbol *sym;
struct property *prop;
struct expr *parentdep, *basedep, *dep, *dep2, **ep;
sym = parent->sym;
if (parent->list) {
if (sym && sym_is_choice(sym)) {
/* find the first choice value and find out choice type */
for (menu = parent->list; menu; menu = menu->next) {
if (menu->sym) {
current_entry = parent;
menu_set_type(menu->sym->type);
current_entry = menu;
menu_set_type(sym->type);
break;
}
}
parentdep = expr_alloc_symbol(sym);
} else if (parent->prompt)
parentdep = parent->prompt->visible.expr;
else
parentdep = parent->dep;
for (menu = parent->list; menu; menu = menu->next) {
basedep = expr_transform(menu->dep);
basedep = expr_alloc_and(expr_copy(parentdep), basedep);
basedep = expr_eliminate_dups(basedep);
menu->dep = basedep;
if (menu->sym)
prop = menu->sym->prop;
else
prop = menu->prompt;
for (; prop; prop = prop->next) {
if (prop->menu != menu)
continue;
dep = expr_transform(prop->visible.expr);
dep = expr_alloc_and(expr_copy(basedep), dep);
dep = expr_eliminate_dups(dep);
if (menu->sym && menu->sym->type != S_TRISTATE)
dep = expr_trans_bool(dep);
prop->visible.expr = dep;
if (prop->type == P_SELECT) {
struct symbol *es = prop_get_symbol(prop);
es->rev_dep.expr = expr_alloc_or(es->rev_dep.expr,
expr_alloc_and(expr_alloc_symbol(menu->sym), expr_copy(dep)));
}
}
}
for (menu = parent->list; menu; menu = menu->next)
menu_finalize(menu);
} else if (sym) {
basedep = parent->prompt ? parent->prompt->visible.expr : NULL;
basedep = expr_trans_compare(basedep, E_UNEQUAL, &symbol_no);
basedep = expr_eliminate_dups(expr_transform(basedep));
last_menu = NULL;
for (menu = parent->next; menu; menu = menu->next) {
dep = menu->prompt ? menu->prompt->visible.expr : menu->dep;
if (!expr_contains_symbol(dep, sym))
break;
if (expr_depends_symbol(dep, sym))
goto next;
dep = expr_trans_compare(dep, E_UNEQUAL, &symbol_no);
dep = expr_eliminate_dups(expr_transform(dep));
dep2 = expr_copy(basedep);
expr_eliminate_eq(&dep, &dep2);
expr_free(dep);
if (!expr_is_yes(dep2)) {
expr_free(dep2);
break;
}
expr_free(dep2);
next:
menu_finalize(menu);
menu->parent = parent;
last_menu = menu;
}
if (last_menu) {
parent->list = parent->next;
parent->next = last_menu->next;
last_menu->next = NULL;
}
}
for (menu = parent->list; menu; menu = menu->next) {
if (sym && sym_is_choice(sym) && menu->sym) {
menu->sym->flags |= SYMBOL_CHOICEVAL;
if (!menu->prompt)
fprintf(stderr, "%s:%d:warning: choice value must have a prompt\n",
menu->file->name, menu->lineno);
for (prop = menu->sym->prop; prop; prop = prop->next) {
if (prop->type == P_PROMPT && prop->menu != menu) {
fprintf(stderr, "%s:%d:warning: choice values currently only support a single prompt\n",
prop->file->name, prop->lineno);
}
if (prop->type == P_DEFAULT)
fprintf(stderr, "%s:%d:warning: defaults for choice values not supported\n",
prop->file->name, prop->lineno);
}
current_entry = menu;
menu_set_type(sym->type);
menu_add_symbol(P_CHOICE, sym, NULL);
prop = sym_get_choice_prop(sym);
for (ep = &prop->expr; *ep; ep = &(*ep)->left.expr)
;
*ep = expr_alloc_one(E_CHOICE, NULL);
(*ep)->right.sym = menu->sym;
}
if (menu->list && (!menu->prompt || !menu->prompt->text)) {
for (last_menu = menu->list; ; last_menu = last_menu->next) {
last_menu->parent = parent;
if (!last_menu->next)
break;
}
last_menu->next = menu->next;
menu->next = menu->list;
menu->list = NULL;
}
}
if (sym && !(sym->flags & SYMBOL_WARNED)) {
struct symbol *sym2;
if (sym->type == S_UNKNOWN)
fprintf(stderr, "%s:%d:warning: config symbol defined without type\n",
parent->file->name, parent->lineno);
if (sym_is_choice(sym) && !parent->prompt)
fprintf(stderr, "%s:%d:warning: choice must have a prompt\n",
parent->file->name, parent->lineno);
for (prop = sym->prop; prop; prop = prop->next) {
switch (prop->type) {
case P_DEFAULT:
if ((sym->type == S_STRING || sym->type == S_INT || sym->type == S_HEX) &&
prop->expr->type != E_SYMBOL)
fprintf(stderr, "%s:%d:warning: default must be a single symbol\n",
prop->file->name, prop->lineno);
break;
case P_SELECT:
sym2 = prop_get_symbol(prop);
if ((sym->type != S_BOOLEAN) || (sym2->type != S_BOOLEAN))
fprintf(stderr, "%s:%d:warning: enable is only allowed with booleans\n",
prop->file->name, prop->lineno);
break;
case P_RANGE:
if (sym->type != S_INT && sym->type != S_HEX)
fprintf(stderr, "%s:%d:warning: range is only allowed for int or hex symbols\n",
prop->file->name, prop->lineno);
if (!sym_string_valid(sym, prop->expr->left.sym->name) ||
!sym_string_valid(sym, prop->expr->right.sym->name))
fprintf(stderr, "%s:%d:warning: range is invalid\n",
prop->file->name, prop->lineno);
break;
default:
;
}
}
sym->flags |= SYMBOL_WARNED;
}
if (sym && !sym_is_optional(sym) && parent->prompt) {
sym->rev_dep.expr = expr_alloc_or(sym->rev_dep.expr,
expr_alloc_and(parent->prompt->visible.expr,
expr_alloc_symbol(&symbol_mod)));
}
}
bool menu_is_visible(struct menu *menu)
{
struct menu *child;
struct symbol *sym;
tristate visible;
if (!menu->prompt)
return false;
sym = menu->sym;
if (sym) {
sym_calc_value(sym);
visible = menu->prompt->visible.tri;
} else
visible = menu->prompt->visible.tri = expr_calc_value(menu->prompt->visible.expr);
if (visible != no)
return true;
if (!sym || sym_get_tristate_value(menu->sym) == no)
return false;
for (child = menu->list; child; child = child->next)
if (menu_is_visible(child))
return true;
return false;
}
const char *menu_get_prompt(struct menu *menu)
{
if (menu->prompt)
return menu->prompt->text;
else if (menu->sym)
return menu->sym->name;
return NULL;
}
struct menu *menu_get_root_menu(struct menu *menu)
{
return &rootmenu;
}
struct menu *menu_get_parent_menu(struct menu *menu)
{
enum prop_type type;
for (; menu != &rootmenu; menu = menu->parent) {
type = menu->prompt ? menu->prompt->type : 0;
if (type == P_MENU)
break;
}
return menu;
}
struct file *file_lookup(const char *name)
{
struct file *file;
for (file = file_list; file; file = file->next) {
if (!strcmp(name, file->name))
return file;
}
file = malloc(sizeof(*file));
memset(file, 0, sizeof(*file));
file->name = strdup(name);
file->next = file_list;
file_list = file;
return file;
}
int file_write_dep(const char *name)
{
struct file *file;
FILE *out;
if (!name)
name = ".config.cmd";
out = fopen(".config.tmp", "w");
if (!out)
return 1;
fprintf(out, "deps_config := \\\n");
for (file = file_list; file; file = file->next) {
if (file->next)
fprintf(out, "\t%s \\\n", file->name);
else
fprintf(out, "\t%s\n", file->name);
}
fprintf(out, "\n.config include/system_configuration.h: $(deps_config)\n\n$(deps_config):\n");
fclose(out);
rename(".config.tmp", name);
return 0;
}
+436
View File
@@ -0,0 +1,436 @@
/*
* menubox.c -- implements the menu box
*
* ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk)
* MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcapw@cfw.com)
*
* 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., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/*
* Changes by Clifford Wolf (god@clifford.at)
*
* [ 1998-06-13 ]
*
* *) A bugfix for the Page-Down problem
*
* *) Formerly when I used Page Down and Page Up, the cursor would be set
* to the first position in the menu box. Now lxdialog is a bit
* smarter and works more like other menu systems (just have a look at
* it).
*
* *) Formerly if I selected something my scrolling would be broken because
* lxdialog is re-invoked by the Menuconfig shell script, can't
* remember the last scrolling position, and just sets it so that the
* cursor is at the bottom of the box. Now it writes the temporary file
* lxdialog.scrltmp which contains this information. The file is
* deleted by lxdialog if the user leaves a submenu or enters a new
* one, but it would be nice if Menuconfig could make another "rm -f"
* just to be sure. Just try it out - you will recognise a difference!
*
* [ 1998-06-14 ]
*
* *) Now lxdialog is crash-safe against broken "lxdialog.scrltmp" files
* and menus change their size on the fly.
*
* *) If for some reason the last scrolling position is not saved by
* lxdialog, it sets the scrolling so that the selected item is in the
* middle of the menu box, not at the bottom.
*
* 02 January 1999, Michael Elizabeth Chastain (mec@shout.net)
* Reset 'scroll' to 0 if the value from lxdialog.scrltmp is bogus.
* This fixes a bug in Menuconfig where using ' ' to descend into menus
* would leave mis-synchronized lxdialog.scrltmp files lying around,
* fscanf would read in 'scroll', and eventually that value would get used.
*/
#include "dialog.h"
static int menu_width, item_x;
/*
* Print menu item
*/
static void
print_item (WINDOW * win, const char *item, int choice, int selected, int hotkey)
{
int j;
char menu_item[menu_width+1];
strncpy(menu_item, item, menu_width);
menu_item[menu_width] = 0;
j = first_alpha(menu_item, "YyNnMm");
/* Clear 'residue' of last item */
wattrset (win, menubox_attr);
wmove (win, choice, 0);
#if OLD_NCURSES
{
int i;
for (i = 0; i < menu_width; i++)
waddch (win, ' ');
}
#else
wclrtoeol(win);
#endif
wattrset (win, selected ? item_selected_attr : item_attr);
mvwaddstr (win, choice, item_x, menu_item);
if (hotkey) {
wattrset (win, selected ? tag_key_selected_attr : tag_key_attr);
mvwaddch(win, choice, item_x+j, menu_item[j]);
}
if (selected) {
wmove (win, choice, item_x+1);
wrefresh (win);
}
}
/*
* Print the scroll indicators.
*/
static void
print_arrows (WINDOW * win, int item_no, int scroll,
int y, int x, int height)
{
int cur_y, cur_x;
getyx(win, cur_y, cur_x);
wmove(win, y, x);
if (scroll > 0) {
wattrset (win, uarrow_attr);
waddch (win, ACS_UARROW);
waddstr (win, "(-)");
}
else {
wattrset (win, menubox_attr);
waddch (win, ACS_HLINE);
waddch (win, ACS_HLINE);
waddch (win, ACS_HLINE);
waddch (win, ACS_HLINE);
}
y = y + height + 1;
wmove(win, y, x);
if ((height < item_no) && (scroll + height < item_no)) {
wattrset (win, darrow_attr);
waddch (win, ACS_DARROW);
waddstr (win, "(+)");
}
else {
wattrset (win, menubox_border_attr);
waddch (win, ACS_HLINE);
waddch (win, ACS_HLINE);
waddch (win, ACS_HLINE);
waddch (win, ACS_HLINE);
}
wmove(win, cur_y, cur_x);
}
/*
* Display the termination buttons.
*/
static void
print_buttons (WINDOW *win, int height, int width, int selected)
{
int x = width / 2 - 16;
int y = height - 2;
print_button (win, "Select", y, x, selected == 0);
print_button (win, " Exit ", y, x + 12, selected == 1);
print_button (win, " Help ", y, x + 24, selected == 2);
wmove(win, y, x+1+12*selected);
wrefresh (win);
}
/*
* Display a menu for choosing among a number of options
*/
int
dialog_menu (const char *title, const char *prompt, int height, int width,
int menu_height, const char *current, int item_no,
struct dialog_list_item ** items)
{
int i, j, x, y, box_x, box_y;
int key = 0, button = 0, scroll = 0, choice = 0, first_item = 0, max_choice;
WINDOW *dialog, *menu;
FILE *f;
max_choice = MIN (menu_height, item_no);
/* center dialog box on screen */
x = (COLS - width) / 2;
y = (LINES - height) / 2;
draw_shadow (stdscr, y, x, height, width);
dialog = newwin (height, width, y, x);
keypad (dialog, TRUE);
draw_box (dialog, 0, 0, height, width, dialog_attr, border_attr);
wattrset (dialog, border_attr);
mvwaddch (dialog, height - 3, 0, ACS_LTEE);
for (i = 0; i < width - 2; i++)
waddch (dialog, ACS_HLINE);
wattrset (dialog, dialog_attr);
wbkgdset (dialog, dialog_attr & A_COLOR);
waddch (dialog, ACS_RTEE);
if (title != NULL && strlen(title) >= width-2 ) {
/* truncate long title -- mec */
char * title2 = malloc(width-2+1);
memcpy( title2, title, width-2 );
title2[width-2] = '\0';
title = title2;
}
if (title != NULL) {
wattrset (dialog, title_attr);
mvwaddch (dialog, 0, (width - strlen(title))/2 - 1, ' ');
waddstr (dialog, (char *)title);
waddch (dialog, ' ');
}
wattrset (dialog, dialog_attr);
print_autowrap (dialog, prompt, width - 2, 1, 3);
menu_width = width - 6;
box_y = height - menu_height - 5;
box_x = (width - menu_width) / 2 - 1;
/* create new window for the menu */
menu = subwin (dialog, menu_height, menu_width,
y + box_y + 1, x + box_x + 1);
keypad (menu, TRUE);
/* draw a box around the menu items */
draw_box (dialog, box_y, box_x, menu_height + 2, menu_width + 2,
menubox_border_attr, menubox_attr);
/*
* Find length of longest item in order to center menu.
* Set 'choice' to default item.
*/
item_x = 0;
for (i = 0; i < item_no; i++) {
item_x = MAX (item_x, MIN(menu_width, strlen (items[i]->name) + 2));
if (strcmp(current, items[i]->tag) == 0) choice = i;
}
item_x = (menu_width - item_x) / 2;
/* get the scroll info from the temp file */
if ( (f=fopen("lxdialog.scrltmp","r")) != NULL ) {
if ( (fscanf(f,"%d\n",&scroll) == 1) && (scroll <= choice) &&
(scroll+max_choice > choice) && (scroll >= 0) &&
(scroll+max_choice <= item_no) ) {
first_item = scroll;
choice = choice - scroll;
fclose(f);
} else {
scroll=0;
remove("lxdialog.scrltmp");
fclose(f);
f=NULL;
}
}
if ( (choice >= max_choice) || (f==NULL && choice >= max_choice/2) ) {
if (choice >= item_no-max_choice/2)
scroll = first_item = item_no-max_choice;
else
scroll = first_item = choice - max_choice/2;
choice = choice - scroll;
}
/* Print the menu */
for (i=0; i < max_choice; i++) {
print_item (menu, items[first_item + i]->name, i, i == choice,
(items[first_item + i]->tag[0] != ':'));
}
wnoutrefresh (menu);
print_arrows(dialog, item_no, scroll,
box_y, box_x+item_x+1, menu_height);
print_buttons (dialog, height, width, 0);
wmove (menu, choice, item_x+1);
wrefresh (menu);
while (key != ESC) {
key = wgetch(menu);
if (key < 256 && isalpha(key)) key = tolower(key);
if (strchr("ynm", key))
i = max_choice;
else {
for (i = choice+1; i < max_choice; i++) {
j = first_alpha(items[scroll + i]->name, "YyNnMm>");
if (key == tolower(items[scroll + i]->name[j]))
break;
}
if (i == max_choice)
for (i = 0; i < max_choice; i++) {
j = first_alpha(items[scroll + i]->name, "YyNnMm>");
if (key == tolower(items[scroll + i]->name[j]))
break;
}
}
if (i < max_choice ||
key == KEY_UP || key == KEY_DOWN ||
key == '-' || key == '+' ||
key == KEY_PPAGE || key == KEY_NPAGE) {
print_item (menu, items[scroll + choice]->name, choice, FALSE,
(items[scroll + choice]->tag[0] != ':'));
if (key == KEY_UP || key == '-') {
if (choice < 2 && scroll) {
/* Scroll menu down */
scrollok (menu, TRUE);
wscrl (menu, -1);
scrollok (menu, FALSE);
scroll--;
print_item (menu, items[scroll]->name, 0, FALSE,
(items[scroll]->tag[0] != ':'));
} else
choice = MAX(choice - 1, 0);
} else if (key == KEY_DOWN || key == '+') {
print_item (menu, items[scroll + choice]->name, choice, FALSE,
(items[scroll + choice]->tag[0] != ':'));
if ((choice > max_choice-3) &&
(scroll + max_choice < item_no)
) {
/* Scroll menu up */
scrollok (menu, TRUE);
scroll (menu);
scrollok (menu, FALSE);
scroll++;
print_item (menu, items[scroll + max_choice - 1]->name,
max_choice-1, FALSE,
(items[scroll + max_choice - 1]->tag[0] != ':'));
} else
choice = MIN(choice+1, max_choice-1);
} else if (key == KEY_PPAGE) {
scrollok (menu, TRUE);
for (i=0; (i < max_choice); i++) {
if (scroll > 0) {
wscrl (menu, -1);
scroll--;
print_item (menu, items[scroll]->name, 0, FALSE,
(items[scroll]->tag[0] != ':'));
} else {
if (choice > 0)
choice--;
}
}
scrollok (menu, FALSE);
} else if (key == KEY_NPAGE) {
for (i=0; (i < max_choice); i++) {
if (scroll+max_choice < item_no) {
scrollok (menu, TRUE);
scroll(menu);
scrollok (menu, FALSE);
scroll++;
print_item (menu, items[scroll + max_choice - 1]->name,
max_choice-1, FALSE,
(items[scroll + max_choice - 1]->tag[0] != ':'));
} else {
if (choice+1 < max_choice)
choice++;
}
}
} else
choice = i;
print_item (menu, items[scroll + choice]->name, choice, TRUE,
(items[scroll + choice]->tag[0] != ':'));
print_arrows(dialog, item_no, scroll,
box_y, box_x+item_x+1, menu_height);
wnoutrefresh (dialog);
wrefresh (menu);
continue; /* wait for another key press */
}
switch (key) {
case KEY_LEFT:
case TAB:
case KEY_RIGHT:
button = ((key == KEY_LEFT ? --button : ++button) < 0)
? 2 : (button > 2 ? 0 : button);
print_buttons(dialog, height, width, button);
wrefresh (menu);
break;
case ' ':
case 's':
case 'y':
case 'n':
case 'm':
/* save scroll info */
if ( (f=fopen("lxdialog.scrltmp","w")) != NULL ) {
fprintf(f,"%d\n",scroll);
fclose(f);
}
delwin (dialog);
items[scroll + choice]->selected = 1;
switch (key) {
case 's': return 3;
case 'y': return 3;
case 'n': return 4;
case 'm': return 5;
case ' ': return 6;
}
return 0;
case 'h':
case '?':
button = 2;
case '\n':
delwin (dialog);
items[scroll + choice]->selected = 1;
remove("lxdialog.scrltmp");
return button;
case 'e':
case 'x':
key = ESC;
case ESC:
break;
}
}
delwin (dialog);
remove("lxdialog.scrltmp");
return -1; /* ESC pressed */
}
+85
View File
@@ -0,0 +1,85 @@
/*
* msgbox.c -- implements the message box and info box
*
* ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk)
* MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcapw@cfw.com)
*
* 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., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include "dialog.h"
/*
* Display a message box. Program will pause and display an "OK" button
* if the parameter 'pause' is non-zero.
*/
int
dialog_msgbox (const char *title, const char *prompt, int height, int width,
int pause)
{
int i, x, y, key = 0;
WINDOW *dialog;
/* center dialog box on screen */
x = (COLS - width) / 2;
y = (LINES - height) / 2;
draw_shadow (stdscr, y, x, height, width);
dialog = newwin (height, width, y, x);
keypad (dialog, TRUE);
draw_box (dialog, 0, 0, height, width, dialog_attr, border_attr);
if (title != NULL && strlen(title) >= width-2 ) {
/* truncate long title -- mec */
char * title2 = malloc(width-2+1);
memcpy( title2, title, width-2 );
title2[width-2] = '\0';
title = title2;
}
if (title != NULL) {
wattrset (dialog, title_attr);
mvwaddch (dialog, 0, (width - strlen(title))/2 - 1, ' ');
waddstr (dialog, (char *)title);
waddch (dialog, ' ');
}
wattrset (dialog, dialog_attr);
print_autowrap (dialog, prompt, width - 2, 1, 2);
if (pause) {
wattrset (dialog, border_attr);
mvwaddch (dialog, height - 3, 0, ACS_LTEE);
for (i = 0; i < width - 2; i++)
waddch (dialog, ACS_HLINE);
wattrset (dialog, dialog_attr);
waddch (dialog, ACS_RTEE);
print_button (dialog, " Ok ",
height - 2, width / 2 - 4, TRUE);
wrefresh (dialog);
while (key != ESC && key != '\n' && key != ' ' &&
key != 'O' && key != 'o' && key != 'X' && key != 'x')
key = wgetch (dialog);
} else {
key = '\n';
wrefresh (dialog);
}
delwin (dialog);
return key == ESC ? -1 : 0;
}
+763
View File
@@ -0,0 +1,763 @@
/*
* Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
* Released under the terms of the GNU GPL v2.0.
*/
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
#include <sys/utsname.h>
#define LKC_DIRECT_LINK
#include "lkc.h"
struct symbol symbol_yes = {
name: "y",
curr: { "y", yes },
flags: SYMBOL_YES|SYMBOL_VALID,
}, symbol_mod = {
name: "m",
curr: { "m", mod },
flags: SYMBOL_MOD|SYMBOL_VALID,
}, symbol_no = {
name: "n",
curr: { "n", no },
flags: SYMBOL_NO|SYMBOL_VALID,
}, symbol_empty = {
name: "",
curr: { "", no },
flags: SYMBOL_VALID,
};
int sym_change_count;
struct symbol *modules_sym;
void sym_add_default(struct symbol *sym, const char *def)
{
struct property *prop = prop_alloc(P_DEFAULT, sym);
prop->expr = expr_alloc_symbol(sym_lookup(def, 1));
}
void sym_init(void)
{
struct symbol *sym;
char *p;
static bool inited = false;
if (inited)
return;
inited = true;
sym = sym_lookup("VERSION", 0);
sym->type = S_STRING;
sym->flags |= SYMBOL_AUTO;
p = getenv("VERSION");
if (p)
sym_add_default(sym, p);
}
enum symbol_type sym_get_type(struct symbol *sym)
{
enum symbol_type type = sym->type;
if (type == S_TRISTATE) {
if (sym_is_choice_value(sym) && sym->visible == yes)
type = S_BOOLEAN;
else {
sym_calc_value(modules_sym);
if (modules_sym->curr.tri == no)
type = S_BOOLEAN;
}
}
return type;
}
const char *sym_type_name(enum symbol_type type)
{
switch (type) {
case S_BOOLEAN:
return "boolean";
case S_TRISTATE:
return "tristate";
case S_INT:
return "integer";
case S_HEX:
return "hex";
case S_STRING:
return "string";
case S_UNKNOWN:
return "unknown";
case S_OTHER:
break;
}
return "???";
}
struct property *sym_get_choice_prop(struct symbol *sym)
{
struct property *prop;
for_all_choices(sym, prop)
return prop;
return NULL;
}
struct property *sym_get_default_prop(struct symbol *sym)
{
struct property *prop;
for_all_defaults(sym, prop) {
prop->visible.tri = expr_calc_value(prop->visible.expr);
if (prop->visible.tri != no)
return prop;
}
return NULL;
}
struct property *sym_get_range_prop(struct symbol *sym)
{
struct property *prop;
for_all_properties(sym, prop, P_RANGE) {
prop->visible.tri = expr_calc_value(prop->visible.expr);
if (prop->visible.tri != no)
return prop;
}
return NULL;
}
static void sym_calc_visibility(struct symbol *sym)
{
struct property *prop;
tristate tri;
/* any prompt visible? */
tri = no;
for_all_prompts(sym, prop) {
prop->visible.tri = expr_calc_value(prop->visible.expr);
tri = E_OR(tri, prop->visible.tri);
}
if (sym->visible != tri) {
sym->visible = tri;
sym_set_changed(sym);
}
if (sym_is_choice_value(sym))
return;
tri = no;
if (sym->rev_dep.expr)
tri = expr_calc_value(sym->rev_dep.expr);
if (sym->rev_dep.tri != tri) {
sym->rev_dep.tri = tri;
sym_set_changed(sym);
}
}
static struct symbol *sym_calc_choice(struct symbol *sym)
{
struct symbol *def_sym;
struct property *prop;
struct expr *e;
/* is the user choice visible? */
def_sym = sym->user.val;
if (def_sym) {
sym_calc_visibility(def_sym);
if (def_sym->visible != no)
return def_sym;
}
/* any of the defaults visible? */
for_all_defaults(sym, prop) {
prop->visible.tri = expr_calc_value(prop->visible.expr);
if (prop->visible.tri == no)
continue;
def_sym = prop_get_symbol(prop);
sym_calc_visibility(def_sym);
if (def_sym->visible != no)
return def_sym;
}
/* just get the first visible value */
prop = sym_get_choice_prop(sym);
for (e = prop->expr; e; e = e->left.expr) {
def_sym = e->right.sym;
sym_calc_visibility(def_sym);
if (def_sym->visible != no)
return def_sym;
}
/* no choice? reset tristate value */
sym->curr.tri = no;
return NULL;
}
void sym_calc_value(struct symbol *sym)
{
struct symbol_value newval, oldval;
struct property *prop;
struct expr *e;
if (!sym)
return;
if (sym->flags & SYMBOL_VALID)
return;
sym->flags |= SYMBOL_VALID;
oldval = sym->curr;
switch (sym->type) {
case S_INT:
case S_HEX:
case S_STRING:
newval = symbol_empty.curr;
break;
case S_BOOLEAN:
case S_TRISTATE:
newval = symbol_no.curr;
break;
default:
sym->curr.val = sym->name;
sym->curr.tri = no;
return;
}
if (!sym_is_choice_value(sym))
sym->flags &= ~SYMBOL_WRITE;
sym_calc_visibility(sym);
/* set default if recursively called */
sym->curr = newval;
switch (sym_get_type(sym)) {
case S_BOOLEAN:
case S_TRISTATE:
if (sym_is_choice_value(sym) && sym->visible == yes) {
prop = sym_get_choice_prop(sym);
newval.tri = (prop_get_symbol(prop)->curr.val == sym) ? yes : no;
} else if (E_OR(sym->visible, sym->rev_dep.tri) != no) {
sym->flags |= SYMBOL_WRITE;
if (sym_has_value(sym))
newval.tri = sym->user.tri;
else if (!sym_is_choice(sym)) {
prop = sym_get_default_prop(sym);
if (prop)
newval.tri = expr_calc_value(prop->expr);
}
newval.tri = E_OR(E_AND(newval.tri, sym->visible), sym->rev_dep.tri);
} else if (!sym_is_choice(sym)) {
prop = sym_get_default_prop(sym);
if (prop) {
sym->flags |= SYMBOL_WRITE;
newval.tri = expr_calc_value(prop->expr);
}
}
if (sym_get_type(sym) == S_BOOLEAN) {
if (newval.tri == mod)
newval.tri = yes;
if (sym->visible == mod)
sym->visible = yes;
if (sym->rev_dep.tri == mod)
sym->rev_dep.tri = yes;
}
break;
case S_STRING:
case S_HEX:
case S_INT:
if (sym->visible != no) {
sym->flags |= SYMBOL_WRITE;
if (sym_has_value(sym)) {
newval.val = sym->user.val;
break;
}
}
prop = sym_get_default_prop(sym);
if (prop) {
struct symbol *ds = prop_get_symbol(prop);
if (ds) {
sym->flags |= SYMBOL_WRITE;
sym_calc_value(ds);
newval.val = ds->curr.val;
}
}
break;
default:
;
}
sym->curr = newval;
if (sym_is_choice(sym) && newval.tri == yes)
sym->curr.val = sym_calc_choice(sym);
if (memcmp(&oldval, &sym->curr, sizeof(oldval)))
sym_set_changed(sym);
if (sym_is_choice(sym)) {
int flags = sym->flags & (SYMBOL_CHANGED | SYMBOL_WRITE);
prop = sym_get_choice_prop(sym);
for (e = prop->expr; e; e = e->left.expr) {
e->right.sym->flags |= flags;
if (flags & SYMBOL_CHANGED)
sym_set_changed(e->right.sym);
}
}
}
void sym_clear_all_valid(void)
{
struct symbol *sym;
int i;
for_all_symbols(i, sym)
sym->flags &= ~SYMBOL_VALID;
sym_change_count++;
}
void sym_set_changed(struct symbol *sym)
{
struct property *prop;
sym->flags |= SYMBOL_CHANGED;
for (prop = sym->prop; prop; prop = prop->next) {
if (prop->menu)
prop->menu->flags |= MENU_CHANGED;
}
}
void sym_set_all_changed(void)
{
struct symbol *sym;
int i;
for_all_symbols(i, sym)
sym_set_changed(sym);
}
bool sym_tristate_within_range(struct symbol *sym, tristate val)
{
int type = sym_get_type(sym);
if (sym->visible == no)
return false;
if (type != S_BOOLEAN && type != S_TRISTATE)
return false;
if (type == S_BOOLEAN && val == mod)
return false;
if (sym->visible <= sym->rev_dep.tri)
return false;
if (sym_is_choice_value(sym) && sym->visible == yes)
return val == yes;
return val >= sym->rev_dep.tri && val <= sym->visible;
}
bool sym_set_tristate_value(struct symbol *sym, tristate val)
{
tristate oldval = sym_get_tristate_value(sym);
if (oldval != val && !sym_tristate_within_range(sym, val))
return false;
if (sym->flags & SYMBOL_NEW) {
sym->flags &= ~SYMBOL_NEW;
sym_set_changed(sym);
}
if (sym_is_choice_value(sym) && val == yes) {
struct symbol *cs = prop_get_symbol(sym_get_choice_prop(sym));
cs->user.val = sym;
cs->flags &= ~SYMBOL_NEW;
}
sym->user.tri = val;
if (oldval != val) {
sym_clear_all_valid();
if (sym == modules_sym)
sym_set_all_changed();
}
return true;
}
tristate sym_toggle_tristate_value(struct symbol *sym)
{
tristate oldval, newval;
oldval = newval = sym_get_tristate_value(sym);
do {
switch (newval) {
case no:
newval = mod;
break;
case mod:
newval = yes;
break;
case yes:
newval = no;
break;
}
if (sym_set_tristate_value(sym, newval))
break;
} while (oldval != newval);
return newval;
}
bool sym_string_valid(struct symbol *sym, const char *str)
{
char ch;
switch (sym->type) {
case S_STRING:
return true;
case S_INT:
ch = *str++;
if (ch == '-')
ch = *str++;
if (!isdigit(ch))
return false;
if (ch == '0' && *str != 0)
return false;
while ((ch = *str++)) {
if (!isdigit(ch))
return false;
}
return true;
case S_HEX:
if (str[0] == '0' && (str[1] == 'x' || str[1] == 'X'))
str += 2;
ch = *str++;
do {
if (!isxdigit(ch))
return false;
} while ((ch = *str++));
return true;
case S_BOOLEAN:
case S_TRISTATE:
switch (str[0]) {
case 'y': case 'Y':
case 'm': case 'M':
case 'n': case 'N':
return true;
}
return false;
default:
return false;
}
}
bool sym_string_within_range(struct symbol *sym, const char *str)
{
struct property *prop;
int val;
switch (sym->type) {
case S_STRING:
return sym_string_valid(sym, str);
case S_INT:
if (!sym_string_valid(sym, str))
return false;
prop = sym_get_range_prop(sym);
if (!prop)
return true;
val = strtol(str, NULL, 10);
return val >= strtol(prop->expr->left.sym->name, NULL, 10) &&
val <= strtol(prop->expr->right.sym->name, NULL, 10);
case S_HEX:
if (!sym_string_valid(sym, str))
return false;
prop = sym_get_range_prop(sym);
if (!prop)
return true;
val = strtol(str, NULL, 16);
return val >= strtol(prop->expr->left.sym->name, NULL, 16) &&
val <= strtol(prop->expr->right.sym->name, NULL, 16);
case S_BOOLEAN:
case S_TRISTATE:
switch (str[0]) {
case 'y': case 'Y':
return sym_tristate_within_range(sym, yes);
case 'm': case 'M':
return sym_tristate_within_range(sym, mod);
case 'n': case 'N':
return sym_tristate_within_range(sym, no);
}
return false;
default:
return false;
}
}
bool sym_set_string_value(struct symbol *sym, const char *newval)
{
const char *oldval;
char *val;
int size;
switch (sym->type) {
case S_BOOLEAN:
case S_TRISTATE:
switch (newval[0]) {
case 'y': case 'Y':
return sym_set_tristate_value(sym, yes);
case 'm': case 'M':
return sym_set_tristate_value(sym, mod);
case 'n': case 'N':
return sym_set_tristate_value(sym, no);
}
return false;
default:
;
}
if (!sym_string_within_range(sym, newval))
return false;
if (sym->flags & SYMBOL_NEW) {
sym->flags &= ~SYMBOL_NEW;
sym_set_changed(sym);
}
oldval = sym->user.val;
size = strlen(newval) + 1;
if (sym->type == S_HEX && (newval[0] != '0' || (newval[1] != 'x' && newval[1] != 'X'))) {
size += 2;
sym->user.val = val = malloc(size);
*val++ = '0';
*val++ = 'x';
} else if (!oldval || strcmp(oldval, newval))
sym->user.val = val = malloc(size);
else
return true;
strcpy(val, newval);
free((void *)oldval);
sym_clear_all_valid();
return true;
}
const char *sym_get_string_value(struct symbol *sym)
{
tristate val;
switch (sym->type) {
case S_BOOLEAN:
case S_TRISTATE:
val = sym_get_tristate_value(sym);
switch (val) {
case no:
return "n";
case mod:
return "m";
case yes:
return "y";
}
break;
default:
;
}
return (const char *)sym->curr.val;
}
bool sym_is_changable(struct symbol *sym)
{
return sym->visible > sym->rev_dep.tri;
}
struct symbol *sym_lookup(const char *name, int isconst)
{
struct symbol *symbol;
const char *ptr;
char *new_name;
int hash = 0;
if (name) {
if (name[0] && !name[1]) {
switch (name[0]) {
case 'y': return &symbol_yes;
case 'm': return &symbol_mod;
case 'n': return &symbol_no;
}
}
for (ptr = name; *ptr; ptr++)
hash += *ptr;
hash &= 0xff;
for (symbol = symbol_hash[hash]; symbol; symbol = symbol->next) {
if (!strcmp(symbol->name, name)) {
if ((isconst && symbol->flags & SYMBOL_CONST) ||
(!isconst && !(symbol->flags & SYMBOL_CONST)))
return symbol;
}
}
new_name = strdup(name);
} else {
new_name = NULL;
hash = 256;
}
symbol = malloc(sizeof(*symbol));
memset(symbol, 0, sizeof(*symbol));
symbol->name = new_name;
symbol->type = S_UNKNOWN;
symbol->flags = SYMBOL_NEW;
if (isconst)
symbol->flags |= SYMBOL_CONST;
symbol->next = symbol_hash[hash];
symbol_hash[hash] = symbol;
return symbol;
}
struct symbol *sym_find(const char *name)
{
struct symbol *symbol = NULL;
const char *ptr;
int hash = 0;
if (!name)
return NULL;
if (name[0] && !name[1]) {
switch (name[0]) {
case 'y': return &symbol_yes;
case 'm': return &symbol_mod;
case 'n': return &symbol_no;
}
}
for (ptr = name; *ptr; ptr++)
hash += *ptr;
hash &= 0xff;
for (symbol = symbol_hash[hash]; symbol; symbol = symbol->next) {
if (!strcmp(symbol->name, name) &&
!(symbol->flags & SYMBOL_CONST))
break;
}
return symbol;
}
struct symbol *sym_check_deps(struct symbol *sym);
static struct symbol *sym_check_expr_deps(struct expr *e)
{
struct symbol *sym;
if (!e)
return NULL;
switch (e->type) {
case E_OR:
case E_AND:
sym = sym_check_expr_deps(e->left.expr);
if (sym)
return sym;
return sym_check_expr_deps(e->right.expr);
case E_NOT:
return sym_check_expr_deps(e->left.expr);
case E_EQUAL:
case E_UNEQUAL:
sym = sym_check_deps(e->left.sym);
if (sym)
return sym;
return sym_check_deps(e->right.sym);
case E_SYMBOL:
return sym_check_deps(e->left.sym);
default:
break;
}
printf("Oops! How to check %d?\n", e->type);
return NULL;
}
struct symbol *sym_check_deps(struct symbol *sym)
{
struct symbol *sym2;
struct property *prop;
if (sym->flags & SYMBOL_CHECK_DONE)
return NULL;
if (sym->flags & SYMBOL_CHECK) {
printf("Warning! Found recursive dependency: %s", sym->name);
return sym;
}
sym->flags |= (SYMBOL_CHECK | SYMBOL_CHECKED);
sym2 = sym_check_expr_deps(sym->rev_dep.expr);
if (sym2)
goto out;
for (prop = sym->prop; prop; prop = prop->next) {
if (prop->type == P_CHOICE)
continue;
sym2 = sym_check_expr_deps(prop->visible.expr);
if (sym2)
goto out;
if (prop->type != P_DEFAULT || sym_is_choice(sym))
continue;
sym2 = sym_check_expr_deps(prop->expr);
if (sym2)
goto out;
}
out:
if (sym2)
printf(" %s", sym->name);
sym->flags &= ~SYMBOL_CHECK;
return sym2;
}
struct property *prop_alloc(enum prop_type type, struct symbol *sym)
{
struct property *prop;
struct property **propp;
prop = malloc(sizeof(*prop));
memset(prop, 0, sizeof(*prop));
prop->type = type;
prop->sym = sym;
prop->file = current_file;
prop->lineno = zconf_lineno();
/* append property to the prop list of symbol */
if (sym) {
for (propp = &sym->prop; *propp; propp = &(*propp)->next)
;
*propp = prop;
}
return prop;
}
struct symbol *prop_get_symbol(struct property *prop)
{
if (prop->expr && (prop->expr->type == E_SYMBOL ||
prop->expr->type == E_CHOICE))
return prop->expr->left.sym;
return NULL;
}
const char *prop_get_type_name(enum prop_type type)
{
switch (type) {
case P_PROMPT:
return "prompt";
case P_COMMENT:
return "comment";
case P_MENU:
return "menu";
case P_DEFAULT:
return "default";
case P_CHOICE:
return "choice";
case P_SELECT:
return "select";
case P_RANGE:
return "range";
case P_UNKNOWN:
break;
}
return "unknown";
}
+556
View File
@@ -0,0 +1,556 @@
/*
* textbox.c -- implements the text box
*
* ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk)
* MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcap@cfw.com)
*
* 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., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include "dialog.h"
static void back_lines (int n);
static void print_page (WINDOW * win, int height, int width);
static void print_line (WINDOW * win, int row, int width);
static char *get_line (void);
static void print_position (WINDOW * win, int height, int width);
static int hscroll = 0, fd, file_size, bytes_read;
static int begin_reached = 1, end_reached = 0, page_length;
static char *buf, *page;
/*
* Display text from a file in a dialog box.
*/
int
dialog_textbox (const char *title, const char *file, int height, int width)
{
int i, x, y, cur_x, cur_y, fpos, key = 0;
int passed_end;
char search_term[MAX_LEN + 1];
WINDOW *dialog, *text;
search_term[0] = '\0'; /* no search term entered yet */
/* Open input file for reading */
if ((fd = open (file, O_RDONLY)) == -1) {
endwin ();
fprintf (stderr,
"\nCan't open input file in dialog_textbox().\n");
exit (-1);
}
/* Get file size. Actually, 'file_size' is the real file size - 1,
since it's only the last byte offset from the beginning */
if ((file_size = lseek (fd, 0, SEEK_END)) == -1) {
endwin ();
fprintf (stderr, "\nError getting file size in dialog_textbox().\n");
exit (-1);
}
/* Restore file pointer to beginning of file after getting file size */
if (lseek (fd, 0, SEEK_SET) == -1) {
endwin ();
fprintf (stderr, "\nError moving file pointer in dialog_textbox().\n");
exit (-1);
}
/* Allocate space for read buffer */
if ((buf = malloc (BUF_SIZE + 1)) == NULL) {
endwin ();
fprintf (stderr, "\nCan't allocate memory in dialog_textbox().\n");
exit (-1);
}
if ((bytes_read = read (fd, buf, BUF_SIZE)) == -1) {
endwin ();
fprintf (stderr, "\nError reading file in dialog_textbox().\n");
exit (-1);
}
buf[bytes_read] = '\0'; /* mark end of valid data */
page = buf; /* page is pointer to start of page to be displayed */
/* center dialog box on screen */
x = (COLS - width) / 2;
y = (LINES - height) / 2;
draw_shadow (stdscr, y, x, height, width);
dialog = newwin (height, width, y, x);
keypad (dialog, TRUE);
/* Create window for text region, used for scrolling text */
text = subwin (dialog, height - 4, width - 2, y + 1, x + 1);
wattrset (text, dialog_attr);
wbkgdset (text, dialog_attr & A_COLOR);
keypad (text, TRUE);
/* register the new window, along with its borders */
draw_box (dialog, 0, 0, height, width, dialog_attr, border_attr);
wattrset (dialog, border_attr);
mvwaddch (dialog, height-3, 0, ACS_LTEE);
for (i = 0; i < width - 2; i++)
waddch (dialog, ACS_HLINE);
wattrset (dialog, dialog_attr);
wbkgdset (dialog, dialog_attr & A_COLOR);
waddch (dialog, ACS_RTEE);
if (title != NULL && strlen(title) >= width-2 ) {
/* truncate long title -- mec */
char * title2 = malloc(width-2+1);
memcpy( title2, title, width-2 );
title2[width-2] = '\0';
title = title2;
}
if (title != NULL) {
wattrset (dialog, title_attr);
mvwaddch (dialog, 0, (width - strlen(title))/2 - 1, ' ');
waddstr (dialog, (char *)title);
waddch (dialog, ' ');
}
print_button (dialog, " Exit ", height - 2, width / 2 - 4, TRUE);
wnoutrefresh (dialog);
getyx (dialog, cur_y, cur_x); /* Save cursor position */
/* Print first page of text */
attr_clear (text, height - 4, width - 2, dialog_attr);
print_page (text, height - 4, width - 2);
print_position (dialog, height, width);
wmove (dialog, cur_y, cur_x); /* Restore cursor position */
wrefresh (dialog);
while ((key != ESC) && (key != '\n')) {
key = wgetch (dialog);
switch (key) {
case 'E': /* Exit */
case 'e':
case 'X':
case 'x':
delwin (dialog);
free (buf);
close (fd);
return 0;
case 'g': /* First page */
case KEY_HOME:
if (!begin_reached) {
begin_reached = 1;
/* First page not in buffer? */
if ((fpos = lseek (fd, 0, SEEK_CUR)) == -1) {
endwin ();
fprintf (stderr,
"\nError moving file pointer in dialog_textbox().\n");
exit (-1);
}
if (fpos > bytes_read) { /* Yes, we have to read it in */
if (lseek (fd, 0, SEEK_SET) == -1) {
endwin ();
fprintf (stderr, "\nError moving file pointer in "
"dialog_textbox().\n");
exit (-1);
}
if ((bytes_read = read (fd, buf, BUF_SIZE)) == -1) {
endwin ();
fprintf (stderr,
"\nError reading file in dialog_textbox().\n");
exit (-1);
}
buf[bytes_read] = '\0';
}
page = buf;
print_page (text, height - 4, width - 2);
print_position (dialog, height, width);
wmove (dialog, cur_y, cur_x); /* Restore cursor position */
wrefresh (dialog);
}
break;
case 'G': /* Last page */
case KEY_END:
end_reached = 1;
/* Last page not in buffer? */
if ((fpos = lseek (fd, 0, SEEK_CUR)) == -1) {
endwin ();
fprintf (stderr,
"\nError moving file pointer in dialog_textbox().\n");
exit (-1);
}
if (fpos < file_size) { /* Yes, we have to read it in */
if (lseek (fd, -BUF_SIZE, SEEK_END) == -1) {
endwin ();
fprintf (stderr,
"\nError moving file pointer in dialog_textbox().\n");
exit (-1);
}
if ((bytes_read = read (fd, buf, BUF_SIZE)) == -1) {
endwin ();
fprintf (stderr,
"\nError reading file in dialog_textbox().\n");
exit (-1);
}
buf[bytes_read] = '\0';
}
page = buf + bytes_read;
back_lines (height - 4);
print_page (text, height - 4, width - 2);
print_position (dialog, height, width);
wmove (dialog, cur_y, cur_x); /* Restore cursor position */
wrefresh (dialog);
break;
case 'K': /* Previous line */
case 'k':
case KEY_UP:
if (!begin_reached) {
back_lines (page_length + 1);
/* We don't call print_page() here but use scrolling to ensure
faster screen update. However, 'end_reached' and
'page_length' should still be updated, and 'page' should
point to start of next page. This is done by calling
get_line() in the following 'for' loop. */
scrollok (text, TRUE);
wscrl (text, -1); /* Scroll text region down one line */
scrollok (text, FALSE);
page_length = 0;
passed_end = 0;
for (i = 0; i < height - 4; i++) {
if (!i) {
/* print first line of page */
print_line (text, 0, width - 2);
wnoutrefresh (text);
} else
/* Called to update 'end_reached' and 'page' */
get_line ();
if (!passed_end)
page_length++;
if (end_reached && !passed_end)
passed_end = 1;
}
print_position (dialog, height, width);
wmove (dialog, cur_y, cur_x); /* Restore cursor position */
wrefresh (dialog);
}
break;
case 'B': /* Previous page */
case 'b':
case KEY_PPAGE:
if (begin_reached)
break;
back_lines (page_length + height - 4);
print_page (text, height - 4, width - 2);
print_position (dialog, height, width);
wmove (dialog, cur_y, cur_x);
wrefresh (dialog);
break;
case 'J': /* Next line */
case 'j':
case KEY_DOWN:
if (!end_reached) {
begin_reached = 0;
scrollok (text, TRUE);
scroll (text); /* Scroll text region up one line */
scrollok (text, FALSE);
print_line (text, height - 5, width - 2);
wnoutrefresh (text);
print_position (dialog, height, width);
wmove (dialog, cur_y, cur_x); /* Restore cursor position */
wrefresh (dialog);
}
break;
case KEY_NPAGE: /* Next page */
case ' ':
if (end_reached)
break;
begin_reached = 0;
print_page (text, height - 4, width - 2);
print_position (dialog, height, width);
wmove (dialog, cur_y, cur_x);
wrefresh (dialog);
break;
case '0': /* Beginning of line */
case 'H': /* Scroll left */
case 'h':
case KEY_LEFT:
if (hscroll <= 0)
break;
if (key == '0')
hscroll = 0;
else
hscroll--;
/* Reprint current page to scroll horizontally */
back_lines (page_length);
print_page (text, height - 4, width - 2);
wmove (dialog, cur_y, cur_x);
wrefresh (dialog);
break;
case 'L': /* Scroll right */
case 'l':
case KEY_RIGHT:
if (hscroll >= MAX_LEN)
break;
hscroll++;
/* Reprint current page to scroll horizontally */
back_lines (page_length);
print_page (text, height - 4, width - 2);
wmove (dialog, cur_y, cur_x);
wrefresh (dialog);
break;
case ESC:
break;
}
}
delwin (dialog);
free (buf);
close (fd);
return 1; /* ESC pressed */
}
/*
* Go back 'n' lines in text file. Called by dialog_textbox().
* 'page' will be updated to point to the desired line in 'buf'.
*/
static void
back_lines (int n)
{
int i, fpos;
begin_reached = 0;
/* We have to distinguish between end_reached and !end_reached
since at end of file, the line is not ended by a '\n'.
The code inside 'if' basically does a '--page' to move one
character backward so as to skip '\n' of the previous line */
if (!end_reached) {
/* Either beginning of buffer or beginning of file reached? */
if (page == buf) {
if ((fpos = lseek (fd, 0, SEEK_CUR)) == -1) {
endwin ();
fprintf (stderr, "\nError moving file pointer in "
"back_lines().\n");
exit (-1);
}
if (fpos > bytes_read) { /* Not beginning of file yet */
/* We've reached beginning of buffer, but not beginning of
file yet, so read previous part of file into buffer.
Note that we only move backward for BUF_SIZE/2 bytes,
but not BUF_SIZE bytes to avoid re-reading again in
print_page() later */
/* Really possible to move backward BUF_SIZE/2 bytes? */
if (fpos < BUF_SIZE / 2 + bytes_read) {
/* No, move less then */
if (lseek (fd, 0, SEEK_SET) == -1) {
endwin ();
fprintf (stderr, "\nError moving file pointer in "
"back_lines().\n");
exit (-1);
}
page = buf + fpos - bytes_read;
} else { /* Move backward BUF_SIZE/2 bytes */
if (lseek (fd, -(BUF_SIZE / 2 + bytes_read), SEEK_CUR)
== -1) {
endwin ();
fprintf (stderr, "\nError moving file pointer "
"in back_lines().\n");
exit (-1);
}
page = buf + BUF_SIZE / 2;
}
if ((bytes_read = read (fd, buf, BUF_SIZE)) == -1) {
endwin ();
fprintf (stderr, "\nError reading file in back_lines().\n");
exit (-1);
}
buf[bytes_read] = '\0';
} else { /* Beginning of file reached */
begin_reached = 1;
return;
}
}
if (*(--page) != '\n') { /* '--page' here */
/* Something's wrong... */
endwin ();
fprintf (stderr, "\nInternal error in back_lines().\n");
exit (-1);
}
}
/* Go back 'n' lines */
for (i = 0; i < n; i++)
do {
if (page == buf) {
if ((fpos = lseek (fd, 0, SEEK_CUR)) == -1) {
endwin ();
fprintf (stderr,
"\nError moving file pointer in back_lines().\n");
exit (-1);
}
if (fpos > bytes_read) {
/* Really possible to move backward BUF_SIZE/2 bytes? */
if (fpos < BUF_SIZE / 2 + bytes_read) {
/* No, move less then */
if (lseek (fd, 0, SEEK_SET) == -1) {
endwin ();
fprintf (stderr, "\nError moving file pointer "
"in back_lines().\n");
exit (-1);
}
page = buf + fpos - bytes_read;
} else { /* Move backward BUF_SIZE/2 bytes */
if (lseek (fd, -(BUF_SIZE / 2 + bytes_read),
SEEK_CUR) == -1) {
endwin ();
fprintf (stderr, "\nError moving file pointer"
" in back_lines().\n");
exit (-1);
}
page = buf + BUF_SIZE / 2;
}
if ((bytes_read = read (fd, buf, BUF_SIZE)) == -1) {
endwin ();
fprintf (stderr, "\nError reading file in "
"back_lines().\n");
exit (-1);
}
buf[bytes_read] = '\0';
} else { /* Beginning of file reached */
begin_reached = 1;
return;
}
}
} while (*(--page) != '\n');
page++;
}
/*
* Print a new page of text. Called by dialog_textbox().
*/
static void
print_page (WINDOW * win, int height, int width)
{
int i, passed_end = 0;
page_length = 0;
for (i = 0; i < height; i++) {
print_line (win, i, width);
if (!passed_end)
page_length++;
if (end_reached && !passed_end)
passed_end = 1;
}
wnoutrefresh (win);
}
/*
* Print a new line of text. Called by dialog_textbox() and print_page().
*/
static void
print_line (WINDOW * win, int row, int width)
{
int y, x;
char *line;
line = get_line ();
line += MIN (strlen (line), hscroll); /* Scroll horizontally */
wmove (win, row, 0); /* move cursor to correct line */
waddch (win, ' ');
waddnstr (win, line, MIN (strlen (line), width - 2));
getyx (win, y, x);
/* Clear 'residue' of previous line */
#if OLD_NCURSES
{
int i;
for (i = 0; i < width - x; i++)
waddch (win, ' ');
}
#else
wclrtoeol(win);
#endif
}
/*
* Return current line of text. Called by dialog_textbox() and print_line().
* 'page' should point to start of current line before calling, and will be
* updated to point to start of next line.
*/
static char *
get_line (void)
{
int i = 0, fpos;
static char line[MAX_LEN + 1];
end_reached = 0;
while (*page != '\n') {
if (*page == '\0') {
/* Either end of file or end of buffer reached */
if ((fpos = lseek (fd, 0, SEEK_CUR)) == -1) {
endwin ();
fprintf (stderr, "\nError moving file pointer in "
"get_line().\n");
exit (-1);
}
if (fpos < file_size) { /* Not end of file yet */
/* We've reached end of buffer, but not end of file yet,
so read next part of file into buffer */
if ((bytes_read = read (fd, buf, BUF_SIZE)) == -1) {
endwin ();
fprintf (stderr, "\nError reading file in get_line().\n");
exit (-1);
}
buf[bytes_read] = '\0';
page = buf;
} else {
if (!end_reached)
end_reached = 1;
break;
}
} else if (i < MAX_LEN)
line[i++] = *(page++);
else {
/* Truncate lines longer than MAX_LEN characters */
if (i == MAX_LEN)
line[i++] = '\0';
page++;
}
}
if (i <= MAX_LEN)
line[i] = '\0';
if (!end_reached)
page++; /* move pass '\n' */
return line;
}
/*
* Print current position
*/
static void
print_position (WINDOW * win, int height, int width)
{
int fpos, percent;
if ((fpos = lseek (fd, 0, SEEK_CUR)) == -1) {
endwin ();
fprintf (stderr, "\nError moving file pointer in print_position().\n");
exit (-1);
}
wattrset (win, position_indicator_attr);
wbkgdset (win, position_indicator_attr & A_COLOR);
percent = !file_size ?
100 : ((fpos - bytes_read + page - buf) * 100) / file_size;
wmove (win, height - 3, width - 9);
wprintw (win, "(%3d%%)", percent);
}
+375
View File
@@ -0,0 +1,375 @@
/*
* util.c
*
* ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk)
* MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcap@cfw.com)
*
* 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., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include "dialog.h"
/* use colors by default? */
bool use_colors = 1;
char *backtitle = NULL;
const char *dialog_result;
/*
* Attribute values, default is for mono display
*/
chtype attributes[] =
{
A_NORMAL, /* screen_attr */
A_NORMAL, /* shadow_attr */
A_NORMAL, /* dialog_attr */
A_BOLD, /* title_attr */
A_NORMAL, /* border_attr */
A_REVERSE, /* button_active_attr */
A_DIM, /* button_inactive_attr */
A_REVERSE, /* button_key_active_attr */
A_BOLD, /* button_key_inactive_attr */
A_REVERSE, /* button_label_active_attr */
A_NORMAL, /* button_label_inactive_attr */
A_NORMAL, /* inputbox_attr */
A_NORMAL, /* inputbox_border_attr */
A_NORMAL, /* searchbox_attr */
A_BOLD, /* searchbox_title_attr */
A_NORMAL, /* searchbox_border_attr */
A_BOLD, /* position_indicator_attr */
A_NORMAL, /* menubox_attr */
A_NORMAL, /* menubox_border_attr */
A_NORMAL, /* item_attr */
A_REVERSE, /* item_selected_attr */
A_BOLD, /* tag_attr */
A_REVERSE, /* tag_selected_attr */
A_BOLD, /* tag_key_attr */
A_REVERSE, /* tag_key_selected_attr */
A_BOLD, /* check_attr */
A_REVERSE, /* check_selected_attr */
A_BOLD, /* uarrow_attr */
A_BOLD /* darrow_attr */
};
#include "colors.h"
/*
* Table of color values
*/
int color_table[][3] =
{
{SCREEN_FG, SCREEN_BG, SCREEN_HL},
{SHADOW_FG, SHADOW_BG, SHADOW_HL},
{DIALOG_FG, DIALOG_BG, DIALOG_HL},
{TITLE_FG, TITLE_BG, TITLE_HL},
{BORDER_FG, BORDER_BG, BORDER_HL},
{BUTTON_ACTIVE_FG, BUTTON_ACTIVE_BG, BUTTON_ACTIVE_HL},
{BUTTON_INACTIVE_FG, BUTTON_INACTIVE_BG, BUTTON_INACTIVE_HL},
{BUTTON_KEY_ACTIVE_FG, BUTTON_KEY_ACTIVE_BG, BUTTON_KEY_ACTIVE_HL},
{BUTTON_KEY_INACTIVE_FG, BUTTON_KEY_INACTIVE_BG, BUTTON_KEY_INACTIVE_HL},
{BUTTON_LABEL_ACTIVE_FG, BUTTON_LABEL_ACTIVE_BG, BUTTON_LABEL_ACTIVE_HL},
{BUTTON_LABEL_INACTIVE_FG, BUTTON_LABEL_INACTIVE_BG,
BUTTON_LABEL_INACTIVE_HL},
{INPUTBOX_FG, INPUTBOX_BG, INPUTBOX_HL},
{INPUTBOX_BORDER_FG, INPUTBOX_BORDER_BG, INPUTBOX_BORDER_HL},
{SEARCHBOX_FG, SEARCHBOX_BG, SEARCHBOX_HL},
{SEARCHBOX_TITLE_FG, SEARCHBOX_TITLE_BG, SEARCHBOX_TITLE_HL},
{SEARCHBOX_BORDER_FG, SEARCHBOX_BORDER_BG, SEARCHBOX_BORDER_HL},
{POSITION_INDICATOR_FG, POSITION_INDICATOR_BG, POSITION_INDICATOR_HL},
{MENUBOX_FG, MENUBOX_BG, MENUBOX_HL},
{MENUBOX_BORDER_FG, MENUBOX_BORDER_BG, MENUBOX_BORDER_HL},
{ITEM_FG, ITEM_BG, ITEM_HL},
{ITEM_SELECTED_FG, ITEM_SELECTED_BG, ITEM_SELECTED_HL},
{TAG_FG, TAG_BG, TAG_HL},
{TAG_SELECTED_FG, TAG_SELECTED_BG, TAG_SELECTED_HL},
{TAG_KEY_FG, TAG_KEY_BG, TAG_KEY_HL},
{TAG_KEY_SELECTED_FG, TAG_KEY_SELECTED_BG, TAG_KEY_SELECTED_HL},
{CHECK_FG, CHECK_BG, CHECK_HL},
{CHECK_SELECTED_FG, CHECK_SELECTED_BG, CHECK_SELECTED_HL},
{UARROW_FG, UARROW_BG, UARROW_HL},
{DARROW_FG, DARROW_BG, DARROW_HL},
}; /* color_table */
/*
* Set window to attribute 'attr'
*/
void
attr_clear (WINDOW * win, int height, int width, chtype attr)
{
int i, j;
wattrset (win, attr);
for (i = 0; i < height; i++) {
wmove (win, i, 0);
for (j = 0; j < width; j++)
waddch (win, ' ');
}
touchwin (win);
}
void dialog_clear (void)
{
attr_clear (stdscr, LINES, COLS, screen_attr);
/* Display background title if it exists ... - SLH */
if (backtitle != NULL) {
int i;
wattrset (stdscr, screen_attr);
mvwaddstr (stdscr, 0, 1, (char *)backtitle);
wmove (stdscr, 1, 1);
for (i = 1; i < COLS - 1; i++)
waddch (stdscr, ACS_HLINE);
}
wnoutrefresh (stdscr);
}
/*
* Do some initialization for dialog
*/
void
init_dialog (void)
{
initscr (); /* Init curses */
keypad (stdscr, TRUE);
cbreak ();
noecho ();
if (use_colors) /* Set up colors */
color_setup ();
dialog_clear ();
}
/*
* Setup for color display
*/
void
color_setup (void)
{
int i;
if (has_colors ()) { /* Terminal supports color? */
start_color ();
/* Initialize color pairs */
for (i = 0; i < ATTRIBUTE_COUNT; i++)
init_pair (i + 1, color_table[i][0], color_table[i][1]);
/* Setup color attributes */
for (i = 0; i < ATTRIBUTE_COUNT; i++)
attributes[i] = C_ATTR (color_table[i][2], i + 1);
}
}
/*
* End using dialog functions.
*/
void
end_dialog (void)
{
endwin ();
}
/*
* Print a string of text in a window, automatically wrap around to the
* next line if the string is too long to fit on one line. Newline
* characters '\n' are replaced by spaces. We start on a new line
* if there is no room for at least 4 nonblanks following a double-space.
*/
void
print_autowrap (WINDOW * win, const char *prompt, int width, int y, int x)
{
int newl, cur_x, cur_y;
int i, prompt_len, room, wlen;
char tempstr[MAX_LEN + 1], *word, *sp, *sp2;
strcpy (tempstr, prompt);
prompt_len = strlen(tempstr);
/*
* Remove newlines
*/
for(i=0; i<prompt_len; i++) {
if(tempstr[i] == '\n') tempstr[i] = ' ';
}
if (prompt_len <= width - x * 2) { /* If prompt is short */
wmove (win, y, (width - prompt_len) / 2);
waddstr (win, tempstr);
} else {
cur_x = x;
cur_y = y;
newl = 1;
word = tempstr;
while (word && *word) {
sp = index(word, ' ');
if (sp)
*sp++ = 0;
/* Wrap to next line if either the word does not fit,
or it is the first word of a new sentence, and it is
short, and the next word does not fit. */
room = width - cur_x;
wlen = strlen(word);
if (wlen > room ||
(newl && wlen < 4 && sp && wlen+1+strlen(sp) > room
&& (!(sp2 = index(sp, ' ')) || wlen+1+(sp2-sp) > room))) {
cur_y++;
cur_x = x;
}
wmove (win, cur_y, cur_x);
waddstr (win, word);
getyx (win, cur_y, cur_x);
cur_x++;
if (sp && *sp == ' ') {
cur_x++; /* double space */
while (*++sp == ' ');
newl = 1;
} else
newl = 0;
word = sp;
}
}
}
/*
* Print a button
*/
void
print_button (WINDOW * win, const char *label, int y, int x, int selected)
{
int i, temp;
wmove (win, y, x);
wattrset (win, selected ? button_active_attr : button_inactive_attr);
waddstr (win, "<");
temp = strspn (label, " ");
label += temp;
wattrset (win, selected ? button_label_active_attr
: button_label_inactive_attr);
for (i = 0; i < temp; i++)
waddch (win, ' ');
wattrset (win, selected ? button_key_active_attr
: button_key_inactive_attr);
waddch (win, label[0]);
wattrset (win, selected ? button_label_active_attr
: button_label_inactive_attr);
waddstr (win, (char *)label + 1);
wattrset (win, selected ? button_active_attr : button_inactive_attr);
waddstr (win, ">");
wmove (win, y, x + temp + 1);
}
/*
* Draw a rectangular box with line drawing characters
*/
void
draw_box (WINDOW * win, int y, int x, int height, int width,
chtype box, chtype border)
{
int i, j;
wattrset (win, 0);
for (i = 0; i < height; i++) {
wmove (win, y + i, x);
for (j = 0; j < width; j++)
if (!i && !j)
waddch (win, border | ACS_ULCORNER);
else if (i == height - 1 && !j)
waddch (win, border | ACS_LLCORNER);
else if (!i && j == width - 1)
waddch (win, box | ACS_URCORNER);
else if (i == height - 1 && j == width - 1)
waddch (win, box | ACS_LRCORNER);
else if (!i)
waddch (win, border | ACS_HLINE);
else if (i == height - 1)
waddch (win, box | ACS_HLINE);
else if (!j)
waddch (win, border | ACS_VLINE);
else if (j == width - 1)
waddch (win, box | ACS_VLINE);
else
waddch (win, box | ' ');
}
}
/*
* Draw shadows along the right and bottom edge to give a more 3D look
* to the boxes
*/
void
draw_shadow (WINDOW * win, int y, int x, int height, int width)
{
int i;
if (has_colors ()) { /* Whether terminal supports color? */
wattrset (win, shadow_attr);
wmove (win, y + height, x + 2);
for (i = 0; i < width; i++)
waddch (win, winch (win) & A_CHARTEXT);
for (i = y + 1; i < y + height + 1; i++) {
wmove (win, i, x + width);
waddch (win, winch (win) & A_CHARTEXT);
waddch (win, winch (win) & A_CHARTEXT);
}
wnoutrefresh (win);
}
}
/*
* Return the position of the first alphabetic character in a string.
*/
int
first_alpha(const char *string, const char *exempt)
{
int i, in_paren=0, c;
for (i = 0; i < strlen(string); i++) {
c = tolower(string[i]);
if (strchr("<[(", c)) ++in_paren;
if (strchr(">])", c)) --in_paren;
if ((! in_paren) && isalpha(c) &&
strchr(exempt, c) == 0)
return i;
}
return 0;
}
/*
* Get the first selected item in the dialog_list_item list.
*/
struct dialog_list_item *
first_sel_item(int item_no, struct dialog_list_item ** items)
{
int i;
for (i = 0; i < item_no; i++) {
if (items[i]->selected)
return items[i];
}
return NULL;
}
+118
View File
@@ -0,0 +1,118 @@
/*
* yesno.c -- implements the yes/no box
*
* ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk)
* MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcap@cfw.com)
*
* 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., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include "dialog.h"
/*
* Display termination buttons
*/
static void
print_buttons(WINDOW *dialog, int height, int width, int selected)
{
int x = width / 2 - 10;
int y = height - 2;
print_button (dialog, " Yes ", y, x, selected == 0);
print_button (dialog, " No ", y, x + 13, selected == 1);
wmove(dialog, y, x+1 + 13*selected );
wrefresh (dialog);
}
/*
* Display a dialog box with two buttons - Yes and No
*/
int
dialog_yesno (const char *title, const char *prompt, int height, int width)
{
int i, x, y, key = 0, button = 0;
WINDOW *dialog;
/* center dialog box on screen */
x = (COLS - width) / 2;
y = (LINES - height) / 2;
draw_shadow (stdscr, y, x, height, width);
dialog = newwin (height, width, y, x);
keypad (dialog, TRUE);
draw_box (dialog, 0, 0, height, width, dialog_attr, border_attr);
wattrset (dialog, border_attr);
mvwaddch (dialog, height-3, 0, ACS_LTEE);
for (i = 0; i < width - 2; i++)
waddch (dialog, ACS_HLINE);
wattrset (dialog, dialog_attr);
waddch (dialog, ACS_RTEE);
if (title != NULL && strlen(title) >= width-2 ) {
/* truncate long title -- mec */
char * title2 = malloc(width-2+1);
memcpy( title2, title, width-2 );
title2[width-2] = '\0';
title = title2;
}
if (title != NULL) {
wattrset (dialog, title_attr);
mvwaddch (dialog, 0, (width - strlen(title))/2 - 1, ' ');
waddstr (dialog, (char *)title);
waddch (dialog, ' ');
}
wattrset (dialog, dialog_attr);
print_autowrap (dialog, prompt, width - 2, 1, 3);
print_buttons(dialog, height, width, 0);
while (key != ESC) {
key = wgetch (dialog);
switch (key) {
case 'Y':
case 'y':
delwin (dialog);
return 0;
case 'N':
case 'n':
delwin (dialog);
return 1;
case TAB:
case KEY_LEFT:
case KEY_RIGHT:
button = ((key == KEY_LEFT ? --button : ++button) < 0)
? 1 : (button > 1 ? 0 : button);
print_buttons(dialog, height, width, button);
wrefresh (dialog);
break;
case ' ':
case '\n':
delwin (dialog);
return button;
case ESC:
break;
}
}
delwin (dialog);
return -1; /* ESC pressed */
}
+366
View File
@@ -0,0 +1,366 @@
%option backup nostdinit noyywrap never-interactive full ecs
%option 8bit backup nodefault perf-report perf-report
%x COMMAND HELP STRING PARAM
%{
/*
* Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
* Released under the terms of the GNU GPL v2.0.
*/
#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#define LKC_DIRECT_LINK
#include "lkc.h"
#define START_STRSIZE 16
char *text;
static char *text_ptr;
static int text_size, text_asize;
struct buffer {
struct buffer *parent;
YY_BUFFER_STATE state;
};
struct buffer *current_buf;
static int last_ts, first_ts;
static void zconf_endhelp(void);
static struct buffer *zconf_endfile(void);
void new_string(void)
{
text = malloc(START_STRSIZE);
text_asize = START_STRSIZE;
text_ptr = text;
text_size = 0;
*text_ptr = 0;
}
void append_string(const char *str, int size)
{
int new_size = text_size + size + 1;
if (new_size > text_asize) {
text = realloc(text, new_size);
text_asize = new_size;
text_ptr = text + text_size;
}
memcpy(text_ptr, str, size);
text_ptr += size;
text_size += size;
*text_ptr = 0;
}
void alloc_string(const char *str, int size)
{
text = malloc(size + 1);
memcpy(text, str, size);
text[size] = 0;
}
%}
ws [ \n\t]
n [A-Za-z0-9_]
%%
int str = 0;
int ts, i;
[ \t]*#.*\n current_file->lineno++;
[ \t]*#.*
[ \t]*\n current_file->lineno++; return T_EOL;
[ \t]+ {
BEGIN(COMMAND);
}
. {
unput(yytext[0]);
BEGIN(COMMAND);
}
<COMMAND>{
"mainmenu" BEGIN(PARAM); return T_MAINMENU;
"menu" BEGIN(PARAM); return T_MENU;
"endmenu" BEGIN(PARAM); return T_ENDMENU;
"source" BEGIN(PARAM); return T_SOURCE;
"choice" BEGIN(PARAM); return T_CHOICE;
"endchoice" BEGIN(PARAM); return T_ENDCHOICE;
"comment" BEGIN(PARAM); return T_COMMENT;
"config" BEGIN(PARAM); return T_CONFIG;
"menuconfig" BEGIN(PARAM); return T_MENUCONFIG;
"help" BEGIN(PARAM); return T_HELP;
"if" BEGIN(PARAM); return T_IF;
"endif" BEGIN(PARAM); return T_ENDIF;
"depends" BEGIN(PARAM); return T_DEPENDS;
"requires" BEGIN(PARAM); return T_REQUIRES;
"optional" BEGIN(PARAM); return T_OPTIONAL;
"default" BEGIN(PARAM); return T_DEFAULT;
"prompt" BEGIN(PARAM); return T_PROMPT;
"tristate" BEGIN(PARAM); return T_TRISTATE;
"def_tristate" BEGIN(PARAM); return T_DEF_TRISTATE;
"bool" BEGIN(PARAM); return T_BOOLEAN;
"boolean" BEGIN(PARAM); return T_BOOLEAN;
"def_bool" BEGIN(PARAM); return T_DEF_BOOLEAN;
"def_boolean" BEGIN(PARAM); return T_DEF_BOOLEAN;
"int" BEGIN(PARAM); return T_INT;
"hex" BEGIN(PARAM); return T_HEX;
"string" BEGIN(PARAM); return T_STRING;
"select" BEGIN(PARAM); return T_SELECT;
"enable" BEGIN(PARAM); return T_SELECT;
"range" BEGIN(PARAM); return T_RANGE;
{n}+ {
alloc_string(yytext, yyleng);
zconflval.string = text;
return T_WORD;
}
.
\n current_file->lineno++; BEGIN(INITIAL);
}
<PARAM>{
"&&" return T_AND;
"||" return T_OR;
"(" return T_OPEN_PAREN;
")" return T_CLOSE_PAREN;
"!" return T_NOT;
"=" return T_EQUAL;
"!=" return T_UNEQUAL;
"if" return T_IF;
"on" return T_ON;
\"|\' {
str = yytext[0];
new_string();
BEGIN(STRING);
}
\n BEGIN(INITIAL); current_file->lineno++; return T_EOL;
--- /* ignore */
({n}|[-/.])+ {
alloc_string(yytext, yyleng);
zconflval.string = text;
return T_WORD;
}
#.* /* comment */
\\\n current_file->lineno++;
.
<<EOF>> {
BEGIN(INITIAL);
}
}
<STRING>{
[^'"\\\n]+/\n {
append_string(yytext, yyleng);
zconflval.string = text;
return T_WORD_QUOTE;
}
[^'"\\\n]+ {
append_string(yytext, yyleng);
}
\\.?/\n {
append_string(yytext + 1, yyleng - 1);
zconflval.string = text;
return T_WORD_QUOTE;
}
\\.? {
append_string(yytext + 1, yyleng - 1);
}
\'|\" {
if (str == yytext[0]) {
BEGIN(PARAM);
zconflval.string = text;
return T_WORD_QUOTE;
} else
append_string(yytext, 1);
}
\n {
printf("%s:%d:warning: multi-line strings not supported\n", zconf_curname(), zconf_lineno());
current_file->lineno++;
BEGIN(INITIAL);
return T_EOL;
}
<<EOF>> {
BEGIN(INITIAL);
}
}
<HELP>{
[ \t]+ {
ts = 0;
for (i = 0; i < yyleng; i++) {
if (yytext[i] == '\t')
ts = (ts & ~7) + 8;
else
ts++;
}
last_ts = ts;
if (first_ts) {
if (ts < first_ts) {
zconf_endhelp();
return T_HELPTEXT;
}
ts -= first_ts;
while (ts > 8) {
append_string(" ", 8);
ts -= 8;
}
append_string(" ", ts);
}
}
[ \t]*\n/[^ \t\n] {
current_file->lineno++;
zconf_endhelp();
return T_HELPTEXT;
}
[ \t]*\n {
current_file->lineno++;
append_string("\n", 1);
}
[^ \t\n].* {
append_string(yytext, yyleng);
if (!first_ts)
first_ts = last_ts;
}
<<EOF>> {
zconf_endhelp();
return T_HELPTEXT;
}
}
<<EOF>> {
if (current_buf) {
zconf_endfile();
return T_EOF;
}
fclose(yyin);
yyterminate();
}
%%
void zconf_starthelp(void)
{
new_string();
last_ts = first_ts = 0;
BEGIN(HELP);
}
static void zconf_endhelp(void)
{
zconflval.string = text;
BEGIN(INITIAL);
}
/*
* Try to open specified file with following names:
* ./name
* $(srctree)/name
* The latter is used when srctree is separate from objtree
* when compiling the kernel.
* Return NULL if file is not found.
*/
FILE *zconf_fopen(const char *name)
{
char *env, fullname[PATH_MAX+1];
FILE *f;
f = fopen(name, "r");
if (!f && name[0] != '/') {
env = getenv(SRCTREE);
if (env) {
sprintf(fullname, "%s/%s", env, name);
f = fopen(fullname, "r");
}
}
return f;
}
void zconf_initscan(const char *name)
{
yyin = zconf_fopen(name);
if (!yyin) {
printf("can't find file %s\n", name);
exit(1);
}
current_buf = malloc(sizeof(*current_buf));
memset(current_buf, 0, sizeof(*current_buf));
current_file = file_lookup(name);
current_file->lineno = 1;
current_file->flags = FILE_BUSY;
}
void zconf_nextfile(const char *name)
{
struct file *file = file_lookup(name);
struct buffer *buf = malloc(sizeof(*buf));
memset(buf, 0, sizeof(*buf));
current_buf->state = YY_CURRENT_BUFFER;
yyin = zconf_fopen(name);
if (!yyin) {
printf("%s:%d: can't open file \"%s\"\n", zconf_curname(), zconf_lineno(), name);
exit(1);
}
yy_switch_to_buffer(yy_create_buffer(yyin, YY_BUF_SIZE));
buf->parent = current_buf;
current_buf = buf;
if (file->flags & FILE_BUSY) {
printf("recursive scan (%s)?\n", name);
exit(1);
}
if (file->flags & FILE_SCANNED) {
printf("file %s already scanned?\n", name);
exit(1);
}
file->flags |= FILE_BUSY;
file->lineno = 1;
file->parent = current_file;
current_file = file;
}
static struct buffer *zconf_endfile(void)
{
struct buffer *parent;
current_file->flags |= FILE_SCANNED;
current_file->flags &= ~FILE_BUSY;
current_file = current_file->parent;
parent = current_buf->parent;
if (parent) {
fclose(yyin);
yy_delete_buffer(YY_CURRENT_BUFFER);
yy_switch_to_buffer(parent->state);
}
free(current_buf);
current_buf = parent;
return parent;
}
int zconf_lineno(void)
{
if (current_buf)
return current_file->lineno - 1;
else
return 0;
}
char *zconf_curname(void)
{
if (current_buf)
return current_file->name;
else
return "<none>";
}
File diff suppressed because it is too large Load Diff
+125
View File
@@ -0,0 +1,125 @@
/* A Bison parser, made from zconf.y, by GNU bison 1.75. */
/* Skeleton parser for Yacc-like parsing with Bison,
Copyright (C) 1984, 1989, 1990, 2000, 2001, 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 02111-1307, USA. */
/* As a special exception, when this file is copied by Bison into a
Bison output file, you may use that output file without restriction.
This special exception was added by the Free Software Foundation
in version 1.24 of Bison. */
#ifndef BISON_ZCONF_TAB_H
# define BISON_ZCONF_TAB_H
/* Tokens. */
#ifndef YYTOKENTYPE
# define YYTOKENTYPE
/* Put the tokens into the symbol table, so that GDB and other debuggers
know about them. */
enum yytokentype {
T_MAINMENU = 258,
T_MENU = 259,
T_ENDMENU = 260,
T_SOURCE = 261,
T_CHOICE = 262,
T_ENDCHOICE = 263,
T_COMMENT = 264,
T_CONFIG = 265,
T_HELP = 266,
T_HELPTEXT = 267,
T_IF = 268,
T_ENDIF = 269,
T_DEPENDS = 270,
T_REQUIRES = 271,
T_OPTIONAL = 272,
T_PROMPT = 273,
T_DEFAULT = 274,
T_TRISTATE = 275,
T_BOOLEAN = 276,
T_INT = 277,
T_HEX = 278,
T_WORD = 279,
T_STRING = 280,
T_UNEQUAL = 281,
T_EOF = 282,
T_EOL = 283,
T_CLOSE_PAREN = 284,
T_OPEN_PAREN = 285,
T_ON = 286,
T_OR = 287,
T_AND = 288,
T_EQUAL = 289,
T_NOT = 290
};
#endif
#define T_MAINMENU 258
#define T_MENU 259
#define T_ENDMENU 260
#define T_SOURCE 261
#define T_CHOICE 262
#define T_ENDCHOICE 263
#define T_COMMENT 264
#define T_CONFIG 265
#define T_HELP 266
#define T_HELPTEXT 267
#define T_IF 268
#define T_ENDIF 269
#define T_DEPENDS 270
#define T_REQUIRES 271
#define T_OPTIONAL 272
#define T_PROMPT 273
#define T_DEFAULT 274
#define T_TRISTATE 275
#define T_BOOLEAN 276
#define T_INT 277
#define T_HEX 278
#define T_WORD 279
#define T_STRING 280
#define T_UNEQUAL 281
#define T_EOF 282
#define T_EOL 283
#define T_CLOSE_PAREN 284
#define T_OPEN_PAREN 285
#define T_ON 286
#define T_OR 287
#define T_AND 288
#define T_EQUAL 289
#define T_NOT 290
#ifndef YYSTYPE
#line 33 "zconf.y"
typedef union {
int token;
char *string;
struct symbol *symbol;
struct expr *expr;
struct menu *menu;
} yystype;
/* Line 1281 of /usr/share/bison/yacc.c. */
#line 118 "zconf.tab.h"
# define YYSTYPE yystype
#endif
extern YYSTYPE zconflval;
#endif /* not BISON_ZCONF_TAB_H */
+687
View File
@@ -0,0 +1,687 @@
%{
/*
* Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
* Released under the terms of the GNU GPL v2.0.
*/
#include <ctype.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#define printd(mask, fmt...) if (cdebug & (mask)) printf(fmt)
#define PRINTD 0x0001
#define DEBUG_PARSE 0x0002
int cdebug = PRINTD;
extern int zconflex(void);
static void zconfprint(const char *err, ...);
static void zconferror(const char *err);
static bool zconf_endtoken(int token, int starttoken, int endtoken);
struct symbol *symbol_hash[257];
#define YYERROR_VERBOSE
%}
%expect 40
%union
{
int token;
char *string;
struct symbol *symbol;
struct expr *expr;
struct menu *menu;
}
%token T_MAINMENU
%token T_MENU
%token T_ENDMENU
%token T_SOURCE
%token T_CHOICE
%token T_ENDCHOICE
%token T_COMMENT
%token T_CONFIG
%token T_MENUCONFIG
%token T_HELP
%token <string> T_HELPTEXT
%token T_IF
%token T_ENDIF
%token T_DEPENDS
%token T_REQUIRES
%token T_OPTIONAL
%token T_PROMPT
%token T_DEFAULT
%token T_TRISTATE
%token T_DEF_TRISTATE
%token T_BOOLEAN
%token T_DEF_BOOLEAN
%token T_STRING
%token T_INT
%token T_HEX
%token <string> T_WORD
%token <string> T_WORD_QUOTE
%token T_UNEQUAL
%token T_EOF
%token T_EOL
%token T_CLOSE_PAREN
%token T_OPEN_PAREN
%token T_ON
%token T_SELECT
%token T_RANGE
%left T_OR
%left T_AND
%left T_EQUAL T_UNEQUAL
%nonassoc T_NOT
%type <string> prompt
%type <string> source
%type <symbol> symbol
%type <expr> expr
%type <expr> if_expr
%type <token> end
%{
#define LKC_DIRECT_LINK
#include "lkc.h"
%}
%%
input: /* empty */
| input block
;
block: common_block
| choice_stmt
| menu_stmt
| T_MAINMENU prompt nl_or_eof
| T_ENDMENU { zconfprint("unexpected 'endmenu' statement"); }
| T_ENDIF { zconfprint("unexpected 'endif' statement"); }
| T_ENDCHOICE { zconfprint("unexpected 'endchoice' statement"); }
| error nl_or_eof { zconfprint("syntax error"); yyerrok; }
;
common_block:
if_stmt
| comment_stmt
| config_stmt
| menuconfig_stmt
| source_stmt
| nl_or_eof
;
/* config/menuconfig entry */
config_entry_start: T_CONFIG T_WORD T_EOL
{
struct symbol *sym = sym_lookup($2, 0);
sym->flags |= SYMBOL_OPTIONAL;
menu_add_entry(sym);
printd(DEBUG_PARSE, "%s:%d:config %s\n", zconf_curname(), zconf_lineno(), $2);
};
config_stmt: config_entry_start config_option_list
{
menu_end_entry();
printd(DEBUG_PARSE, "%s:%d:endconfig\n", zconf_curname(), zconf_lineno());
};
menuconfig_entry_start: T_MENUCONFIG T_WORD T_EOL
{
struct symbol *sym = sym_lookup($2, 0);
sym->flags |= SYMBOL_OPTIONAL;
menu_add_entry(sym);
printd(DEBUG_PARSE, "%s:%d:menuconfig %s\n", zconf_curname(), zconf_lineno(), $2);
};
menuconfig_stmt: menuconfig_entry_start config_option_list
{
if (current_entry->prompt)
current_entry->prompt->type = P_MENU;
else
zconfprint("warning: menuconfig statement without prompt");
menu_end_entry();
printd(DEBUG_PARSE, "%s:%d:endconfig\n", zconf_curname(), zconf_lineno());
};
config_option_list:
/* empty */
| config_option_list config_option
| config_option_list depends
| config_option_list help
| config_option_list T_EOL
;
config_option: T_TRISTATE prompt_stmt_opt T_EOL
{
menu_set_type(S_TRISTATE);
printd(DEBUG_PARSE, "%s:%d:tristate\n", zconf_curname(), zconf_lineno());
};
config_option: T_DEF_TRISTATE expr if_expr T_EOL
{
menu_add_expr(P_DEFAULT, $2, $3);
menu_set_type(S_TRISTATE);
printd(DEBUG_PARSE, "%s:%d:def_boolean\n", zconf_curname(), zconf_lineno());
};
config_option: T_BOOLEAN prompt_stmt_opt T_EOL
{
menu_set_type(S_BOOLEAN);
printd(DEBUG_PARSE, "%s:%d:boolean\n", zconf_curname(), zconf_lineno());
};
config_option: T_DEF_BOOLEAN expr if_expr T_EOL
{
menu_add_expr(P_DEFAULT, $2, $3);
menu_set_type(S_BOOLEAN);
printd(DEBUG_PARSE, "%s:%d:def_boolean\n", zconf_curname(), zconf_lineno());
};
config_option: T_INT prompt_stmt_opt T_EOL
{
menu_set_type(S_INT);
printd(DEBUG_PARSE, "%s:%d:int\n", zconf_curname(), zconf_lineno());
};
config_option: T_HEX prompt_stmt_opt T_EOL
{
menu_set_type(S_HEX);
printd(DEBUG_PARSE, "%s:%d:hex\n", zconf_curname(), zconf_lineno());
};
config_option: T_STRING prompt_stmt_opt T_EOL
{
menu_set_type(S_STRING);
printd(DEBUG_PARSE, "%s:%d:string\n", zconf_curname(), zconf_lineno());
};
config_option: T_PROMPT prompt if_expr T_EOL
{
menu_add_prompt(P_PROMPT, $2, $3);
printd(DEBUG_PARSE, "%s:%d:prompt\n", zconf_curname(), zconf_lineno());
};
config_option: T_DEFAULT expr if_expr T_EOL
{
menu_add_expr(P_DEFAULT, $2, $3);
printd(DEBUG_PARSE, "%s:%d:default\n", zconf_curname(), zconf_lineno());
};
config_option: T_SELECT T_WORD if_expr T_EOL
{
menu_add_symbol(P_SELECT, sym_lookup($2, 0), $3);
printd(DEBUG_PARSE, "%s:%d:select\n", zconf_curname(), zconf_lineno());
};
config_option: T_RANGE symbol symbol if_expr T_EOL
{
menu_add_expr(P_RANGE, expr_alloc_comp(E_RANGE,$2, $3), $4);
printd(DEBUG_PARSE, "%s:%d:range\n", zconf_curname(), zconf_lineno());
};
/* choice entry */
choice: T_CHOICE T_EOL
{
struct symbol *sym = sym_lookup(NULL, 0);
sym->flags |= SYMBOL_CHOICE;
menu_add_entry(sym);
menu_add_expr(P_CHOICE, NULL, NULL);
printd(DEBUG_PARSE, "%s:%d:choice\n", zconf_curname(), zconf_lineno());
};
choice_entry: choice choice_option_list
{
menu_end_entry();
menu_add_menu();
};
choice_end: end
{
if (zconf_endtoken($1, T_CHOICE, T_ENDCHOICE)) {
menu_end_menu();
printd(DEBUG_PARSE, "%s:%d:endchoice\n", zconf_curname(), zconf_lineno());
}
};
choice_stmt:
choice_entry choice_block choice_end
| choice_entry choice_block
{
printf("%s:%d: missing 'endchoice' for this 'choice' statement\n", current_menu->file->name, current_menu->lineno);
zconfnerrs++;
};
choice_option_list:
/* empty */
| choice_option_list choice_option
| choice_option_list depends
| choice_option_list help
| choice_option_list T_EOL
;
choice_option: T_PROMPT prompt if_expr T_EOL
{
menu_add_prompt(P_PROMPT, $2, $3);
printd(DEBUG_PARSE, "%s:%d:prompt\n", zconf_curname(), zconf_lineno());
};
choice_option: T_TRISTATE prompt_stmt_opt T_EOL
{
menu_set_type(S_TRISTATE);
printd(DEBUG_PARSE, "%s:%d:tristate\n", zconf_curname(), zconf_lineno());
};
choice_option: T_BOOLEAN prompt_stmt_opt T_EOL
{
menu_set_type(S_BOOLEAN);
printd(DEBUG_PARSE, "%s:%d:boolean\n", zconf_curname(), zconf_lineno());
};
choice_option: T_OPTIONAL T_EOL
{
current_entry->sym->flags |= SYMBOL_OPTIONAL;
printd(DEBUG_PARSE, "%s:%d:optional\n", zconf_curname(), zconf_lineno());
};
choice_option: T_DEFAULT T_WORD if_expr T_EOL
{
menu_add_symbol(P_DEFAULT, sym_lookup($2, 0), $3);
printd(DEBUG_PARSE, "%s:%d:default\n", zconf_curname(), zconf_lineno());
};
choice_block:
/* empty */
| choice_block common_block
;
/* if entry */
if: T_IF expr T_EOL
{
printd(DEBUG_PARSE, "%s:%d:if\n", zconf_curname(), zconf_lineno());
menu_add_entry(NULL);
menu_add_dep($2);
menu_end_entry();
menu_add_menu();
};
if_end: end
{
if (zconf_endtoken($1, T_IF, T_ENDIF)) {
menu_end_menu();
printd(DEBUG_PARSE, "%s:%d:endif\n", zconf_curname(), zconf_lineno());
}
};
if_stmt:
if if_block if_end
| if if_block
{
printf("%s:%d: missing 'endif' for this 'if' statement\n", current_menu->file->name, current_menu->lineno);
zconfnerrs++;
};
if_block:
/* empty */
| if_block common_block
| if_block menu_stmt
| if_block choice_stmt
;
/* menu entry */
menu: T_MENU prompt T_EOL
{
menu_add_entry(NULL);
menu_add_prop(P_MENU, $2, NULL, NULL);
printd(DEBUG_PARSE, "%s:%d:menu\n", zconf_curname(), zconf_lineno());
};
menu_entry: menu depends_list
{
menu_end_entry();
menu_add_menu();
};
menu_end: end
{
if (zconf_endtoken($1, T_MENU, T_ENDMENU)) {
menu_end_menu();
printd(DEBUG_PARSE, "%s:%d:endmenu\n", zconf_curname(), zconf_lineno());
}
};
menu_stmt:
menu_entry menu_block menu_end
| menu_entry menu_block
{
printf("%s:%d: missing 'endmenu' for this 'menu' statement\n", current_menu->file->name, current_menu->lineno);
zconfnerrs++;
};
menu_block:
/* empty */
| menu_block common_block
| menu_block menu_stmt
| menu_block choice_stmt
| menu_block error T_EOL { zconfprint("invalid menu option"); yyerrok; }
;
source: T_SOURCE prompt T_EOL
{
$$ = $2;
printd(DEBUG_PARSE, "%s:%d:source %s\n", zconf_curname(), zconf_lineno(), $2);
};
source_stmt: source
{
zconf_nextfile($1);
};
/* comment entry */
comment: T_COMMENT prompt T_EOL
{
menu_add_entry(NULL);
menu_add_prop(P_COMMENT, $2, NULL, NULL);
printd(DEBUG_PARSE, "%s:%d:comment\n", zconf_curname(), zconf_lineno());
};
comment_stmt: comment depends_list
{
menu_end_entry();
};
/* help option */
help_start: T_HELP T_EOL
{
printd(DEBUG_PARSE, "%s:%d:help\n", zconf_curname(), zconf_lineno());
zconf_starthelp();
};
help: help_start T_HELPTEXT
{
current_entry->sym->help = $2;
};
/* depends option */
depends_list: /* empty */
| depends_list depends
| depends_list T_EOL
;
depends: T_DEPENDS T_ON expr T_EOL
{
menu_add_dep($3);
printd(DEBUG_PARSE, "%s:%d:depends on\n", zconf_curname(), zconf_lineno());
}
| T_DEPENDS expr T_EOL
{
menu_add_dep($2);
printd(DEBUG_PARSE, "%s:%d:depends\n", zconf_curname(), zconf_lineno());
}
| T_REQUIRES expr T_EOL
{
menu_add_dep($2);
printd(DEBUG_PARSE, "%s:%d:requires\n", zconf_curname(), zconf_lineno());
};
/* prompt statement */
prompt_stmt_opt:
/* empty */
| prompt if_expr
{
menu_add_prop(P_PROMPT, $1, NULL, $2);
};
prompt: T_WORD
| T_WORD_QUOTE
;
end: T_ENDMENU nl_or_eof { $$ = T_ENDMENU; }
| T_ENDCHOICE nl_or_eof { $$ = T_ENDCHOICE; }
| T_ENDIF nl_or_eof { $$ = T_ENDIF; }
;
nl_or_eof:
T_EOL | T_EOF;
if_expr: /* empty */ { $$ = NULL; }
| T_IF expr { $$ = $2; }
;
expr: symbol { $$ = expr_alloc_symbol($1); }
| symbol T_EQUAL symbol { $$ = expr_alloc_comp(E_EQUAL, $1, $3); }
| symbol T_UNEQUAL symbol { $$ = expr_alloc_comp(E_UNEQUAL, $1, $3); }
| T_OPEN_PAREN expr T_CLOSE_PAREN { $$ = $2; }
| T_NOT expr { $$ = expr_alloc_one(E_NOT, $2); }
| expr T_OR expr { $$ = expr_alloc_two(E_OR, $1, $3); }
| expr T_AND expr { $$ = expr_alloc_two(E_AND, $1, $3); }
;
symbol: T_WORD { $$ = sym_lookup($1, 0); free($1); }
| T_WORD_QUOTE { $$ = sym_lookup($1, 1); free($1); }
;
%%
void conf_parse(const char *name)
{
struct symbol *sym;
int i;
zconf_initscan(name);
sym_init();
menu_init();
modules_sym = sym_lookup("MODULES", 0);
rootmenu.prompt = menu_add_prop(P_MENU, "uClibc++ Configuration", NULL, NULL);
//zconfdebug = 1;
zconfparse();
if (zconfnerrs)
exit(1);
menu_finalize(&rootmenu);
for_all_symbols(i, sym) {
if (!(sym->flags & SYMBOL_CHECKED) && sym_check_deps(sym))
printf("\n");
else
sym->flags |= SYMBOL_CHECK_DONE;
}
sym_change_count = 1;
}
const char *zconf_tokenname(int token)
{
switch (token) {
case T_MENU: return "menu";
case T_ENDMENU: return "endmenu";
case T_CHOICE: return "choice";
case T_ENDCHOICE: return "endchoice";
case T_IF: return "if";
case T_ENDIF: return "endif";
}
return "<token>";
}
static bool zconf_endtoken(int token, int starttoken, int endtoken)
{
if (token != endtoken) {
zconfprint("unexpected '%s' within %s block", zconf_tokenname(token), zconf_tokenname(starttoken));
zconfnerrs++;
return false;
}
if (current_menu->file != current_file) {
zconfprint("'%s' in different file than '%s'", zconf_tokenname(token), zconf_tokenname(starttoken));
zconfprint("location of the '%s'", zconf_tokenname(starttoken));
zconfnerrs++;
return false;
}
return true;
}
static void zconfprint(const char *err, ...)
{
va_list ap;
fprintf(stderr, "%s:%d: ", zconf_curname(), zconf_lineno() + 1);
va_start(ap, err);
vfprintf(stderr, err, ap);
va_end(ap);
fprintf(stderr, "\n");
}
static void zconferror(const char *err)
{
fprintf(stderr, "%s:%d: %s\n", zconf_curname(), zconf_lineno() + 1, err);
}
void print_quoted_string(FILE *out, const char *str)
{
const char *p;
int len;
putc('"', out);
while ((p = strchr(str, '"'))) {
len = p - str;
if (len)
fprintf(out, "%.*s", len, str);
fputs("\\\"", out);
str = p + 1;
}
fputs(str, out);
putc('"', out);
}
void print_symbol(FILE *out, struct menu *menu)
{
struct symbol *sym = menu->sym;
struct property *prop;
if (sym_is_choice(sym))
fprintf(out, "choice\n");
else
fprintf(out, "config %s\n", sym->name);
switch (sym->type) {
case S_BOOLEAN:
fputs(" boolean\n", out);
break;
case S_TRISTATE:
fputs(" tristate\n", out);
break;
case S_STRING:
fputs(" string\n", out);
break;
case S_INT:
fputs(" integer\n", out);
break;
case S_HEX:
fputs(" hex\n", out);
break;
default:
fputs(" ???\n", out);
break;
}
for (prop = sym->prop; prop; prop = prop->next) {
if (prop->menu != menu)
continue;
switch (prop->type) {
case P_PROMPT:
fputs(" prompt ", out);
print_quoted_string(out, prop->text);
if (!expr_is_yes(prop->visible.expr)) {
fputs(" if ", out);
expr_fprint(prop->visible.expr, out);
}
fputc('\n', out);
break;
case P_DEFAULT:
fputs( " default ", out);
expr_fprint(prop->expr, out);
if (!expr_is_yes(prop->visible.expr)) {
fputs(" if ", out);
expr_fprint(prop->visible.expr, out);
}
fputc('\n', out);
break;
case P_CHOICE:
fputs(" #choice value\n", out);
break;
default:
fprintf(out, " unknown prop %d!\n", prop->type);
break;
}
}
if (sym->help) {
int len = strlen(sym->help);
while (sym->help[--len] == '\n')
sym->help[len] = 0;
fprintf(out, " help\n%s\n", sym->help);
}
fputc('\n', out);
}
void zconfdump(FILE *out)
{
struct property *prop;
struct symbol *sym;
struct menu *menu;
menu = rootmenu.list;
while (menu) {
if ((sym = menu->sym))
print_symbol(out, menu);
else if ((prop = menu->prompt)) {
switch (prop->type) {
case P_COMMENT:
fputs("\ncomment ", out);
print_quoted_string(out, prop->text);
fputs("\n", out);
break;
case P_MENU:
fputs("\nmenu ", out);
print_quoted_string(out, prop->text);
fputs("\n", out);
break;
default:
;
}
if (!expr_is_yes(prop->visible.expr)) {
fputs(" depends ", out);
expr_fprint(prop->visible.expr, out);
fputc('\n', out);
}
fputs("\n", out);
}
if (menu->list)
menu = menu->list;
else if (menu->next)
menu = menu->next;
else while ((menu = menu->parent)) {
if (menu->prompt && menu->prompt->type == P_MENU)
fputs("\nendmenu\n", out);
if (menu->next) {
menu = menu->next;
break;
}
}
}
}
#include "lex.zconf.c"
#include "confdata.c"
#include "expr.c"
#include "symbol.c"
#include "menu.c"
+72
View File
@@ -0,0 +1,72 @@
#!/usr/bin/perl -w
# vi: set ts=4:
# Libstrip - A utility to optimize libraries for specific executables
# Copyright (C) 2001 David A. Schleef <ds@schleef.org>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of version 2 of the GNU General Public License as
# published by the Free Software Foundation.
#
# This is a surprisingly simple script that gets a list of
# unresolved symbols in a list of executables specified on the
# command line, and then relinks the uClibc shared object file
# with only the those symbols and their dependencies. This
# results in a shared object that is optimized for the executables
# listed, and thus may not work with other executables.
#
# Example: optimizing uClibc for BusyBox
# Compile uClibc and BusyBox as normal. Then, in this
# directory, run:
# libstrip path/to/busybox
# After the script completes, there should be a new
# libuClibc-0.9.5.so in the current directory, which
# is optimized for busybox.
#
# How it works:
# The uClibc Makefiles create libuClibc.so by first creating
# the ar archive libc.a with all the object files, then links
# the final libuClibc.so by using 'ld --shared --whole-archive'.
# We take advantage of the linker command line option --undefined,
# which pulls in a symbol and all its dependencies, and so relink
# the library using --undefined for each symbol in place of
# --whole-archive. The linker script is used only to avoid
# having very long command lines.
$topdir="../..";
# This is the name of the default ldscript for shared libs. The
# file name will be different for other architectures.
$ldscript="/usr/lib/ldscripts/elf_i386.xs";
my @syms;
my @allsyms;
my $s;
while($exec = shift @ARGV){
#print "$exec\n";
@syms=`nm --dynamic $exec`;
for $s (@syms){
chomp $s;
if($s =~ m/^.{8} [BUV] (.+)/){
my $x = $1;
if(!grep { m/^$x$/; } @allsyms){
unshift @allsyms, $x;
}
}
}
}
open(LDSCRIPT, ">ldscript");
print LDSCRIPT "INCLUDE $ldscript\n";
for $s (@allsyms) {
print LDSCRIPT "EXTERN($s)\n";
}
`gcc -s -nostdlib -Wl,-warn-common -shared \\
-o libuClibc-0.9.5.so \\
-Wl,-soname,libc.so.0 -Wl,--script=ldscript \\
$topdir/libc/libc.a \\
$topdir/libc/tmp/libgcc-need.a`
+258
View File
@@ -0,0 +1,258 @@
# First some @modifier mappings. Internally, the modifier is signaled by
# replacing '_' in the locale name with a unique identifying character.
# For example, internally we map "ca_ES@euro" to "caeES". This allows for
# smaller code and easier processing of locale names.
@euro e
@cyrillic c
#---------------------------------------------------------------------------
# Next, set to {y}es to enable and {n}o to disable the UTF-8 and the 8-bit
# codeset locales. Of course, you must have built the c8tables.h and
# the wctables.h files appropriately.
UTF-8 yes
8-BIT yes
#---------------------------------------------------------------------------
# Now the locales
af_ZA ISO-8859-1
af_ZA.UTF-8 UTF-8
am_ET UTF-8
ar_AE ISO-8859-6
ar_AE.UTF-8 UTF-8
ar_BH ISO-8859-6
ar_BH.UTF-8 UTF-8
ar_DZ ISO-8859-6
ar_DZ.UTF-8 UTF-8
ar_EG ISO-8859-6
ar_EG.UTF-8 UTF-8
ar_IN UTF-8
ar_IQ ISO-8859-6
ar_IQ.UTF-8 UTF-8
ar_JO ISO-8859-6
ar_JO.UTF-8 UTF-8
ar_KW ISO-8859-6
ar_KW.UTF-8 UTF-8
ar_LB ISO-8859-6
ar_LB.UTF-8 UTF-8
ar_LY ISO-8859-6
ar_LY.UTF-8 UTF-8
ar_MA ISO-8859-6
ar_MA.UTF-8 UTF-8
ar_OM ISO-8859-6
ar_OM.UTF-8 UTF-8
ar_QA ISO-8859-6
ar_QA.UTF-8 UTF-8
ar_SA ISO-8859-6
ar_SA.UTF-8 UTF-8
ar_SD ISO-8859-6
ar_SD.UTF-8 UTF-8
ar_SY ISO-8859-6
ar_SY.UTF-8 UTF-8
ar_TN ISO-8859-6
ar_TN.UTF-8 UTF-8
ar_YE ISO-8859-6
ar_YE.UTF-8 UTF-8
# az_AZ ISO-8859-9E
az_AZ ISO-8859-9
az_AZ.UTF-8 UTF-8
be_BY CP1251
be_BY.UTF-8 UTF-8
bg_BG CP1251
bg_BG.UTF-8 UTF-8
bn_BD UTF-8
bn_IN UTF-8
br_FR ISO-8859-1
br_FR.UTF-8 UTF-8
bs_BA ISO-8859-2
bs_BA.UTF-8 UTF-8
cy_GB ISO-8859-14
cy_GB.UTF-8 UTF-8
de_AT ISO-8859-1
de_AT.UTF-8 UTF-8
de_AT.UTF-8@euro UTF-8
de_AT@euro ISO-8859-15
de_BE ISO-8859-1
de_BE.UTF-8 UTF-8
de_BE.UTF-8@euro UTF-8
de_BE@euro ISO-8859-15
de_CH ISO-8859-1
de_CH.UTF-8 UTF-8
de_DE ISO-8859-1
de_DE.UTF-8 UTF-8
de_DE.UTF-8@euro UTF-8
de_DE@euro ISO-8859-15
de_LU ISO-8859-1
de_LU.UTF-8 UTF-8
de_LU.UTF-8@euro UTF-8
de_LU@euro ISO-8859-15
el_GR ISO-8859-7
el_GR.UTF-8 UTF-8
en_AU ISO-8859-1
en_AU.UTF-8 UTF-8
en_BW ISO-8859-1
en_BW.UTF-8 UTF-8
en_CA ISO-8859-1
en_CA.UTF-8 UTF-8
en_DK ISO-8859-1
en_DK.UTF-8 UTF-8
en_GB ISO-8859-1
en_GB.UTF-8 UTF-8
en_HK ISO-8859-1
en_HK.UTF-8 UTF-8
en_IE ISO-8859-1
en_IE.UTF-8 UTF-8
en_IE.UTF-8@euro UTF-8
en_IE@euro ISO-8859-15
en_IN UTF-8
en_NZ ISO-8859-1
en_NZ.UTF-8 UTF-8
en_PH ISO-8859-1
en_PH.UTF-8 UTF-8
en_SG ISO-8859-1
en_SG.UTF-8 UTF-8
en_US ISO-8859-1
en_US.UTF-8 UTF-8
en_ZA ISO-8859-1
en_ZA.UTF-8 UTF-8
en_ZW ISO-8859-1
en_ZW.UTF-8 UTF-8
eo_EO.UTF-8 UTF-8
eu_ES ISO-8859-1
eu_ES.UTF-8 UTF-8
eu_ES.UTF-8@euro UTF-8
eu_ES@euro ISO-8859-15
fa_IR UTF-8
fa_IR.UTF-8 UTF-8
fo_FO ISO-8859-1
fo_FO.UTF-8 UTF-8
fr_BE ISO-8859-1
fr_BE.UTF-8 UTF-8
fr_BE.UTF-8@euro UTF-8
fr_BE@euro ISO-8859-15
fr_CA ISO-8859-1
fr_CA.UTF-8 UTF-8
fr_CH ISO-8859-1
fr_CH.UTF-8 UTF-8
fr_FR ISO-8859-1
fr_FR.UTF-8 UTF-8
fr_FR.UTF-8@euro UTF-8
fr_FR@euro ISO-8859-15
fr_LU ISO-8859-1
fr_LU.UTF-8 UTF-8
fr_LU.UTF-8@euro UTF-8
fr_LU@euro ISO-8859-15
ga_IE ISO-8859-1
ga_IE.UTF-8 UTF-8
ga_IE.UTF-8@euro UTF-8
ga_IE@euro ISO-8859-15
gd_GB ISO-8859-15
gd_GB.UTF-8 UTF-8
gl_ES ISO-8859-1
gl_ES.UTF-8 UTF-8
gl_ES.UTF-8@euro UTF-8
gl_ES@euro ISO-8859-15
gv_GB ISO-8859-1
gv_GB.UTF-8 UTF-8
he_IL ISO-8859-8
he_IL.UTF-8 UTF-8
hi_IN UTF-8
hi_IN.UTF-8 UTF-8
hu_HU ISO-8859-2
hu_HU.UTF-8 UTF-8
hy_AM ARMSCII-8
hy_AM.UTF-8 UTF-8
id_ID ISO-8859-1
id_ID.UTF-8 UTF-8
it_CH ISO-8859-1
it_CH.UTF-8 UTF-8
it_IT ISO-8859-1
it_IT.UTF-8 UTF-8
it_IT.UTF-8@euro UTF-8
it_IT@euro ISO-8859-15
iw_IL ISO-8859-8
iw_IL.UTF-8 UTF-8
ka_GE GEORGIAN-PS
ka_GE.UTF-8 UTF-8
kl_GL ISO-8859-1
kl_GL.UTF-8 UTF-8
ko_KR.UTF-8 UTF-8
kw_GB ISO-8859-1
kw_GB.UTF-8 UTF-8
mi_NZ ISO-8859-13
mi_NZ.UTF-8 UTF-8
mk_MK ISO-8859-5
mk_MK.UTF-8 UTF-8
mr_IN UTF-8
mr_IN.UTF-8 UTF-8
ms_MY ISO-8859-1
ms_MY.UTF-8 UTF-8
mt_MT ISO-8859-3
mt_MT.UTF-8 UTF-8
nl_BE ISO-8859-1
nl_BE.UTF-8 UTF-8
nl_BE.UTF-8@euro UTF-8
nl_BE@euro ISO-8859-15
nl_NL ISO-8859-1
nl_NL.UTF-8 UTF-8
nl_NL.UTF-8@euro UTF-8
nl_NL@euro ISO-8859-15
nn_NO ISO-8859-1
nn_NO.UTF-8 UTF-8
oc_FR ISO-8859-1
oc_FR.UTF-8 UTF-8
pt_BR ISO-8859-1
pt_BR.UTF-8 UTF-8
pt_PT ISO-8859-1
pt_PT.UTF-8 UTF-8
pt_PT.UTF-8@euro UTF-8
pt_PT@euro ISO-8859-15
ro_RO ISO-8859-2
ro_RO.UTF-8 UTF-8
ru_RU ISO-8859-5
ru_RU.KOI8-R KOI8-R
ru_RU.UTF-8 UTF-8
ru_UA KOI8-U
ru_UA.UTF-8 UTF-8
se_NO UTF-8
sk_SK ISO-8859-2
sk_SK.UTF-8 UTF-8
sq_AL ISO-8859-1
sq_AL.UTF-8 UTF-8
sr_YU ISO-8859-2
sr_YU.UTF-8 UTF-8
sr_YU.UTF-8@cyrillic UTF-8
sr_YU@cyrillic ISO-8859-5
sv_FI ISO-8859-1
sv_FI.UTF-8 UTF-8
sv_FI.UTF-8@euro UTF-8
sv_FI@euro ISO-8859-15
sv_SE ISO-8859-1
sv_SE.UTF-8 UTF-8
ta_IN UTF-8
te_IN UTF-8
tg_TJ KOI8-T
tg_TJ.UTF-8 UTF-8
th_TH TIS-620
th_TH.UTF-8 UTF-8
ti_ER UTF-8
ti_ET UTF-8
tl_PH ISO-8859-1
tl_PH.UTF-8 UTF-8
# tt_RU TATAR-CYR
tt_RU.UTF-8 UTF-8
uk_UA KOI8-U
uk_UA.UTF-8 UTF-8
ur_PK UTF-8
uz_UZ ISO-8859-1
uz_UZ.UTF-8 UTF-8
vi_VN UTF-8
vi_VN.UTF-8 UTF-8
wa_BE ISO-8859-1
wa_BE.UTF-8 UTF-8
wa_BE@euro ISO-8859-15
yi_US CP1255
yi_US.UTF-8 UTF-8
+95
View File
@@ -0,0 +1,95 @@
top_srcdir = ../../
EXTRA_LOCALE_DIR:=${shell cd $(top_srcdir)/extra/locale && pwd}
include $(top_srcdir)Rules.mak
CFLAGS_wc8bit=-DCTYPE_PACKED=1
CFLAGS_mmap=
ifeq ($(strip $(UCLIBC_HAS_WCHAR)),y)
CFLAGS_wc8bit += -DDO_WIDE_CHAR=1
CFLAGS_mmap += -D__WCHAR_ENABLED=1
endif
all: links-target
codesets.txt:
@if [ ! -f codesets.txt ] ; then \
set -e; \
echo " "; \
echo "You do not have a codesets.txt file. Please create this "; \
echo "file in the extra/locale directory by running something like: "; \
echo -e " find $(EXTRA_LOCALE_DIR)/charmaps -name \"*.pairs\" > \\"; \
echo -e " $(EXTRA_LOCALE_DIR)/codesets.txt"; \
echo "and then edit that file to disable/enable the codesets you wish to support. "; \
echo " "; \
false; \
fi;
gen_wc8bit: gen_wc8bit.c
$(HOSTCC) $(HOSTCFLAGS) $(NATIVE_LDFLAGS) $(CFLAGS_wc8bit) -D__UCLIBC_GEN_LOCALE $^ -o $@
c8tables.h: gen_wc8bit codesets.txt
./gen_wc8bit `cat codesets.txt`
gen_wctype: gen_wctype.c
$(HOSTCC) $(HOSTCFLAGS) $(NATIVE_LDFLAGS) -D__UCLIBC_GEN_LOCALE $^ -o $@
# Warning! Beware tr_TR toupper/tolower exceptions!
wctables.h: gen_wctype
./gen_wctype en_US
gen_locale: gen_locale.c c8tables.h
$(HOSTCC) $(HOSTCFLAGS) $(NATIVE_LDFLAGS) gen_locale.c -o $@
locale_tables.h: gen_locale locales.txt
./gen_locale locales.txt
lt_defines.h: locale_tables.h locale_collate.h
grep "^#define" locale_tables.h > lt_defines.h
grep "^#define __lc" locale_collate.h >> lt_defines.h
gen_collate: gen_collate.c
$(HOSTCC) $(HOSTCFLAGS) $(NATIVE_LDFLAGS) gen_collate.c -o $@
locale_collate.h: gen_collate locale_tables.h
grep COL_IDX_ locale_tables.h | sed -e "s/^.*COL_IDX_\([^, ]*\).*$$/\1/" | sort | uniq | xargs ./gen_collate
locales.txt:
@if [ ! -f locales.txt ] ; then \
set -e; \
echo " "; \
echo "You do not have a locales.txt file in the extra/locale "; \
echo "directory, Please copy the LOCALES file to locales.txt by "; \
echo "running something like: "; \
echo " cp $(EXTRA_LOCALE_DIR)/LOCALES \\ "; \
echo " $(EXTRA_LOCALE_DIR)/locales.txt "; \
echo "then edit locales.txt to disable/enable the locales you wish "; \
echo "to support. "; \
echo " "; \
false; \
fi;
gen_ldc: gen_ldc.c c8tables.h wctables.h locale_tables.h locale_collate.h
$(HOSTCC) $(HOSTCFLAGS) $(NATIVE_LDFLAGS) $(CFLAGS_mmap) gen_ldc.c -o $@
locale_data.c: gen_ldc
./gen_ldc
uClibc_locale_data.h: c8tables.h wctables.h lt_defines.h locale_mmap.h
grep -v "define __LC" lt_defines.h > uClibc_locale_data.h
cat c8tables.h wctables.h locale_mmap.h >> uClibc_locale_data.h
links-target: locale_data.c uClibc_locale_data.h
cat uClibc_locale_data.h | awk 'BEGIN{i=1}{ if ( /WANT_/ ) i = /endif/ ; else if (i) print $0 }' > ../../include/bits/uClibc_locale_data.h
pregen:
cat uClibc_locale_data.h | awk 'BEGIN{i=1}{ if ( /WANT_/ ) i = /endif/ ; else if (i) print $0 }' > ../../include/bits/uClibc_locale_data.h
clean:
$(RM) *.[oa] *~ core
$(RM) gen_wc8bit gen_wctype gen_locale gen_ldc gen_collate
$(RM) c8tables.h wctables.h locale_tables.h lt_defines.h locale_collate.h
$(RM) gen_mmap locale.mmap lmmtolso
$(RM) locale_data.c uClibc_locale_data.h
.PHONY: pregen links-target
+71
View File
@@ -0,0 +1,71 @@
Warning!!! Warning!!! Warning!!! Warning!!! Warning!!! Warning!!!
Warning!!! Warning!!! Warning!!! Warning!!! Warning!!! Warning!!!
The programs in this directory are strictly cut-and-paste hack jobs to
extract the data I needed from glibc's locale database. I'm ashamed to
even let them into the light of day, and I consider them complete garbage.
However, they are currently necessary to build the data needed for the
locale support I've implemented, so I'm forced to include them here.
NOTE: While its possible to use this stuff for native != target arch,
you'll have to either write a converter to account for endianess and
struct padding issues, or run the mmap file generator on your target
arch. But all these programs will be rewritten at some point.
All that being said, LC_CTYPE support has been added and supports the
ctype.h and wctype.h function. Also, LC_TIME, LC_MONETARY, LC_NUMERIC,
and LC_MESSAGES are supported wrt SUSv3. localeconv() works in both
real and stub locale modes. nl_langinfo() currently only works with
real locales enabled. That will be fixed though. wc->mb unsupported
char replacement and basic translit support is on the way as well.
Finally, some basic 8-bit codeset LC_COLLATE support should be in place
in the next week or two (similar to what was in the previous locale
implementation).
Also, as one can probably guess, I'm working towards having the locale
data accessed via a shared mmap. That will allow non-mmu platforms
to use this without the current bloat.
Currently, the output of size for my locale_data.o file is
text data bss dec hex filename
59072 4 0 59076 e6c4 extra/locale/locale_data.o
which is for the C locale (automatic of course) + all codesets in
charmaps/ and all 268 locales in LOCALES. I estimate that the
translit support for those 8-bit codesets will add another 7-10k.
One difference of note is that the special case upper/lower mappings
in the turkish locale are currently not implemented. That will be
fixed.
Manuel
Warning!!! Warning!!! Warning!!! Warning!!! Warning!!! Warning!!!
Warning!!! Warning!!! Warning!!! Warning!!! Warning!!! Warning!!!
1) In the toplevel dir, 'make headers'.
2) Create a codesets.txt file in this dir listing the codesets you want
to support. The easiest way to do this is to edit the output of
'find ./charmaps -name "*.pairs" > codesets.txt'.
NOTE: UTF-8 support is always included if you build with wide chars enabled.
NOTE: The files in charmaps/ were created from glibc's charmap files
with the awk script at the end of this file. You can add others
but only single byte codesets are supported.
3) Create a locales.txt file to select the locales you want to support.
You can copy and edit the LOCALES file for example. Other locales could
added provided you've included the appropriate codesets in step 2.
NOTE: You have to have the approprite locales available for glibc!
4) Run make here.
5) Continue building uClibc from the toplevel dir.
Script used to generate the charmaps/*.pairs files:
cat $1 | awk 'BEGIN { i = 0 } ; { if ($1 == "CHARMAP") i=1 ; else if ($1 == "END") i=0 ; else if (i==1) { sub("/","0",$2) ; sub("<U","0x",$1) ; sub(">","",$1) ; print "{", $2, ",", $1, "}," } }'
+254
View File
@@ -0,0 +1,254 @@
{ 0x00 , 0x0000 },
{ 0x01 , 0x0001 },
{ 0x02 , 0x0002 },
{ 0x03 , 0x0003 },
{ 0x04 , 0x0004 },
{ 0x05 , 0x0005 },
{ 0x06 , 0x0006 },
{ 0x07 , 0x0007 },
{ 0x08 , 0x0008 },
{ 0x09 , 0x0009 },
{ 0x0a , 0x000A },
{ 0x0b , 0x000B },
{ 0x0c , 0x000C },
{ 0x0d , 0x000D },
{ 0x0e , 0x000E },
{ 0x0f , 0x000F },
{ 0x10 , 0x0010 },
{ 0x11 , 0x0011 },
{ 0x12 , 0x0012 },
{ 0x13 , 0x0013 },
{ 0x14 , 0x0014 },
{ 0x15 , 0x0015 },
{ 0x16 , 0x0016 },
{ 0x17 , 0x0017 },
{ 0x18 , 0x0018 },
{ 0x19 , 0x0019 },
{ 0x1a , 0x001A },
{ 0x1b , 0x001B },
{ 0x1c , 0x001C },
{ 0x1d , 0x001D },
{ 0x1e , 0x001E },
{ 0x1f , 0x001F },
{ 0x20 , 0x0020 },
{ 0x21 , 0x0021 },
{ 0x22 , 0x0022 },
{ 0x23 , 0x0023 },
{ 0x24 , 0x0024 },
{ 0x25 , 0x0025 },
{ 0x26 , 0x0026 },
{ 0x27 , 0x0027 },
{ 0x28 , 0x0028 },
{ 0x29 , 0x0029 },
{ 0x2a , 0x002A },
{ 0x2b , 0x002B },
{ 0x2c , 0x002C },
{ 0x2d , 0x002D },
{ 0x2e , 0x002E },
{ 0x2f , 0x002F },
{ 0x30 , 0x0030 },
{ 0x31 , 0x0031 },
{ 0x32 , 0x0032 },
{ 0x33 , 0x0033 },
{ 0x34 , 0x0034 },
{ 0x35 , 0x0035 },
{ 0x36 , 0x0036 },
{ 0x37 , 0x0037 },
{ 0x38 , 0x0038 },
{ 0x39 , 0x0039 },
{ 0x3a , 0x003A },
{ 0x3b , 0x003B },
{ 0x3c , 0x003C },
{ 0x3d , 0x003D },
{ 0x3e , 0x003E },
{ 0x3f , 0x003F },
{ 0x40 , 0x0040 },
{ 0x41 , 0x0041 },
{ 0x42 , 0x0042 },
{ 0x43 , 0x0043 },
{ 0x44 , 0x0044 },
{ 0x45 , 0x0045 },
{ 0x46 , 0x0046 },
{ 0x47 , 0x0047 },
{ 0x48 , 0x0048 },
{ 0x49 , 0x0049 },
{ 0x4a , 0x004A },
{ 0x4b , 0x004B },
{ 0x4c , 0x004C },
{ 0x4d , 0x004D },
{ 0x4e , 0x004E },
{ 0x4f , 0x004F },
{ 0x50 , 0x0050 },
{ 0x51 , 0x0051 },
{ 0x52 , 0x0052 },
{ 0x53 , 0x0053 },
{ 0x54 , 0x0054 },
{ 0x55 , 0x0055 },
{ 0x56 , 0x0056 },
{ 0x57 , 0x0057 },
{ 0x58 , 0x0058 },
{ 0x59 , 0x0059 },
{ 0x5a , 0x005A },
{ 0x5b , 0x005B },
{ 0x5c , 0x005C },
{ 0x5d , 0x005D },
{ 0x5e , 0x005E },
{ 0x5f , 0x005F },
{ 0x60 , 0x0060 },
{ 0x61 , 0x0061 },
{ 0x62 , 0x0062 },
{ 0x63 , 0x0063 },
{ 0x64 , 0x0064 },
{ 0x65 , 0x0065 },
{ 0x66 , 0x0066 },
{ 0x67 , 0x0067 },
{ 0x68 , 0x0068 },
{ 0x69 , 0x0069 },
{ 0x6a , 0x006A },
{ 0x6b , 0x006B },
{ 0x6c , 0x006C },
{ 0x6d , 0x006D },
{ 0x6e , 0x006E },
{ 0x6f , 0x006F },
{ 0x70 , 0x0070 },
{ 0x71 , 0x0071 },
{ 0x72 , 0x0072 },
{ 0x73 , 0x0073 },
{ 0x74 , 0x0074 },
{ 0x75 , 0x0075 },
{ 0x76 , 0x0076 },
{ 0x77 , 0x0077 },
{ 0x78 , 0x0078 },
{ 0x79 , 0x0079 },
{ 0x7a , 0x007A },
{ 0x7b , 0x007B },
{ 0x7c , 0x007C },
{ 0x7d , 0x007D },
{ 0x7e , 0x007E },
{ 0x7f , 0x007F },
{ 0x80 , 0x0080 },
{ 0x81 , 0x0081 },
{ 0x82 , 0x0082 },
{ 0x83 , 0x0083 },
{ 0x84 , 0x0084 },
{ 0x85 , 0x0085 },
{ 0x86 , 0x0086 },
{ 0x87 , 0x0087 },
{ 0x88 , 0x0088 },
{ 0x89 , 0x0089 },
{ 0x8a , 0x008A },
{ 0x8b , 0x008B },
{ 0x8c , 0x008C },
{ 0x8d , 0x008D },
{ 0x8e , 0x008E },
{ 0x8f , 0x008F },
{ 0x90 , 0x0090 },
{ 0x91 , 0x0091 },
{ 0x92 , 0x0092 },
{ 0x93 , 0x0093 },
{ 0x94 , 0x0094 },
{ 0x95 , 0x0095 },
{ 0x96 , 0x0096 },
{ 0x97 , 0x0097 },
{ 0x98 , 0x0098 },
{ 0x99 , 0x0099 },
{ 0x9a , 0x009A },
{ 0x9b , 0x009B },
{ 0x9c , 0x009C },
{ 0x9d , 0x009D },
{ 0x9e , 0x009E },
{ 0x9f , 0x009F },
{ 0xa0 , 0x00A0 },
{ 0xa2 , 0x0587 },
{ 0xa3 , 0x0589 },
{ 0xa4 , 0x0029 },
{ 0xa5 , 0x0028 },
{ 0xa6 , 0x00BB },
{ 0xa7 , 0x00AB },
{ 0xa8 , 0x2014 },
{ 0xa9 , 0x002E },
{ 0xaa , 0x055D },
{ 0xab , 0x002C },
{ 0xac , 0x002D },
{ 0xad , 0x058A },
{ 0xae , 0x2026 },
{ 0xaf , 0x055C },
{ 0xb0 , 0x055B },
{ 0xb1 , 0x055E },
{ 0xb2 , 0x0531 },
{ 0xb3 , 0x0561 },
{ 0xb4 , 0x0532 },
{ 0xb5 , 0x0562 },
{ 0xb6 , 0x0533 },
{ 0xb7 , 0x0563 },
{ 0xb8 , 0x0534 },
{ 0xb9 , 0x0564 },
{ 0xba , 0x0535 },
{ 0xbb , 0x0565 },
{ 0xbc , 0x0536 },
{ 0xbd , 0x0566 },
{ 0xbe , 0x0537 },
{ 0xbf , 0x0567 },
{ 0xc0 , 0x0538 },
{ 0xc1 , 0x0568 },
{ 0xc2 , 0x0539 },
{ 0xc3 , 0x0569 },
{ 0xc4 , 0x053A },
{ 0xc5 , 0x056A },
{ 0xc6 , 0x053B },
{ 0xc7 , 0x056B },
{ 0xc8 , 0x053C },
{ 0xc9 , 0x056C },
{ 0xca , 0x053D },
{ 0xcb , 0x056D },
{ 0xcc , 0x053E },
{ 0xcd , 0x056E },
{ 0xce , 0x053F },
{ 0xcf , 0x056F },
{ 0xd0 , 0x0540 },
{ 0xd1 , 0x0570 },
{ 0xd2 , 0x0541 },
{ 0xd3 , 0x0571 },
{ 0xd4 , 0x0542 },
{ 0xd5 , 0x0572 },
{ 0xd6 , 0x0543 },
{ 0xd7 , 0x0573 },
{ 0xd8 , 0x0544 },
{ 0xd9 , 0x0574 },
{ 0xda , 0x0545 },
{ 0xdb , 0x0575 },
{ 0xdc , 0x0546 },
{ 0xdd , 0x0576 },
{ 0xde , 0x0547 },
{ 0xdf , 0x0577 },
{ 0xe0 , 0x0548 },
{ 0xe1 , 0x0578 },
{ 0xe2 , 0x0549 },
{ 0xe3 , 0x0579 },
{ 0xe4 , 0x054A },
{ 0xe5 , 0x057A },
{ 0xe6 , 0x054B },
{ 0xe7 , 0x057B },
{ 0xe8 , 0x054C },
{ 0xe9 , 0x057C },
{ 0xea , 0x054D },
{ 0xeb , 0x057D },
{ 0xec , 0x054E },
{ 0xed , 0x057E },
{ 0xee , 0x054F },
{ 0xef , 0x057F },
{ 0xf0 , 0x0550 },
{ 0xf1 , 0x0580 },
{ 0xf2 , 0x0551 },
{ 0xf3 , 0x0581 },
{ 0xf4 , 0x0552 },
{ 0xf5 , 0x0582 },
{ 0xf6 , 0x0553 },
{ 0xf7 , 0x0583 },
{ 0xf8 , 0x0554 },
{ 0xf9 , 0x0584 },
{ 0xfa , 0x0555 },
{ 0xfb , 0x0585 },
{ 0xfc , 0x0556 },
{ 0xfd , 0x0586 },
{ 0xfe , 0x055A },
+128
View File
@@ -0,0 +1,128 @@
{ 0x00 , 0x0000 },
{ 0x01 , 0x0001 },
{ 0x02 , 0x0002 },
{ 0x03 , 0x0003 },
{ 0x04 , 0x0004 },
{ 0x05 , 0x0005 },
{ 0x06 , 0x0006 },
{ 0x07 , 0x0007 },
{ 0x08 , 0x0008 },
{ 0x09 , 0x0009 },
{ 0x0a , 0x000A },
{ 0x0b , 0x000B },
{ 0x0c , 0x000C },
{ 0x0d , 0x000D },
{ 0x0e , 0x000E },
{ 0x0f , 0x000F },
{ 0x10 , 0x0010 },
{ 0x11 , 0x0011 },
{ 0x12 , 0x0012 },
{ 0x13 , 0x0013 },
{ 0x14 , 0x0014 },
{ 0x15 , 0x0015 },
{ 0x16 , 0x0016 },
{ 0x17 , 0x0017 },
{ 0x18 , 0x0018 },
{ 0x19 , 0x0019 },
{ 0x1a , 0x001A },
{ 0x1b , 0x001B },
{ 0x1c , 0x001C },
{ 0x1d , 0x001D },
{ 0x1e , 0x001E },
{ 0x1f , 0x001F },
{ 0x20 , 0x0020 },
{ 0x21 , 0x0021 },
{ 0x22 , 0x0022 },
{ 0x23 , 0x0023 },
{ 0x24 , 0x0024 },
{ 0x25 , 0x0025 },
{ 0x26 , 0x0026 },
{ 0x27 , 0x0027 },
{ 0x28 , 0x0028 },
{ 0x29 , 0x0029 },
{ 0x2a , 0x002A },
{ 0x2b , 0x002B },
{ 0x2c , 0x002C },
{ 0x2d , 0x002D },
{ 0x2e , 0x002E },
{ 0x2f , 0x002F },
{ 0x30 , 0x0030 },
{ 0x31 , 0x0031 },
{ 0x32 , 0x0032 },
{ 0x33 , 0x0033 },
{ 0x34 , 0x0034 },
{ 0x35 , 0x0035 },
{ 0x36 , 0x0036 },
{ 0x37 , 0x0037 },
{ 0x38 , 0x0038 },
{ 0x39 , 0x0039 },
{ 0x3a , 0x003A },
{ 0x3b , 0x003B },
{ 0x3c , 0x003C },
{ 0x3d , 0x003D },
{ 0x3e , 0x003E },
{ 0x3f , 0x003F },
{ 0x40 , 0x0040 },
{ 0x41 , 0x0041 },
{ 0x42 , 0x0042 },
{ 0x43 , 0x0043 },
{ 0x44 , 0x0044 },
{ 0x45 , 0x0045 },
{ 0x46 , 0x0046 },
{ 0x47 , 0x0047 },
{ 0x48 , 0x0048 },
{ 0x49 , 0x0049 },
{ 0x4a , 0x004A },
{ 0x4b , 0x004B },
{ 0x4c , 0x004C },
{ 0x4d , 0x004D },
{ 0x4e , 0x004E },
{ 0x4f , 0x004F },
{ 0x50 , 0x0050 },
{ 0x51 , 0x0051 },
{ 0x52 , 0x0052 },
{ 0x53 , 0x0053 },
{ 0x54 , 0x0054 },
{ 0x55 , 0x0055 },
{ 0x56 , 0x0056 },
{ 0x57 , 0x0057 },
{ 0x58 , 0x0058 },
{ 0x59 , 0x0059 },
{ 0x5a , 0x005A },
{ 0x5b , 0x005B },
{ 0x5c , 0x005C },
{ 0x5d , 0x005D },
{ 0x5e , 0x005E },
{ 0x5f , 0x005F },
{ 0x60 , 0x0060 },
{ 0x61 , 0x0061 },
{ 0x62 , 0x0062 },
{ 0x63 , 0x0063 },
{ 0x64 , 0x0064 },
{ 0x65 , 0x0065 },
{ 0x66 , 0x0066 },
{ 0x67 , 0x0067 },
{ 0x68 , 0x0068 },
{ 0x69 , 0x0069 },
{ 0x6a , 0x006A },
{ 0x6b , 0x006B },
{ 0x6c , 0x006C },
{ 0x6d , 0x006D },
{ 0x6e , 0x006E },
{ 0x6f , 0x006F },
{ 0x70 , 0x0070 },
{ 0x71 , 0x0071 },
{ 0x72 , 0x0072 },
{ 0x73 , 0x0073 },
{ 0x74 , 0x0074 },
{ 0x75 , 0x0075 },
{ 0x76 , 0x0076 },
{ 0x77 , 0x0077 },
{ 0x78 , 0x0078 },
{ 0x79 , 0x0079 },
{ 0x7a , 0x007A },
{ 0x7b , 0x007B },
{ 0x7c , 0x007C },
{ 0x7d , 0x007D },
{ 0x7e , 0x007E },
{ 0x7f , 0x007F },
+255
View File
@@ -0,0 +1,255 @@
{ 0x00 , 0x0000 },
{ 0x01 , 0x0001 },
{ 0x02 , 0x0002 },
{ 0x03 , 0x0003 },
{ 0x04 , 0x0004 },
{ 0x05 , 0x0005 },
{ 0x06 , 0x0006 },
{ 0x07 , 0x0007 },
{ 0x08 , 0x0008 },
{ 0x09 , 0x0009 },
{ 0x0a , 0x000A },
{ 0x0b , 0x000B },
{ 0x0c , 0x000C },
{ 0x0d , 0x000D },
{ 0x0e , 0x000E },
{ 0x0f , 0x000F },
{ 0x10 , 0x0010 },
{ 0x11 , 0x0011 },
{ 0x12 , 0x0012 },
{ 0x13 , 0x0013 },
{ 0x14 , 0x0014 },
{ 0x15 , 0x0015 },
{ 0x16 , 0x0016 },
{ 0x17 , 0x0017 },
{ 0x18 , 0x0018 },
{ 0x19 , 0x0019 },
{ 0x1a , 0x001A },
{ 0x1b , 0x001B },
{ 0x1c , 0x001C },
{ 0x1d , 0x001D },
{ 0x1e , 0x001E },
{ 0x1f , 0x001F },
{ 0x20 , 0x0020 },
{ 0x21 , 0x0021 },
{ 0x22 , 0x0022 },
{ 0x23 , 0x0023 },
{ 0x24 , 0x0024 },
{ 0x25 , 0x0025 },
{ 0x26 , 0x0026 },
{ 0x27 , 0x0027 },
{ 0x28 , 0x0028 },
{ 0x29 , 0x0029 },
{ 0x2a , 0x002A },
{ 0x2b , 0x002B },
{ 0x2c , 0x002C },
{ 0x2d , 0x002D },
{ 0x2e , 0x002E },
{ 0x2f , 0x002F },
{ 0x30 , 0x0030 },
{ 0x31 , 0x0031 },
{ 0x32 , 0x0032 },
{ 0x33 , 0x0033 },
{ 0x34 , 0x0034 },
{ 0x35 , 0x0035 },
{ 0x36 , 0x0036 },
{ 0x37 , 0x0037 },
{ 0x38 , 0x0038 },
{ 0x39 , 0x0039 },
{ 0x3a , 0x003A },
{ 0x3b , 0x003B },
{ 0x3c , 0x003C },
{ 0x3d , 0x003D },
{ 0x3e , 0x003E },
{ 0x3f , 0x003F },
{ 0x40 , 0x0040 },
{ 0x41 , 0x0041 },
{ 0x42 , 0x0042 },
{ 0x43 , 0x0043 },
{ 0x44 , 0x0044 },
{ 0x45 , 0x0045 },
{ 0x46 , 0x0046 },
{ 0x47 , 0x0047 },
{ 0x48 , 0x0048 },
{ 0x49 , 0x0049 },
{ 0x4a , 0x004A },
{ 0x4b , 0x004B },
{ 0x4c , 0x004C },
{ 0x4d , 0x004D },
{ 0x4e , 0x004E },
{ 0x4f , 0x004F },
{ 0x50 , 0x0050 },
{ 0x51 , 0x0051 },
{ 0x52 , 0x0052 },
{ 0x53 , 0x0053 },
{ 0x54 , 0x0054 },
{ 0x55 , 0x0055 },
{ 0x56 , 0x0056 },
{ 0x57 , 0x0057 },
{ 0x58 , 0x0058 },
{ 0x59 , 0x0059 },
{ 0x5a , 0x005A },
{ 0x5b , 0x005B },
{ 0x5c , 0x005C },
{ 0x5d , 0x005D },
{ 0x5e , 0x005E },
{ 0x5f , 0x005F },
{ 0x60 , 0x0060 },
{ 0x61 , 0x0061 },
{ 0x62 , 0x0062 },
{ 0x63 , 0x0063 },
{ 0x64 , 0x0064 },
{ 0x65 , 0x0065 },
{ 0x66 , 0x0066 },
{ 0x67 , 0x0067 },
{ 0x68 , 0x0068 },
{ 0x69 , 0x0069 },
{ 0x6a , 0x006A },
{ 0x6b , 0x006B },
{ 0x6c , 0x006C },
{ 0x6d , 0x006D },
{ 0x6e , 0x006E },
{ 0x6f , 0x006F },
{ 0x70 , 0x0070 },
{ 0x71 , 0x0071 },
{ 0x72 , 0x0072 },
{ 0x73 , 0x0073 },
{ 0x74 , 0x0074 },
{ 0x75 , 0x0075 },
{ 0x76 , 0x0076 },
{ 0x77 , 0x0077 },
{ 0x78 , 0x0078 },
{ 0x79 , 0x0079 },
{ 0x7a , 0x007A },
{ 0x7b , 0x007B },
{ 0x7c , 0x007C },
{ 0x7d , 0x007D },
{ 0x7e , 0x007E },
{ 0x7f , 0x007F },
{ 0x80 , 0x0402 },
{ 0x81 , 0x0403 },
{ 0x82 , 0x201A },
{ 0x83 , 0x0453 },
{ 0x84 , 0x201E },
{ 0x85 , 0x2026 },
{ 0x86 , 0x2020 },
{ 0x87 , 0x2021 },
{ 0x88 , 0x20AC },
{ 0x89 , 0x2030 },
{ 0x8a , 0x0409 },
{ 0x8b , 0x2039 },
{ 0x8c , 0x040A },
{ 0x8d , 0x040C },
{ 0x8e , 0x040B },
{ 0x8f , 0x040F },
{ 0x90 , 0x0452 },
{ 0x91 , 0x2018 },
{ 0x92 , 0x2019 },
{ 0x93 , 0x201C },
{ 0x94 , 0x201D },
{ 0x95 , 0x2022 },
{ 0x96 , 0x2013 },
{ 0x97 , 0x2014 },
{ 0x99 , 0x2122 },
{ 0x9a , 0x0459 },
{ 0x9b , 0x203A },
{ 0x9c , 0x045A },
{ 0x9d , 0x045C },
{ 0x9e , 0x045B },
{ 0x9f , 0x045F },
{ 0xa0 , 0x00A0 },
{ 0xa1 , 0x040E },
{ 0xa2 , 0x045E },
{ 0xa3 , 0x0408 },
{ 0xa4 , 0x00A4 },
{ 0xa5 , 0x0490 },
{ 0xa6 , 0x00A6 },
{ 0xa7 , 0x00A7 },
{ 0xa8 , 0x0401 },
{ 0xa9 , 0x00A9 },
{ 0xaa , 0x0404 },
{ 0xab , 0x00AB },
{ 0xac , 0x00AC },
{ 0xad , 0x00AD },
{ 0xae , 0x00AE },
{ 0xaf , 0x0407 },
{ 0xb0 , 0x00B0 },
{ 0xb1 , 0x00B1 },
{ 0xb2 , 0x0406 },
{ 0xb3 , 0x0456 },
{ 0xb4 , 0x0491 },
{ 0xb5 , 0x00B5 },
{ 0xb6 , 0x00B6 },
{ 0xb7 , 0x00B7 },
{ 0xb8 , 0x0451 },
{ 0xb9 , 0x2116 },
{ 0xba , 0x0454 },
{ 0xbb , 0x00BB },
{ 0xbc , 0x0458 },
{ 0xbd , 0x0405 },
{ 0xbe , 0x0455 },
{ 0xbf , 0x0457 },
{ 0xc0 , 0x0410 },
{ 0xc1 , 0x0411 },
{ 0xc2 , 0x0412 },
{ 0xc3 , 0x0413 },
{ 0xc4 , 0x0414 },
{ 0xc5 , 0x0415 },
{ 0xc6 , 0x0416 },
{ 0xc7 , 0x0417 },
{ 0xc8 , 0x0418 },
{ 0xc9 , 0x0419 },
{ 0xca , 0x041A },
{ 0xcb , 0x041B },
{ 0xcc , 0x041C },
{ 0xcd , 0x041D },
{ 0xce , 0x041E },
{ 0xcf , 0x041F },
{ 0xd0 , 0x0420 },
{ 0xd1 , 0x0421 },
{ 0xd2 , 0x0422 },
{ 0xd3 , 0x0423 },
{ 0xd4 , 0x0424 },
{ 0xd5 , 0x0425 },
{ 0xd6 , 0x0426 },
{ 0xd7 , 0x0427 },
{ 0xd8 , 0x0428 },
{ 0xd9 , 0x0429 },
{ 0xda , 0x042A },
{ 0xdb , 0x042B },
{ 0xdc , 0x042C },
{ 0xdd , 0x042D },
{ 0xde , 0x042E },
{ 0xdf , 0x042F },
{ 0xe0 , 0x0430 },
{ 0xe1 , 0x0431 },
{ 0xe2 , 0x0432 },
{ 0xe3 , 0x0433 },
{ 0xe4 , 0x0434 },
{ 0xe5 , 0x0435 },
{ 0xe6 , 0x0436 },
{ 0xe7 , 0x0437 },
{ 0xe8 , 0x0438 },
{ 0xe9 , 0x0439 },
{ 0xea , 0x043A },
{ 0xeb , 0x043B },
{ 0xec , 0x043C },
{ 0xed , 0x043D },
{ 0xee , 0x043E },
{ 0xef , 0x043F },
{ 0xf0 , 0x0440 },
{ 0xf1 , 0x0441 },
{ 0xf2 , 0x0442 },
{ 0xf3 , 0x0443 },
{ 0xf4 , 0x0444 },
{ 0xf5 , 0x0445 },
{ 0xf6 , 0x0446 },
{ 0xf7 , 0x0447 },
{ 0xf8 , 0x0448 },
{ 0xf9 , 0x0449 },
{ 0xfa , 0x044A },
{ 0xfb , 0x044B },
{ 0xfc , 0x044C },
{ 0xfd , 0x044D },
{ 0xfe , 0x044E },
{ 0xff , 0x044F },
+233
View File
@@ -0,0 +1,233 @@
{ 0x00 , 0x0000 },
{ 0x01 , 0x0001 },
{ 0x02 , 0x0002 },
{ 0x03 , 0x0003 },
{ 0x04 , 0x0004 },
{ 0x05 , 0x0005 },
{ 0x06 , 0x0006 },
{ 0x07 , 0x0007 },
{ 0x08 , 0x0008 },
{ 0x09 , 0x0009 },
{ 0x0a , 0x000A },
{ 0x0b , 0x000B },
{ 0x0c , 0x000C },
{ 0x0d , 0x000D },
{ 0x0e , 0x000E },
{ 0x0f , 0x000F },
{ 0x10 , 0x0010 },
{ 0x11 , 0x0011 },
{ 0x12 , 0x0012 },
{ 0x13 , 0x0013 },
{ 0x14 , 0x0014 },
{ 0x15 , 0x0015 },
{ 0x16 , 0x0016 },
{ 0x17 , 0x0017 },
{ 0x18 , 0x0018 },
{ 0x19 , 0x0019 },
{ 0x1a , 0x001A },
{ 0x1b , 0x001B },
{ 0x1c , 0x001C },
{ 0x1d , 0x001D },
{ 0x1e , 0x001E },
{ 0x1f , 0x001F },
{ 0x20 , 0x0020 },
{ 0x21 , 0x0021 },
{ 0x22 , 0x0022 },
{ 0x23 , 0x0023 },
{ 0x24 , 0x0024 },
{ 0x25 , 0x0025 },
{ 0x26 , 0x0026 },
{ 0x27 , 0x0027 },
{ 0x28 , 0x0028 },
{ 0x29 , 0x0029 },
{ 0x2a , 0x002A },
{ 0x2b , 0x002B },
{ 0x2c , 0x002C },
{ 0x2d , 0x002D },
{ 0x2e , 0x002E },
{ 0x2f , 0x002F },
{ 0x30 , 0x0030 },
{ 0x31 , 0x0031 },
{ 0x32 , 0x0032 },
{ 0x33 , 0x0033 },
{ 0x34 , 0x0034 },
{ 0x35 , 0x0035 },
{ 0x36 , 0x0036 },
{ 0x37 , 0x0037 },
{ 0x38 , 0x0038 },
{ 0x39 , 0x0039 },
{ 0x3a , 0x003A },
{ 0x3b , 0x003B },
{ 0x3c , 0x003C },
{ 0x3d , 0x003D },
{ 0x3e , 0x003E },
{ 0x3f , 0x003F },
{ 0x40 , 0x0040 },
{ 0x41 , 0x0041 },
{ 0x42 , 0x0042 },
{ 0x43 , 0x0043 },
{ 0x44 , 0x0044 },
{ 0x45 , 0x0045 },
{ 0x46 , 0x0046 },
{ 0x47 , 0x0047 },
{ 0x48 , 0x0048 },
{ 0x49 , 0x0049 },
{ 0x4a , 0x004A },
{ 0x4b , 0x004B },
{ 0x4c , 0x004C },
{ 0x4d , 0x004D },
{ 0x4e , 0x004E },
{ 0x4f , 0x004F },
{ 0x50 , 0x0050 },
{ 0x51 , 0x0051 },
{ 0x52 , 0x0052 },
{ 0x53 , 0x0053 },
{ 0x54 , 0x0054 },
{ 0x55 , 0x0055 },
{ 0x56 , 0x0056 },
{ 0x57 , 0x0057 },
{ 0x58 , 0x0058 },
{ 0x59 , 0x0059 },
{ 0x5a , 0x005A },
{ 0x5b , 0x005B },
{ 0x5c , 0x005C },
{ 0x5d , 0x005D },
{ 0x5e , 0x005E },
{ 0x5f , 0x005F },
{ 0x60 , 0x0060 },
{ 0x61 , 0x0061 },
{ 0x62 , 0x0062 },
{ 0x63 , 0x0063 },
{ 0x64 , 0x0064 },
{ 0x65 , 0x0065 },
{ 0x66 , 0x0066 },
{ 0x67 , 0x0067 },
{ 0x68 , 0x0068 },
{ 0x69 , 0x0069 },
{ 0x6a , 0x006A },
{ 0x6b , 0x006B },
{ 0x6c , 0x006C },
{ 0x6d , 0x006D },
{ 0x6e , 0x006E },
{ 0x6f , 0x006F },
{ 0x70 , 0x0070 },
{ 0x71 , 0x0071 },
{ 0x72 , 0x0072 },
{ 0x73 , 0x0073 },
{ 0x74 , 0x0074 },
{ 0x75 , 0x0075 },
{ 0x76 , 0x0076 },
{ 0x77 , 0x0077 },
{ 0x78 , 0x0078 },
{ 0x79 , 0x0079 },
{ 0x7a , 0x007A },
{ 0x7b , 0x007B },
{ 0x7c , 0x007C },
{ 0x7d , 0x007D },
{ 0x7e , 0x007E },
{ 0x7f , 0x007F },
{ 0x80 , 0x20AC },
{ 0x82 , 0x201A },
{ 0x83 , 0x0192 },
{ 0x84 , 0x201E },
{ 0x85 , 0x2026 },
{ 0x86 , 0x2020 },
{ 0x87 , 0x2021 },
{ 0x88 , 0x02C6 },
{ 0x89 , 0x2030 },
{ 0x8b , 0x2039 },
{ 0x91 , 0x2018 },
{ 0x92 , 0x2019 },
{ 0x93 , 0x201C },
{ 0x94 , 0x201D },
{ 0x95 , 0x2022 },
{ 0x96 , 0x2013 },
{ 0x97 , 0x2014 },
{ 0x98 , 0x02DC },
{ 0x99 , 0x2122 },
{ 0x9b , 0x203A },
{ 0xa0 , 0x00A0 },
{ 0xa1 , 0x00A1 },
{ 0xa2 , 0x00A2 },
{ 0xa3 , 0x00A3 },
{ 0xa4 , 0x20AA },
{ 0xa5 , 0x00A5 },
{ 0xa6 , 0x00A6 },
{ 0xa7 , 0x00A7 },
{ 0xa8 , 0x00A8 },
{ 0xa9 , 0x00A9 },
{ 0xaa , 0x00D7 },
{ 0xab , 0x00AB },
{ 0xac , 0x00AC },
{ 0xad , 0x00AD },
{ 0xae , 0x00AE },
{ 0xaf , 0x00AF },
{ 0xb0 , 0x00B0 },
{ 0xb1 , 0x00B1 },
{ 0xb2 , 0x00B2 },
{ 0xb3 , 0x00B3 },
{ 0xb4 , 0x00B4 },
{ 0xb5 , 0x00B5 },
{ 0xb6 , 0x00B6 },
{ 0xb7 , 0x00B7 },
{ 0xb8 , 0x00B8 },
{ 0xb9 , 0x00B9 },
{ 0xba , 0x00F7 },
{ 0xbb , 0x00BB },
{ 0xbc , 0x00BC },
{ 0xbd , 0x00BD },
{ 0xbe , 0x00BE },
{ 0xbf , 0x00BF },
{ 0xc0 , 0x05B0 },
{ 0xc1 , 0x05B1 },
{ 0xc2 , 0x05B2 },
{ 0xc3 , 0x05B3 },
{ 0xc4 , 0x05B4 },
{ 0xc5 , 0x05B5 },
{ 0xc6 , 0x05B6 },
{ 0xc7 , 0x05B7 },
{ 0xc8 , 0x05B8 },
{ 0xc9 , 0x05B9 },
{ 0xcb , 0x05BB },
{ 0xcc , 0x05BC },
{ 0xcd , 0x05BD },
{ 0xce , 0x05BE },
{ 0xcf , 0x05BF },
{ 0xd0 , 0x05C0 },
{ 0xd1 , 0x05C1 },
{ 0xd2 , 0x05C2 },
{ 0xd3 , 0x05C3 },
{ 0xd4 , 0x05F0 },
{ 0xd5 , 0x05F1 },
{ 0xd6 , 0x05F2 },
{ 0xd7 , 0x05F3 },
{ 0xd8 , 0x05F4 },
{ 0xe0 , 0x05D0 },
{ 0xe1 , 0x05D1 },
{ 0xe2 , 0x05D2 },
{ 0xe3 , 0x05D3 },
{ 0xe4 , 0x05D4 },
{ 0xe5 , 0x05D5 },
{ 0xe6 , 0x05D6 },
{ 0xe7 , 0x05D7 },
{ 0xe8 , 0x05D8 },
{ 0xe9 , 0x05D9 },
{ 0xea , 0x05DA },
{ 0xeb , 0x05DB },
{ 0xec , 0x05DC },
{ 0xed , 0x05DD },
{ 0xee , 0x05DE },
{ 0xef , 0x05DF },
{ 0xf0 , 0x05E0 },
{ 0xf1 , 0x05E1 },
{ 0xf2 , 0x05E2 },
{ 0xf3 , 0x05E3 },
{ 0xf4 , 0x05E4 },
{ 0xf5 , 0x05E5 },
{ 0xf6 , 0x05E6 },
{ 0xf7 , 0x05E7 },
{ 0xf8 , 0x05E8 },
{ 0xf9 , 0x05E9 },
{ 0xfa , 0x05EA },
{ 0xfd , 0x200E },
{ 0xfe , 0x200F },
+256
View File
@@ -0,0 +1,256 @@
{ 0x00 , 0x0000 },
{ 0x01 , 0x0001 },
{ 0x02 , 0x0002 },
{ 0x03 , 0x0003 },
{ 0x04 , 0x0004 },
{ 0x05 , 0x0005 },
{ 0x06 , 0x0006 },
{ 0x07 , 0x0007 },
{ 0x08 , 0x0008 },
{ 0x09 , 0x0009 },
{ 0x0a , 0x000A },
{ 0x0b , 0x000B },
{ 0x0c , 0x000C },
{ 0x0d , 0x000D },
{ 0x0e , 0x000E },
{ 0x0f , 0x000F },
{ 0x10 , 0x0010 },
{ 0x11 , 0x0011 },
{ 0x12 , 0x0012 },
{ 0x13 , 0x0013 },
{ 0x14 , 0x0014 },
{ 0x15 , 0x0015 },
{ 0x16 , 0x0016 },
{ 0x17 , 0x0017 },
{ 0x18 , 0x0018 },
{ 0x19 , 0x0019 },
{ 0x1a , 0x001A },
{ 0x1b , 0x001B },
{ 0x1c , 0x001C },
{ 0x1d , 0x001D },
{ 0x1e , 0x001E },
{ 0x1f , 0x001F },
{ 0x20 , 0x0020 },
{ 0x21 , 0x0021 },
{ 0x22 , 0x0022 },
{ 0x23 , 0x0023 },
{ 0x24 , 0x0024 },
{ 0x25 , 0x0025 },
{ 0x26 , 0x0026 },
{ 0x27 , 0x0027 },
{ 0x28 , 0x0028 },
{ 0x29 , 0x0029 },
{ 0x2a , 0x002A },
{ 0x2b , 0x002B },
{ 0x2c , 0x002C },
{ 0x2d , 0x002D },
{ 0x2e , 0x002E },
{ 0x2f , 0x002F },
{ 0x30 , 0x0030 },
{ 0x31 , 0x0031 },
{ 0x32 , 0x0032 },
{ 0x33 , 0x0033 },
{ 0x34 , 0x0034 },
{ 0x35 , 0x0035 },
{ 0x36 , 0x0036 },
{ 0x37 , 0x0037 },
{ 0x38 , 0x0038 },
{ 0x39 , 0x0039 },
{ 0x3a , 0x003A },
{ 0x3b , 0x003B },
{ 0x3c , 0x003C },
{ 0x3d , 0x003D },
{ 0x3e , 0x003E },
{ 0x3f , 0x003F },
{ 0x40 , 0x0040 },
{ 0x41 , 0x0041 },
{ 0x42 , 0x0042 },
{ 0x43 , 0x0043 },
{ 0x44 , 0x0044 },
{ 0x45 , 0x0045 },
{ 0x46 , 0x0046 },
{ 0x47 , 0x0047 },
{ 0x48 , 0x0048 },
{ 0x49 , 0x0049 },
{ 0x4a , 0x004A },
{ 0x4b , 0x004B },
{ 0x4c , 0x004C },
{ 0x4d , 0x004D },
{ 0x4e , 0x004E },
{ 0x4f , 0x004F },
{ 0x50 , 0x0050 },
{ 0x51 , 0x0051 },
{ 0x52 , 0x0052 },
{ 0x53 , 0x0053 },
{ 0x54 , 0x0054 },
{ 0x55 , 0x0055 },
{ 0x56 , 0x0056 },
{ 0x57 , 0x0057 },
{ 0x58 , 0x0058 },
{ 0x59 , 0x0059 },
{ 0x5a , 0x005A },
{ 0x5b , 0x005B },
{ 0x5c , 0x005C },
{ 0x5d , 0x005D },
{ 0x5e , 0x005E },
{ 0x5f , 0x005F },
{ 0x60 , 0x0060 },
{ 0x61 , 0x0061 },
{ 0x62 , 0x0062 },
{ 0x63 , 0x0063 },
{ 0x64 , 0x0064 },
{ 0x65 , 0x0065 },
{ 0x66 , 0x0066 },
{ 0x67 , 0x0067 },
{ 0x68 , 0x0068 },
{ 0x69 , 0x0069 },
{ 0x6a , 0x006A },
{ 0x6b , 0x006B },
{ 0x6c , 0x006C },
{ 0x6d , 0x006D },
{ 0x6e , 0x006E },
{ 0x6f , 0x006F },
{ 0x70 , 0x0070 },
{ 0x71 , 0x0071 },
{ 0x72 , 0x0072 },
{ 0x73 , 0x0073 },
{ 0x74 , 0x0074 },
{ 0x75 , 0x0075 },
{ 0x76 , 0x0076 },
{ 0x77 , 0x0077 },
{ 0x78 , 0x0078 },
{ 0x79 , 0x0079 },
{ 0x7a , 0x007A },
{ 0x7b , 0x007B },
{ 0x7c , 0x007C },
{ 0x7d , 0x007D },
{ 0x7e , 0x007E },
{ 0x7f , 0x007F },
{ 0x80 , 0x0080 },
{ 0x81 , 0x0081 },
{ 0x82 , 0x201A },
{ 0x83 , 0x0192 },
{ 0x84 , 0x201E },
{ 0x85 , 0x2026 },
{ 0x86 , 0x2020 },
{ 0x87 , 0x2021 },
{ 0x88 , 0x02C6 },
{ 0x89 , 0x2030 },
{ 0x8a , 0x0160 },
{ 0x8b , 0x2039 },
{ 0x8c , 0x0152 },
{ 0x8d , 0x008D },
{ 0x8e , 0x008E },
{ 0x8f , 0x008F },
{ 0x90 , 0x0090 },
{ 0x91 , 0x2018 },
{ 0x92 , 0x2019 },
{ 0x93 , 0x201C },
{ 0x94 , 0x201D },
{ 0x95 , 0x2022 },
{ 0x96 , 0x2013 },
{ 0x97 , 0x2014 },
{ 0x98 , 0x02DC },
{ 0x99 , 0x2122 },
{ 0x9a , 0x0161 },
{ 0x9b , 0x203A },
{ 0x9c , 0x0153 },
{ 0x9d , 0x009D },
{ 0x9e , 0x009E },
{ 0x9f , 0x0178 },
{ 0xa0 , 0x00A0 },
{ 0xa1 , 0x00A1 },
{ 0xa2 , 0x00A2 },
{ 0xa3 , 0x00A3 },
{ 0xa4 , 0x00A4 },
{ 0xa5 , 0x00A5 },
{ 0xa6 , 0x00A6 },
{ 0xa7 , 0x00A7 },
{ 0xa8 , 0x00A8 },
{ 0xa9 , 0x00A9 },
{ 0xaa , 0x00AA },
{ 0xab , 0x00AB },
{ 0xac , 0x00AC },
{ 0xad , 0x00AD },
{ 0xae , 0x00AE },
{ 0xaf , 0x00AF },
{ 0xb0 , 0x00B0 },
{ 0xb1 , 0x00B1 },
{ 0xb2 , 0x00B2 },
{ 0xb3 , 0x00B3 },
{ 0xb4 , 0x00B4 },
{ 0xb5 , 0x00B5 },
{ 0xb6 , 0x00B6 },
{ 0xb7 , 0x00B7 },
{ 0xb8 , 0x00B8 },
{ 0xb9 , 0x00B9 },
{ 0xba , 0x00BA },
{ 0xbb , 0x00BB },
{ 0xbc , 0x00BC },
{ 0xbd , 0x00BD },
{ 0xbe , 0x00BE },
{ 0xbf , 0x00BF },
{ 0xc0 , 0x10D0 },
{ 0xc1 , 0x10D1 },
{ 0xc2 , 0x10D2 },
{ 0xc3 , 0x10D3 },
{ 0xc4 , 0x10D4 },
{ 0xc5 , 0x10D5 },
{ 0xc6 , 0x10D6 },
{ 0xc7 , 0x10F1 },
{ 0xc8 , 0x10D7 },
{ 0xc9 , 0x10D8 },
{ 0xca , 0x10D9 },
{ 0xcb , 0x10DA },
{ 0xcc , 0x10DB },
{ 0xcd , 0x10DC },
{ 0xce , 0x10F2 },
{ 0xcf , 0x10DD },
{ 0xd0 , 0x10DE },
{ 0xd1 , 0x10DF },
{ 0xd2 , 0x10E0 },
{ 0xd3 , 0x10E1 },
{ 0xd4 , 0x10E2 },
{ 0xd5 , 0x10F3 },
{ 0xd6 , 0x10E3 },
{ 0xd7 , 0x10E4 },
{ 0xd8 , 0x10E5 },
{ 0xd9 , 0x10E6 },
{ 0xda , 0x10E7 },
{ 0xdb , 0x10E8 },
{ 0xdc , 0x10E9 },
{ 0xdd , 0x10EA },
{ 0xde , 0x10EB },
{ 0xdf , 0x10EC },
{ 0xe0 , 0x10ED },
{ 0xe1 , 0x10EE },
{ 0xe2 , 0x10F4 },
{ 0xe3 , 0x10EF },
{ 0xe4 , 0x10F0 },
{ 0xe5 , 0x10F5 },
{ 0xe6 , 0x00E6 },
{ 0xe7 , 0x00E7 },
{ 0xe8 , 0x00E8 },
{ 0xe9 , 0x00E9 },
{ 0xea , 0x00EA },
{ 0xeb , 0x00EB },
{ 0xec , 0x00EC },
{ 0xed , 0x00ED },
{ 0xee , 0x00EE },
{ 0xef , 0x00EF },
{ 0xf0 , 0x00F0 },
{ 0xf1 , 0x00F1 },
{ 0xf2 , 0x00F2 },
{ 0xf3 , 0x00F3 },
{ 0xf4 , 0x00F4 },
{ 0xf5 , 0x00F5 },
{ 0xf6 , 0x00F6 },
{ 0xf7 , 0x00F7 },
{ 0xf8 , 0x00F8 },
{ 0xf9 , 0x00F9 },
{ 0xfa , 0x00FA },
{ 0xfb , 0x00FB },
{ 0xfc , 0x00FC },
{ 0xfd , 0x00FD },
{ 0xfe , 0x00FE },
{ 0xff , 0x00FF },
+256
View File
@@ -0,0 +1,256 @@
{ 0x00 , 0x0000 },
{ 0x01 , 0x0001 },
{ 0x02 , 0x0002 },
{ 0x03 , 0x0003 },
{ 0x04 , 0x0004 },
{ 0x05 , 0x0005 },
{ 0x06 , 0x0006 },
{ 0x07 , 0x0007 },
{ 0x08 , 0x0008 },
{ 0x09 , 0x0009 },
{ 0x0a , 0x000A },
{ 0x0b , 0x000B },
{ 0x0c , 0x000C },
{ 0x0d , 0x000D },
{ 0x0e , 0x000E },
{ 0x0f , 0x000F },
{ 0x10 , 0x0010 },
{ 0x11 , 0x0011 },
{ 0x12 , 0x0012 },
{ 0x13 , 0x0013 },
{ 0x14 , 0x0014 },
{ 0x15 , 0x0015 },
{ 0x16 , 0x0016 },
{ 0x17 , 0x0017 },
{ 0x18 , 0x0018 },
{ 0x19 , 0x0019 },
{ 0x1a , 0x001A },
{ 0x1b , 0x001B },
{ 0x1c , 0x001C },
{ 0x1d , 0x001D },
{ 0x1e , 0x001E },
{ 0x1f , 0x001F },
{ 0x20 , 0x0020 },
{ 0x21 , 0x0021 },
{ 0x22 , 0x0022 },
{ 0x23 , 0x0023 },
{ 0x24 , 0x0024 },
{ 0x25 , 0x0025 },
{ 0x26 , 0x0026 },
{ 0x27 , 0x0027 },
{ 0x28 , 0x0028 },
{ 0x29 , 0x0029 },
{ 0x2a , 0x002A },
{ 0x2b , 0x002B },
{ 0x2c , 0x002C },
{ 0x2d , 0x002D },
{ 0x2e , 0x002E },
{ 0x2f , 0x002F },
{ 0x30 , 0x0030 },
{ 0x31 , 0x0031 },
{ 0x32 , 0x0032 },
{ 0x33 , 0x0033 },
{ 0x34 , 0x0034 },
{ 0x35 , 0x0035 },
{ 0x36 , 0x0036 },
{ 0x37 , 0x0037 },
{ 0x38 , 0x0038 },
{ 0x39 , 0x0039 },
{ 0x3a , 0x003A },
{ 0x3b , 0x003B },
{ 0x3c , 0x003C },
{ 0x3d , 0x003D },
{ 0x3e , 0x003E },
{ 0x3f , 0x003F },
{ 0x40 , 0x0040 },
{ 0x41 , 0x0041 },
{ 0x42 , 0x0042 },
{ 0x43 , 0x0043 },
{ 0x44 , 0x0044 },
{ 0x45 , 0x0045 },
{ 0x46 , 0x0046 },
{ 0x47 , 0x0047 },
{ 0x48 , 0x0048 },
{ 0x49 , 0x0049 },
{ 0x4a , 0x004A },
{ 0x4b , 0x004B },
{ 0x4c , 0x004C },
{ 0x4d , 0x004D },
{ 0x4e , 0x004E },
{ 0x4f , 0x004F },
{ 0x50 , 0x0050 },
{ 0x51 , 0x0051 },
{ 0x52 , 0x0052 },
{ 0x53 , 0x0053 },
{ 0x54 , 0x0054 },
{ 0x55 , 0x0055 },
{ 0x56 , 0x0056 },
{ 0x57 , 0x0057 },
{ 0x58 , 0x0058 },
{ 0x59 , 0x0059 },
{ 0x5a , 0x005A },
{ 0x5b , 0x005B },
{ 0x5c , 0x005C },
{ 0x5d , 0x005D },
{ 0x5e , 0x005E },
{ 0x5f , 0x005F },
{ 0x60 , 0x0060 },
{ 0x61 , 0x0061 },
{ 0x62 , 0x0062 },
{ 0x63 , 0x0063 },
{ 0x64 , 0x0064 },
{ 0x65 , 0x0065 },
{ 0x66 , 0x0066 },
{ 0x67 , 0x0067 },
{ 0x68 , 0x0068 },
{ 0x69 , 0x0069 },
{ 0x6a , 0x006A },
{ 0x6b , 0x006B },
{ 0x6c , 0x006C },
{ 0x6d , 0x006D },
{ 0x6e , 0x006E },
{ 0x6f , 0x006F },
{ 0x70 , 0x0070 },
{ 0x71 , 0x0071 },
{ 0x72 , 0x0072 },
{ 0x73 , 0x0073 },
{ 0x74 , 0x0074 },
{ 0x75 , 0x0075 },
{ 0x76 , 0x0076 },
{ 0x77 , 0x0077 },
{ 0x78 , 0x0078 },
{ 0x79 , 0x0079 },
{ 0x7a , 0x007A },
{ 0x7b , 0x007B },
{ 0x7c , 0x007C },
{ 0x7d , 0x007D },
{ 0x7e , 0x007E },
{ 0x7f , 0x007F },
{ 0x80 , 0x0080 },
{ 0x81 , 0x0081 },
{ 0x82 , 0x0082 },
{ 0x83 , 0x0083 },
{ 0x84 , 0x0084 },
{ 0x85 , 0x0085 },
{ 0x86 , 0x0086 },
{ 0x87 , 0x0087 },
{ 0x88 , 0x0088 },
{ 0x89 , 0x0089 },
{ 0x8a , 0x008A },
{ 0x8b , 0x008B },
{ 0x8c , 0x008C },
{ 0x8d , 0x008D },
{ 0x8e , 0x008E },
{ 0x8f , 0x008F },
{ 0x90 , 0x0090 },
{ 0x91 , 0x0091 },
{ 0x92 , 0x0092 },
{ 0x93 , 0x0093 },
{ 0x94 , 0x0094 },
{ 0x95 , 0x0095 },
{ 0x96 , 0x0096 },
{ 0x97 , 0x0097 },
{ 0x98 , 0x0098 },
{ 0x99 , 0x0099 },
{ 0x9a , 0x009A },
{ 0x9b , 0x009B },
{ 0x9c , 0x009C },
{ 0x9d , 0x009D },
{ 0x9e , 0x009E },
{ 0x9f , 0x009F },
{ 0xa0 , 0x00A0 },
{ 0xa1 , 0x00A1 },
{ 0xa2 , 0x00A2 },
{ 0xa3 , 0x00A3 },
{ 0xa4 , 0x00A4 },
{ 0xa5 , 0x00A5 },
{ 0xa6 , 0x00A6 },
{ 0xa7 , 0x00A7 },
{ 0xa8 , 0x00A8 },
{ 0xa9 , 0x00A9 },
{ 0xaa , 0x00AA },
{ 0xab , 0x00AB },
{ 0xac , 0x00AC },
{ 0xad , 0x00AD },
{ 0xae , 0x00AE },
{ 0xaf , 0x00AF },
{ 0xb0 , 0x00B0 },
{ 0xb1 , 0x00B1 },
{ 0xb2 , 0x00B2 },
{ 0xb3 , 0x00B3 },
{ 0xb4 , 0x00B4 },
{ 0xb5 , 0x00B5 },
{ 0xb6 , 0x00B6 },
{ 0xb7 , 0x00B7 },
{ 0xb8 , 0x00B8 },
{ 0xb9 , 0x00B9 },
{ 0xba , 0x00BA },
{ 0xbb , 0x00BB },
{ 0xbc , 0x00BC },
{ 0xbd , 0x00BD },
{ 0xbe , 0x00BE },
{ 0xbf , 0x00BF },
{ 0xc0 , 0x00C0 },
{ 0xc1 , 0x00C1 },
{ 0xc2 , 0x00C2 },
{ 0xc3 , 0x00C3 },
{ 0xc4 , 0x00C4 },
{ 0xc5 , 0x00C5 },
{ 0xc6 , 0x00C6 },
{ 0xc7 , 0x00C7 },
{ 0xc8 , 0x00C8 },
{ 0xc9 , 0x00C9 },
{ 0xca , 0x00CA },
{ 0xcb , 0x00CB },
{ 0xcc , 0x00CC },
{ 0xcd , 0x00CD },
{ 0xce , 0x00CE },
{ 0xcf , 0x00CF },
{ 0xd0 , 0x00D0 },
{ 0xd1 , 0x00D1 },
{ 0xd2 , 0x00D2 },
{ 0xd3 , 0x00D3 },
{ 0xd4 , 0x00D4 },
{ 0xd5 , 0x00D5 },
{ 0xd6 , 0x00D6 },
{ 0xd7 , 0x00D7 },
{ 0xd8 , 0x00D8 },
{ 0xd9 , 0x00D9 },
{ 0xda , 0x00DA },
{ 0xdb , 0x00DB },
{ 0xdc , 0x00DC },
{ 0xdd , 0x00DD },
{ 0xde , 0x00DE },
{ 0xdf , 0x00DF },
{ 0xe0 , 0x00E0 },
{ 0xe1 , 0x00E1 },
{ 0xe2 , 0x00E2 },
{ 0xe3 , 0x00E3 },
{ 0xe4 , 0x00E4 },
{ 0xe5 , 0x00E5 },
{ 0xe6 , 0x00E6 },
{ 0xe7 , 0x00E7 },
{ 0xe8 , 0x00E8 },
{ 0xe9 , 0x00E9 },
{ 0xea , 0x00EA },
{ 0xeb , 0x00EB },
{ 0xec , 0x00EC },
{ 0xed , 0x00ED },
{ 0xee , 0x00EE },
{ 0xef , 0x00EF },
{ 0xf0 , 0x00F0 },
{ 0xf1 , 0x00F1 },
{ 0xf2 , 0x00F2 },
{ 0xf3 , 0x00F3 },
{ 0xf4 , 0x00F4 },
{ 0xf5 , 0x00F5 },
{ 0xf6 , 0x00F6 },
{ 0xf7 , 0x00F7 },
{ 0xf8 , 0x00F8 },
{ 0xf9 , 0x00F9 },
{ 0xfa , 0x00FA },
{ 0xfb , 0x00FB },
{ 0xfc , 0x00FC },
{ 0xfd , 0x00FD },
{ 0xfe , 0x00FE },
{ 0xff , 0x00FF },
+256
View File
@@ -0,0 +1,256 @@
{ 0x00 , 0x0000 },
{ 0x01 , 0x0001 },
{ 0x02 , 0x0002 },
{ 0x03 , 0x0003 },
{ 0x04 , 0x0004 },
{ 0x05 , 0x0005 },
{ 0x06 , 0x0006 },
{ 0x07 , 0x0007 },
{ 0x08 , 0x0008 },
{ 0x09 , 0x0009 },
{ 0x0a , 0x000A },
{ 0x0b , 0x000B },
{ 0x0c , 0x000C },
{ 0x0d , 0x000D },
{ 0x0e , 0x000E },
{ 0x0f , 0x000F },
{ 0x10 , 0x0010 },
{ 0x11 , 0x0011 },
{ 0x12 , 0x0012 },
{ 0x13 , 0x0013 },
{ 0x14 , 0x0014 },
{ 0x15 , 0x0015 },
{ 0x16 , 0x0016 },
{ 0x17 , 0x0017 },
{ 0x18 , 0x0018 },
{ 0x19 , 0x0019 },
{ 0x1a , 0x001A },
{ 0x1b , 0x001B },
{ 0x1c , 0x001C },
{ 0x1d , 0x001D },
{ 0x1e , 0x001E },
{ 0x1f , 0x001F },
{ 0x20 , 0x0020 },
{ 0x21 , 0x0021 },
{ 0x22 , 0x0022 },
{ 0x23 , 0x0023 },
{ 0x24 , 0x0024 },
{ 0x25 , 0x0025 },
{ 0x26 , 0x0026 },
{ 0x27 , 0x0027 },
{ 0x28 , 0x0028 },
{ 0x29 , 0x0029 },
{ 0x2a , 0x002A },
{ 0x2b , 0x002B },
{ 0x2c , 0x002C },
{ 0x2d , 0x002D },
{ 0x2e , 0x002E },
{ 0x2f , 0x002F },
{ 0x30 , 0x0030 },
{ 0x31 , 0x0031 },
{ 0x32 , 0x0032 },
{ 0x33 , 0x0033 },
{ 0x34 , 0x0034 },
{ 0x35 , 0x0035 },
{ 0x36 , 0x0036 },
{ 0x37 , 0x0037 },
{ 0x38 , 0x0038 },
{ 0x39 , 0x0039 },
{ 0x3a , 0x003A },
{ 0x3b , 0x003B },
{ 0x3c , 0x003C },
{ 0x3d , 0x003D },
{ 0x3e , 0x003E },
{ 0x3f , 0x003F },
{ 0x40 , 0x0040 },
{ 0x41 , 0x0041 },
{ 0x42 , 0x0042 },
{ 0x43 , 0x0043 },
{ 0x44 , 0x0044 },
{ 0x45 , 0x0045 },
{ 0x46 , 0x0046 },
{ 0x47 , 0x0047 },
{ 0x48 , 0x0048 },
{ 0x49 , 0x0049 },
{ 0x4a , 0x004A },
{ 0x4b , 0x004B },
{ 0x4c , 0x004C },
{ 0x4d , 0x004D },
{ 0x4e , 0x004E },
{ 0x4f , 0x004F },
{ 0x50 , 0x0050 },
{ 0x51 , 0x0051 },
{ 0x52 , 0x0052 },
{ 0x53 , 0x0053 },
{ 0x54 , 0x0054 },
{ 0x55 , 0x0055 },
{ 0x56 , 0x0056 },
{ 0x57 , 0x0057 },
{ 0x58 , 0x0058 },
{ 0x59 , 0x0059 },
{ 0x5a , 0x005A },
{ 0x5b , 0x005B },
{ 0x5c , 0x005C },
{ 0x5d , 0x005D },
{ 0x5e , 0x005E },
{ 0x5f , 0x005F },
{ 0x60 , 0x0060 },
{ 0x61 , 0x0061 },
{ 0x62 , 0x0062 },
{ 0x63 , 0x0063 },
{ 0x64 , 0x0064 },
{ 0x65 , 0x0065 },
{ 0x66 , 0x0066 },
{ 0x67 , 0x0067 },
{ 0x68 , 0x0068 },
{ 0x69 , 0x0069 },
{ 0x6a , 0x006A },
{ 0x6b , 0x006B },
{ 0x6c , 0x006C },
{ 0x6d , 0x006D },
{ 0x6e , 0x006E },
{ 0x6f , 0x006F },
{ 0x70 , 0x0070 },
{ 0x71 , 0x0071 },
{ 0x72 , 0x0072 },
{ 0x73 , 0x0073 },
{ 0x74 , 0x0074 },
{ 0x75 , 0x0075 },
{ 0x76 , 0x0076 },
{ 0x77 , 0x0077 },
{ 0x78 , 0x0078 },
{ 0x79 , 0x0079 },
{ 0x7a , 0x007A },
{ 0x7b , 0x007B },
{ 0x7c , 0x007C },
{ 0x7d , 0x007D },
{ 0x7e , 0x007E },
{ 0x7f , 0x007F },
{ 0x80 , 0x0080 },
{ 0x81 , 0x0081 },
{ 0x82 , 0x0082 },
{ 0x83 , 0x0083 },
{ 0x84 , 0x0084 },
{ 0x85 , 0x0085 },
{ 0x86 , 0x0086 },
{ 0x87 , 0x0087 },
{ 0x88 , 0x0088 },
{ 0x89 , 0x0089 },
{ 0x8a , 0x008A },
{ 0x8b , 0x008B },
{ 0x8c , 0x008C },
{ 0x8d , 0x008D },
{ 0x8e , 0x008E },
{ 0x8f , 0x008F },
{ 0x90 , 0x0090 },
{ 0x91 , 0x0091 },
{ 0x92 , 0x0092 },
{ 0x93 , 0x0093 },
{ 0x94 , 0x0094 },
{ 0x95 , 0x0095 },
{ 0x96 , 0x0096 },
{ 0x97 , 0x0097 },
{ 0x98 , 0x0098 },
{ 0x99 , 0x0099 },
{ 0x9a , 0x009A },
{ 0x9b , 0x009B },
{ 0x9c , 0x009C },
{ 0x9d , 0x009D },
{ 0x9e , 0x009E },
{ 0x9f , 0x009F },
{ 0xa0 , 0x00A0 },
{ 0xa1 , 0x0104 },
{ 0xa2 , 0x0112 },
{ 0xa3 , 0x0122 },
{ 0xa4 , 0x012A },
{ 0xa5 , 0x0128 },
{ 0xa6 , 0x0136 },
{ 0xa7 , 0x00A7 },
{ 0xa8 , 0x013B },
{ 0xa9 , 0x0110 },
{ 0xaa , 0x0160 },
{ 0xab , 0x0166 },
{ 0xac , 0x017D },
{ 0xad , 0x00AD },
{ 0xae , 0x016A },
{ 0xaf , 0x014A },
{ 0xb0 , 0x00B0 },
{ 0xb1 , 0x0105 },
{ 0xb2 , 0x0113 },
{ 0xb3 , 0x0123 },
{ 0xb4 , 0x012B },
{ 0xb5 , 0x0129 },
{ 0xb6 , 0x0137 },
{ 0xb7 , 0x00B7 },
{ 0xb8 , 0x013C },
{ 0xb9 , 0x0111 },
{ 0xba , 0x0161 },
{ 0xbb , 0x0167 },
{ 0xbc , 0x017E },
{ 0xbd , 0x2015 },
{ 0xbe , 0x016B },
{ 0xbf , 0x014B },
{ 0xc0 , 0x0100 },
{ 0xc1 , 0x00C1 },
{ 0xc2 , 0x00C2 },
{ 0xc3 , 0x00C3 },
{ 0xc4 , 0x00C4 },
{ 0xc5 , 0x00C5 },
{ 0xc6 , 0x00C6 },
{ 0xc7 , 0x012E },
{ 0xc8 , 0x010C },
{ 0xc9 , 0x00C9 },
{ 0xca , 0x0118 },
{ 0xcb , 0x00CB },
{ 0xcc , 0x0116 },
{ 0xcd , 0x00CD },
{ 0xce , 0x00CE },
{ 0xcf , 0x00CF },
{ 0xd0 , 0x00D0 },
{ 0xd1 , 0x0145 },
{ 0xd2 , 0x014C },
{ 0xd3 , 0x00D3 },
{ 0xd4 , 0x00D4 },
{ 0xd5 , 0x00D5 },
{ 0xd6 , 0x00D6 },
{ 0xd7 , 0x0168 },
{ 0xd8 , 0x00D8 },
{ 0xd9 , 0x0172 },
{ 0xda , 0x00DA },
{ 0xdb , 0x00DB },
{ 0xdc , 0x00DC },
{ 0xdd , 0x00DD },
{ 0xde , 0x00DE },
{ 0xdf , 0x00DF },
{ 0xe0 , 0x0101 },
{ 0xe1 , 0x00E1 },
{ 0xe2 , 0x00E2 },
{ 0xe3 , 0x00E3 },
{ 0xe4 , 0x00E4 },
{ 0xe5 , 0x00E5 },
{ 0xe6 , 0x00E6 },
{ 0xe7 , 0x012F },
{ 0xe8 , 0x010D },
{ 0xe9 , 0x00E9 },
{ 0xea , 0x0119 },
{ 0xeb , 0x00EB },
{ 0xec , 0x0117 },
{ 0xed , 0x00ED },
{ 0xee , 0x00EE },
{ 0xef , 0x00EF },
{ 0xf0 , 0x00F0 },
{ 0xf1 , 0x0146 },
{ 0xf2 , 0x014D },
{ 0xf3 , 0x00F3 },
{ 0xf4 , 0x00F4 },
{ 0xf5 , 0x00F5 },
{ 0xf6 , 0x00F6 },
{ 0xf7 , 0x0169 },
{ 0xf8 , 0x00F8 },
{ 0xf9 , 0x0173 },
{ 0xfa , 0x00FA },
{ 0xfb , 0x00FB },
{ 0xfc , 0x00FC },
{ 0xfd , 0x00FD },
{ 0xfe , 0x00FE },
{ 0xff , 0x0138 },
+256
View File
@@ -0,0 +1,256 @@
{ 0x00 , 0x0000 },
{ 0x01 , 0x0001 },
{ 0x02 , 0x0002 },
{ 0x03 , 0x0003 },
{ 0x04 , 0x0004 },
{ 0x05 , 0x0005 },
{ 0x06 , 0x0006 },
{ 0x07 , 0x0007 },
{ 0x08 , 0x0008 },
{ 0x09 , 0x0009 },
{ 0x0a , 0x000A },
{ 0x0b , 0x000B },
{ 0x0c , 0x000C },
{ 0x0d , 0x000D },
{ 0x0e , 0x000E },
{ 0x0f , 0x000F },
{ 0x10 , 0x0010 },
{ 0x11 , 0x0011 },
{ 0x12 , 0x0012 },
{ 0x13 , 0x0013 },
{ 0x14 , 0x0014 },
{ 0x15 , 0x0015 },
{ 0x16 , 0x0016 },
{ 0x17 , 0x0017 },
{ 0x18 , 0x0018 },
{ 0x19 , 0x0019 },
{ 0x1a , 0x001A },
{ 0x1b , 0x001B },
{ 0x1c , 0x001C },
{ 0x1d , 0x001D },
{ 0x1e , 0x001E },
{ 0x1f , 0x001F },
{ 0x20 , 0x0020 },
{ 0x21 , 0x0021 },
{ 0x22 , 0x0022 },
{ 0x23 , 0x0023 },
{ 0x24 , 0x0024 },
{ 0x25 , 0x0025 },
{ 0x26 , 0x0026 },
{ 0x27 , 0x0027 },
{ 0x28 , 0x0028 },
{ 0x29 , 0x0029 },
{ 0x2a , 0x002A },
{ 0x2b , 0x002B },
{ 0x2c , 0x002C },
{ 0x2d , 0x002D },
{ 0x2e , 0x002E },
{ 0x2f , 0x002F },
{ 0x30 , 0x0030 },
{ 0x31 , 0x0031 },
{ 0x32 , 0x0032 },
{ 0x33 , 0x0033 },
{ 0x34 , 0x0034 },
{ 0x35 , 0x0035 },
{ 0x36 , 0x0036 },
{ 0x37 , 0x0037 },
{ 0x38 , 0x0038 },
{ 0x39 , 0x0039 },
{ 0x3a , 0x003A },
{ 0x3b , 0x003B },
{ 0x3c , 0x003C },
{ 0x3d , 0x003D },
{ 0x3e , 0x003E },
{ 0x3f , 0x003F },
{ 0x40 , 0x0040 },
{ 0x41 , 0x0041 },
{ 0x42 , 0x0042 },
{ 0x43 , 0x0043 },
{ 0x44 , 0x0044 },
{ 0x45 , 0x0045 },
{ 0x46 , 0x0046 },
{ 0x47 , 0x0047 },
{ 0x48 , 0x0048 },
{ 0x49 , 0x0049 },
{ 0x4a , 0x004A },
{ 0x4b , 0x004B },
{ 0x4c , 0x004C },
{ 0x4d , 0x004D },
{ 0x4e , 0x004E },
{ 0x4f , 0x004F },
{ 0x50 , 0x0050 },
{ 0x51 , 0x0051 },
{ 0x52 , 0x0052 },
{ 0x53 , 0x0053 },
{ 0x54 , 0x0054 },
{ 0x55 , 0x0055 },
{ 0x56 , 0x0056 },
{ 0x57 , 0x0057 },
{ 0x58 , 0x0058 },
{ 0x59 , 0x0059 },
{ 0x5a , 0x005A },
{ 0x5b , 0x005B },
{ 0x5c , 0x005C },
{ 0x5d , 0x005D },
{ 0x5e , 0x005E },
{ 0x5f , 0x005F },
{ 0x60 , 0x0060 },
{ 0x61 , 0x0061 },
{ 0x62 , 0x0062 },
{ 0x63 , 0x0063 },
{ 0x64 , 0x0064 },
{ 0x65 , 0x0065 },
{ 0x66 , 0x0066 },
{ 0x67 , 0x0067 },
{ 0x68 , 0x0068 },
{ 0x69 , 0x0069 },
{ 0x6a , 0x006A },
{ 0x6b , 0x006B },
{ 0x6c , 0x006C },
{ 0x6d , 0x006D },
{ 0x6e , 0x006E },
{ 0x6f , 0x006F },
{ 0x70 , 0x0070 },
{ 0x71 , 0x0071 },
{ 0x72 , 0x0072 },
{ 0x73 , 0x0073 },
{ 0x74 , 0x0074 },
{ 0x75 , 0x0075 },
{ 0x76 , 0x0076 },
{ 0x77 , 0x0077 },
{ 0x78 , 0x0078 },
{ 0x79 , 0x0079 },
{ 0x7a , 0x007A },
{ 0x7b , 0x007B },
{ 0x7c , 0x007C },
{ 0x7d , 0x007D },
{ 0x7e , 0x007E },
{ 0x7f , 0x007F },
{ 0x80 , 0x0080 },
{ 0x81 , 0x0081 },
{ 0x82 , 0x0082 },
{ 0x83 , 0x0083 },
{ 0x84 , 0x0084 },
{ 0x85 , 0x0085 },
{ 0x86 , 0x0086 },
{ 0x87 , 0x0087 },
{ 0x88 , 0x0088 },
{ 0x89 , 0x0089 },
{ 0x8a , 0x008A },
{ 0x8b , 0x008B },
{ 0x8c , 0x008C },
{ 0x8d , 0x008D },
{ 0x8e , 0x008E },
{ 0x8f , 0x008F },
{ 0x90 , 0x0090 },
{ 0x91 , 0x0091 },
{ 0x92 , 0x0092 },
{ 0x93 , 0x0093 },
{ 0x94 , 0x0094 },
{ 0x95 , 0x0095 },
{ 0x96 , 0x0096 },
{ 0x97 , 0x0097 },
{ 0x98 , 0x0098 },
{ 0x99 , 0x0099 },
{ 0x9a , 0x009A },
{ 0x9b , 0x009B },
{ 0x9c , 0x009C },
{ 0x9d , 0x009D },
{ 0x9e , 0x009E },
{ 0x9f , 0x009F },
{ 0xa0 , 0x00A0 },
{ 0xa1 , 0x201D },
{ 0xa2 , 0x00A2 },
{ 0xa3 , 0x00A3 },
{ 0xa4 , 0x00A4 },
{ 0xa5 , 0x201E },
{ 0xa6 , 0x00A6 },
{ 0xa7 , 0x00A7 },
{ 0xa8 , 0x00D8 },
{ 0xa9 , 0x00A9 },
{ 0xaa , 0x0156 },
{ 0xab , 0x00AB },
{ 0xac , 0x00AC },
{ 0xad , 0x00AD },
{ 0xae , 0x00AE },
{ 0xaf , 0x00C6 },
{ 0xb0 , 0x00B0 },
{ 0xb1 , 0x00B1 },
{ 0xb2 , 0x00B2 },
{ 0xb3 , 0x00B3 },
{ 0xb4 , 0x201C },
{ 0xb5 , 0x00B5 },
{ 0xb6 , 0x00B6 },
{ 0xb7 , 0x00B7 },
{ 0xb8 , 0x00F8 },
{ 0xb9 , 0x00B9 },
{ 0xba , 0x0157 },
{ 0xbb , 0x00BB },
{ 0xbc , 0x00BC },
{ 0xbd , 0x00BD },
{ 0xbe , 0x00BE },
{ 0xbf , 0x00E6 },
{ 0xc0 , 0x0104 },
{ 0xc1 , 0x012E },
{ 0xc2 , 0x0100 },
{ 0xc3 , 0x0106 },
{ 0xc4 , 0x00C4 },
{ 0xc5 , 0x00C5 },
{ 0xc6 , 0x0118 },
{ 0xc7 , 0x0112 },
{ 0xc8 , 0x010C },
{ 0xc9 , 0x00C9 },
{ 0xca , 0x0179 },
{ 0xcb , 0x0116 },
{ 0xcc , 0x0122 },
{ 0xcd , 0x0136 },
{ 0xce , 0x012A },
{ 0xcf , 0x013B },
{ 0xd0 , 0x0160 },
{ 0xd1 , 0x0143 },
{ 0xd2 , 0x0145 },
{ 0xd3 , 0x00D3 },
{ 0xd4 , 0x014C },
{ 0xd5 , 0x00D5 },
{ 0xd6 , 0x00D6 },
{ 0xd7 , 0x00D7 },
{ 0xd8 , 0x0172 },
{ 0xd9 , 0x0141 },
{ 0xda , 0x015A },
{ 0xdb , 0x016A },
{ 0xdc , 0x00DC },
{ 0xdd , 0x017B },
{ 0xde , 0x017D },
{ 0xdf , 0x00DF },
{ 0xe0 , 0x0105 },
{ 0xe1 , 0x012F },
{ 0xe2 , 0x0101 },
{ 0xe3 , 0x0107 },
{ 0xe4 , 0x00E4 },
{ 0xe5 , 0x00E5 },
{ 0xe6 , 0x0119 },
{ 0xe7 , 0x0113 },
{ 0xe8 , 0x010D },
{ 0xe9 , 0x00E9 },
{ 0xea , 0x017A },
{ 0xeb , 0x0117 },
{ 0xec , 0x0123 },
{ 0xed , 0x0137 },
{ 0xee , 0x012B },
{ 0xef , 0x013C },
{ 0xf0 , 0x0161 },
{ 0xf1 , 0x0144 },
{ 0xf2 , 0x0146 },
{ 0xf3 , 0x00F3 },
{ 0xf4 , 0x014D },
{ 0xf5 , 0x00F5 },
{ 0xf6 , 0x00F6 },
{ 0xf7 , 0x00F7 },
{ 0xf8 , 0x0173 },
{ 0xf9 , 0x0142 },
{ 0xfa , 0x015B },
{ 0xfb , 0x016B },
{ 0xfc , 0x00FC },
{ 0xfd , 0x017C },
{ 0xfe , 0x017E },
{ 0xff , 0x2019 },
+256
View File
@@ -0,0 +1,256 @@
{ 0x00 , 0x0000 },
{ 0x01 , 0x0001 },
{ 0x02 , 0x0002 },
{ 0x03 , 0x0003 },
{ 0x04 , 0x0004 },
{ 0x05 , 0x0005 },
{ 0x06 , 0x0006 },
{ 0x07 , 0x0007 },
{ 0x08 , 0x0008 },
{ 0x09 , 0x0009 },
{ 0x0a , 0x000A },
{ 0x0b , 0x000B },
{ 0x0c , 0x000C },
{ 0x0d , 0x000D },
{ 0x0e , 0x000E },
{ 0x0f , 0x000F },
{ 0x10 , 0x0010 },
{ 0x11 , 0x0011 },
{ 0x12 , 0x0012 },
{ 0x13 , 0x0013 },
{ 0x14 , 0x0014 },
{ 0x15 , 0x0015 },
{ 0x16 , 0x0016 },
{ 0x17 , 0x0017 },
{ 0x18 , 0x0018 },
{ 0x19 , 0x0019 },
{ 0x1a , 0x001A },
{ 0x1b , 0x001B },
{ 0x1c , 0x001C },
{ 0x1d , 0x001D },
{ 0x1e , 0x001E },
{ 0x1f , 0x001F },
{ 0x20 , 0x0020 },
{ 0x21 , 0x0021 },
{ 0x22 , 0x0022 },
{ 0x23 , 0x0023 },
{ 0x24 , 0x0024 },
{ 0x25 , 0x0025 },
{ 0x26 , 0x0026 },
{ 0x27 , 0x0027 },
{ 0x28 , 0x0028 },
{ 0x29 , 0x0029 },
{ 0x2a , 0x002A },
{ 0x2b , 0x002B },
{ 0x2c , 0x002C },
{ 0x2d , 0x002D },
{ 0x2e , 0x002E },
{ 0x2f , 0x002F },
{ 0x30 , 0x0030 },
{ 0x31 , 0x0031 },
{ 0x32 , 0x0032 },
{ 0x33 , 0x0033 },
{ 0x34 , 0x0034 },
{ 0x35 , 0x0035 },
{ 0x36 , 0x0036 },
{ 0x37 , 0x0037 },
{ 0x38 , 0x0038 },
{ 0x39 , 0x0039 },
{ 0x3a , 0x003A },
{ 0x3b , 0x003B },
{ 0x3c , 0x003C },
{ 0x3d , 0x003D },
{ 0x3e , 0x003E },
{ 0x3f , 0x003F },
{ 0x40 , 0x0040 },
{ 0x41 , 0x0041 },
{ 0x42 , 0x0042 },
{ 0x43 , 0x0043 },
{ 0x44 , 0x0044 },
{ 0x45 , 0x0045 },
{ 0x46 , 0x0046 },
{ 0x47 , 0x0047 },
{ 0x48 , 0x0048 },
{ 0x49 , 0x0049 },
{ 0x4a , 0x004A },
{ 0x4b , 0x004B },
{ 0x4c , 0x004C },
{ 0x4d , 0x004D },
{ 0x4e , 0x004E },
{ 0x4f , 0x004F },
{ 0x50 , 0x0050 },
{ 0x51 , 0x0051 },
{ 0x52 , 0x0052 },
{ 0x53 , 0x0053 },
{ 0x54 , 0x0054 },
{ 0x55 , 0x0055 },
{ 0x56 , 0x0056 },
{ 0x57 , 0x0057 },
{ 0x58 , 0x0058 },
{ 0x59 , 0x0059 },
{ 0x5a , 0x005A },
{ 0x5b , 0x005B },
{ 0x5c , 0x005C },
{ 0x5d , 0x005D },
{ 0x5e , 0x005E },
{ 0x5f , 0x005F },
{ 0x60 , 0x0060 },
{ 0x61 , 0x0061 },
{ 0x62 , 0x0062 },
{ 0x63 , 0x0063 },
{ 0x64 , 0x0064 },
{ 0x65 , 0x0065 },
{ 0x66 , 0x0066 },
{ 0x67 , 0x0067 },
{ 0x68 , 0x0068 },
{ 0x69 , 0x0069 },
{ 0x6a , 0x006A },
{ 0x6b , 0x006B },
{ 0x6c , 0x006C },
{ 0x6d , 0x006D },
{ 0x6e , 0x006E },
{ 0x6f , 0x006F },
{ 0x70 , 0x0070 },
{ 0x71 , 0x0071 },
{ 0x72 , 0x0072 },
{ 0x73 , 0x0073 },
{ 0x74 , 0x0074 },
{ 0x75 , 0x0075 },
{ 0x76 , 0x0076 },
{ 0x77 , 0x0077 },
{ 0x78 , 0x0078 },
{ 0x79 , 0x0079 },
{ 0x7a , 0x007A },
{ 0x7b , 0x007B },
{ 0x7c , 0x007C },
{ 0x7d , 0x007D },
{ 0x7e , 0x007E },
{ 0x7f , 0x007F },
{ 0x80 , 0x0080 },
{ 0x81 , 0x0081 },
{ 0x82 , 0x0082 },
{ 0x83 , 0x0083 },
{ 0x84 , 0x0084 },
{ 0x85 , 0x0085 },
{ 0x86 , 0x0086 },
{ 0x87 , 0x0087 },
{ 0x88 , 0x0088 },
{ 0x89 , 0x0089 },
{ 0x8a , 0x008A },
{ 0x8b , 0x008B },
{ 0x8c , 0x008C },
{ 0x8d , 0x008D },
{ 0x8e , 0x008E },
{ 0x8f , 0x008F },
{ 0x90 , 0x0090 },
{ 0x91 , 0x0091 },
{ 0x92 , 0x0092 },
{ 0x93 , 0x0093 },
{ 0x94 , 0x0094 },
{ 0x95 , 0x0095 },
{ 0x96 , 0x0096 },
{ 0x97 , 0x0097 },
{ 0x98 , 0x0098 },
{ 0x99 , 0x0099 },
{ 0x9a , 0x009A },
{ 0x9b , 0x009B },
{ 0x9c , 0x009C },
{ 0x9d , 0x009D },
{ 0x9e , 0x009E },
{ 0x9f , 0x009F },
{ 0xa0 , 0x00A0 },
{ 0xa1 , 0x1E02 },
{ 0xa2 , 0x1E03 },
{ 0xa3 , 0x00A3 },
{ 0xa4 , 0x010A },
{ 0xa5 , 0x010B },
{ 0xa6 , 0x1E0A },
{ 0xa7 , 0x00A7 },
{ 0xa8 , 0x1E80 },
{ 0xa9 , 0x00A9 },
{ 0xaa , 0x1E82 },
{ 0xab , 0x1E0B },
{ 0xac , 0x1EF2 },
{ 0xad , 0x00AD },
{ 0xae , 0x00AE },
{ 0xaf , 0x0178 },
{ 0xb0 , 0x1E1E },
{ 0xb1 , 0x1E1F },
{ 0xb2 , 0x0120 },
{ 0xb3 , 0x0121 },
{ 0xb4 , 0x1E40 },
{ 0xb5 , 0x1E41 },
{ 0xb6 , 0x00B6 },
{ 0xb7 , 0x1E56 },
{ 0xb8 , 0x1E81 },
{ 0xb9 , 0x1E57 },
{ 0xba , 0x1E83 },
{ 0xbb , 0x1E60 },
{ 0xbc , 0x1EF3 },
{ 0xbd , 0x1E84 },
{ 0xbe , 0x1E85 },
{ 0xbf , 0x1E61 },
{ 0xc0 , 0x00C0 },
{ 0xc1 , 0x00C1 },
{ 0xc2 , 0x00C2 },
{ 0xc3 , 0x00C3 },
{ 0xc4 , 0x00C4 },
{ 0xc5 , 0x00C5 },
{ 0xc6 , 0x00C6 },
{ 0xc7 , 0x00C7 },
{ 0xc8 , 0x00C8 },
{ 0xc9 , 0x00C9 },
{ 0xca , 0x00CA },
{ 0xcb , 0x00CB },
{ 0xcc , 0x00CC },
{ 0xcd , 0x00CD },
{ 0xce , 0x00CE },
{ 0xcf , 0x00CF },
{ 0xd0 , 0x0174 },
{ 0xd1 , 0x00D1 },
{ 0xd2 , 0x00D2 },
{ 0xd3 , 0x00D3 },
{ 0xd4 , 0x00D4 },
{ 0xd5 , 0x00D5 },
{ 0xd6 , 0x00D6 },
{ 0xd7 , 0x1E6A },
{ 0xd8 , 0x00D8 },
{ 0xd9 , 0x00D9 },
{ 0xda , 0x00DA },
{ 0xdb , 0x00DB },
{ 0xdc , 0x00DC },
{ 0xdd , 0x00DD },
{ 0xde , 0x0176 },
{ 0xdf , 0x00DF },
{ 0xe0 , 0x00E0 },
{ 0xe1 , 0x00E1 },
{ 0xe2 , 0x00E2 },
{ 0xe3 , 0x00E3 },
{ 0xe4 , 0x00E4 },
{ 0xe5 , 0x00E5 },
{ 0xe6 , 0x00E6 },
{ 0xe7 , 0x00E7 },
{ 0xe8 , 0x00E8 },
{ 0xe9 , 0x00E9 },
{ 0xea , 0x00EA },
{ 0xeb , 0x00EB },
{ 0xec , 0x00EC },
{ 0xed , 0x00ED },
{ 0xee , 0x00EE },
{ 0xef , 0x00EF },
{ 0xf0 , 0x0175 },
{ 0xf1 , 0x00F1 },
{ 0xf2 , 0x00F2 },
{ 0xf3 , 0x00F3 },
{ 0xf4 , 0x00F4 },
{ 0xf5 , 0x00F5 },
{ 0xf6 , 0x00F6 },
{ 0xf7 , 0x1E6B },
{ 0xf8 , 0x00F8 },
{ 0xf9 , 0x00F9 },
{ 0xfa , 0x00FA },
{ 0xfb , 0x00FB },
{ 0xfc , 0x00FC },
{ 0xfd , 0x00FD },
{ 0xfe , 0x0177 },
{ 0xff , 0x00FF },
+256
View File
@@ -0,0 +1,256 @@
{ 0x00 , 0x0000 },
{ 0x01 , 0x0001 },
{ 0x02 , 0x0002 },
{ 0x03 , 0x0003 },
{ 0x04 , 0x0004 },
{ 0x05 , 0x0005 },
{ 0x06 , 0x0006 },
{ 0x07 , 0x0007 },
{ 0x08 , 0x0008 },
{ 0x09 , 0x0009 },
{ 0x0a , 0x000A },
{ 0x0b , 0x000B },
{ 0x0c , 0x000C },
{ 0x0d , 0x000D },
{ 0x0e , 0x000E },
{ 0x0f , 0x000F },
{ 0x10 , 0x0010 },
{ 0x11 , 0x0011 },
{ 0x12 , 0x0012 },
{ 0x13 , 0x0013 },
{ 0x14 , 0x0014 },
{ 0x15 , 0x0015 },
{ 0x16 , 0x0016 },
{ 0x17 , 0x0017 },
{ 0x18 , 0x0018 },
{ 0x19 , 0x0019 },
{ 0x1a , 0x001A },
{ 0x1b , 0x001B },
{ 0x1c , 0x001C },
{ 0x1d , 0x001D },
{ 0x1e , 0x001E },
{ 0x1f , 0x001F },
{ 0x20 , 0x0020 },
{ 0x21 , 0x0021 },
{ 0x22 , 0x0022 },
{ 0x23 , 0x0023 },
{ 0x24 , 0x0024 },
{ 0x25 , 0x0025 },
{ 0x26 , 0x0026 },
{ 0x27 , 0x0027 },
{ 0x28 , 0x0028 },
{ 0x29 , 0x0029 },
{ 0x2a , 0x002A },
{ 0x2b , 0x002B },
{ 0x2c , 0x002C },
{ 0x2d , 0x002D },
{ 0x2e , 0x002E },
{ 0x2f , 0x002F },
{ 0x30 , 0x0030 },
{ 0x31 , 0x0031 },
{ 0x32 , 0x0032 },
{ 0x33 , 0x0033 },
{ 0x34 , 0x0034 },
{ 0x35 , 0x0035 },
{ 0x36 , 0x0036 },
{ 0x37 , 0x0037 },
{ 0x38 , 0x0038 },
{ 0x39 , 0x0039 },
{ 0x3a , 0x003A },
{ 0x3b , 0x003B },
{ 0x3c , 0x003C },
{ 0x3d , 0x003D },
{ 0x3e , 0x003E },
{ 0x3f , 0x003F },
{ 0x40 , 0x0040 },
{ 0x41 , 0x0041 },
{ 0x42 , 0x0042 },
{ 0x43 , 0x0043 },
{ 0x44 , 0x0044 },
{ 0x45 , 0x0045 },
{ 0x46 , 0x0046 },
{ 0x47 , 0x0047 },
{ 0x48 , 0x0048 },
{ 0x49 , 0x0049 },
{ 0x4a , 0x004A },
{ 0x4b , 0x004B },
{ 0x4c , 0x004C },
{ 0x4d , 0x004D },
{ 0x4e , 0x004E },
{ 0x4f , 0x004F },
{ 0x50 , 0x0050 },
{ 0x51 , 0x0051 },
{ 0x52 , 0x0052 },
{ 0x53 , 0x0053 },
{ 0x54 , 0x0054 },
{ 0x55 , 0x0055 },
{ 0x56 , 0x0056 },
{ 0x57 , 0x0057 },
{ 0x58 , 0x0058 },
{ 0x59 , 0x0059 },
{ 0x5a , 0x005A },
{ 0x5b , 0x005B },
{ 0x5c , 0x005C },
{ 0x5d , 0x005D },
{ 0x5e , 0x005E },
{ 0x5f , 0x005F },
{ 0x60 , 0x0060 },
{ 0x61 , 0x0061 },
{ 0x62 , 0x0062 },
{ 0x63 , 0x0063 },
{ 0x64 , 0x0064 },
{ 0x65 , 0x0065 },
{ 0x66 , 0x0066 },
{ 0x67 , 0x0067 },
{ 0x68 , 0x0068 },
{ 0x69 , 0x0069 },
{ 0x6a , 0x006A },
{ 0x6b , 0x006B },
{ 0x6c , 0x006C },
{ 0x6d , 0x006D },
{ 0x6e , 0x006E },
{ 0x6f , 0x006F },
{ 0x70 , 0x0070 },
{ 0x71 , 0x0071 },
{ 0x72 , 0x0072 },
{ 0x73 , 0x0073 },
{ 0x74 , 0x0074 },
{ 0x75 , 0x0075 },
{ 0x76 , 0x0076 },
{ 0x77 , 0x0077 },
{ 0x78 , 0x0078 },
{ 0x79 , 0x0079 },
{ 0x7a , 0x007A },
{ 0x7b , 0x007B },
{ 0x7c , 0x007C },
{ 0x7d , 0x007D },
{ 0x7e , 0x007E },
{ 0x7f , 0x007F },
{ 0x80 , 0x0080 },
{ 0x81 , 0x0081 },
{ 0x82 , 0x0082 },
{ 0x83 , 0x0083 },
{ 0x84 , 0x0084 },
{ 0x85 , 0x0085 },
{ 0x86 , 0x0086 },
{ 0x87 , 0x0087 },
{ 0x88 , 0x0088 },
{ 0x89 , 0x0089 },
{ 0x8a , 0x008A },
{ 0x8b , 0x008B },
{ 0x8c , 0x008C },
{ 0x8d , 0x008D },
{ 0x8e , 0x008E },
{ 0x8f , 0x008F },
{ 0x90 , 0x0090 },
{ 0x91 , 0x0091 },
{ 0x92 , 0x0092 },
{ 0x93 , 0x0093 },
{ 0x94 , 0x0094 },
{ 0x95 , 0x0095 },
{ 0x96 , 0x0096 },
{ 0x97 , 0x0097 },
{ 0x98 , 0x0098 },
{ 0x99 , 0x0099 },
{ 0x9a , 0x009A },
{ 0x9b , 0x009B },
{ 0x9c , 0x009C },
{ 0x9d , 0x009D },
{ 0x9e , 0x009E },
{ 0x9f , 0x009F },
{ 0xa0 , 0x00A0 },
{ 0xa1 , 0x00A1 },
{ 0xa2 , 0x00A2 },
{ 0xa3 , 0x00A3 },
{ 0xa4 , 0x20AC },
{ 0xa5 , 0x00A5 },
{ 0xa6 , 0x0160 },
{ 0xa7 , 0x00A7 },
{ 0xa8 , 0x0161 },
{ 0xa9 , 0x00A9 },
{ 0xaa , 0x00AA },
{ 0xab , 0x00AB },
{ 0xac , 0x00AC },
{ 0xad , 0x00AD },
{ 0xae , 0x00AE },
{ 0xaf , 0x00AF },
{ 0xb0 , 0x00B0 },
{ 0xb1 , 0x00B1 },
{ 0xb2 , 0x00B2 },
{ 0xb3 , 0x00B3 },
{ 0xb4 , 0x017D },
{ 0xb5 , 0x00B5 },
{ 0xb6 , 0x00B6 },
{ 0xb7 , 0x00B7 },
{ 0xb8 , 0x017E },
{ 0xb9 , 0x00B9 },
{ 0xba , 0x00BA },
{ 0xbb , 0x00BB },
{ 0xbc , 0x0152 },
{ 0xbd , 0x0153 },
{ 0xbe , 0x0178 },
{ 0xbf , 0x00BF },
{ 0xc0 , 0x00C0 },
{ 0xc1 , 0x00C1 },
{ 0xc2 , 0x00C2 },
{ 0xc3 , 0x00C3 },
{ 0xc4 , 0x00C4 },
{ 0xc5 , 0x00C5 },
{ 0xc6 , 0x00C6 },
{ 0xc7 , 0x00C7 },
{ 0xc8 , 0x00C8 },
{ 0xc9 , 0x00C9 },
{ 0xca , 0x00CA },
{ 0xcb , 0x00CB },
{ 0xcc , 0x00CC },
{ 0xcd , 0x00CD },
{ 0xce , 0x00CE },
{ 0xcf , 0x00CF },
{ 0xd0 , 0x00D0 },
{ 0xd1 , 0x00D1 },
{ 0xd2 , 0x00D2 },
{ 0xd3 , 0x00D3 },
{ 0xd4 , 0x00D4 },
{ 0xd5 , 0x00D5 },
{ 0xd6 , 0x00D6 },
{ 0xd7 , 0x00D7 },
{ 0xd8 , 0x00D8 },
{ 0xd9 , 0x00D9 },
{ 0xda , 0x00DA },
{ 0xdb , 0x00DB },
{ 0xdc , 0x00DC },
{ 0xdd , 0x00DD },
{ 0xde , 0x00DE },
{ 0xdf , 0x00DF },
{ 0xe0 , 0x00E0 },
{ 0xe1 , 0x00E1 },
{ 0xe2 , 0x00E2 },
{ 0xe3 , 0x00E3 },
{ 0xe4 , 0x00E4 },
{ 0xe5 , 0x00E5 },
{ 0xe6 , 0x00E6 },
{ 0xe7 , 0x00E7 },
{ 0xe8 , 0x00E8 },
{ 0xe9 , 0x00E9 },
{ 0xea , 0x00EA },
{ 0xeb , 0x00EB },
{ 0xec , 0x00EC },
{ 0xed , 0x00ED },
{ 0xee , 0x00EE },
{ 0xef , 0x00EF },
{ 0xf0 , 0x00F0 },
{ 0xf1 , 0x00F1 },
{ 0xf2 , 0x00F2 },
{ 0xf3 , 0x00F3 },
{ 0xf4 , 0x00F4 },
{ 0xf5 , 0x00F5 },
{ 0xf6 , 0x00F6 },
{ 0xf7 , 0x00F7 },
{ 0xf8 , 0x00F8 },
{ 0xf9 , 0x00F9 },
{ 0xfa , 0x00FA },
{ 0xfb , 0x00FB },
{ 0xfc , 0x00FC },
{ 0xfd , 0x00FD },
{ 0xfe , 0x00FE },
{ 0xff , 0x00FF },
+256
View File
@@ -0,0 +1,256 @@
{ 0x00 , 0x0000 },
{ 0x01 , 0x0001 },
{ 0x02 , 0x0002 },
{ 0x03 , 0x0003 },
{ 0x04 , 0x0004 },
{ 0x05 , 0x0005 },
{ 0x06 , 0x0006 },
{ 0x07 , 0x0007 },
{ 0x08 , 0x0008 },
{ 0x09 , 0x0009 },
{ 0x0a , 0x000A },
{ 0x0b , 0x000B },
{ 0x0c , 0x000C },
{ 0x0d , 0x000D },
{ 0x0e , 0x000E },
{ 0x0f , 0x000F },
{ 0x10 , 0x0010 },
{ 0x11 , 0x0011 },
{ 0x12 , 0x0012 },
{ 0x13 , 0x0013 },
{ 0x14 , 0x0014 },
{ 0x15 , 0x0015 },
{ 0x16 , 0x0016 },
{ 0x17 , 0x0017 },
{ 0x18 , 0x0018 },
{ 0x19 , 0x0019 },
{ 0x1a , 0x001A },
{ 0x1b , 0x001B },
{ 0x1c , 0x001C },
{ 0x1d , 0x001D },
{ 0x1e , 0x001E },
{ 0x1f , 0x001F },
{ 0x20 , 0x0020 },
{ 0x21 , 0x0021 },
{ 0x22 , 0x0022 },
{ 0x23 , 0x0023 },
{ 0x24 , 0x0024 },
{ 0x25 , 0x0025 },
{ 0x26 , 0x0026 },
{ 0x27 , 0x0027 },
{ 0x28 , 0x0028 },
{ 0x29 , 0x0029 },
{ 0x2a , 0x002A },
{ 0x2b , 0x002B },
{ 0x2c , 0x002C },
{ 0x2d , 0x002D },
{ 0x2e , 0x002E },
{ 0x2f , 0x002F },
{ 0x30 , 0x0030 },
{ 0x31 , 0x0031 },
{ 0x32 , 0x0032 },
{ 0x33 , 0x0033 },
{ 0x34 , 0x0034 },
{ 0x35 , 0x0035 },
{ 0x36 , 0x0036 },
{ 0x37 , 0x0037 },
{ 0x38 , 0x0038 },
{ 0x39 , 0x0039 },
{ 0x3a , 0x003A },
{ 0x3b , 0x003B },
{ 0x3c , 0x003C },
{ 0x3d , 0x003D },
{ 0x3e , 0x003E },
{ 0x3f , 0x003F },
{ 0x40 , 0x0040 },
{ 0x41 , 0x0041 },
{ 0x42 , 0x0042 },
{ 0x43 , 0x0043 },
{ 0x44 , 0x0044 },
{ 0x45 , 0x0045 },
{ 0x46 , 0x0046 },
{ 0x47 , 0x0047 },
{ 0x48 , 0x0048 },
{ 0x49 , 0x0049 },
{ 0x4a , 0x004A },
{ 0x4b , 0x004B },
{ 0x4c , 0x004C },
{ 0x4d , 0x004D },
{ 0x4e , 0x004E },
{ 0x4f , 0x004F },
{ 0x50 , 0x0050 },
{ 0x51 , 0x0051 },
{ 0x52 , 0x0052 },
{ 0x53 , 0x0053 },
{ 0x54 , 0x0054 },
{ 0x55 , 0x0055 },
{ 0x56 , 0x0056 },
{ 0x57 , 0x0057 },
{ 0x58 , 0x0058 },
{ 0x59 , 0x0059 },
{ 0x5a , 0x005A },
{ 0x5b , 0x005B },
{ 0x5c , 0x005C },
{ 0x5d , 0x005D },
{ 0x5e , 0x005E },
{ 0x5f , 0x005F },
{ 0x60 , 0x0060 },
{ 0x61 , 0x0061 },
{ 0x62 , 0x0062 },
{ 0x63 , 0x0063 },
{ 0x64 , 0x0064 },
{ 0x65 , 0x0065 },
{ 0x66 , 0x0066 },
{ 0x67 , 0x0067 },
{ 0x68 , 0x0068 },
{ 0x69 , 0x0069 },
{ 0x6a , 0x006A },
{ 0x6b , 0x006B },
{ 0x6c , 0x006C },
{ 0x6d , 0x006D },
{ 0x6e , 0x006E },
{ 0x6f , 0x006F },
{ 0x70 , 0x0070 },
{ 0x71 , 0x0071 },
{ 0x72 , 0x0072 },
{ 0x73 , 0x0073 },
{ 0x74 , 0x0074 },
{ 0x75 , 0x0075 },
{ 0x76 , 0x0076 },
{ 0x77 , 0x0077 },
{ 0x78 , 0x0078 },
{ 0x79 , 0x0079 },
{ 0x7a , 0x007A },
{ 0x7b , 0x007B },
{ 0x7c , 0x007C },
{ 0x7d , 0x007D },
{ 0x7e , 0x007E },
{ 0x7f , 0x007F },
{ 0x80 , 0x0080 },
{ 0x81 , 0x0081 },
{ 0x82 , 0x0082 },
{ 0x83 , 0x0083 },
{ 0x84 , 0x0084 },
{ 0x85 , 0x0085 },
{ 0x86 , 0x0086 },
{ 0x87 , 0x0087 },
{ 0x88 , 0x0088 },
{ 0x89 , 0x0089 },
{ 0x8a , 0x008A },
{ 0x8b , 0x008B },
{ 0x8c , 0x008C },
{ 0x8d , 0x008D },
{ 0x8e , 0x008E },
{ 0x8f , 0x008F },
{ 0x90 , 0x0090 },
{ 0x91 , 0x0091 },
{ 0x92 , 0x0092 },
{ 0x93 , 0x0093 },
{ 0x94 , 0x0094 },
{ 0x95 , 0x0095 },
{ 0x96 , 0x0096 },
{ 0x97 , 0x0097 },
{ 0x98 , 0x0098 },
{ 0x99 , 0x0099 },
{ 0x9a , 0x009A },
{ 0x9b , 0x009B },
{ 0x9c , 0x009C },
{ 0x9d , 0x009D },
{ 0x9e , 0x009E },
{ 0x9f , 0x009F },
{ 0xa0 , 0x00A0 },
{ 0xa1 , 0x0104 },
{ 0xa2 , 0x0105 },
{ 0xa3 , 0x0141 },
{ 0xa4 , 0x20AC },
{ 0xa5 , 0x00AB },
{ 0xa6 , 0x0160 },
{ 0xa7 , 0x00A7 },
{ 0xa8 , 0x0161 },
{ 0xa9 , 0x00A9 },
{ 0xaa , 0x0218 },
{ 0xab , 0x201E },
{ 0xac , 0x0179 },
{ 0xad , 0x00AD },
{ 0xae , 0x017A },
{ 0xaf , 0x017B },
{ 0xb0 , 0x00B0 },
{ 0xb1 , 0x00B1 },
{ 0xb2 , 0x010C },
{ 0xb3 , 0x0142 },
{ 0xb4 , 0x017D },
{ 0xb5 , 0x201D },
{ 0xb6 , 0x00B6 },
{ 0xb7 , 0x00B7 },
{ 0xb8 , 0x017E },
{ 0xb9 , 0x010D },
{ 0xba , 0x0219 },
{ 0xbb , 0x00BB },
{ 0xbc , 0x0152 },
{ 0xbd , 0x0153 },
{ 0xbe , 0x0178 },
{ 0xbf , 0x017C },
{ 0xc0 , 0x00C0 },
{ 0xc1 , 0x00C1 },
{ 0xc2 , 0x00C2 },
{ 0xc3 , 0x0102 },
{ 0xc4 , 0x00C4 },
{ 0xc5 , 0x0106 },
{ 0xc6 , 0x00C6 },
{ 0xc7 , 0x00C7 },
{ 0xc8 , 0x00C8 },
{ 0xc9 , 0x00C9 },
{ 0xca , 0x00CA },
{ 0xcb , 0x00CB },
{ 0xcc , 0x00CC },
{ 0xcd , 0x00CD },
{ 0xce , 0x00CE },
{ 0xcf , 0x00CF },
{ 0xd0 , 0x0110 },
{ 0xd1 , 0x0143 },
{ 0xd2 , 0x00D2 },
{ 0xd3 , 0x00D3 },
{ 0xd4 , 0x00D4 },
{ 0xd5 , 0x0150 },
{ 0xd6 , 0x00D6 },
{ 0xd7 , 0x015A },
{ 0xd8 , 0x0170 },
{ 0xd9 , 0x00D9 },
{ 0xda , 0x00DA },
{ 0xdb , 0x00DB },
{ 0xdc , 0x00DC },
{ 0xdd , 0x0118 },
{ 0xde , 0x021A },
{ 0xdf , 0x00DF },
{ 0xe0 , 0x00E0 },
{ 0xe1 , 0x00E1 },
{ 0xe2 , 0x00E2 },
{ 0xe3 , 0x0103 },
{ 0xe4 , 0x00E4 },
{ 0xe5 , 0x0107 },
{ 0xe6 , 0x00E6 },
{ 0xe7 , 0x00E7 },
{ 0xe8 , 0x00E8 },
{ 0xe9 , 0x00E9 },
{ 0xea , 0x00EA },
{ 0xeb , 0x00EB },
{ 0xec , 0x00EC },
{ 0xed , 0x00ED },
{ 0xee , 0x00EE },
{ 0xef , 0x00EF },
{ 0xf0 , 0x0111 },
{ 0xf1 , 0x0144 },
{ 0xf2 , 0x00F2 },
{ 0xf3 , 0x00F3 },
{ 0xf4 , 0x00F4 },
{ 0xf5 , 0x0151 },
{ 0xf6 , 0x00F6 },
{ 0xf7 , 0x015B },
{ 0xf8 , 0x0171 },
{ 0xf9 , 0x00F9 },
{ 0xfa , 0x00FA },
{ 0xfb , 0x00FB },
{ 0xfc , 0x00FC },
{ 0xfd , 0x0119 },
{ 0xfe , 0x021B },
{ 0xff , 0x00FF },
+256
View File
@@ -0,0 +1,256 @@
{ 0x00 , 0x0000 },
{ 0x01 , 0x0001 },
{ 0x02 , 0x0002 },
{ 0x03 , 0x0003 },
{ 0x04 , 0x0004 },
{ 0x05 , 0x0005 },
{ 0x06 , 0x0006 },
{ 0x07 , 0x0007 },
{ 0x08 , 0x0008 },
{ 0x09 , 0x0009 },
{ 0x0a , 0x000A },
{ 0x0b , 0x000B },
{ 0x0c , 0x000C },
{ 0x0d , 0x000D },
{ 0x0e , 0x000E },
{ 0x0f , 0x000F },
{ 0x10 , 0x0010 },
{ 0x11 , 0x0011 },
{ 0x12 , 0x0012 },
{ 0x13 , 0x0013 },
{ 0x14 , 0x0014 },
{ 0x15 , 0x0015 },
{ 0x16 , 0x0016 },
{ 0x17 , 0x0017 },
{ 0x18 , 0x0018 },
{ 0x19 , 0x0019 },
{ 0x1a , 0x001A },
{ 0x1b , 0x001B },
{ 0x1c , 0x001C },
{ 0x1d , 0x001D },
{ 0x1e , 0x001E },
{ 0x1f , 0x001F },
{ 0x20 , 0x0020 },
{ 0x21 , 0x0021 },
{ 0x22 , 0x0022 },
{ 0x23 , 0x0023 },
{ 0x24 , 0x0024 },
{ 0x25 , 0x0025 },
{ 0x26 , 0x0026 },
{ 0x27 , 0x0027 },
{ 0x28 , 0x0028 },
{ 0x29 , 0x0029 },
{ 0x2a , 0x002A },
{ 0x2b , 0x002B },
{ 0x2c , 0x002C },
{ 0x2d , 0x002D },
{ 0x2e , 0x002E },
{ 0x2f , 0x002F },
{ 0x30 , 0x0030 },
{ 0x31 , 0x0031 },
{ 0x32 , 0x0032 },
{ 0x33 , 0x0033 },
{ 0x34 , 0x0034 },
{ 0x35 , 0x0035 },
{ 0x36 , 0x0036 },
{ 0x37 , 0x0037 },
{ 0x38 , 0x0038 },
{ 0x39 , 0x0039 },
{ 0x3a , 0x003A },
{ 0x3b , 0x003B },
{ 0x3c , 0x003C },
{ 0x3d , 0x003D },
{ 0x3e , 0x003E },
{ 0x3f , 0x003F },
{ 0x40 , 0x0040 },
{ 0x41 , 0x0041 },
{ 0x42 , 0x0042 },
{ 0x43 , 0x0043 },
{ 0x44 , 0x0044 },
{ 0x45 , 0x0045 },
{ 0x46 , 0x0046 },
{ 0x47 , 0x0047 },
{ 0x48 , 0x0048 },
{ 0x49 , 0x0049 },
{ 0x4a , 0x004A },
{ 0x4b , 0x004B },
{ 0x4c , 0x004C },
{ 0x4d , 0x004D },
{ 0x4e , 0x004E },
{ 0x4f , 0x004F },
{ 0x50 , 0x0050 },
{ 0x51 , 0x0051 },
{ 0x52 , 0x0052 },
{ 0x53 , 0x0053 },
{ 0x54 , 0x0054 },
{ 0x55 , 0x0055 },
{ 0x56 , 0x0056 },
{ 0x57 , 0x0057 },
{ 0x58 , 0x0058 },
{ 0x59 , 0x0059 },
{ 0x5a , 0x005A },
{ 0x5b , 0x005B },
{ 0x5c , 0x005C },
{ 0x5d , 0x005D },
{ 0x5e , 0x005E },
{ 0x5f , 0x005F },
{ 0x60 , 0x0060 },
{ 0x61 , 0x0061 },
{ 0x62 , 0x0062 },
{ 0x63 , 0x0063 },
{ 0x64 , 0x0064 },
{ 0x65 , 0x0065 },
{ 0x66 , 0x0066 },
{ 0x67 , 0x0067 },
{ 0x68 , 0x0068 },
{ 0x69 , 0x0069 },
{ 0x6a , 0x006A },
{ 0x6b , 0x006B },
{ 0x6c , 0x006C },
{ 0x6d , 0x006D },
{ 0x6e , 0x006E },
{ 0x6f , 0x006F },
{ 0x70 , 0x0070 },
{ 0x71 , 0x0071 },
{ 0x72 , 0x0072 },
{ 0x73 , 0x0073 },
{ 0x74 , 0x0074 },
{ 0x75 , 0x0075 },
{ 0x76 , 0x0076 },
{ 0x77 , 0x0077 },
{ 0x78 , 0x0078 },
{ 0x79 , 0x0079 },
{ 0x7a , 0x007A },
{ 0x7b , 0x007B },
{ 0x7c , 0x007C },
{ 0x7d , 0x007D },
{ 0x7e , 0x007E },
{ 0x7f , 0x007F },
{ 0x80 , 0x0080 },
{ 0x81 , 0x0081 },
{ 0x82 , 0x0082 },
{ 0x83 , 0x0083 },
{ 0x84 , 0x0084 },
{ 0x85 , 0x0085 },
{ 0x86 , 0x0086 },
{ 0x87 , 0x0087 },
{ 0x88 , 0x0088 },
{ 0x89 , 0x0089 },
{ 0x8a , 0x008A },
{ 0x8b , 0x008B },
{ 0x8c , 0x008C },
{ 0x8d , 0x008D },
{ 0x8e , 0x008E },
{ 0x8f , 0x008F },
{ 0x90 , 0x0090 },
{ 0x91 , 0x0091 },
{ 0x92 , 0x0092 },
{ 0x93 , 0x0093 },
{ 0x94 , 0x0094 },
{ 0x95 , 0x0095 },
{ 0x96 , 0x0096 },
{ 0x97 , 0x0097 },
{ 0x98 , 0x0098 },
{ 0x99 , 0x0099 },
{ 0x9a , 0x009A },
{ 0x9b , 0x009B },
{ 0x9c , 0x009C },
{ 0x9d , 0x009D },
{ 0x9e , 0x009E },
{ 0x9f , 0x009F },
{ 0xa0 , 0x00A0 },
{ 0xa1 , 0x0104 },
{ 0xa2 , 0x02D8 },
{ 0xa3 , 0x0141 },
{ 0xa4 , 0x00A4 },
{ 0xa5 , 0x013D },
{ 0xa6 , 0x015A },
{ 0xa7 , 0x00A7 },
{ 0xa8 , 0x00A8 },
{ 0xa9 , 0x0160 },
{ 0xaa , 0x015E },
{ 0xab , 0x0164 },
{ 0xac , 0x0179 },
{ 0xad , 0x00AD },
{ 0xae , 0x017D },
{ 0xaf , 0x017B },
{ 0xb0 , 0x00B0 },
{ 0xb1 , 0x0105 },
{ 0xb2 , 0x02DB },
{ 0xb3 , 0x0142 },
{ 0xb4 , 0x00B4 },
{ 0xb5 , 0x013E },
{ 0xb6 , 0x015B },
{ 0xb7 , 0x02C7 },
{ 0xb8 , 0x00B8 },
{ 0xb9 , 0x0161 },
{ 0xba , 0x015F },
{ 0xbb , 0x0165 },
{ 0xbc , 0x017A },
{ 0xbd , 0x02DD },
{ 0xbe , 0x017E },
{ 0xbf , 0x017C },
{ 0xc0 , 0x0154 },
{ 0xc1 , 0x00C1 },
{ 0xc2 , 0x00C2 },
{ 0xc3 , 0x0102 },
{ 0xc4 , 0x00C4 },
{ 0xc5 , 0x0139 },
{ 0xc6 , 0x0106 },
{ 0xc7 , 0x00C7 },
{ 0xc8 , 0x010C },
{ 0xc9 , 0x00C9 },
{ 0xca , 0x0118 },
{ 0xcb , 0x00CB },
{ 0xcc , 0x011A },
{ 0xcd , 0x00CD },
{ 0xce , 0x00CE },
{ 0xcf , 0x010E },
{ 0xd0 , 0x0110 },
{ 0xd1 , 0x0143 },
{ 0xd2 , 0x0147 },
{ 0xd3 , 0x00D3 },
{ 0xd4 , 0x00D4 },
{ 0xd5 , 0x0150 },
{ 0xd6 , 0x00D6 },
{ 0xd7 , 0x00D7 },
{ 0xd8 , 0x0158 },
{ 0xd9 , 0x016E },
{ 0xda , 0x00DA },
{ 0xdb , 0x0170 },
{ 0xdc , 0x00DC },
{ 0xdd , 0x00DD },
{ 0xde , 0x0162 },
{ 0xdf , 0x00DF },
{ 0xe0 , 0x0155 },
{ 0xe1 , 0x00E1 },
{ 0xe2 , 0x00E2 },
{ 0xe3 , 0x0103 },
{ 0xe4 , 0x00E4 },
{ 0xe5 , 0x013A },
{ 0xe6 , 0x0107 },
{ 0xe7 , 0x00E7 },
{ 0xe8 , 0x010D },
{ 0xe9 , 0x00E9 },
{ 0xea , 0x0119 },
{ 0xeb , 0x00EB },
{ 0xec , 0x011B },
{ 0xed , 0x00ED },
{ 0xee , 0x00EE },
{ 0xef , 0x010F },
{ 0xf0 , 0x0111 },
{ 0xf1 , 0x0144 },
{ 0xf2 , 0x0148 },
{ 0xf3 , 0x00F3 },
{ 0xf4 , 0x00F4 },
{ 0xf5 , 0x0151 },
{ 0xf6 , 0x00F6 },
{ 0xf7 , 0x00F7 },
{ 0xf8 , 0x0159 },
{ 0xf9 , 0x016F },
{ 0xfa , 0x00FA },
{ 0xfb , 0x0171 },
{ 0xfc , 0x00FC },
{ 0xfd , 0x00FD },
{ 0xfe , 0x0163 },
{ 0xff , 0x02D9 },
+249
View File
@@ -0,0 +1,249 @@
{ 0x00 , 0x0000 },
{ 0x01 , 0x0001 },
{ 0x02 , 0x0002 },
{ 0x03 , 0x0003 },
{ 0x04 , 0x0004 },
{ 0x05 , 0x0005 },
{ 0x06 , 0x0006 },
{ 0x07 , 0x0007 },
{ 0x08 , 0x0008 },
{ 0x09 , 0x0009 },
{ 0x0a , 0x000A },
{ 0x0b , 0x000B },
{ 0x0c , 0x000C },
{ 0x0d , 0x000D },
{ 0x0e , 0x000E },
{ 0x0f , 0x000F },
{ 0x10 , 0x0010 },
{ 0x11 , 0x0011 },
{ 0x12 , 0x0012 },
{ 0x13 , 0x0013 },
{ 0x14 , 0x0014 },
{ 0x15 , 0x0015 },
{ 0x16 , 0x0016 },
{ 0x17 , 0x0017 },
{ 0x18 , 0x0018 },
{ 0x19 , 0x0019 },
{ 0x1a , 0x001A },
{ 0x1b , 0x001B },
{ 0x1c , 0x001C },
{ 0x1d , 0x001D },
{ 0x1e , 0x001E },
{ 0x1f , 0x001F },
{ 0x20 , 0x0020 },
{ 0x21 , 0x0021 },
{ 0x22 , 0x0022 },
{ 0x23 , 0x0023 },
{ 0x24 , 0x0024 },
{ 0x25 , 0x0025 },
{ 0x26 , 0x0026 },
{ 0x27 , 0x0027 },
{ 0x28 , 0x0028 },
{ 0x29 , 0x0029 },
{ 0x2a , 0x002A },
{ 0x2b , 0x002B },
{ 0x2c , 0x002C },
{ 0x2d , 0x002D },
{ 0x2e , 0x002E },
{ 0x2f , 0x002F },
{ 0x30 , 0x0030 },
{ 0x31 , 0x0031 },
{ 0x32 , 0x0032 },
{ 0x33 , 0x0033 },
{ 0x34 , 0x0034 },
{ 0x35 , 0x0035 },
{ 0x36 , 0x0036 },
{ 0x37 , 0x0037 },
{ 0x38 , 0x0038 },
{ 0x39 , 0x0039 },
{ 0x3a , 0x003A },
{ 0x3b , 0x003B },
{ 0x3c , 0x003C },
{ 0x3d , 0x003D },
{ 0x3e , 0x003E },
{ 0x3f , 0x003F },
{ 0x40 , 0x0040 },
{ 0x41 , 0x0041 },
{ 0x42 , 0x0042 },
{ 0x43 , 0x0043 },
{ 0x44 , 0x0044 },
{ 0x45 , 0x0045 },
{ 0x46 , 0x0046 },
{ 0x47 , 0x0047 },
{ 0x48 , 0x0048 },
{ 0x49 , 0x0049 },
{ 0x4a , 0x004A },
{ 0x4b , 0x004B },
{ 0x4c , 0x004C },
{ 0x4d , 0x004D },
{ 0x4e , 0x004E },
{ 0x4f , 0x004F },
{ 0x50 , 0x0050 },
{ 0x51 , 0x0051 },
{ 0x52 , 0x0052 },
{ 0x53 , 0x0053 },
{ 0x54 , 0x0054 },
{ 0x55 , 0x0055 },
{ 0x56 , 0x0056 },
{ 0x57 , 0x0057 },
{ 0x58 , 0x0058 },
{ 0x59 , 0x0059 },
{ 0x5a , 0x005A },
{ 0x5b , 0x005B },
{ 0x5c , 0x005C },
{ 0x5d , 0x005D },
{ 0x5e , 0x005E },
{ 0x5f , 0x005F },
{ 0x60 , 0x0060 },
{ 0x61 , 0x0061 },
{ 0x62 , 0x0062 },
{ 0x63 , 0x0063 },
{ 0x64 , 0x0064 },
{ 0x65 , 0x0065 },
{ 0x66 , 0x0066 },
{ 0x67 , 0x0067 },
{ 0x68 , 0x0068 },
{ 0x69 , 0x0069 },
{ 0x6a , 0x006A },
{ 0x6b , 0x006B },
{ 0x6c , 0x006C },
{ 0x6d , 0x006D },
{ 0x6e , 0x006E },
{ 0x6f , 0x006F },
{ 0x70 , 0x0070 },
{ 0x71 , 0x0071 },
{ 0x72 , 0x0072 },
{ 0x73 , 0x0073 },
{ 0x74 , 0x0074 },
{ 0x75 , 0x0075 },
{ 0x76 , 0x0076 },
{ 0x77 , 0x0077 },
{ 0x78 , 0x0078 },
{ 0x79 , 0x0079 },
{ 0x7a , 0x007A },
{ 0x7b , 0x007B },
{ 0x7c , 0x007C },
{ 0x7d , 0x007D },
{ 0x7e , 0x007E },
{ 0x7f , 0x007F },
{ 0x80 , 0x0080 },
{ 0x81 , 0x0081 },
{ 0x82 , 0x0082 },
{ 0x83 , 0x0083 },
{ 0x84 , 0x0084 },
{ 0x85 , 0x0085 },
{ 0x86 , 0x0086 },
{ 0x87 , 0x0087 },
{ 0x88 , 0x0088 },
{ 0x89 , 0x0089 },
{ 0x8a , 0x008A },
{ 0x8b , 0x008B },
{ 0x8c , 0x008C },
{ 0x8d , 0x008D },
{ 0x8e , 0x008E },
{ 0x8f , 0x008F },
{ 0x90 , 0x0090 },
{ 0x91 , 0x0091 },
{ 0x92 , 0x0092 },
{ 0x93 , 0x0093 },
{ 0x94 , 0x0094 },
{ 0x95 , 0x0095 },
{ 0x96 , 0x0096 },
{ 0x97 , 0x0097 },
{ 0x98 , 0x0098 },
{ 0x99 , 0x0099 },
{ 0x9a , 0x009A },
{ 0x9b , 0x009B },
{ 0x9c , 0x009C },
{ 0x9d , 0x009D },
{ 0x9e , 0x009E },
{ 0x9f , 0x009F },
{ 0xa0 , 0x00A0 },
{ 0xa1 , 0x0126 },
{ 0xa2 , 0x02D8 },
{ 0xa3 , 0x00A3 },
{ 0xa4 , 0x00A4 },
{ 0xa6 , 0x0124 },
{ 0xa7 , 0x00A7 },
{ 0xa8 , 0x00A8 },
{ 0xa9 , 0x0130 },
{ 0xaa , 0x015E },
{ 0xab , 0x011E },
{ 0xac , 0x0134 },
{ 0xad , 0x00AD },
{ 0xaf , 0x017B },
{ 0xb0 , 0x00B0 },
{ 0xb1 , 0x0127 },
{ 0xb2 , 0x00B2 },
{ 0xb3 , 0x00B3 },
{ 0xb4 , 0x00B4 },
{ 0xb5 , 0x00B5 },
{ 0xb6 , 0x0125 },
{ 0xb7 , 0x00B7 },
{ 0xb8 , 0x00B8 },
{ 0xb9 , 0x0131 },
{ 0xba , 0x015F },
{ 0xbb , 0x011F },
{ 0xbc , 0x0135 },
{ 0xbd , 0x00BD },
{ 0xbf , 0x017C },
{ 0xc0 , 0x00C0 },
{ 0xc1 , 0x00C1 },
{ 0xc2 , 0x00C2 },
{ 0xc4 , 0x00C4 },
{ 0xc5 , 0x010A },
{ 0xc6 , 0x0108 },
{ 0xc7 , 0x00C7 },
{ 0xc8 , 0x00C8 },
{ 0xc9 , 0x00C9 },
{ 0xca , 0x00CA },
{ 0xcb , 0x00CB },
{ 0xcc , 0x00CC },
{ 0xcd , 0x00CD },
{ 0xce , 0x00CE },
{ 0xcf , 0x00CF },
{ 0xd1 , 0x00D1 },
{ 0xd2 , 0x00D2 },
{ 0xd3 , 0x00D3 },
{ 0xd4 , 0x00D4 },
{ 0xd5 , 0x0120 },
{ 0xd6 , 0x00D6 },
{ 0xd7 , 0x00D7 },
{ 0xd8 , 0x011C },
{ 0xd9 , 0x00D9 },
{ 0xda , 0x00DA },
{ 0xdb , 0x00DB },
{ 0xdc , 0x00DC },
{ 0xdd , 0x016C },
{ 0xde , 0x015C },
{ 0xdf , 0x00DF },
{ 0xe0 , 0x00E0 },
{ 0xe1 , 0x00E1 },
{ 0xe2 , 0x00E2 },
{ 0xe4 , 0x00E4 },
{ 0xe5 , 0x010B },
{ 0xe6 , 0x0109 },
{ 0xe7 , 0x00E7 },
{ 0xe8 , 0x00E8 },
{ 0xe9 , 0x00E9 },
{ 0xea , 0x00EA },
{ 0xeb , 0x00EB },
{ 0xec , 0x00EC },
{ 0xed , 0x00ED },
{ 0xee , 0x00EE },
{ 0xef , 0x00EF },
{ 0xf1 , 0x00F1 },
{ 0xf2 , 0x00F2 },
{ 0xf3 , 0x00F3 },
{ 0xf4 , 0x00F4 },
{ 0xf5 , 0x0121 },
{ 0xf6 , 0x00F6 },
{ 0xf7 , 0x00F7 },
{ 0xf8 , 0x011D },
{ 0xf9 , 0x00F9 },
{ 0xfa , 0x00FA },
{ 0xfb , 0x00FB },
{ 0xfc , 0x00FC },
{ 0xfd , 0x016D },
{ 0xfe , 0x015D },
{ 0xff , 0x02D9 },
+256
View File
@@ -0,0 +1,256 @@
{ 0x00 , 0x0000 },
{ 0x01 , 0x0001 },
{ 0x02 , 0x0002 },
{ 0x03 , 0x0003 },
{ 0x04 , 0x0004 },
{ 0x05 , 0x0005 },
{ 0x06 , 0x0006 },
{ 0x07 , 0x0007 },
{ 0x08 , 0x0008 },
{ 0x09 , 0x0009 },
{ 0x0a , 0x000A },
{ 0x0b , 0x000B },
{ 0x0c , 0x000C },
{ 0x0d , 0x000D },
{ 0x0e , 0x000E },
{ 0x0f , 0x000F },
{ 0x10 , 0x0010 },
{ 0x11 , 0x0011 },
{ 0x12 , 0x0012 },
{ 0x13 , 0x0013 },
{ 0x14 , 0x0014 },
{ 0x15 , 0x0015 },
{ 0x16 , 0x0016 },
{ 0x17 , 0x0017 },
{ 0x18 , 0x0018 },
{ 0x19 , 0x0019 },
{ 0x1a , 0x001A },
{ 0x1b , 0x001B },
{ 0x1c , 0x001C },
{ 0x1d , 0x001D },
{ 0x1e , 0x001E },
{ 0x1f , 0x001F },
{ 0x20 , 0x0020 },
{ 0x21 , 0x0021 },
{ 0x22 , 0x0022 },
{ 0x23 , 0x0023 },
{ 0x24 , 0x0024 },
{ 0x25 , 0x0025 },
{ 0x26 , 0x0026 },
{ 0x27 , 0x0027 },
{ 0x28 , 0x0028 },
{ 0x29 , 0x0029 },
{ 0x2a , 0x002A },
{ 0x2b , 0x002B },
{ 0x2c , 0x002C },
{ 0x2d , 0x002D },
{ 0x2e , 0x002E },
{ 0x2f , 0x002F },
{ 0x30 , 0x0030 },
{ 0x31 , 0x0031 },
{ 0x32 , 0x0032 },
{ 0x33 , 0x0033 },
{ 0x34 , 0x0034 },
{ 0x35 , 0x0035 },
{ 0x36 , 0x0036 },
{ 0x37 , 0x0037 },
{ 0x38 , 0x0038 },
{ 0x39 , 0x0039 },
{ 0x3a , 0x003A },
{ 0x3b , 0x003B },
{ 0x3c , 0x003C },
{ 0x3d , 0x003D },
{ 0x3e , 0x003E },
{ 0x3f , 0x003F },
{ 0x40 , 0x0040 },
{ 0x41 , 0x0041 },
{ 0x42 , 0x0042 },
{ 0x43 , 0x0043 },
{ 0x44 , 0x0044 },
{ 0x45 , 0x0045 },
{ 0x46 , 0x0046 },
{ 0x47 , 0x0047 },
{ 0x48 , 0x0048 },
{ 0x49 , 0x0049 },
{ 0x4a , 0x004A },
{ 0x4b , 0x004B },
{ 0x4c , 0x004C },
{ 0x4d , 0x004D },
{ 0x4e , 0x004E },
{ 0x4f , 0x004F },
{ 0x50 , 0x0050 },
{ 0x51 , 0x0051 },
{ 0x52 , 0x0052 },
{ 0x53 , 0x0053 },
{ 0x54 , 0x0054 },
{ 0x55 , 0x0055 },
{ 0x56 , 0x0056 },
{ 0x57 , 0x0057 },
{ 0x58 , 0x0058 },
{ 0x59 , 0x0059 },
{ 0x5a , 0x005A },
{ 0x5b , 0x005B },
{ 0x5c , 0x005C },
{ 0x5d , 0x005D },
{ 0x5e , 0x005E },
{ 0x5f , 0x005F },
{ 0x60 , 0x0060 },
{ 0x61 , 0x0061 },
{ 0x62 , 0x0062 },
{ 0x63 , 0x0063 },
{ 0x64 , 0x0064 },
{ 0x65 , 0x0065 },
{ 0x66 , 0x0066 },
{ 0x67 , 0x0067 },
{ 0x68 , 0x0068 },
{ 0x69 , 0x0069 },
{ 0x6a , 0x006A },
{ 0x6b , 0x006B },
{ 0x6c , 0x006C },
{ 0x6d , 0x006D },
{ 0x6e , 0x006E },
{ 0x6f , 0x006F },
{ 0x70 , 0x0070 },
{ 0x71 , 0x0071 },
{ 0x72 , 0x0072 },
{ 0x73 , 0x0073 },
{ 0x74 , 0x0074 },
{ 0x75 , 0x0075 },
{ 0x76 , 0x0076 },
{ 0x77 , 0x0077 },
{ 0x78 , 0x0078 },
{ 0x79 , 0x0079 },
{ 0x7a , 0x007A },
{ 0x7b , 0x007B },
{ 0x7c , 0x007C },
{ 0x7d , 0x007D },
{ 0x7e , 0x007E },
{ 0x7f , 0x007F },
{ 0x80 , 0x0080 },
{ 0x81 , 0x0081 },
{ 0x82 , 0x0082 },
{ 0x83 , 0x0083 },
{ 0x84 , 0x0084 },
{ 0x85 , 0x0085 },
{ 0x86 , 0x0086 },
{ 0x87 , 0x0087 },
{ 0x88 , 0x0088 },
{ 0x89 , 0x0089 },
{ 0x8a , 0x008A },
{ 0x8b , 0x008B },
{ 0x8c , 0x008C },
{ 0x8d , 0x008D },
{ 0x8e , 0x008E },
{ 0x8f , 0x008F },
{ 0x90 , 0x0090 },
{ 0x91 , 0x0091 },
{ 0x92 , 0x0092 },
{ 0x93 , 0x0093 },
{ 0x94 , 0x0094 },
{ 0x95 , 0x0095 },
{ 0x96 , 0x0096 },
{ 0x97 , 0x0097 },
{ 0x98 , 0x0098 },
{ 0x99 , 0x0099 },
{ 0x9a , 0x009A },
{ 0x9b , 0x009B },
{ 0x9c , 0x009C },
{ 0x9d , 0x009D },
{ 0x9e , 0x009E },
{ 0x9f , 0x009F },
{ 0xa0 , 0x00A0 },
{ 0xa1 , 0x0104 },
{ 0xa2 , 0x0138 },
{ 0xa3 , 0x0156 },
{ 0xa4 , 0x00A4 },
{ 0xa5 , 0x0128 },
{ 0xa6 , 0x013B },
{ 0xa7 , 0x00A7 },
{ 0xa8 , 0x00A8 },
{ 0xa9 , 0x0160 },
{ 0xaa , 0x0112 },
{ 0xab , 0x0122 },
{ 0xac , 0x0166 },
{ 0xad , 0x00AD },
{ 0xae , 0x017D },
{ 0xaf , 0x00AF },
{ 0xb0 , 0x00B0 },
{ 0xb1 , 0x0105 },
{ 0xb2 , 0x02DB },
{ 0xb3 , 0x0157 },
{ 0xb4 , 0x00B4 },
{ 0xb5 , 0x0129 },
{ 0xb6 , 0x013C },
{ 0xb7 , 0x02C7 },
{ 0xb8 , 0x00B8 },
{ 0xb9 , 0x0161 },
{ 0xba , 0x0113 },
{ 0xbb , 0x0123 },
{ 0xbc , 0x0167 },
{ 0xbd , 0x014A },
{ 0xbe , 0x017E },
{ 0xbf , 0x014B },
{ 0xc0 , 0x0100 },
{ 0xc1 , 0x00C1 },
{ 0xc2 , 0x00C2 },
{ 0xc3 , 0x00C3 },
{ 0xc4 , 0x00C4 },
{ 0xc5 , 0x00C5 },
{ 0xc6 , 0x00C6 },
{ 0xc7 , 0x012E },
{ 0xc8 , 0x010C },
{ 0xc9 , 0x00C9 },
{ 0xca , 0x0118 },
{ 0xcb , 0x00CB },
{ 0xcc , 0x0116 },
{ 0xcd , 0x00CD },
{ 0xce , 0x00CE },
{ 0xcf , 0x012A },
{ 0xd0 , 0x0110 },
{ 0xd1 , 0x0145 },
{ 0xd2 , 0x014C },
{ 0xd3 , 0x0136 },
{ 0xd4 , 0x00D4 },
{ 0xd5 , 0x00D5 },
{ 0xd6 , 0x00D6 },
{ 0xd7 , 0x00D7 },
{ 0xd8 , 0x00D8 },
{ 0xd9 , 0x0172 },
{ 0xda , 0x00DA },
{ 0xdb , 0x00DB },
{ 0xdc , 0x00DC },
{ 0xdd , 0x0168 },
{ 0xde , 0x016A },
{ 0xdf , 0x00DF },
{ 0xe0 , 0x0101 },
{ 0xe1 , 0x00E1 },
{ 0xe2 , 0x00E2 },
{ 0xe3 , 0x00E3 },
{ 0xe4 , 0x00E4 },
{ 0xe5 , 0x00E5 },
{ 0xe6 , 0x00E6 },
{ 0xe7 , 0x012F },
{ 0xe8 , 0x010D },
{ 0xe9 , 0x00E9 },
{ 0xea , 0x0119 },
{ 0xeb , 0x00EB },
{ 0xec , 0x0117 },
{ 0xed , 0x00ED },
{ 0xee , 0x00EE },
{ 0xef , 0x012B },
{ 0xf0 , 0x0111 },
{ 0xf1 , 0x0146 },
{ 0xf2 , 0x014D },
{ 0xf3 , 0x0137 },
{ 0xf4 , 0x00F4 },
{ 0xf5 , 0x00F5 },
{ 0xf6 , 0x00F6 },
{ 0xf7 , 0x00F7 },
{ 0xf8 , 0x00F8 },
{ 0xf9 , 0x0173 },
{ 0xfa , 0x00FA },
{ 0xfb , 0x00FB },
{ 0xfc , 0x00FC },
{ 0xfd , 0x0169 },
{ 0xfe , 0x016B },
{ 0xff , 0x02D9 },
+256
View File
@@ -0,0 +1,256 @@
{ 0x00 , 0x0000 },
{ 0x01 , 0x0001 },
{ 0x02 , 0x0002 },
{ 0x03 , 0x0003 },
{ 0x04 , 0x0004 },
{ 0x05 , 0x0005 },
{ 0x06 , 0x0006 },
{ 0x07 , 0x0007 },
{ 0x08 , 0x0008 },
{ 0x09 , 0x0009 },
{ 0x0a , 0x000A },
{ 0x0b , 0x000B },
{ 0x0c , 0x000C },
{ 0x0d , 0x000D },
{ 0x0e , 0x000E },
{ 0x0f , 0x000F },
{ 0x10 , 0x0010 },
{ 0x11 , 0x0011 },
{ 0x12 , 0x0012 },
{ 0x13 , 0x0013 },
{ 0x14 , 0x0014 },
{ 0x15 , 0x0015 },
{ 0x16 , 0x0016 },
{ 0x17 , 0x0017 },
{ 0x18 , 0x0018 },
{ 0x19 , 0x0019 },
{ 0x1a , 0x001A },
{ 0x1b , 0x001B },
{ 0x1c , 0x001C },
{ 0x1d , 0x001D },
{ 0x1e , 0x001E },
{ 0x1f , 0x001F },
{ 0x20 , 0x0020 },
{ 0x21 , 0x0021 },
{ 0x22 , 0x0022 },
{ 0x23 , 0x0023 },
{ 0x24 , 0x0024 },
{ 0x25 , 0x0025 },
{ 0x26 , 0x0026 },
{ 0x27 , 0x0027 },
{ 0x28 , 0x0028 },
{ 0x29 , 0x0029 },
{ 0x2a , 0x002A },
{ 0x2b , 0x002B },
{ 0x2c , 0x002C },
{ 0x2d , 0x002D },
{ 0x2e , 0x002E },
{ 0x2f , 0x002F },
{ 0x30 , 0x0030 },
{ 0x31 , 0x0031 },
{ 0x32 , 0x0032 },
{ 0x33 , 0x0033 },
{ 0x34 , 0x0034 },
{ 0x35 , 0x0035 },
{ 0x36 , 0x0036 },
{ 0x37 , 0x0037 },
{ 0x38 , 0x0038 },
{ 0x39 , 0x0039 },
{ 0x3a , 0x003A },
{ 0x3b , 0x003B },
{ 0x3c , 0x003C },
{ 0x3d , 0x003D },
{ 0x3e , 0x003E },
{ 0x3f , 0x003F },
{ 0x40 , 0x0040 },
{ 0x41 , 0x0041 },
{ 0x42 , 0x0042 },
{ 0x43 , 0x0043 },
{ 0x44 , 0x0044 },
{ 0x45 , 0x0045 },
{ 0x46 , 0x0046 },
{ 0x47 , 0x0047 },
{ 0x48 , 0x0048 },
{ 0x49 , 0x0049 },
{ 0x4a , 0x004A },
{ 0x4b , 0x004B },
{ 0x4c , 0x004C },
{ 0x4d , 0x004D },
{ 0x4e , 0x004E },
{ 0x4f , 0x004F },
{ 0x50 , 0x0050 },
{ 0x51 , 0x0051 },
{ 0x52 , 0x0052 },
{ 0x53 , 0x0053 },
{ 0x54 , 0x0054 },
{ 0x55 , 0x0055 },
{ 0x56 , 0x0056 },
{ 0x57 , 0x0057 },
{ 0x58 , 0x0058 },
{ 0x59 , 0x0059 },
{ 0x5a , 0x005A },
{ 0x5b , 0x005B },
{ 0x5c , 0x005C },
{ 0x5d , 0x005D },
{ 0x5e , 0x005E },
{ 0x5f , 0x005F },
{ 0x60 , 0x0060 },
{ 0x61 , 0x0061 },
{ 0x62 , 0x0062 },
{ 0x63 , 0x0063 },
{ 0x64 , 0x0064 },
{ 0x65 , 0x0065 },
{ 0x66 , 0x0066 },
{ 0x67 , 0x0067 },
{ 0x68 , 0x0068 },
{ 0x69 , 0x0069 },
{ 0x6a , 0x006A },
{ 0x6b , 0x006B },
{ 0x6c , 0x006C },
{ 0x6d , 0x006D },
{ 0x6e , 0x006E },
{ 0x6f , 0x006F },
{ 0x70 , 0x0070 },
{ 0x71 , 0x0071 },
{ 0x72 , 0x0072 },
{ 0x73 , 0x0073 },
{ 0x74 , 0x0074 },
{ 0x75 , 0x0075 },
{ 0x76 , 0x0076 },
{ 0x77 , 0x0077 },
{ 0x78 , 0x0078 },
{ 0x79 , 0x0079 },
{ 0x7a , 0x007A },
{ 0x7b , 0x007B },
{ 0x7c , 0x007C },
{ 0x7d , 0x007D },
{ 0x7e , 0x007E },
{ 0x7f , 0x007F },
{ 0x80 , 0x0080 },
{ 0x81 , 0x0081 },
{ 0x82 , 0x0082 },
{ 0x83 , 0x0083 },
{ 0x84 , 0x0084 },
{ 0x85 , 0x0085 },
{ 0x86 , 0x0086 },
{ 0x87 , 0x0087 },
{ 0x88 , 0x0088 },
{ 0x89 , 0x0089 },
{ 0x8a , 0x008A },
{ 0x8b , 0x008B },
{ 0x8c , 0x008C },
{ 0x8d , 0x008D },
{ 0x8e , 0x008E },
{ 0x8f , 0x008F },
{ 0x90 , 0x0090 },
{ 0x91 , 0x0091 },
{ 0x92 , 0x0092 },
{ 0x93 , 0x0093 },
{ 0x94 , 0x0094 },
{ 0x95 , 0x0095 },
{ 0x96 , 0x0096 },
{ 0x97 , 0x0097 },
{ 0x98 , 0x0098 },
{ 0x99 , 0x0099 },
{ 0x9a , 0x009A },
{ 0x9b , 0x009B },
{ 0x9c , 0x009C },
{ 0x9d , 0x009D },
{ 0x9e , 0x009E },
{ 0x9f , 0x009F },
{ 0xa0 , 0x00A0 },
{ 0xa1 , 0x0401 },
{ 0xa2 , 0x0402 },
{ 0xa3 , 0x0403 },
{ 0xa4 , 0x0404 },
{ 0xa5 , 0x0405 },
{ 0xa6 , 0x0406 },
{ 0xa7 , 0x0407 },
{ 0xa8 , 0x0408 },
{ 0xa9 , 0x0409 },
{ 0xaa , 0x040A },
{ 0xab , 0x040B },
{ 0xac , 0x040C },
{ 0xad , 0x00AD },
{ 0xae , 0x040E },
{ 0xaf , 0x040F },
{ 0xb0 , 0x0410 },
{ 0xb1 , 0x0411 },
{ 0xb2 , 0x0412 },
{ 0xb3 , 0x0413 },
{ 0xb4 , 0x0414 },
{ 0xb5 , 0x0415 },
{ 0xb6 , 0x0416 },
{ 0xb7 , 0x0417 },
{ 0xb8 , 0x0418 },
{ 0xb9 , 0x0419 },
{ 0xba , 0x041A },
{ 0xbb , 0x041B },
{ 0xbc , 0x041C },
{ 0xbd , 0x041D },
{ 0xbe , 0x041E },
{ 0xbf , 0x041F },
{ 0xc0 , 0x0420 },
{ 0xc1 , 0x0421 },
{ 0xc2 , 0x0422 },
{ 0xc3 , 0x0423 },
{ 0xc4 , 0x0424 },
{ 0xc5 , 0x0425 },
{ 0xc6 , 0x0426 },
{ 0xc7 , 0x0427 },
{ 0xc8 , 0x0428 },
{ 0xc9 , 0x0429 },
{ 0xca , 0x042A },
{ 0xcb , 0x042B },
{ 0xcc , 0x042C },
{ 0xcd , 0x042D },
{ 0xce , 0x042E },
{ 0xcf , 0x042F },
{ 0xd0 , 0x0430 },
{ 0xd1 , 0x0431 },
{ 0xd2 , 0x0432 },
{ 0xd3 , 0x0433 },
{ 0xd4 , 0x0434 },
{ 0xd5 , 0x0435 },
{ 0xd6 , 0x0436 },
{ 0xd7 , 0x0437 },
{ 0xd8 , 0x0438 },
{ 0xd9 , 0x0439 },
{ 0xda , 0x043A },
{ 0xdb , 0x043B },
{ 0xdc , 0x043C },
{ 0xdd , 0x043D },
{ 0xde , 0x043E },
{ 0xdf , 0x043F },
{ 0xe0 , 0x0440 },
{ 0xe1 , 0x0441 },
{ 0xe2 , 0x0442 },
{ 0xe3 , 0x0443 },
{ 0xe4 , 0x0444 },
{ 0xe5 , 0x0445 },
{ 0xe6 , 0x0446 },
{ 0xe7 , 0x0447 },
{ 0xe8 , 0x0448 },
{ 0xe9 , 0x0449 },
{ 0xea , 0x044A },
{ 0xeb , 0x044B },
{ 0xec , 0x044C },
{ 0xed , 0x044D },
{ 0xee , 0x044E },
{ 0xef , 0x044F },
{ 0xf0 , 0x2116 },
{ 0xf1 , 0x0451 },
{ 0xf2 , 0x0452 },
{ 0xf3 , 0x0453 },
{ 0xf4 , 0x0454 },
{ 0xf5 , 0x0455 },
{ 0xf6 , 0x0456 },
{ 0xf7 , 0x0457 },
{ 0xf8 , 0x0458 },
{ 0xf9 , 0x0459 },
{ 0xfa , 0x045A },
{ 0xfb , 0x045B },
{ 0xfc , 0x045C },
{ 0xfd , 0x00A7 },
{ 0xfe , 0x045E },
{ 0xff , 0x045F },
+211
View File
@@ -0,0 +1,211 @@
{ 0x00 , 0x0000 },
{ 0x01 , 0x0001 },
{ 0x02 , 0x0002 },
{ 0x03 , 0x0003 },
{ 0x04 , 0x0004 },
{ 0x05 , 0x0005 },
{ 0x06 , 0x0006 },
{ 0x07 , 0x0007 },
{ 0x08 , 0x0008 },
{ 0x09 , 0x0009 },
{ 0x0a , 0x000A },
{ 0x0b , 0x000B },
{ 0x0c , 0x000C },
{ 0x0d , 0x000D },
{ 0x0e , 0x000E },
{ 0x0f , 0x000F },
{ 0x10 , 0x0010 },
{ 0x11 , 0x0011 },
{ 0x12 , 0x0012 },
{ 0x13 , 0x0013 },
{ 0x14 , 0x0014 },
{ 0x15 , 0x0015 },
{ 0x16 , 0x0016 },
{ 0x17 , 0x0017 },
{ 0x18 , 0x0018 },
{ 0x19 , 0x0019 },
{ 0x1a , 0x001A },
{ 0x1b , 0x001B },
{ 0x1c , 0x001C },
{ 0x1d , 0x001D },
{ 0x1e , 0x001E },
{ 0x1f , 0x001F },
{ 0x20 , 0x0020 },
{ 0x21 , 0x0021 },
{ 0x22 , 0x0022 },
{ 0x23 , 0x0023 },
{ 0x24 , 0x0024 },
{ 0x25 , 0x0025 },
{ 0x26 , 0x0026 },
{ 0x27 , 0x0027 },
{ 0x28 , 0x0028 },
{ 0x29 , 0x0029 },
{ 0x2a , 0x002A },
{ 0x2b , 0x002B },
{ 0x2c , 0x002C },
{ 0x2d , 0x002D },
{ 0x2e , 0x002E },
{ 0x2f , 0x002F },
{ 0x30 , 0x0030 },
{ 0x31 , 0x0031 },
{ 0x32 , 0x0032 },
{ 0x33 , 0x0033 },
{ 0x34 , 0x0034 },
{ 0x35 , 0x0035 },
{ 0x36 , 0x0036 },
{ 0x37 , 0x0037 },
{ 0x38 , 0x0038 },
{ 0x39 , 0x0039 },
{ 0x3a , 0x003A },
{ 0x3b , 0x003B },
{ 0x3c , 0x003C },
{ 0x3d , 0x003D },
{ 0x3e , 0x003E },
{ 0x3f , 0x003F },
{ 0x40 , 0x0040 },
{ 0x41 , 0x0041 },
{ 0x42 , 0x0042 },
{ 0x43 , 0x0043 },
{ 0x44 , 0x0044 },
{ 0x45 , 0x0045 },
{ 0x46 , 0x0046 },
{ 0x47 , 0x0047 },
{ 0x48 , 0x0048 },
{ 0x49 , 0x0049 },
{ 0x4a , 0x004A },
{ 0x4b , 0x004B },
{ 0x4c , 0x004C },
{ 0x4d , 0x004D },
{ 0x4e , 0x004E },
{ 0x4f , 0x004F },
{ 0x50 , 0x0050 },
{ 0x51 , 0x0051 },
{ 0x52 , 0x0052 },
{ 0x53 , 0x0053 },
{ 0x54 , 0x0054 },
{ 0x55 , 0x0055 },
{ 0x56 , 0x0056 },
{ 0x57 , 0x0057 },
{ 0x58 , 0x0058 },
{ 0x59 , 0x0059 },
{ 0x5a , 0x005A },
{ 0x5b , 0x005B },
{ 0x5c , 0x005C },
{ 0x5d , 0x005D },
{ 0x5e , 0x005E },
{ 0x5f , 0x005F },
{ 0x60 , 0x0060 },
{ 0x61 , 0x0061 },
{ 0x62 , 0x0062 },
{ 0x63 , 0x0063 },
{ 0x64 , 0x0064 },
{ 0x65 , 0x0065 },
{ 0x66 , 0x0066 },
{ 0x67 , 0x0067 },
{ 0x68 , 0x0068 },
{ 0x69 , 0x0069 },
{ 0x6a , 0x006A },
{ 0x6b , 0x006B },
{ 0x6c , 0x006C },
{ 0x6d , 0x006D },
{ 0x6e , 0x006E },
{ 0x6f , 0x006F },
{ 0x70 , 0x0070 },
{ 0x71 , 0x0071 },
{ 0x72 , 0x0072 },
{ 0x73 , 0x0073 },
{ 0x74 , 0x0074 },
{ 0x75 , 0x0075 },
{ 0x76 , 0x0076 },
{ 0x77 , 0x0077 },
{ 0x78 , 0x0078 },
{ 0x79 , 0x0079 },
{ 0x7a , 0x007A },
{ 0x7b , 0x007B },
{ 0x7c , 0x007C },
{ 0x7d , 0x007D },
{ 0x7e , 0x007E },
{ 0x7f , 0x007F },
{ 0x80 , 0x0080 },
{ 0x81 , 0x0081 },
{ 0x82 , 0x0082 },
{ 0x83 , 0x0083 },
{ 0x84 , 0x0084 },
{ 0x85 , 0x0085 },
{ 0x86 , 0x0086 },
{ 0x87 , 0x0087 },
{ 0x88 , 0x0088 },
{ 0x89 , 0x0089 },
{ 0x8a , 0x008A },
{ 0x8b , 0x008B },
{ 0x8c , 0x008C },
{ 0x8d , 0x008D },
{ 0x8e , 0x008E },
{ 0x8f , 0x008F },
{ 0x90 , 0x0090 },
{ 0x91 , 0x0091 },
{ 0x92 , 0x0092 },
{ 0x93 , 0x0093 },
{ 0x94 , 0x0094 },
{ 0x95 , 0x0095 },
{ 0x96 , 0x0096 },
{ 0x97 , 0x0097 },
{ 0x98 , 0x0098 },
{ 0x99 , 0x0099 },
{ 0x9a , 0x009A },
{ 0x9b , 0x009B },
{ 0x9c , 0x009C },
{ 0x9d , 0x009D },
{ 0x9e , 0x009E },
{ 0x9f , 0x009F },
{ 0xa0 , 0x00A0 },
{ 0xa4 , 0x00A4 },
{ 0xac , 0x060C },
{ 0xad , 0x00AD },
{ 0xbb , 0x061B },
{ 0xbf , 0x061F },
{ 0xc1 , 0x0621 },
{ 0xc2 , 0x0622 },
{ 0xc3 , 0x0623 },
{ 0xc4 , 0x0624 },
{ 0xc5 , 0x0625 },
{ 0xc6 , 0x0626 },
{ 0xc7 , 0x0627 },
{ 0xc8 , 0x0628 },
{ 0xc9 , 0x0629 },
{ 0xca , 0x062A },
{ 0xcb , 0x062B },
{ 0xcc , 0x062C },
{ 0xcd , 0x062D },
{ 0xce , 0x062E },
{ 0xcf , 0x062F },
{ 0xd0 , 0x0630 },
{ 0xd1 , 0x0631 },
{ 0xd2 , 0x0632 },
{ 0xd3 , 0x0633 },
{ 0xd4 , 0x0634 },
{ 0xd5 , 0x0635 },
{ 0xd6 , 0x0636 },
{ 0xd7 , 0x0637 },
{ 0xd8 , 0x0638 },
{ 0xd9 , 0x0639 },
{ 0xda , 0x063A },
{ 0xe0 , 0x0640 },
{ 0xe1 , 0x0641 },
{ 0xe2 , 0x0642 },
{ 0xe3 , 0x0643 },
{ 0xe4 , 0x0644 },
{ 0xe5 , 0x0645 },
{ 0xe6 , 0x0646 },
{ 0xe7 , 0x0647 },
{ 0xe8 , 0x0648 },
{ 0xe9 , 0x0649 },
{ 0xea , 0x064A },
{ 0xeb , 0x064B },
{ 0xec , 0x064C },
{ 0xed , 0x064D },
{ 0xee , 0x064E },
{ 0xef , 0x064F },
{ 0xf0 , 0x0650 },
{ 0xf1 , 0x0651 },
{ 0xf2 , 0x0652 },
+250
View File
@@ -0,0 +1,250 @@
{ 0x00 , 0x0000 },
{ 0x01 , 0x0001 },
{ 0x02 , 0x0002 },
{ 0x03 , 0x0003 },
{ 0x04 , 0x0004 },
{ 0x05 , 0x0005 },
{ 0x06 , 0x0006 },
{ 0x07 , 0x0007 },
{ 0x08 , 0x0008 },
{ 0x09 , 0x0009 },
{ 0x0a , 0x000A },
{ 0x0b , 0x000B },
{ 0x0c , 0x000C },
{ 0x0d , 0x000D },
{ 0x0e , 0x000E },
{ 0x0f , 0x000F },
{ 0x10 , 0x0010 },
{ 0x11 , 0x0011 },
{ 0x12 , 0x0012 },
{ 0x13 , 0x0013 },
{ 0x14 , 0x0014 },
{ 0x15 , 0x0015 },
{ 0x16 , 0x0016 },
{ 0x17 , 0x0017 },
{ 0x18 , 0x0018 },
{ 0x19 , 0x0019 },
{ 0x1a , 0x001A },
{ 0x1b , 0x001B },
{ 0x1c , 0x001C },
{ 0x1d , 0x001D },
{ 0x1e , 0x001E },
{ 0x1f , 0x001F },
{ 0x20 , 0x0020 },
{ 0x21 , 0x0021 },
{ 0x22 , 0x0022 },
{ 0x23 , 0x0023 },
{ 0x24 , 0x0024 },
{ 0x25 , 0x0025 },
{ 0x26 , 0x0026 },
{ 0x27 , 0x0027 },
{ 0x28 , 0x0028 },
{ 0x29 , 0x0029 },
{ 0x2a , 0x002A },
{ 0x2b , 0x002B },
{ 0x2c , 0x002C },
{ 0x2d , 0x002D },
{ 0x2e , 0x002E },
{ 0x2f , 0x002F },
{ 0x30 , 0x0030 },
{ 0x31 , 0x0031 },
{ 0x32 , 0x0032 },
{ 0x33 , 0x0033 },
{ 0x34 , 0x0034 },
{ 0x35 , 0x0035 },
{ 0x36 , 0x0036 },
{ 0x37 , 0x0037 },
{ 0x38 , 0x0038 },
{ 0x39 , 0x0039 },
{ 0x3a , 0x003A },
{ 0x3b , 0x003B },
{ 0x3c , 0x003C },
{ 0x3d , 0x003D },
{ 0x3e , 0x003E },
{ 0x3f , 0x003F },
{ 0x40 , 0x0040 },
{ 0x41 , 0x0041 },
{ 0x42 , 0x0042 },
{ 0x43 , 0x0043 },
{ 0x44 , 0x0044 },
{ 0x45 , 0x0045 },
{ 0x46 , 0x0046 },
{ 0x47 , 0x0047 },
{ 0x48 , 0x0048 },
{ 0x49 , 0x0049 },
{ 0x4a , 0x004A },
{ 0x4b , 0x004B },
{ 0x4c , 0x004C },
{ 0x4d , 0x004D },
{ 0x4e , 0x004E },
{ 0x4f , 0x004F },
{ 0x50 , 0x0050 },
{ 0x51 , 0x0051 },
{ 0x52 , 0x0052 },
{ 0x53 , 0x0053 },
{ 0x54 , 0x0054 },
{ 0x55 , 0x0055 },
{ 0x56 , 0x0056 },
{ 0x57 , 0x0057 },
{ 0x58 , 0x0058 },
{ 0x59 , 0x0059 },
{ 0x5a , 0x005A },
{ 0x5b , 0x005B },
{ 0x5c , 0x005C },
{ 0x5d , 0x005D },
{ 0x5e , 0x005E },
{ 0x5f , 0x005F },
{ 0x60 , 0x0060 },
{ 0x61 , 0x0061 },
{ 0x62 , 0x0062 },
{ 0x63 , 0x0063 },
{ 0x64 , 0x0064 },
{ 0x65 , 0x0065 },
{ 0x66 , 0x0066 },
{ 0x67 , 0x0067 },
{ 0x68 , 0x0068 },
{ 0x69 , 0x0069 },
{ 0x6a , 0x006A },
{ 0x6b , 0x006B },
{ 0x6c , 0x006C },
{ 0x6d , 0x006D },
{ 0x6e , 0x006E },
{ 0x6f , 0x006F },
{ 0x70 , 0x0070 },
{ 0x71 , 0x0071 },
{ 0x72 , 0x0072 },
{ 0x73 , 0x0073 },
{ 0x74 , 0x0074 },
{ 0x75 , 0x0075 },
{ 0x76 , 0x0076 },
{ 0x77 , 0x0077 },
{ 0x78 , 0x0078 },
{ 0x79 , 0x0079 },
{ 0x7a , 0x007A },
{ 0x7b , 0x007B },
{ 0x7c , 0x007C },
{ 0x7d , 0x007D },
{ 0x7e , 0x007E },
{ 0x7f , 0x007F },
{ 0x80 , 0x0080 },
{ 0x81 , 0x0081 },
{ 0x82 , 0x0082 },
{ 0x83 , 0x0083 },
{ 0x84 , 0x0084 },
{ 0x85 , 0x0085 },
{ 0x86 , 0x0086 },
{ 0x87 , 0x0087 },
{ 0x88 , 0x0088 },
{ 0x89 , 0x0089 },
{ 0x8a , 0x008A },
{ 0x8b , 0x008B },
{ 0x8c , 0x008C },
{ 0x8d , 0x008D },
{ 0x8e , 0x008E },
{ 0x8f , 0x008F },
{ 0x90 , 0x0090 },
{ 0x91 , 0x0091 },
{ 0x92 , 0x0092 },
{ 0x93 , 0x0093 },
{ 0x94 , 0x0094 },
{ 0x95 , 0x0095 },
{ 0x96 , 0x0096 },
{ 0x97 , 0x0097 },
{ 0x98 , 0x0098 },
{ 0x99 , 0x0099 },
{ 0x9a , 0x009A },
{ 0x9b , 0x009B },
{ 0x9c , 0x009C },
{ 0x9d , 0x009D },
{ 0x9e , 0x009E },
{ 0x9f , 0x009F },
{ 0xa0 , 0x00A0 },
{ 0xa1 , 0x2018 },
{ 0xa2 , 0x2019 },
{ 0xa3 , 0x00A3 },
{ 0xa6 , 0x00A6 },
{ 0xa7 , 0x00A7 },
{ 0xa8 , 0x00A8 },
{ 0xa9 , 0x00A9 },
{ 0xab , 0x00AB },
{ 0xac , 0x00AC },
{ 0xad , 0x00AD },
{ 0xaf , 0x2015 },
{ 0xb0 , 0x00B0 },
{ 0xb1 , 0x00B1 },
{ 0xb2 , 0x00B2 },
{ 0xb3 , 0x00B3 },
{ 0xb4 , 0x0384 },
{ 0xb5 , 0x0385 },
{ 0xb6 , 0x0386 },
{ 0xb7 , 0x00B7 },
{ 0xb8 , 0x0388 },
{ 0xb9 , 0x0389 },
{ 0xba , 0x038A },
{ 0xbb , 0x00BB },
{ 0xbc , 0x038C },
{ 0xbd , 0x00BD },
{ 0xbe , 0x038E },
{ 0xbf , 0x038F },
{ 0xc0 , 0x0390 },
{ 0xc1 , 0x0391 },
{ 0xc2 , 0x0392 },
{ 0xc3 , 0x0393 },
{ 0xc4 , 0x0394 },
{ 0xc5 , 0x0395 },
{ 0xc6 , 0x0396 },
{ 0xc7 , 0x0397 },
{ 0xc8 , 0x0398 },
{ 0xc9 , 0x0399 },
{ 0xca , 0x039A },
{ 0xcb , 0x039B },
{ 0xcc , 0x039C },
{ 0xcd , 0x039D },
{ 0xce , 0x039E },
{ 0xcf , 0x039F },
{ 0xd0 , 0x03A0 },
{ 0xd1 , 0x03A1 },
{ 0xd3 , 0x03A3 },
{ 0xd4 , 0x03A4 },
{ 0xd5 , 0x03A5 },
{ 0xd6 , 0x03A6 },
{ 0xd7 , 0x03A7 },
{ 0xd8 , 0x03A8 },
{ 0xd9 , 0x03A9 },
{ 0xda , 0x03AA },
{ 0xdb , 0x03AB },
{ 0xdc , 0x03AC },
{ 0xdd , 0x03AD },
{ 0xde , 0x03AE },
{ 0xdf , 0x03AF },
{ 0xe0 , 0x03B0 },
{ 0xe1 , 0x03B1 },
{ 0xe2 , 0x03B2 },
{ 0xe3 , 0x03B3 },
{ 0xe4 , 0x03B4 },
{ 0xe5 , 0x03B5 },
{ 0xe6 , 0x03B6 },
{ 0xe7 , 0x03B7 },
{ 0xe8 , 0x03B8 },
{ 0xe9 , 0x03B9 },
{ 0xea , 0x03BA },
{ 0xeb , 0x03BB },
{ 0xec , 0x03BC },
{ 0xed , 0x03BD },
{ 0xee , 0x03BE },
{ 0xef , 0x03BF },
{ 0xf0 , 0x03C0 },
{ 0xf1 , 0x03C1 },
{ 0xf2 , 0x03C2 },
{ 0xf3 , 0x03C3 },
{ 0xf4 , 0x03C4 },
{ 0xf5 , 0x03C5 },
{ 0xf6 , 0x03C6 },
{ 0xf7 , 0x03C7 },
{ 0xf8 , 0x03C8 },
{ 0xf9 , 0x03C9 },
{ 0xfa , 0x03CA },
{ 0xfb , 0x03CB },
{ 0xfc , 0x03CC },
{ 0xfd , 0x03CD },
{ 0xfe , 0x03CE },
+220
View File
@@ -0,0 +1,220 @@
{ 0x00 , 0x0000 },
{ 0x01 , 0x0001 },
{ 0x02 , 0x0002 },
{ 0x03 , 0x0003 },
{ 0x04 , 0x0004 },
{ 0x05 , 0x0005 },
{ 0x06 , 0x0006 },
{ 0x07 , 0x0007 },
{ 0x08 , 0x0008 },
{ 0x09 , 0x0009 },
{ 0x0a , 0x000A },
{ 0x0b , 0x000B },
{ 0x0c , 0x000C },
{ 0x0d , 0x000D },
{ 0x0e , 0x000E },
{ 0x0f , 0x000F },
{ 0x10 , 0x0010 },
{ 0x11 , 0x0011 },
{ 0x12 , 0x0012 },
{ 0x13 , 0x0013 },
{ 0x14 , 0x0014 },
{ 0x15 , 0x0015 },
{ 0x16 , 0x0016 },
{ 0x17 , 0x0017 },
{ 0x18 , 0x0018 },
{ 0x19 , 0x0019 },
{ 0x1a , 0x001A },
{ 0x1b , 0x001B },
{ 0x1c , 0x001C },
{ 0x1d , 0x001D },
{ 0x1e , 0x001E },
{ 0x1f , 0x001F },
{ 0x20 , 0x0020 },
{ 0x21 , 0x0021 },
{ 0x22 , 0x0022 },
{ 0x23 , 0x0023 },
{ 0x24 , 0x0024 },
{ 0x25 , 0x0025 },
{ 0x26 , 0x0026 },
{ 0x27 , 0x0027 },
{ 0x28 , 0x0028 },
{ 0x29 , 0x0029 },
{ 0x2a , 0x002A },
{ 0x2b , 0x002B },
{ 0x2c , 0x002C },
{ 0x2d , 0x002D },
{ 0x2e , 0x002E },
{ 0x2f , 0x002F },
{ 0x30 , 0x0030 },
{ 0x31 , 0x0031 },
{ 0x32 , 0x0032 },
{ 0x33 , 0x0033 },
{ 0x34 , 0x0034 },
{ 0x35 , 0x0035 },
{ 0x36 , 0x0036 },
{ 0x37 , 0x0037 },
{ 0x38 , 0x0038 },
{ 0x39 , 0x0039 },
{ 0x3a , 0x003A },
{ 0x3b , 0x003B },
{ 0x3c , 0x003C },
{ 0x3d , 0x003D },
{ 0x3e , 0x003E },
{ 0x3f , 0x003F },
{ 0x40 , 0x0040 },
{ 0x41 , 0x0041 },
{ 0x42 , 0x0042 },
{ 0x43 , 0x0043 },
{ 0x44 , 0x0044 },
{ 0x45 , 0x0045 },
{ 0x46 , 0x0046 },
{ 0x47 , 0x0047 },
{ 0x48 , 0x0048 },
{ 0x49 , 0x0049 },
{ 0x4a , 0x004A },
{ 0x4b , 0x004B },
{ 0x4c , 0x004C },
{ 0x4d , 0x004D },
{ 0x4e , 0x004E },
{ 0x4f , 0x004F },
{ 0x50 , 0x0050 },
{ 0x51 , 0x0051 },
{ 0x52 , 0x0052 },
{ 0x53 , 0x0053 },
{ 0x54 , 0x0054 },
{ 0x55 , 0x0055 },
{ 0x56 , 0x0056 },
{ 0x57 , 0x0057 },
{ 0x58 , 0x0058 },
{ 0x59 , 0x0059 },
{ 0x5a , 0x005A },
{ 0x5b , 0x005B },
{ 0x5c , 0x005C },
{ 0x5d , 0x005D },
{ 0x5e , 0x005E },
{ 0x5f , 0x005F },
{ 0x60 , 0x0060 },
{ 0x61 , 0x0061 },
{ 0x62 , 0x0062 },
{ 0x63 , 0x0063 },
{ 0x64 , 0x0064 },
{ 0x65 , 0x0065 },
{ 0x66 , 0x0066 },
{ 0x67 , 0x0067 },
{ 0x68 , 0x0068 },
{ 0x69 , 0x0069 },
{ 0x6a , 0x006A },
{ 0x6b , 0x006B },
{ 0x6c , 0x006C },
{ 0x6d , 0x006D },
{ 0x6e , 0x006E },
{ 0x6f , 0x006F },
{ 0x70 , 0x0070 },
{ 0x71 , 0x0071 },
{ 0x72 , 0x0072 },
{ 0x73 , 0x0073 },
{ 0x74 , 0x0074 },
{ 0x75 , 0x0075 },
{ 0x76 , 0x0076 },
{ 0x77 , 0x0077 },
{ 0x78 , 0x0078 },
{ 0x79 , 0x0079 },
{ 0x7a , 0x007A },
{ 0x7b , 0x007B },
{ 0x7c , 0x007C },
{ 0x7d , 0x007D },
{ 0x7e , 0x007E },
{ 0x7f , 0x007F },
{ 0x80 , 0x0080 },
{ 0x81 , 0x0081 },
{ 0x82 , 0x0082 },
{ 0x83 , 0x0083 },
{ 0x84 , 0x0084 },
{ 0x85 , 0x0085 },
{ 0x86 , 0x0086 },
{ 0x87 , 0x0087 },
{ 0x88 , 0x0088 },
{ 0x89 , 0x0089 },
{ 0x8a , 0x008A },
{ 0x8b , 0x008B },
{ 0x8c , 0x008C },
{ 0x8d , 0x008D },
{ 0x8e , 0x008E },
{ 0x8f , 0x008F },
{ 0x90 , 0x0090 },
{ 0x91 , 0x0091 },
{ 0x92 , 0x0092 },
{ 0x93 , 0x0093 },
{ 0x94 , 0x0094 },
{ 0x95 , 0x0095 },
{ 0x96 , 0x0096 },
{ 0x97 , 0x0097 },
{ 0x98 , 0x0098 },
{ 0x99 , 0x0099 },
{ 0x9a , 0x009A },
{ 0x9b , 0x009B },
{ 0x9c , 0x009C },
{ 0x9d , 0x009D },
{ 0x9e , 0x009E },
{ 0x9f , 0x009F },
{ 0xa0 , 0x00A0 },
{ 0xa2 , 0x00A2 },
{ 0xa3 , 0x00A3 },
{ 0xa4 , 0x00A4 },
{ 0xa5 , 0x00A5 },
{ 0xa6 , 0x00A6 },
{ 0xa7 , 0x00A7 },
{ 0xa8 , 0x00A8 },
{ 0xa9 , 0x00A9 },
{ 0xaa , 0x00D7 },
{ 0xab , 0x00AB },
{ 0xac , 0x00AC },
{ 0xad , 0x00AD },
{ 0xae , 0x00AE },
{ 0xaf , 0x00AF },
{ 0xb0 , 0x00B0 },
{ 0xb1 , 0x00B1 },
{ 0xb2 , 0x00B2 },
{ 0xb3 , 0x00B3 },
{ 0xb4 , 0x00B4 },
{ 0xb5 , 0x00B5 },
{ 0xb6 , 0x00B6 },
{ 0xb7 , 0x00B7 },
{ 0xb8 , 0x00B8 },
{ 0xb9 , 0x00B9 },
{ 0xba , 0x00F7 },
{ 0xbb , 0x00BB },
{ 0xbc , 0x00BC },
{ 0xbd , 0x00BD },
{ 0xbe , 0x00BE },
{ 0xdf , 0x2017 },
{ 0xe0 , 0x05D0 },
{ 0xe1 , 0x05D1 },
{ 0xe2 , 0x05D2 },
{ 0xe3 , 0x05D3 },
{ 0xe4 , 0x05D4 },
{ 0xe5 , 0x05D5 },
{ 0xe6 , 0x05D6 },
{ 0xe7 , 0x05D7 },
{ 0xe8 , 0x05D8 },
{ 0xe9 , 0x05D9 },
{ 0xea , 0x05DA },
{ 0xeb , 0x05DB },
{ 0xec , 0x05DC },
{ 0xed , 0x05DD },
{ 0xee , 0x05DE },
{ 0xef , 0x05DF },
{ 0xf0 , 0x05E0 },
{ 0xf1 , 0x05E1 },
{ 0xf2 , 0x05E2 },
{ 0xf3 , 0x05E3 },
{ 0xf4 , 0x05E4 },
{ 0xf5 , 0x05E5 },
{ 0xf6 , 0x05E6 },
{ 0xf7 , 0x05E7 },
{ 0xf8 , 0x05E8 },
{ 0xf9 , 0x05E9 },
{ 0xfa , 0x05EA },
{ 0xfd , 0x200E },
{ 0xfe , 0x200F },
+256
View File
@@ -0,0 +1,256 @@
{ 0x00 , 0x0000 },
{ 0x01 , 0x0001 },
{ 0x02 , 0x0002 },
{ 0x03 , 0x0003 },
{ 0x04 , 0x0004 },
{ 0x05 , 0x0005 },
{ 0x06 , 0x0006 },
{ 0x07 , 0x0007 },
{ 0x08 , 0x0008 },
{ 0x09 , 0x0009 },
{ 0x0a , 0x000A },
{ 0x0b , 0x000B },
{ 0x0c , 0x000C },
{ 0x0d , 0x000D },
{ 0x0e , 0x000E },
{ 0x0f , 0x000F },
{ 0x10 , 0x0010 },
{ 0x11 , 0x0011 },
{ 0x12 , 0x0012 },
{ 0x13 , 0x0013 },
{ 0x14 , 0x0014 },
{ 0x15 , 0x0015 },
{ 0x16 , 0x0016 },
{ 0x17 , 0x0017 },
{ 0x18 , 0x0018 },
{ 0x19 , 0x0019 },
{ 0x1a , 0x001A },
{ 0x1b , 0x001B },
{ 0x1c , 0x001C },
{ 0x1d , 0x001D },
{ 0x1e , 0x001E },
{ 0x1f , 0x001F },
{ 0x20 , 0x0020 },
{ 0x21 , 0x0021 },
{ 0x22 , 0x0022 },
{ 0x23 , 0x0023 },
{ 0x24 , 0x0024 },
{ 0x25 , 0x0025 },
{ 0x26 , 0x0026 },
{ 0x27 , 0x0027 },
{ 0x28 , 0x0028 },
{ 0x29 , 0x0029 },
{ 0x2a , 0x002A },
{ 0x2b , 0x002B },
{ 0x2c , 0x002C },
{ 0x2d , 0x002D },
{ 0x2e , 0x002E },
{ 0x2f , 0x002F },
{ 0x30 , 0x0030 },
{ 0x31 , 0x0031 },
{ 0x32 , 0x0032 },
{ 0x33 , 0x0033 },
{ 0x34 , 0x0034 },
{ 0x35 , 0x0035 },
{ 0x36 , 0x0036 },
{ 0x37 , 0x0037 },
{ 0x38 , 0x0038 },
{ 0x39 , 0x0039 },
{ 0x3a , 0x003A },
{ 0x3b , 0x003B },
{ 0x3c , 0x003C },
{ 0x3d , 0x003D },
{ 0x3e , 0x003E },
{ 0x3f , 0x003F },
{ 0x40 , 0x0040 },
{ 0x41 , 0x0041 },
{ 0x42 , 0x0042 },
{ 0x43 , 0x0043 },
{ 0x44 , 0x0044 },
{ 0x45 , 0x0045 },
{ 0x46 , 0x0046 },
{ 0x47 , 0x0047 },
{ 0x48 , 0x0048 },
{ 0x49 , 0x0049 },
{ 0x4a , 0x004A },
{ 0x4b , 0x004B },
{ 0x4c , 0x004C },
{ 0x4d , 0x004D },
{ 0x4e , 0x004E },
{ 0x4f , 0x004F },
{ 0x50 , 0x0050 },
{ 0x51 , 0x0051 },
{ 0x52 , 0x0052 },
{ 0x53 , 0x0053 },
{ 0x54 , 0x0054 },
{ 0x55 , 0x0055 },
{ 0x56 , 0x0056 },
{ 0x57 , 0x0057 },
{ 0x58 , 0x0058 },
{ 0x59 , 0x0059 },
{ 0x5a , 0x005A },
{ 0x5b , 0x005B },
{ 0x5c , 0x005C },
{ 0x5d , 0x005D },
{ 0x5e , 0x005E },
{ 0x5f , 0x005F },
{ 0x60 , 0x0060 },
{ 0x61 , 0x0061 },
{ 0x62 , 0x0062 },
{ 0x63 , 0x0063 },
{ 0x64 , 0x0064 },
{ 0x65 , 0x0065 },
{ 0x66 , 0x0066 },
{ 0x67 , 0x0067 },
{ 0x68 , 0x0068 },
{ 0x69 , 0x0069 },
{ 0x6a , 0x006A },
{ 0x6b , 0x006B },
{ 0x6c , 0x006C },
{ 0x6d , 0x006D },
{ 0x6e , 0x006E },
{ 0x6f , 0x006F },
{ 0x70 , 0x0070 },
{ 0x71 , 0x0071 },
{ 0x72 , 0x0072 },
{ 0x73 , 0x0073 },
{ 0x74 , 0x0074 },
{ 0x75 , 0x0075 },
{ 0x76 , 0x0076 },
{ 0x77 , 0x0077 },
{ 0x78 , 0x0078 },
{ 0x79 , 0x0079 },
{ 0x7a , 0x007A },
{ 0x7b , 0x007B },
{ 0x7c , 0x007C },
{ 0x7d , 0x007D },
{ 0x7e , 0x007E },
{ 0x7f , 0x007F },
{ 0x80 , 0x0080 },
{ 0x81 , 0x0081 },
{ 0x82 , 0x0082 },
{ 0x83 , 0x0083 },
{ 0x84 , 0x0084 },
{ 0x85 , 0x0085 },
{ 0x86 , 0x0086 },
{ 0x87 , 0x0087 },
{ 0x88 , 0x0088 },
{ 0x89 , 0x0089 },
{ 0x8a , 0x008A },
{ 0x8b , 0x008B },
{ 0x8c , 0x008C },
{ 0x8d , 0x008D },
{ 0x8e , 0x008E },
{ 0x8f , 0x008F },
{ 0x90 , 0x0090 },
{ 0x91 , 0x0091 },
{ 0x92 , 0x0092 },
{ 0x93 , 0x0093 },
{ 0x94 , 0x0094 },
{ 0x95 , 0x0095 },
{ 0x96 , 0x0096 },
{ 0x97 , 0x0097 },
{ 0x98 , 0x0098 },
{ 0x99 , 0x0099 },
{ 0x9a , 0x009A },
{ 0x9b , 0x009B },
{ 0x9c , 0x009C },
{ 0x9d , 0x009D },
{ 0x9e , 0x009E },
{ 0x9f , 0x009F },
{ 0xa0 , 0x00A0 },
{ 0xa1 , 0x00A1 },
{ 0xa2 , 0x00A2 },
{ 0xa3 , 0x00A3 },
{ 0xa4 , 0x00A4 },
{ 0xa5 , 0x00A5 },
{ 0xa6 , 0x00A6 },
{ 0xa7 , 0x00A7 },
{ 0xa8 , 0x00A8 },
{ 0xa9 , 0x00A9 },
{ 0xaa , 0x00AA },
{ 0xab , 0x00AB },
{ 0xac , 0x00AC },
{ 0xad , 0x00AD },
{ 0xae , 0x00AE },
{ 0xaf , 0x00AF },
{ 0xb0 , 0x00B0 },
{ 0xb1 , 0x00B1 },
{ 0xb2 , 0x00B2 },
{ 0xb3 , 0x00B3 },
{ 0xb4 , 0x00B4 },
{ 0xb5 , 0x00B5 },
{ 0xb6 , 0x00B6 },
{ 0xb7 , 0x00B7 },
{ 0xb8 , 0x00B8 },
{ 0xb9 , 0x00B9 },
{ 0xba , 0x00BA },
{ 0xbb , 0x00BB },
{ 0xbc , 0x00BC },
{ 0xbd , 0x00BD },
{ 0xbe , 0x00BE },
{ 0xbf , 0x00BF },
{ 0xc0 , 0x00C0 },
{ 0xc1 , 0x00C1 },
{ 0xc2 , 0x00C2 },
{ 0xc3 , 0x00C3 },
{ 0xc4 , 0x00C4 },
{ 0xc5 , 0x00C5 },
{ 0xc6 , 0x00C6 },
{ 0xc7 , 0x00C7 },
{ 0xc8 , 0x00C8 },
{ 0xc9 , 0x00C9 },
{ 0xca , 0x00CA },
{ 0xcb , 0x00CB },
{ 0xcc , 0x00CC },
{ 0xcd , 0x00CD },
{ 0xce , 0x00CE },
{ 0xcf , 0x00CF },
{ 0xd0 , 0x011E },
{ 0xd1 , 0x00D1 },
{ 0xd2 , 0x00D2 },
{ 0xd3 , 0x00D3 },
{ 0xd4 , 0x00D4 },
{ 0xd5 , 0x00D5 },
{ 0xd6 , 0x00D6 },
{ 0xd7 , 0x00D7 },
{ 0xd8 , 0x00D8 },
{ 0xd9 , 0x00D9 },
{ 0xda , 0x00DA },
{ 0xdb , 0x00DB },
{ 0xdc , 0x00DC },
{ 0xdd , 0x0130 },
{ 0xde , 0x015E },
{ 0xdf , 0x00DF },
{ 0xe0 , 0x00E0 },
{ 0xe1 , 0x00E1 },
{ 0xe2 , 0x00E2 },
{ 0xe3 , 0x00E3 },
{ 0xe4 , 0x00E4 },
{ 0xe5 , 0x00E5 },
{ 0xe6 , 0x00E6 },
{ 0xe7 , 0x00E7 },
{ 0xe8 , 0x00E8 },
{ 0xe9 , 0x00E9 },
{ 0xea , 0x00EA },
{ 0xeb , 0x00EB },
{ 0xec , 0x00EC },
{ 0xed , 0x00ED },
{ 0xee , 0x00EE },
{ 0xef , 0x00EF },
{ 0xf0 , 0x011F },
{ 0xf1 , 0x00F1 },
{ 0xf2 , 0x00F2 },
{ 0xf3 , 0x00F3 },
{ 0xf4 , 0x00F4 },
{ 0xf5 , 0x00F5 },
{ 0xf6 , 0x00F6 },
{ 0xf7 , 0x00F7 },
{ 0xf8 , 0x00F8 },
{ 0xf9 , 0x00F9 },
{ 0xfa , 0x00FA },
{ 0xfb , 0x00FB },
{ 0xfc , 0x00FC },
{ 0xfd , 0x0131 },
{ 0xfe , 0x015F },
{ 0xff , 0x00FF },
+256
View File
@@ -0,0 +1,256 @@
{ 0x00 , 0x0000 },
{ 0x01 , 0x0001 },
{ 0x02 , 0x0002 },
{ 0x03 , 0x0003 },
{ 0x04 , 0x0004 },
{ 0x05 , 0x0005 },
{ 0x06 , 0x0006 },
{ 0x07 , 0x0007 },
{ 0x08 , 0x0008 },
{ 0x09 , 0x0009 },
{ 0x0a , 0x000A },
{ 0x0b , 0x000B },
{ 0x0c , 0x000C },
{ 0x0d , 0x000D },
{ 0x0e , 0x000E },
{ 0x0f , 0x000F },
{ 0x10 , 0x0010 },
{ 0x11 , 0x0011 },
{ 0x12 , 0x0012 },
{ 0x13 , 0x0013 },
{ 0x14 , 0x0014 },
{ 0x15 , 0x0015 },
{ 0x16 , 0x0016 },
{ 0x17 , 0x0017 },
{ 0x18 , 0x0018 },
{ 0x19 , 0x0019 },
{ 0x1a , 0x001A },
{ 0x1b , 0x001B },
{ 0x1c , 0x001C },
{ 0x1d , 0x001D },
{ 0x1e , 0x001E },
{ 0x1f , 0x001F },
{ 0x20 , 0x0020 },
{ 0x21 , 0x0021 },
{ 0x22 , 0x0022 },
{ 0x23 , 0x0023 },
{ 0x24 , 0x0024 },
{ 0x25 , 0x0025 },
{ 0x26 , 0x0026 },
{ 0x27 , 0x0027 },
{ 0x28 , 0x0028 },
{ 0x29 , 0x0029 },
{ 0x2a , 0x002A },
{ 0x2b , 0x002B },
{ 0x2c , 0x002C },
{ 0x2d , 0x002D },
{ 0x2e , 0x002E },
{ 0x2f , 0x002F },
{ 0x30 , 0x0030 },
{ 0x31 , 0x0031 },
{ 0x32 , 0x0032 },
{ 0x33 , 0x0033 },
{ 0x34 , 0x0034 },
{ 0x35 , 0x0035 },
{ 0x36 , 0x0036 },
{ 0x37 , 0x0037 },
{ 0x38 , 0x0038 },
{ 0x39 , 0x0039 },
{ 0x3a , 0x003A },
{ 0x3b , 0x003B },
{ 0x3c , 0x003C },
{ 0x3d , 0x003D },
{ 0x3e , 0x003E },
{ 0x3f , 0x003F },
{ 0x40 , 0x0040 },
{ 0x41 , 0x0041 },
{ 0x42 , 0x0042 },
{ 0x43 , 0x0043 },
{ 0x44 , 0x0044 },
{ 0x45 , 0x0045 },
{ 0x46 , 0x0046 },
{ 0x47 , 0x0047 },
{ 0x48 , 0x0048 },
{ 0x49 , 0x0049 },
{ 0x4a , 0x004A },
{ 0x4b , 0x004B },
{ 0x4c , 0x004C },
{ 0x4d , 0x004D },
{ 0x4e , 0x004E },
{ 0x4f , 0x004F },
{ 0x50 , 0x0050 },
{ 0x51 , 0x0051 },
{ 0x52 , 0x0052 },
{ 0x53 , 0x0053 },
{ 0x54 , 0x0054 },
{ 0x55 , 0x0055 },
{ 0x56 , 0x0056 },
{ 0x57 , 0x0057 },
{ 0x58 , 0x0058 },
{ 0x59 , 0x0059 },
{ 0x5a , 0x005A },
{ 0x5b , 0x005B },
{ 0x5c , 0x005C },
{ 0x5d , 0x005D },
{ 0x5e , 0x005E },
{ 0x5f , 0x005F },
{ 0x60 , 0x0060 },
{ 0x61 , 0x0061 },
{ 0x62 , 0x0062 },
{ 0x63 , 0x0063 },
{ 0x64 , 0x0064 },
{ 0x65 , 0x0065 },
{ 0x66 , 0x0066 },
{ 0x67 , 0x0067 },
{ 0x68 , 0x0068 },
{ 0x69 , 0x0069 },
{ 0x6a , 0x006A },
{ 0x6b , 0x006B },
{ 0x6c , 0x006C },
{ 0x6d , 0x006D },
{ 0x6e , 0x006E },
{ 0x6f , 0x006F },
{ 0x70 , 0x0070 },
{ 0x71 , 0x0071 },
{ 0x72 , 0x0072 },
{ 0x73 , 0x0073 },
{ 0x74 , 0x0074 },
{ 0x75 , 0x0075 },
{ 0x76 , 0x0076 },
{ 0x77 , 0x0077 },
{ 0x78 , 0x0078 },
{ 0x79 , 0x0079 },
{ 0x7a , 0x007A },
{ 0x7b , 0x007B },
{ 0x7c , 0x007C },
{ 0x7d , 0x007D },
{ 0x7e , 0x007E },
{ 0x7f , 0x007F },
{ 0x80 , 0x2500 },
{ 0x81 , 0x2502 },
{ 0x82 , 0x250C },
{ 0x83 , 0x2510 },
{ 0x84 , 0x2514 },
{ 0x85 , 0x2518 },
{ 0x86 , 0x251C },
{ 0x87 , 0x2524 },
{ 0x88 , 0x252C },
{ 0x89 , 0x2534 },
{ 0x8a , 0x253C },
{ 0x8b , 0x2580 },
{ 0x8c , 0x2584 },
{ 0x8d , 0x2588 },
{ 0x8e , 0x258C },
{ 0x8f , 0x2590 },
{ 0x90 , 0x2591 },
{ 0x91 , 0x2592 },
{ 0x92 , 0x2593 },
{ 0x93 , 0x2320 },
{ 0x94 , 0x25A0 },
{ 0x95 , 0x2219 },
{ 0x96 , 0x221A },
{ 0x97 , 0x2248 },
{ 0x98 , 0x2264 },
{ 0x99 , 0x2265 },
{ 0x9a , 0x00A0 },
{ 0x9b , 0x2321 },
{ 0x9c , 0x00B0 },
{ 0x9d , 0x00B2 },
{ 0x9e , 0x00B7 },
{ 0x9f , 0x00F7 },
{ 0xa0 , 0x2550 },
{ 0xa1 , 0x2551 },
{ 0xa2 , 0x2552 },
{ 0xa3 , 0x0451 },
{ 0xa4 , 0x2553 },
{ 0xa5 , 0x2554 },
{ 0xa6 , 0x2555 },
{ 0xa7 , 0x2556 },
{ 0xa8 , 0x2557 },
{ 0xa9 , 0x2558 },
{ 0xaa , 0x2559 },
{ 0xab , 0x255A },
{ 0xac , 0x255B },
{ 0xad , 0x255C },
{ 0xae , 0x255D },
{ 0xaf , 0x255E },
{ 0xb0 , 0x255F },
{ 0xb1 , 0x2560 },
{ 0xb2 , 0x2561 },
{ 0xb3 , 0x0401 },
{ 0xb4 , 0x2562 },
{ 0xb5 , 0x2563 },
{ 0xb6 , 0x2564 },
{ 0xb7 , 0x2565 },
{ 0xb8 , 0x2566 },
{ 0xb9 , 0x2567 },
{ 0xba , 0x2568 },
{ 0xbb , 0x2569 },
{ 0xbc , 0x256A },
{ 0xbd , 0x256B },
{ 0xbe , 0x256C },
{ 0xbf , 0x00A9 },
{ 0xc0 , 0x044E },
{ 0xc1 , 0x0430 },
{ 0xc2 , 0x0431 },
{ 0xc3 , 0x0446 },
{ 0xc4 , 0x0434 },
{ 0xc5 , 0x0435 },
{ 0xc6 , 0x0444 },
{ 0xc7 , 0x0433 },
{ 0xc8 , 0x0445 },
{ 0xc9 , 0x0438 },
{ 0xca , 0x0439 },
{ 0xcb , 0x043A },
{ 0xcc , 0x043B },
{ 0xcd , 0x043C },
{ 0xce , 0x043D },
{ 0xcf , 0x043E },
{ 0xd0 , 0x043F },
{ 0xd1 , 0x044F },
{ 0xd2 , 0x0440 },
{ 0xd3 , 0x0441 },
{ 0xd4 , 0x0442 },
{ 0xd5 , 0x0443 },
{ 0xd6 , 0x0436 },
{ 0xd7 , 0x0432 },
{ 0xd8 , 0x044C },
{ 0xd9 , 0x044B },
{ 0xda , 0x0437 },
{ 0xdb , 0x0448 },
{ 0xdc , 0x044D },
{ 0xdd , 0x0449 },
{ 0xde , 0x0447 },
{ 0xdf , 0x044A },
{ 0xe0 , 0x042E },
{ 0xe1 , 0x0410 },
{ 0xe2 , 0x0411 },
{ 0xe3 , 0x0426 },
{ 0xe4 , 0x0414 },
{ 0xe5 , 0x0415 },
{ 0xe6 , 0x0424 },
{ 0xe7 , 0x0413 },
{ 0xe8 , 0x0425 },
{ 0xe9 , 0x0418 },
{ 0xea , 0x0419 },
{ 0xeb , 0x041A },
{ 0xec , 0x041B },
{ 0xed , 0x041C },
{ 0xee , 0x041D },
{ 0xef , 0x041E },
{ 0xf0 , 0x041F },
{ 0xf1 , 0x042F },
{ 0xf2 , 0x0420 },
{ 0xf3 , 0x0421 },
{ 0xf4 , 0x0422 },
{ 0xf5 , 0x0423 },
{ 0xf6 , 0x0416 },
{ 0xf7 , 0x0412 },
{ 0xf8 , 0x042C },
{ 0xf9 , 0x042B },
{ 0xfa , 0x0417 },
{ 0xfb , 0x0428 },
{ 0xfc , 0x042D },
{ 0xfd , 0x0429 },
{ 0xfe , 0x0427 },
{ 0xff , 0x042A },
+237
View File
@@ -0,0 +1,237 @@
{ 0x00 , 0x0000 },
{ 0x01 , 0x0001 },
{ 0x02 , 0x0002 },
{ 0x03 , 0x0003 },
{ 0x04 , 0x0004 },
{ 0x05 , 0x0005 },
{ 0x06 , 0x0006 },
{ 0x07 , 0x0007 },
{ 0x08 , 0x0008 },
{ 0x09 , 0x0009 },
{ 0x0a , 0x000A },
{ 0x0b , 0x000B },
{ 0x0c , 0x000C },
{ 0x0d , 0x000D },
{ 0x0e , 0x000E },
{ 0x0f , 0x000F },
{ 0x10 , 0x0010 },
{ 0x11 , 0x0011 },
{ 0x12 , 0x0012 },
{ 0x13 , 0x0013 },
{ 0x14 , 0x0014 },
{ 0x15 , 0x0015 },
{ 0x16 , 0x0016 },
{ 0x17 , 0x0017 },
{ 0x18 , 0x0018 },
{ 0x19 , 0x0019 },
{ 0x1a , 0x001A },
{ 0x1b , 0x001B },
{ 0x1c , 0x001C },
{ 0x1d , 0x001D },
{ 0x1e , 0x001E },
{ 0x1f , 0x001F },
{ 0x20 , 0x0020 },
{ 0x21 , 0x0021 },
{ 0x22 , 0x0022 },
{ 0x23 , 0x0023 },
{ 0x24 , 0x0024 },
{ 0x25 , 0x0025 },
{ 0x26 , 0x0026 },
{ 0x27 , 0x0027 },
{ 0x28 , 0x0028 },
{ 0x29 , 0x0029 },
{ 0x2a , 0x002A },
{ 0x2b , 0x002B },
{ 0x2c , 0x002C },
{ 0x2d , 0x002D },
{ 0x2e , 0x002E },
{ 0x2f , 0x002F },
{ 0x30 , 0x0030 },
{ 0x31 , 0x0031 },
{ 0x32 , 0x0032 },
{ 0x33 , 0x0033 },
{ 0x34 , 0x0034 },
{ 0x35 , 0x0035 },
{ 0x36 , 0x0036 },
{ 0x37 , 0x0037 },
{ 0x38 , 0x0038 },
{ 0x39 , 0x0039 },
{ 0x3a , 0x003A },
{ 0x3b , 0x003B },
{ 0x3c , 0x003C },
{ 0x3d , 0x003D },
{ 0x3e , 0x003E },
{ 0x3f , 0x003F },
{ 0x40 , 0x0040 },
{ 0x41 , 0x0041 },
{ 0x42 , 0x0042 },
{ 0x43 , 0x0043 },
{ 0x44 , 0x0044 },
{ 0x45 , 0x0045 },
{ 0x46 , 0x0046 },
{ 0x47 , 0x0047 },
{ 0x48 , 0x0048 },
{ 0x49 , 0x0049 },
{ 0x4a , 0x004A },
{ 0x4b , 0x004B },
{ 0x4c , 0x004C },
{ 0x4d , 0x004D },
{ 0x4e , 0x004E },
{ 0x4f , 0x004F },
{ 0x50 , 0x0050 },
{ 0x51 , 0x0051 },
{ 0x52 , 0x0052 },
{ 0x53 , 0x0053 },
{ 0x54 , 0x0054 },
{ 0x55 , 0x0055 },
{ 0x56 , 0x0056 },
{ 0x57 , 0x0057 },
{ 0x58 , 0x0058 },
{ 0x59 , 0x0059 },
{ 0x5a , 0x005A },
{ 0x5b , 0x005B },
{ 0x5c , 0x005C },
{ 0x5d , 0x005D },
{ 0x5e , 0x005E },
{ 0x5f , 0x005F },
{ 0x60 , 0x0060 },
{ 0x61 , 0x0061 },
{ 0x62 , 0x0062 },
{ 0x63 , 0x0063 },
{ 0x64 , 0x0064 },
{ 0x65 , 0x0065 },
{ 0x66 , 0x0066 },
{ 0x67 , 0x0067 },
{ 0x68 , 0x0068 },
{ 0x69 , 0x0069 },
{ 0x6a , 0x006A },
{ 0x6b , 0x006B },
{ 0x6c , 0x006C },
{ 0x6d , 0x006D },
{ 0x6e , 0x006E },
{ 0x6f , 0x006F },
{ 0x70 , 0x0070 },
{ 0x71 , 0x0071 },
{ 0x72 , 0x0072 },
{ 0x73 , 0x0073 },
{ 0x74 , 0x0074 },
{ 0x75 , 0x0075 },
{ 0x76 , 0x0076 },
{ 0x77 , 0x0077 },
{ 0x78 , 0x0078 },
{ 0x79 , 0x0079 },
{ 0x7a , 0x007A },
{ 0x7b , 0x007B },
{ 0x7c , 0x007C },
{ 0x7d , 0x007D },
{ 0x7e , 0x007E },
{ 0x7f , 0x007F },
{ 0x80 , 0x049B },
{ 0x81 , 0x0493 },
{ 0x82 , 0x201A },
{ 0x83 , 0x0492 },
{ 0x84 , 0x201E },
{ 0x85 , 0x2026 },
{ 0x86 , 0x2020 },
{ 0x87 , 0x2021 },
{ 0x89 , 0x2030 },
{ 0x8a , 0x04B3 },
{ 0x8b , 0x2039 },
{ 0x8c , 0x04B2 },
{ 0x8d , 0x04B7 },
{ 0x8e , 0x04B6 },
{ 0x90 , 0x049A },
{ 0x91 , 0x2018 },
{ 0x92 , 0x2019 },
{ 0x93 , 0x201C },
{ 0x94 , 0x201D },
{ 0x95 , 0x2022 },
{ 0x96 , 0x2013 },
{ 0x97 , 0x2014 },
{ 0x99 , 0x2122 },
{ 0x9b , 0x203A },
{ 0xa1 , 0x04EF },
{ 0xa2 , 0x04EE },
{ 0xa3 , 0x0451 },
{ 0xa4 , 0x00A4 },
{ 0xa5 , 0x04E3 },
{ 0xa6 , 0x00A6 },
{ 0xa7 , 0x00A7 },
{ 0xab , 0x00AB },
{ 0xac , 0x00AC },
{ 0xad , 0x00AD },
{ 0xae , 0x00AE },
{ 0xb0 , 0x00B0 },
{ 0xb1 , 0x00B1 },
{ 0xb2 , 0x00B2 },
{ 0xb3 , 0x0401 },
{ 0xb5 , 0x04E2 },
{ 0xb6 , 0x00B6 },
{ 0xb7 , 0x00B7 },
{ 0xb9 , 0x2116 },
{ 0xbb , 0x00BB },
{ 0xbf , 0x00A9 },
{ 0xc0 , 0x044E },
{ 0xc1 , 0x0430 },
{ 0xc2 , 0x0431 },
{ 0xc3 , 0x0446 },
{ 0xc4 , 0x0434 },
{ 0xc5 , 0x0435 },
{ 0xc6 , 0x0444 },
{ 0xc7 , 0x0433 },
{ 0xc8 , 0x0445 },
{ 0xc9 , 0x0438 },
{ 0xca , 0x0439 },
{ 0xcb , 0x043A },
{ 0xcc , 0x043B },
{ 0xcd , 0x043C },
{ 0xce , 0x043D },
{ 0xcf , 0x043E },
{ 0xd0 , 0x043F },
{ 0xd1 , 0x044F },
{ 0xd2 , 0x0440 },
{ 0xd3 , 0x0441 },
{ 0xd4 , 0x0442 },
{ 0xd5 , 0x0443 },
{ 0xd6 , 0x0436 },
{ 0xd7 , 0x0432 },
{ 0xd8 , 0x044C },
{ 0xd9 , 0x044B },
{ 0xda , 0x0437 },
{ 0xdb , 0x0448 },
{ 0xdc , 0x044D },
{ 0xdd , 0x0449 },
{ 0xde , 0x0447 },
{ 0xdf , 0x044A },
{ 0xe0 , 0x042E },
{ 0xe1 , 0x0410 },
{ 0xe2 , 0x0411 },
{ 0xe3 , 0x0426 },
{ 0xe4 , 0x0414 },
{ 0xe5 , 0x0415 },
{ 0xe6 , 0x0424 },
{ 0xe7 , 0x0413 },
{ 0xe8 , 0x0425 },
{ 0xe9 , 0x0418 },
{ 0xea , 0x0419 },
{ 0xeb , 0x041A },
{ 0xec , 0x041B },
{ 0xed , 0x041C },
{ 0xee , 0x041D },
{ 0xef , 0x041E },
{ 0xf0 , 0x041F },
{ 0xf1 , 0x042F },
{ 0xf2 , 0x0420 },
{ 0xf3 , 0x0421 },
{ 0xf4 , 0x0422 },
{ 0xf5 , 0x0423 },
{ 0xf6 , 0x0416 },
{ 0xf7 , 0x0412 },
{ 0xf8 , 0x042C },
{ 0xf9 , 0x042B },
{ 0xfa , 0x0417 },
{ 0xfb , 0x0428 },
{ 0xfc , 0x042D },
{ 0xfd , 0x0429 },
{ 0xfe , 0x0427 },
{ 0xff , 0x042A },
+256
View File
@@ -0,0 +1,256 @@
{ 0x00 , 0x0000 },
{ 0x01 , 0x0001 },
{ 0x02 , 0x0002 },
{ 0x03 , 0x0003 },
{ 0x04 , 0x0004 },
{ 0x05 , 0x0005 },
{ 0x06 , 0x0006 },
{ 0x07 , 0x0007 },
{ 0x08 , 0x0008 },
{ 0x09 , 0x0009 },
{ 0x0a , 0x000A },
{ 0x0b , 0x000B },
{ 0x0c , 0x000C },
{ 0x0d , 0x000D },
{ 0x0e , 0x000E },
{ 0x0f , 0x000F },
{ 0x10 , 0x0010 },
{ 0x11 , 0x0011 },
{ 0x12 , 0x0012 },
{ 0x13 , 0x0013 },
{ 0x14 , 0x0014 },
{ 0x15 , 0x0015 },
{ 0x16 , 0x0016 },
{ 0x17 , 0x0017 },
{ 0x18 , 0x0018 },
{ 0x19 , 0x0019 },
{ 0x1a , 0x001A },
{ 0x1b , 0x001B },
{ 0x1c , 0x001C },
{ 0x1d , 0x001D },
{ 0x1e , 0x001E },
{ 0x1f , 0x001F },
{ 0x20 , 0x0020 },
{ 0x21 , 0x0021 },
{ 0x22 , 0x0022 },
{ 0x23 , 0x0023 },
{ 0x24 , 0x0024 },
{ 0x25 , 0x0025 },
{ 0x26 , 0x0026 },
{ 0x27 , 0x0027 },
{ 0x28 , 0x0028 },
{ 0x29 , 0x0029 },
{ 0x2a , 0x002A },
{ 0x2b , 0x002B },
{ 0x2c , 0x002C },
{ 0x2d , 0x002D },
{ 0x2e , 0x002E },
{ 0x2f , 0x002F },
{ 0x30 , 0x0030 },
{ 0x31 , 0x0031 },
{ 0x32 , 0x0032 },
{ 0x33 , 0x0033 },
{ 0x34 , 0x0034 },
{ 0x35 , 0x0035 },
{ 0x36 , 0x0036 },
{ 0x37 , 0x0037 },
{ 0x38 , 0x0038 },
{ 0x39 , 0x0039 },
{ 0x3a , 0x003A },
{ 0x3b , 0x003B },
{ 0x3c , 0x003C },
{ 0x3d , 0x003D },
{ 0x3e , 0x003E },
{ 0x3f , 0x003F },
{ 0x40 , 0x0040 },
{ 0x41 , 0x0041 },
{ 0x42 , 0x0042 },
{ 0x43 , 0x0043 },
{ 0x44 , 0x0044 },
{ 0x45 , 0x0045 },
{ 0x46 , 0x0046 },
{ 0x47 , 0x0047 },
{ 0x48 , 0x0048 },
{ 0x49 , 0x0049 },
{ 0x4a , 0x004A },
{ 0x4b , 0x004B },
{ 0x4c , 0x004C },
{ 0x4d , 0x004D },
{ 0x4e , 0x004E },
{ 0x4f , 0x004F },
{ 0x50 , 0x0050 },
{ 0x51 , 0x0051 },
{ 0x52 , 0x0052 },
{ 0x53 , 0x0053 },
{ 0x54 , 0x0054 },
{ 0x55 , 0x0055 },
{ 0x56 , 0x0056 },
{ 0x57 , 0x0057 },
{ 0x58 , 0x0058 },
{ 0x59 , 0x0059 },
{ 0x5a , 0x005A },
{ 0x5b , 0x005B },
{ 0x5c , 0x005C },
{ 0x5d , 0x005D },
{ 0x5e , 0x005E },
{ 0x5f , 0x005F },
{ 0x60 , 0x0060 },
{ 0x61 , 0x0061 },
{ 0x62 , 0x0062 },
{ 0x63 , 0x0063 },
{ 0x64 , 0x0064 },
{ 0x65 , 0x0065 },
{ 0x66 , 0x0066 },
{ 0x67 , 0x0067 },
{ 0x68 , 0x0068 },
{ 0x69 , 0x0069 },
{ 0x6a , 0x006A },
{ 0x6b , 0x006B },
{ 0x6c , 0x006C },
{ 0x6d , 0x006D },
{ 0x6e , 0x006E },
{ 0x6f , 0x006F },
{ 0x70 , 0x0070 },
{ 0x71 , 0x0071 },
{ 0x72 , 0x0072 },
{ 0x73 , 0x0073 },
{ 0x74 , 0x0074 },
{ 0x75 , 0x0075 },
{ 0x76 , 0x0076 },
{ 0x77 , 0x0077 },
{ 0x78 , 0x0078 },
{ 0x79 , 0x0079 },
{ 0x7a , 0x007A },
{ 0x7b , 0x007B },
{ 0x7c , 0x007C },
{ 0x7d , 0x007D },
{ 0x7e , 0x007E },
{ 0x7f , 0x007F },
{ 0x80 , 0x2500 },
{ 0x81 , 0x2502 },
{ 0x82 , 0x250C },
{ 0x83 , 0x2510 },
{ 0x84 , 0x2514 },
{ 0x85 , 0x2518 },
{ 0x86 , 0x251C },
{ 0x87 , 0x2524 },
{ 0x88 , 0x252C },
{ 0x89 , 0x2534 },
{ 0x8a , 0x253C },
{ 0x8b , 0x2580 },
{ 0x8c , 0x2584 },
{ 0x8d , 0x2588 },
{ 0x8e , 0x258C },
{ 0x8f , 0x2590 },
{ 0x90 , 0x2591 },
{ 0x91 , 0x2592 },
{ 0x92 , 0x2593 },
{ 0x93 , 0x2320 },
{ 0x94 , 0x25A0 },
{ 0x95 , 0x2219 },
{ 0x96 , 0x221A },
{ 0x97 , 0x2248 },
{ 0x98 , 0x2264 },
{ 0x99 , 0x2265 },
{ 0x9a , 0x00A0 },
{ 0x9b , 0x2321 },
{ 0x9c , 0x00B0 },
{ 0x9d , 0x00B2 },
{ 0x9e , 0x00B7 },
{ 0x9f , 0x00F7 },
{ 0xa0 , 0x2550 },
{ 0xa1 , 0x2551 },
{ 0xa2 , 0x2552 },
{ 0xa3 , 0x0451 },
{ 0xa4 , 0x0454 },
{ 0xa5 , 0x2554 },
{ 0xa6 , 0x0456 },
{ 0xa7 , 0x0457 },
{ 0xa8 , 0x2557 },
{ 0xa9 , 0x2558 },
{ 0xaa , 0x2559 },
{ 0xab , 0x255A },
{ 0xac , 0x255B },
{ 0xad , 0x0491 },
{ 0xae , 0x255D },
{ 0xaf , 0x255E },
{ 0xb0 , 0x255F },
{ 0xb1 , 0x2560 },
{ 0xb2 , 0x2561 },
{ 0xb3 , 0x0401 },
{ 0xb4 , 0x0404 },
{ 0xb5 , 0x2563 },
{ 0xb6 , 0x0406 },
{ 0xb7 , 0x0407 },
{ 0xb8 , 0x2566 },
{ 0xb9 , 0x2567 },
{ 0xba , 0x2568 },
{ 0xbb , 0x2569 },
{ 0xbc , 0x256A },
{ 0xbd , 0x0490 },
{ 0xbe , 0x256C },
{ 0xbf , 0x00A9 },
{ 0xc0 , 0x044E },
{ 0xc1 , 0x0430 },
{ 0xc2 , 0x0431 },
{ 0xc3 , 0x0446 },
{ 0xc4 , 0x0434 },
{ 0xc5 , 0x0435 },
{ 0xc6 , 0x0444 },
{ 0xc7 , 0x0433 },
{ 0xc8 , 0x0445 },
{ 0xc9 , 0x0438 },
{ 0xca , 0x0439 },
{ 0xcb , 0x043A },
{ 0xcc , 0x043B },
{ 0xcd , 0x043C },
{ 0xce , 0x043D },
{ 0xcf , 0x043E },
{ 0xd0 , 0x043F },
{ 0xd1 , 0x044F },
{ 0xd2 , 0x0440 },
{ 0xd3 , 0x0441 },
{ 0xd4 , 0x0442 },
{ 0xd5 , 0x0443 },
{ 0xd6 , 0x0436 },
{ 0xd7 , 0x0432 },
{ 0xd8 , 0x044C },
{ 0xd9 , 0x044B },
{ 0xda , 0x0437 },
{ 0xdb , 0x0448 },
{ 0xdc , 0x044D },
{ 0xdd , 0x0449 },
{ 0xde , 0x0447 },
{ 0xdf , 0x044A },
{ 0xe0 , 0x042E },
{ 0xe1 , 0x0410 },
{ 0xe2 , 0x0411 },
{ 0xe3 , 0x0426 },
{ 0xe4 , 0x0414 },
{ 0xe5 , 0x0415 },
{ 0xe6 , 0x0424 },
{ 0xe7 , 0x0413 },
{ 0xe8 , 0x0425 },
{ 0xe9 , 0x0418 },
{ 0xea , 0x0419 },
{ 0xeb , 0x041A },
{ 0xec , 0x041B },
{ 0xed , 0x041C },
{ 0xee , 0x041D },
{ 0xef , 0x041E },
{ 0xf0 , 0x041F },
{ 0xf1 , 0x042F },
{ 0xf2 , 0x0420 },
{ 0xf3 , 0x0421 },
{ 0xf4 , 0x0422 },
{ 0xf5 , 0x0423 },
{ 0xf6 , 0x0416 },
{ 0xf7 , 0x0412 },
{ 0xf8 , 0x042C },
{ 0xf9 , 0x042B },
{ 0xfa , 0x0417 },
{ 0xfb , 0x0428 },
{ 0xfc , 0x042D },
{ 0xfd , 0x0429 },
{ 0xfe , 0x0427 },
{ 0xff , 0x042A },
+215
View File
@@ -0,0 +1,215 @@
{ 0x00 , 0x0000 },
{ 0x01 , 0x0001 },
{ 0x02 , 0x0002 },
{ 0x03 , 0x0003 },
{ 0x04 , 0x0004 },
{ 0x05 , 0x0005 },
{ 0x06 , 0x0006 },
{ 0x07 , 0x0007 },
{ 0x08 , 0x0008 },
{ 0x09 , 0x0009 },
{ 0x0a , 0x000A },
{ 0x0b , 0x000B },
{ 0x0c , 0x000C },
{ 0x0d , 0x000D },
{ 0x0e , 0x000E },
{ 0x0f , 0x000F },
{ 0x10 , 0x0010 },
{ 0x11 , 0x0011 },
{ 0x12 , 0x0012 },
{ 0x13 , 0x0013 },
{ 0x14 , 0x0014 },
{ 0x15 , 0x0015 },
{ 0x16 , 0x0016 },
{ 0x17 , 0x0017 },
{ 0x18 , 0x0018 },
{ 0x19 , 0x0019 },
{ 0x1a , 0x001A },
{ 0x1b , 0x001B },
{ 0x1c , 0x001C },
{ 0x1d , 0x001D },
{ 0x1e , 0x001E },
{ 0x1f , 0x001F },
{ 0x20 , 0x0020 },
{ 0x21 , 0x0021 },
{ 0x22 , 0x0022 },
{ 0x23 , 0x0023 },
{ 0x24 , 0x0024 },
{ 0x25 , 0x0025 },
{ 0x26 , 0x0026 },
{ 0x27 , 0x0027 },
{ 0x28 , 0x0028 },
{ 0x29 , 0x0029 },
{ 0x2a , 0x002A },
{ 0x2b , 0x002B },
{ 0x2c , 0x002C },
{ 0x2d , 0x002D },
{ 0x2e , 0x002E },
{ 0x2f , 0x002F },
{ 0x30 , 0x0030 },
{ 0x31 , 0x0031 },
{ 0x32 , 0x0032 },
{ 0x33 , 0x0033 },
{ 0x34 , 0x0034 },
{ 0x35 , 0x0035 },
{ 0x36 , 0x0036 },
{ 0x37 , 0x0037 },
{ 0x38 , 0x0038 },
{ 0x39 , 0x0039 },
{ 0x3a , 0x003A },
{ 0x3b , 0x003B },
{ 0x3c , 0x003C },
{ 0x3d , 0x003D },
{ 0x3e , 0x003E },
{ 0x3f , 0x003F },
{ 0x40 , 0x0040 },
{ 0x41 , 0x0041 },
{ 0x42 , 0x0042 },
{ 0x43 , 0x0043 },
{ 0x44 , 0x0044 },
{ 0x45 , 0x0045 },
{ 0x46 , 0x0046 },
{ 0x47 , 0x0047 },
{ 0x48 , 0x0048 },
{ 0x49 , 0x0049 },
{ 0x4a , 0x004A },
{ 0x4b , 0x004B },
{ 0x4c , 0x004C },
{ 0x4d , 0x004D },
{ 0x4e , 0x004E },
{ 0x4f , 0x004F },
{ 0x50 , 0x0050 },
{ 0x51 , 0x0051 },
{ 0x52 , 0x0052 },
{ 0x53 , 0x0053 },
{ 0x54 , 0x0054 },
{ 0x55 , 0x0055 },
{ 0x56 , 0x0056 },
{ 0x57 , 0x0057 },
{ 0x58 , 0x0058 },
{ 0x59 , 0x0059 },
{ 0x5a , 0x005A },
{ 0x5b , 0x005B },
{ 0x5c , 0x005C },
{ 0x5d , 0x005D },
{ 0x5e , 0x005E },
{ 0x5f , 0x005F },
{ 0x60 , 0x0060 },
{ 0x61 , 0x0061 },
{ 0x62 , 0x0062 },
{ 0x63 , 0x0063 },
{ 0x64 , 0x0064 },
{ 0x65 , 0x0065 },
{ 0x66 , 0x0066 },
{ 0x67 , 0x0067 },
{ 0x68 , 0x0068 },
{ 0x69 , 0x0069 },
{ 0x6a , 0x006A },
{ 0x6b , 0x006B },
{ 0x6c , 0x006C },
{ 0x6d , 0x006D },
{ 0x6e , 0x006E },
{ 0x6f , 0x006F },
{ 0x70 , 0x0070 },
{ 0x71 , 0x0071 },
{ 0x72 , 0x0072 },
{ 0x73 , 0x0073 },
{ 0x74 , 0x0074 },
{ 0x75 , 0x0075 },
{ 0x76 , 0x0076 },
{ 0x77 , 0x0077 },
{ 0x78 , 0x0078 },
{ 0x79 , 0x0079 },
{ 0x7a , 0x007A },
{ 0x7b , 0x007B },
{ 0x7c , 0x007C },
{ 0x7d , 0x007D },
{ 0x7e , 0x007E },
{ 0x7f , 0x007F },
{ 0xa1 , 0x0E01 },
{ 0xa2 , 0x0E02 },
{ 0xa3 , 0x0E03 },
{ 0xa4 , 0x0E04 },
{ 0xa5 , 0x0E05 },
{ 0xa6 , 0x0E06 },
{ 0xa7 , 0x0E07 },
{ 0xa8 , 0x0E08 },
{ 0xa9 , 0x0E09 },
{ 0xaa , 0x0E0A },
{ 0xab , 0x0E0B },
{ 0xac , 0x0E0C },
{ 0xad , 0x0E0D },
{ 0xae , 0x0E0E },
{ 0xaf , 0x0E0F },
{ 0xb0 , 0x0E10 },
{ 0xb1 , 0x0E11 },
{ 0xb2 , 0x0E12 },
{ 0xb3 , 0x0E13 },
{ 0xb4 , 0x0E14 },
{ 0xb5 , 0x0E15 },
{ 0xb6 , 0x0E16 },
{ 0xb7 , 0x0E17 },
{ 0xb8 , 0x0E18 },
{ 0xb9 , 0x0E19 },
{ 0xba , 0x0E1A },
{ 0xbb , 0x0E1B },
{ 0xbc , 0x0E1C },
{ 0xbd , 0x0E1D },
{ 0xbe , 0x0E1E },
{ 0xbf , 0x0E1F },
{ 0xc0 , 0x0E20 },
{ 0xc1 , 0x0E21 },
{ 0xc2 , 0x0E22 },
{ 0xc3 , 0x0E23 },
{ 0xc4 , 0x0E24 },
{ 0xc5 , 0x0E25 },
{ 0xc6 , 0x0E26 },
{ 0xc7 , 0x0E27 },
{ 0xc8 , 0x0E28 },
{ 0xc9 , 0x0E29 },
{ 0xca , 0x0E2A },
{ 0xcb , 0x0E2B },
{ 0xcc , 0x0E2C },
{ 0xcd , 0x0E2D },
{ 0xce , 0x0E2E },
{ 0xcf , 0x0E2F },
{ 0xd0 , 0x0E30 },
{ 0xd1 , 0x0E31 },
{ 0xd2 , 0x0E32 },
{ 0xd3 , 0x0E33 },
{ 0xd4 , 0x0E34 },
{ 0xd5 , 0x0E35 },
{ 0xd6 , 0x0E36 },
{ 0xd7 , 0x0E37 },
{ 0xd8 , 0x0E38 },
{ 0xd9 , 0x0E39 },
{ 0xda , 0x0E3A },
{ 0xdf , 0x0E3F },
{ 0xe0 , 0x0E40 },
{ 0xe1 , 0x0E41 },
{ 0xe2 , 0x0E42 },
{ 0xe3 , 0x0E43 },
{ 0xe4 , 0x0E44 },
{ 0xe5 , 0x0E45 },
{ 0xe6 , 0x0E46 },
{ 0xe7 , 0x0E47 },
{ 0xe8 , 0x0E48 },
{ 0xe9 , 0x0E49 },
{ 0xea , 0x0E4A },
{ 0xeb , 0x0E4B },
{ 0xec , 0x0E4C },
{ 0xed , 0x0E4D },
{ 0xee , 0x0E4E },
{ 0xef , 0x0E4F },
{ 0xf0 , 0x0E50 },
{ 0xf1 , 0x0E51 },
{ 0xf2 , 0x0E52 },
{ 0xf3 , 0x0E53 },
{ 0xf4 , 0x0E54 },
{ 0xf5 , 0x0E55 },
{ 0xf6 , 0x0E56 },
{ 0xf7 , 0x0E57 },
{ 0xf8 , 0x0E58 },
{ 0xf9 , 0x0E59 },
{ 0xfa , 0x0E5A },
{ 0xfb , 0x0E5B },
+1
View File
@@ -0,0 +1 @@
copy "en_DK"
+26
View File
@@ -0,0 +1,26 @@
% Copy the template from ISO/IEC 14651
copy "iso14651_t1"
% Correct Unicode Addressing
script <ETHIOPIC>
order_start <ETHIOPIC>;forward
# qW qWi
<U124D>
<U124A>
# QW QWi
<U125D>
<U125A>
# hW hWi
<U128D>
<U128A>
# kW kWi
<U12B5>
<U12B2>
# KW KWi
<U12C5>
<U12C2>
# gW gWi
<U1315>
<U1312>
order_end
+4
View File
@@ -0,0 +1,4 @@
% Copy the template from ISO/IEC 14651
copy "iso14651_t1"
+4
View File
@@ -0,0 +1,4 @@
% Copy the template from ISO/IEC 14651
copy "iso14651_t1"
+4
View File
@@ -0,0 +1,4 @@
% Copy the template from ISO/IEC 14651
copy "iso14651_t1"
+4
View File
@@ -0,0 +1,4 @@
% Copy the template from ISO/IEC 14651
copy "iso14651_t1"
+3
View File
@@ -0,0 +1,3 @@
% Copy the template from ISO/IEC 14651
copy "iso14651_t1"
+4
View File
@@ -0,0 +1,4 @@
% Copy the template from ISO/IEC 14651
copy "iso14651_t1"
+4
View File
@@ -0,0 +1,4 @@
% Copy the template from ISO/IEC 14651
copy "iso14651_t1"
+4
View File
@@ -0,0 +1,4 @@
% Copy the template from ISO/IEC 14651
copy "iso14651_t1"
+4
View File
@@ -0,0 +1,4 @@
% Copy the template from ISO/IEC 14651
copy "iso14651_t1"
+4
View File
@@ -0,0 +1,4 @@
% Copy the template from ISO/IEC 14651
copy "iso14651_t1"
+4
View File
@@ -0,0 +1,4 @@
% Copy the template from ISO/IEC 14651
copy "iso14651_t1"
+4
View File
@@ -0,0 +1,4 @@
% Copy the template from ISO/IEC 14651
copy "iso14651_t1"
+4
View File
@@ -0,0 +1,4 @@
% Copy the template from ISO/IEC 14651
copy "iso14651_t1"
+220
View File
@@ -0,0 +1,220 @@
order_start forward; forward
<U0020> <U0020>
<U0030> <U0030>
<U0031> <U0031>
<U0032> <U0032>
<U0033> <U0033>
<U0034> <U0034>
<U0035> <U0035>
<U0036> <U0036>
<U0037> <U0037>
<U0038> <U0038>
<U0039> <U0039>
<U0041> <U0041>;<U0041>
<U0061> <U0041>;<U0061>
<U0042> <U0042>;<U0042>
<U0062> <U0042>;<U0062>
<U0043> <U0043>;<U0043>
<U0063> <U0043>;<U0063>
<U0044> <U0044>;<U0044>
<U0064> <U0044>;<U0064>
<U0045> <U0045>;<U0045>
<U0065> <U0045>;<U0065>
<U0046> <U0046>;<U0046>
<U0066> <U0046>;<U0066>
<U0047> <U0047>;<U0047>
<U0067> <U0047>;<U0067>
<U0048> <U0048>;<U0048>
<U0068> <U0048>;<U0068>
<U0049> <U0049>;<U0049>
<U0069> <U0049>;<U0069>
<U004A> <U004A>;<U004A>
<U006A> <U004A>;<U006A>
<U004B> <U004B>;<U004B>
<U006B> <U004B>;<U006B>
<U004C> <U004C>;<U004C>
<U006C> <U004C>;<U006C>
<U004D> <U004D>;<U004D>
<U006D> <U004D>;<U006D>
<U004E> <U004E>;<U004E>
<U006E> <U004E>;<U006E>
<U004F> <U004F>;<U004F>
<U006F> <U004F>;<U006F>
<U0050> <U0050>;<U0050>
<U0070> <U0050>;<U0070>
<U0051> <U0051>;<U0051>
<U0071> <U0051>;<U0071>
<U0052> <U0052>;<U0052>
<U0072> <U0052>;<U0072>
<U0053> <U0053>;<U0053>
<U0073> <U0053>;<U0073>
<U0054> <U0054>;<U0054>
<U0074> <U0054>;<U0074>
<U0055> <U0055>;<U0055>
<U0075> <U0055>;<U0075>
<U0056> <U0056>;<U0056>
<U0076> <U0056>;<U0076>
<U0057> <U0057>;<U0057>
<U0077> <U0057>;<U0077>
<U0058> <U0058>;<U0058>
<U0078> <U0058>;<U0078>
<U0059> <U0059>;<U0059>
<U0079> <U0059>;<U0079>
<U005A> <U005A>;<U005A>
<U007A> <U005A>;<U007A>
<U0021> <U0021>
<U0022> <U0022>
<U0023> <U0023>
<U0024> <U0024>
<U0025> <U0025>
<U0026> <U0026>
<U0027> <U0027>
<U0028> <U0028>
<U0029> <U0029>
<U002A> <U002A>
<U002B> <U002B>
<U002C> <U002C>
<U002D> <U002D>
<U002E> <U002E>
<U002F> <U002F>
<U003A> <U003A>
<U003B> <U003B>
<U003C> <U003C>
<U003D> <U003D>
<U003E> <U003E>
<U003F> <U003F>
<U0040> <U0040>
<U005B> <U005B>
<U005C> <U005C>
<U005D> <U005D>
<U005E> <U005E>
<U005F> <U005F>
<U0060> <U0060>
<U007B> <U007B>
<U007C> <U007C>
<U007D> <U007D>
<U007E> <U007E>
<U00A0> <U00A0>
<U0621> <U0621>
<U0622> <U0622>
<U0623> <U0623>
<U0624> <U0624>
<U0625> <U0625>
<U0626> <U0626>
<U0627> <U0627>
<U0628> <U0628>
<U0629> <U0629>
<U062A> <U062A>
<U062B> <U062B>
<U062C> <U062C>
<U062D> <U062D>
<U062E> <U062E>
<U062F> <U062F>
<U0630> <U0630>
<U0631> <U0631>
<U0632> <U0632>
<U0633> <U0633>
<U0634> <U0634>
<U0635> <U0635>
<U0636> <U0636>
<U0637> <U0637>
<U0638> <U0638>
<U0639> <U0639>
<U063A> <U063A>
<U0641> <U0641>
<U0642> <U0642>
<U0643> <U0643>
<U0644> <U0644>
<U0645> <U0645>
<U0646> <U0646>
<U0647> <U0647>
<U0648> <U0648>
<U0649> <U0649>
<U064A> <U064A>
<U00A4> <U00A4>
<U060C> <U060C>
<U00AD> <U00AD>
<U061B> <U061B>
<U061F> <U061F>
<U0000> <U0000>
<U0001> <U0001>
<U0002> <U0002>
<U0003> <U0003>
<U0004> <U0004>
<U0005> <U0005>
<U0006> <U0006>
<U0007> <U0007>
<U0008> <U0008>
<U0009> <U0009>
<U000A> <U000A>
<U000B> <U000B>
<U000C> <U000C>
<U000D> <U000D>
<U000E> <U000E>
<U000F> <U000F>
<U0010> <U0010>
<U0011> <U0011>
<U0012> <U0012>
<U0013> <U0013>
<U0014> <U0014>
<U0015> <U0015>
<U0016> <U0016>
<U0017> <U0017>
<U0018> <U0018>
<U0019> <U0019>
<U001A> <U001A>
<U001B> <U001B>
<U001C> <U001C>
<U001D> <U001D>
<U001E> <U001E>
<U001F> <U001F>
<U0080> <U0080>
<U0081> <U0081>
<U0082> <U0082>
<U0083> <U0083>
<U0084> <U0084>
<U0085> <U0085>
<U0086> <U0086>
<U0087> <U0087>
<U0088> <U0088>
<U0089> <U0089>
<U008A> <U008A>
<U008B> <U008B>
<U008C> <U008C>
<U008D> <U008D>
<U008E> <U008E>
<U008F> <U008F>
<U0090> <U0090>
<U0091> <U0091>
<U0092> <U0092>
<U0093> <U0093>
<U0094> <U0094>
<U0095> <U0095>
<U0096> <U0096>
<U0097> <U0097>
<U0098> <U0098>
<U0099> <U0099>
<U009A> <U009A>
<U009B> <U009B>
<U009C> <U009C>
<U009D> <U009D>
<U009E> <U009E>
<U009F> <U009F>
<U007F> <U007F>
<U0640> IGNORE
<U064B> IGNORE
<U064C> IGNORE
<U064D> IGNORE
<U064E> IGNORE
<U064F> IGNORE
<U0650> IGNORE
<U0651> IGNORE
<U0652> IGNORE
% UCLIBC -- add an explicit UNDEFINED entry
UNDEFINED
order_end
+4
View File
@@ -0,0 +1,4 @@
% Copy the template from ISO/IEC 14651
copy "iso14651_t1"
+4
View File
@@ -0,0 +1,4 @@
% Copy the template from ISO/IEC 14651
copy "iso14651_t1"
+4
View File
@@ -0,0 +1,4 @@
% Copy the template from ISO/IEC 14651
copy "iso14651_t1"
+4
View File
@@ -0,0 +1,4 @@
% Copy the template from ISO/IEC 14651
copy "iso14651_t1"
+137
View File
@@ -0,0 +1,137 @@
% The new (1991) latin azeri alphabet is:
% <a>, <b>, <c>, <c,>, <d>, <e>, <sw>, <f>, <g>, <g(>, <h>, <x>,
% <i> (dotless i), <i.> (i with dot), <j>, <k>, <q>, <l>, <m>, <n>, <o>,
% <o:>, <p>, <r>, <s>, <s,>, <t>, <u>, <u:>, <v>, <y>, <z>
%
% cyrillic alphabet:
% <a=>, <b=>, <g=>, <g-=>, <d=>, <e=>, <sw=>, <z%>, <z=>, <i=>, <y=>,
% <j%>, <k=>, <k//=>, <l=>, <m=>, <n=>, <o=>, <o-=>, <p=>, <r=>, <s=>,
% <t=>, <u=>, <u'=>, <f=>, <h=>, <h'=>, <c%>, <c%//=>, <s%>
copy "iso14651_t1"
collating-symbol <c,>
collating-symbol <sw>
collating-symbol <g(>
collating-symbol <i.>
collating-symbol <o:>
collating-symbol <s,>
collating-symbol <u:>
collating-symbol <g-=>
collating-symbol <sw=>
collating-symbol <k//=>
collating-symbol <o-=>
collating-symbol <u'=>
collating-symbol <h'=>
collating-symbol <c%//=>
reorder-after <c>
<c,>
reorder-after <e>
<sw>
reorder-after <g>
<g(>
reorder-after <h>
<x>
<i>
<i.>
<j>
<k>
<q>
reorder-after <o>
<o:>
reorder-after <s>
<s,>
reorder-after <u>
<u:>
reorder-after <CYR-GHE>
<g-=>
reorder-after <CYR-IE>
<sw=>
reorder-after <CYR-KA>
<k//=>
reorder-after <CYR-O>
<o-=>
reorder-after <CYR-OUBRE>
<u'=>
reorder-after <CYR-HA>
<h'=>
reorder-after <CYR-CHE>
<c%//=>
reorder-after <U0063>
<U00E7> <c,>;<CDI>;<MIN>;IGNORE
reorder-after <U0043>
<U00C7> <c,>;<CDI>;<CAP>;IGNORE
reorder-after <U0065>
<U0259> <sw>;<PCL>;<MIN>;IGNORE
reorder-after <U0045>
<U018F> <sw>;<PCL>;<CAP>;IGNORE
reorder-after <U0067>
<U011F> <g(>;<BRE>;<MIN>;IGNORE
reorder-after <U0047>
<U011E> <g(>;<BRE>;<CAP>;IGNORE
reorder-after <U0068>
<U0131> <i>;<BAS>;<MIN>;IGNORE
<U0069> <i.>;<PCT>;<MIN>;IGNORE
reorder-after <U0048>
<U0049> <i>;<BAS>;<CAP>;IGNORE
<U0130> <i.>;<PCT>;<CAP>;IGNORE
reorder-after <U006F>
<U00F6> <o:>;<REU>;<MIN>;IGNORE
reorder-after <U004F>
<U00D6> <o:>;<REU>;<CAP>;IGNORE
reorder-after <U0073>
<U015F> <s,>;<CDI>;<MIN>;IGNORE
reorder-after <U0053>
<U015E> <s,>;<CDI>;<CAP>;IGNORE
reorder-after <U0075>
<U00FC> <u:>;<REU>;<MIN>;IGNORE
reorder-after <U0055>
<U00DC> <u:>;<REU>;<CAP>;IGNORE
reorder-after <U0433>
<U0493> <g-=>;<PCL>;<MIN>;IGNORE
reorder-after <U0413>
<U0492> <g-=>;<PCL>;<CAP>;IGNORE
reorder-after <U0435>
<U04D9> <sw=>;<PCL>;<MIN>;IGNORE
reorder-after <U0415>
<U04D8> <sw=>;<PCL>;<CAP>;IGNORE
reorder-after <U043A>
<U049D> <k//=>;<PCL>;<MIN>;IGNORE
reorder-after <U041A>
<U049C> <k//=>;<PCL>;<CAP>;IGNORE
reorder-after <U043E>
<U04E9> <o-=>;<PCL>;<MIN>;IGNORE
reorder-after <U041E>
<U04E8> <o-=>;<PCL>;<CAP>;IGNORE
reorder-after <U0443>
<U04AF> <u'=>;<PCL>;<MIN>;IGNORE
reorder-after <U0423>
<U04AE> <u'=>;<PCL>;<CAP>;IGNORE
reorder-after <U0445>
<U04BB> <h'=>;<PCL>;<MIN>;IGNORE
reorder-after <U0425>
<U04BA> <h'=>;<PCL>;<CAP>;IGNORE
reorder-after <U0447>
<U04B9> <c%//=>;<PCL>;<MIN>;IGNORE
reorder-after <U0427>
<U04B8> <c%//=>;<PCL>;<CAP>;IGNORE
reorder-end
+15
View File
@@ -0,0 +1,15 @@
copy "iso14651_t1"
% iso14651_t1 is missing Ukrainian ghe
collating-symbol <UKR-GHE>
reorder-after <CYR-GZHE>
<UKR-GHE>
reorder-after <U0453>
<U0491> <UKR-GHE>;<BAS>;<MIN>;IGNORE
reorder-after <U0403>
<U0490> <UKR-GHE>;<BAS>;<CAP>;IGNORE
reorder-end
+106
View File
@@ -0,0 +1,106 @@
% We have made the following changes to the basic collation scheme in
% the file iso14651_t1:
% 1. The Cyrillic script is first in the order.
% 2. The non-Bulgarian Cyrillic letters are sorted according to
% their transliteration with Bulgarian Cyrillic letters.
copy "iso14651_t1"
reorder-after <9>
<CYR-A>
<CYR-BE>
<CYR-VE>
<CYR-GHE>
<CYR-DE>
<CYR-GZHE>
<CYR-DJE>
<CYR-IE>
<UKR-IE>
<CYR-IO>
<CYR-ZHE>
<CYR-ZE>
<CYR-DZE>
<CYR-I>
<UKR-I>
<UKR-YI>
<CYR-IBRE>
<CYR-JE>
<CYR-KA>
<CYR-EL>
<CYR-LJE>
<CYR-EM>
<CYR-EN>
<CYR-NJE>
<CYR-O>
<CYR-PE>
<CYR-ER>
<CYR-ES>
<CYR-TE>
<CYR-KJE>
<CYR-TSHE>
<CYR-OU>
<CYR-OUBRE>
<CYR-EF>
<CYR-HA>
<CYR-TSE>
<CYR-CHE>
<CYR-DCHE>
<CYR-SHA>
<CYR-SHTSHA>
<CYR-SIGDUR>
<CYR-YEROU>
<CYR-SIGMOUIL>
<CYR-E>
<CYR-YOU>
<CYR-YA>
reorder-after <U0433>
<U0453> <CYR-GHE>;<CYR-GZHE>;<MIN>;IGNORE % Mac. gje
reorder-after <U0434>
<U0452> "<CYR-DE><CYR-ZHE>";"<LIG><LIG>";"<MIN><MIN>";IGNORE % CYR-DJE
<U045F> "<CYR-DE><CYR-ZHE>";"<CYR-DCHE><LIG>";"<MIN><MIN>";IGNORE % CYR-DCHE
<U0455> "<CYR-DE><CYR-ZE>";"<LIG><LIG>";"<MIN><MIN>";IGNORE % CYR-DZE
reorder-after <U0435>
<U0454> <CYR-IE>;<UKR-IE>;<MIN>;IGNORE
<U0451> <CYR-IE>;<CYR-IO>;<MIN>;IGNORE
<U044D> <CYR-IE>;<CYR-E>;<MIN>;IGNORE
reorder-after <U0438>
<U0406> <CYR-I>;<UKR-I>;<MIN>;IGNORE
<U0457> <CYR-I>;<UKR-YI>;<MIN>;IGNORE
<U044B> <CYR-I>;<CYR-YEROU>;<MIN>;IGNORE
reorder-after <U043A>
<U045C> <CYR-KA>;<CYR-KJE>;<MIN>;IGNORE
reorder-after <U043B>
<U0459> "<CYR-EL><CYR-SIGMOUIL>";"<LIG><LIG>";"<MIN><MIN>";IGNORE % CYR-LJE
reorder-after <U043D>
<U045A> "<CYR-EN><CYR-SIGMOUIL>";"<LIG><LIG>";"<MIN><MIN>";IGNORE % CYR-NJE
reorder-after <U0443>
<U045E> <CYR-OU>;<CYR-OUBRE>;<MIN>;IGNORE
reorder-after <U0447>
<U045B> <CYR-CHE>;<CYR-TSHE>;<MIN>;IGNORE
reorder-after <U0413>
<U0403> <CYR-GHE>;<CYR-GZHE>;<CAP>;IGNORE % Mac. gje
reorder-after <U0414>
<U0402> "<CYR-DE><CYR-ZHE>";"<LIG><LIG>";"<CAP><CAP>";IGNORE % CYR-DJE
<U040F> "<CYR-DE><CYR-ZHE>";"<CYR-DCHE><LIG>";"<CAP><CAP>";IGNORE % CYR-DCHE
<U0405> "<CYR-DE><CYR-ZE>";"<LIG><LIG>";"<CAP><CAP>";IGNORE % CYR-DZE
reorder-after <U0415>
<U0404> <CYR-IE>;<UKR-IE>;<CAP>;IGNORE
<U0401> <CYR-IE>;<CYR-IO>;<CAP>;IGNORE
<U042D> <CYR-IE>;<CYR-E>;<CAP>;IGNORE
reorder-after <U0418>
<U0456> <CYR-I>;<UKR-I>;<CAP>;IGNORE
<U0407> <CYR-I>;<UKR-YI>;<CAP>;IGNORE
<U042B> <CYR-I>;<CYR-YEROU>;<CAP>;IGNORE
reorder-after <U0419>
<U0408> <CYR-IBRE>;<CYR-JE>;<CAP>;IGNORE
reorder-after <U041A>
<U040C> <CYR-KA>;<CYR-KJE>;<CAP>;IGNORE
reorder-after <U041B>
<U0409> "<CYR-EL><CYR-SIGMOUIL>";"<LIG><LIG>";"<CAP><CAP>";IGNORE % CYR-LJE
reorder-after <U041D>
<U040A> "<CYR-EN><CYR-SIGMOUIL>";"<LIG><LIG>";"<CAP><CAP>";IGNORE % CYR-NJE
reorder-after <U0423>
<U040E> <CYR-OU>;<CYR-OUBRE>;<CAP>;IGNORE
reorder-after <U0427>
<U040B> <CYR-CHE>;<CYR-TSHE>;<CAP>;IGNORE
reorder-end
+2
View File
@@ -0,0 +1,2 @@
% TODO: Bengali sorting should be added
copy "iso14651_t1"
+4
View File
@@ -0,0 +1,4 @@
% Copy the template from ISO/IEC 14651
copy "iso14651_t1"
%
+40
View File
@@ -0,0 +1,40 @@
copy "iso14651_t1"
%% a b c ch c'h d e f g h i j k l m n o p q r s t u v w x y z
collating-symbol <c-h-br>
collating-element <C-H> from "<U0043><U0048>"
collating-element <c-h> from "<U0063><U0068>"
collating-element <C-h> from "<U0043><U0068>"
collating-element <c-H> from "<U0063><U0048>"
collating-symbol <c-'-h-br>
collating-element <C'H> from "<U0043><U0027><U0048>"
collating-element <c'h> from "<U0063><U0027><U0068>"
collating-element <C'h> from "<U0043><U0027><U0068>"
collating-element <c'H> from "<U0063><U0027><U0048>"
collating-symbol <CAP-MIN>
collating-symbol <MIN-CAP>
reorder-after <MIN>
<MIN-CAP>
reorder-after <CAP>
<CAP-MIN>
reorder-after <c>
<c-h-br>
<c-'-h-br>
reorder-after <U0063>
<c-h> <c-h-br>;<PCT>;<MIN>;IGNORE
<c-H> <c-h-br>;<PCT>;<MIN-CAP>;IGNORE
<c'h> <c-'-h-br>;<PCT>;<MIN>;IGNORE
<c'H> <c-'-h-br>;<PCT>;<MIN-CAP>;IGNORE
reorder-after <U0043>
<C-H> <c-h-br>;<PCT>;<CAP>;IGNORE
<C-h> <c-h-br>;<PCT>;<CAP-MIN>;IGNORE
<C'H> <c-'-h-br>;<PCT>;<CAP>;IGNORE
<C'h> <c-'-h-br>;<PCT>;<CAP-MIN>;IGNORE
reorder-end
+91
View File
@@ -0,0 +1,91 @@
copy "iso14651_t1"
% a b c c' c< d dz< d// e f g h i j k l lj m n nj o p
% q r s s< t u v w x y z z<
collating-symbol <d-z-sh>
collating-element <D-Z<> from "<U0044><U017D>"
collating-element <D-z<> from "<U0044><U017E>"
collating-element <d-Z<> from "<U0064><U017D>"
collating-element <d-z<> from "<U0064><U017E>"
collating-symbol <l-j-sh>
collating-element <L-J> from "<U004C><U004A>"
collating-element <L-j> from "<U004C><U006A>"
collating-element <l-J> from "<U006C><U004A>"
collating-element <l-j> from "<U006C><U006A>"
collating-symbol <n-j-sh>
collating-element <N-J> from "<U004E><U004A>"
collating-element <N-j> from "<U004E><U006A>"
collating-element <n-J> from "<U006E><U004A>"
collating-element <n-j> from "<U006E><U006A>"
collating-symbol <cacute>
collating-symbol <ccaron>
collating-symbol <d//>
collating-symbol <scaron>
collating-symbol <zcaron>
collating-symbol <CAP-MIN>
collating-symbol <MIN-CAP>
reorder-after <MIN>
<MIN-CAP>
reorder-after <CAP>
<CAP-MIN>
reorder-after <c>
<cacute>
<ccaron>
<d>
<d-z-sh>
<d//>
reorder-after <l>
<l-j-sh>
reorder-after <n>
<n-j-sh>
reorder-after <s>
<scaron>
reorder-after <z>
<zcaron>
reorder-after <U0063>
<U0107> <cacute>;<PCT>;<MIN>;IGNORE
<U010D> <ccaron>;<PCT>;<MIN>;IGNORE
reorder-after <U0043>
<U0106> <cacute>;<PCT>;<CAP>;IGNORE
<U010C> <ccaron>;<PCT>;<CAP>;IGNORE
reorder-after <U0064>
<d-z<> <d-z-sh>;<PCT>;<MIN>;IGNORE
<d-Z<> <d-z-sh>;<PCT>;<MIN-CAP>;IGNORE
<U0111> <d//>;<PCT>;<MIN>;IGNORE
reorder-after <U0044>
<D-Z<> <d-z-sh>;<PCT>;<CAP>;IGNORE
<D-z<> <d-z-sh>;<PCT>;<CAP-MIN>;IGNORE
<U0110> <d//>;<PCT>;<CAP>;IGNORE
%reorder-after <U006C>
<l-j> <l-j-sh>;<PCT>;<MIN>;IGNORE
<l-J> <l-j-sh>;<PCT>;<MIN-CAP>;IGNORE
reorder-after <U004C>
<L-J> <l-j-sh>;<PCT>;<CAP>;IGNORE
<L-j> <l-j-sh>;<PCT>;<CAP-MIN>;IGNORE
reorder-after <U006E>
<n-j> <n-j-sh>;<PCT>;<MIN>;IGNORE
<n-J> <n-j-sh>;<PCT>;<MIN-CAP>;IGNORE
reorder-after <U004E>
<N-J> <n-j-sh>;<PCT>;<CAP>;IGNORE
<N-j> <n-j-sh>;<PCT>;<CAP-MIN>;IGNORE
reorder-after <U0073>
<U0161> <scaron>;<PCT>;<MIN>;IGNORE
reorder-after <U0053>
<U0160> <scaron>;<PCT>;<CAP>;IGNORE
reorder-after <U007A>
<U017E> <zcaron>;<PCT>;<MIN>;IGNORE
reorder-after <U005A>
<U017D> <zcaron>;<PCT>;<CAP>;IGNORE
reorder-end
File diff suppressed because it is too large Load Diff
+136
View File
@@ -0,0 +1,136 @@
copy "iso14651_t1"
% Welsh sorting order is:
% a b c ch d dd e f ff g ng h i l ll m n o p ph r rh s t th u w y
collating-symbol <c-h-cy>
collating-element <C-H> from "<U0043><U0048>"
collating-element <c-h> from "<U0063><U0068>"
collating-element <C-h> from "<U0043><U0068>"
collating-element <c-H> from "<U0063><U0048>"
collating-symbol <d-d-cy>
collating-element <D-D> from "<U0044><U0044>"
collating-element <d-d> from "<U0064><U0064>"
collating-element <D-d> from "<U0044><U0064>"
collating-element <d-D> from "<U0064><U0044>"
collating-symbol <f-f-cy>
collating-element <F-F> from "<U0046><U0046>"
collating-element <f-f> from "<U0066><U0066>"
collating-element <F-f> from "<U0046><U0066>"
collating-element <f-F> from "<U0066><U0046>"
collating-symbol <n-g-cy>
collating-element <N-G> from "<U004E><U0047>"
collating-element <n-g> from "<U006E><U0067>"
collating-element <N-g> from "<U004E><U0067>"
collating-element <n-G> from "<U006E><U0047>"
collating-symbol <l-l-cy>
collating-element <L-L> from "<U004C><U004C>"
collating-element <l-l> from "<U006C><U006C>"
collating-element <L-l> from "<U004C><U006C>"
collating-element <l-L> from "<U006C><U004C>"
collating-symbol <p-h-cy>
collating-element <P-H> from "<U0050><U0048>"
collating-element <p-h> from "<U0070><U0068>"
collating-element <P-h> from "<U0050><U0068>"
collating-element <p-H> from "<U0070><U0048>"
collating-symbol <r-h-cy>
collating-element <R-H> from "<U0052><U0048>"
collating-element <r-h> from "<U0072><U0068>"
collating-element <R-h> from "<U0052><U0068>"
collating-element <r-H> from "<U0072><U0048>"
collating-symbol <t-h-cy>
collating-element <T-H> from "<U0054><U0048>"
collating-element <t-h> from "<U0074><U0068>"
collating-element <T-h> from "<U0054><U0068>"
collating-element <t-H> from "<U0074><U0048>"
collating-symbol <CAP-MIN>
collating-symbol <MIN-CAP>
reorder-after <MIN>
<MIN-CAP>
reorder-after <CAP>
<CAP-MIN>
reorder-after <c>
<c-h-cy>
<d>
<d-d-cy>
reorder-after <f>
<f-f-cy>
<g>
<n-g-cy>
reorder-after <l>
<l-l-cy>
reorder-after <p>
<p-h-cy>
reorder-after <r>
<r-h-cy>
reorder-after <t>
<t-h-cy>
reorder-after <U0063>
<c-h> <c-h-cy>;<PCT>;<MIN>;IGNORE
<c-H> <c-h-cy>;<PCT>;<MIN-CAP>;IGNORE
reorder-after <U0043>
<C-H> <c-h-cy>;<PCT>;<CAP>;IGNORE
<C-h> <c-h-cy>;<PCT>;<CAP-MIN>;IGNORE
reorder-after <U0064>
<d-d> <d-d-cy>;<PCT>;<MIN>;IGNORE
<d-D> <d-d-cy>;<PCT>;<MIN-CAP>;IGNORE
reorder-after <U0044>
<D-D> <d-d-cy>;<PCT>;<CAP>;IGNORE
<D-d> <d-d-cy>;<PCT>;<CAP-MIN>;IGNORE
reorder-after <U0066>
<f-f> <f-f-cy>;<PCT>;<MIN>;IGNORE
<f-F> <f-f-cy>;<PCT>;<MIN-CAP>;IGNORE
reorder-after <U0046>
<F-F> <f-f-cy>;<PCT>;<CAP>;IGNORE
<F-f> <f-f-cy>;<PCT>;<CAP-MIN>;IGNORE
reorder-after <U0067>
<n-g> <n-g-cy>;<PCT>;<MIN>;IGNORE
<n-G> <n-g-cy>;<PCT>;<MIN-CAP>;IGNORE
reorder-after <U0047>
<N-G> <n-g-cy>;<PCT>;<CAP>;IGNORE
<N-g> <n-g-cy>;<PCT>;<CAP-MIN>;IGNORE
reorder-after <U006C>
<l-l> <l-l-cy>;<PCT>;<MIN>;IGNORE
<l-L> <l-l-cy>;<PCT>;<MIN-CAP>;IGNORE
reorder-after <U004C>
<L-L> <l-l-cy>;<PCT>;<CAP>;IGNORE
<L-l> <l-l-cy>;<PCT>;<CAP-MIN>;IGNORE
reorder-after <U0070>
<p-h> <p-h-cy>;<PCT>;<MIN>;IGNORE
<p-H> <p-h-cy>;<PCT>;<MIN-CAP>;IGNORE
reorder-after <U0050>
<P-H> <p-h-cy>;<PCT>;<CAP>;IGNORE
<P-h> <p-h-cy>;<PCT>;<CAP-MIN>;IGNORE
reorder-after <U0072>
<r-h> <r-h-cy>;<PCT>;<MIN>;IGNORE
<r-H> <r-h-cy>;<PCT>;<MIN-CAP>;IGNORE
reorder-after <U0052>
<R-H> <r-h-cy>;<PCT>;<CAP>;IGNORE
<R-h> <r-h-cy>;<PCT>;<CAP-MIN>;IGNORE
reorder-after <U0074>
<t-h> <t-h-cy>;<PCT>;<MIN>;IGNORE
<t-H> <t-h-cy>;<PCT>;<MIN-CAP>;IGNORE
reorder-after <U0054>
<T-H> <t-h-cy>;<PCT>;<CAP>;IGNORE
<T-h> <t-h-cy>;<PCT>;<CAP-MIN>;IGNORE
reorder-end

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