feat: initial commit
Code is from cxx.uclibc.org, modified by catty to implement c++17 features
This commit is contained in:
+41
@@ -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
@@ -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
|
||||||
|
|
||||||
|
|
||||||
@@ -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)
|
||||||
@@ -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.
|
||||||
|
|
||||||
@@ -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!
|
||||||
@@ -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
|
||||||
@@ -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
@@ -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'
|
||||||
@@ -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.
|
||||||
@@ -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
|
||||||
@@ -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=
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
top_srcdir=../
|
||||||
|
top_builddir=../
|
||||||
|
all:
|
||||||
|
include $(top_srcdir)Rules.mak
|
||||||
|
include Makefile.in
|
||||||
|
include $(top_srcdir)Makefile.end
|
||||||
@@ -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))
|
||||||
|
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
# This file is empty to let people select their own
|
||||||
|
# build options however they like....
|
||||||
@@ -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
|
||||||
@@ -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
|
||||||
|
|
||||||
@@ -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
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
EXTRA_DIR := $(top_srcdir)extra/
|
||||||
|
DISTCLEAN_extra: $(PHONY)
|
||||||
|
$(Q)$(MAKE) -C $(EXTRA_DIR)config CLEAN_extra/config
|
||||||
@@ -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
|
||||||
@@ -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.
|
||||||
@@ -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
|
||||||
@@ -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 */
|
||||||
|
}
|
||||||
@@ -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];
|
||||||
@@ -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;
|
||||||
|
}
|
||||||
@@ -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;
|
||||||
|
}
|
||||||
@@ -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
File diff suppressed because it is too large
Load Diff
@@ -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 */
|
||||||
@@ -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
@@ -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 */
|
||||||
@@ -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));
|
||||||
@@ -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;
|
||||||
|
}
|
||||||
@@ -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 = ¤t_entry->list;
|
||||||
|
}
|
||||||
|
|
||||||
|
void menu_end_menu(void)
|
||||||
|
{
|
||||||
|
last_entry_ptr = ¤t_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;
|
||||||
|
}
|
||||||
|
|
||||||
@@ -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 */
|
||||||
|
}
|
||||||
@@ -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;
|
||||||
|
}
|
||||||
@@ -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";
|
||||||
|
}
|
||||||
@@ -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);
|
||||||
|
}
|
||||||
@@ -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;
|
||||||
|
}
|
||||||
@@ -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 */
|
||||||
|
}
|
||||||
@@ -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
@@ -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 */
|
||||||
|
|
||||||
@@ -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"
|
||||||
Executable
+72
@@ -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`
|
||||||
|
|
||||||
@@ -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
|
||||||
@@ -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
|
||||||
@@ -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, "}," } }'
|
||||||
@@ -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 },
|
||||||
@@ -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 },
|
||||||
@@ -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 },
|
||||||
@@ -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 },
|
||||||
@@ -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 },
|
||||||
@@ -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 },
|
||||||
@@ -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 },
|
||||||
@@ -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 },
|
||||||
@@ -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 },
|
||||||
@@ -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 },
|
||||||
@@ -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 },
|
||||||
@@ -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 },
|
||||||
@@ -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 },
|
||||||
@@ -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 },
|
||||||
@@ -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 },
|
||||||
@@ -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 },
|
||||||
@@ -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 },
|
||||||
@@ -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 },
|
||||||
@@ -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 },
|
||||||
@@ -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 },
|
||||||
@@ -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 },
|
||||||
@@ -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 },
|
||||||
@@ -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 },
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
copy "en_DK"
|
||||||
@@ -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
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
|
||||||
|
% Copy the template from ISO/IEC 14651
|
||||||
|
copy "iso14651_t1"
|
||||||
|
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
|
||||||
|
% Copy the template from ISO/IEC 14651
|
||||||
|
copy "iso14651_t1"
|
||||||
|
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
|
||||||
|
% Copy the template from ISO/IEC 14651
|
||||||
|
copy "iso14651_t1"
|
||||||
|
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
|
||||||
|
% Copy the template from ISO/IEC 14651
|
||||||
|
copy "iso14651_t1"
|
||||||
|
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
% Copy the template from ISO/IEC 14651
|
||||||
|
copy "iso14651_t1"
|
||||||
|
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
|
||||||
|
% Copy the template from ISO/IEC 14651
|
||||||
|
copy "iso14651_t1"
|
||||||
|
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
|
||||||
|
% Copy the template from ISO/IEC 14651
|
||||||
|
copy "iso14651_t1"
|
||||||
|
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
|
||||||
|
% Copy the template from ISO/IEC 14651
|
||||||
|
copy "iso14651_t1"
|
||||||
|
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
|
||||||
|
% Copy the template from ISO/IEC 14651
|
||||||
|
copy "iso14651_t1"
|
||||||
|
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
|
||||||
|
% Copy the template from ISO/IEC 14651
|
||||||
|
copy "iso14651_t1"
|
||||||
|
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
|
||||||
|
% Copy the template from ISO/IEC 14651
|
||||||
|
copy "iso14651_t1"
|
||||||
|
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
|
||||||
|
% Copy the template from ISO/IEC 14651
|
||||||
|
copy "iso14651_t1"
|
||||||
|
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
|
||||||
|
% Copy the template from ISO/IEC 14651
|
||||||
|
copy "iso14651_t1"
|
||||||
|
|
||||||
@@ -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
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
|
||||||
|
% Copy the template from ISO/IEC 14651
|
||||||
|
copy "iso14651_t1"
|
||||||
|
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
|
||||||
|
% Copy the template from ISO/IEC 14651
|
||||||
|
copy "iso14651_t1"
|
||||||
|
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
|
||||||
|
% Copy the template from ISO/IEC 14651
|
||||||
|
copy "iso14651_t1"
|
||||||
|
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
|
||||||
|
% Copy the template from ISO/IEC 14651
|
||||||
|
copy "iso14651_t1"
|
||||||
|
|
||||||
@@ -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
|
||||||
|
|
||||||
@@ -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
|
||||||
@@ -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
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
% TODO: Bengali sorting should be added
|
||||||
|
copy "iso14651_t1"
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
% Copy the template from ISO/IEC 14651
|
||||||
|
copy "iso14651_t1"
|
||||||
|
|
||||||
|
%
|
||||||
@@ -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
|
||||||
|
|
||||||
@@ -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
@@ -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
Reference in New Issue
Block a user