From b2e1d6b5d39b67fbf1affe9b346f7dd256b324cf Mon Sep 17 00:00:00 2001 From: mazze Date: Sun, 2 Dec 2007 14:32:26 +0000 Subject: [PATCH] Resurrected native codesetslib from r27301 git-svn-id: https://svn.aros.org:8080/svn/aros/trunk/AROS@27348 fb15a70f-31f2-0310-bbcc-cdcc74a49acc --- workbench/libs/codesetslib/AUTHORS | 34 + workbench/libs/codesetslib/COPYING | 428 ++ workbench/libs/codesetslib/ChangeLog | 316 ++ workbench/libs/codesetslib/README.aros | 19 + workbench/libs/codesetslib/charsets/ibm866.txt | 280 + workbench/libs/codesetslib/charsets/iso8859-10.txt | 202 + workbench/libs/codesetslib/charsets/iso8859-7.txt | 199 + workbench/libs/codesetslib/charsets/mmakefile.src | 13 + .../libs/codesetslib/charsets/windows-1250.txt | 279 + .../libs/codesetslib/charsets/windows-1251.txt | 279 + .../libs/codesetslib/charsets/windows-1252.txt | 279 + .../libs/codesetslib/developer/docs/codesets.doc | 1531 +++++ .../codesetslib/developer/examples/DetectCodeset.c | 112 + .../codesetslib/developer/examples/UTF8ToStrHook.c | 136 + .../libs/codesetslib/developer/examples/b64d.c | 81 + .../libs/codesetslib/developer/examples/b64e.c | 80 + .../libs/codesetslib/developer/examples/demo1.c | 908 +++ .../codesetslib/developer/examples/makefile.mos | 122 + .../codesetslib/developer/examples/makefile.os3 | 122 + .../codesetslib/developer/examples/makefile.os4 | 127 + .../codesetslib/developer/examples/mmakefile.src | 21 + .../libs/codesetslib/developer/fd/codesets_lib.fd | 32 + .../developer/include/clib/codesets_protos.h | 75 + .../developer/include/inline/codesets.h | 226 + .../developer/include/inline/codesets_protos.h | 166 + .../developer/include/inline4/codesets.h | 135 + .../developer/include/interfaces/codesets.h | 76 + .../developer/include/interfaces/codesets.i | 62 + .../developer/include/libraries/codesets.h | 204 + .../developer/include/ppcinline/codesets.h | 269 + .../developer/include/pragmas/codesets_pragmas.h | 123 + .../codesetslib/developer/include/proto/codesets.h | 74 + .../codesetslib/developer/sfd/codesets_lib.sfd | 73 + .../libs/codesetslib/developer/xml/codesets.xml | 179 + workbench/libs/codesetslib/include/SDI_compiler.h | 218 + workbench/libs/codesetslib/include/SDI_hook.h | 192 + workbench/libs/codesetslib/include/SDI_lib.h | 196 + workbench/libs/codesetslib/include/SDI_stdarg.h | 105 + .../codesetslib/include/clib/codesets_protos.h | 75 + .../codesetslib/include/clib/muimaster_protos.h | 70 + workbench/libs/codesetslib/include/codesets_68k.c | 437 ++ .../libs/codesetslib/include/inline/codesets.h | 226 + .../libs/codesetslib/include/inline/muimaster.h | 139 + .../libs/codesetslib/include/inline4/codesets.h | 135 + .../libs/codesetslib/include/inline4/muimaster.h | 73 + .../libs/codesetslib/include/interfaces/codesets.h | 76 + .../libs/codesetslib/include/interfaces/codesets.i | 62 + .../codesetslib/include/interfaces/muimaster.h | 73 + .../libs/codesetslib/include/libraries/codesets.h | 204 + .../codesetslib/include/libraries/mmakefile.src | 12 + workbench/libs/codesetslib/include/libraries/mui.h | 3192 +++++++++++ .../libs/codesetslib/include/mui/TextEditor_mcc.h | 189 + .../libs/codesetslib/include/mui/Textinput_mcc.h | 287 + .../libs/codesetslib/include/ppcinline/codesets.h | 269 + .../codesetslib/include/pragmas/codesets_pragmas.h | 123 + .../libs/codesetslib/include/proto/codesets.h | 74 + .../libs/codesetslib/include/proto/muimaster.h | 67 + workbench/libs/codesetslib/src/Makefile | 281 + workbench/libs/codesetslib/src/base.h | 43 + workbench/libs/codesetslib/src/base64.c | 748 +++ workbench/libs/codesetslib/src/codesets.c | 5854 ++++++++++++++++++++ workbench/libs/codesetslib/src/codesets.conf | 62 + workbench/libs/codesetslib/src/codesets_table.h | 924 +++ workbench/libs/codesetslib/src/convertUTF.c | 1151 ++++ workbench/libs/codesetslib/src/convertUTF.h | 103 + workbench/libs/codesetslib/src/debug.c | 409 ++ workbench/libs/codesetslib/src/debug.h | 137 + workbench/libs/codesetslib/src/init.c | 342 ++ workbench/libs/codesetslib/src/lib.h | 44 + workbench/libs/codesetslib/src/lib_protos.h | 103 + workbench/libs/codesetslib/src/libinit-aros.c | 85 + workbench/libs/codesetslib/src/libinit.c | 686 +++ workbench/libs/codesetslib/src/macros.h | 53 + workbench/libs/codesetslib/src/mmakefile.src | 37 + workbench/libs/codesetslib/src/utils.c | 94 + workbench/libs/codesetslib/src/version.h | 56 + 76 files changed, 24968 insertions(+) create mode 100644 workbench/libs/codesetslib/AUTHORS create mode 100644 workbench/libs/codesetslib/COPYING create mode 100644 workbench/libs/codesetslib/ChangeLog create mode 100644 workbench/libs/codesetslib/README.aros create mode 100644 workbench/libs/codesetslib/charsets/ibm866.txt create mode 100755 workbench/libs/codesetslib/charsets/iso8859-10.txt create mode 100755 workbench/libs/codesetslib/charsets/iso8859-7.txt create mode 100644 workbench/libs/codesetslib/charsets/mmakefile.src create mode 100755 workbench/libs/codesetslib/charsets/windows-1250.txt create mode 100755 workbench/libs/codesetslib/charsets/windows-1251.txt create mode 100755 workbench/libs/codesetslib/charsets/windows-1252.txt create mode 100755 workbench/libs/codesetslib/developer/docs/codesets.doc create mode 100755 workbench/libs/codesetslib/developer/examples/DetectCodeset.c create mode 100755 workbench/libs/codesetslib/developer/examples/UTF8ToStrHook.c create mode 100755 workbench/libs/codesetslib/developer/examples/b64d.c create mode 100755 workbench/libs/codesetslib/developer/examples/b64e.c create mode 100755 workbench/libs/codesetslib/developer/examples/demo1.c create mode 100755 workbench/libs/codesetslib/developer/examples/makefile.mos create mode 100755 workbench/libs/codesetslib/developer/examples/makefile.os3 create mode 100755 workbench/libs/codesetslib/developer/examples/makefile.os4 create mode 100644 workbench/libs/codesetslib/developer/examples/mmakefile.src create mode 100755 workbench/libs/codesetslib/developer/fd/codesets_lib.fd create mode 100755 workbench/libs/codesetslib/developer/include/clib/codesets_protos.h create mode 100755 workbench/libs/codesetslib/developer/include/inline/codesets.h create mode 100644 workbench/libs/codesetslib/developer/include/inline/codesets_protos.h create mode 100644 workbench/libs/codesetslib/developer/include/inline4/codesets.h create mode 100644 workbench/libs/codesetslib/developer/include/interfaces/codesets.h create mode 100644 workbench/libs/codesetslib/developer/include/interfaces/codesets.i create mode 100755 workbench/libs/codesetslib/developer/include/libraries/codesets.h create mode 100755 workbench/libs/codesetslib/developer/include/ppcinline/codesets.h create mode 100755 workbench/libs/codesetslib/developer/include/pragmas/codesets_pragmas.h create mode 100755 workbench/libs/codesetslib/developer/include/proto/codesets.h create mode 100644 workbench/libs/codesetslib/developer/sfd/codesets_lib.sfd create mode 100644 workbench/libs/codesetslib/developer/xml/codesets.xml create mode 100644 workbench/libs/codesetslib/include/SDI_compiler.h create mode 100644 workbench/libs/codesetslib/include/SDI_hook.h create mode 100644 workbench/libs/codesetslib/include/SDI_lib.h create mode 100644 workbench/libs/codesetslib/include/SDI_stdarg.h create mode 100755 workbench/libs/codesetslib/include/clib/codesets_protos.h create mode 100755 workbench/libs/codesetslib/include/clib/muimaster_protos.h create mode 100644 workbench/libs/codesetslib/include/codesets_68k.c create mode 100755 workbench/libs/codesetslib/include/inline/codesets.h create mode 100644 workbench/libs/codesetslib/include/inline/muimaster.h create mode 100644 workbench/libs/codesetslib/include/inline4/codesets.h create mode 100644 workbench/libs/codesetslib/include/inline4/muimaster.h create mode 100644 workbench/libs/codesetslib/include/interfaces/codesets.h create mode 100644 workbench/libs/codesetslib/include/interfaces/codesets.i create mode 100644 workbench/libs/codesetslib/include/interfaces/muimaster.h create mode 100755 workbench/libs/codesetslib/include/libraries/codesets.h create mode 100644 workbench/libs/codesetslib/include/libraries/mmakefile.src create mode 100755 workbench/libs/codesetslib/include/libraries/mui.h create mode 100755 workbench/libs/codesetslib/include/mui/TextEditor_mcc.h create mode 100755 workbench/libs/codesetslib/include/mui/Textinput_mcc.h create mode 100755 workbench/libs/codesetslib/include/ppcinline/codesets.h create mode 100755 workbench/libs/codesetslib/include/pragmas/codesets_pragmas.h create mode 100755 workbench/libs/codesetslib/include/proto/codesets.h create mode 100755 workbench/libs/codesetslib/include/proto/muimaster.h create mode 100755 workbench/libs/codesetslib/src/Makefile create mode 100755 workbench/libs/codesetslib/src/base.h create mode 100755 workbench/libs/codesetslib/src/base64.c create mode 100755 workbench/libs/codesetslib/src/codesets.c create mode 100644 workbench/libs/codesetslib/src/codesets.conf create mode 100755 workbench/libs/codesetslib/src/codesets_table.h create mode 100755 workbench/libs/codesetslib/src/convertUTF.c create mode 100755 workbench/libs/codesetslib/src/convertUTF.h create mode 100644 workbench/libs/codesetslib/src/debug.c create mode 100644 workbench/libs/codesetslib/src/debug.h create mode 100755 workbench/libs/codesetslib/src/init.c create mode 100755 workbench/libs/codesetslib/src/lib.h create mode 100755 workbench/libs/codesetslib/src/lib_protos.h create mode 100644 workbench/libs/codesetslib/src/libinit-aros.c create mode 100755 workbench/libs/codesetslib/src/libinit.c create mode 100755 workbench/libs/codesetslib/src/macros.h create mode 100644 workbench/libs/codesetslib/src/mmakefile.src create mode 100755 workbench/libs/codesetslib/src/utils.c create mode 100755 workbench/libs/codesetslib/src/version.h diff --git a/workbench/libs/codesetslib/AUTHORS b/workbench/libs/codesetslib/AUTHORS new file mode 100644 index 000000000..8da599134 --- /dev/null +++ b/workbench/libs/codesetslib/AUTHORS @@ -0,0 +1,34 @@ +/*************************************************************************** + + codesets.library - Amiga shared library for handling different codesets + Copyright (C) 2001-2005 by Alfonso [alfie] Ranieri . + Copyright (C) 2005-2007 by codesets.library Open Source Team + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + codesets.library project: http://sourceforge.net/projects/codesetslib/ + + $Id: AUTHORS 83 2007-07-29 20:09:18Z damato $ + +***************************************************************************/ + +codesets.library is an Open Source development effort with the code base and +design provided by the following people: + +Alexandre Balaban +Alfonso Ranieri +Ilkka Lehtoranta +Jens Langner +Sebastian Bauer +Thore Boeckelmann + +The development of codesets is hosted by +SourceForge http://www.sourceforge.net/ diff --git a/workbench/libs/codesetslib/COPYING b/workbench/libs/codesetslib/COPYING new file mode 100644 index 000000000..1c1b2c6a6 --- /dev/null +++ b/workbench/libs/codesetslib/COPYING @@ -0,0 +1,428 @@ + GNU Lesser General Public License + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + [This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + + Preamble + +The licenses for most software are designed to take away your freedom to share +and change it. By contrast, the GNU General Public Licenses are intended to +guarantee your freedom to share and change free software--to make sure the +software is free for all its users. + +This license, the Lesser General Public License, applies to some specially +designated software packages--typically libraries--of the Free Software +Foundation and other authors who decide to use it. You can use it too, but we +suggest you first think carefully about whether this license or the ordinary +General Public License is the better strategy to use in any particular case, +based on the explanations below. + +When we speak of free software, we are referring to freedom of use, not price. +Our General Public Licenses are designed to make sure that you have the +freedom to distribute copies of free software (and charge for this service if +you wish); that you receive source code or can get it if you want it; that you +can change the software and use pieces of it in new free programs; and that +you are informed that you can do these things. + +To protect your rights, we need to make restrictions that forbid distributors +to deny you these rights or to ask you to surrender these rights. These +restrictions translate to certain responsibilities for you if you distribute +copies of the library or if you modify it. + +For example, if you distribute copies of the library, whether gratis or for a +fee, you must give the recipients all the rights that we gave you. You must +make sure that they, too, receive or can get the source code. If you link +other code with the library, you must provide complete object files to the +recipients, so that they can relink them with the library after making changes +to the library and recompiling it. And you must show them these terms so they +know their rights. + +We protect your rights with a two-step method: (1) we copyright the library, +and (2) we offer you this license, which gives you legal permission to copy, +distribute and/or modify the library. + +To protect each distributor, we want to make it very clear that there is no +warranty for the free library. Also, if the library is modified by someone +else and passed on, the recipients should know that what they have is not the +original version, so that the original author's reputation will not be +affected by problems that might be introduced by others. + +Finally, software patents pose a constant threat to the existence of any free +program. We wish to make sure that a company cannot effectively restrict the +users of a free program by obtaining a restrictive license from a patent +holder. Therefore, we insist that any patent license obtained for a version of +the library must be consistent with the full freedom of use specified in this +license. + +Most GNU software, including some libraries, is covered by the ordinary GNU +General Public License. This license, the GNU Lesser General Public License, +applies to certain designated libraries, and is quite different from the +ordinary General Public License. We use this license for certain libraries in +order to permit linking those libraries into non-free programs. + +When a program is linked with a library, whether statically or using a shared +library, the combination of the two is legally speaking a combined work, a +derivative of the original library. The ordinary General Public License +therefore permits such linking only if the entire combination fits its +criteria of freedom. The Lesser General Public License permits more lax +criteria for linking other code with the library. + +We call this license the "Lesser" General Public License because it does Less +to protect the user's freedom than the ordinary General Public License. It +also provides other free software developers Less of an advantage over +competing non-free programs. These disadvantages are the reason we use the +ordinary General Public License for many libraries. However, the Lesser +license provides advantages in certain special circumstances. + +For example, on rare occasions, there may be a special need to encourage the +widest possible use of a certain library, so that it becomes a de-facto +standard. To achieve this, non-free programs must be allowed to use the +library. A more frequent case is that a free library does the same job as +widely used non-free libraries. In this case, there is little to gain by +limiting the free library to free software only, so we use the Lesser General +Public License. + +In other cases, permission to use a particular library in non-free programs +enables a greater number of people to use a large body of free software. For +example, permission to use the GNU C Library in non-free programs enables many +more people to use the whole GNU operating system, as well as its variant, the +GNU/Linux operating system. + +Although the Lesser General Public License is Less protective of the users' +freedom, it does ensure that the user of a program that is linked with the +Library has the freedom and the wherewithal to run that program using a +modified version of the Library. + +The precise terms and conditions for copying, distribution and modification +follow. Pay close attention to the difference between a "work based on the +library" and a "work that uses the library". The former contains code derived +from the library, whereas the latter must be combined with the library in +order to run. + + + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + +0. This License Agreement applies to any software library or other program +which contains a notice placed by the copyright holder or other authorized +party saying it may be distributed under the terms of this Lesser General +Public License (also called "this License"). Each licensee is addressed as +"you". + +A "library" means a collection of software functions and/or data prepared so +as to be conveniently linked with application programs (which use some of +those functions and data) to form executables. + +The "Library", below, refers to any such software library or work which has +been distributed under these terms. A "work based on the Library" means +either the Library or any derivative work under copyright law: that is to say, +a work containing the Library or a portion of it, either verbatim or with +modifications and/or translated straightforwardly into another language. +(Hereinafter, translation is included without limitation in the term +"modification".) + +"Source code" for a work means the preferred form of the work for making +modifications to it. For a library, complete source code means all the source +code for all modules it contains, plus any associated interface definition +files, plus the scripts used to control compilation and installation of the +library. + +Activities other than copying, distribution and modification are not covered +by this License; they are outside its scope. The act of running a program +using the Library is not restricted, and output from such a program is covered +only if its contents constitute a work based on the Library (independent of +the use of the Library in a tool for writing it). Whether that is true depends +on what the Library does and what the program that uses the Library does. + +1. You may copy and distribute verbatim copies of the Library's complete +source code as you receive it, in any medium, provided that you conspicuously +and appropriately publish on each copy an appropriate copyright notice and +disclaimer of warranty; keep intact all the notices that refer to this License +and to the absence of any warranty; and distribute a copy of this License +along with the Library. + +You may charge a fee for the physical act of transferring a copy, and you may +at your option offer warranty protection in exchange for a fee. + +2. You may modify your copy or copies of the Library or any portion of it, +thus forming a work based on the Library, and copy and distribute such +modifications or work under the terms of Section 1 above, provided that you +also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices stating + that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no charge to all + third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a table of + data to be supplied by an application program that uses the facility, + other than as an argument passed when the facility is invoked, then you + must make a good faith effort to ensure that, in the event an + application does not supply such function or table, the facility still + operates, and performs whatever part of its purpose remains meaningful. + + (For example, a function in a library to compute square roots has a + purpose that is entirely well-defined independent of the application. + Therefore, Subsection 2d requires that any application-supplied function + or table used by this function must be optional: if the application does + not supply it, the square root function must still compute square + roots.) + + These requirements apply to the modified work as a whole. If + identifiable sections of that work are not derived from the Library, and + can be reasonably considered independent and separate works in + themselves, then this License, and its terms, do not apply to those + sections when you distribute them as separate works. But when you + distribute the same sections as part of a whole which is a work based on + the Library, the distribution of the whole must be on the terms of this + License, whose permissions for other licensees extend to the entire + whole, and thus to each and every part regardless of who wrote it. + + Thus, it is not the intent of this section to claim rights or contest + your rights to work written entirely by you; rather, the intent is to + exercise the right to control the distribution of derivative or + collective works based on the Library. + + In addition, mere aggregation of another work not based on the Library + with the Library (or with a work based on the Library) on a volume of a + storage or distribution medium does not bring the other work under the + scope of this License. + +3. You may opt to apply the terms of the ordinary GNU General Public License +instead of this License to a given copy of the Library. To do this, you must +alter all the notices that refer to this License, so that they refer to the +ordinary GNU General Public License, version 2, instead of to this License. +(If a newer version than version 2 of the ordinary GNU General Public License +has appeared, then you can specify that version instead if you wish.) Do not +make any other change in these notices. + +Once this change is made in a given copy, it is irreversible for that copy, so +the ordinary GNU General Public License applies to all subsequent copies and +derivative works made from that copy. + +This option is useful when you wish to copy part of the code of the Library +into a program that is not a library. + +4. You may copy and distribute the Library (or a portion or derivative of it, +under Section 2) in object code or executable form under the terms of Sections +1 and 2 above provided that you accompany it with the complete corresponding +machine-readable source code, which must be distributed under the terms of +Sections 1 and 2 above on a medium customarily used for software interchange. + +If distribution of object code is made by offering access to copy from a +designated place, then offering equivalent access to copy the source code from +the same place satisfies the requirement to distribute the source code, even +though third parties are not compelled to copy the source along with the +object code. + +5. A program that contains no derivative of any portion of the Library, but is +designed to work with the Library by being compiled or linked with it, is +called a "work that uses the Library". Such a work, in isolation, is not a +derivative work of the Library, and therefore falls outside the scope of +this License. + +However, linking a "work that uses the Library" with the Library creates an +executable that is a derivative of the Library (because it contains portions +of the Library), rather than a "work that uses the library". The executable is +therefore covered by this License. Section 6 states terms for distribution of +such executables. + +When a "work that uses the Library" uses material from a header file that is +part of the Library, the object code for the work may be a derivative work of +the Library even though the source code is not. Whether this is true is +especially significant if the work can be linked without the Library, or if +the work is itself a library. The threshold for this to be true is not +precisely defined by law. + +If such an object file uses only numerical parameters, data structure layouts +and accessors, and small macros and small inline functions (ten lines or less +in length), then the use of the object file is unrestricted, regardless of +whether it is legally a derivative work. (Executables containing this object +code plus portions of the Library will still fall under Section 6.) + +Otherwise, if the work is a derivative of the Library, you may distribute the +object code for the work under the terms of Section 6. Any executables +containing that work also fall under Section 6, whether or not they are linked +directly with the Library itself. + +6. As an exception to the Sections above, you may also combine or link a "work +that uses the Library" with the Library to produce a work containing portions +of the Library, and distribute that work under terms of your choice, provided +that the terms permit modification of the work for the customer's own use and +reverse engineering for debugging such modifications. + +You must give prominent notice with each copy of the work that the Library is +used in it and that the Library and its use are covered by this License. You +must supply a copy of this License. If the work during execution displays +copyright notices, you must include the copyright notice for the Library among +them, as well as a reference directing the user to the copy of this License. +Also, you must do one of these things: + + a) Accompany the work with the complete corresponding machine-readable + source code for the Library including whatever changes were used in the + work (which must be distributed under Sections 1 and 2 above); and, if + the work is an executable linked with the Library, with the complete + machine-readable "work that uses the Library", as object code and/or + source code, so that the user can modify the Library and then relink to + produce a modified executable containing the modified Library. (It is + understood that the user who changes the contents of definitions files + in the Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the Library. A + suitable mechanism is one that (1) uses at run time a copy of the + library already present on the user's computer system, rather than + copying library functions into the executable, and (2) will operate + properly with a modified version of the library, if the user installs + one, as long as the modified version is interface-compatible with the + version that the work was made with. + + c) Accompany the work with a written offer, valid for at least three years, + to give the same user the materials specified in Subsection 6a, above, + for a charge no more than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy from a + designated place, offer equivalent access to copy the above specified + materials from the same place. + + e) Verify that the user has already received a copy of these materials or + that you have already sent this user a copy. + +For an executable, the required form of the "work that uses the Library" must +include any data and utility programs needed for reproducing the executable +from it. However, as a special exception, the materials to be distributed need +not include anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the operating +system on which the executable runs, unless that component itself accompanies +the executable. + +It may happen that this requirement contradicts the license restrictions of +other proprietary libraries that do not normally accompany the operating +system. Such a contradiction means you cannot use both them and the Library +together in an executable that you distribute. + +7. You may place library facilities that are a work based on the Library +side-by-side in a single library together with other library facilities not +covered by this License, and distribute such a combined library, provided that +the separate distribution of the work based on the Library and of the other +library facilities is otherwise permitted, and provided that you do these two +things: + + a) Accompany the combined library with a copy of the same work based on the + Library, uncombined with any other library facilities. This must be + distributed under the terms of the Sections above. + + b) Give prominent notice with the combined library of the fact that part of + it is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + +8. You may not copy, modify, sublicense, link with, or distribute the Library +except as expressly provided under this License. Any attempt otherwise to +copy, modify, sublicense, link with, or distribute the Library is void, and +will automatically terminate your rights under this License. However, parties +who have received copies, or rights, from you under this License will not have +their licenses terminated so long as such parties remain in full compliance. + +9. You are not required to accept this License, since you have not signed it. +However, nothing else grants you permission to modify or distribute the +Library or its derivative works. These actions are prohibited by law if you do +not accept this License. Therefore, by modifying or distributing the Library +(or any work based on the Library), you indicate your acceptance of this +License to do so, and all its terms and conditions for copying, distributing +or modifying the Library or works based on it. + +10. Each time you redistribute the Library (or any work based on the Library), +the recipient automatically receives a license from the original licensor to +copy, distribute, link with or modify the Library subject to these terms and +conditions. You may not impose any further restrictions on the recipients' +exercise of the rights granted herein. You are not responsible for enforcing +compliance by third parties with this License. + +11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not excuse +you from the conditions of this License. If you cannot distribute so as to +satisfy simultaneously your obligations under this License and any other +pertinent obligations, then as a consequence you may not distribute the +Library at all. For example, if a patent license would not permit royalty-free +redistribution of the Library by all those who receive copies directly or +indirectly through you, then the only way you could satisfy both it and this +License would be to refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, and +the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any patents or +other property right claims or to contest validity of any such claims; this +section has the sole purpose of protecting the integrity of the free software +distribution system which is implemented by public license practices. Many +people have made generous contributions to the wide range of software +distributed through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing to +distribute software through any other system and a licensee cannot impose that +choice. + +This section is intended to make thoroughly clear what is believed to be a +consequence of the rest of this License. + +12. If the distribution and/or use of the Library is restricted in certain +countries either by patents or by copyrighted interfaces, the original +copyright holder who places the Library under this License may add an explicit +geographical distribution limitation excluding those countries, so that +distribution is permitted only in or among countries not thus excluded. In +such case, this License incorporates the limitation as if written in the body +of this License. + +13. The Free Software Foundation may publish revised and/or new versions of +the Lesser General Public License from time to time. Such new versions will be +similar in spirit to the present version, but may differ in detail to address +new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and "any later +version", you have the option of following the terms and conditions either of +that version or of any later version published by the Free Software +Foundation. If the Library does not specify a license version number, you may +choose any version ever published by the Free Software Foundation. + +14. If you wish to incorporate parts of the Library into other free programs +whose distribution conditions are incompatible with these, write to the author +to ask for permission. For software which is copyrighted by the Free Software +Foundation, write to the Free Software Foundation; we sometimes make +exceptions for this. Our decision will be guided by the two goals of +preserving the free status of all derivatives of our free software and of +promoting the sharing and reuse of software generally. + +NO WARRANTY + +15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR +THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE +STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE +LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND +PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, +YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + +16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL +ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE +THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE +OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR +DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR +A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH +HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/workbench/libs/codesetslib/ChangeLog b/workbench/libs/codesetslib/ChangeLog new file mode 100644 index 000000000..fbd1a690a --- /dev/null +++ b/workbench/libs/codesetslib/ChangeLog @@ -0,0 +1,316 @@ +---------------------------------------------------------- +codesets.library - Library for handling different codesets +---------------------------------------------------------- + +$Id: ChangeLog 88 2007-09-05 18:09:40Z thboeckel $ +$URL: https://codesetslib.svn.sourceforge.net/svnroot/codesetslib/trunk/ChangeLog $ + +2007-09-05 Thore Böckelmann + + * codesets.c: fixed a signedness warning. + * codesets.c: changed all CSA_SourceLen occurences to default to the string + length of the given CSA_Source. Additionally CSA_Source is checked to be a + valid pointer. A NULL pointer will result in a length of zero. + * codesets.doc: updated the docs to reflect the meaning of CSA_SourceLen. + +2007-08-20 Jens Langner + + * libinit.c: adapted library initialization interface to match the + changes done in e.g. TextEditor.mcc and which should mainly fix stack + related issues on MorphOS systems. + +#### 6.4 RELEASE ######################################################### + +2007-07-17 Thore Böckelmann + + * libinit.c: we use inline assembler for defining a new generic + stackswap_call() function that will be used to surround the initBase() + call by StackSwap() uses. This inline assembler should guarantee that + the function will not be inlined by the compiler and work properly on + all different supported platforms. + +2007-07-04 Thore Böckelmann + + * libinit.c: the StackSwapStruct is now placed on the stack instead of + allocating it in one block with the new stack itself, as that caused instant + crashes. + +2007-07-04 Jens Langner + + * codesets.c: CSA_ErrPtr can now be specified in the CodesetsUTF8ToStrA() + function to get informed about the amount of not convertable characters + found during the conversion. This fullfils feature request #1724860. + * libinit.c: initBase() will now be called in LibInit() again as this is + the smoother variant. But a StackSwap() construct protects us from stack + overruns on OS3/MOS machines. + +2007-07-01 Jens Langner + + * libinit.c: reworked library manager interface to use inline asm-based obtain + and release functions according to the latest output of idltool 52.7 + * codesets.doc: applied patch for CodesetsUTF8ToStrA() function kindly provided + by Steffen Gutmann. + +2007-06-13 Thore Böckelmann + + * debug.c: unified the _DPRINTF() functions for all platforms. + +2007-06-10 Jens Langner + + * #?/Makefile: minor update/optimization on Makefiles. + * libinit.c: partly reintroduced the initialization of codesets.library in + LibOpen() via a seperate init locking variable due to occuring stack issues + on OS3. + * debug.c: removed as it isn't required at all. + +2007-06-09 Jens Langner + + * libinit.c, misc: reworked library init code to call the initBase/freeBase() + function in the respective LibInit/LibExpunge() function instead and just deal + with the open counter and the late expunge flag in the LibOpen/LibClose() + functions. This should make the library initialization more clear and + hopefully also less error prone. + +2007-06-05 Thore Böckelmann + + * debug.c: fixed the variable parsing and the final output of the debug flags. + * developer/examples/makefile.os4: removed the -pipe option from the command + line as the OS4 native GCC does not support this yet. + +2007-05-24 Thore Böckelmann + + * libinit.c: the open counter is now bump as first action in LibOpen(), right + before calling baseInit(). baseInit() may scan some directories which may + take an unpredictable amount of time. While this happens the system may + invoke LibExpunge() which will immediately remove the library again from the + system, becasue the open counter is still zero. This should fix the random + crashes that some people were experiencing. Maybe a semaphore protected + LibExpunge() could do the same... + +#### 6.3 RELEASE ######################################################### + +2007-01-27 Jens Langner + + * Makefile: replaced the single target makefiles with a general Makefile + that contains HOST and TARGET os identification code via 'uname'. + This way we can easily compile codesets.library with a single makefile + for all our platforms. + * misc: bumped the year to 2007 + +2007-01-11 Ilkka Lehtoranta + + * base64.c: fixed bug #1608004 where b64 encoder never null terminated + the output string (when encoding to a string buffer). + +2006-12-04 Jens Langner + + * codesets.c: added alternative names to all ISO based codeset names as + some applications might want to query for these abbreviations instead. + * misc: fixed all still pending compiler warnings + +2006-09-20 Jens Langner + + * makefile.#?: added -Wwrite-string warning option to let the compiler + more easily find const/non-const issues. + * include/SDI_#?: update the sdi headers to latest versions. + * include/interfaces: fixed minor bug #1560515 where the interface + definition was slightly wrong. + +2006-09-06 Jens Langner + + * developer/include/inline: added a VBCC inline version of our current + codesets API. + +#### 6.2 RELEASE ######################################################### + +2006-05-20 Jens Langner + + * misc: reworked the whole API of the CodesetsFindBestA() function which + was more or less unused until today. The function now only accepts a + variable tagitem list. All former fixed arguments have to be set via + TagItems now. This should make the function more flexible for the + future. In addition, I added the cyrillic codeset autodetection code + kindly provided by Alexey Ivanov. codesets.library can now be used + together with the new CSA_CodesetsFamily attribute to specify the + family to which against the supplied text should be matched. This will + also allow to add more different codeset families in future to the + autodetection. Revised the autodocs and includes of CodesetsFindBest() + accordingly. + +2006-04-11 Jens Langner + + * Makefile.os4, libinit.c: reworked the OS4 library interface to + cleanly compile with newlib instead of clib2. Future OS4 version will + be built for newlib only as that is the standard runtime library for + AmigaOS4. + +2006-04-05 Jens Langner + + * libinit.c: slightly reworked the library init/expunge code to act a + bit more robust and don't use any semaphore during the library expunge + phase which in fact should cure the crashing on MorphOS during + expunging of the library. + +#### 6.1 RELEASE ######################################################### + +2006-03-27 Jens Langner + + * codesets.c: replaced the underscore char '_' use for an unknown char + during an UTF-8 conversion by a questionmark '?' as this might be + a more proper replacement and it doesn't trigger YAM's text + highlighting routines. + * codesets.c: slightly reworked the ReadTable() function. Reworked + the CodesetsUTF8ToStrA() function to correctly take respect of the + CSA_SourceLen attribute as documented. Previously it always + converted until strlen(src). Now in case the SourceLen is specified + it will stop converting the UTF8 string. + * libinit.c, base.h: moved the internal charset table initialization + routine from the LibInit() function to the first call of the + LibOpen(). This in fact should fix the various strange crash bugs + reported since the release of 6.0. + * init.c: changed the library base definitions to use "extern" and + also define "__UtilityBase" to please constraints of clib2. + +2006-03-14 Jens Langner + + * misc: switched from CVS to the new SVN (subversion) services of + sf.net. Should should definitly increase our project's flexibility. + +2006-02-28 Jens Langner + + * utils.c: removed the unnecessary snprintf()/sprintf() stuff as it + is not required anymore. + * codesets.c: fixed some minor compiler warnings and added some more + debug output. + * include/SDI_lib.h: updated to latest SDI_lib.h, which fixes some + compiler issues with GCC3+ under OS3. + +#### 6.0 RELEASE ######################################################### + +2006-02-25 Jens Langner + + * misc: final 6.0 release preparations. + * codesets.doc: updated the autodocs according to our latest changes + sind the open-source release of the library. Added some common + examples and also restructed it. + * codesets.c: changed all "struct MinList *" related functions to use + the newly defined "struct codesetList *" instead. This new type + instead of the public MinList type keeps those functions more + flexible in future. + * codesets.c: changed CodesetsListDelete() to be a tagitem receiving + function. This should make it much more usable in future. + * codesets.c: modified all CodesetsListX() functions to return a + boolean value to signal if an operating succeeded or not. + * libraries/codesets.h: changed all tag items to carry the shortcut + CSA instead of the long CODESETSA_XXXX string. This should make the + use of codesets.library more intuitive. + +2006-02-21 Jens Langner + + * codesets.c: changed the scandir function to use ExAll() instead + of using the FileInfoBlock structures. This should be slightly + faster and more consistent. + * codesets.c: replaced the previously added internal private + codeset list management functions with a more transparent + approach using separate functions (CodesetsListCreateA(), + CodesetsListDelete(), etc.). Now a user may generate an + unlimited number of own private codesets lists allowing him + to load additional codesets on runtime from either a directory, + file or already existing codesets. + +2006-02-15 Jens Langner + + * codesets.c: added a new internal "findPrivateCodesetList()" + function and made CodesetsFindA()/CodesetsFindBestA() aware of + the newly added CODESETSA_RefTask attribute which will allow a + user to directly specify the referencing task for searching for + a private codesets list. This in fact may only be used in + multithreaded applications where functions like CodesetsFindA() + are used from a different task/thread than the OpenLibrary() + of codesets.library was done. + +2006-02-14 Jens Langner + + * misc: implemented a private codeset management facility. Now + codeset.library will automatically scan an eventually existing + PROGDIR:Charsets and if present will load those codesets in a + per-task private list of codesets which will be added to the + global list of supported codesets as well. + * misc: implemented new CodesetsConvertStrA() library function which + will allow to specify a source and destination codeset as well as + a source string. The source string is then automatically converted + to the supplied destination string. This in turn should give a + plenty transparent method to convert strings from one codeset + to another. + * added the UTF-8 codeset to the internal list of supported codesets. + However, as the UTF-8 codeset is a very central codeset it is + treated special in such case that if UTF8Create() is used with a + string that is already encoded in UTF8, false will be returned. + +2005-12-16 Jens Langner + + * init.c: changed the system default charset identification routines + to use the GetDiskFontCtrl() function on AmigaOS4 to find out + the currently active system charset. In addition, if this + identification fails it will try to find out the charset by falling + back to checking ENV:CHARSET, then using ENV:LANGUAGE to parse ther + internal language<>codeset list and if this also fails it will + directly use locale.library to find out the language to check + our own internal fallback tables for default charset<>language + mapping. + * codesets.c: if running on AmigaOS4, codesets.library will now + automatically query diskfont.library for the existing codesets + and also load all existing mapping tables accordingly. It will + also check if all internally known codesets are already present + and if one of it was not loaded through diskfont.library, the + internal mapping tables will be used as well. + * debug.c,h: added a whole debugging output system adapted and + relicensed from the YAM project. Now an environment variable + can be usd (ENV:codesets.library.debug) to place debugging + tags and allow to differniate which output should be displayed + during runtime and which one not. This should hopefully make + the debugging of the library much more easier. + +2005-12-14 Jens Langner + + * codesets.c, codesets_table.h: updated internal codesets + implementations in accordance to the latest implementation in + SimpleMail. Now codesets.library also supports the Amiga-1251 + and ISO-8859-16. + * misc: did some general housekeeping code cleanups. + +2005-12-11 Jens Langner + + * developer/examples: ported the demo1.c application to all our + supported platforms + * include/SDI_*.h: update SDI headers to latest versions. + +2005-12-08 Jens Langner + + * bumped version to v6 as the GCC/OS4 porting may introduce some + oddities which we might eliminate during the v6 release cycle. + Please note that this first OS3/GCC and OS4 porting effort may + still contain some oddities here and there as large portions are + still untested. However, we may have some time to fix step by step + until we can prepare a v6.0 release. + * got rid of all common compiler warnings which should make bug + hunting much more easier. + * restructed sources to use othe latest SDI-headers for easily + maintaining the sources for all three platforms without + introducing heaps to #ifdef's. + * dropped all "register" attribute usages as modern compilers like + GCC normally know where to put variables on registers and where not + so these attributes are anyway not necessary. + * dropped smakefile and all 68k ASM parts as we are moving towards + building with GCC for all targets. + * restructed the build environment of codesets.library to use + GCC for all three major platforms (OS3/OS4/MOS). Also dropped + the SAS/C build process. Sorry, but SAS/C is really way too old + and too buggy to still be considered a sensible compiler and + maintaining codesets.library for the very same compiler should + eliminate some problems in future, too. + * partly applied OS4 porting patch supplied by Alexandre Balaban. + +2005-11-23 Alfonso Ranieri + + * initial checkin of LGPLed sources diff --git a/workbench/libs/codesetslib/README.aros b/workbench/libs/codesetslib/README.aros new file mode 100644 index 000000000..8833dab6c --- /dev/null +++ b/workbench/libs/codesetslib/README.aros @@ -0,0 +1,19 @@ +README.aros +=========== + +The codesets.library is hosted on Sourceforge: +http://sourceforge.net/projects/codesetslib/ + +Avoid by all means that the AROS port is modified independently from +the original Sourceforge project. + +TODO +---- +* Tests (endianness etc.) +* Adopt SDI macros to AROS and remove AROS compatibility macros +* Use stackswap code from libint.c for AROS +* Merge libinit-aros.c into libinit.c + +LEGAL +----- +codesets.library is released under the GNU Lesser General Public License. diff --git a/workbench/libs/codesetslib/charsets/ibm866.txt b/workbench/libs/codesetslib/charsets/ibm866.txt new file mode 100644 index 000000000..42ae5ef1c --- /dev/null +++ b/workbench/libs/codesetslib/charsets/ibm866.txt @@ -0,0 +1,280 @@ +Standard=IBM866 +AltStandard=CP866 +Name=IBM866 +Characterization=_("Cyrillic - Russian") +ReadOnly=1 +# +# Name: IBM's CP866 standard to Unicode table +# Unicode version: 2.0 +# Table version: 2.00 +# Table format: Format A +# Date: 04/24/96 +# Authors: Jens Langner +# Lori Brownell +# K.D. Chang +# General notes: This is an adapted version from the +# non-official Microsoft CP866 codepage +# +# Format: Three tab-separated columns +# Column #1 is the IBM866 code (in hex) +# Column #2 is the Unicode (in hex as 0xXXXX) +# Column #3 is the Unicode name (follows a comment sign, '#') +# +# The entries are in IBM866 order +# +0x00 0x0000 #NULL +0x01 0x0001 #START OF HEADING +0x02 0x0002 #START OF TEXT +0x03 0x0003 #END OF TEXT +0x04 0x0004 #END OF TRANSMISSION +0x05 0x0005 #ENQUIRY +0x06 0x0006 #ACKNOWLEDGE +0x07 0x0007 #BELL +0x08 0x0008 #BACKSPACE +0x09 0x0009 #HORIZONTAL TABULATION +0x0a 0x000a #LINE FEED +0x0b 0x000b #VERTICAL TABULATION +0x0c 0x000c #FORM FEED +0x0d 0x000d #CARRIAGE RETURN +0x0e 0x000e #SHIFT OUT +0x0f 0x000f #SHIFT IN +0x10 0x0010 #DATA LINK ESCAPE +0x11 0x0011 #DEVICE CONTROL ONE +0x12 0x0012 #DEVICE CONTROL TWO +0x13 0x0013 #DEVICE CONTROL THREE +0x14 0x0014 #DEVICE CONTROL FOUR +0x15 0x0015 #NEGATIVE ACKNOWLEDGE +0x16 0x0016 #SYNCHRONOUS IDLE +0x17 0x0017 #END OF TRANSMISSION BLOCK +0x18 0x0018 #CANCEL +0x19 0x0019 #END OF MEDIUM +0x1a 0x001c #SUBSTITUTE +0x1b 0x001b #ESCAPE +0x1c 0x007f #FILE SEPARATOR +0x1d 0x001d #GROUP SEPARATOR +0x1e 0x001e #RECORD SEPARATOR +0x1f 0x001f #UNIT SEPARATOR +0x20 0x0020 #SPACE +0x21 0x0021 #EXCLAMATION MARK +0x22 0x0022 #QUOTATION MARK +0x23 0x0023 #NUMBER SIGN +0x24 0x0024 #DOLLAR SIGN +0x25 0x0025 #PERCENT SIGN +0x26 0x0026 #AMPERSAND +0x27 0x0027 #APOSTROPHE +0x28 0x0028 #LEFT PARENTHESIS +0x29 0x0029 #RIGHT PARENTHESIS +0x2a 0x002a #ASTERISK +0x2b 0x002b #PLUS SIGN +0x2c 0x002c #COMMA +0x2d 0x002d #HYPHEN-MINUS +0x2e 0x002e #FULL STOP +0x2f 0x002f #SOLIDUS +0x30 0x0030 #DIGIT ZERO +0x31 0x0031 #DIGIT ONE +0x32 0x0032 #DIGIT TWO +0x33 0x0033 #DIGIT THREE +0x34 0x0034 #DIGIT FOUR +0x35 0x0035 #DIGIT FIVE +0x36 0x0036 #DIGIT SIX +0x37 0x0037 #DIGIT SEVEN +0x38 0x0038 #DIGIT EIGHT +0x39 0x0039 #DIGIT NINE +0x3a 0x003a #COLON +0x3b 0x003b #SEMICOLON +0x3c 0x003c #LESS-THAN SIGN +0x3d 0x003d #EQUALS SIGN +0x3e 0x003e #GREATER-THAN SIGN +0x3f 0x003f #QUESTION MARK +0x40 0x0040 #COMMERCIAL AT +0x41 0x0041 #LATIN CAPITAL LETTER A +0x42 0x0042 #LATIN CAPITAL LETTER B +0x43 0x0043 #LATIN CAPITAL LETTER C +0x44 0x0044 #LATIN CAPITAL LETTER D +0x45 0x0045 #LATIN CAPITAL LETTER E +0x46 0x0046 #LATIN CAPITAL LETTER F +0x47 0x0047 #LATIN CAPITAL LETTER G +0x48 0x0048 #LATIN CAPITAL LETTER H +0x49 0x0049 #LATIN CAPITAL LETTER I +0x4a 0x004a #LATIN CAPITAL LETTER J +0x4b 0x004b #LATIN CAPITAL LETTER K +0x4c 0x004c #LATIN CAPITAL LETTER L +0x4d 0x004d #LATIN CAPITAL LETTER M +0x4e 0x004e #LATIN CAPITAL LETTER N +0x4f 0x004f #LATIN CAPITAL LETTER O +0x50 0x0050 #LATIN CAPITAL LETTER P +0x51 0x0051 #LATIN CAPITAL LETTER Q +0x52 0x0052 #LATIN CAPITAL LETTER R +0x53 0x0053 #LATIN CAPITAL LETTER S +0x54 0x0054 #LATIN CAPITAL LETTER T +0x55 0x0055 #LATIN CAPITAL LETTER U +0x56 0x0056 #LATIN CAPITAL LETTER V +0x57 0x0057 #LATIN CAPITAL LETTER W +0x58 0x0058 #LATIN CAPITAL LETTER X +0x59 0x0059 #LATIN CAPITAL LETTER Y +0x5a 0x005a #LATIN CAPITAL LETTER Z +0x5b 0x005b #LEFT SQUARE BRACKET +0x5c 0x005c #REVERSE SOLIDUS +0x5d 0x005d #RIGHT SQUARE BRACKET +0x5e 0x005e #CIRCUMFLEX ACCENT +0x5f 0x005f #LOW LINE +0x60 0x0060 #GRAVE ACCENT +0x61 0x0061 #LATIN SMALL LETTER A +0x62 0x0062 #LATIN SMALL LETTER B +0x63 0x0063 #LATIN SMALL LETTER C +0x64 0x0064 #LATIN SMALL LETTER D +0x65 0x0065 #LATIN SMALL LETTER E +0x66 0x0066 #LATIN SMALL LETTER F +0x67 0x0067 #LATIN SMALL LETTER G +0x68 0x0068 #LATIN SMALL LETTER H +0x69 0x0069 #LATIN SMALL LETTER I +0x6a 0x006a #LATIN SMALL LETTER J +0x6b 0x006b #LATIN SMALL LETTER K +0x6c 0x006c #LATIN SMALL LETTER L +0x6d 0x006d #LATIN SMALL LETTER M +0x6e 0x006e #LATIN SMALL LETTER N +0x6f 0x006f #LATIN SMALL LETTER O +0x70 0x0070 #LATIN SMALL LETTER P +0x71 0x0071 #LATIN SMALL LETTER Q +0x72 0x0072 #LATIN SMALL LETTER R +0x73 0x0073 #LATIN SMALL LETTER S +0x74 0x0074 #LATIN SMALL LETTER T +0x75 0x0075 #LATIN SMALL LETTER U +0x76 0x0076 #LATIN SMALL LETTER V +0x77 0x0077 #LATIN SMALL LETTER W +0x78 0x0078 #LATIN SMALL LETTER X +0x79 0x0079 #LATIN SMALL LETTER Y +0x7a 0x007a #LATIN SMALL LETTER Z +0x7b 0x007b #LEFT CURLY BRACKET +0x7c 0x007c #VERTICAL LINE +0x7d 0x007d #RIGHT CURLY BRACKET +0x7e 0x007e #TILDE +0x7f 0x001a #DELETE +0x80 0x0410 #CYRILLIC CAPITAL LETTER A +0x81 0x0411 #CYRILLIC CAPITAL LETTER BE +0x82 0x0412 #CYRILLIC CAPITAL LETTER VE +0x83 0x0413 #CYRILLIC CAPITAL LETTER GHE +0x84 0x0414 #CYRILLIC CAPITAL LETTER DE +0x85 0x0415 #CYRILLIC CAPITAL LETTER IE +0x86 0x0416 #CYRILLIC CAPITAL LETTER ZHE +0x87 0x0417 #CYRILLIC CAPITAL LETTER ZE +0x88 0x0418 #CYRILLIC CAPITAL LETTER I +0x89 0x0419 #CYRILLIC CAPITAL LETTER SHORT I +0x8a 0x041a #CYRILLIC CAPITAL LETTER KA +0x8b 0x041b #CYRILLIC CAPITAL LETTER EL +0x8c 0x041c #CYRILLIC CAPITAL LETTER EM +0x8d 0x041d #CYRILLIC CAPITAL LETTER EN +0x8e 0x041e #CYRILLIC CAPITAL LETTER O +0x8f 0x041f #CYRILLIC CAPITAL LETTER PE +0x90 0x0420 #CYRILLIC CAPITAL LETTER ER +0x91 0x0421 #CYRILLIC CAPITAL LETTER ES +0x92 0x0422 #CYRILLIC CAPITAL LETTER TE +0x93 0x0423 #CYRILLIC CAPITAL LETTER U +0x94 0x0424 #CYRILLIC CAPITAL LETTER EF +0x95 0x0425 #CYRILLIC CAPITAL LETTER HA +0x96 0x0426 #CYRILLIC CAPITAL LETTER TSE +0x97 0x0427 #CYRILLIC CAPITAL LETTER CHE +0x98 0x0428 #CYRILLIC CAPITAL LETTER SHA +0x99 0x0429 #CYRILLIC CAPITAL LETTER SHCHA +0x9a 0x042a #CYRILLIC CAPITAL LETTER HARD SIGN +0x9b 0x042b #CYRILLIC CAPITAL LETTER YERU +0x9c 0x042c #CYRILLIC CAPITAL LETTER SOFT SIGN +0x9d 0x042d #CYRILLIC CAPITAL LETTER E +0x9e 0x042e #CYRILLIC CAPITAL LETTER YU +0x9f 0x042f #CYRILLIC CAPITAL LETTER YA +0xa0 0x0430 #CYRILLIC SMALL LETTER A +0xa1 0x0431 #CYRILLIC SMALL LETTER BE +0xa2 0x0432 #CYRILLIC SMALL LETTER VE +0xa3 0x0433 #CYRILLIC SMALL LETTER GHE +0xa4 0x0434 #CYRILLIC SMALL LETTER DE +0xa5 0x0435 #CYRILLIC SMALL LETTER IE +0xa6 0x0436 #CYRILLIC SMALL LETTER ZHE +0xa7 0x0437 #CYRILLIC SMALL LETTER ZE +0xa8 0x0438 #CYRILLIC SMALL LETTER I +0xa9 0x0439 #CYRILLIC SMALL LETTER SHORT I +0xaa 0x043a #CYRILLIC SMALL LETTER KA +0xab 0x043b #CYRILLIC SMALL LETTER EL +0xac 0x043c #CYRILLIC SMALL LETTER EM +0xad 0x043d #CYRILLIC SMALL LETTER EN +0xae 0x043e #CYRILLIC SMALL LETTER O +0xaf 0x043f #CYRILLIC SMALL LETTER PE +0xb0 0x2591 #LIGHT SHADE +0xb1 0x2592 #MEDIUM SHADE +0xb2 0x2593 #DARK SHADE +0xb3 0x2502 #BOX DRAWINGS LIGHT VERTICAL +0xb4 0x2524 #BOX DRAWINGS LIGHT VERTICAL AND LEFT +0xb5 0x2561 #BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE +0xb6 0x2562 #BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE +0xb7 0x2556 #BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE +0xb8 0x2555 #BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE +0xb9 0x2563 #BOX DRAWINGS DOUBLE VERTICAL AND LEFT +0xba 0x2551 #BOX DRAWINGS DOUBLE VERTICAL +0xbb 0x2557 #BOX DRAWINGS DOUBLE DOWN AND LEFT +0xbc 0x255d #BOX DRAWINGS DOUBLE UP AND LEFT +0xbd 0x255c #BOX DRAWINGS UP DOUBLE AND LEFT SINGLE +0xbe 0x255b #BOX DRAWINGS UP SINGLE AND LEFT DOUBLE +0xbf 0x2510 #BOX DRAWINGS LIGHT DOWN AND LEFT +0xc0 0x2514 #BOX DRAWINGS LIGHT UP AND RIGHT +0xc1 0x2534 #BOX DRAWINGS LIGHT UP AND HORIZONTAL +0xc2 0x252c #BOX DRAWINGS LIGHT DOWN AND HORIZONTAL +0xc3 0x251c #BOX DRAWINGS LIGHT VERTICAL AND RIGHT +0xc4 0x2500 #BOX DRAWINGS LIGHT HORIZONTAL +0xc5 0x253c #BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL +0xc6 0x255e #BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE +0xc7 0x255f #BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE +0xc8 0x255a #BOX DRAWINGS DOUBLE UP AND RIGHT +0xc9 0x2554 #BOX DRAWINGS DOUBLE DOWN AND RIGHT +0xca 0x2569 #BOX DRAWINGS DOUBLE UP AND HORIZONTAL +0xcb 0x2566 #BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL +0xcc 0x2560 #BOX DRAWINGS DOUBLE VERTICAL AND RIGHT +0xcd 0x2550 #BOX DRAWINGS DOUBLE HORIZONTAL +0xce 0x256c #BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL +0xcf 0x2567 #BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE +0xd0 0x2568 #BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE +0xd1 0x2564 #BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE +0xd2 0x2565 #BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE +0xd3 0x2559 #BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE +0xd4 0x2558 #BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE +0xd5 0x2552 #BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE +0xd6 0x2553 #BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE +0xd7 0x256b #BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE +0xd8 0x256a #BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE +0xd9 0x2518 #BOX DRAWINGS LIGHT UP AND LEFT +0xda 0x250c #BOX DRAWINGS LIGHT DOWN AND RIGHT +0xdb 0x2588 #FULL BLOCK +0xdc 0x2584 #LOWER HALF BLOCK +0xdd 0x258c #LEFT HALF BLOCK +0xde 0x2590 #RIGHT HALF BLOCK +0xdf 0x2580 #UPPER HALF BLOCK +0xe0 0x0440 #CYRILLIC SMALL LETTER ER +0xe1 0x0441 #CYRILLIC SMALL LETTER ES +0xe2 0x0442 #CYRILLIC SMALL LETTER TE +0xe3 0x0443 #CYRILLIC SMALL LETTER U +0xe4 0x0444 #CYRILLIC SMALL LETTER EF +0xe5 0x0445 #CYRILLIC SMALL LETTER HA +0xe6 0x0446 #CYRILLIC SMALL LETTER TSE +0xe7 0x0447 #CYRILLIC SMALL LETTER CHE +0xe8 0x0448 #CYRILLIC SMALL LETTER SHA +0xe9 0x0449 #CYRILLIC SMALL LETTER SHCHA +0xea 0x044a #CYRILLIC SMALL LETTER HARD SIGN +0xeb 0x044b #CYRILLIC SMALL LETTER YERU +0xec 0x044c #CYRILLIC SMALL LETTER SOFT SIGN +0xed 0x044d #CYRILLIC SMALL LETTER E +0xee 0x044e #CYRILLIC SMALL LETTER YU +0xef 0x044f #CYRILLIC SMALL LETTER YA +0xf0 0x0401 #CYRILLIC CAPITAL LETTER IO +0xf1 0x0451 #CYRILLIC SMALL LETTER IO +0xf2 0x0404 #CYRILLIC CAPITAL LETTER UKRAINIAN IE +0xf3 0x0454 #CYRILLIC SMALL LETTER UKRAINIAN IE +0xf4 0x0407 #CYRILLIC CAPITAL LETTER YI +0xf5 0x0457 #CYRILLIC SMALL LETTER YI +0xf6 0x040e #CYRILLIC CAPITAL LETTER SHORT U +0xf7 0x045e #CYRILLIC SMALL LETTER SHORT U +0xf8 0x00b0 #DEGREE SIGN +0xf9 0x2219 #BULLET OPERATOR +0xfa 0x00b7 #MIDDLE DOT +0xfb 0x221a #SQUARE ROOT +0xfc 0x2116 #NUMERO SIGN +0xfd 0x00a4 #CURRENCY SIGN +0xfe 0x25a0 #BLACK SQUARE +0xff 0x00a0 #NO-BREAK SPACE diff --git a/workbench/libs/codesetslib/charsets/iso8859-10.txt b/workbench/libs/codesetslib/charsets/iso8859-10.txt new file mode 100755 index 000000000..e86ad1e9c --- /dev/null +++ b/workbench/libs/codesetslib/charsets/iso8859-10.txt @@ -0,0 +1,202 @@ +Standard=ISO-8859-10 +Name=Latin6 +Characterization=_("Nordic") +ReadOnly=0 + +# Format +# =II U+UUUU NAME +# II - HEX Value in this codeset +# UUUU - the Unicode Mappung +# NAME - the Unicode name + +=20 U+0020 SPACE +=21 U+0021 EXCLAMATION MARK +=22 U+0022 QUOTATION MARK +=23 U+0023 NUMBER SIGN +=24 U+0024 DOLLAR SIGN +=25 U+0025 PERCENT SIGN +=26 U+0026 AMPERSAND +=27 U+0027 APOSTROPHE +=28 U+0028 LEFT PARENTHESIS +=29 U+0029 RIGHT PARENTHESIS +=2A U+002A ASTERISK +=2B U+002B PLUS SIGN +=2C U+002C COMMA +=2D U+002D HYPHEN-MINUS +=2E U+002E FULL STOP +=2F U+002F SOLIDUS +=30 U+0030 DIGIT ZERO +=31 U+0031 DIGIT ONE +=32 U+0032 DIGIT TWO +=33 U+0033 DIGIT THREE +=34 U+0034 DIGIT FOUR +=35 U+0035 DIGIT FIVE +=36 U+0036 DIGIT SIX +=37 U+0037 DIGIT SEVEN +=38 U+0038 DIGIT EIGHT +=39 U+0039 DIGIT NINE +=3A U+003A COLON +=3B U+003B SEMICOLON +=3C U+003C LESS-THAN SIGN +=3D U+003D EQUALS SIGN +=3E U+003E GREATER-THAN SIGN +=3F U+003F QUESTION MARK +=40 U+0040 COMMERCIAL AT +=41 U+0041 LATIN CAPITAL LETTER A +=42 U+0042 LATIN CAPITAL LETTER B +=43 U+0043 LATIN CAPITAL LETTER C +=44 U+0044 LATIN CAPITAL LETTER D +=45 U+0045 LATIN CAPITAL LETTER E +=46 U+0046 LATIN CAPITAL LETTER F +=47 U+0047 LATIN CAPITAL LETTER G +=48 U+0048 LATIN CAPITAL LETTER H +=49 U+0049 LATIN CAPITAL LETTER I +=4A U+004A LATIN CAPITAL LETTER J +=4B U+004B LATIN CAPITAL LETTER K +=4C U+004C LATIN CAPITAL LETTER L +=4D U+004D LATIN CAPITAL LETTER M +=4E U+004E LATIN CAPITAL LETTER N +=4F U+004F LATIN CAPITAL LETTER O +=50 U+0050 LATIN CAPITAL LETTER P +=51 U+0051 LATIN CAPITAL LETTER Q +=52 U+0052 LATIN CAPITAL LETTER R +=53 U+0053 LATIN CAPITAL LETTER S +=54 U+0054 LATIN CAPITAL LETTER T +=55 U+0055 LATIN CAPITAL LETTER U +=56 U+0056 LATIN CAPITAL LETTER V +=57 U+0057 LATIN CAPITAL LETTER W +=58 U+0058 LATIN CAPITAL LETTER X +=59 U+0059 LATIN CAPITAL LETTER Y +=5A U+005A LATIN CAPITAL LETTER Z +=5B U+005B LEFT SQUARE BRACKET +=5C U+005C REVERSE SOLIDUS +=5D U+005D RIGHT SQUARE BRACKET +=5E U+005E CIRCUMFLEX ACCENT +=5F U+005F LOW LINE +=60 U+0060 GRAVE ACCENT +=61 U+0061 LATIN SMALL LETTER A +=62 U+0062 LATIN SMALL LETTER B +=63 U+0063 LATIN SMALL LETTER C +=64 U+0064 LATIN SMALL LETTER D +=65 U+0065 LATIN SMALL LETTER E +=66 U+0066 LATIN SMALL LETTER F +=67 U+0067 LATIN SMALL LETTER G +=68 U+0068 LATIN SMALL LETTER H +=69 U+0069 LATIN SMALL LETTER I +=6A U+006A LATIN SMALL LETTER J +=6B U+006B LATIN SMALL LETTER K +=6C U+006C LATIN SMALL LETTER L +=6D U+006D LATIN SMALL LETTER M +=6E U+006E LATIN SMALL LETTER N +=6F U+006F LATIN SMALL LETTER O +=70 U+0070 LATIN SMALL LETTER P +=71 U+0071 LATIN SMALL LETTER Q +=72 U+0072 LATIN SMALL LETTER R +=73 U+0073 LATIN SMALL LETTER S +=74 U+0074 LATIN SMALL LETTER T +=75 U+0075 LATIN SMALL LETTER U +=76 U+0076 LATIN SMALL LETTER V +=77 U+0077 LATIN SMALL LETTER W +=78 U+0078 LATIN SMALL LETTER X +=79 U+0079 LATIN SMALL LETTER Y +=7A U+007A LATIN SMALL LETTER Z +=7B U+007B LEFT CURLY BRACKET +=7C U+007C VERTICAL LINE +=7D U+007D RIGHT CURLY BRACKET +=7E U+007E TILDE +=A0 U+00A0 NO-BREAK SPACE +=A1 U+0104 LATIN CAPITAL LETTER A WITH OGONEK +=A2 U+0112 LATIN CAPITAL LETTER E WITH MACRON +=A3 U+0122 LATIN CAPITAL LETTER G WITH CEDILLA +=A4 U+012A LATIN CAPITAL LETTER I WITH MACRON +=A5 U+0128 LATIN CAPITAL LETTER I WITH TILDE +=A6 U+0136 LATIN CAPITAL LETTER K WITH CEDILLA +=A7 U+00A7 SECTION SIGN +=A8 U+013B LATIN CAPITAL LETTER L WITH CEDILLA +=A9 U+0110 LATIN CAPITAL LETTER D WITH STROKE +=AA U+0160 LATIN CAPITAL LETTER S WITH CARON +=AB U+0166 LATIN CAPITAL LETTER T WITH STROKE +=AC U+017D LATIN CAPITAL LETTER Z WITH CARON +=AD U+00AD SOFT HYPHEN +=AE U+016A LATIN CAPITAL LETTER U WITH MACRON +=AF U+014A LATIN CAPITAL LETTER ENG +=B0 U+00B0 DEGREE SIGN +=B1 U+0105 LATIN SMALL LETTER A WITH OGONEK +=B2 U+0113 LATIN SMALL LETTER E WITH MACRON +=B3 U+0123 LATIN SMALL LETTER G WITH CEDILLA +=B4 U+012B LATIN SMALL LETTER I WITH MACRON +=B5 U+0129 LATIN SMALL LETTER I WITH TILDE +=B6 U+0137 LATIN SMALL LETTER K WITH CEDILLA +=B7 U+00B7 MIDDLE DOT +=B8 U+013C LATIN SMALL LETTER L WITH CEDILLA +=B9 U+0111 LATIN SMALL LETTER D WITH STROKE +=BA U+0161 LATIN SMALL LETTER S WITH CARON +=BB U+0167 LATIN SMALL LETTER T WITH STROKE +=BC U+017E LATIN SMALL LETTER Z WITH CARON +=BD U+2015 HORIZONTAL BAR +=BE U+016B LATIN SMALL LETTER U WITH MACRON +=BF U+014B LATIN SMALL LETTER ENG +=C0 U+0100 LATIN CAPITAL LETTER A WITH MACRON +=C1 U+00C1 LATIN CAPITAL LETTER A WITH ACUTE +=C2 U+00C2 LATIN CAPITAL LETTER A WITH CIRCUMFLEX +=C3 U+00C3 LATIN CAPITAL LETTER A WITH TILDE +=C4 U+00C4 LATIN CAPITAL LETTER A WITH DIAERESIS +=C5 U+00C5 LATIN CAPITAL LETTER A WITH RING ABOVE +=C6 U+00C6 LATIN CAPITAL LETTER AE +=C7 U+012E LATIN CAPITAL LETTER I WITH OGONEK +=C8 U+010C LATIN CAPITAL LETTER C WITH CARON +=C9 U+00C9 LATIN CAPITAL LETTER E WITH ACUTE +=CA U+0118 LATIN CAPITAL LETTER E WITH OGONEK +=CB U+00CB LATIN CAPITAL LETTER E WITH DIAERESIS +=CC U+0116 LATIN CAPITAL LETTER E WITH DOT ABOVE +=CD U+00CD LATIN CAPITAL LETTER I WITH ACUTE +=CE U+00CE LATIN CAPITAL LETTER I WITH CIRCUMFLEX +=CF U+00CF LATIN CAPITAL LETTER I WITH DIAERESIS +=D0 U+00D0 LATIN CAPITAL LETTER ETH +=D1 U+0145 LATIN CAPITAL LETTER N WITH CEDILLA +=D2 U+014C LATIN CAPITAL LETTER O WITH MACRON +=D3 U+00D3 LATIN CAPITAL LETTER O WITH ACUTE +=D4 U+00D4 LATIN CAPITAL LETTER O WITH CIRCUMFLEX +=D5 U+00D5 LATIN CAPITAL LETTER O WITH TILDE +=D6 U+00D6 LATIN CAPITAL LETTER O WITH DIAERESIS +=D7 U+0168 LATIN CAPITAL LETTER U WITH TILDE +=D8 U+00D8 LATIN CAPITAL LETTER O WITH STROKE +=D9 U+0172 LATIN CAPITAL LETTER U WITH OGONEK +=DA U+00DA LATIN CAPITAL LETTER U WITH ACUTE +=DB U+00DB LATIN CAPITAL LETTER U WITH CIRCUMFLEX +=DC U+00DC LATIN CAPITAL LETTER U WITH DIAERESIS +=DD U+00DD LATIN CAPITAL LETTER Y WITH ACUTE +=DE U+00DE LATIN CAPITAL LETTER THORN +=DF U+00DF LATIN SMALL LETTER SHARP S +=E0 U+0101 LATIN SMALL LETTER A WITH MACRON +=E1 U+00E1 LATIN SMALL LETTER A WITH ACUTE +=E2 U+00E2 LATIN SMALL LETTER A WITH CIRCUMFLEX +=E3 U+00E3 LATIN SMALL LETTER A WITH TILDE +=E4 U+00E4 LATIN SMALL LETTER A WITH DIAERESIS +=E5 U+00E5 LATIN SMALL LETTER A WITH RING ABOVE +=E6 U+00E6 LATIN SMALL LETTER AE +=E7 U+012F LATIN SMALL LETTER I WITH OGONEK +=E8 U+010D LATIN SMALL LETTER C WITH CARON +=E9 U+00E9 LATIN SMALL LETTER E WITH ACUTE +=EA U+0119 LATIN SMALL LETTER E WITH OGONEK +=EB U+00EB LATIN SMALL LETTER E WITH DIAERESIS +=EC U+0117 LATIN SMALL LETTER E WITH DOT ABOVE +=ED U+00ED LATIN SMALL LETTER I WITH ACUTE +=EE U+00EE LATIN SMALL LETTER I WITH CIRCUMFLEX +=EF U+00EF LATIN SMALL LETTER I WITH DIAERESIS +=F0 U+00F0 LATIN SMALL LETTER ETH +=F1 U+0146 LATIN SMALL LETTER N WITH CEDILLA +=F2 U+014D LATIN SMALL LETTER O WITH MACRON +=F3 U+00F3 LATIN SMALL LETTER O WITH ACUTE +=F4 U+00F4 LATIN SMALL LETTER O WITH CIRCUMFLEX +=F5 U+00F5 LATIN SMALL LETTER O WITH TILDE +=F6 U+00F6 LATIN SMALL LETTER O WITH DIAERESIS +=F7 U+0169 LATIN SMALL LETTER U WITH TILDE +=F8 U+00F8 LATIN SMALL LETTER O WITH STROKE +=F9 U+0173 LATIN SMALL LETTER U WITH OGONEK +=FA U+00FA LATIN SMALL LETTER U WITH ACUTE +=FB U+00FB LATIN SMALL LETTER U WITH CIRCUMFLEX +=FC U+00FC LATIN SMALL LETTER U WITH DIAERESIS +=FD U+00FD LATIN SMALL LETTER Y WITH ACUTE +=FE U+00FE LATIN SMALL LETTER THORN +=FF U+0138 LATIN SMALL LETTER KRA diff --git a/workbench/libs/codesetslib/charsets/iso8859-7.txt b/workbench/libs/codesetslib/charsets/iso8859-7.txt new file mode 100755 index 000000000..bcecf4901 --- /dev/null +++ b/workbench/libs/codesetslib/charsets/iso8859-7.txt @@ -0,0 +1,199 @@ +Standard=ISO-8859-7 +Name=LatinGreek +Characterization=_("Greek") +ReadOnly=0 + +# Format +# =II U+UUUU NAME +# II - HEX Value in this codeset +# UUUU - the Unicode Mappung +# NAME - the Unicode name + +=20 U+0020 SPACE +=21 U+0021 EXCLAMATION MARK +=22 U+0022 QUOTATION MARK +=23 U+0023 NUMBER SIGN +=24 U+0024 DOLLAR SIGN +=25 U+0025 PERCENT SIGN +=26 U+0026 AMPERSAND +=27 U+0027 APOSTROPHE +=28 U+0028 LEFT PARENTHESIS +=29 U+0029 RIGHT PARENTHESIS +=2A U+002A ASTERISK +=2B U+002B PLUS SIGN +=2C U+002C COMMA +=2D U+002D HYPHEN-MINUS +=2E U+002E FULL STOP +=2F U+002F SOLIDUS +=30 U+0030 DIGIT ZERO +=31 U+0031 DIGIT ONE +=32 U+0032 DIGIT TWO +=33 U+0033 DIGIT THREE +=34 U+0034 DIGIT FOUR +=35 U+0035 DIGIT FIVE +=36 U+0036 DIGIT SIX +=37 U+0037 DIGIT SEVEN +=38 U+0038 DIGIT EIGHT +=39 U+0039 DIGIT NINE +=3A U+003A COLON +=3B U+003B SEMICOLON +=3C U+003C LESS-THAN SIGN +=3D U+003D EQUALS SIGN +=3E U+003E GREATER-THAN SIGN +=3F U+003F QUESTION MARK +=40 U+0040 COMMERCIAL AT +=41 U+0041 LATIN CAPITAL LETTER A +=42 U+0042 LATIN CAPITAL LETTER B +=43 U+0043 LATIN CAPITAL LETTER C +=44 U+0044 LATIN CAPITAL LETTER D +=45 U+0045 LATIN CAPITAL LETTER E +=46 U+0046 LATIN CAPITAL LETTER F +=47 U+0047 LATIN CAPITAL LETTER G +=48 U+0048 LATIN CAPITAL LETTER H +=49 U+0049 LATIN CAPITAL LETTER I +=4A U+004A LATIN CAPITAL LETTER J +=4B U+004B LATIN CAPITAL LETTER K +=4C U+004C LATIN CAPITAL LETTER L +=4D U+004D LATIN CAPITAL LETTER M +=4E U+004E LATIN CAPITAL LETTER N +=4F U+004F LATIN CAPITAL LETTER O +=50 U+0050 LATIN CAPITAL LETTER P +=51 U+0051 LATIN CAPITAL LETTER Q +=52 U+0052 LATIN CAPITAL LETTER R +=53 U+0053 LATIN CAPITAL LETTER S +=54 U+0054 LATIN CAPITAL LETTER T +=55 U+0055 LATIN CAPITAL LETTER U +=56 U+0056 LATIN CAPITAL LETTER V +=57 U+0057 LATIN CAPITAL LETTER W +=58 U+0058 LATIN CAPITAL LETTER X +=59 U+0059 LATIN CAPITAL LETTER Y +=5A U+005A LATIN CAPITAL LETTER Z +=5B U+005B LEFT SQUARE BRACKET +=5C U+005C REVERSE SOLIDUS +=5D U+005D RIGHT SQUARE BRACKET +=5E U+005E CIRCUMFLEX ACCENT +=5F U+005F LOW LINE +=60 U+0060 GRAVE ACCENT +=61 U+0061 LATIN SMALL LETTER A +=62 U+0062 LATIN SMALL LETTER B +=63 U+0063 LATIN SMALL LETTER C +=64 U+0064 LATIN SMALL LETTER D +=65 U+0065 LATIN SMALL LETTER E +=66 U+0066 LATIN SMALL LETTER F +=67 U+0067 LATIN SMALL LETTER G +=68 U+0068 LATIN SMALL LETTER H +=69 U+0069 LATIN SMALL LETTER I +=6A U+006A LATIN SMALL LETTER J +=6B U+006B LATIN SMALL LETTER K +=6C U+006C LATIN SMALL LETTER L +=6D U+006D LATIN SMALL LETTER M +=6E U+006E LATIN SMALL LETTER N +=6F U+006F LATIN SMALL LETTER O +=70 U+0070 LATIN SMALL LETTER P +=71 U+0071 LATIN SMALL LETTER Q +=72 U+0072 LATIN SMALL LETTER R +=73 U+0073 LATIN SMALL LETTER S +=74 U+0074 LATIN SMALL LETTER T +=75 U+0075 LATIN SMALL LETTER U +=76 U+0076 LATIN SMALL LETTER V +=77 U+0077 LATIN SMALL LETTER W +=78 U+0078 LATIN SMALL LETTER X +=79 U+0079 LATIN SMALL LETTER Y +=7A U+007A LATIN SMALL LETTER Z +=7B U+007B LEFT CURLY BRACKET +=7C U+007C VERTICAL LINE +=7D U+007D RIGHT CURLY BRACKET +=7E U+007E TILDE +=A0 U+00A0 NO-BREAK SPACE +=A1 U+2018 LEFT SINGLE QUOTATION MARK +=A2 U+2019 RIGHT SINGLE QUOTATION MARK +=A3 U+00A3 POUND SIGN +=A4 U+20AC EURO SIGN +=A5 U+20AF DRACHMA SIGN +=A6 U+00A6 BROKEN BAR +=A7 U+00A7 SECTION SIGN +=A8 U+00A8 DIAERESIS +=A9 U+00A9 COPYRIGHT SIGN +=AA U+037A GREEK YPOGEGRAMMENI +=AB U+00AB LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +=AC U+00AC NOT SIGN +=AD U+00AD SOFT HYPHEN +=AF U+2015 HORIZONTAL BAR +=B0 U+00B0 DEGREE SIGN +=B1 U+00B1 PLUS-MINUS SIGN +=B2 U+00B2 SUPERSCRIPT TWO +=B3 U+00B3 SUPERSCRIPT THREE +=B4 U+0384 GREEK TONOS +=B5 U+0385 GREEK DIALYTIKA TONOS +=B6 U+0386 GREEK CAPITAL LETTER ALPHA WITH TONOS +=B7 U+00B7 MIDDLE DOT +=B8 U+0388 GREEK CAPITAL LETTER EPSILON WITH TONOS +=B9 U+0389 GREEK CAPITAL LETTER ETA WITH TONOS +=BA U+038A GREEK CAPITAL LETTER IOTA WITH TONOS +=BB U+00BB RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +=BC U+038C GREEK CAPITAL LETTER OMICRON WITH TONOS +=BD U+00BD VULGAR FRACTION ONE HALF +=BE U+038E GREEK CAPITAL LETTER UPSILON WITH TONOS +=BF U+038F GREEK CAPITAL LETTER OMEGA WITH TONOS +=C0 U+0390 GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS +=C1 U+0391 GREEK CAPITAL LETTER ALPHA +=C2 U+0392 GREEK CAPITAL LETTER BETA +=C3 U+0393 GREEK CAPITAL LETTER GAMMA +=C4 U+0394 GREEK CAPITAL LETTER DELTA +=C5 U+0395 GREEK CAPITAL LETTER EPSILON +=C6 U+0396 GREEK CAPITAL LETTER ZETA +=C7 U+0397 GREEK CAPITAL LETTER ETA +=C8 U+0398 GREEK CAPITAL LETTER THETA +=C9 U+0399 GREEK CAPITAL LETTER IOTA +=CA U+039A GREEK CAPITAL LETTER KAPPA +=CB U+039B GREEK CAPITAL LETTER LAMDA +=CC U+039C GREEK CAPITAL LETTER MU +=CD U+039D GREEK CAPITAL LETTER NU +=CE U+039E GREEK CAPITAL LETTER XI +=CF U+039F GREEK CAPITAL LETTER OMICRON +=D0 U+03A0 GREEK CAPITAL LETTER PI +=D1 U+03A1 GREEK CAPITAL LETTER RHO +=D3 U+03A3 GREEK CAPITAL LETTER SIGMA +=D4 U+03A4 GREEK CAPITAL LETTER TAU +=D5 U+03A5 GREEK CAPITAL LETTER UPSILON +=D6 U+03A6 GREEK CAPITAL LETTER PHI +=D7 U+03A7 GREEK CAPITAL LETTER CHI +=D8 U+03A8 GREEK CAPITAL LETTER PSI +=D9 U+03A9 GREEK CAPITAL LETTER OMEGA +=DA U+03AA GREEK CAPITAL LETTER IOTA WITH DIALYTIKA +=DB U+03AB GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA +=DC U+03AC GREEK SMALL LETTER ALPHA WITH TONOS +=DD U+03AD GREEK SMALL LETTER EPSILON WITH TONOS +=DE U+03AE GREEK SMALL LETTER ETA WITH TONOS +=DF U+03AF GREEK SMALL LETTER IOTA WITH TONOS +=E0 U+03B0 GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS +=E1 U+03B1 GREEK SMALL LETTER ALPHA +=E2 U+03B2 GREEK SMALL LETTER BETA +=E3 U+03B3 GREEK SMALL LETTER GAMMA +=E4 U+03B4 GREEK SMALL LETTER DELTA +=E5 U+03B5 GREEK SMALL LETTER EPSILON +=E6 U+03B6 GREEK SMALL LETTER ZETA +=E7 U+03B7 GREEK SMALL LETTER ETA +=E8 U+03B8 GREEK SMALL LETTER THETA +=E9 U+03B9 GREEK SMALL LETTER IOTA +=EA U+03BA GREEK SMALL LETTER KAPPA +=EB U+03BB GREEK SMALL LETTER LAMDA +=EC U+03BC GREEK SMALL LETTER MU +=ED U+03BD GREEK SMALL LETTER NU +=EE U+03BE GREEK SMALL LETTER XI +=EF U+03BF GREEK SMALL LETTER OMICRON +=F0 U+03C0 GREEK SMALL LETTER PI +=F1 U+03C1 GREEK SMALL LETTER RHO +=F2 U+03C2 GREEK SMALL LETTER FINAL SIGMA +=F3 U+03C3 GREEK SMALL LETTER SIGMA +=F4 U+03C4 GREEK SMALL LETTER TAU +=F5 U+03C5 GREEK SMALL LETTER UPSILON +=F6 U+03C6 GREEK SMALL LETTER PHI +=F7 U+03C7 GREEK SMALL LETTER CHI +=F8 U+03C8 GREEK SMALL LETTER PSI +=F9 U+03C9 GREEK SMALL LETTER OMEGA +=FA U+03CA GREEK SMALL LETTER IOTA WITH DIALYTIKA +=FB U+03CB GREEK SMALL LETTER UPSILON WITH DIALYTIKA +=FC U+03CC GREEK SMALL LETTER OMICRON WITH TONOS +=FD U+03CD GREEK SMALL LETTER UPSILON WITH TONOS +=FE U+03CE GREEK SMALL LETTER OMEGA WITH TONOS diff --git a/workbench/libs/codesetslib/charsets/mmakefile.src b/workbench/libs/codesetslib/charsets/mmakefile.src new file mode 100644 index 000000000..c38d6ced8 --- /dev/null +++ b/workbench/libs/codesetslib/charsets/mmakefile.src @@ -0,0 +1,13 @@ +# $Id$ + +# AROS metamakefile for codesetslib + +include $(TOP)/config/make.cfg + +#MM- workbench-libs-codesets : workbench-libs-codesets-charsets + +#MM workbench-libs-codesets-charsets + +%copy_dir_recursive mmake=workbench-libs-codesets-charsets src=$(TOP)/$(CURDIR) dst=$(AROS_LIBS)/Charsets + +%common diff --git a/workbench/libs/codesetslib/charsets/windows-1250.txt b/workbench/libs/codesetslib/charsets/windows-1250.txt new file mode 100755 index 000000000..4cf5b188a --- /dev/null +++ b/workbench/libs/codesetslib/charsets/windows-1250.txt @@ -0,0 +1,279 @@ +Standard=windows-1250 +AltStandard=CP1250 +Name=windows-1250 +Characterization=_("Central/East Europe (Windows)") +ReadOnly=1 +# +# Name: cp1250 to Unicode table +# Unicode version: 2.0 +# Table version: 2.01 +# Table format: Format A +# Date: 04/15/98 +# +# Contact: cpxlate@microsoft.com +# +# General notes: none +# +# Format: Three tab-separated columns +# Column #1 is the cp1250 code (in hex) +# Column #2 is the Unicode (in hex as 0xXXXX) +# Column #3 is the Unicode name (follows a comment sign, '#') +# +# The entries are in cp1250 order +# +0x00 0x0000 #NULL +0x01 0x0001 #START OF HEADING +0x02 0x0002 #START OF TEXT +0x03 0x0003 #END OF TEXT +0x04 0x0004 #END OF TRANSMISSION +0x05 0x0005 #ENQUIRY +0x06 0x0006 #ACKNOWLEDGE +0x07 0x0007 #BELL +0x08 0x0008 #BACKSPACE +0x09 0x0009 #HORIZONTAL TABULATION +0x0A 0x000A #LINE FEED +0x0B 0x000B #VERTICAL TABULATION +0x0C 0x000C #FORM FEED +0x0D 0x000D #CARRIAGE RETURN +0x0E 0x000E #SHIFT OUT +0x0F 0x000F #SHIFT IN +0x10 0x0010 #DATA LINK ESCAPE +0x11 0x0011 #DEVICE CONTROL ONE +0x12 0x0012 #DEVICE CONTROL TWO +0x13 0x0013 #DEVICE CONTROL THREE +0x14 0x0014 #DEVICE CONTROL FOUR +0x15 0x0015 #NEGATIVE ACKNOWLEDGE +0x16 0x0016 #SYNCHRONOUS IDLE +0x17 0x0017 #END OF TRANSMISSION BLOCK +0x18 0x0018 #CANCEL +0x19 0x0019 #END OF MEDIUM +0x1A 0x001A #SUBSTITUTE +0x1B 0x001B #ESCAPE +0x1C 0x001C #FILE SEPARATOR +0x1D 0x001D #GROUP SEPARATOR +0x1E 0x001E #RECORD SEPARATOR +0x1F 0x001F #UNIT SEPARATOR +0x20 0x0020 #SPACE +0x21 0x0021 #EXCLAMATION MARK +0x22 0x0022 #QUOTATION MARK +0x23 0x0023 #NUMBER SIGN +0x24 0x0024 #DOLLAR SIGN +0x25 0x0025 #PERCENT SIGN +0x26 0x0026 #AMPERSAND +0x27 0x0027 #APOSTROPHE +0x28 0x0028 #LEFT PARENTHESIS +0x29 0x0029 #RIGHT PARENTHESIS +0x2A 0x002A #ASTERISK +0x2B 0x002B #PLUS SIGN +0x2C 0x002C #COMMA +0x2D 0x002D #HYPHEN-MINUS +0x2E 0x002E #FULL STOP +0x2F 0x002F #SOLIDUS +0x30 0x0030 #DIGIT ZERO +0x31 0x0031 #DIGIT ONE +0x32 0x0032 #DIGIT TWO +0x33 0x0033 #DIGIT THREE +0x34 0x0034 #DIGIT FOUR +0x35 0x0035 #DIGIT FIVE +0x36 0x0036 #DIGIT SIX +0x37 0x0037 #DIGIT SEVEN +0x38 0x0038 #DIGIT EIGHT +0x39 0x0039 #DIGIT NINE +0x3A 0x003A #COLON +0x3B 0x003B #SEMICOLON +0x3C 0x003C #LESS-THAN SIGN +0x3D 0x003D #EQUALS SIGN +0x3E 0x003E #GREATER-THAN SIGN +0x3F 0x003F #QUESTION MARK +0x40 0x0040 #COMMERCIAL AT +0x41 0x0041 #LATIN CAPITAL LETTER A +0x42 0x0042 #LATIN CAPITAL LETTER B +0x43 0x0043 #LATIN CAPITAL LETTER C +0x44 0x0044 #LATIN CAPITAL LETTER D +0x45 0x0045 #LATIN CAPITAL LETTER E +0x46 0x0046 #LATIN CAPITAL LETTER F +0x47 0x0047 #LATIN CAPITAL LETTER G +0x48 0x0048 #LATIN CAPITAL LETTER H +0x49 0x0049 #LATIN CAPITAL LETTER I +0x4A 0x004A #LATIN CAPITAL LETTER J +0x4B 0x004B #LATIN CAPITAL LETTER K +0x4C 0x004C #LATIN CAPITAL LETTER L +0x4D 0x004D #LATIN CAPITAL LETTER M +0x4E 0x004E #LATIN CAPITAL LETTER N +0x4F 0x004F #LATIN CAPITAL LETTER O +0x50 0x0050 #LATIN CAPITAL LETTER P +0x51 0x0051 #LATIN CAPITAL LETTER Q +0x52 0x0052 #LATIN CAPITAL LETTER R +0x53 0x0053 #LATIN CAPITAL LETTER S +0x54 0x0054 #LATIN CAPITAL LETTER T +0x55 0x0055 #LATIN CAPITAL LETTER U +0x56 0x0056 #LATIN CAPITAL LETTER V +0x57 0x0057 #LATIN CAPITAL LETTER W +0x58 0x0058 #LATIN CAPITAL LETTER X +0x59 0x0059 #LATIN CAPITAL LETTER Y +0x5A 0x005A #LATIN CAPITAL LETTER Z +0x5B 0x005B #LEFT SQUARE BRACKET +0x5C 0x005C #REVERSE SOLIDUS +0x5D 0x005D #RIGHT SQUARE BRACKET +0x5E 0x005E #CIRCUMFLEX ACCENT +0x5F 0x005F #LOW LINE +0x60 0x0060 #GRAVE ACCENT +0x61 0x0061 #LATIN SMALL LETTER A +0x62 0x0062 #LATIN SMALL LETTER B +0x63 0x0063 #LATIN SMALL LETTER C +0x64 0x0064 #LATIN SMALL LETTER D +0x65 0x0065 #LATIN SMALL LETTER E +0x66 0x0066 #LATIN SMALL LETTER F +0x67 0x0067 #LATIN SMALL LETTER G +0x68 0x0068 #LATIN SMALL LETTER H +0x69 0x0069 #LATIN SMALL LETTER I +0x6A 0x006A #LATIN SMALL LETTER J +0x6B 0x006B #LATIN SMALL LETTER K +0x6C 0x006C #LATIN SMALL LETTER L +0x6D 0x006D #LATIN SMALL LETTER M +0x6E 0x006E #LATIN SMALL LETTER N +0x6F 0x006F #LATIN SMALL LETTER O +0x70 0x0070 #LATIN SMALL LETTER P +0x71 0x0071 #LATIN SMALL LETTER Q +0x72 0x0072 #LATIN SMALL LETTER R +0x73 0x0073 #LATIN SMALL LETTER S +0x74 0x0074 #LATIN SMALL LETTER T +0x75 0x0075 #LATIN SMALL LETTER U +0x76 0x0076 #LATIN SMALL LETTER V +0x77 0x0077 #LATIN SMALL LETTER W +0x78 0x0078 #LATIN SMALL LETTER X +0x79 0x0079 #LATIN SMALL LETTER Y +0x7A 0x007A #LATIN SMALL LETTER Z +0x7B 0x007B #LEFT CURLY BRACKET +0x7C 0x007C #VERTICAL LINE +0x7D 0x007D #RIGHT CURLY BRACKET +0x7E 0x007E #TILDE +0x7F 0x007F #DELETE +0x80 0x20AC #EURO SIGN +0x81 #UNDEFINED +0x82 0x201A #SINGLE LOW-9 QUOTATION MARK +0x83 #UNDEFINED +0x84 0x201E #DOUBLE LOW-9 QUOTATION MARK +0x85 0x2026 #HORIZONTAL ELLIPSIS +0x86 0x2020 #DAGGER +0x87 0x2021 #DOUBLE DAGGER +0x88 #UNDEFINED +0x89 0x2030 #PER MILLE SIGN +0x8A 0x0160 #LATIN CAPITAL LETTER S WITH CARON +0x8B 0x2039 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK +0x8C 0x015A #LATIN CAPITAL LETTER S WITH ACUTE +0x8D 0x0164 #LATIN CAPITAL LETTER T WITH CARON +0x8E 0x017D #LATIN CAPITAL LETTER Z WITH CARON +0x8F 0x0179 #LATIN CAPITAL LETTER Z WITH ACUTE +0x90 #UNDEFINED +0x91 0x2018 #LEFT SINGLE QUOTATION MARK +0x92 0x2019 #RIGHT SINGLE QUOTATION MARK +0x93 0x201C #LEFT DOUBLE QUOTATION MARK +0x94 0x201D #RIGHT DOUBLE QUOTATION MARK +0x95 0x2022 #BULLET +0x96 0x2013 #EN DASH +0x97 0x2014 #EM DASH +0x98 #UNDEFINED +0x99 0x2122 #TRADE MARK SIGN +0x9A 0x0161 #LATIN SMALL LETTER S WITH CARON +0x9B 0x203A #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK +0x9C 0x015B #LATIN SMALL LETTER S WITH ACUTE +0x9D 0x0165 #LATIN SMALL LETTER T WITH CARON +0x9E 0x017E #LATIN SMALL LETTER Z WITH CARON +0x9F 0x017A #LATIN SMALL LETTER Z WITH ACUTE +0xA0 0x00A0 #NO-BREAK SPACE +0xA1 0x02C7 #CARON +0xA2 0x02D8 #BREVE +0xA3 0x0141 #LATIN CAPITAL LETTER L WITH STROKE +0xA4 0x00A4 #CURRENCY SIGN +0xA5 0x0104 #LATIN CAPITAL LETTER A WITH OGONEK +0xA6 0x00A6 #BROKEN BAR +0xA7 0x00A7 #SECTION SIGN +0xA8 0x00A8 #DIAERESIS +0xA9 0x00A9 #COPYRIGHT SIGN +0xAA 0x015E #LATIN CAPITAL LETTER S WITH CEDILLA +0xAB 0x00AB #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +0xAC 0x00AC #NOT SIGN +0xAD 0x00AD #SOFT HYPHEN +0xAE 0x00AE #REGISTERED SIGN +0xAF 0x017B #LATIN CAPITAL LETTER Z WITH DOT ABOVE +0xB0 0x00B0 #DEGREE SIGN +0xB1 0x00B1 #PLUS-MINUS SIGN +0xB2 0x02DB #OGONEK +0xB3 0x0142 #LATIN SMALL LETTER L WITH STROKE +0xB4 0x00B4 #ACUTE ACCENT +0xB5 0x00B5 #MICRO SIGN +0xB6 0x00B6 #PILCROW SIGN +0xB7 0x00B7 #MIDDLE DOT +0xB8 0x00B8 #CEDILLA +0xB9 0x0105 #LATIN SMALL LETTER A WITH OGONEK +0xBA 0x015F #LATIN SMALL LETTER S WITH CEDILLA +0xBB 0x00BB #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +0xBC 0x013D #LATIN CAPITAL LETTER L WITH CARON +0xBD 0x02DD #DOUBLE ACUTE ACCENT +0xBE 0x013E #LATIN SMALL LETTER L WITH CARON +0xBF 0x017C #LATIN SMALL LETTER Z WITH DOT ABOVE +0xC0 0x0154 #LATIN CAPITAL LETTER R WITH ACUTE +0xC1 0x00C1 #LATIN CAPITAL LETTER A WITH ACUTE +0xC2 0x00C2 #LATIN CAPITAL LETTER A WITH CIRCUMFLEX +0xC3 0x0102 #LATIN CAPITAL LETTER A WITH BREVE +0xC4 0x00C4 #LATIN CAPITAL LETTER A WITH DIAERESIS +0xC5 0x0139 #LATIN CAPITAL LETTER L WITH ACUTE +0xC6 0x0106 #LATIN CAPITAL LETTER C WITH ACUTE +0xC7 0x00C7 #LATIN CAPITAL LETTER C WITH CEDILLA +0xC8 0x010C #LATIN CAPITAL LETTER C WITH CARON +0xC9 0x00C9 #LATIN CAPITAL LETTER E WITH ACUTE +0xCA 0x0118 #LATIN CAPITAL LETTER E WITH OGONEK +0xCB 0x00CB #LATIN CAPITAL LETTER E WITH DIAERESIS +0xCC 0x011A #LATIN CAPITAL LETTER E WITH CARON +0xCD 0x00CD #LATIN CAPITAL LETTER I WITH ACUTE +0xCE 0x00CE #LATIN CAPITAL LETTER I WITH CIRCUMFLEX +0xCF 0x010E #LATIN CAPITAL LETTER D WITH CARON +0xD0 0x0110 #LATIN CAPITAL LETTER D WITH STROKE +0xD1 0x0143 #LATIN CAPITAL LETTER N WITH ACUTE +0xD2 0x0147 #LATIN CAPITAL LETTER N WITH CARON +0xD3 0x00D3 #LATIN CAPITAL LETTER O WITH ACUTE +0xD4 0x00D4 #LATIN CAPITAL LETTER O WITH CIRCUMFLEX +0xD5 0x0150 #LATIN CAPITAL LETTER O WITH DOUBLE ACUTE +0xD6 0x00D6 #LATIN CAPITAL LETTER O WITH DIAERESIS +0xD7 0x00D7 #MULTIPLICATION SIGN +0xD8 0x0158 #LATIN CAPITAL LETTER R WITH CARON +0xD9 0x016E #LATIN CAPITAL LETTER U WITH RING ABOVE +0xDA 0x00DA #LATIN CAPITAL LETTER U WITH ACUTE +0xDB 0x0170 #LATIN CAPITAL LETTER U WITH DOUBLE ACUTE +0xDC 0x00DC #LATIN CAPITAL LETTER U WITH DIAERESIS +0xDD 0x00DD #LATIN CAPITAL LETTER Y WITH ACUTE +0xDE 0x0162 #LATIN CAPITAL LETTER T WITH CEDILLA +0xDF 0x00DF #LATIN SMALL LETTER SHARP S +0xE0 0x0155 #LATIN SMALL LETTER R WITH ACUTE +0xE1 0x00E1 #LATIN SMALL LETTER A WITH ACUTE +0xE2 0x00E2 #LATIN SMALL LETTER A WITH CIRCUMFLEX +0xE3 0x0103 #LATIN SMALL LETTER A WITH BREVE +0xE4 0x00E4 #LATIN SMALL LETTER A WITH DIAERESIS +0xE5 0x013A #LATIN SMALL LETTER L WITH ACUTE +0xE6 0x0107 #LATIN SMALL LETTER C WITH ACUTE +0xE7 0x00E7 #LATIN SMALL LETTER C WITH CEDILLA +0xE8 0x010D #LATIN SMALL LETTER C WITH CARON +0xE9 0x00E9 #LATIN SMALL LETTER E WITH ACUTE +0xEA 0x0119 #LATIN SMALL LETTER E WITH OGONEK +0xEB 0x00EB #LATIN SMALL LETTER E WITH DIAERESIS +0xEC 0x011B #LATIN SMALL LETTER E WITH CARON +0xED 0x00ED #LATIN SMALL LETTER I WITH ACUTE +0xEE 0x00EE #LATIN SMALL LETTER I WITH CIRCUMFLEX +0xEF 0x010F #LATIN SMALL LETTER D WITH CARON +0xF0 0x0111 #LATIN SMALL LETTER D WITH STROKE +0xF1 0x0144 #LATIN SMALL LETTER N WITH ACUTE +0xF2 0x0148 #LATIN SMALL LETTER N WITH CARON +0xF3 0x00F3 #LATIN SMALL LETTER O WITH ACUTE +0xF4 0x00F4 #LATIN SMALL LETTER O WITH CIRCUMFLEX +0xF5 0x0151 #LATIN SMALL LETTER O WITH DOUBLE ACUTE +0xF6 0x00F6 #LATIN SMALL LETTER O WITH DIAERESIS +0xF7 0x00F7 #DIVISION SIGN +0xF8 0x0159 #LATIN SMALL LETTER R WITH CARON +0xF9 0x016F #LATIN SMALL LETTER U WITH RING ABOVE +0xFA 0x00FA #LATIN SMALL LETTER U WITH ACUTE +0xFB 0x0171 #LATIN SMALL LETTER U WITH DOUBLE ACUTE +0xFC 0x00FC #LATIN SMALL LETTER U WITH DIAERESIS +0xFD 0x00FD #LATIN SMALL LETTER Y WITH ACUTE +0xFE 0x0163 #LATIN SMALL LETTER T WITH CEDILLA +0xFF 0x02D9 #DOT ABOVE diff --git a/workbench/libs/codesetslib/charsets/windows-1251.txt b/workbench/libs/codesetslib/charsets/windows-1251.txt new file mode 100755 index 000000000..ed3203323 --- /dev/null +++ b/workbench/libs/codesetslib/charsets/windows-1251.txt @@ -0,0 +1,279 @@ +Standard=windows-1251 +AltStandard=CP1251 +Name=windows-1251 +Characterization=_("Cyrillic (Windows)") +ReadOnly=1 +# +# Name: cp1251 to Unicode table +# Unicode version: 2.0 +# Table version: 2.01 +# Table format: Format A +# Date: 04/15/98 +# +# Contact: cpxlate@microsoft.com +# +# General notes: none +# +# Format: Three tab-separated columns +# Column #1 is the cp1251 code (in hex) +# Column #2 is the Unicode (in hex as 0xXXXX) +# Column #3 is the Unicode name (follows a comment sign, '#') +# +# The entries are in cp1251 order +# +0x00 0x0000 #NULL +0x01 0x0001 #START OF HEADING +0x02 0x0002 #START OF TEXT +0x03 0x0003 #END OF TEXT +0x04 0x0004 #END OF TRANSMISSION +0x05 0x0005 #ENQUIRY +0x06 0x0006 #ACKNOWLEDGE +0x07 0x0007 #BELL +0x08 0x0008 #BACKSPACE +0x09 0x0009 #HORIZONTAL TABULATION +0x0A 0x000A #LINE FEED +0x0B 0x000B #VERTICAL TABULATION +0x0C 0x000C #FORM FEED +0x0D 0x000D #CARRIAGE RETURN +0x0E 0x000E #SHIFT OUT +0x0F 0x000F #SHIFT IN +0x10 0x0010 #DATA LINK ESCAPE +0x11 0x0011 #DEVICE CONTROL ONE +0x12 0x0012 #DEVICE CONTROL TWO +0x13 0x0013 #DEVICE CONTROL THREE +0x14 0x0014 #DEVICE CONTROL FOUR +0x15 0x0015 #NEGATIVE ACKNOWLEDGE +0x16 0x0016 #SYNCHRONOUS IDLE +0x17 0x0017 #END OF TRANSMISSION BLOCK +0x18 0x0018 #CANCEL +0x19 0x0019 #END OF MEDIUM +0x1A 0x001A #SUBSTITUTE +0x1B 0x001B #ESCAPE +0x1C 0x001C #FILE SEPARATOR +0x1D 0x001D #GROUP SEPARATOR +0x1E 0x001E #RECORD SEPARATOR +0x1F 0x001F #UNIT SEPARATOR +0x20 0x0020 #SPACE +0x21 0x0021 #EXCLAMATION MARK +0x22 0x0022 #QUOTATION MARK +0x23 0x0023 #NUMBER SIGN +0x24 0x0024 #DOLLAR SIGN +0x25 0x0025 #PERCENT SIGN +0x26 0x0026 #AMPERSAND +0x27 0x0027 #APOSTROPHE +0x28 0x0028 #LEFT PARENTHESIS +0x29 0x0029 #RIGHT PARENTHESIS +0x2A 0x002A #ASTERISK +0x2B 0x002B #PLUS SIGN +0x2C 0x002C #COMMA +0x2D 0x002D #HYPHEN-MINUS +0x2E 0x002E #FULL STOP +0x2F 0x002F #SOLIDUS +0x30 0x0030 #DIGIT ZERO +0x31 0x0031 #DIGIT ONE +0x32 0x0032 #DIGIT TWO +0x33 0x0033 #DIGIT THREE +0x34 0x0034 #DIGIT FOUR +0x35 0x0035 #DIGIT FIVE +0x36 0x0036 #DIGIT SIX +0x37 0x0037 #DIGIT SEVEN +0x38 0x0038 #DIGIT EIGHT +0x39 0x0039 #DIGIT NINE +0x3A 0x003A #COLON +0x3B 0x003B #SEMICOLON +0x3C 0x003C #LESS-THAN SIGN +0x3D 0x003D #EQUALS SIGN +0x3E 0x003E #GREATER-THAN SIGN +0x3F 0x003F #QUESTION MARK +0x40 0x0040 #COMMERCIAL AT +0x41 0x0041 #LATIN CAPITAL LETTER A +0x42 0x0042 #LATIN CAPITAL LETTER B +0x43 0x0043 #LATIN CAPITAL LETTER C +0x44 0x0044 #LATIN CAPITAL LETTER D +0x45 0x0045 #LATIN CAPITAL LETTER E +0x46 0x0046 #LATIN CAPITAL LETTER F +0x47 0x0047 #LATIN CAPITAL LETTER G +0x48 0x0048 #LATIN CAPITAL LETTER H +0x49 0x0049 #LATIN CAPITAL LETTER I +0x4A 0x004A #LATIN CAPITAL LETTER J +0x4B 0x004B #LATIN CAPITAL LETTER K +0x4C 0x004C #LATIN CAPITAL LETTER L +0x4D 0x004D #LATIN CAPITAL LETTER M +0x4E 0x004E #LATIN CAPITAL LETTER N +0x4F 0x004F #LATIN CAPITAL LETTER O +0x50 0x0050 #LATIN CAPITAL LETTER P +0x51 0x0051 #LATIN CAPITAL LETTER Q +0x52 0x0052 #LATIN CAPITAL LETTER R +0x53 0x0053 #LATIN CAPITAL LETTER S +0x54 0x0054 #LATIN CAPITAL LETTER T +0x55 0x0055 #LATIN CAPITAL LETTER U +0x56 0x0056 #LATIN CAPITAL LETTER V +0x57 0x0057 #LATIN CAPITAL LETTER W +0x58 0x0058 #LATIN CAPITAL LETTER X +0x59 0x0059 #LATIN CAPITAL LETTER Y +0x5A 0x005A #LATIN CAPITAL LETTER Z +0x5B 0x005B #LEFT SQUARE BRACKET +0x5C 0x005C #REVERSE SOLIDUS +0x5D 0x005D #RIGHT SQUARE BRACKET +0x5E 0x005E #CIRCUMFLEX ACCENT +0x5F 0x005F #LOW LINE +0x60 0x0060 #GRAVE ACCENT +0x61 0x0061 #LATIN SMALL LETTER A +0x62 0x0062 #LATIN SMALL LETTER B +0x63 0x0063 #LATIN SMALL LETTER C +0x64 0x0064 #LATIN SMALL LETTER D +0x65 0x0065 #LATIN SMALL LETTER E +0x66 0x0066 #LATIN SMALL LETTER F +0x67 0x0067 #LATIN SMALL LETTER G +0x68 0x0068 #LATIN SMALL LETTER H +0x69 0x0069 #LATIN SMALL LETTER I +0x6A 0x006A #LATIN SMALL LETTER J +0x6B 0x006B #LATIN SMALL LETTER K +0x6C 0x006C #LATIN SMALL LETTER L +0x6D 0x006D #LATIN SMALL LETTER M +0x6E 0x006E #LATIN SMALL LETTER N +0x6F 0x006F #LATIN SMALL LETTER O +0x70 0x0070 #LATIN SMALL LETTER P +0x71 0x0071 #LATIN SMALL LETTER Q +0x72 0x0072 #LATIN SMALL LETTER R +0x73 0x0073 #LATIN SMALL LETTER S +0x74 0x0074 #LATIN SMALL LETTER T +0x75 0x0075 #LATIN SMALL LETTER U +0x76 0x0076 #LATIN SMALL LETTER V +0x77 0x0077 #LATIN SMALL LETTER W +0x78 0x0078 #LATIN SMALL LETTER X +0x79 0x0079 #LATIN SMALL LETTER Y +0x7A 0x007A #LATIN SMALL LETTER Z +0x7B 0x007B #LEFT CURLY BRACKET +0x7C 0x007C #VERTICAL LINE +0x7D 0x007D #RIGHT CURLY BRACKET +0x7E 0x007E #TILDE +0x7F 0x007F #DELETE +0x80 0x0402 #CYRILLIC CAPITAL LETTER DJE +0x81 0x0403 #CYRILLIC CAPITAL LETTER GJE +0x82 0x201A #SINGLE LOW-9 QUOTATION MARK +0x83 0x0453 #CYRILLIC SMALL LETTER GJE +0x84 0x201E #DOUBLE LOW-9 QUOTATION MARK +0x85 0x2026 #HORIZONTAL ELLIPSIS +0x86 0x2020 #DAGGER +0x87 0x2021 #DOUBLE DAGGER +0x88 0x20AC #EURO SIGN +0x89 0x2030 #PER MILLE SIGN +0x8A 0x0409 #CYRILLIC CAPITAL LETTER LJE +0x8B 0x2039 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK +0x8C 0x040A #CYRILLIC CAPITAL LETTER NJE +0x8D 0x040C #CYRILLIC CAPITAL LETTER KJE +0x8E 0x040B #CYRILLIC CAPITAL LETTER TSHE +0x8F 0x040F #CYRILLIC CAPITAL LETTER DZHE +0x90 0x0452 #CYRILLIC SMALL LETTER DJE +0x91 0x2018 #LEFT SINGLE QUOTATION MARK +0x92 0x2019 #RIGHT SINGLE QUOTATION MARK +0x93 0x201C #LEFT DOUBLE QUOTATION MARK +0x94 0x201D #RIGHT DOUBLE QUOTATION MARK +0x95 0x2022 #BULLET +0x96 0x2013 #EN DASH +0x97 0x2014 #EM DASH +0x98 #UNDEFINED +0x99 0x2122 #TRADE MARK SIGN +0x9A 0x0459 #CYRILLIC SMALL LETTER LJE +0x9B 0x203A #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK +0x9C 0x045A #CYRILLIC SMALL LETTER NJE +0x9D 0x045C #CYRILLIC SMALL LETTER KJE +0x9E 0x045B #CYRILLIC SMALL LETTER TSHE +0x9F 0x045F #CYRILLIC SMALL LETTER DZHE +0xA0 0x00A0 #NO-BREAK SPACE +0xA1 0x040E #CYRILLIC CAPITAL LETTER SHORT U +0xA2 0x045E #CYRILLIC SMALL LETTER SHORT U +0xA3 0x0408 #CYRILLIC CAPITAL LETTER JE +0xA4 0x00A4 #CURRENCY SIGN +0xA5 0x0490 #CYRILLIC CAPITAL LETTER GHE WITH UPTURN +0xA6 0x00A6 #BROKEN BAR +0xA7 0x00A7 #SECTION SIGN +0xA8 0x0401 #CYRILLIC CAPITAL LETTER IO +0xA9 0x00A9 #COPYRIGHT SIGN +0xAA 0x0404 #CYRILLIC CAPITAL LETTER UKRAINIAN IE +0xAB 0x00AB #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +0xAC 0x00AC #NOT SIGN +0xAD 0x00AD #SOFT HYPHEN +0xAE 0x00AE #REGISTERED SIGN +0xAF 0x0407 #CYRILLIC CAPITAL LETTER YI +0xB0 0x00B0 #DEGREE SIGN +0xB1 0x00B1 #PLUS-MINUS SIGN +0xB2 0x0406 #CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I +0xB3 0x0456 #CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I +0xB4 0x0491 #CYRILLIC SMALL LETTER GHE WITH UPTURN +0xB5 0x00B5 #MICRO SIGN +0xB6 0x00B6 #PILCROW SIGN +0xB7 0x00B7 #MIDDLE DOT +0xB8 0x0451 #CYRILLIC SMALL LETTER IO +0xB9 0x2116 #NUMERO SIGN +0xBA 0x0454 #CYRILLIC SMALL LETTER UKRAINIAN IE +0xBB 0x00BB #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +0xBC 0x0458 #CYRILLIC SMALL LETTER JE +0xBD 0x0405 #CYRILLIC CAPITAL LETTER DZE +0xBE 0x0455 #CYRILLIC SMALL LETTER DZE +0xBF 0x0457 #CYRILLIC SMALL LETTER YI +0xC0 0x0410 #CYRILLIC CAPITAL LETTER A +0xC1 0x0411 #CYRILLIC CAPITAL LETTER BE +0xC2 0x0412 #CYRILLIC CAPITAL LETTER VE +0xC3 0x0413 #CYRILLIC CAPITAL LETTER GHE +0xC4 0x0414 #CYRILLIC CAPITAL LETTER DE +0xC5 0x0415 #CYRILLIC CAPITAL LETTER IE +0xC6 0x0416 #CYRILLIC CAPITAL LETTER ZHE +0xC7 0x0417 #CYRILLIC CAPITAL LETTER ZE +0xC8 0x0418 #CYRILLIC CAPITAL LETTER I +0xC9 0x0419 #CYRILLIC CAPITAL LETTER SHORT I +0xCA 0x041A #CYRILLIC CAPITAL LETTER KA +0xCB 0x041B #CYRILLIC CAPITAL LETTER EL +0xCC 0x041C #CYRILLIC CAPITAL LETTER EM +0xCD 0x041D #CYRILLIC CAPITAL LETTER EN +0xCE 0x041E #CYRILLIC CAPITAL LETTER O +0xCF 0x041F #CYRILLIC CAPITAL LETTER PE +0xD0 0x0420 #CYRILLIC CAPITAL LETTER ER +0xD1 0x0421 #CYRILLIC CAPITAL LETTER ES +0xD2 0x0422 #CYRILLIC CAPITAL LETTER TE +0xD3 0x0423 #CYRILLIC CAPITAL LETTER U +0xD4 0x0424 #CYRILLIC CAPITAL LETTER EF +0xD5 0x0425 #CYRILLIC CAPITAL LETTER HA +0xD6 0x0426 #CYRILLIC CAPITAL LETTER TSE +0xD7 0x0427 #CYRILLIC CAPITAL LETTER CHE +0xD8 0x0428 #CYRILLIC CAPITAL LETTER SHA +0xD9 0x0429 #CYRILLIC CAPITAL LETTER SHCHA +0xDA 0x042A #CYRILLIC CAPITAL LETTER HARD SIGN +0xDB 0x042B #CYRILLIC CAPITAL LETTER YERU +0xDC 0x042C #CYRILLIC CAPITAL LETTER SOFT SIGN +0xDD 0x042D #CYRILLIC CAPITAL LETTER E +0xDE 0x042E #CYRILLIC CAPITAL LETTER YU +0xDF 0x042F #CYRILLIC CAPITAL LETTER YA +0xE0 0x0430 #CYRILLIC SMALL LETTER A +0xE1 0x0431 #CYRILLIC SMALL LETTER BE +0xE2 0x0432 #CYRILLIC SMALL LETTER VE +0xE3 0x0433 #CYRILLIC SMALL LETTER GHE +0xE4 0x0434 #CYRILLIC SMALL LETTER DE +0xE5 0x0435 #CYRILLIC SMALL LETTER IE +0xE6 0x0436 #CYRILLIC SMALL LETTER ZHE +0xE7 0x0437 #CYRILLIC SMALL LETTER ZE +0xE8 0x0438 #CYRILLIC SMALL LETTER I +0xE9 0x0439 #CYRILLIC SMALL LETTER SHORT I +0xEA 0x043A #CYRILLIC SMALL LETTER KA +0xEB 0x043B #CYRILLIC SMALL LETTER EL +0xEC 0x043C #CYRILLIC SMALL LETTER EM +0xED 0x043D #CYRILLIC SMALL LETTER EN +0xEE 0x043E #CYRILLIC SMALL LETTER O +0xEF 0x043F #CYRILLIC SMALL LETTER PE +0xF0 0x0440 #CYRILLIC SMALL LETTER ER +0xF1 0x0441 #CYRILLIC SMALL LETTER ES +0xF2 0x0442 #CYRILLIC SMALL LETTER TE +0xF3 0x0443 #CYRILLIC SMALL LETTER U +0xF4 0x0444 #CYRILLIC SMALL LETTER EF +0xF5 0x0445 #CYRILLIC SMALL LETTER HA +0xF6 0x0446 #CYRILLIC SMALL LETTER TSE +0xF7 0x0447 #CYRILLIC SMALL LETTER CHE +0xF8 0x0448 #CYRILLIC SMALL LETTER SHA +0xF9 0x0449 #CYRILLIC SMALL LETTER SHCHA +0xFA 0x044A #CYRILLIC SMALL LETTER HARD SIGN +0xFB 0x044B #CYRILLIC SMALL LETTER YERU +0xFC 0x044C #CYRILLIC SMALL LETTER SOFT SIGN +0xFD 0x044D #CYRILLIC SMALL LETTER E +0xFE 0x044E #CYRILLIC SMALL LETTER YU +0xFF 0x044F #CYRILLIC SMALL LETTER YA diff --git a/workbench/libs/codesetslib/charsets/windows-1252.txt b/workbench/libs/codesetslib/charsets/windows-1252.txt new file mode 100755 index 000000000..102a58a71 --- /dev/null +++ b/workbench/libs/codesetslib/charsets/windows-1252.txt @@ -0,0 +1,279 @@ +Standard=windows-1252 +AltStandard=CP1252 +Name=windows-1252 +Characterization=_("West European (Windows)") +ReadOnly=1 +# +# Name: cp1252 to Unicode table +# Unicode version: 2.0 +# Table version: 2.01 +# Table format: Format A +# Date: 04/15/98 +# +# Contact: cpxlate@microsoft.com +# +# General notes: none +# +# Format: Three tab-separated columns +# Column #1 is the cp1252 code (in hex) +# Column #2 is the Unicode (in hex as 0xXXXX) +# Column #3 is the Unicode name (follows a comment sign, '#') +# +# The entries are in cp1252 order +# +0x00 0x0000 #NULL +0x01 0x0001 #START OF HEADING +0x02 0x0002 #START OF TEXT +0x03 0x0003 #END OF TEXT +0x04 0x0004 #END OF TRANSMISSION +0x05 0x0005 #ENQUIRY +0x06 0x0006 #ACKNOWLEDGE +0x07 0x0007 #BELL +0x08 0x0008 #BACKSPACE +0x09 0x0009 #HORIZONTAL TABULATION +0x0A 0x000A #LINE FEED +0x0B 0x000B #VERTICAL TABULATION +0x0C 0x000C #FORM FEED +0x0D 0x000D #CARRIAGE RETURN +0x0E 0x000E #SHIFT OUT +0x0F 0x000F #SHIFT IN +0x10 0x0010 #DATA LINK ESCAPE +0x11 0x0011 #DEVICE CONTROL ONE +0x12 0x0012 #DEVICE CONTROL TWO +0x13 0x0013 #DEVICE CONTROL THREE +0x14 0x0014 #DEVICE CONTROL FOUR +0x15 0x0015 #NEGATIVE ACKNOWLEDGE +0x16 0x0016 #SYNCHRONOUS IDLE +0x17 0x0017 #END OF TRANSMISSION BLOCK +0x18 0x0018 #CANCEL +0x19 0x0019 #END OF MEDIUM +0x1A 0x001A #SUBSTITUTE +0x1B 0x001B #ESCAPE +0x1C 0x001C #FILE SEPARATOR +0x1D 0x001D #GROUP SEPARATOR +0x1E 0x001E #RECORD SEPARATOR +0x1F 0x001F #UNIT SEPARATOR +0x20 0x0020 #SPACE +0x21 0x0021 #EXCLAMATION MARK +0x22 0x0022 #QUOTATION MARK +0x23 0x0023 #NUMBER SIGN +0x24 0x0024 #DOLLAR SIGN +0x25 0x0025 #PERCENT SIGN +0x26 0x0026 #AMPERSAND +0x27 0x0027 #APOSTROPHE +0x28 0x0028 #LEFT PARENTHESIS +0x29 0x0029 #RIGHT PARENTHESIS +0x2A 0x002A #ASTERISK +0x2B 0x002B #PLUS SIGN +0x2C 0x002C #COMMA +0x2D 0x002D #HYPHEN-MINUS +0x2E 0x002E #FULL STOP +0x2F 0x002F #SOLIDUS +0x30 0x0030 #DIGIT ZERO +0x31 0x0031 #DIGIT ONE +0x32 0x0032 #DIGIT TWO +0x33 0x0033 #DIGIT THREE +0x34 0x0034 #DIGIT FOUR +0x35 0x0035 #DIGIT FIVE +0x36 0x0036 #DIGIT SIX +0x37 0x0037 #DIGIT SEVEN +0x38 0x0038 #DIGIT EIGHT +0x39 0x0039 #DIGIT NINE +0x3A 0x003A #COLON +0x3B 0x003B #SEMICOLON +0x3C 0x003C #LESS-THAN SIGN +0x3D 0x003D #EQUALS SIGN +0x3E 0x003E #GREATER-THAN SIGN +0x3F 0x003F #QUESTION MARK +0x40 0x0040 #COMMERCIAL AT +0x41 0x0041 #LATIN CAPITAL LETTER A +0x42 0x0042 #LATIN CAPITAL LETTER B +0x43 0x0043 #LATIN CAPITAL LETTER C +0x44 0x0044 #LATIN CAPITAL LETTER D +0x45 0x0045 #LATIN CAPITAL LETTER E +0x46 0x0046 #LATIN CAPITAL LETTER F +0x47 0x0047 #LATIN CAPITAL LETTER G +0x48 0x0048 #LATIN CAPITAL LETTER H +0x49 0x0049 #LATIN CAPITAL LETTER I +0x4A 0x004A #LATIN CAPITAL LETTER J +0x4B 0x004B #LATIN CAPITAL LETTER K +0x4C 0x004C #LATIN CAPITAL LETTER L +0x4D 0x004D #LATIN CAPITAL LETTER M +0x4E 0x004E #LATIN CAPITAL LETTER N +0x4F 0x004F #LATIN CAPITAL LETTER O +0x50 0x0050 #LATIN CAPITAL LETTER P +0x51 0x0051 #LATIN CAPITAL LETTER Q +0x52 0x0052 #LATIN CAPITAL LETTER R +0x53 0x0053 #LATIN CAPITAL LETTER S +0x54 0x0054 #LATIN CAPITAL LETTER T +0x55 0x0055 #LATIN CAPITAL LETTER U +0x56 0x0056 #LATIN CAPITAL LETTER V +0x57 0x0057 #LATIN CAPITAL LETTER W +0x58 0x0058 #LATIN CAPITAL LETTER X +0x59 0x0059 #LATIN CAPITAL LETTER Y +0x5A 0x005A #LATIN CAPITAL LETTER Z +0x5B 0x005B #LEFT SQUARE BRACKET +0x5C 0x005C #REVERSE SOLIDUS +0x5D 0x005D #RIGHT SQUARE BRACKET +0x5E 0x005E #CIRCUMFLEX ACCENT +0x5F 0x005F #LOW LINE +0x60 0x0060 #GRAVE ACCENT +0x61 0x0061 #LATIN SMALL LETTER A +0x62 0x0062 #LATIN SMALL LETTER B +0x63 0x0063 #LATIN SMALL LETTER C +0x64 0x0064 #LATIN SMALL LETTER D +0x65 0x0065 #LATIN SMALL LETTER E +0x66 0x0066 #LATIN SMALL LETTER F +0x67 0x0067 #LATIN SMALL LETTER G +0x68 0x0068 #LATIN SMALL LETTER H +0x69 0x0069 #LATIN SMALL LETTER I +0x6A 0x006A #LATIN SMALL LETTER J +0x6B 0x006B #LATIN SMALL LETTER K +0x6C 0x006C #LATIN SMALL LETTER L +0x6D 0x006D #LATIN SMALL LETTER M +0x6E 0x006E #LATIN SMALL LETTER N +0x6F 0x006F #LATIN SMALL LETTER O +0x70 0x0070 #LATIN SMALL LETTER P +0x71 0x0071 #LATIN SMALL LETTER Q +0x72 0x0072 #LATIN SMALL LETTER R +0x73 0x0073 #LATIN SMALL LETTER S +0x74 0x0074 #LATIN SMALL LETTER T +0x75 0x0075 #LATIN SMALL LETTER U +0x76 0x0076 #LATIN SMALL LETTER V +0x77 0x0077 #LATIN SMALL LETTER W +0x78 0x0078 #LATIN SMALL LETTER X +0x79 0x0079 #LATIN SMALL LETTER Y +0x7A 0x007A #LATIN SMALL LETTER Z +0x7B 0x007B #LEFT CURLY BRACKET +0x7C 0x007C #VERTICAL LINE +0x7D 0x007D #RIGHT CURLY BRACKET +0x7E 0x007E #TILDE +0x7F 0x007F #DELETE +0x80 0x20AC #EURO SIGN +0x81 #UNDEFINED +0x82 0x201A #SINGLE LOW-9 QUOTATION MARK +0x83 0x0192 #LATIN SMALL LETTER F WITH HOOK +0x84 0x201E #DOUBLE LOW-9 QUOTATION MARK +0x85 0x2026 #HORIZONTAL ELLIPSIS +0x86 0x2020 #DAGGER +0x87 0x2021 #DOUBLE DAGGER +0x88 0x02C6 #MODIFIER LETTER CIRCUMFLEX ACCENT +0x89 0x2030 #PER MILLE SIGN +0x8A 0x0160 #LATIN CAPITAL LETTER S WITH CARON +0x8B 0x2039 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK +0x8C 0x0152 #LATIN CAPITAL LIGATURE OE +0x8D #UNDEFINED +0x8E 0x017D #LATIN CAPITAL LETTER Z WITH CARON +0x8F #UNDEFINED +0x90 #UNDEFINED +0x91 0x2018 #LEFT SINGLE QUOTATION MARK +0x92 0x2019 #RIGHT SINGLE QUOTATION MARK +0x93 0x201C #LEFT DOUBLE QUOTATION MARK +0x94 0x201D #RIGHT DOUBLE QUOTATION MARK +0x95 0x2022 #BULLET +0x96 0x2013 #EN DASH +0x97 0x2014 #EM DASH +0x98 0x02DC #SMALL TILDE +0x99 0x2122 #TRADE MARK SIGN +0x9A 0x0161 #LATIN SMALL LETTER S WITH CARON +0x9B 0x203A #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK +0x9C 0x0153 #LATIN SMALL LIGATURE OE +0x9D #UNDEFINED +0x9E 0x017E #LATIN SMALL LETTER Z WITH CARON +0x9F 0x0178 #LATIN CAPITAL LETTER Y WITH DIAERESIS +0xA0 0x00A0 #NO-BREAK SPACE +0xA1 0x00A1 #INVERTED EXCLAMATION MARK +0xA2 0x00A2 #CENT SIGN +0xA3 0x00A3 #POUND SIGN +0xA4 0x00A4 #CURRENCY SIGN +0xA5 0x00A5 #YEN SIGN +0xA6 0x00A6 #BROKEN BAR +0xA7 0x00A7 #SECTION SIGN +0xA8 0x00A8 #DIAERESIS +0xA9 0x00A9 #COPYRIGHT SIGN +0xAA 0x00AA #FEMININE ORDINAL INDICATOR +0xAB 0x00AB #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +0xAC 0x00AC #NOT SIGN +0xAD 0x00AD #SOFT HYPHEN +0xAE 0x00AE #REGISTERED SIGN +0xAF 0x00AF #MACRON +0xB0 0x00B0 #DEGREE SIGN +0xB1 0x00B1 #PLUS-MINUS SIGN +0xB2 0x00B2 #SUPERSCRIPT TWO +0xB3 0x00B3 #SUPERSCRIPT THREE +0xB4 0x00B4 #ACUTE ACCENT +0xB5 0x00B5 #MICRO SIGN +0xB6 0x00B6 #PILCROW SIGN +0xB7 0x00B7 #MIDDLE DOT +0xB8 0x00B8 #CEDILLA +0xB9 0x00B9 #SUPERSCRIPT ONE +0xBA 0x00BA #MASCULINE ORDINAL INDICATOR +0xBB 0x00BB #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +0xBC 0x00BC #VULGAR FRACTION ONE QUARTER +0xBD 0x00BD #VULGAR FRACTION ONE HALF +0xBE 0x00BE #VULGAR FRACTION THREE QUARTERS +0xBF 0x00BF #INVERTED QUESTION MARK +0xC0 0x00C0 #LATIN CAPITAL LETTER A WITH GRAVE +0xC1 0x00C1 #LATIN CAPITAL LETTER A WITH ACUTE +0xC2 0x00C2 #LATIN CAPITAL LETTER A WITH CIRCUMFLEX +0xC3 0x00C3 #LATIN CAPITAL LETTER A WITH TILDE +0xC4 0x00C4 #LATIN CAPITAL LETTER A WITH DIAERESIS +0xC5 0x00C5 #LATIN CAPITAL LETTER A WITH RING ABOVE +0xC6 0x00C6 #LATIN CAPITAL LETTER AE +0xC7 0x00C7 #LATIN CAPITAL LETTER C WITH CEDILLA +0xC8 0x00C8 #LATIN CAPITAL LETTER E WITH GRAVE +0xC9 0x00C9 #LATIN CAPITAL LETTER E WITH ACUTE +0xCA 0x00CA #LATIN CAPITAL LETTER E WITH CIRCUMFLEX +0xCB 0x00CB #LATIN CAPITAL LETTER E WITH DIAERESIS +0xCC 0x00CC #LATIN CAPITAL LETTER I WITH GRAVE +0xCD 0x00CD #LATIN CAPITAL LETTER I WITH ACUTE +0xCE 0x00CE #LATIN CAPITAL LETTER I WITH CIRCUMFLEX +0xCF 0x00CF #LATIN CAPITAL LETTER I WITH DIAERESIS +0xD0 0x00D0 #LATIN CAPITAL LETTER ETH +0xD1 0x00D1 #LATIN CAPITAL LETTER N WITH TILDE +0xD2 0x00D2 #LATIN CAPITAL LETTER O WITH GRAVE +0xD3 0x00D3 #LATIN CAPITAL LETTER O WITH ACUTE +0xD4 0x00D4 #LATIN CAPITAL LETTER O WITH CIRCUMFLEX +0xD5 0x00D5 #LATIN CAPITAL LETTER O WITH TILDE +0xD6 0x00D6 #LATIN CAPITAL LETTER O WITH DIAERESIS +0xD7 0x00D7 #MULTIPLICATION SIGN +0xD8 0x00D8 #LATIN CAPITAL LETTER O WITH STROKE +0xD9 0x00D9 #LATIN CAPITAL LETTER U WITH GRAVE +0xDA 0x00DA #LATIN CAPITAL LETTER U WITH ACUTE +0xDB 0x00DB #LATIN CAPITAL LETTER U WITH CIRCUMFLEX +0xDC 0x00DC #LATIN CAPITAL LETTER U WITH DIAERESIS +0xDD 0x00DD #LATIN CAPITAL LETTER Y WITH ACUTE +0xDE 0x00DE #LATIN CAPITAL LETTER THORN +0xDF 0x00DF #LATIN SMALL LETTER SHARP S +0xE0 0x00E0 #LATIN SMALL LETTER A WITH GRAVE +0xE1 0x00E1 #LATIN SMALL LETTER A WITH ACUTE +0xE2 0x00E2 #LATIN SMALL LETTER A WITH CIRCUMFLEX +0xE3 0x00E3 #LATIN SMALL LETTER A WITH TILDE +0xE4 0x00E4 #LATIN SMALL LETTER A WITH DIAERESIS +0xE5 0x00E5 #LATIN SMALL LETTER A WITH RING ABOVE +0xE6 0x00E6 #LATIN SMALL LETTER AE +0xE7 0x00E7 #LATIN SMALL LETTER C WITH CEDILLA +0xE8 0x00E8 #LATIN SMALL LETTER E WITH GRAVE +0xE9 0x00E9 #LATIN SMALL LETTER E WITH ACUTE +0xEA 0x00EA #LATIN SMALL LETTER E WITH CIRCUMFLEX +0xEB 0x00EB #LATIN SMALL LETTER E WITH DIAERESIS +0xEC 0x00EC #LATIN SMALL LETTER I WITH GRAVE +0xED 0x00ED #LATIN SMALL LETTER I WITH ACUTE +0xEE 0x00EE #LATIN SMALL LETTER I WITH CIRCUMFLEX +0xEF 0x00EF #LATIN SMALL LETTER I WITH DIAERESIS +0xF0 0x00F0 #LATIN SMALL LETTER ETH +0xF1 0x00F1 #LATIN SMALL LETTER N WITH TILDE +0xF2 0x00F2 #LATIN SMALL LETTER O WITH GRAVE +0xF3 0x00F3 #LATIN SMALL LETTER O WITH ACUTE +0xF4 0x00F4 #LATIN SMALL LETTER O WITH CIRCUMFLEX +0xF5 0x00F5 #LATIN SMALL LETTER O WITH TILDE +0xF6 0x00F6 #LATIN SMALL LETTER O WITH DIAERESIS +0xF7 0x00F7 #DIVISION SIGN +0xF8 0x00F8 #LATIN SMALL LETTER O WITH STROKE +0xF9 0x00F9 #LATIN SMALL LETTER U WITH GRAVE +0xFA 0x00FA #LATIN SMALL LETTER U WITH ACUTE +0xFB 0x00FB #LATIN SMALL LETTER U WITH CIRCUMFLEX +0xFC 0x00FC #LATIN SMALL LETTER U WITH DIAERESIS +0xFD 0x00FD #LATIN SMALL LETTER Y WITH ACUTE +0xFE 0x00FE #LATIN SMALL LETTER THORN +0xFF 0x00FF #LATIN SMALL LETTER Y WITH DIAERESIS diff --git a/workbench/libs/codesetslib/developer/docs/codesets.doc b/workbench/libs/codesetslib/developer/docs/codesets.doc new file mode 100755 index 000000000..aae472d03 --- /dev/null +++ b/workbench/libs/codesetslib/developer/docs/codesets.doc @@ -0,0 +1,1531 @@ +TABLE OF CONTENTS + +codesets.library/codesets.library +codesets.library/CodesetsSupportedA +codesets.library/CodesetsFindA +codesets.library/CodesetsFindBestA +codesets.library/CodesetsConvertStrA +codesets.library/CodesetsFreeA +codesets.library/CodesetsSetDefaultA +codesets.library/CodesetsListCreateA +codesets.library/CodesetsListDeleteA +codesets.library/CodesetsListAddA +codesets.library/CodesetsListRemoveA +codesets.library/CodesetsUTF8CreateA +codesets.library/CodesetsUTF8ToStrA +codesets.library/CodesetsUTF8Len +codesets.library/CodesetsIsValidUTF8 +codesets.library/CodesetsIsLegalUTF8 +codesets.library/CodesetsIsLegalUTF8Sequence +codesets.library/CodesetsStrLenA +codesets.library/CodesetsConvertUTF16toUTF32 +codesets.library/CodesetsConvertUTF16toUTF8 +codesets.library/CodesetsConvertUTF32toUTF16 +codesets.library/CodesetsConvertUTF32toUTF8 +codesets.library/CodesetsConvertUTF8toUTF16 +codesets.library/CodesetsConvertUTF8toUTF32 +codesets.library/CodesetsDecodeB64A +codesets.library/CodesetsEncodeB64A + + codesets.library/codesets.library + + ******************************************************************* + Copyright (c) 2005-2007 by codesets.library Open Source Team + $Id: codesets.doc 87 2007-09-05 10:08:50Z thboeckel $ + $URL: https://codesetslib.svn.sourceforge.net/svnroot/codesetslib/trunk/developer/docs/codesets.doc $ + + codesets.library is an AmigaOS shared library which provides + functions to deal with different kind of codesets. It provides + general character conversion routines, e.g. for converting + from one charset (e.g. UTF8) into another (e.g. ISO-8859-1) or + vice versa. + + codesets.library is mainly based on some code from UNICODE, some + code from the SimpleMail project as well as some additions done + by the codesets.library Open Source Team. + + It is released and distributed under the terms of the GNU Lesser + General Public License (LGPL) and available free of charge. + + Please visit http://www.sf.net/projects/codesetslib/ for + the very latest version and information regarding codesets.library. + ******************************************************************* + + For some short introduction on how to use codesets.library, the + following pharagraph should provide a good summary. What you + usually want to do with codesets.library is, to convert strings from + one so-called "Source Codeset" into another "Destination Codeset". + The following list are only the main functions provided to + developers, wanting to achieve this conversion in their applications: + + + CodesetsSupportedA() + -------------------- + + For querying codesets library which codesets/charsets it supports + either by its internal available charsets or by having obtained + them from the operating system (e.g. AmigaOS4), this function + can be used. + + E.g. in a MUI application you would do something like: + + -- cut here -- + STRPTR *array; + + if((array = CodesetsSupportedA(NULL))) + { + DoMethod(list, MUIM_List_Insert, array, -1, MUIV_List_Insert_Sorted); + CodesetsFreeA(array, NULL); + } + -- cut here -- + + + + CodesetsFindA() + --------------- + + For processing/converting a specific string, you normally have to + specify in which codeset this string has to be intepreted. For this + purpose you have to pass a so-called "Source Codeset" to the main + function of codesets.library. With the "CodesetsFindA()" function you + can query codesets.library for providing you a pointer to the + corresponding codeset structure which you afterwards will forward to + the main conversion routines later on. + + For receiving the pointer to the Amiga-1251 codeset: + -- cut here -- + struct codeset *cs; + + if((cs = CodesetsFind("Amiga-1251", + CSA_FallbackToDefault, FALSE, + TAG_DONE))) + { + ... + } + -- cut here -- + + For querying codesets.library for the currently used system wide + default of your running operating system: + -- cut here -- + struct codeset *default; + + if((default = CodesetsFindA(NULL, NULL))) + { + ... + } + -- cut here -- + + + + CodesetsConvertStrA() + --------------------- + + The more or less most common function to use in codesets.library is + definitly this function. It allows to convert a string from + one "Source Codeset" to another "Destination Codeset". It takes + the source string converts it internally into UT8 if necessary and + then directly convert the UTF8 to the specified destination codeset. + + To convert a string 'str' to a destination codeset: + -- cut here -- + STRPTR destString; + + if((destString = CodesetsConvertStr(CSA_SourceCodeset, srcCodeset, + CSA_DestCodeset, destCodeset, + CSA_Source, str, + TAG_DONE))) + { + .... + + CodesetsFreeA(destString, NULL); + } + -- cut here -- + + Even if the above functions should cover most of the common functionality + an ordinary user of codesets.library would require, it supplies a lot more + functions which in fact we will not go into detail here but present + certain examples in the respective documentation section of each function. + + However, if you find the documentation is still too limited or you feel + some major functionality is missing regarding dealing with codesets, + please let us know so that we or even you can improve it. + + + Your codesets.library Open Source Team. + February 2006 + + codesets.library/CodesetsSupportedA + + NAME + CodesetsSupportedA - returns names of supported codesets + + SYNOPSIS + array = CodesetsSupportedA(attrs); + A0 + + STRPTR * CodesetsSupportedA(struct TagItem *); + + array = CodesetsSupported(tag1, ...); + A0 + + STRPTR * CodesetsSupported(Tag, ...); + + FUNCTION + Returns a NULL terminated array of the supported codeset + names. The array _must_ be freed with CodesetsFreeA(). + + INPUTS + attrs - a list of additional tag items. Valid items are: + + CSA_CodesetList (struct codesetList *) + You may supply an unlimited number of additional + codeset lists which you have previously allocated/loaded + with CodesetsListCreateA(). Otherwise just the internal + list of available codesets will be searched. + Default: NONE + + RESULT + array - the names array or NULL on an error. + + EXAMPLE + For printing out all supported codeset names: + + -- cut here -- + STRPTR *array; + + if((array = CodesetsSupportedA(NULL))) + { + int i; + + for(i=0; array[i] != NULL; i++) + printf("%s", array[i]); + + CodesetsFreeA(array, NULL); + } + -- cut here -- + + SEE ALSO + codesets.library/CodesetsListCreateA + + codesets.library/CodesetsFindA + + NAME + CodesetsFindA - finds a codeset + + SYNOPSIS + codeset = CodesetsFindA(name, attrs); + D0 A0 A1 + + struct codeset * CodesetsFindA(STRPTR, struct TagItem *); + + codeset = CodesetsFind(name, tag1, ...); + D0 A0 A1 + + struct codeset * CodesetsFind(STRPTR, Tag, ...); + + FUNCTION + Finds and returns a codeset by its name. The data behind the + pointer should be considered read-only and must not be altered + in any way. + + INPUTS + name - the codeset name (or alias) to find + attrs - a list of additional tag items. Valid items are: + + CSA_FallbackToDefault (BOOL) + If TRUE the function never fails and returns the default + codeset if the supplied codeset name can't be found. + Default: TRUE + + CSA_CodesetList (struct codesetList *) + You may supply an unlimited number of additional + codeset lists which you have previously allocated/loaded + with CodesetsListCreateA(). Otherwise just the internal + list of available codesets will be searched. + Default: NONE + + RESULT + codeset - the codeset or NULL on an error + + EXAMPLE + E.g. for receiving the pointer to the Amiga-1251 codeset: + + -- cut here -- + struct codeset *cs; + + if((cs = CodesetsFind("Amiga-1251", + CSA_FallbackToDefault, FALSE, + TAG_DONE))) + { + ... + } + -- cut here -- + + For querying codesets.library for the currently used system + wide default of your running operating system: + -- cut here -- + struct codeset *default; + + if((default = CodesetsFindA(NULL, NULL))) + { + ... + } + -- cut here -- + + NOTE + Please note for querying the system's default codeset the + method of finding this codeset is highly dependent on the way + the operating system can be queried for it. E.g. on AmigaOS4 + the default codeset is queried with updated system functions, + but for AmigaOS3 a static list of language<>codeset mappings + is used. + + SEE ALSO + codesets.library/CodesetsListCreateA + + codesets.library/CodesetsFindBestA + + NAME + CodesetsFindBestA - finds the best codeset matching a + string content. + + SYNOPSIS + codeset = CodesetsFindBestA(attrs); + D0 A0 + + struct codeset * CodesetsFindBestA(struct TagItem *); + + codeset = CodesetsFindBest(tag1, ...); + D0 A0 + + struct codeset * CodesetsFindBest(Tag, ...); + + FUNCTION + Returns the best found codeset for the given text in the supplied + codeset family. In case no proper codeset for the supplied source string + could be found, NULL is returned or the default codeset if the + CSA_FallbackToDefault attribute is set to TRUE. In addition, in case + the CSA_ErrPtr is given, the amount of failed identifications (chars) + are returned. + + INPUTS + attrs - a list of tag items. Valid items are: + + CSA_Source (STRPTR) + The string which you want to convert. Must be supplied, + otherwise the functions returns NULL. + + CSA_SourceLen (ULONG) + Length of CSA_Source or less to check just a part + Default: string length of CSA_Source + + CSA_ErrPtr (int *) + Pointer to an integer variable which will be filled with the + number of found errors (not identifyable chars) + Default: NULL + + CSA_CodesetList (struct codesetList *) + You may supply an unlimited number of additional + codeset lists which you have previously allocated/loaded + with CodesetsListCreateA(). Otherwise just the internal + list of available codesets will be searched. + Default: NONE + + CSA_CodesetFamily (ULONG) + To narrow the analyze, a user might define the codeset family + of which the supplied text might be composed of. The reason for + this is, that there isn't a unique identification algorithm + which can tell the codeset out of a given text. So to narrow + the identification, the follow values might be specified: + + CSV_CodesetFamily_Latin - Latin codeset family (e.g. ISO-8859-X) + CSV_CodesetFamily_Cyrillic - Cyrillic codeset family (e.g. KOI8R) + + Default: CSV_CodesetFamily_Latin + + CSA_FallbackToDefault (BOOL) + If TRUE the function never fails and returns the default + codeset if the supplied text couldn't be identified + Default: FALSE + + RESULT + codeset - the best matching codeset or NULL in case a NULL pointer + was supplied as the source string. + + EXAMPLE + E.g. for receiving the pointer to 'best matching' codeset matching + a KOI8-R string: + + -- cut here -- + struct codeset *cs; + char str[] = "îÅ×ÏÚÍÏÖÎÏ ÐÅÒÅËÏÄÉÒÏ×ÁÔØ ÉÚ ËÏÄÉÒÏ×ËÉ"; + int errPtr; + + if((cs = CodesetsFindBest(CSA_Source, str, + CSA_ErrPtr, &errPtr, + CSA_CodesetFamily, CSV_CodesetFamily_Cyrillic, + CSA_FallBackToDefault, FALSE, + TAG_DONE))) + { + ... should return the KOI8-R codeset ... + } + -- cut here -- + + SEE ALSO + codesets.library/CodesetsListCreateA + + codesets.library/CodesetsConvertStrA + + NAME + CodesetsConvertStrA - converts a string from one source codeset to + another destination codeset. + + SYNOPSIS + dest = CodesetsConvertStrA(attrs) + D0 A0 + + STRPTR CodesetsConvertStrA(struct TagItem *); + + dest = CodesetsConvertStr(tag1, ...); + D0 A0 + + STRPTR CodesetsConvertStr(Tag, ...); + + FUNCTION + The function takes source string which is encoded in a so-called + 'Source codeset' and converts it immediately into an equivalent + string which will be encoded in the corresponding 'Destination Codeset'. + + INPUTS + attrs - a list of mandatory tag items. Valid items are: + + CSA_Source (STRPTR) + The string which you want to convert. Must be supplied, + otherwise the functions returns NULL. + + CSA_SourceLen (ULONG) + Length of CSA_Source or less to convert just a part + Default: string length of CSA_Source + + CSA_SourceCodeset (struct codeset *) + The codeset in which the source string is encoded. + Default: the system's default codeset + + CSA_DestCodeset (struct codeset *) + The codeset to which the source string should be converted to. + Default: the system's default codeset + + CSA_DestLenPtr (ULONG *) + If supplied, will contain the length of the converted string + which is returned. + + + RESULT + either a pointer to the generated destination string or NULL + on a found error. + + EXAMPLE + To convert an ISO-8859-1 encoded string 'src' into an Amiga-1251 + equivalent 'dst' string: + -- cut here -- + STRPTR src, dst; + struct codeset *srcCodeset, *dstCodeset; + + srcCodeset = CodesetsFindA("ISO-8859-1", NULL); + dstCodeset = CodesetsFindA("Amiga-1251", NULL); + + if((dst = CodesetsConvertStr(CSA_SourceCodeset, srcCodeset, + CSA_DestCodeset, dstCodeset, + CSA_Source, src, + TAG_DONE))) + { + .... + + CodesetsFreeA(dst, NULL); + } + -- cut here -- + + SEE ALSO + codesets.library/CodesetsFreeA + + codesets.library/CodesetsFreeA + + NAME + CodesetsFreeA - frees objects previously internally allocated + by codesets.library + + SYNOPSIS + CodesetsFreeA(obj, attrs) + A0 A1 + void CodesetsFreeA(APTR, struct TagItem *); + + CodesetsFree(obj, tag1, ...); + A0 A1 + void CodesetsFree(APTR, Tag, ...); + + FUNCTION + Frees object previously allocated by codesets.library. E.g. using + functions like CodesetsSupportedA() or CodesetsConvertStrA(). + + INPUTS + obj - the object to free + attrs - a list of additional tag items. Currently non items. + + RESULT + no result + + EXAMPLE + + -- cut here -- + STRPTR *array; + + if((array = CodesetsSupportedA(NULL))) + { + ... + + CodesetsFreeA(array, NULL); + } + -- cut here -- + + SEE ALSO + codesets.library/CodesetsSupportedA + codesets.library/CodesetsConvertStrA + + codesets.library/CodesetsSetDefaultA + + NAME + CodesetsSetDefaultA - sets the default codeset, overwriting + the system default if necessary. + + SYNOPSIS + codeset = CodesetsSetDefaultA(name, attrs); + A0 A1 + + struct codeset * CodesetsSetDefaultA(STRPTR, struct TagItem *); + + codeset = CodesetsSetDefault(name, tag1, ...); + A0 A1 + + struct codeset * CodesetsSetDefault(STRPTR, Tag, ...); + + FUNCTION + Sets the default codeset to name. The codeset will be stored in + the environment variable 'codeset_default'. + + INPUTS + name - the name of the codeset to set as default + attrs - a list of additional tag items. Valid items are: + + CSA_Save (BOOL) + If TRUE the codeset will be permanently saved and survives + a reset. Otherwise the default setting will just last until + the next reboot. + Default: FALSE + + RESULT + codeset - the codeset or NULL + + NOTE + In case the operating system supports the direct query of the + currently active system's default codeset, this function will + still overwrite this setting. So by using this method a user may + overwrite all system's setting and set a global default codeset + for his machine no matter what the OS suggests. However, in case + your operating sytsem perfectly supports the querying of the + system's default codeset (e.g. AmigaOS4) you are adviced to use + this function with care - or even avoid to use it at all. + + SEE ALSO + codesets.library/CodesetsFindA + + codesets.library/CodesetsListCreateA + + NAME + CodesetsListCreateA - creates a private, task-wise codeset list + and returns it to the user for further reference. + + SYNOPSIS + list = CodesetsListCreateA(attrs); + D0 A0 + + struct codesetList * CodesetsListCreateA(struct TagItem *); + + list = CodesetsListCreate(tag1, ...); + D0 A0 + + struct codesetList * CodesetsListCreateA(Tag, ...); + + FUNCTION + This function allows to create a private, task-wise codeset list by + loading charset files from either a whole directory tree, a specific + charset file or even by using an exsiting codeset structure. + By using this function, an application might load and carry its very + own private charsets in parallel to the internal charsets of + codeset.library. This way each application can provide a different + codeset list to the user without having to load and manage these + lists on their own. + + INPUTS + attrs - a list of addtional tag items. Valid items are: + + CSA_CodesetDir (STRPTR) + The path to a whole directory which codesets library will + walk through for searching for proper charset files. + Default: NULL + + CSA_CodesetFile (STRPTR) + The path to a specific file which codesets.library will try + to load as a standard charset translation file. + Default: NULL + + CSA_SourceCodeset (struct codeset *) + The pointer to an already existing codeset structure which + will immediately be added to the created list. Please be + carefull to add one codeset to multiple lists, especially + when you do a CodesetsListDelete() to free the list. + Default: NULL + + RESULT + list - the private codeset list or NULL on an error condition + + NOTE + For convienence, if no tag item attribute at all is supplied to the + function, codesets.library will try to load charsets from the + corresponding "PROGDIR:Charsets" directoy and add found codeset to + the list. However, in case a tag item is specified (no matter what + kind) the PROGDIR: scanning will be omitted. + + EXAMPLE + For loading all found charset files from PROGDIR:Charsets: + + -- cut here -- + struct codesetList *csList; + + if((csList = CodesetsListCreateA(NULL))) + { + STRPTR codesetArray = CodesetsSupported(CSA_CodesetList, csList, + TAG_DONE); + + // codesetsArray should now also carry our private + // codesets from PROGDIR:Charsets + ... + + CodesetsListDeleteA(CSA_CodesetList, csList, + TAG_DONE); + } + -- cut here -- + + SEE ALSO + codesets.library/CodesetsListDeleteA + codesets.library/CodesetsListAddA + codesets.library/CodesetsListRemoveA + codesets.library/CodesetsListSupportedA + codesets.library/CodesetsListFindA + codesets.library/CodesetsListFindBestA + + codesets.library/CodesetsListDeleteA + + NAME + CodesetsListDeleteA - deletes/frees all resources of previously created + private codeset lists. + + SYNOPSIS + result = CodesetsListDeleteA(attrs); + D0 A0 + + BOOL CodesetsListDeleteA(struct TagItem *); + + result = CodesetsListDelete(tag1, ...); + D0 A0 + + BOOL CodesetsListDelete(Tag, ...); + + FUNCTION + This function deletes all resources (also the contained codeset + structures per default) and frees the memory of previously allocated + private codeset lists. + + INPUTS + attrs - a list of mandatory tag items. Valid items are: + + CSA_CodesetList (struct codesetList *) + Pointer to a previously created, private codeset list whos + resources should be freed. + Default: NULL + + CSA_FreeCodesets (BOOL) + If TRUE, all contained codesets should also be freed/deleted, + otherwise just frees the list object itself. + Default: TRUE + + RESULT + result - TRUE on success otherwise FALSE + + NOTE + Please note that if you added an explicit codeset structure to more + than two private codeset lists you may run into problems with you + don't take care of this yourself. This is a dumb function which just + walks through the list and frees all resources. Set CSA_FreeCodesets + to FALSE in case you just want to free the list object. + + SEE ALSO + codesets.library/CodesetsListCreateA + codesets.library/CodesetsListAddA + codesets.library/CodesetsListRemoveA + + codesets.library/CodesetsListAddA + + NAME + CodesetsListAddA - allows to add additional codesets to an already + existing private codeset list previously created with + CodesetsListCreateA(). + + SYNOPSIS + result = CodesetsListAddA(attrs); + D0 A0 + + BOOL CodesetsListAddA(struct TagItem *); + + result = CodesetsListAdd(tag1, ...); + D0 A0 + + BOOL CodesetsListAdd(Tag, ...); + + FUNCTION + This function allows to add additional codesets to an already existing + private codeset list. Either codesets themself may be added directly, or + the path to either a file or a directory may be specified from which + additional codesets may be loaded from known charset files. + + INPUTS + attrs - a list of mandatory tag items. Valid items are: + + CSA_CodesetDir (STRPTR) + The path to a whole directory which codesets library will + walk through for searching for proper charset files. + Default: NULL + + CSA_CodesetFile (STRPTR) + The path to a specific file which codesets.library will try + to load as a standard charset translation file. + Default: NULL + + CSA_SourceCodeset (struct codeset *) + The pointer to an already existing codeset structure which + will immediately be added to the created list. Please be + carefull to add one codeset to multiple lists, especially + when you do a CodesetsListDelete() to free the list. + Default: NULL + + RESULT + result - TRUE on success otherwise FALSE + + NOTE + Be careful when adding one codeset to more than one codeset list as + you may run into problems when freeing the list afterwards. + + SEE ALSO + codesets.library/CodesetsListCreateA + codesets.library/CodesetsListDeleteA + codesets.library/CodesetsListAddA + + codesets.library/CodesetsListRemoveA + + NAME + CodesetsListRemoveA - removes a single or multiple codesets from a + previously created codeset list. + + SYNOPSIS + result = CodesetsListRemoveA(attrs); + D0 A0 + + BOOL CodesetsListRemoveA(struct TagItem *); + + result = CodesetsListRemove(tag1, ...); + D0 A0 + + BOOL CodesetsListRemove(Tag, ...); + + FUNCTION + This function allows to remove single or multiple codesets from a + previously created codeset list. The removed codeset structures will + also be freed/deleted per default. + + INPUTS + attrs - a list of mandatory tag items. Valid items are: + + CSA_SourceCodeset (struct codeset *) + Pointer to a codeset structure which should be removed from + its corresponding list. Per default its resources will also + be internally freed. + Default: NULL + + CSA_FreeCodesets (BOOL) + If TRUE, all supplied codesets should also be freed/deleted, + otherwise the codesets will just be removed from their lists. + Default: TRUE + + RESULT + result - TRUE on success otherwise FALSE + + NOTE + The function will automatically prevent removal of codesets from the + internal codeset list of codesets.library and will return FALSE in + case a user tried to remove a codeset from the internal list. + + SEE ALSO + codesets.library/CodesetsListDeleteA + codesets.library/CodesetsListAddA + + codesets.library/CodesetsUTF8CreateA + + NAME + CodesetsUTF8CreateA - creates an UTF8 compliant string + interpretation out of a supplied source + string. + + + SYNOPSIS + utf8 = CodesetsUTF8CreateA(attrs); + A0 + UTF8 * CodesetsUTF8CreateA(struct TagItem *); + + utf8 = CodesetsUTF8Create(tag1, ...); + A0 + UTF8 * CodesetsUTF8Create(Tag, ...); + + + FUNCTION + Creates an UTF8 from a string which is encoded in specified + codeset. + + INPUTS + attrs - a list of mandatory tag items. Valid items are: + + CSA_Source (STRPTR) + The string which you want to convert. Must be supplied, + otherwise the functions returns NULL. + + CSA_SourceLen (ULONG) + Length of CSA_Source or less to convert just a part + Default: string length of CSA_Source + + CSA_SourceCodeset (struct codeset *) + The codeset in which the source string is encoded. + Default: the system's default codeset + + CSA_Dest (STRPTR) + Destination buffer. If you supply a valid buffer here, you + must also set CSA_DestLen to the length of your buffer. If + CSA_AllocIfNeeded is TRUE, CSA_DestLen is checked to see if + CSA_Dest may contain the whole utf8. If CSA_Dest can't + contain the utf8, a brand new buffer is allocated. If + CSA_AllocIfNeeded is FALSE, up to CSA_DestLen (ending '\0' + included) are written to CSA_Dest. If CSA_DestHook is supplied, + CSA_Dest is ignored. + Default: NULL. + + CSA_DestHook (struct Hook *) + Destination hook. If this is supplied, it is called with a + partial converted string. + + The hook function should be declared as: + + ULONG ASM SAVEDS fun(REG(a0, struct Hook *hook), + REG(a1, STRPTR buf), + REG(a2, struct convertMsg *msg)) + + struct Hook *hook + Your hook + + STRPTR buf + The partial '\0' terminated buffer + + msg->state - one of + + o CSV_Translating + More calls to came + + o CSV_End + Last call + + msg->Len + length of string 'buf' + + You may define the min length of the buffer via CSA_DestLen. + If so, accepted values are 16<=v<=sizeof_codeset_buffer. + + Don't count on this size to be fixed, even if you used + CSA_DestLen ! + + CSA_DestLen (ULONG) + If CSA_DestHook is used, it represents the min length of the + buffer that causes hook calls. Otherwise it is the size of + the buffer supplied in CSA_Dest. So if CSA_DestHook is + supplied, CSA_DestLen is optional, otherwise it is required. + + CSA_DestLenPtr (ULONG *) + If supplied, will contain the length of the utf8 string + + CSA_AllocIfNeeded (BOOL) + If the destination buffer length is too small to contain + the UTF8 a new buffer is allocated + Default: TRUE + + CSA_Pool (APTR) + If a new destination buffer is to be allocated (it happens + if and only if CSA_DestHook is not used, CSA_AllocIfNeeded + is TRUE, CSA_Dest buffer is too small for the utf8) this pool + is used. The result is to be freed via FreePooled(pool, utf8). + If it is not supplied, the destination buffer is allocated + from the internal memory pool and must be freed with + CodesetsFreeA(utf8, NULL). + + CSA_PoolSem (struct SignalSemaphore *) + A semaphore to lock when using CSA_Pool + + RESULT + utf8 - the utf8 string or NULL + If CSA_DestHook is used always NULL. + If CSA_DestHook is not used NULL means failure + to allocate mem. + + EXAMPLE + The shortest invocation is: + -- cut here -- + UTF8 *utf8; + STRPTR str; + + if((utf8 = CodesetsUTF8Create(CSA_Source, str, + TAG_DONE))) + { + ... + + CodesetsFreeA(utf8,NULL); + } + -- cut here -- + + + In case you want to use your pool to allocate mem: + -- cut here -- + UTF8 *utf8; + STRPTR str; + APTR pool; + + if((utf8 = CodesetsUTF8Create(CSA_Source, str, + CSA_Pool, pool, + TAG_DONE))) + { + ... + + FreeVecPooled(pool,utf,NULL); + } + -- cut here -- + + + If your pool is to be arbitrated via a semaphore: + -- cut here -- + UTF8 *utf8; + STRPTR str; + APTR pool; + struct SignalSemaphore *sem; + + if((utf8 = CodesetsUTF8Create(CSA_Source, str, + CSA_Pool, pool, + CSA_PoolSem, sem, + TAG_DONE))) + { + ... + + FreeVecPooled(pool,utf,NULL); + } + -- cut here -- + + + If you want to use your own buffer to reduce mem + allocation: + -- cut here -- + UTF8 *utf8; + STRPTR buf[256]; + + if((utf8 = CodesetsUTF8Create(CSA_Source, str, + CSA_Dest, buf, + CSA_DestLen, sizeof(buf), + TAG_DONE))) + { + ... + + if(utf8 != buf) + CodesetsFreeA(utf8,NULL); + } + -- cut here -- + + + If your string are max MAXLEN chars long (e.g. image to be + in a MUI application and you know the max size of your + string gadgets), you should better supply your own buffer: + -- cut here -- + UTF8 *utf8; + STRPTR buf[MAXSIZE*6+1]; + + if((utf8 = CodesetsUTF8Create(CSA_Source, str, + CSA_Dest, buf, + CSA_Dest, sizeof(buf), + TAG_DONE))) + { + ... + } + -- cut here -- + + + If you strings are very large and so you are sure there is + no mem for them and or you have your own reasons to do + that: + -- cut here -- + static ULONG ASM SAVEDS + destFun(REG(a0, struct Hook *hook), + REG(a1, STRPTR buf), + REG(a2, struct convertMsg *msg)) + { + printf("[%3ld] [%s]\n",msg->len,buf); + if(msg->state == CSV_End) + printf("\n"); + + return 0; + } + + struct Hook dest; + dest.h_Entry = (HOOKFUNC)destFun; + + CodesetsUTF8Create(CSA_Source, str, + CSA_DestHook, &dest, + TAG_DONE); + -- cut here -- + + SEE ALSO + codesets.library/CodesetsUTF8ToStrA + codesets.library/CodesetsUTF8Len + + codesets.library/CodesetsUTF8ToStrA + + NAME + CodesetsUTF8ToStrA - converts an UTF8 encoded string into + a specified destination codeset. + + + SYNOPSIS + str = CodesetsUTF8ToStrA(attrs); + D0 A0 + + STRPTR CodesetsUTF8ToStrA(attrs); + + str = CodesetsUTF8ToStr(tag1, ...); + D0 A0 + + STRPTR CodesetsUTF8ToStr(Tag,...); + + + FUNCTION + Convert an utf8 string to a specified codeset. + + INPUTS + attrs - a list of mandatory tag items. Valid items are: + + CSA_Source (STRPTR) + The string which you want to convert. Must be supplied, + otherwise the functions returns NULL. + + CSA_SourceLen (ULONG) + Length of CSA_Source. Must be > 0 or the function returns + NULL. + Default: string length of CSA_Source - strlen() + + CSA_Dest (STRPTR) + Destination buffer. If you supply a valid buffer here, you + must also set CSA_DestLen to the length of your buffer. If + CSA_AllocIfNeeded is TRUE, CSA_DestLen is checked to see if + CSA_Dest may contain the whole converted string. If CSA_Dest + can't contain the output string, a brand new buffer is allocated. + If CSA_AllocIfNeeded is FALSE, up to CSA_DestLen (ending '\0' + included) are written to CSA_Dest. If CSA_DestHook is supplied, + CSA_Dest is ignored. + Default: NULL. + + CSA_DestCodeset (struct codeset *) + The codeset to which the UTF8 string should be encoded to. + Default: the system's default codeset + + CSA_DestHook (struct Hook *) + Destination hook. If this is supplied, it is called with a + partial converted string. + + The hook function should be declared as: + + ULONG ASM SAVEDS fun(REG(a0, struct Hook *hook), + REG(a1, STRPTR buf), + REG(a2, struct convertMsg *msg)) + + struct Hook *hook + Your hook + + STRPTR buf + The partial '\0' terminated buffer + + msg->state - one of + + o CSV_Translating + More calls to came + + o CSV_End + Last call + + msg->Len + length of string 'buf' + + You may define the min length of the buffer via CSA_DestLen. + If so, accepted values are 16<=v<=sizeof_codeset_buffer. + + Don't count on this size to be fixed, even if you used + CSA_DestLen ! + + CSA_DestLen (ULONG) + If CSA_DestHook is used, it represents the min length of the + buffer that causes hook calls. Otherwise it is the size of + the buffer supplied in CSA_Dest. So if CSA_DestHook is + supplied, CSA_DestLen is optional, otherwise it is required. + + CSA_DestLenPtr (ULONG *) + If supplied, will contain the length of the converted string. + + CSA_AllocIfNeeded (BOOL) + If the destination buffer length is too small to contain + the output string, a new buffer is allocated. + Default: TRUE + + CSA_Pool (APTR) + If a new destination buffer is to be allocated (it happens + if and only if CSA_DestHook is not used, CSA_AllocIfNeeded + is TRUE, CSA_Dest buffer is too small for the string) this pool + is used. The result is to be freed via FreePooled(pool, string). + If it is not supplied, the destination buffer is allocated + from the internal memory pool and must be freed with + CodesetsFreeA(string, NULL). + + CSA_PoolSem (struct SignalSemaphore *) + A semaphore to lock when using CSA_Pool + + CSA_ErrPtr (int *) + Pointer to an integer variable which will be filled with the + number of found issues (number of not convertable chars) + Default: NULL + + RESULT + str - the string or NULL + If CSA_DestHook is used always NULL. + If CSA_DestHook is not used NULL means failure + to allocate mem. + + SEE ALSO + codesets.library/CodesetsUTF8CreateA + codesets.library/CodesetsUTF8Len + + codesets.library/CodesetsUTF8Len + + NAME + CodesetsUTF8Len - returns the length of a supplied utf8 string. + + SYNOPSIS + len = CodesetsUTF8Len(utf8); + D0 A0 + + ULONG CodesetsUTF8Len(UTF8 *); + + FUNCTION + Returns the amount of real characters stored in a supplied UTF8 + string. This is _NOT_ the space required to store the UTF8 string, + it is the actual number of _real_ character the UTF8 represents. + + INPUTS + utf8 - pointer to the UTF8 string generated by the internal + functions of codesets.library + + RESULT + len - length of utf8 + + SEE ALSO + codesets.library/CodesetsUTF8CreateA + codesets.library/CodesetsUTF8ToStrA + + codesets.library/CodesetsIsValidUTF8 + + NAME + CodesetsIsValidUTF8 - tells if a supplied standard string is meant to + carry a perfectly valid UTF8 sequence + + SYNOPSIS + result = CodesetsIsValidUTF8(str); + D0 A0 + + BOOL CodesetsIsValidUTF8(STRPTR); + + FUNCTION + Returns TRUE in case the supplied string only contains char sequences + which are compatible to the UTF8 standard. + + INPUTS + str - a standard STRPTR string. + + RESULT + result - TRUE in case the string conatins valid UTF8 data. + + NOTE + This function uses the common 'GOOD_UCS' macro together with parsing + the whole string. This means that it will only return TRUE in case + the supplied string only contains UTF8 sequences. A mixture of UTF8 + and non-UTF8 sequences will result in the function returning FALSE. + + SEE ALSO + codesets.library/CodesetsUTF8CreateA + codesets.library/CodesetsUTF8ToStrA + + codesets.library/CodesetsIsLegalUTF8 + + NAME + CodesetsIsLegalUTF8 - check a UTF8 sequence + + SYNOPSIS + res = CodesetsIsLegalUTF8(source, length); + A0 D0 + + ULONG CodesetsIsLegalUTF8(UTF8 *, ULONG); + + + FUNCTION + Checks if source is a valid UTF8 sequence generated + by the internal functions of codesets.library + + INPUTS + source - the char sequence to check + length - size of source + + RESULT + res - TRUE or FALSE + + SEE ALSO + codesets.library/CodesetsUTF8CreateA + codesets.library/CodesetsUTF8ToStrA + + codesets.library/CodesetsIsLegalUTF8Sequence + + NAME + CodesetsIsLegalUTF8Sequence - check a char sequence + + SYNOPSIS + res = CodesetsIsLegalUTF8Sequence(source, end); + A0 A1 + + ULONG CodesetsIsLegalUTF8(UTF8 *, UTF8 *); + + FUNCTION + Check if source is a valid UTF8 sequence within the + source and end boundaries. + + INPUTS + source - the char sequence to check + end - pointer to the end of the sequence to check + + RESULT + res - TRUE or FALSE + + SEE ALSO + codesets.library/CodesetsUTF8CreateA + codesets.library/CodesetsUTF8ToStrA + + codesets.library/CodesetsStrLenA + + NAME + CodesetsStrLenA - returns the length of the source string + in case it will be converted to an UTF8 + string. + + SYNOPSIS + len = CodesetsStrLenA(str, attrs) + A0 A1 + + ULONG CodesetsStrLenA(STRPTR, struct TagItem *); + + len = CodesetsStrLen(str, tag1, ...); + A0 A1 + + ULONG CodesetsStrLen(STRPTR, Tag, ...); + + FUNCTION + Return the length (size) of str in case it will be converted to + an UTF8 compliant string. + + INPUTS + str - the string to obtain length of + attrs - a list of additional tag items. Valid items are: + + CSA_SourceCodeset (struct codeset *) + The codeset the source string is encoded in. + Default: the system's default codeset + + CSA_SourceLen (ULONG) + The length of str + Default: string length of CSA_Source + + RESULT + len - the length of the string if it will be converted to + an UTF8 string. + + SEE ALSO + codesets.library/CodesetsUTF8CreateA + + codesets.library/CodesetsConvertUTF16toUTF32 + + NAME + CodesetsConvertUTF16toUTF32 - converts from UTF16 to UTF32 + + SYNOPSIS + res = CodesetsConvertUTF16toUTF32(sourceStart,sourceEnd,targetStart,targetEnd,flags ); + D0 A0 A1 A2 A3 D0 + + ULONG CodesetsConvertUTF16toUTF32(const UTF16 **,const UTF16 *,UTF32 **,UTF32 *,ULONG); + + FUNCTION + Converts UTF16 to UTF32. + + INPUTS + + RESULT + + SEE ALSO + + codesets.library/CodesetsConvertUTF16toUTF8 + + NAME + CodesetsConvertUTF16toUTF8 - converts from UTF16 to UTF8 + + SYNOPSIS + res = CodesetsConvertUTF16toUTF8(sourceStart,sourceEnd,targetStart,targetEnd,flags ); + D0 A0 A1 A2 A3 D0 + + ULONG CodesetsConvertUTF16toUTF8(const UTF16 **,const UTF16 *,UTF8 **,UTF8 *,ULONG); + + FUNCTION + Converts UTF16 to UTF8. + + INPUTS + + RESULT + + SEE ALSO + + codesets.library/CodesetsConvertUTF32toUTF16 + + NAME + CodesetsConvertUTF32toUTF16 - converts from UTF32 to UTF16 + + SYNOPSIS + res = CodesetsConvertUTF32toUTF16(sourceStart,sourceEnd,targetStart,targetEnd,flags ); + D0 A0 A1 A2 A3 D0 + + ULONG CodesetsConvertUTF32toUTF16(const UTF32 **,const UTF32 *,UTF16 **,UTF16 *,ULONG); + + FUNCTION + Converts UTF32 to UTF16. + + INPUTS + + RESULT + + SEE ALSO + + codesets.library/CodesetsConvertUTF32toUTF8 + + NAME + CodesetsConvertUTF32toUTF8 - converts from UTF32 to UTF8 + + SYNOPSIS + res = CodesetsConvertUTF32toUTF8(sourceStart,sourceEnd,targetStart,targetEnd,flags ); + D0 A0 A1 A2 A3 D0 + + ULONG CodesetsConvertUTF32toUTF8(const UTF32 **,const UTF32 *,UTF8 **,UTF8 *,ULONG); + + FUNCTION + Converts UTF32 to UTF16. + + INPUTS + + RESULT + + SEE ALSO + + codesets.library/CodesetsConvertUTF8toUTF16 + + NAME + CodesetsConvertUTF8toUTF16 - converts from UTF8 to UTF16 + + SYNOPSIS + res = CodesetsConvertUTF8toUTF16(sourceStart,sourceEnd,targetStart,targetEnd,flags ); + D0 A0 A1 A2 A3 D0 + + ULONG CodesetsConvertUTF8toUTF16(const UTF8 **,const UTF8 *,UTF16 **,UTF16 *,ULONG); + + FUNCTION + Converts UTF8 to UTF16. + + INPUTS + + RESULT + + SEE ALSO + + codesets.library/CodesetsConvertUTF8toUTF32 + + NAME + CodesetsConvertUTF8toUTF32 - converts from UTF8 to UTF32 + + SYNOPSIS + res = CodesetsConvertUTF8toUTF32(sourceStart,sourceEnd,targetStart,targetEnd,flags ); + D0 A0 A1 A2 A3 D0 + + ULONG CodesetsConvertUTF8toUTF32(const UTF8 **,const UTF8 *,UTF32 **,UTF32 *,ULONG); + + FUNCTION + Converts UTF8 to UTF32. + + INPUTS + + RESULT + + SEE ALSO + + codesets.library/CodesetsDecodeB64A + + NAME + CodesetsDecodeB64A - decodes a supplied base64 encoded string + or file into plain text charwise. + + SYNOPSIS + res = CodesetsDecodeB64A(attrs); + D0 A0 + + ULONG CodesetsDecodeB64A(struct TagItem *); + + res = CodesetsDecodeB64(tag1, ...); + D0 A0 + + ULONG CodesetsDecodeB64A(Tag, ....); + + FUNCTION + Decodes a string or a complete base64 encoded file to a + plain text buffer or also a destination file + + INPUTS + attrs - a list of mandatory tag items. Valid items are: + + CSA_B64SourceString (STRPTR) + The source string to decode + + CSA_B64SourceLen (ULONG) + The length of CSA_B64SourceString Must be supplied if + CSA_B64SourceString is used. + + CSA_B64SourceFile (STRPTR) + Source file name. + + CSA_B64DestPtr (STRPTR *) + Destination buffer pointer. Set to the allocated buffer. + Must be supplied if CSA_B64DestFile is not used. To + free the buffer use CodesetsFreeA(). + + CSA_B64DestFile (STRPTR) + Destination file name. Must be supplied if + CSA_B64DestPtr is used. + + CSA_B64FLG_NtCheckErr (BOOL) + Don't stop on error. + + RESULT + res - result, one of (if 0 OK, if >0 error) + CSR_B64_ERROR_OK + CSR_B64_ERROR_MEM + CSR_B64_ERROR_DOS + CSR_B64_ERROR_INCOMPLETE + CSR_B64_ERROR_ILLEGAL + + NOTE + It fully operates charwise and doesn't take respect of the + individual codeset the decoded data may be still be encoded to. + + SEE ALSO + codesets.library/CodesetsEncodeB64A + + codesets.library/CodesetsEncodeB64A + + NAME + CodesetsEncodeB64A - encodes a string or whole file + to base64 + + SYNOPSIS + res = CodesetsEncodeB64A(attrs); + D0 A0 + + ULONG CodesetsEncodeB64A(struct TagItem *); + + res = CodesetsEncodeB64(tag1, ...); + D0 A0 + + ULONG CodesetsEncodeB64(Tag, ....); + + FUNCTION + Encodes the supplied string or file to either a whole + buffer or also to a file. + + INPUTS + attrs - a list of mandatory tag items. Valid items are: + + CSA_B64SourceString (STRPTR) + The source string to encode + + CSA_B64SourceLen (ULONG) + The length of CSA_B64SourceString. Must be supplied if + CSA_B64SourceString is used. + + CSA_B64SourceFile (STRPTR) + Source file name. + + CSA_B64DestPtr (STRPTR *) + Destination buffer pointer. Set to the allocated buffer. + Must be supplied if CSA_B64DestFile is not used. To + free the buffer use CodesetsFreeA(). + + CSA_B64DestFile (STRPTR) + Destination file name. Must be supplied if + CSA_B64DestPtr is used. + + CSA_B64MaxLineLen (ULONG) + Maximum length of encoded lines. 00 error) + CSR_B64_ERROR_OK + CSR_B64_ERROR_MEM + CSR_B64_ERROR_DOS + CSR_B64_ERROR_INCOMPLETE + CSR_B64_ERROR_ILLEGAL + + NOTE + It fully operates charwise and doesn't take respect of the + individual codeset the decoded data may be encoded to. + + SEE ALSO + codesets.library/CodesetsDecodeB64A + diff --git a/workbench/libs/codesetslib/developer/examples/DetectCodeset.c b/workbench/libs/codesetslib/developer/examples/DetectCodeset.c new file mode 100755 index 000000000..5e17e7636 --- /dev/null +++ b/workbench/libs/codesetslib/developer/examples/DetectCodeset.c @@ -0,0 +1,112 @@ +/*************************************************************************** + + codesets.library - Amiga shared library for handling different codesets + Copyright (C) 2001-2005 by Alfonso [alfie] Ranieri . + Copyright (C) 2005-2007 by codesets.library Open Source Team + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + codesets.library project: http://sourceforge.net/projects/codesetslib/ + + Most of the code included in this file was relicensed from GPL to LGPL + from the source code of SimpleMail (http://www.sf.net/projects/simplemail) + with full permissions by its authors. + + $Id$ + +***************************************************************************/ + +#include +#include +#include +#include + +#define ISO8859_1_STR "Schmöre bröd, schmöre bröd, bröd bröd bräd." +#define CP1251_STR "1251 êîäèðîâêà äëÿ ïðèìåðà." +#define ASCII_STR "latin 1 bla bla bla." +#define KOI8R_STR "koi îÅ×ÏÚÍÏÖÎÏ ÐÅÒÅËÏÄÉÒÏ×ÁÔØ ÉÚ ËÏÄÉÒÏ×ËÉ" + +struct Library *CodesetsBase = NULL; +#if defined(__amigaos4__) +struct CodesetsIFace* ICodesets = NULL; +#endif + +#if defined(__amigaos4__) +#define GETINTERFACE(iface, base) (iface = (APTR)GetInterface((struct Library *)(base), "main", 1L, NULL)) +#define DROPINTERFACE(iface) (DropInterface((struct Interface *)iface), iface = NULL) +#else +#define GETINTERFACE(iface, base) TRUE +#define DROPINTERFACE(iface) +#endif + +int main(int argc,char **argv) +{ + int res; + + if((CodesetsBase = OpenLibrary(CODESETSNAME,CODESETSVER)) && + GETINTERFACE(ICodesets, CodesetsBase)) + { + ULONG errNum = 0; + struct codeset *cs; + + if((cs = CodesetsFindBest(CSA_Source, ISO8859_1_STR, + CSA_ErrPtr, &errNum, + TAG_DONE))) + { + printf("Identified ISO8859_1_STR as %s with %ld of %d errors\n", cs->name, errNum, strlen(ISO8859_1_STR)); + } + else + printf("couldn't identify ISO8859_1_STR!\n"); + + if((cs = CodesetsFindBest(CSA_Source, CP1251_STR, + CSA_ErrPtr, &errNum, + CSA_CodesetFamily, CSV_CodesetFamily_Cyrillic, + TAG_DONE))) + { + printf("Identified CP1251_STR as %s with %ld of %d errors\n", cs->name, errNum, strlen(CP1251_STR)); + } + else + printf("couldn't identify CP1251_STR!\n"); + + if((cs = CodesetsFindBest(CSA_Source, ASCII_STR, + CSA_ErrPtr, &errNum, + CSA_CodesetFamily, CSV_CodesetFamily_Cyrillic, + TAG_DONE))) + { + printf("Identified ASCII_STR as %s with %ld of %d errors\n", cs->name, errNum, strlen(ASCII_STR)); + } + else + printf("couldn't identify ASCII_STR!\n"); + + if((cs = CodesetsFindBest(CSA_Source, KOI8R_STR, + CSA_ErrPtr, &errNum, + CSA_CodesetFamily, CSV_CodesetFamily_Cyrillic, + TAG_DONE))) + { + printf("Identified KOI8R_STR as %s with %ld of %d errors\n", cs->name, errNum, strlen(KOI8R_STR)); + } + else + printf("couldn't identify KOI8R_STR!\n"); + + res = 0; + + DROPINTERFACE(ICodesets); + CloseLibrary(CodesetsBase); + CodesetsBase = NULL; + } + else + { + printf("can't open %s %d+\n",CODESETSNAME,CODESETSVER); + res = 20; + } + + return res; +} diff --git a/workbench/libs/codesetslib/developer/examples/UTF8ToStrHook.c b/workbench/libs/codesetslib/developer/examples/UTF8ToStrHook.c new file mode 100755 index 000000000..cdfdeb781 --- /dev/null +++ b/workbench/libs/codesetslib/developer/examples/UTF8ToStrHook.c @@ -0,0 +1,136 @@ +/*************************************************************************** + + codesets.library - Amiga shared library for handling different codesets + Copyright (C) 2001-2005 by Alfonso [alfie] Ranieri . + Copyright (C) 2005-2007 by codesets.library Open Source Team + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + codesets.library project: http://sourceforge.net/projects/codesetslib/ + + Most of the code included in this file was relicensed from GPL to LGPL + from the source code of SimpleMail (http://www.sf.net/projects/simplemail) + with full permissions by its authors. + + $Id$ + +***************************************************************************/ + +#include +#include +#include +#include + +// plain: "öäüÖÄÜß" +#define STR "öäüÖÄÜß" \ + "öäüÖÄÜß" \ + "öäüÖÄÜß" \ + "öäüÖÄÜß" \ + "öäüÖÄÜß" \ + "öäüÖÄÜß" + +#ifdef __AROS__ +#include +#else +#include "SDI_hook.h" +#endif + +struct Library *CodesetsBase = NULL; +#if defined(__amigaos4__) +struct CodesetsIFace* ICodesets = NULL; +#endif + +#if defined(__amigaos4__) +#define GETINTERFACE(iface, base) (iface = (APTR)GetInterface((struct Library *)(base), "main", 1L, NULL)) +#define DROPINTERFACE(iface) (DropInterface((struct Interface *)iface), iface = NULL) +#else +#define GETINTERFACE(iface, base) TRUE +#define DROPINTERFACE(iface) +#endif + +#ifdef __AROS__ + +AROS_UFH3S(ULONG, destFunc, +AROS_UFHA(struct Hook *, h, A0), +AROS_UFHA(struct convertMsg *, msg, A2), +AROS_UFHA(STRPTR, buf, A1)) +{ + AROS_USERFUNC_INIT + printf("[%3ld] [%s]\n",msg->len,buf); + + if(msg->state == CSV_End) + printf("\n"); + + return 0; + AROS_USERFUNC_EXIT +} + +static struct Hook destHook; + +#else /* __AROS__ */ + +HOOKPROTONH(destFunc, ULONG, struct convertMsg* msg, STRPTR buf) +{ + printf("[%3ld] [%s]\n",msg->len,buf); + + if(msg->state == CSV_End) + printf("\n"); + + return 0; +} +MakeStaticHook(destHook, destFunc); + +#endif /* __AROS__ */ + +int main(int argc,char **argv) +{ + int res; + + #ifdef __AROS__ + destHook.h_Entry = (HOOKFUNC)destFunc; + #endif + + if((CodesetsBase = OpenLibrary(CODESETSNAME,CODESETSVER)) && + GETINTERFACE(ICodesets, CodesetsBase)) + { + char *str; + + if(argc>1) + str = argv[1]; + else + str = STR; + + // check that the string only contains UTF8 + // sequences. + if(CodesetsIsValidUTF8(str)) + { + CodesetsUTF8ToStr(CSA_Source, str, + CSA_DestLen, 32, + CSA_DestHook, &destHook, + TAG_DONE); + } + else + printf("Error: example string wasn't recognized as UTF8!\n"); + + res = 0; + + DROPINTERFACE(ICodesets); + CloseLibrary(CodesetsBase); + CodesetsBase = NULL; + } + else + { + printf("can't open %s %d+\n",CODESETSNAME,CODESETSVER); + res = 20; + } + + return res; +} diff --git a/workbench/libs/codesetslib/developer/examples/b64d.c b/workbench/libs/codesetslib/developer/examples/b64d.c new file mode 100755 index 000000000..a1b1b8593 --- /dev/null +++ b/workbench/libs/codesetslib/developer/examples/b64d.c @@ -0,0 +1,81 @@ +/*************************************************************************** + + codesets.library - Amiga shared library for handling different codesets + Copyright (C) 2001-2005 by Alfonso [alfie] Ranieri . + Copyright (C) 2005-2007 by codesets.library Open Source Team + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + codesets.library project: http://sourceforge.net/projects/codesetslib/ + + Most of the code included in this file was relicensed from GPL to LGPL + from the source code of SimpleMail (http://www.sf.net/projects/simplemail) + with full permissions by its authors. + + $Id$ + +***************************************************************************/ + +#include +#include +#include +#include + +struct Library *CodesetsBase = NULL; +#if defined(__amigaos4__) +struct CodesetsIFace* ICodesets = NULL; +#endif + +#if defined(__amigaos4__) +#define GETINTERFACE(iface, base) (iface = (APTR)GetInterface((struct Library *)(base), "main", 1L, NULL)) +#define DROPINTERFACE(iface) (DropInterface((struct Interface *)iface), iface = NULL) +#else +#define GETINTERFACE(iface, base) TRUE +#define DROPINTERFACE(iface) +#endif + +int main(int argc,char **argv) +{ + int res; + + if (argc==3) + { + + if((CodesetsBase = OpenLibrary(CODESETSNAME,CODESETSVER)) && + GETINTERFACE(ICodesets, CodesetsBase)) + { + ULONG r; + + r = CodesetsDecodeB64(CSA_B64SourceFile, argv[1], + CSA_B64DestFile, argv[2], + TAG_DONE); + printf("Res %ld\n",r); + + DROPINTERFACE(ICodesets); + CloseLibrary(CodesetsBase); + CodesetsBase = NULL; + + res = 0; + } + else + { + printf("can't open %s %d+\n",CODESETSNAME,CODESETSVER); + res = 20; + } + } + else + { + printf("Usage: b64d \n"); + res = 10; + } + + return res; +} diff --git a/workbench/libs/codesetslib/developer/examples/b64e.c b/workbench/libs/codesetslib/developer/examples/b64e.c new file mode 100755 index 000000000..a8e776fba --- /dev/null +++ b/workbench/libs/codesetslib/developer/examples/b64e.c @@ -0,0 +1,80 @@ +/*************************************************************************** + + codesets.library - Amiga shared library for handling different codesets + Copyright (C) 2001-2005 by Alfonso [alfie] Ranieri . + Copyright (C) 2005-2007 by codesets.library Open Source Team + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + codesets.library project: http://sourceforge.net/projects/codesetslib/ + + Most of the code included in this file was relicensed from GPL to LGPL + from the source code of SimpleMail (http://www.sf.net/projects/simplemail) + with full permissions by its authors. + + $Id$ + +***************************************************************************/ + +#include +#include +#include +#include + +struct Library *CodesetsBase = NULL; +#if defined(__amigaos4__) +struct CodesetsIFace* ICodesets = NULL; +#endif + +#if defined(__amigaos4__) +#define GETINTERFACE(iface, base) (iface = (APTR)GetInterface((struct Library *)(base), "main", 1L, NULL)) +#define DROPINTERFACE(iface) (DropInterface((struct Interface *)iface), iface = NULL) +#else +#define GETINTERFACE(iface, base) TRUE +#define DROPINTERFACE(iface) +#endif + +int main(int argc,char **argv) +{ + int res; + + if (argc==3) + { + if((CodesetsBase = OpenLibrary(CODESETSNAME,CODESETSVER)) && + GETINTERFACE(ICodesets, CodesetsBase)) + { + ULONG r; + + r = CodesetsEncodeB64(CSA_B64SourceFile, argv[1], + CSA_B64DestFile, argv[2], + TAG_DONE); + printf("Res %ld\n",r); + + DROPINTERFACE(ICodesets); + CloseLibrary(CodesetsBase); + CodesetsBase = NULL; + + res = 0; + } + else + { + printf("can't open %s %d+\n",CODESETSNAME,CODESETSVER); + res = 20; + } + } + else + { + printf("Usage: b64e \n"); + res = 10; + } + + return res; +} diff --git a/workbench/libs/codesetslib/developer/examples/demo1.c b/workbench/libs/codesetslib/developer/examples/demo1.c new file mode 100755 index 000000000..296e132ca --- /dev/null +++ b/workbench/libs/codesetslib/developer/examples/demo1.c @@ -0,0 +1,908 @@ +/*************************************************************************** + + codesets.library - Amiga shared library for handling different codesets + Copyright (C) 2001-2005 by Alfonso [alfie] Ranieri . + Copyright (C) 2005-2007 by codesets.library Open Source Team + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + codesets.library project: http://sourceforge.net/projects/codesetslib/ + + Most of the code included in this file was relicensed from GPL to LGPL + from the source code of SimpleMail (http://www.sf.net/projects/simplemail) + with full permissions by its authors. + + $Id$ + +***************************************************************************/ + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define USE_INLINE_STDARG + +// tempoarly disable the INLINE STDARG define here +#if defined(NO_INLINE_STDARG) +#undef NO_INLINE_STDARG +#include +#define NO_INLINE_STDARG +#elif defined(NO_PPCINLINE_STDARG) +#undef NO_PPCINLINE_STDARG +#include +#define NO_PPCINLINE_STDARG +#else +#include +#endif + +#include +#include + +#include "SDI_compiler.h" +#include "SDI_hook.h" +#include "SDI_stdarg.h" + +/***********************************************************************/ +/* +** Some macro +*/ + +#ifndef MAKE_ID +#define MAKE_ID(a,b,c,d) ((ULONG) (a)<<24 | (ULONG) (b)<<16 | (ULONG) (c)<<8 | (ULONG) (d)) +#endif + +#if defined(__amigaos4__) +#define GETINTERFACE(iface, base) (iface = (APTR)GetInterface((struct Library *)(base), "main", 1L, NULL)) +#define DROPINTERFACE(iface) (DropInterface((struct Interface *)iface), iface = NULL) +#else +#define GETINTERFACE(iface, base) TRUE +#define DROPINTERFACE(iface) +#endif + +/***********************************************************************/ +/* +** Globals +*/ + +char __ver[] = "\0$VER: CodesetsDemo1 1.0 (10.11.2004)"; +long __stack = 8192; + +struct Library *MUIMasterBase = NULL; +struct Library *CodesetsBase = NULL; +struct Library *UtilityBase = NULL; + +#if defined(__amigaos4__) +struct MUIMasterIFace *IMUIMaster = NULL; +struct CodesetsIFace *ICodesets = NULL; +struct IntuitionIFace *IIntuition = NULL; +struct UtilityIFace *IUtility = NULL; +struct Library *IntuitionBase = NULL; +#else +struct IntuitionBase *IntuitionBase = NULL; +#endif + + +struct MUI_CustomClass *appClass, *popupCodesetsClass, *editorClass; + +/***********************************************************************/ +/* +** MUI stuff +*/ + +/* App attributes */ +#define MUIA_App_Win (TAG_USER+1) + +/* App methods */ +#define MUIM_App_DisposeWin (TAG_USER+2) +#define MUIM_App_About (TAG_USER+3) +#define MUIM_App_AboutMUI (TAG_USER+4) + +struct MUIP_App_DisposeWin +{ + ULONG MethodID; + Object *win; +}; + +/* Editor attributes */ +#define MUIA_Editor_CodesetsObj (TAG_USER+5) + +/* Editor methods */ +#define MUIM_Editor_Load (TAG_USER+6) +#define MUIM_Editor_Save (TAG_USER+7) + +struct MUIP_Editor_Load +{ + ULONG MethodID; + ULONG plain; +}; + +/* Classes object creation macros */ +#define appObject NewObject(appClass->mcc_Class,NULL +#define editorObject NewObject(editorClass->mcc_Class,NULL +#define popupCodesetObject NewObject(popupCodesetsClass->mcc_Class,NULL + +/***********************************************************************/ +/* +** Usual DoSuperNew funct +*/ + +/// DoSuperNew +// Calls parent NEW method within a subclass +#if !defined(__MORPHOS__) +Object * STDARGS VARARGS68K DoSuperNew(struct IClass *cl, Object *obj, ...) +{ + Object *rc; + VA_LIST args; + + VA_START(args, obj); + rc = (Object *)DoSuperMethod(cl, obj, OM_NEW, VA_ARG(args, ULONG), NULL); + VA_END(args); + + return rc; +} +#endif +/// + +/***********************************************************************/ +/* +** Codesets popup open window hook funct +*/ + +HOOKPROTONH(popupWindowFun, void, Object *pop, Object *win) +{ + set(win,MUIA_Window_DefaultObject,pop); +} +MakeStaticHook(popupWindowHook, popupWindowFun); + +/***********************************************************************/ +/* +** Codesets popup open hook funct +** Sets the active entry in the list +*/ + +HOOKPROTONH(popupOpenFun, ULONG, Object *list, Object *str) +{ + STRPTR s, x; + int i; + + get(str, MUIA_Textinput_Contents, (ULONG)&s); + + for (i = 0; ;i++) + { + DoMethod(list,MUIM_List_GetEntry,i,&x); + if (!x) + { + set(list,MUIA_List_Active,MUIV_List_Active_Off); + break; + } + else + if (!stricmp(x,s)) + { + set(list,MUIA_List_Active,i); + break; + } + } + + return TRUE; +} +MakeStaticHook(popupOpenHook, popupOpenFun); + +/***********************************************************************/ +/* +** Codesets popup close hook funct +** Set the string contents +*/ + +HOOKPROTONH(popupCloseFun, void, Object *list, Object *str) +{ + STRPTR e; + + DoMethod(list,MUIM_List_GetEntry,MUIV_List_GetEntry_Active,&e); + set(str,MUIA_Textinput_Contents,e); +} +MakeStaticHook(popupCloseHook, popupCloseFun); + +/***********************************************************************/ +/* +** Codesets popup new method +*/ + +static ULONG +mpopupNew(struct IClass *cl,Object *obj,struct opSet *msg) +{ + Object *str, *bt, *lv, *l; + + if((obj = (Object *)DoSuperNew(cl,obj, + + MUIA_Popstring_String, str = TextinputObject, + MUIA_ControlChar, (ULONG)'h', + MUIA_CycleChain, TRUE, + StringFrame, + MUIA_Textinput_AdvanceOnCR, TRUE, + MUIA_Textinput_MaxLen, 256, + End, + + MUIA_Popstring_Button, bt = MUI_MakeObject(MUIO_PopButton,MUII_PopUp), + + MUIA_Popobject_Object, lv = ListviewObject, + MUIA_Listview_List, l = ListObject, + MUIA_Frame, MUIV_Frame_InputList, + MUIA_Background, MUII_ListBack, + MUIA_List_AutoVisible, TRUE, + MUIA_List_ConstructHook, MUIV_List_ConstructHook_String, + MUIA_List_DestructHook, MUIV_List_DestructHook_String, + End, + End, + MUIA_Popobject_WindowHook, &popupWindowHook, + MUIA_Popobject_StrObjHook, &popupOpenHook, + MUIA_Popobject_ObjStrHook, &popupCloseHook, + + TAG_MORE,msg->ops_AttrList))) + { + struct codeset *codeset; + STRPTR *array; + + set(bt,MUIA_CycleChain,TRUE); + DoMethod(lv,MUIM_Notify,MUIA_Listview_DoubleClick,TRUE,obj,2,MUIM_Popstring_Close,TRUE); + + /* Build list of available codesets */ + if((array = CodesetsSupportedA(NULL))) + { + DoMethod(l,MUIM_List_Insert,array,-1,MUIV_List_Insert_Sorted); + CodesetsFreeA(array,NULL); + } + else SetSuperAttrs(cl,obj,MUIA_Disabled,TRUE,TAG_DONE); + + /* Use the default codeset */ + codeset = CodesetsFindA(NULL,NULL); + set(str,MUIA_Textinput_Contents,codeset->name); + } + + return (ULONG)obj; +} + +/***********************************************************************/ +/* +** Codesets popup dispatcher +*/ + +DISPATCHERPROTO(popupDispatcher) +{ + switch (msg->MethodID) + { + case OM_NEW: return mpopupNew(cl,obj,(APTR)msg); + default: return DoSuperMethodA(cl,obj,msg); + } +} + +/***********************************************************************/ +/* +** Editor instance +*/ + +struct editorData +{ + Object *codesetsObj; + struct FileRequester *req; +}; + +/***********************************************************************/ +/* +** Editor new method +*/ + +static ULONG +meditorNew(struct IClass *cl,Object *obj,struct opSet *msg) +{ + struct FileRequester *req; + + if ((req = MUI_AllocAslRequest(ASL_FileRequest,NULL)) && + (obj = (Object *)DoSuperNew(cl,obj, + TAG_MORE,msg->ops_AttrList))) + { + struct editorData *data = INST_DATA(cl,obj); + + data->codesetsObj = (Object *)GetTagData(MUIA_Editor_CodesetsObj, 0, msg->ops_AttrList); + + data->req = req; + } + else + { + if (req) MUI_FreeAslRequest(req); + } + + return (ULONG)obj; +} + +/***********************************************************************/ +/* +** Editor dispose method +*/ + +static ULONG +meditorDispose(struct IClass *cl,Object *obj,Msg msg) +{ + struct editorData *data = INST_DATA(cl,obj); + + if (data->req) MUI_FreeAslRequest(data->req); + + return DoSuperMethodA(cl,obj,msg); +} + +/***********************************************************************/ +/* +** Editor load method +*/ + +static ULONG +meditorLoad(struct IClass *cl,Object *obj,struct MUIP_Editor_Load *msg) +{ + struct editorData *data = INST_DATA(cl,obj); + + set(_app(obj),MUIA_Application_Sleep,TRUE); + SetSuperAttrs(cl,obj,MUIA_TextEditor_Quiet,FALSE,TAG_DONE); + + /* Request file name */ + if (MUI_AslRequestTags(data->req,ASLFR_TitleText,msg->plain ? + "Select a file to load" : "Select a file to load as UTF8",TAG_DONE)) + { + char fname[256]; + BPTR lock; + + strcpy(fname,data->req->fr_Drawer); + AddPart(fname,data->req->fr_File,sizeof(fname)); + + /* Get size */ + if((lock = Lock(fname,SHARED_LOCK))) + { + struct FileInfoBlock *fib; + ULONG go = FALSE, size = 0; + + if((fib = AllocDosObject(DOS_FIB,NULL))) + { + if (Examine(lock,fib)) + { + size = fib->fib_Size; + go = TRUE; + } + + FreeDosObject(DOS_FIB,fib); + } + + UnLock(lock); + + if (go) + { + DoSuperMethod(cl,obj,MUIM_TextEditor_ClearText); + + if (size>0) + { + STRPTR buf; + + /* Alloc whole file buf */ + if((buf = AllocMem(size+1,MEMF_ANY))) + { + BPTR file; + + if((file = Open(fname,MODE_OLDFILE))) + { + LONG r; + + r = Read(file,buf,size); + if(r >= 0) + { + buf[r] = 0; + + if (msg->plain) + { + /* If plain just set it */ + set(obj,MUIA_TextEditor_Contents,buf); + } + else + { + struct codeset *codeset; + STRPTR str; + STRPTR cname; + + /* Get used codeset */ + get(data->codesetsObj, MUIA_Textinput_Contents, (ULONG)&cname); + codeset = CodesetsFindA(cname,NULL); + + /* Convert */ + str = CodesetsUTF8ToStr(CSA_Source, buf, + CSA_SourceCodeset, codeset, + TAG_DONE); + if (str) + { + SetSuperAttrs(cl,obj,MUIA_TextEditor_Contents,str,TAG_DONE); + CodesetsFreeA(str,NULL); + } + } + } + + Close(file); + } + + FreeMem(buf,size+1); + } + } + + SetSuperAttrs(cl,obj,MUIA_TextEditor_CursorX, 0, + MUIA_TextEditor_CursorY, 0, + TAG_DONE); + } + } + } + + SetSuperAttrs(cl,obj,MUIA_TextEditor_Quiet,FALSE,TAG_DONE); + set(_app(obj),MUIA_Application_Sleep,FALSE); + + return 0; +} + +/***********************************************************************/ +/* +** Editor save method +*/ + +static ULONG +meditorSave(struct IClass *cl, Object *obj, Msg msg) +{ + struct editorData *data = INST_DATA(cl,obj); + STRPTR text; + + set(_app(obj),MUIA_Application_Sleep,TRUE); + + /* Get editor text */ + if((text = (STRPTR)DoSuperMethod(cl,obj,MUIM_TextEditor_ExportText))) + { + struct codeset *codeset; + UTF8 *utf8; + STRPTR cname; + ULONG dlen; + + /* Get current user codeset */ + get(data->codesetsObj, MUIA_Textinput_Contents, (ULONG)&cname); + codeset = CodesetsFindA(cname,NULL); + + /* Convert text as utf8 */ + if((utf8 = CodesetsUTF8Create(CSA_Source, text, + CSA_SourceCodeset, codeset, + CSA_DestLenPtr, &dlen, + TAG_DONE))) + { + /* Save converted text to a file */ + + if (MUI_AslRequestTags(data->req,ASLFR_DoSaveMode,TRUE,ASLFR_TitleText,"Select a file to save as UTF8",TAG_DONE)) + { + char fname[256]; + BPTR file; + + strcpy(fname,data->req->fr_Drawer); + AddPart(fname,data->req->fr_File,sizeof(fname)); + + if((file = Open(fname,MODE_NEWFILE))) + { + Write(file,utf8,dlen); + Close(file); + } + } + + /* Free converted string */ + CodesetsFreeA(utf8,NULL); + } + + FreeVec(text); + } + + set(_app(obj),MUIA_Application_Sleep,FALSE); + + return 0; +} + +/***********************************************************************/ +/* +** Editor dispatcher +*/ + +DISPATCHERPROTO(editorDispatcher) +{ + switch (msg->MethodID) + { + case OM_NEW: return meditorNew(cl,obj,(APTR)msg); + case OM_DISPOSE: return meditorDispose(cl,obj,(APTR)msg); + case MUIM_Editor_Save: return meditorSave(cl,obj,(APTR)msg); + case MUIM_Editor_Load: return meditorLoad(cl,obj,(APTR)msg); + default: return DoSuperMethodA(cl,obj,msg); + } +} + +/***********************************************************************/ +/* +** App instance +*/ + +struct appData +{ + Object *win; + Object *about; + Object *aboutMUI; + Object *config; +}; + +/***********************************************************************/ +/* +** App new method +*/ + +/* Menus */ +#define MTITLE(t) {NM_TITLE,(STRPTR)(t),0,0,0,0} +#define MITEM(t,d) {NM_ITEM,(STRPTR)(t),0,0,0,(APTR)(d)} +#define MBAR {NM_ITEM,(STRPTR)NM_BARLABEL,0,0,0,NULL} +#define MEND {NM_END,NULL,0,0,0,NULL} + +enum +{ + MABOUT = 1, + MABOUTMUI, + MMUI, + MQUIT, +}; + +static struct NewMenu appMenu[] = +{ + MTITLE("Project"), + MITEM("?\0About...",MABOUT), + MITEM("M\0About MUI...",MABOUTMUI), + MBAR, + MITEM("Q\0Quit",MQUIT), + + MTITLE("Editor"), + MITEM("M\0MUI Settings...",MMUI), + + MEND +}; + +static ULONG +mappNew(struct IClass *cl,Object *obj,struct opSet *msg) +{ + Object *strip, *win, *codesets = NULL, *editor, *sb, *loadPlain, *loadUTF8, *save, *cancel; + + if((obj = (Object *)DoSuperNew(cl,obj, + MUIA_Application_Title, "Codesets Demo1", + MUIA_Application_Version, "$VER: CodesetsDemo1 1.0 (10.11.2004)", + MUIA_Application_Copyright, "Copyright 2004 by Alfonso Ranieri", + MUIA_Application_Author, "Alfonso Ranieri ", + MUIA_Application_Description, "Codesets example", + MUIA_Application_Base, "CODESETSEXAMPLE", + MUIA_Application_Menustrip, strip = MUI_MakeObject(MUIO_MenustripNM,appMenu,MUIO_MenustripNM_CommandKeyCheck), + + SubWindow, win = WindowObject, + MUIA_Window_ID, MAKE_ID('M','A','I','N'), + MUIA_Window_Title, "Codesets Demo1", + WindowContents, VGroup, + + Child, HGroup, + Child, Label2("C_harset"), + Child, codesets = popupCodesetObject, End, + End, + + Child, HGroup, + MUIA_Group_Horiz, TRUE, + MUIA_Group_Spacing, 0, + Child, editor = editorObject, + MUIA_Editor_CodesetsObj, codesets, + End, + Child, sb = ScrollbarObject, End, + End, + + Child, HGroup, + Child, loadPlain = MUI_MakeObject(MUIO_Button,"Load _plain"), + Child, RectangleObject, MUIA_Weight, 50, End, + Child, loadUTF8 = MUI_MakeObject(MUIO_Button,"_Load utf8"), + Child, RectangleObject, MUIA_Weight, 50, End, + Child, save = MUI_MakeObject(MUIO_Button,"_Save utf8"), + Child, RectangleObject, MUIA_Weight, 50, End, + Child, cancel = MUI_MakeObject(MUIO_Button,"_Cancel"), + End, + + End, + End, + TAG_MORE,msg->ops_AttrList))) + { + struct appData *data = INST_DATA(cl,obj); + + data->win = win; + + set(editor,MUIA_TextEditor_Slider,sb); + + set(loadPlain,MUIA_CycleChain,TRUE); + set(loadUTF8,MUIA_CycleChain,TRUE); + set(save,MUIA_CycleChain,TRUE); + set(cancel,MUIA_CycleChain,TRUE); + + DoMethod(win,MUIM_Notify,MUIA_Window_CloseRequest,TRUE,MUIV_Notify_Application,2, + MUIM_Application_ReturnID,MUIV_Application_ReturnID_Quit); + + DoMethod(loadPlain,MUIM_Notify,MUIA_Pressed,FALSE,editor,2,MUIM_Editor_Load,TRUE); + DoMethod(loadUTF8,MUIM_Notify,MUIA_Pressed,FALSE,editor,2,MUIM_Editor_Load,FALSE); + DoMethod(save,MUIM_Notify,MUIA_Pressed,FALSE,editor,1,MUIM_Editor_Save); + DoMethod(cancel,MUIM_Notify,MUIA_Pressed,FALSE,MUIV_Notify_Application,2, + MUIM_Application_ReturnID,MUIV_Application_ReturnID_Quit); + + DoMethod((Object *)DoMethod(strip,MUIM_FindUData,MABOUT),MUIM_Notify, + MUIA_Menuitem_Trigger,MUIV_EveryTime,obj,1,MUIM_App_About); + + DoMethod((Object *)DoMethod(strip,MUIM_FindUData,MABOUTMUI),MUIM_Notify, + MUIA_Menuitem_Trigger,MUIV_EveryTime,obj,1,MUIM_App_AboutMUI); + + DoMethod((Object *)DoMethod(strip,MUIM_FindUData,MQUIT),MUIM_Notify, + MUIA_Menuitem_Trigger,MUIV_EveryTime,obj,2,MUIM_Application_ReturnID, + MUIV_Application_ReturnID_Quit); + + DoMethod((Object *)DoMethod(strip,MUIM_FindUData,MMUI),MUIM_Notify, + MUIA_Menuitem_Trigger,MUIV_EveryTime,obj,2,MUIM_Application_OpenConfigWindow,0); + + set(win,MUIA_Window_Open,TRUE); + } + + return (ULONG)obj; +} + +/***********************************************************************/ +/* +** App dispose win method +*/ + +static ULONG +mappDisposeWin(struct IClass *cl,Object *obj,struct MUIP_App_DisposeWin *msg) +{ + struct appData *data = INST_DATA(cl,obj); + Object *win = msg->win; + + set(win,MUIA_Window_Open,FALSE); + DoSuperMethod(cl,obj,OM_REMMEMBER,win); + MUI_DisposeObject(win); + + if (win==data->about) data->about = NULL; + else if (win==data->aboutMUI) data->aboutMUI = NULL; + + return 0; +} + +/***********************************************************************/ +/* +** App about method +*/ + +static ULONG +mappAbout(struct IClass *cl,Object *obj,Msg msg) +{ + struct appData *data = INST_DATA(cl,obj); + + SetSuperAttrs(cl,obj,MUIA_Application_Sleep,TRUE,TAG_DONE); + + if (!data->about) + { + Object *ok; + + if((data->about = WindowObject, + MUIA_Window_RefWindow, data->win, + MUIA_Window_Title, "About Codesets Demo1", + WindowContents, VGroup, + Child, TextObject, + MUIA_Text_Contents, "\n" + "Codesets Demo1\n" + "Copyright 2004 by Alfonso Ranieri \n", + MUIA_Text_PreParse, MUIX_C, + End, + Child, RectangleObject, MUIA_Weight, 0, MUIA_Rectangle_HBar, TRUE, End, + Child, HGroup, + Child, RectangleObject, MUIA_Weight, 200, End, + Child, ok = MUI_MakeObject(MUIO_Button,"_OK"), + Child, RectangleObject, MUIA_Weight, 200, End, + End, + End, + End)) + { + DoSuperMethod(cl,obj,OM_ADDMEMBER,data->about); + + set(data->about,MUIA_Window_ActiveObject,ok); + + DoMethod(data->about,MUIM_Notify,MUIA_Window_CloseRequest,TRUE,obj,5, + MUIM_Application_PushMethod,obj,2,MUIM_App_DisposeWin,data->about); + + DoMethod(ok,MUIM_Notify,MUIA_Pressed,FALSE,obj,5, + MUIM_Application_PushMethod,obj,2,MUIM_App_DisposeWin,data->about); + } + } + + set(data->about,MUIA_Window_Open,TRUE); + + SetSuperAttrs(cl,obj,MUIA_Application_Sleep,FALSE,TAG_DONE); + + return 0; +} + +/***********************************************************************/ +/* +** App about mui method +*/ + +static ULONG +mappAboutMUI(struct IClass *cl,Object *obj,Msg msg) +{ + struct appData *data = INST_DATA(cl,obj); + + SetSuperAttrs(cl,obj,MUIA_Application_Sleep,TRUE,TAG_DONE); + + if (!data->aboutMUI) + { + if((data->aboutMUI = AboutmuiObject, + MUIA_Aboutmui_Application, obj, + MUIA_Window_RefWindow, data->win, + End)) + { + DoMethod(data->aboutMUI,MUIM_Notify,MUIA_Window_CloseRequest,TRUE,obj,5, + MUIM_Application_PushMethod,obj,2,MUIM_App_DisposeWin,data->aboutMUI); + } + } + + set(data->aboutMUI,MUIA_Window_Open,TRUE); + + SetSuperAttrs(cl,obj,MUIA_Application_Sleep,FALSE,TAG_DONE); + + return 0; +} + +/***********************************************************************/ +/* +** App MUI settings method +*/ + +static ULONG +mappOpenMUIConfigWindow(struct IClass *cl,Object *obj,Msg msg) +{ + ULONG res; + + SetSuperAttrs(cl,obj,MUIA_Application_Sleep,TRUE,TAG_DONE); + res = DoSuperMethodA(cl,obj,msg); + SetSuperAttrs(cl,obj,MUIA_Application_Sleep,FALSE,TAG_DONE); + + return res; +} + +/***********************************************************************/ +/* +** App dispatcher +*/ + +DISPATCHERPROTO(appDispatcher) +{ + switch (msg->MethodID) + { + case OM_NEW: return mappNew(cl,obj,(APTR)msg); + case MUIM_App_DisposeWin: return mappDisposeWin(cl,obj,(APTR)msg); + case MUIM_App_About: return mappAbout(cl,obj,(APTR)msg); + case MUIM_App_AboutMUI: return mappAboutMUI(cl,obj,(APTR)msg); + case MUIM_Application_OpenConfigWindow: return mappOpenMUIConfigWindow(cl,obj,(APTR)msg); + default: return DoSuperMethodA(cl,obj,msg); + } +} + +/***********************************************************************/ +/* +** Main +*/ + +int +main(int argc,char **argv) +{ + int res = RETURN_FAIL; + + if((IntuitionBase = (APTR)OpenLibrary("intuition.library", 39)) && // open intuition.library + GETINTERFACE(IIntuition, IntuitionBase)) + { + if((UtilityBase = OpenLibrary("utility.library", 39)) && // open utility.library + GETINTERFACE(IUtility, UtilityBase)) + { + if((CodesetsBase = OpenLibrary(CODESETSNAME, CODESETSVER)) && // open codesets.library + GETINTERFACE(ICodesets, CodesetsBase)) + { + /* Open muimaster.library */ + if((MUIMasterBase = OpenLibrary("muimaster.library",19)) && + GETINTERFACE(IMUIMaster, MUIMasterBase)) + { + /* Create classes */ + if ((appClass = MUI_CreateCustomClass(NULL,MUIC_Application,NULL,sizeof(struct appData),appDispatcher)) && + (popupCodesetsClass = MUI_CreateCustomClass(NULL,MUIC_Popobject,NULL,0,popupDispatcher)) && + (editorClass = MUI_CreateCustomClass(NULL,MUIC_TextEditor,NULL,sizeof(struct editorData),editorDispatcher))) + { + Object *app; + + /* Create application */ + if((app = appObject, End)) + { + /* Here we go */ + ULONG sigs = 0; + + while (DoMethod(app,MUIM_Application_NewInput,&sigs) != (ULONG)MUIV_Application_ReturnID_Quit) + { + if (sigs) + { + sigs = Wait(sigs | SIGBREAKF_CTRL_C); + if (sigs & SIGBREAKF_CTRL_C) break; + } + } + + MUI_DisposeObject(app); + + res = RETURN_OK; + } + else + { + printf("%s: can't create application\n",argv[0]); + } + + MUI_DeleteCustomClass(popupCodesetsClass); + MUI_DeleteCustomClass(editorClass); + MUI_DeleteCustomClass(appClass); + } + else + { + if (appClass) + { + if (popupCodesetsClass) MUI_DeleteCustomClass(popupCodesetsClass); + MUI_DeleteCustomClass(appClass); + } + + printf("%s: can't create custom classes\n",argv[0]); + } + + DROPINTERFACE(IMUIMaster); + CloseLibrary(MUIMasterBase); + } + else + { + printf("%s: Can't open muimaster.library ver 19 or higher\n",argv[0]); + res = RETURN_ERROR; + } + + DROPINTERFACE(ICodesets); + CloseLibrary(CodesetsBase); + } + else + { + printf("%s: Can't open codesets.library ver %d or higher.\n", argv[0], CODESETSVER); + res = RETURN_ERROR; + } + + DROPINTERFACE(IUtility); + CloseLibrary(UtilityBase); + } + + DROPINTERFACE(IIntuition); + CloseLibrary((struct Library *)IntuitionBase); + } + + return res; +} + +/***********************************************************************/ diff --git a/workbench/libs/codesetslib/developer/examples/makefile.mos b/workbench/libs/codesetslib/developer/examples/makefile.mos new file mode 100755 index 000000000..6b29ad956 --- /dev/null +++ b/workbench/libs/codesetslib/developer/examples/makefile.mos @@ -0,0 +1,122 @@ +#/*************************************************************************** +# +# codesets.library - Amiga shared library for handling different codesets +# Copyright (C) 2001-2005 by Alfonso [alfie] Ranieri . +# Copyright (C) 2005-2007 by codesets.library Open Source Team +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library 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 +# Lesser General Public License for more details. +# +# codesets.library project: http://sourceforge.net/projects/codesetslib/ +# +# $Id: makefile.mos 62 2007-01-23 08:55:18Z damato $ +# +#***************************************************************************/ + +# Programs +CC = ppc-morphos-gcc +STRIP = ppc-morphos-strip +OBJDUMP = ppc-morphos-objdump +RM = rm -f +RMDIR = rm -rf +MKDIR = mkdir +CHMOD = chmod +FLEX = flex +FC = flexcat + +# Directories +PREFIX = . +OBJDIR = .obj_mos +BINDIR = bin_mos + +# Compiler/Linker flags +CPU = -mcpu=750 +CPUFLAGS = -mmultiple +CDEFS = -D__CST_VERDATE=\"`date +%d.%m.%Y`\" \ + -D__CST_VERDAYS="`expr \`date +%s\` / 86400 - 2922`" +WARN = -W -Wall +OPTFLAGS = -O3 -fomit-frame-pointer -funroll-loops +DEBUG = -DDEBUG #-g3 -O0 +REDEFINE = +CFLAGS = -noixemul -I. -I../include -I../../include $(CPU) $(CPUFLAGS) $(WARN) $(OPTFLAGS) \ + $(DEBUG) $(REDEFINE) -c +LDFLAGS = $(CPU) -noixemul +LDLIBS = + +# CPU and DEBUG can be defined outside, defaults to above +# using e.g. "make DEBUG= CPU=-mcpu=603e" produces optimized non-debug PPC-603e version +# +# OPTFLAGS are disabled by DEBUG normally! +# +# ignored warnings are: +# none - because we want to compile with -Wall all the time + +TARGET = $(BINDIR)/b64d \ + $(BINDIR)/b64e \ + $(BINDIR)/UTF8ToStrHook \ + $(BINDIR)/DetectCodeset \ + $(BINDIR)/demo1 + +# +all: $(BINDIR) $(OBJDIR) $(TARGET) + +# make the object directories +$(OBJDIR): + @printf '\033[33mGenerating $@ directory\033[0m\n' + @$(MKDIR) $(OBJDIR) + +# make the binary directories +$(BINDIR): + @printf '\033[33mGenerating $@ directory\033[0m\n' + @$(MKDIR) $(BINDIR) + +# + +$(OBJDIR)/%.o: %.c + @printf '\033[32mCompiling $<\033[0m\n' + @$(CC) $(CFLAGS) $< -o $@ -DUSE_INLINE_STDARG + +# + +$(BINDIR)/b64d: $(OBJDIR)/b64d.o + @printf '\033[32mLinking \033[1m$@\033[0m\n' + @$(CC) $(LDFLAGS) -o $@ $< $(LDLIBS) + +$(BINDIR)/b64e: $(OBJDIR)/b64e.o + @printf '\033[32mLinking \033[1m$@\033[0m\n' + @$(CC) $(LDFLAGS) -o $@ $< $(LDLIBS) + +$(BINDIR)/UTF8ToStrHook: $(OBJDIR)/UTF8ToStrHook.o + @printf '\033[32mLinking \033[1m$@\033[0m\n' + @$(CC) $(LDFLAGS) -o $@ $< $(LDLIBS) + +$(BINDIR)/DetectCodeset: $(OBJDIR)/DetectCodeset.o + @printf '\033[32mLinking \033[1m$@\033[0m\n' + @$(CC) $(LDFLAGS) -o $@ $< $(LDLIBS) + +$(BINDIR)/demo1: demo1.c + @printf '\033[32mCompiling demo1.c\033[0m\n' + @$(CC) $(CFLAGS) demo1.c -o $(OBJDIR)/demo1.o -DNO_PPCINLINE_STDARG + @printf '\033[32mLinking \033[1m$@\033[0m\n' + @$(CC) $(LDFLAGS) -o $@.debug $(OBJDIR)/demo1.o $(LDLIBS) -lmui + @$(STRIP) -o $@ $@.debug + +# + +.PHONY: clean +clean: + -$(RM) $(TARGET) $(TARGET).debug $(OBJDIR)/*.o + +.PHONY: distclean +distclean: clean + -$(RMDIR) $(OBJDIR) + -$(RMDIR) $(BINDIR) + +# diff --git a/workbench/libs/codesetslib/developer/examples/makefile.os3 b/workbench/libs/codesetslib/developer/examples/makefile.os3 new file mode 100755 index 000000000..a0be26a56 --- /dev/null +++ b/workbench/libs/codesetslib/developer/examples/makefile.os3 @@ -0,0 +1,122 @@ +#/*************************************************************************** +# +# codesets.library - Amiga shared library for handling different codesets +# Copyright (C) 2001-2005 by Alfonso [alfie] Ranieri . +# Copyright (C) 2005-2007 by codesets.library Open Source Team +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library 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 +# Lesser General Public License for more details. +# +# codesets.library project: http://sourceforge.net/projects/codesetslib/ +# +# $Id: makefile.os3 62 2007-01-23 08:55:18Z damato $ +# +#***************************************************************************/ + +# Programs +CC = m68k-amigaos-gcc +STRIP = m68k-amigaos-strip +OBJDUMP = m68k-amigaos-objdump +RM = rm -f +RMDIR = rm -rf +MKDIR = mkdir +CHMOD = chmod +FLEX = flex +FC = flexcat + +# Directories +PREFIX = . +OBJDIR = .obj_os3 +BINDIR = bin_os3 + +# Compiler/Linker flags +CPU = -m68020-60 +CPUFLAGS = -msoft-float +CDEFS = -D__CST_VERDATE=\"`date +%d.%m.%Y`\" \ + -D__CST_VERDAYS="`expr \`date +%s\` / 86400 - 2922`" +WARN = -W -Wall +OPTFLAGS = -O3 -fomit-frame-pointer -funroll-loops +DEBUG = -DDEBUG #-g3 -O0 +REDEFINE = +CFLAGS = -noixemul -I. -I../include -I../../include $(CPU) $(CPUFLAGS) $(WARN) $(OPTFLAGS) \ + $(DEBUG) $(REDEFINE) -c +LDFLAGS = $(CPU) -noixemul +LDLIBS = + +# CPU and DEBUG can be defined outside, defaults to above +# using e.g. "make DEBUG= CPU=-mcpu=603e" produces optimized non-debug PPC-603e version +# +# OPTFLAGS are disabled by DEBUG normally! +# +# ignored warnings are: +# none - because we want to compile with -Wall all the time + +TARGET = $(BINDIR)/b64d \ + $(BINDIR)/b64e \ + $(BINDIR)/UTF8ToStrHook \ + $(BINDIR)/DetectCodeset \ + $(BINDIR)/demo1 + +# +all: $(BINDIR) $(OBJDIR) $(TARGET) + +# make the object directories +$(OBJDIR): + @printf '\033[33mGenerating $@ directory\033[0m\n' + @$(MKDIR) $(OBJDIR) + +# make the binary directories +$(BINDIR): + @printf '\033[33mGenerating $@ directory\033[0m\n' + @$(MKDIR) $(BINDIR) + +# + +$(OBJDIR)/%.o: %.c + @printf '\033[32mCompiling $<\033[0m\n' + @$(CC) $(CFLAGS) $< -o $@ + +# + +$(BINDIR)/b64d: $(OBJDIR)/b64d.o + @printf '\033[32mLinking \033[1m$@\033[0m\n' + @$(CC) $(LDFLAGS) -o $@ $< $(LDLIBS) + +$(BINDIR)/b64e: $(OBJDIR)/b64e.o + @printf '\033[32mLinking \033[1m$@\033[0m\n' + @$(CC) $(LDFLAGS) -o $@ $< $(LDLIBS) + +$(BINDIR)/UTF8ToStrHook: $(OBJDIR)/UTF8ToStrHook.o + @printf '\033[32mLinking \033[1m$@\033[0m\n' + @$(CC) $(LDFLAGS) -o $@ $< $(LDLIBS) + +$(BINDIR)/DetectCodeset: $(OBJDIR)/DetectCodeset.o + @printf '\033[32mLinking \033[1m$@\033[0m\n' + @$(CC) $(LDFLAGS) -o $@ $< $(LDLIBS) + +$(BINDIR)/demo1: demo1.c + @printf '\033[32mCompiling demo1.c\033[0m\n' + @$(CC) $(CFLAGS) demo1.c -o $(OBJDIR)/demo1.o -DNO_INLINE_STDARG + @printf '\033[32mLinking \033[1m$@\033[0m\n' + @$(CC) $(LDFLAGS) -o $@.debug $(OBJDIR)/demo1.o $(LDLIBS) -lmui + @$(STRIP) -o $@ $@.debug + +# + +.PHONY: clean +clean: + -$(RM) $(TARGET) $(TARGET).debug $(OBJDIR)/*.o + +.PHONY: distclean +distclean: clean + -$(RMDIR) $(OBJDIR) + -$(RMDIR) $(BINDIR) + +# diff --git a/workbench/libs/codesetslib/developer/examples/makefile.os4 b/workbench/libs/codesetslib/developer/examples/makefile.os4 new file mode 100755 index 000000000..e217f316c --- /dev/null +++ b/workbench/libs/codesetslib/developer/examples/makefile.os4 @@ -0,0 +1,127 @@ +#/*************************************************************************** +# +# codesets.library - Amiga shared library for handling different codesets +# Copyright (C) 2001-2005 by Alfonso [alfie] Ranieri . +# Copyright (C) 2005-2007 by codesets.library Open Source Team +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library 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 +# Lesser General Public License for more details. +# +# codesets.library project: http://sourceforge.net/projects/codesetslib/ +# +# $Id: makefile.os4 67 2007-06-05 16:13:07Z thboeckel $ +# +#***************************************************************************/ + +# Programs +CC = ppc-amigaos-gcc +STRIP = ppc-amigaos-strip +OBJDUMP = ppc-amigaos-objdump +RM = rm -f +RMDIR = rm -rf +MKDIR = mkdir +CHMOD = chmod +FLEX = flex +FC = flexcat + +# Directories +PREFIX = . +OBJDIR = .obj_os4 +BINDIR = bin_os4 + +# Compiler/Linker flags +CPU = -mcpu=604e +CPUFLAGS = -mmultiple -Wa,-mregnames +CDEFS = -D__CST_VERDATE=\"`date +%d.%m.%Y`\" \ + -D__CST_VERDAYS="`expr \`date +%s\` / 86400 - 2922`" +WARN = -W -Wall +OPTFLAGS = -O3 -fomit-frame-pointer -funroll-loops +DEBUG = -DDEBUG #-g3 -O0 +REDEFINE = -DCoerceMethod=ICoerceMethod -DDoMethod=IDoMethod \ + -DDoSuperMethod=IDoSuperMethod -DDoSuperMethodA=IDoSuperMethodA +CFLAGS = -I. -I../include -I../../include $(CPU) $(CPUFLAGS) $(WARN) $(OPTFLAGS) \ + $(DEBUG) -D__USE_INLINE__ $(REDEFINE) -c +LDFLAGS = $(CPU) +LDLIBS = + +# CPU and DEBUG can be defined outside, defaults to above +# using e.g. "make DEBUG= CPU=-mcpu=603e" produces optimized non-debug PPC-603e version +# +# OPTFLAGS are disabled by DEBUG normally! +# +# ignored warnings are: +# none - because we want to compile with -Wall all the time + +TARGET = $(BINDIR)/b64d \ + $(BINDIR)/b64e \ + $(BINDIR)/UTF8ToStrHook \ + $(BINDIR)/DetectCodeset \ + $(BINDIR)/demo1 + +# +all: $(BINDIR) $(OBJDIR) $(TARGET) + +# make the object directories +$(OBJDIR): + @printf '\033[33mGenerating $@ directory\033[0m\n' + @$(MKDIR) $(OBJDIR) + +# make the binary directories +$(BINDIR): + @printf '\033[33mGenerating $@ directory\033[0m\n' + @$(MKDIR) $(BINDIR) + +# + +$(OBJDIR)/%.o: %.c + @printf '\033[32mCompiling $<\033[0m\n' + @$(CC) $(CFLAGS) $< -o $@ + +# + +$(BINDIR)/b64d: $(OBJDIR)/b64d.o + @printf '\033[32mLinking \033[1m$@\033[0m\n' + @$(CC) $(LDFLAGS) -o $@.debug $< $(LDLIBS) + @$(STRIP) -o $@ $@.debug + +$(BINDIR)/b64e: $(OBJDIR)/b64e.o + @printf '\033[32mLinking \033[1m$@\033[0m\n' + @$(CC) $(LDFLAGS) -o $@.debug $< $(LDLIBS) + @$(STRIP) -o $@ $@.debug + +$(BINDIR)/UTF8ToStrHook: $(OBJDIR)/UTF8ToStrHook.o + @printf '\033[32mLinking \033[1m$@\033[0m\n' + @$(CC) $(LDFLAGS) -o $@.debug $< $(LDLIBS) + @$(STRIP) -o $@ $@.debug + +$(BINDIR)/DetectCodeset: $(OBJDIR)/DetectCodeset.o + @printf '\033[32mLinking \033[1m$@\033[0m\n' + @$(CC) $(LDFLAGS) -o $@.debug $< $(LDLIBS) + @$(STRIP) -o $@ $@.debug + +$(BINDIR)/demo1: demo1.c + @printf '\033[32mCompiling demo1.c\033[0m\n' + @$(CC) $(CFLAGS) demo1.c -o $(OBJDIR)/demo1.o + @printf '\033[32mLinking \033[1m$@\033[0m\n' + @$(CC) $(LDFLAGS) -o $@.debug $(OBJDIR)/demo1.o $(LDLIBS) + @$(STRIP) -o $@ $@.debug + +# + +.PHONY: clean +clean: + -$(RM) $(TARGET) $(TARGET).debug $(OBJDIR)/*.o + +.PHONY: distclean +distclean: clean + -$(RMDIR) $(OBJDIR) + -$(RMDIR) $(BINDIR) + +# diff --git a/workbench/libs/codesetslib/developer/examples/mmakefile.src b/workbench/libs/codesetslib/developer/examples/mmakefile.src new file mode 100644 index 000000000..afd707ebe --- /dev/null +++ b/workbench/libs/codesetslib/developer/examples/mmakefile.src @@ -0,0 +1,21 @@ +# $Id$ + +# AROS metamakefile for codesetslib + +include $(TOP)/config/make.cfg + +#MM- workbench-libs-codesets : workbench-libs-codesets-test + +#MM workbench-libs-codesets-test : linklibs includes workbench-libs-codesets-lib + +FILES := b64d b64e DetectCodeset UTF8ToStrHook + +# demo1 needs TextInput.mcc + +EXEDIR := $(AROS_TESTS)/Codesetslib + +%build_progs mmake=workbench-libs-codesets-test \ + files=$(FILES) targetdir=$(EXEDIR) \ + uselibs="arossupport amiga arosc m codesets" + +%common diff --git a/workbench/libs/codesetslib/developer/fd/codesets_lib.fd b/workbench/libs/codesetslib/developer/fd/codesets_lib.fd new file mode 100755 index 000000000..494ddbee9 --- /dev/null +++ b/workbench/libs/codesetslib/developer/fd/codesets_lib.fd @@ -0,0 +1,32 @@ +##base _CodesetsBase +##bias 30 +##private +private1()() +##public +CodesetsConvertUTF32toUTF16(sourceStart,sourceEnd,targetStart,targetEnd,flags)(a0,a1,a2,a3,d0) +CodesetsConvertUTF16toUTF32(sourceStart,sourceEnd,targetStart,targetEnd,flags)(a0,a1,a2,a3,d0) +CodesetsConvertUTF16toUTF8(sourceStart,sourceEnd,targetStart,targetEnd,flags )(a0,a1,a2,a3,d0) +CodesetsIsLegalUTF8(source,length)(a0,d0) +CodesetsIsLegalUTF8Sequence(source,sourceEnd)(a0,a1) +CodesetsConvertUTF8toUTF16(sourceStart,sourceEnd,targetStart,targetEnd,flags)(a0,a1,a2,a3,d0) +CodesetsConvertUTF32toUTF8(sourceStart,sourceEnd,targetStart,targetEnd,flags)(a0,a1,a2,a3,d0) +CodesetsConvertUTF8toUTF32(sourceStart,sourceEnd,targetStart,targetEnd,flags)(a0,a1,a2,a3,d0) +CodesetsSetDefaultA(name,attrs)(a0,a1) +CodesetsFreeA(obj,attrs)(a0,a1) +CodesetsSupportedA(attrs)(a0) +CodesetsFindA(name,attrs)(a0,a1) +CodesetsFindBestA(attrs)(a0) +CodesetsUTF8Len(str)(a0) +CodesetsUTF8ToStrA(attrs)(a0) +CodesetsUTF8CreateA(attrs)(a0) +CodesetsEncodeB64A(attrs)(a0) +CodesetsDecodeB64A(attrs)(a0) +CodesetsStrLenA(str,attrs)(a0,a1) +CodesetsIsValidUTF8(str)(a0) +CodesetsFreeVecPooledA(pool,mem,attrs)(a0,a1,a2) +CodesetsConvertStrA(str)(a0) +CodesetsListCreateA(attrs)(a0) +CodesetsListDeleteA(attrs)(a0) +CodesetsListAddA(list,attrs)(a0,a1) +CodesetsListRemoveA(attrs)(a0) +##end diff --git a/workbench/libs/codesetslib/developer/include/clib/codesets_protos.h b/workbench/libs/codesetslib/developer/include/clib/codesets_protos.h new file mode 100755 index 000000000..e42de58f4 --- /dev/null +++ b/workbench/libs/codesetslib/developer/include/clib/codesets_protos.h @@ -0,0 +1,75 @@ +#ifndef CLIB_CODESETS_PROTOS_H +#define CLIB_CODESETS_PROTOS_H + +/*************************************************************************** + + codesets.library - Amiga shared library for handling different codesets + Copyright (C) 2001-2005 by Alfonso [alfie] Ranieri . + Copyright (C) 2005-2007 by codesets.library Open Source Team + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + codesets.library project: http://sourceforge.net/projects/codesetslib/ + + $Id$ + +***************************************************************************/ + +#ifndef LIBRARIES_CODESETS_H +#include +#endif + +STRPTR *CodesetsSupportedA(struct TagItem *attrs); +STRPTR *CodesetsSupported(Tag tag1 , ...); +void CodesetsFreeA(APTR obj, struct TagItem *attrs); +void CodesetsFree(APTR obj, Tag tag1, ...); +struct codeset *CodesetsSetDefaultA(STRPTR name, struct TagItem *attrs); +struct codeset *CodesetsSetDefault(STRPTR name, Tag tag1, ...); +struct codeset *CodesetsFindA(STRPTR name, struct TagItem *attrs); +struct codeset *CodesetsFind(STRPTR name, Tag tag1, ...); +struct codeset *CodesetsFindBestA(struct TagItem *attrs); +struct codeset *CodesetsFindBest(Tag tag1, ...); +ULONG CodesetsUTF8Len(const UTF8 *str); +ULONG CodesetsStrLenA(STRPTR str, struct TagItem *attrs); +ULONG CodesetsStrLen(STRPTR str, Tag tag1, ...); +STRPTR CodesetsUTF8ToStrA(struct TagItem *attrs); +STRPTR CodesetsUTF8ToStr(Tag tag1, ...); +UTF8 *CodesetsUTF8CreateA(struct TagItem *attrs); +UTF8 *CodesetsUTF8Create(Tag tag1, ...); +BOOL CodesetsIsValidUTF8(STRPTR str); +void CodesetsFreeVecPooledA(APTR pool, APTR mem, struct TagItem *attrs); +void CodesetsFreeVecPooled(APTR pool, APTR mem, Tag tag1, ...); +STRPTR CodesetsConvertStrA(struct TagItem *attrs); +STRPTR CodesetsConvertStr(Tag tag1, ...); +struct codesetList *CodesetsListCreateA(struct TagItem *attrs); +struct codesetList *CodesetsListCreate(Tag tag1, ...); +BOOL CodesetsListDeleteA(struct TagItem *attrs); +BOOL CodesetsListDelete(Tag tag1, ...); +BOOL CodesetsListAddA(struct codesetList *csList, struct TagItem *attrs); +BOOL CodesetsListAdd(struct codesetList *csList, ...); +BOOL CodesetsListRemoveA(struct TagItem *attrs); +BOOL CodesetsListRemove(Tag tag1, ...); + +ULONG CodesetsConvertUTF32toUTF16(const UTF32 **sourceStart, const UTF32 *sourceEnd, UTF16 **targetStart, UTF16 *targetEnd, ULONG flags); +ULONG CodesetsConvertUTF16toUTF32(const UTF16 **sourceStart, const UTF16 *sourceEnd, UTF32 **targetStart, UTF32 *targetEnd, ULONG flags); +ULONG CodesetsConvertUTF16toUTF8(const UTF16 **sourceStart, const UTF16 *sourceEnd, UTF8 **targetStart, UTF8 *targetEnd, ULONG flags); +BOOL CodesetsIsLegalUTF8(const UTF8 *source, ULONG length); +BOOL CodesetsIsLegalUTF8Sequence(const UTF8 *source, const UTF8 *sourceEnd); +ULONG CodesetsConvertUTF8toUTF16(const UTF8 **sourceStart, const UTF8 *sourceEnd, UTF16 **targetStart, UTF16 *targetEnd, ULONG flags); +ULONG CodesetsConvertUTF32toUTF8(const UTF32 **sourceStart, const UTF32 *sourceEnd, UTF8 **targetStart, UTF8 *targetEnd, ULONG flags); +ULONG CodesetsConvertUTF8toUTF32(const UTF8 **sourceStart, const UTF8 *sourceEnd, UTF32 **targetStart, UTF32 *targetEnd, ULONG flags); + +ULONG CodesetsEncodeB64A(struct TagItem *attrs); +ULONG CodesetsEncodeB64(Tag tag1, ...); +ULONG CodesetsDecodeB64A(struct TagItem *attrs); +ULONG CodesetsDecodeB64(Tag tag1, ...); + +#endif /* CLIB_CODESETS_PROTOS_H */ diff --git a/workbench/libs/codesetslib/developer/include/inline/codesets.h b/workbench/libs/codesetslib/developer/include/inline/codesets.h new file mode 100755 index 000000000..c30f6856b --- /dev/null +++ b/workbench/libs/codesetslib/developer/include/inline/codesets.h @@ -0,0 +1,226 @@ +#ifndef _INLINE_CODESETS_H +#define _INLINE_CODESETS_H + +/*************************************************************************** + + codesets.library - Amiga shared library for handling different codesets + Copyright (C) 2001-2005 by Alfonso [alfie] Ranieri . + Copyright (C) 2005-2007 by codesets.library Open Source Team + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + codesets.library project: http://sourceforge.net/projects/codesetslib/ + + $Id$ + +***************************************************************************/ + +#ifndef CLIB_CODESETS_PROTOS_H +#define CLIB_CODESETS_PROTOS_H +#endif + +#ifndef __INLINE_MACROS_H +#include +#endif + +#ifndef LIBRARIES_CODESETS_H +#include +#endif + +#ifndef CODESETS_BASE_NAME +#define CODESETS_BASE_NAME CodesetsBase +#endif + +#define CodesetsConvertUTF32toUTF16(sourceStart, sourceEnd, targetStart, targetEnd, flags) \ + LP5(0x24, ULONG, CodesetsConvertUTF32toUTF16, const , sourceStart, a0, const , sourceEnd, a1, UTF16 **, targetStart, a2, UTF16 *, targetEnd, a3, ULONG, flags, d0, \ + , CODESETS_BASE_NAME) + +#define CodesetsConvertUTF16toUTF32(sourceStart, sourceEnd, targetStart, targetEnd, flags) \ + LP5(0x2a, ULONG, CodesetsConvertUTF16toUTF32, const , sourceStart, a0, const , sourceEnd, a1, UTF32 **, targetStart, a2, UTF32 *, targetEnd, a3, ULONG, flags, d0, \ + , CODESETS_BASE_NAME) + +#define CodesetsConvertUTF16toUTF8(sourceStart, sourceEnd, targetStart, targetEnd, flags) \ + LP5(0x30, ULONG, CodesetsConvertUTF16toUTF8, const , sourceStart, a0, const , sourceEnd, a1, UTF8 **, targetStart, a2, UTF8 *, targetEnd, a3, ULONG, flags, d0, \ + , CODESETS_BASE_NAME) + +#define CodesetsIsLegalUTF8(source, length) \ + LP2(0x36, BOOL, CodesetsIsLegalUTF8, const , source, a0, ULONG, length, d0, \ + , CODESETS_BASE_NAME) + +#define CodesetsIsLegalUTF8Sequence(source, sourceEnd) \ + LP2(0x3c, BOOL, CodesetsIsLegalUTF8Sequence, const , source, a0, const , sourceEnd, a1, \ + , CODESETS_BASE_NAME) + +#define CodesetsConvertUTF8toUTF16(sourceStart, sourceEnd, targetStart, targetEnd, flags) \ + LP5(0x42, ULONG, CodesetsConvertUTF8toUTF16, const , sourceStart, a0, const , sourceEnd, a1, UTF16 **, targetStart, a2, UTF16 *, targetEnd, a3, ULONG, flags, d0, \ + , CODESETS_BASE_NAME) + +#define CodesetsConvertUTF32toUTF8(sourceStart, sourceEnd, targetStart, targetEnd, flags) \ + LP5(0x48, ULONG, CodesetsConvertUTF32toUTF8, const , sourceStart, a0, const , sourceEnd, a1, UTF8 **, targetStart, a2, UTF8 *, targetEnd, a3, ULONG, flags, d0, \ + , CODESETS_BASE_NAME) + +#define CodesetsConvertUTF8toUTF32(sourceStart, sourceEnd, targetStart, targetEnd, flags) \ + LP5(0x4e, ULONG, CodesetsConvertUTF8toUTF32, const , sourceStart, a0, const , sourceEnd, a1, UTF32 **, targetStart, a2, UTF32 *, targetEnd, a3, ULONG, flags, d0, \ + , CODESETS_BASE_NAME) + +#define CodesetsSetDefaultA(name, attrs) \ + LP2(0x54, struct codeset *, CodesetsSetDefaultA, STRPTR, name, a0, struct TagItem *, attrs, a1, \ + , CODESETS_BASE_NAME) + +#ifndef NO_INLINE_STDARG +#define CodesetsSetDefault(name, tags...) \ + ({ULONG _tags[] = {tags}; CodesetsSetDefaultA((name), (struct TagItem *) _tags);}) +#endif + +#define CodesetsFreeA(obj, attrs) \ + LP2NR(0x5a, CodesetsFreeA, APTR, obj, a0, struct TagItem *, attrs, a1, \ + , CODESETS_BASE_NAME) + +#ifndef NO_INLINE_STDARG +#define CodesetsFree(obj, tags...) \ + ({ULONG _tags[] = {tags}; CodesetsFreeA((obj), (struct TagItem *) _tags);}) +#endif + +#define CodesetsSupportedA(attrs) \ + LP1(0x60, STRPTR *, CodesetsSupportedA, struct TagItem *, attrs, a0, \ + , CODESETS_BASE_NAME) + +#ifndef NO_INLINE_STDARG +#define CodesetsSupported(tags...) \ + ({ULONG _tags[] = {tags}; CodesetsSupportedA((struct TagItem *) _tags);}) +#endif + +#define CodesetsFindA(name, attrs) \ + LP2(0x66, struct codeset *, CodesetsFindA, STRPTR, name, a0, struct TagItem *, attrs, a1, \ + , CODESETS_BASE_NAME) + +#ifndef NO_INLINE_STDARG +#define CodesetsFind(name, tags...) \ + ({ULONG _tags[] = {tags}; CodesetsFindA((name), (struct TagItem *) _tags);}) +#endif + +#define CodesetsFindBestA(attrs) \ + LP1(0x6c, struct codeset *, CodesetsFindBestA, struct TagItem *, attrs, a0, \ + , CODESETS_BASE_NAME) + +#ifndef NO_INLINE_STDARG +#define CodesetsFindBest(tags...) \ + ({ULONG _tags[] = {tags}; CodesetsFindBestA((struct TagItem *) _tags);}) +#endif + +#define CodesetsUTF8Len(str) \ + LP1(0x72, ULONG, CodesetsUTF8Len, const , str, a0, \ + , CODESETS_BASE_NAME) + +#define CodesetsUTF8ToStrA(attrs) \ + LP1(0x78, STRPTR, CodesetsUTF8ToStrA, struct TagItem *, attrs, a0, \ + , CODESETS_BASE_NAME) + +#ifndef NO_INLINE_STDARG +#define CodesetsUTF8ToStr(tags...) \ + ({ULONG _tags[] = {tags}; CodesetsUTF8ToStrA((struct TagItem *) _tags);}) +#endif + +#define CodesetsUTF8CreateA(attrs) \ + LP1(0x7e, UTF8 *, CodesetsUTF8CreateA, struct TagItem *, attrs, a0, \ + , CODESETS_BASE_NAME) + +#ifndef NO_INLINE_STDARG +#define CodesetsUTF8Create(tags...) \ + ({ULONG _tags[] = {tags}; CodesetsUTF8CreateA((struct TagItem *) _tags);}) +#endif + +#define CodesetsEncodeB64A(attrs) \ + LP1(0x84, ULONG, CodesetsEncodeB64A, struct TagItem *, attrs, a0, \ + , CODESETS_BASE_NAME) + +#ifndef NO_INLINE_STDARG +#define CodesetsEncodeB64(tags...) \ + ({ULONG _tags[] = {tags}; CodesetsEncodeB64A((struct TagItem *) _tags);}) +#endif + +#define CodesetsDecodeB64A(attrs) \ + LP1(0x8a, ULONG, CodesetsDecodeB64A, struct TagItem *, attrs, a0, \ + , CODESETS_BASE_NAME) + +#ifndef NO_INLINE_STDARG +#define CodesetsDecodeB64(tags...) \ + ({ULONG _tags[] = {tags}; CodesetsDecodeB64A((struct TagItem *) _tags);}) +#endif + +#define CodesetsStrLenA(str, attrs) \ + LP2(0x90, ULONG, CodesetsStrLenA, STRPTR, str, a0, struct TagItem *, attrs, a1, \ + , CODESETS_BASE_NAME) + +#ifndef NO_INLINE_STDARG +#define CodesetsStrLen(str, tags...) \ + ({ULONG _tags[] = {tags}; CodesetsStrLenA((str), (struct TagItem *) _tags);}) +#endif + +#define CodesetsIsValidUTF8(str) \ + LP1(0x96, BOOL, CodesetsIsValidUTF8, STRPTR, str, a0, \ + , CODESETS_BASE_NAME) + +#define CodesetsFreeVecPooledA(pool, mem, attrs) \ + LP3NR(0x9c, CodesetsFreeVecPooledA, APTR, pool, a0, APTR, mem, a1, struct TagItem *, attrs, a2, \ + , CODESETS_BASE_NAME) + +#ifndef NO_INLINE_STDARG +#define CodesetsFreeVecPooled(pool, mem, tags...) \ + ({ULONG _tags[] = {tags}; CodesetsFreeVecPooledA((pool), (mem), (struct TagItem *) _tags);}) +#endif + +#define CodesetsConvertStrA(str) \ + LP1(0xa2, STRPTR, CodesetsConvertStrA, struct TagItem *, str, a0, \ + , CODESETS_BASE_NAME) + +#ifndef NO_INLINE_STDARG +#define CodesetsConvertStr(tags...) \ + ({ULONG _tags[] = {tags}; CodesetsConvertStrA((struct TagItem *) _tags);}) +#endif + +#define CodesetsListCreateA(attrs) \ + LP1(0xa8, struct codesetList *, CodesetsListCreateA, struct TagItem *, attrs, a0, \ + , CODESETS_BASE_NAME) + +#ifndef NO_INLINE_STDARG +#define CodesetsListCreate(tags...) \ + ({ULONG _tags[] = {tags}; CodesetsListCreateA((struct TagItem *) _tags);}) +#endif + +#define CodesetsListDeleteA(attrs) \ + LP1(0xae, BOOL, CodesetsListDeleteA, struct TagItem *, attrs, a0, \ + , CODESETS_BASE_NAME) + +#ifndef NO_INLINE_STDARG +#define CodesetsListDelete(tags...) \ + ({ULONG _tags[] = {tags}; CodesetsListDeleteA((struct TagItem *) _tags);}) +#endif + +#define CodesetsListAddA(list, attrs) \ + LP2(0xb4, BOOL, CodesetsListAddA, struct codesetList *, list, a0, struct TagItem *, attrs, a1, \ + , CODESETS_BASE_NAME) + +#ifndef NO_INLINE_STDARG +#define CodesetsListAdd(list, tags...) \ + ({ULONG _tags[] = {tags}; CodesetsListAddA((list), (struct TagItem *) _tags);}) +#endif + +#define CodesetsListRemoveA(attrs) \ + LP1(0xba, BOOL, CodesetsListRemoveA, struct TagItem *, attrs, a0, \ + , CODESETS_BASE_NAME) + +#ifndef NO_INLINE_STDARG +#define CodesetsListRemove(tags...) \ + ({ULONG _tags[] = {tags}; CodesetsListRemoveA((struct TagItem *) _tags);}) +#endif + +#endif /* _INLINE_CODESETS_H */ diff --git a/workbench/libs/codesetslib/developer/include/inline/codesets_protos.h b/workbench/libs/codesetslib/developer/include/inline/codesets_protos.h new file mode 100644 index 000000000..6e985c3f0 --- /dev/null +++ b/workbench/libs/codesetslib/developer/include/inline/codesets_protos.h @@ -0,0 +1,166 @@ +#ifndef _VBCCINLINE_CODESETS_H +#define _VBCCINLINE_CODESETS_H + +#ifndef EXEC_TYPES_H +#include +#endif + +ULONG __CodesetsConvertUTF32toUTF16(__reg("a6") struct Library *, __reg("a0") void * sourceStart, __reg("a1") void * sourceEnd, __reg("a2") UTF16 ** targetStart, __reg("a3") UTF16 * targetEnd, __reg("d0") ULONG flags)="\tjsr\t-36(a6)"; +#define CodesetsConvertUTF32toUTF16(sourceStart, sourceEnd, targetStart, targetEnd, flags) __CodesetsConvertUTF32toUTF16(CodesetsBase, (void *)(sourceStart), (void *)(sourceEnd), (targetStart), (targetEnd), (flags)) + +ULONG __CodesetsConvertUTF16toUTF32(__reg("a6") struct Library *, __reg("a0") void * sourceStart, __reg("a1") void * sourceEnd, __reg("a2") UTF32 ** targetStart, __reg("a3") UTF32 * targetEnd, __reg("d0") ULONG flags)="\tjsr\t-42(a6)"; +#define CodesetsConvertUTF16toUTF32(sourceStart, sourceEnd, targetStart, targetEnd, flags) __CodesetsConvertUTF16toUTF32(CodesetsBase, (void *)(sourceStart), (void *)(sourceEnd), (targetStart), (targetEnd), (flags)) + +ULONG __CodesetsConvertUTF16toUTF8(__reg("a6") struct Library *, __reg("a0") void * sourceStart, __reg("a1") void * sourceEnd, __reg("a2") UTF8 ** targetStart, __reg("a3") UTF8 * targetEnd, __reg("d0") ULONG flags)="\tjsr\t-48(a6)"; +#define CodesetsConvertUTF16toUTF8(sourceStart, sourceEnd, targetStart, targetEnd, flags) __CodesetsConvertUTF16toUTF8(CodesetsBase, (void *)(sourceStart), (void *)(sourceEnd), (targetStart), (targetEnd), (flags)) + +BOOL __CodesetsIsLegalUTF8(__reg("a6") struct Library *, __reg("a0") void * source, __reg("d0") ULONG length)="\tjsr\t-54(a6)"; +#define CodesetsIsLegalUTF8(source, length) __CodesetsIsLegalUTF8(CodesetsBase, (void *)(source), (length)) + +BOOL __CodesetsIsLegalUTF8Sequence(__reg("a6") struct Library *, __reg("a0") void * source, __reg("a1") void * sourceEnd)="\tjsr\t-60(a6)"; +#define CodesetsIsLegalUTF8Sequence(source, sourceEnd) __CodesetsIsLegalUTF8Sequence(CodesetsBase, (void *)(source), (void *)(sourceEnd)) + +ULONG __CodesetsConvertUTF8toUTF16(__reg("a6") struct Library *, __reg("a0") void * sourceStart, __reg("a1") void * sourceEnd, __reg("a2") UTF16 ** targetStart, __reg("a3") UTF16 * targetEnd, __reg("d0") ULONG flags)="\tjsr\t-66(a6)"; +#define CodesetsConvertUTF8toUTF16(sourceStart, sourceEnd, targetStart, targetEnd, flags) __CodesetsConvertUTF8toUTF16(CodesetsBase, (void *)(sourceStart), (void *)(sourceEnd), (targetStart), (targetEnd), (flags)) + +ULONG __CodesetsConvertUTF32toUTF8(__reg("a6") struct Library *, __reg("a0") void * sourceStart, __reg("a1") void * sourceEnd, __reg("a2") UTF8 ** targetStart, __reg("a3") UTF8 * targetEnd, __reg("d0") ULONG flags)="\tjsr\t-72(a6)"; +#define CodesetsConvertUTF32toUTF8(sourceStart, sourceEnd, targetStart, targetEnd, flags) __CodesetsConvertUTF32toUTF8(CodesetsBase, (void *)(sourceStart), (void *)(sourceEnd), (targetStart), (targetEnd), (flags)) + +ULONG __CodesetsConvertUTF8toUTF32(__reg("a6") struct Library *, __reg("a0") void * sourceStart, __reg("a1") void * sourceEnd, __reg("a2") UTF32 ** targetStart, __reg("a3") UTF32 * targetEnd, __reg("d0") ULONG flags)="\tjsr\t-78(a6)"; +#define CodesetsConvertUTF8toUTF32(sourceStart, sourceEnd, targetStart, targetEnd, flags) __CodesetsConvertUTF8toUTF32(CodesetsBase, (void *)(sourceStart), (void *)(sourceEnd), (targetStart), (targetEnd), (flags)) + +struct codeset * __CodesetsSetDefaultA(__reg("a6") struct Library *, __reg("a0") STRPTR name, __reg("a1") struct TagItem * attrs)="\tjsr\t-84(a6)"; +#define CodesetsSetDefaultA(name, attrs) __CodesetsSetDefaultA(CodesetsBase, (name), (attrs)) + +#if !defined(NO_INLINE_STDARG) && (__STDC__ == 1L) && (__STDC_VERSION__ >= 199901L) +struct codeset * __CodesetsSetDefault(__reg("a6") struct Library *, __reg("a0") STRPTR name, Tag attrs, ...)="\tmove.l\ta1,-(a7)\n\tlea\t4(a7),a1\n\tjsr\t-84(a6)\n\tmovea.l\t(a7)+,a1"; +#define CodesetsSetDefault(name, ...) __CodesetsSetDefault(CodesetsBase, (name), __VA_ARGS__) +#endif + +void __CodesetsFreeA(__reg("a6") struct Library *, __reg("a0") APTR obj, __reg("a1") struct TagItem * attrs)="\tjsr\t-90(a6)"; +#define CodesetsFreeA(obj, attrs) __CodesetsFreeA(CodesetsBase, (obj), (attrs)) + +#if !defined(NO_INLINE_STDARG) && (__STDC__ == 1L) && (__STDC_VERSION__ >= 199901L) +void __CodesetsFree(__reg("a6") struct Library *, __reg("a0") APTR obj, Tag attrs, ...)="\tmove.l\ta1,-(a7)\n\tlea\t4(a7),a1\n\tjsr\t-90(a6)\n\tmovea.l\t(a7)+,a1"; +#define CodesetsFree(obj, ...) __CodesetsFree(CodesetsBase, (obj), __VA_ARGS__) +#endif + +STRPTR * __CodesetsSupportedA(__reg("a6") struct Library *, __reg("a0") struct TagItem * attrs)="\tjsr\t-96(a6)"; +#define CodesetsSupportedA(attrs) __CodesetsSupportedA(CodesetsBase, (attrs)) + +#if !defined(NO_INLINE_STDARG) && (__STDC__ == 1L) && (__STDC_VERSION__ >= 199901L) +STRPTR * __CodesetsSupported(__reg("a6") struct Library *, Tag attrs, ...)="\tmove.l\ta0,-(a7)\n\tlea\t4(a7),a0\n\tjsr\t-96(a6)\n\tmovea.l\t(a7)+,a0"; +#define CodesetsSupported(...) __CodesetsSupported(CodesetsBase, __VA_ARGS__) +#endif + +struct codeset * __CodesetsFindA(__reg("a6") struct Library *, __reg("a0") STRPTR name, __reg("a1") struct TagItem * attrs)="\tjsr\t-102(a6)"; +#define CodesetsFindA(name, attrs) __CodesetsFindA(CodesetsBase, (name), (attrs)) + +#if !defined(NO_INLINE_STDARG) && (__STDC__ == 1L) && (__STDC_VERSION__ >= 199901L) +struct codeset * __CodesetsFind(__reg("a6") struct Library *, __reg("a0") STRPTR name, Tag attrs, ...)="\tmove.l\ta1,-(a7)\n\tlea\t4(a7),a1\n\tjsr\t-102(a6)\n\tmovea.l\t(a7)+,a1"; +#define CodesetsFind(name, ...) __CodesetsFind(CodesetsBase, (name), __VA_ARGS__) +#endif + +struct codeset * __CodesetsFindBestA(__reg("a6") struct Library *, __reg("a0") struct TagItem * attrs)="\tjsr\t-108(a6)"; +#define CodesetsFindBestA(attrs) __CodesetsFindBestA(CodesetsBase, (attrs)) + +#if !defined(NO_INLINE_STDARG) && (__STDC__ == 1L) && (__STDC_VERSION__ >= 199901L) +struct codeset * __CodesetsFindBest(__reg("a6") struct Library *, Tag attrs, ...)="\tmove.l\ta0,-(a7)\n\tlea\t4(a7),a0\n\tjsr\t-108(a6)\n\tmovea.l\t(a7)+,a0"; +#define CodesetsFindBest(...) __CodesetsFindBest(CodesetsBase, __VA_ARGS__) +#endif + +ULONG __CodesetsUTF8Len(__reg("a6") struct Library *, __reg("a0") void * str)="\tjsr\t-114(a6)"; +#define CodesetsUTF8Len(str) __CodesetsUTF8Len(CodesetsBase, (void *)(str)) + +STRPTR __CodesetsUTF8ToStrA(__reg("a6") struct Library *, __reg("a0") struct TagItem * attrs)="\tjsr\t-120(a6)"; +#define CodesetsUTF8ToStrA(attrs) __CodesetsUTF8ToStrA(CodesetsBase, (attrs)) + +#if !defined(NO_INLINE_STDARG) && (__STDC__ == 1L) && (__STDC_VERSION__ >= 199901L) +STRPTR __CodesetsUTF8ToStr(__reg("a6") struct Library *, Tag attrs, ...)="\tmove.l\ta0,-(a7)\n\tlea\t4(a7),a0\n\tjsr\t-120(a6)\n\tmovea.l\t(a7)+,a0"; +#define CodesetsUTF8ToStr(...) __CodesetsUTF8ToStr(CodesetsBase, __VA_ARGS__) +#endif + +UTF8 * __CodesetsUTF8CreateA(__reg("a6") struct Library *, __reg("a0") struct TagItem * attrs)="\tjsr\t-126(a6)"; +#define CodesetsUTF8CreateA(attrs) __CodesetsUTF8CreateA(CodesetsBase, (attrs)) + +#if !defined(NO_INLINE_STDARG) && (__STDC__ == 1L) && (__STDC_VERSION__ >= 199901L) +UTF8 * __CodesetsUTF8Create(__reg("a6") struct Library *, Tag attrs, ...)="\tmove.l\ta0,-(a7)\n\tlea\t4(a7),a0\n\tjsr\t-126(a6)\n\tmovea.l\t(a7)+,a0"; +#define CodesetsUTF8Create(...) __CodesetsUTF8Create(CodesetsBase, __VA_ARGS__) +#endif + +ULONG __CodesetsEncodeB64A(__reg("a6") struct Library *, __reg("a0") struct TagItem * attrs)="\tjsr\t-132(a6)"; +#define CodesetsEncodeB64A(attrs) __CodesetsEncodeB64A(CodesetsBase, (attrs)) + +#if !defined(NO_INLINE_STDARG) && (__STDC__ == 1L) && (__STDC_VERSION__ >= 199901L) +ULONG __CodesetsEncodeB64(__reg("a6") struct Library *, Tag attrs, ...)="\tmove.l\ta0,-(a7)\n\tlea\t4(a7),a0\n\tjsr\t-132(a6)\n\tmovea.l\t(a7)+,a0"; +#define CodesetsEncodeB64(...) __CodesetsEncodeB64(CodesetsBase, __VA_ARGS__) +#endif + +ULONG __CodesetsDecodeB64A(__reg("a6") struct Library *, __reg("a0") struct TagItem * attrs)="\tjsr\t-138(a6)"; +#define CodesetsDecodeB64A(attrs) __CodesetsDecodeB64A(CodesetsBase, (attrs)) + +#if !defined(NO_INLINE_STDARG) && (__STDC__ == 1L) && (__STDC_VERSION__ >= 199901L) +ULONG __CodesetsDecodeB64(__reg("a6") struct Library *, Tag attrs, ...)="\tmove.l\ta0,-(a7)\n\tlea\t4(a7),a0\n\tjsr\t-138(a6)\n\tmovea.l\t(a7)+,a0"; +#define CodesetsDecodeB64(...) __CodesetsDecodeB64(CodesetsBase, __VA_ARGS__) +#endif + +ULONG __CodesetsStrLenA(__reg("a6") struct Library *, __reg("a0") STRPTR str, __reg("a1") struct TagItem * attrs)="\tjsr\t-144(a6)"; +#define CodesetsStrLenA(str, attrs) __CodesetsStrLenA(CodesetsBase, (str), (attrs)) + +#if !defined(NO_INLINE_STDARG) && (__STDC__ == 1L) && (__STDC_VERSION__ >= 199901L) +ULONG __CodesetsStrLen(__reg("a6") struct Library *, __reg("a0") STRPTR str, Tag attrs, ...)="\tmove.l\ta1,-(a7)\n\tlea\t4(a7),a1\n\tjsr\t-144(a6)\n\tmovea.l\t(a7)+,a1"; +#define CodesetsStrLen(str, ...) __CodesetsStrLen(CodesetsBase, (str), __VA_ARGS__) +#endif + +BOOL __CodesetsIsValidUTF8(__reg("a6") struct Library *, __reg("a0") STRPTR str)="\tjsr\t-150(a6)"; +#define CodesetsIsValidUTF8(str) __CodesetsIsValidUTF8(CodesetsBase, (str)) + +void __CodesetsFreeVecPooledA(__reg("a6") struct Library *, __reg("a0") APTR pool, __reg("a1") APTR mem, __reg("a2") struct TagItem * attrs)="\tjsr\t-156(a6)"; +#define CodesetsFreeVecPooledA(pool, mem, attrs) __CodesetsFreeVecPooledA(CodesetsBase, (pool), (mem), (attrs)) + +#if !defined(NO_INLINE_STDARG) && (__STDC__ == 1L) && (__STDC_VERSION__ >= 199901L) +void __CodesetsFreeVecPooled(__reg("a6") struct Library *, __reg("a0") APTR pool, __reg("a1") APTR mem, Tag attrs, ...)="\tmove.l\ta2,-(a7)\n\tlea\t4(a7),a2\n\tjsr\t-156(a6)\n\tmovea.l\t(a7)+,a2"; +#define CodesetsFreeVecPooled(pool, mem, ...) __CodesetsFreeVecPooled(CodesetsBase, (pool), (mem), __VA_ARGS__) +#endif + +STRPTR __CodesetsConvertStrA(__reg("a6") struct Library *, __reg("a0") struct TagItem * str)="\tjsr\t-162(a6)"; +#define CodesetsConvertStrA(str) __CodesetsConvertStrA(CodesetsBase, (str)) + +#if !defined(NO_INLINE_STDARG) && (__STDC__ == 1L) && (__STDC_VERSION__ >= 199901L) +STRPTR __CodesetsConvertStr(__reg("a6") struct Library *, Tag str, ...)="\tmove.l\ta0,-(a7)\n\tlea\t4(a7),a0\n\tjsr\t-162(a6)\n\tmovea.l\t(a7)+,a0"; +#define CodesetsConvertStr(...) __CodesetsConvertStr(CodesetsBase, __VA_ARGS__) +#endif + +struct codesetList * __CodesetsListCreateA(__reg("a6") struct Library *, __reg("a0") struct TagItem * attrs)="\tjsr\t-168(a6)"; +#define CodesetsListCreateA(attrs) __CodesetsListCreateA(CodesetsBase, (attrs)) + +#if !defined(NO_INLINE_STDARG) && (__STDC__ == 1L) && (__STDC_VERSION__ >= 199901L) +struct codesetList * __CodesetsListCreate(__reg("a6") struct Library *, Tag attrs, ...)="\tmove.l\ta0,-(a7)\n\tlea\t4(a7),a0\n\tjsr\t-168(a6)\n\tmovea.l\t(a7)+,a0"; +#define CodesetsListCreate(...) __CodesetsListCreate(CodesetsBase, __VA_ARGS__) +#endif + +BOOL __CodesetsListDeleteA(__reg("a6") struct Library *, __reg("a0") struct TagItem * attrs)="\tjsr\t-174(a6)"; +#define CodesetsListDeleteA(attrs) __CodesetsListDeleteA(CodesetsBase, (attrs)) + +#if !defined(NO_INLINE_STDARG) && (__STDC__ == 1L) && (__STDC_VERSION__ >= 199901L) +BOOL __CodesetsListDelete(__reg("a6") struct Library *, Tag attrs, ...)="\tmove.l\ta0,-(a7)\n\tlea\t4(a7),a0\n\tjsr\t-174(a6)\n\tmovea.l\t(a7)+,a0"; +#define CodesetsListDelete(...) __CodesetsListDelete(CodesetsBase, __VA_ARGS__) +#endif + +BOOL __CodesetsListAddA(__reg("a6") struct Library *, __reg("a0") struct codesetList * list, __reg("a1") struct TagItem * attrs)="\tjsr\t-180(a6)"; +#define CodesetsListAddA(list, attrs) __CodesetsListAddA(CodesetsBase, (list), (attrs)) + +#if !defined(NO_INLINE_STDARG) && (__STDC__ == 1L) && (__STDC_VERSION__ >= 199901L) +BOOL __CodesetsListAdd(__reg("a6") struct Library *, __reg("a0") struct codesetList * list, ...)="\tmove.l\ta1,-(a7)\n\tlea\t4(a7),a1\n\tjsr\t-180(a6)\n\tmovea.l\t(a7)+,a1"; +#define CodesetsListAdd(...) __CodesetsListAdd(CodesetsBase, __VA_ARGS__) +#endif + +BOOL __CodesetsListRemoveA(__reg("a6") struct Library *, __reg("a0") struct TagItem * attrs)="\tjsr\t-186(a6)"; +#define CodesetsListRemoveA(attrs) __CodesetsListRemoveA(CodesetsBase, (attrs)) + +#if !defined(NO_INLINE_STDARG) && (__STDC__ == 1L) && (__STDC_VERSION__ >= 199901L) +BOOL __CodesetsListRemove(__reg("a6") struct Library *, Tag attrs, ...)="\tmove.l\ta0,-(a7)\n\tlea\t4(a7),a0\n\tjsr\t-186(a6)\n\tmovea.l\t(a7)+,a0"; +#define CodesetsListRemove(...) __CodesetsListRemove(CodesetsBase, __VA_ARGS__) +#endif + +#endif /* _VBCCINLINE_CODESETS_H */ diff --git a/workbench/libs/codesetslib/developer/include/inline4/codesets.h b/workbench/libs/codesetslib/developer/include/inline4/codesets.h new file mode 100644 index 000000000..d9bb17c4d --- /dev/null +++ b/workbench/libs/codesetslib/developer/include/inline4/codesets.h @@ -0,0 +1,135 @@ +#ifndef INLINE4_CODESETS_H +#define INLINE4_CODESETS_H + +/* +** This file was auto generated by idltool 51.8. +** +** It provides compatibility to OS3 style library +** calls by substituting functions. +** +** Do not edit manually. +*/ + +#ifndef EXEC_TYPES_H +#include +#endif +#ifndef EXEC_EXEC_H +#include +#endif +#ifndef EXEC_INTERFACES_H +#include +#endif + +#ifndef LIBRARIES_CODESETS_H +#include +#endif + +/* Inline macros for Interface "main" */ +#define CodesetsConvertUTF32toUTF16(sourceStart, sourceEnd, targetStart, targetEnd, flags) ICodesets->CodesetsConvertUTF32toUTF16(sourceStart, sourceEnd, targetStart, targetEnd, flags) +#define CodesetsConvertUTF16toUTF32(sourceStart, sourceEnd, targetStart, targetEnd, flags) ICodesets->CodesetsConvertUTF16toUTF32(sourceStart, sourceEnd, targetStart, targetEnd, flags) +#define CodesetsConvertUTF16toUTF8(sourceStart, sourceEnd, targetStart, targetEnd, flags) ICodesets->CodesetsConvertUTF16toUTF8(sourceStart, sourceEnd, targetStart, targetEnd, flags) +#define CodesetsIsLegalUTF8(source, length) ICodesets->CodesetsIsLegalUTF8(source, length) +#define CodesetsIsLegalUTF8Sequence(source, sourceEnd) ICodesets->CodesetsIsLegalUTF8Sequence(source, sourceEnd) +#define CodesetsConvertUTF8toUTF16(sourceStart, sourceEnd, targetStart, targetEnd, flags) ICodesets->CodesetsConvertUTF8toUTF16(sourceStart, sourceEnd, targetStart, targetEnd, flags) +#define CodesetsConvertUTF32toUTF8(sourceStart, sourceEnd, targetStart, targetEnd, flags) ICodesets->CodesetsConvertUTF32toUTF8(sourceStart, sourceEnd, targetStart, targetEnd, flags) +#define CodesetsConvertUTF8toUTF32(sourceStart, sourceEnd, targetStart, targetEnd, flags) ICodesets->CodesetsConvertUTF8toUTF32(sourceStart, sourceEnd, targetStart, targetEnd, flags) +#define CodesetsSetDefaultA(name, attrs) ICodesets->CodesetsSetDefaultA(name, attrs) +#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || (__GNUC__ >= 3) +#define CodesetsSetDefault(...) ICodesets->CodesetsSetDefault(__VA_ARGS__) +#elif (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) +#define CodesetsSetDefault(vargs...) ICodesets->CodesetsSetDefault(## vargs) +#endif +#define CodesetsFreeA(obj, attrs) ICodesets->CodesetsFreeA(obj, attrs) +#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || (__GNUC__ >= 3) +#define CodesetsFree(...) ICodesets->CodesetsFree(__VA_ARGS__) +#elif (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) +#define CodesetsFree(vargs...) ICodesets->CodesetsFree(## vargs) +#endif +#define CodesetsSupportedA(attrs) ICodesets->CodesetsSupportedA(attrs) +#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || (__GNUC__ >= 3) +#define CodesetsSupported(...) ICodesets->CodesetsSupported(__VA_ARGS__) +#elif (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) +#define CodesetsSupported(...) ICodesets->CodesetsSupported(## vargs) +#endif +#define CodesetsFindA(name, attrs) ICodesets->CodesetsFindA(name, attrs) +#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || (__GNUC__ >= 3) +#define CodesetsFind(...) ICodesets->CodesetsFind(__VA_ARGS__) +#elif (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) +#define CodesetsFind(vargs...) ICodesets->CodesetsFind(## vargs) +#endif +#define CodesetsFindBestA(attrs) ICodesets->CodesetsFindBestA(attrs) +#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || (__GNUC__ >= 3) +#define CodesetsFindBest(...) ICodesets->CodesetsFindBest(__VA_ARGS__) +#elif (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) +#define CodesetsFindBest(...) ICodesets->CodesetsFindBest(## vargs) +#endif +#define CodesetsUTF8Len(str) ICodesets->CodesetsUTF8Len(str) +#define CodesetsUTF8ToStrA(attrs) ICodesets->CodesetsUTF8ToStrA(attrs) +#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || (__GNUC__ >= 3) +#define CodesetsUTF8ToStr(...) ICodesets->CodesetsUTF8ToStr(__VA_ARGS__) +#elif (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) +#define CodesetsUTF8ToStr(...) ICodesets->CodesetsUTF8ToStr(## vargs) +#endif +#define CodesetsUTF8CreateA(attrs) ICodesets->CodesetsUTF8CreateA(attrs) +#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || (__GNUC__ >= 3) +#define CodesetsUTF8Create(...) ICodesets->CodesetsUTF8Create(__VA_ARGS__) +#elif (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) +#define CodesetsUTF8Create(...) ICodesets->CodesetsUTF8Create(## vargs) +#endif +#define CodesetsEncodeB64A(attrs) ICodesets->CodesetsEncodeB64A(attrs) +#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || (__GNUC__ >= 3) +#define CodesetsEncodeB64(...) ICodesets->CodesetsEncodeB64(__VA_ARGS__) +#elif (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) +#define CodesetsEncodeB64(...) ICodesets->CodesetsEncodeB64(## vargs) +#endif +#define CodesetsDecodeB64A(attrs) ICodesets->CodesetsDecodeB64A(attrs) +#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || (__GNUC__ >= 3) +#define CodesetsDecodeB64(...) ICodesets->CodesetsDecodeB64(__VA_ARGS__) +#elif (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) +#define CodesetsDecodeB64(...) ICodesets->CodesetsDecodeB64(## vargs) +#endif +#define CodesetsStrLenA(str, attrs) ICodesets->CodesetsStrLenA(str, attrs) +#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || (__GNUC__ >= 3) +#define CodesetsStrLen(...) ICodesets->CodesetsStrLen(__VA_ARGS__) +#elif (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) +#define CodesetsStrLen(vargs...) ICodesets->CodesetsStrLen(## vargs) +#endif +#define CodesetsIsValidUTF8(str) ICodesets->CodesetsIsValidUTF8(str) +#define CodesetsFreeVecPooledA(pool, mem, attrs) ICodesets->CodesetsFreeVecPooledA(pool, mem, attrs) +#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || (__GNUC__ >= 3) +#define CodesetsFreeVecPooled(pool, ...) ICodesets->CodesetsFreeVecPooled(pool, __VA_ARGS__) +#elif (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) +#define CodesetsFreeVecPooled(pool, vargs...) ICodesets->CodesetsFreeVecPooled(pool, ## vargs) +#endif +#define CodesetsConvertStrA(attrs) ICodesets->CodesetsConvertStrA(attrs) +#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || (__GNUC__ >= 3) +#define CodesetsConvertStr(...) ICodesets->CodesetsConvertStr(__VA_ARGS__) +#elif (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) +#define CodesetsConvertStr(...) ICodesets->CodesetsConvertStr(## vargs) +#endif +#define CodesetsListCreateA(attrs) ICodesets->CodesetsListCreateA(attrs) +#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || (__GNUC__ >= 3) +#define CodesetsListCreate(...) ICodesets->CodesetsListCreate(__VA_ARGS__) +#elif (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) +#define CodesetsListCreate(...) ICodesets->CodesetsListCreate(## vargs) +#endif +#define CodesetsListDeleteA(attrs) ICodesets->CodesetsListDeleteA(attrs) +#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || (__GNUC__ >= 3) +#define CodesetsListDelete(...) ICodesets->CodesetsListDelete(__VA_ARGS__) +#elif (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) +#define CodesetsListDelete(...) ICodesets->CodesetsListDelete(## vargs) +#endif +#define CodesetsListAddA(codesetsList, attrs) ICodesets->CodesetsListAddA(codesetsList, attrs) +#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || (__GNUC__ >= 3) +#define CodesetsListAdd(...) ICodesets->CodesetsListAdd(__VA_ARGS__) +#elif (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) +#define CodesetsListAdd(vargs...) ICodesets->CodesetsListAdd(## vargs) +#endif +#define CodesetsListRemoveA(attrs) ICodesets->CodesetsListRemoveA(attrs) +#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || (__GNUC__ >= 3) +#define CodesetsListRemove(...) ICodesets->CodesetsListRemove(__VA_ARGS__) +#elif (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) +#define CodesetsListRemove(...) ICodesets->CodesetsListRemove(## vargs) +#endif + +#endif /* INLINE4_CODESETS_H */ diff --git a/workbench/libs/codesetslib/developer/include/interfaces/codesets.h b/workbench/libs/codesetslib/developer/include/interfaces/codesets.h new file mode 100644 index 000000000..e1cbd355a --- /dev/null +++ b/workbench/libs/codesetslib/developer/include/interfaces/codesets.h @@ -0,0 +1,76 @@ +#ifndef CODESETS_INTERFACE_DEF_H +#define CODESETS_INTERFACE_DEF_H + +/* +** This file was machine generated by idltool 51.8. +** Do not edit +*/ + +#ifndef EXEC_TYPES_H +#include +#endif +#ifndef EXEC_EXEC_H +#include +#endif +#ifndef EXEC_INTERFACES_H +#include +#endif + +#ifndef LIBRARIES_CODESETS_H +#include +#endif + +struct CodesetsIFace +{ + struct InterfaceData Data; + + ULONG APICALL (*Obtain)(struct CodesetsIFace *Self); + ULONG APICALL (*Release)(struct CodesetsIFace *Self); + void APICALL (*Expunge)(struct CodesetsIFace *Self); + struct Interface * APICALL (*Clone)(struct CodesetsIFace *Self); + void APICALL (*Reserved1)(struct CodesetsIFace *Self); + ULONG APICALL (*CodesetsConvertUTF32toUTF16)(struct CodesetsIFace *Self, const UTF32 ** sourceStart, const UTF32 * sourceEnd, UTF16 ** targetStart, UTF16 * targetEnd, ULONG flags); + ULONG APICALL (*CodesetsConvertUTF16toUTF32)(struct CodesetsIFace *Self, const UTF16 ** sourceStart, const UTF16 * sourceEnd, UTF32 ** targetStart, UTF32 * targetEnd, ULONG flags); + ULONG APICALL (*CodesetsConvertUTF16toUTF8)(struct CodesetsIFace *Self, const UTF16 ** sourceStart, const UTF16 * sourceEnd, UTF8 ** targetStart, UTF8 * targetEnd, ULONG flags); + BOOL APICALL (*CodesetsIsLegalUTF8)(struct CodesetsIFace *Self, const UTF8 * source, ULONG length); + BOOL APICALL (*CodesetsIsLegalUTF8Sequence)(struct CodesetsIFace *Self, const UTF8 * source, const UTF8 * sourceEnd); + ULONG APICALL (*CodesetsConvertUTF8toUTF16)(struct CodesetsIFace *Self, const UTF8 ** sourceStart, const UTF8 * sourceEnd, UTF16 ** targetStart, UTF16 * targetEnd, ULONG flags); + ULONG APICALL (*CodesetsConvertUTF32toUTF8)(struct CodesetsIFace *Self, const UTF32 ** sourceStart, const UTF32 * sourceEnd, UTF8 ** targetStart, UTF8 * targetEnd, ULONG flags); + ULONG APICALL (*CodesetsConvertUTF8toUTF32)(struct CodesetsIFace *Self, const UTF8 ** sourceStart, const UTF8 * sourceEnd, UTF32 ** targetStart, UTF32 * targetEnd, ULONG flags); + struct codeset * APICALL (*CodesetsSetDefaultA)(struct CodesetsIFace *Self, STRPTR name, struct TagItem * attrs); + struct codeset * APICALL (*CodesetsSetDefault)(struct CodesetsIFace *Self, STRPTR name, ...); + void APICALL (*CodesetsFreeA)(struct CodesetsIFace *Self, APTR obj, struct TagItem * attrs); + void APICALL (*CodesetsFree)(struct CodesetsIFace *Self, APTR obj, ...); + STRPTR * APICALL (*CodesetsSupportedA)(struct CodesetsIFace *Self, struct TagItem * attrs); + STRPTR * APICALL (*CodesetsSupported)(struct CodesetsIFace *Self, ...); + struct codeset * APICALL (*CodesetsFindA)(struct CodesetsIFace *Self, STRPTR name, struct TagItem * attrs); + struct codeset * APICALL (*CodesetsFind)(struct CodesetsIFace *Self, STRPTR name, ...); + struct codeset * APICALL (*CodesetsFindBestA)(struct CodesetsIFace *Self, struct TagItem * attrs); + struct codeset * APICALL (*CodesetsFindBest)(struct CodesetsIFace *Self, ...); + ULONG APICALL (*CodesetsUTF8Len)(struct CodesetsIFace *Self, const UTF8 * str); + STRPTR APICALL (*CodesetsUTF8ToStrA)(struct CodesetsIFace *Self, struct TagItem * attrs); + STRPTR APICALL (*CodesetsUTF8ToStr)(struct CodesetsIFace *Self, ...); + UTF8 * APICALL (*CodesetsUTF8CreateA)(struct CodesetsIFace *Self, struct TagItem * attrs); + UTF8 * APICALL (*CodesetsUTF8Create)(struct CodesetsIFace *Self, ...); + ULONG APICALL (*CodesetsEncodeB64A)(struct CodesetsIFace *Self, struct TagItem * attrs); + ULONG APICALL (*CodesetsEncodeB64)(struct CodesetsIFace *Self, ...); + ULONG APICALL (*CodesetsDecodeB64A)(struct CodesetsIFace *Self, struct TagItem * attrs); + ULONG APICALL (*CodesetsDecodeB64)(struct CodesetsIFace *Self, ...); + ULONG APICALL (*CodesetsStrLenA)(struct CodesetsIFace *Self, STRPTR str, struct TagItem * attrs); + ULONG APICALL (*CodesetsStrLen)(struct CodesetsIFace *Self, STRPTR str, ...); + BOOL APICALL (*CodesetsIsValidUTF8)(struct CodesetsIFace *Self, STRPTR str); + void APICALL (*CodesetsFreeVecPooledA)(struct CodesetsIFace *Self, APTR pool, APTR mem, struct TagItem * attrs); + void APICALL (*CodesetsFreeVecPooled)(struct CodesetsIFace *Self, APTR pool, APTR mem, ...); + STRPTR APICALL (*CodesetsConvertStrA)(struct CodesetsIFace *Self, struct TagItem * attrs); + STRPTR APICALL (*CodesetsConvertStr)(struct CodesetsIFace *Self, ...); + struct codesetList * APICALL (*CodesetsListCreateA)(struct CodesetsIFace *Self, struct TagItem * attrs); + struct codesetList * APICALL (*CodesetsListCreate)(struct CodesetsIFace *Self, ...); + BOOL APICALL (*CodesetsListDeleteA)(struct CodesetsIFace *Self, struct TagItem * attrs); + BOOL APICALL (*CodesetsListDelete)(struct CodesetsIFace *Self, ...); + BOOL APICALL (*CodesetsListAddA)(struct CodesetsIFace *Self, struct codesetList * codesetsList, struct TagItem * attrs); + BOOL APICALL (*CodesetsListAdd)(struct CodesetsIFace *Self, struct codesetList * codesetsList, ...); + BOOL APICALL (*CodesetsListRemoveA)(struct CodesetsIFace *Self, struct TagItem * attrs); + BOOL APICALL (*CodesetsListRemove)(struct CodesetsIFace *Self, ...); +}; + +#endif /* CODESETS_INTERFACE_DEF_H */ diff --git a/workbench/libs/codesetslib/developer/include/interfaces/codesets.i b/workbench/libs/codesetslib/developer/include/interfaces/codesets.i new file mode 100644 index 000000000..1468ed0eb --- /dev/null +++ b/workbench/libs/codesetslib/developer/include/interfaces/codesets.i @@ -0,0 +1,62 @@ +#ifndef CODESETS_INTERFACE_DEF_H +#define CODESETS_INTERFACE_DEF_H +/* +** This file is machine generated from idltool +** Do not edit +*/ + +#include +#include +#include + +STRUCTURE CodesetsIFace, InterfaceData_SIZE + FPTR ICodesets_Obtain + FPTR ICodesets_Release + FPTR ICodesets_Expunge + FPTR ICodesets_Clone + FPTR ICodesets_Reserved1 + FPTR ICodesets_CodesetsConvertUTF32toUTF16 + FPTR ICodesets_CodesetsConvertUTF16toUTF32 + FPTR ICodesets_CodesetsConvertUTF16toUTF8 + FPTR ICodesets_CodesetsIsLegalUTF8 + FPTR ICodesets_CodesetsIsLegalUTF8Sequence + FPTR ICodesets_CodesetsConvertUTF8toUTF16 + FPTR ICodesets_CodesetsConvertUTF32toUTF8 + FPTR ICodesets_CodesetsConvertUTF8toUTF32 + FPTR ICodesets_CodesetsSetDefaultA + FPTR ICodesets_CodesetsSetDefault + FPTR ICodesets_CodesetsFreeA + FPTR ICodesets_CodesetsFree + FPTR ICodesets_CodesetsSupportedA + FPTR ICodesets_CodesetsSupported + FPTR ICodesets_CodesetsFindA + FPTR ICodesets_CodesetsFind + FPTR ICodesets_CodesetsFindBestA + FPTR ICodesets_CodesetsFindBest + FPTR ICodesets_CodesetsUTF8Len + FPTR ICodesets_CodesetsUTF8ToStrA + FPTR ICodesets_CodesetsUTF8ToStr + FPTR ICodesets_CodesetsUTF8CreateA + FPTR ICodesets_CodesetsUTF8Create + FPTR ICodesets_CodesetsEncodeB64A + FPTR ICodesets_CodesetsEncodeB64 + FPTR ICodesets_CodesetsDecodeB64A + FPTR ICodesets_CodesetsDecodeB64 + FPTR ICodesets_CodesetsStrLenA + FPTR ICodesets_CodesetsStrLen + FPTR ICodesets_CodesetsIsValidUTF8 + FPTR ICodesets_CodesetsFreeVecPooledA + FPTR ICodesets_CodesetsFreeVecPooled + FPTR ICodesets_CodesetsConvertStrA + FPTR ICodesets_CodesetsConvertStr + FPTR ICodesets_CodesetsListCreateA + FPTR ICodesets_CodesetsListCreate + FPTR ICodesets_CodesetsListDeleteA + FPTR ICodesets_CodesetsListDelete + FPTR ICodesets_CodesetsListAddA + FPTR ICodesets_CodesetsListAdd + FPTR ICodesets_CodesetsListRemoveA + FPTR ICodesets_CodesetsListRemove + LABEL CodesetsIFace_SIZE + +#endif diff --git a/workbench/libs/codesetslib/developer/include/libraries/codesets.h b/workbench/libs/codesetslib/developer/include/libraries/codesets.h new file mode 100755 index 000000000..f86733727 --- /dev/null +++ b/workbench/libs/codesetslib/developer/include/libraries/codesets.h @@ -0,0 +1,204 @@ +#ifndef LIBRARIES_CODESETS_H +#define LIBRARIES_CODESETS_H + +/*************************************************************************** + + codesets.library - Amiga shared library for handling different codesets + Copyright (C) 2001-2005 by Alfonso [alfie] Ranieri . + Copyright (C) 2005-2007 by codesets.library Open Source Team + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + codesets.library project: http://sourceforge.net/projects/codesetslib/ + + $Id$ + +***************************************************************************/ + +#ifndef EXEC_SEMAPHORES_H +#include +#endif + +#ifndef UTILITY_TAGITEM_H +#include +#endif + +#ifndef UTILITY_HOOKS_H +#include +#endif + +#ifdef __GNUC__ + #ifdef __PPC__ + #pragma pack(2) + #endif +#elif defined(__VBCC__) + #pragma amiga-align +#endif + +/***********************************************************************/ +/* +** Actual library name and version. +*/ + +#define CODESETSNAME "codesets.library" +#define CODESETSVER 6 + +/***********************************************************************/ +/* + * Types + */ + +typedef unsigned long UTF32; /* at least 32 bits */ +typedef unsigned short UTF16; /* at least 16 bits */ +typedef unsigned char UTF8; /* typically 8 bits */ + +/***********************************************************************/ +/* + * single_convert + */ + +struct single_convert +{ + unsigned char code; /* the code in this representation */ + UTF8 utf8[8]; /* the utf8 string, first byte is alway the length of the string */ + unsigned int ucs4; /* the full 32 bit unicode */ +}; + +/***********************************************************************/ +/* + * codeset + */ + +struct codeset +{ + struct MinNode node; + char *name; + char *alt_name; + char *characterization; + int read_only; + struct single_convert table[256]; + struct single_convert table_sorted[256]; +}; + +/***********************************************************************/ +/* + * codesetList + */ + +struct codesetList +{ + struct MinList list; +}; + +/***********************************************************************/ + +enum +{ + CSR_ConversionOK=0, /* conversion successful */ + CSR_SourceExhausted, /* partial character in source, but hit end */ + CSR_TargetExhausted, /* insuff. room in target for conversion */ + CSR_SourceIllegal /* source sequence is illegal/malformed */ +}; + +enum +{ + CSF_StrictConversion=0, + CSF_LenientConversion +}; + +/***********************************************************************/ + +/* +** Enumerations for CSA_CodesetFamily +*/ +enum +{ + CSV_CodesetFamily_Latin=0, /* Latin Family */ + CSV_CodesetFamily_Cyrillic /* Cyrillic Family */ +}; + +/***********************************************************************/ +/* +** Tags +*/ + +#define CODESETSLIB_TAG(n) ((ULONG)0xfec901f4+(n)) + +#define CSA_Base CODESETSLIB_TAG(0) + +#define CSA_SourceLen CODESETSLIB_TAG(1) +#define CSA_Source CODESETSLIB_TAG(2) +#define CSA_Dest CODESETSLIB_TAG(3) +#define CSA_DestLen CODESETSLIB_TAG(4) +#define CSA_DestHook CODESETSLIB_TAG(5) +#define CSA_DestLenPtr CODESETSLIB_TAG(6) +#define CSA_SourceCodeset CODESETSLIB_TAG(7) +#define CSA_Pool CODESETSLIB_TAG(8) +#define CSA_PoolSem CODESETSLIB_TAG(9) +#define CSA_AllocIfNeeded CODESETSLIB_TAG(10) +#define CSA_Save CODESETSLIB_TAG(11) +#define CSA_FallbackToDefault CODESETSLIB_TAG(12) +#define CSA_DestCodeset CODESETSLIB_TAG(13) +#define CSA_CodesetDir CODESETSLIB_TAG(14) +#define CSA_CodesetFile CODESETSLIB_TAG(15) +#define CSA_CodesetList CODESETSLIB_TAG(16) +#define CSA_FreeCodesets CODESETSLIB_TAG(17) +#define CSA_CodesetFamily CODESETSLIB_TAG(18) +#define CSA_ErrPtr CODESETSLIB_TAG(19) + +#define CSA_B64SourceString CODESETSLIB_TAG(20) +#define CSA_B64SourceLen CODESETSLIB_TAG(21) +#define CSA_B64SourceFile CODESETSLIB_TAG(22) +#define CSA_B64DestPtr CODESETSLIB_TAG(23) +#define CSA_B64DestFile CODESETSLIB_TAG(24) +#define CSA_B64MaxLineLen CODESETSLIB_TAG(25) +#define CSA_B64Unix CODESETSLIB_TAG(26) +#define CSA_B64FLG_NtCheckErr CODESETSLIB_TAG(27) + +/***********************************************************************/ +/* +** Returns code from CodesetsEncodeB64A() CodesetsDecodeB64A() +*/ + +enum +{ + CSR_B64_ERROR_OK = 0, + CSR_B64_ERROR_MEM, + CSR_B64_ERROR_DOS, + CSR_B64_ERROR_INCOMPLETE, + CSR_B64_ERROR_ILLEGAL, +}; + +/***********************************************************************/ + +struct convertMsg +{ + ULONG state; + ULONG len; +}; + +enum +{ + CSV_Translating, + CSV_End, +}; + +/***********************************************************************/ + +#ifdef __GNUC__ + #ifdef __PPC__ + #pragma pack() + #endif +#elif defined(__VBCC__) + #pragma default-align +#endif + +#endif /* LIBRARIES_CODESETS_H */ diff --git a/workbench/libs/codesetslib/developer/include/ppcinline/codesets.h b/workbench/libs/codesetslib/developer/include/ppcinline/codesets.h new file mode 100755 index 000000000..22f2fc879 --- /dev/null +++ b/workbench/libs/codesetslib/developer/include/ppcinline/codesets.h @@ -0,0 +1,269 @@ +/*************************************************************************** + + codesets.library - Amiga shared library for handling different codesets + Copyright (C) 2001-2005 by Alfonso [alfie] Ranieri . + Copyright (C) 2005-2007 by codesets.library Open Source Team + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + codesets.library project: http://sourceforge.net/projects/codesetslib/ + + $Id$ + +***************************************************************************/ + +/* Automatically generated header! Do not edit! */ + +#ifndef _PPCINLINE_CODESETS_H +#define _PPCINLINE_CODESETS_H + +#ifndef __PPCINLINE_MACROS_H +#include +#endif /* !__PPCINLINE_MACROS_H */ + +#ifndef CODESETS_BASE_NAME +#define CODESETS_BASE_NAME CodesetsBase +#endif /* !CODESETS_BASE_NAME */ + +#define CodesetsSupportedA(__p0) \ + LP1(96, STRPTR *, CodesetsSupportedA, \ + struct TagItem *, __p0, a0, \ + , CODESETS_BASE_NAME, 0, 0, 0, 0, 0, 0) + +#define CodesetsIsLegalUTF8(__p0, __p1) \ + LP2(54, BOOL , CodesetsIsLegalUTF8, \ + const UTF8 *, __p0, a0, \ + ULONG , __p1, d0, \ + , CODESETS_BASE_NAME, 0, 0, 0, 0, 0, 0) + +#define CodesetsListRemoveA(__p0) \ + LP1(186, BOOL , CodesetsListRemoveA, \ + struct TagItem *, __p0, a0, \ + , CODESETS_BASE_NAME, 0, 0, 0, 0, 0, 0) + +#define CodesetsFindBestA(__p0) \ + LP1(108, struct codeset *, CodesetsFindBestA, \ + struct TagItem *, __p0, a0, \ + , CODESETS_BASE_NAME, 0, 0, 0, 0, 0, 0) + +#define CodesetsListCreateA(__p0) \ + LP1(168, struct codesetList *, CodesetsListCreateA, \ + struct TagItem *, __p0, a0, \ + , CODESETS_BASE_NAME, 0, 0, 0, 0, 0, 0) + +#define CodesetsDecodeB64A(__p0) \ + LP1(138, ULONG , CodesetsDecodeB64A, \ + struct TagItem *, __p0, a0, \ + , CODESETS_BASE_NAME, 0, 0, 0, 0, 0, 0) + +#define CodesetsIsValidUTF8(__p0) \ + LP1(150, BOOL , CodesetsIsValidUTF8, \ + STRPTR , __p0, a0, \ + , CODESETS_BASE_NAME, 0, 0, 0, 0, 0, 0) + +#define CodesetsStrLenA(__p0, __p1) \ + LP2(144, ULONG , CodesetsStrLenA, \ + STRPTR , __p0, a0, \ + struct TagItem *, __p1, a1, \ + , CODESETS_BASE_NAME, 0, 0, 0, 0, 0, 0) + +#define CodesetsConvertStrA(__p0) \ + LP1(162, STRPTR , CodesetsConvertStrA, \ + struct TagItem *, __p0, a0, \ + , CODESETS_BASE_NAME, 0, 0, 0, 0, 0, 0) + +#define CodesetsFindA(__p0, __p1) \ + LP2(102, struct codeset *, CodesetsFindA, \ + STRPTR , __p0, a0, \ + struct TagItem *, __p1, a1, \ + , CODESETS_BASE_NAME, 0, 0, 0, 0, 0, 0) + +#define CodesetsFreeA(__p0, __p1) \ + LP2NR(90, CodesetsFreeA, \ + APTR , __p0, a0, \ + struct TagItem *, __p1, a1, \ + , CODESETS_BASE_NAME, 0, 0, 0, 0, 0, 0) + +#define CodesetsUTF8ToStrA(__p0) \ + LP1(120, STRPTR , CodesetsUTF8ToStrA, \ + struct TagItem *, __p0, a0, \ + , CODESETS_BASE_NAME, 0, 0, 0, 0, 0, 0) + +#define CodesetsFreeVecPooledA(__p0, __p1, __p2) \ + LP3NR(156, CodesetsFreeVecPooledA, \ + APTR , __p0, a0, \ + APTR , __p1, a1, \ + struct TagItem *, __p2, a2, \ + , CODESETS_BASE_NAME, 0, 0, 0, 0, 0, 0) + +#define CodesetsUTF8Len(__p0) \ + LP1(114, ULONG , CodesetsUTF8Len, \ + const UTF8 *, __p0, a0, \ + , CODESETS_BASE_NAME, 0, 0, 0, 0, 0, 0) + +#define CodesetsListAddA(__p0, __p1) \ + LP2(180, BOOL , CodesetsListAddA, \ + struct codesetList *, __p0, a0, \ + struct TagItem *, __p1, a1, \ + , CODESETS_BASE_NAME, 0, 0, 0, 0, 0, 0) + +#define CodesetsConvertUTF32toUTF16(__p0, __p1, __p2, __p3, __p4) \ + LP5(36, ULONG , CodesetsConvertUTF32toUTF16, \ + const UTF32 **, __p0, a0, \ + const UTF32 *, __p1, a1, \ + UTF16 **, __p2, a2, \ + UTF16 *, __p3, a3, \ + ULONG , __p4, d0, \ + , CODESETS_BASE_NAME, 0, 0, 0, 0, 0, 0) + +#define CodesetsConvertUTF16toUTF32(__p0, __p1, __p2, __p3, __p4) \ + LP5(42, ULONG , CodesetsConvertUTF16toUTF32, \ + const UTF16 **, __p0, a0, \ + const UTF16 *, __p1, a1, \ + UTF32 **, __p2, a2, \ + UTF32 *, __p3, a3, \ + ULONG , __p4, d0, \ + , CODESETS_BASE_NAME, 0, 0, 0, 0, 0, 0) + +#define CodesetsListDeleteA(__p0) \ + LP1(174, BOOL , CodesetsListDeleteA, \ + struct TagItem *, __p0, a0, \ + , CODESETS_BASE_NAME, 0, 0, 0, 0, 0, 0) + +#define CodesetsSetDefaultA(__p0, __p1) \ + LP2(84, struct codeset *, CodesetsSetDefaultA, \ + STRPTR , __p0, a0, \ + struct TagItem *, __p1, a1, \ + , CODESETS_BASE_NAME, 0, 0, 0, 0, 0, 0) + +#define CodesetsEncodeB64A(__p0) \ + LP1(132, ULONG , CodesetsEncodeB64A, \ + struct TagItem *, __p0, a0, \ + , CODESETS_BASE_NAME, 0, 0, 0, 0, 0, 0) + +#define CodesetsUTF8CreateA(__p0) \ + LP1(126, UTF8 *, CodesetsUTF8CreateA, \ + struct TagItem *, __p0, a0, \ + , CODESETS_BASE_NAME, 0, 0, 0, 0, 0, 0) + +#define CodesetsConvertUTF32toUTF8(__p0, __p1, __p2, __p3, __p4) \ + LP5(72, ULONG , CodesetsConvertUTF32toUTF8, \ + const UTF32 **, __p0, a0, \ + const UTF32 *, __p1, a1, \ + UTF8 **, __p2, a2, \ + UTF8 *, __p3, a3, \ + ULONG , __p4, d0, \ + , CODESETS_BASE_NAME, 0, 0, 0, 0, 0, 0) + +#define CodesetsConvertUTF8toUTF32(__p0, __p1, __p2, __p3, __p4) \ + LP5(78, ULONG , CodesetsConvertUTF8toUTF32, \ + const UTF8 **, __p0, a0, \ + const UTF8 *, __p1, a1, \ + UTF32 **, __p2, a2, \ + UTF32 *, __p3, a3, \ + ULONG , __p4, d0, \ + , CODESETS_BASE_NAME, 0, 0, 0, 0, 0, 0) + +#define CodesetsConvertUTF16toUTF8(__p0, __p1, __p2, __p3, __p4) \ + LP5(48, ULONG , CodesetsConvertUTF16toUTF8, \ + const UTF16 **, __p0, a0, \ + const UTF16 *, __p1, a1, \ + UTF8 **, __p2, a2, \ + UTF8 *, __p3, a3, \ + ULONG , __p4, d0, \ + , CODESETS_BASE_NAME, 0, 0, 0, 0, 0, 0) + +#define CodesetsIsLegalUTF8Sequence(__p0, __p1) \ + LP2(60, BOOL , CodesetsIsLegalUTF8Sequence, \ + const UTF8 *, __p0, a0, \ + const UTF8 *, __p1, a1, \ + , CODESETS_BASE_NAME, 0, 0, 0, 0, 0, 0) + +#define CodesetsConvertUTF8toUTF16(__p0, __p1, __p2, __p3, __p4) \ + LP5(66, ULONG , CodesetsConvertUTF8toUTF16, \ + const UTF8 **, __p0, a0, \ + const UTF8 *, __p1, a1, \ + UTF16 **, __p2, a2, \ + UTF16 *, __p3, a3, \ + ULONG , __p4, d0, \ + , CODESETS_BASE_NAME, 0, 0, 0, 0, 0, 0) + +#if defined(USE_INLINE_STDARG) && !defined(__STRICT_ANSI__) + +#include + +#define CodesetsSupported(...) \ + ({ULONG _tags[] = { __VA_ARGS__ }; \ + CodesetsSupportedA((struct TagItem *)_tags);}) + +#define CodesetsListRemove(...) \ + ({ULONG _tags[] = { __VA_ARGS__ }; \ + CodesetsListRemoveA((struct TagItem *)_tags);}) + +#define CodesetsListDelete(...) \ + ({ULONG _tags[] = { __VA_ARGS__ }; \ + CodesetsListDeleteA((struct TagItem *)_tags);}) + +#define CodesetsDecodeB64(...) \ + ({ULONG _tags[] = { __VA_ARGS__ }; \ + CodesetsDecodeB64A((struct TagItem *)_tags);}) + +#define CodesetsListCreate(...) \ + ({ULONG _tags[] = { __VA_ARGS__ }; \ + CodesetsListCreateA((struct TagItem *)_tags);}) + +#define CodesetsSetDefault(__p0, ...) \ + ({ULONG _tags[] = { __VA_ARGS__ }; \ + CodesetsSetDefaultA(__p0, (struct TagItem *)_tags);}) + +#define CodesetsStrLen(__p0, ...) \ + ({ULONG _tags[] = { __VA_ARGS__ }; \ + CodesetsStrLenA(__p0, (struct TagItem *)_tags);}) + +#define CodesetsConvertStr(...) \ + ({ULONG _tags[] = { __VA_ARGS__ }; \ + CodesetsConvertStrA((struct TagItem *)_tags);}) + +#define CodesetsUTF8Create(...) \ + ({ULONG _tags[] = { __VA_ARGS__ }; \ + CodesetsUTF8CreateA((struct TagItem *)_tags);}) + +#define CodesetsFree(__p0, ...) \ + ({ULONG _tags[] = { __VA_ARGS__ }; \ + CodesetsFreeA(__p0, (struct TagItem *)_tags);}) + +#define CodesetsFindBest(...) \ + ({ULONG _tags[] = { __VA_ARGS__ }; \ + CodesetsFindBestA((struct TagItem *)_tags);}) + +#define CodesetsEncodeB64(...) \ + ({ULONG _tags[] = { __VA_ARGS__ }; \ + CodesetsEncodeB64A((struct TagItem *)_tags);}) + +#define CodesetsFind(__p0, ...) \ + ({ULONG _tags[] = { __VA_ARGS__ }; \ + CodesetsFindA(__p0, (struct TagItem *)_tags);}) + +#define CodesetsFreeVecPooled(__p0, __p1, ...) \ + ({ULONG _tags[] = { __VA_ARGS__ }; \ + CodesetsFreeVecPooledA(__p0, __p1, (struct TagItem *)_tags);}) + +#define CodesetsUTF8ToStr(...) \ + ({ULONG _tags[] = { __VA_ARGS__ }; \ + CodesetsUTF8ToStrA((struct TagItem *)_tags);}) + +#define CodesetsListAdd(__p0, ...) \ + ({ULONG _tags[] = { __VA_ARGS__ }; \ + CodesetsListAddA(__p0, (struct TagItem *)_tags);}) + +#endif + +#endif /* !_PPCINLINE_CODESETS_H */ diff --git a/workbench/libs/codesetslib/developer/include/pragmas/codesets_pragmas.h b/workbench/libs/codesetslib/developer/include/pragmas/codesets_pragmas.h new file mode 100755 index 000000000..43d65bac0 --- /dev/null +++ b/workbench/libs/codesetslib/developer/include/pragmas/codesets_pragmas.h @@ -0,0 +1,123 @@ +#ifndef PRAGMAS_CODESETS_PRAGMAS_H +#define PRAGMAS_CODESETS_PRAGMAS_H + +/*************************************************************************** + + codesets.library - Amiga shared library for handling different codesets + Copyright (C) 2001-2005 by Alfonso [alfie] Ranieri . + Copyright (C) 2005-2007 by codesets.library Open Source Team + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + codesets.library project: http://sourceforge.net/projects/codesetslib/ + + $Id$ + +***************************************************************************/ + +#ifndef CLIB_CODESETS_PROTOS_H +#include +#endif + +#if defined(AZTEC_C) || defined(__MAXON__) || defined(__STORM__) +#pragma amicall(CodesetsBase,0x024,CodesetsConvertUTF32toUTF16(a0,a1,a2,a3,d0)) +#pragma amicall(CodesetsBase,0x02a,CodesetsConvertUTF16toUTF32(a0,a1,a2,a3,d0)) +#pragma amicall(CodesetsBase,0x030,CodesetsConvertUTF16toUTF8(a0,a1,a2,a3,d0)) +#pragma amicall(CodesetsBase,0x036,CodesetsIsLegalUTF8(a0,d0)) +#pragma amicall(CodesetsBase,0x03c,CodesetsIsLegalUTF8Sequence(a0,a1)) +#pragma amicall(CodesetsBase,0x042,CodesetsConvertUTF8toUTF16(a0,a1,a2,a3,d0)) +#pragma amicall(CodesetsBase,0x048,CodesetsConvertUTF32toUTF8(a0,a1,a2,a3,d0)) +#pragma amicall(CodesetsBase,0x04e,CodesetsConvertUTF8toUTF32(a0,a1,a2,a3,d0)) +#pragma amicall(CodesetsBase,0x054,CodesetsSetDefaultA(a0,a1)) +#pragma amicall(CodesetsBase,0x05a,CodesetsFreeA(a0,a1)) +#pragma amicall(CodesetsBase,0x060,CodesetsSupportedA(a0)) +#pragma amicall(CodesetsBase,0x066,CodesetsFindA(a0,a1)) +#pragma amicall(CodesetsBase,0x06c,CodesetsFindBestA(a0)) +#pragma amicall(CodesetsBase,0x072,CodesetsUTF8Len(a0)) +#pragma amicall(CodesetsBase,0x078,CodesetsUTF8ToStrA(a0)) +#pragma amicall(CodesetsBase,0x07e,CodesetsUTF8CreateA(a0)) +#pragma amicall(CodesetsBase,0x084,CodesetsEncodeB64A(a0)) +#pragma amicall(CodesetsBase,0x08a,CodesetsDecodeB64A(a0)) +#pragma amicall(CodesetsBase,0x090,CodesetsStrLenA(a0,a1)) +#pragma amicall(CodesetsBase,0x096,CodesetsIsValidUTF8(a0)) +#pragma amicall(CodesetsBase,0x09c,CodesetsFreeVecPooledA(a0,a1,a2)) +#pragma amicall(CodesetsBase,0x0a2,CodesetsConvertStrA(a0)) +#pragma amicall(CodesetsBase,0x0a8,CodesetsListCreateA(a0)) +#pragma amicall(CodesetsBase,0x0ae,CodesetsListDeleteA(a0)) +#pragma amicall(CodesetsBase,0x0b4,CodesetsListAddA(a0,a1)) +#pragma amicall(CodesetsBase,0x0ba,CodesetsListRemoveA(a0)) +#endif +#if defined(_DCC) || defined(__SASC) +#pragma libcall CodesetsBase CodesetsConvertUTF32toUTF16 024 0ba9805 +#pragma libcall CodesetsBase CodesetsConvertUTF16toUTF32 02a 0ba9805 +#pragma libcall CodesetsBase CodesetsConvertUTF16toUTF8 030 0ba9805 +#pragma libcall CodesetsBase CodesetsIsLegalUTF8 036 0802 +#pragma libcall CodesetsBase CodesetsIsLegalUTF8Sequence 03c 9802 +#pragma libcall CodesetsBase CodesetsConvertUTF8toUTF16 042 0ba9805 +#pragma libcall CodesetsBase CodesetsConvertUTF32toUTF8 048 0ba9805 +#pragma libcall CodesetsBase CodesetsConvertUTF8toUTF32 04e 0ba9805 +#pragma libcall CodesetsBase CodesetsSetDefaultA 054 9802 +#pragma libcall CodesetsBase CodesetsFreeA 05a 9802 +#pragma libcall CodesetsBase CodesetsSupportedA 060 801 +#pragma libcall CodesetsBase CodesetsFindA 066 9802 +#pragma libcall CodesetsBase CodesetsFindBestA 06c 801 +#pragma libcall CodesetsBase CodesetsUTF8Len 072 801 +#pragma libcall CodesetsBase CodesetsUTF8ToStrA 078 801 +#pragma libcall CodesetsBase CodesetsUTF8CreateA 07e 801 +#pragma libcall CodesetsBase CodesetsEncodeB64A 084 801 +#pragma libcall CodesetsBase CodesetsDecodeB64A 08a 801 +#pragma libcall CodesetsBase CodesetsStrLenA 090 9802 +#pragma libcall CodesetsBase CodesetsIsValidUTF8 096 801 +#pragma libcall CodesetsBase CodesetsFreeVecPooledA 09c a9803 +#pragma libcall CodesetsBase CodesetsConvertStrA 0a2 801 +#pragma libcall CodesetsBase CodesetsListCreateA 0a8 801 +#pragma libcall CodesetsBase CodesetsListDeleteA 0ae 801 +#pragma libcall CodesetsBase CodesetsListAddA 0b4 9802 +#pragma libcall CodesetsBase CodesetsListRemoveA 0ba 801 +#endif +#ifdef __STORM__ +#pragma tagcall(CodesetsBase,0x054,CodesetsSetDefault(a0,a1)) +#pragma tagcall(CodesetsBase,0x05a,CodesetsFree(a0,a1)) +#pragma tagcall(CodesetsBase,0x060,CodesetsSupported(a0)) +#pragma tagcall(CodesetsBase,0x066,CodesetsFind(a0,a1)) +#pragma tagcall(CodesetsBase,0x06c,CodesetsFindBest(a0)) +#pragma tagcall(CodesetsBase,0x078,CodesetsUTF8ToStr(a0)) +#pragma tagcall(CodesetsBase,0x07e,CodesetsUTF8Create(a0)) +#pragma tagcall(CodesetsBase,0x084,CodesetsEncodeB64(a0)) +#pragma tagcall(CodesetsBase,0x08a,CodesetsDecodeB64(a0)) +#pragma tagcall(CodesetsBase,0x090,CodesetsStrLen(a0,a1)) +#pragma tagcall(CodesetsBase,0x09c,CodesetsFreeVecPooled(a0,a1,a2)) +#pragma tagcall(CodesetsBase,0x0a2,CodesetsConvertStr(a0)) +#pragma tagcall(CodesetsBase,0x0a8,CodesetsListCreate(a0)) +#pragma tagcall(CodesetsBase,0x0ae,CodesetsListDelete(a0)) +#pragma tagcall(CodesetsBase,0x0b4,CodesetsListAdd(a0,a1)) +#pragma tagcall(CodesetsBase,0x0ba,CodesetsListRemove(a0)) +#endif +#ifdef __SASC_60 +#pragma tagcall CodesetsBase CodesetsSetDefault 054 9802 +#pragma tagcall CodesetsBase CodesetsFree 05a 9802 +#pragma tagcall CodesetsBase CodesetsSupported 060 801 +#pragma tagcall CodesetsBase CodesetsFind 066 9802 +#pragma tagcall CodesetsBase CodesetsFindBest 06c 801 +#pragma tagcall CodesetsBase CodesetsUTF8ToStr 078 801 +#pragma tagcall CodesetsBase CodesetsUTF8Create 07e 801 +#pragma tagcall CodesetsBase CodesetsEncodeB64 084 801 +#pragma tagcall CodesetsBase CodesetsDecodeB64 08a 801 +#pragma tagcall CodesetsBase CodesetsStrLen 090 9802 +#pragma tagcall CodesetsBase CodesetsFreeVecPooled 09c a9803 +#pragma tagcall CodesetsBase CodesetsConvertStr 0a2 801 +#pragma tagcall CodesetsBase CodesetsListCreate 0a8 801 +#pragma tagcall CodesetsBase CodesetsListDelete 0ae 801 +#pragma tagcall CodesetsBase CodesetsListAdd 0b4 9802 +#pragma tagcall CodesetsBase CodesetsListRemove 0ba 801 +#endif + +#endif /* PRAGMAS_CODESETS_PRAGMAS_H */ diff --git a/workbench/libs/codesetslib/developer/include/proto/codesets.h b/workbench/libs/codesetslib/developer/include/proto/codesets.h new file mode 100755 index 000000000..88ebad73f --- /dev/null +++ b/workbench/libs/codesetslib/developer/include/proto/codesets.h @@ -0,0 +1,74 @@ +#ifndef PROTO_CODESETS_H +#define PROTO_CODESETS_H + +/*************************************************************************** + + codesets.library - Amiga shared library for handling different codesets + Copyright (C) 2001-2005 by Alfonso [alfie] Ranieri . + Copyright (C) 2005-2007 by codesets.library Open Source Team + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + codesets.library project: http://sourceforge.net/projects/codesetslib/ + + $Id$ + +***************************************************************************/ + +#ifndef LIBRARIES_CODESETS_H +#include +#endif + +/****************************************************************************/ + +#ifndef __NOLIBBASE__ + #ifndef __USE_BASETYPE__ + extern struct Library * CodesetsBase; + #else + extern struct Library * CodesetsBase; + #endif /* __USE_BASETYPE__ */ +#endif /* __NOLIBBASE__ */ + +/****************************************************************************/ + +#ifdef __amigaos4__ + #include + #ifdef __USE_INLINE__ + #include + #endif /* __USE_INLINE__ */ + #ifndef CLIB_CODESETS_PROTOS_H + #define CLIB_CODESETS_PROTOS_H 1 + #endif /* CLIB_CODESETS_PROTOS_H */ + #ifndef __NOGLOBALIFACE__ + extern struct CodesetsIFace *ICodesets; + #endif /* __NOGLOBALIFACE__ */ +#else /* __amigaos4__ */ + #ifndef CLIB_CODESETS_PROTOS_H + #include + #endif /* CLIB_CODESETS_PROTOS_H */ + #if defined(__GNUC__) + #ifndef __PPC__ + #include + #else + #include + #endif /* __PPC__ */ + #elif defined(__VBCC__) + #ifndef __PPC__ + #include + #endif /* __PPC__ */ + #else + #include + #endif /* __GNUC__ */ +#endif /* __amigaos4__ */ + +/****************************************************************************/ + +#endif /* PROTO_CODESETS_H */ diff --git a/workbench/libs/codesetslib/developer/sfd/codesets_lib.sfd b/workbench/libs/codesetslib/developer/sfd/codesets_lib.sfd new file mode 100644 index 000000000..7a713239c --- /dev/null +++ b/workbench/libs/codesetslib/developer/sfd/codesets_lib.sfd @@ -0,0 +1,73 @@ +==id $Id: codesets_lib.sfd 58 2006-09-20 20:58:28Z damato $ +==base _CodesetsBase +==basetype struct Library * +==libname codesets.library +==bias 30 +==public +==include +==reserve 1 +ULONG CodesetsConvertUTF32toUTF16(const UTF32 **sourceStart, const UTF32 *sourceEnd, UTF16 **targetStart, + UTF16 *targetEnd, ULONG flags) (a0,a1,a2,a3,d0) +ULONG CodesetsConvertUTF16toUTF32(const UTF16 **sourceStart, const UTF16 *sourceEnd, UTF32 **targetStart, + UTF32 *targetEnd, ULONG flags) (a0,a1,a2,a3,d0) +ULONG CodesetsConvertUTF16toUTF8(const UTF16 **sourceStart, const UTF16 *sourceEnd, UTF8 **targetStart, + UTF8 *targetEnd, ULONG flags) (a0,a1,a2,a3,d0) +BOOL CodesetsIsLegalUTF8(const UTF8 *source, ULONG length) (a0,d0) +BOOL CodesetsIsLegalUTF8Sequence(const UTF8 *source, const UTF8 *sourceEnd) (a0,a1) +ULONG CodesetsConvertUTF8toUTF16(const UTF8 **sourceStart, const UTF8 *sourceEnd, UTF16 **targetStart, + UTF16 *targetEnd, ULONG flags) (a0,a1,a2,a3,d0) +ULONG CodesetsConvertUTF32toUTF8(const UTF32 **sourceStart, const UTF32 *sourceEnd, UTF8 **targetStart, + UTF8 *targetEnd, ULONG flags) (a0,a1,a2,a3,d0) +ULONG CodesetsConvertUTF8toUTF32(const UTF8 **sourceStart, const UTF8 *sourceEnd, UTF32 **targetStart, + UTF32 *targetEnd, ULONG flags) (a0,a1,a2,a3,d0) +struct codeset * CodesetsSetDefaultA(STRPTR name, struct TagItem * attrs) (a0,a1) +==varargs +struct codeset * CodesetsSetDefault(STRPTR name, Tag attrs, ...) (a0,a1) +void CodesetsFreeA(APTR obj, struct TagItem * attrs) (a0,a1) +==varargs +void CodesetsFree(APTR obj, Tag attrs, ...) (a0,a1) +STRPTR * CodesetsSupportedA(struct TagItem * attrs) (a0) +==varargs +STRPTR * CodesetsSupported(Tag attrs, ...) (a0) +struct codeset * CodesetsFindA(STRPTR name, struct TagItem * attrs) (a0,a1) +==varargs +struct codeset * CodesetsFind(STRPTR name, Tag attrs, ...) (a0,a1) +struct codeset * CodesetsFindBestA(struct TagItem * attrs) (a0) +==varargs +struct codeset * CodesetsFindBest(Tag attrs, ...) (a0) +ULONG CodesetsUTF8Len(const UTF8 *str) (a0) +STRPTR CodesetsUTF8ToStrA(struct TagItem * attrs) (a0) +==varargs +STRPTR CodesetsUTF8ToStr(Tag attrs, ...) (a0) +UTF8 * CodesetsUTF8CreateA(struct TagItem * attrs) (a0) +==varargs +UTF8 * CodesetsUTF8Create(Tag attrs, ...) (a0) +ULONG CodesetsEncodeB64A(struct TagItem * attrs) (a0) +==varargs +ULONG CodesetsEncodeB64(Tag attrs, ...) (a0) +ULONG CodesetsDecodeB64A(struct TagItem * attrs) (a0) +==varargs +ULONG CodesetsDecodeB64(Tag attrs, ...) (a0) +ULONG CodesetsStrLenA(STRPTR str, struct TagItem * attrs) (a0,a1) +==varargs +ULONG CodesetsStrLen(STRPTR str, Tag attrs, ...) (a0,a1) +BOOL CodesetsIsValidUTF8(STRPTR str) (a0) +void CodesetsFreeVecPooledA(APTR pool, APTR mem, struct TagItem *attrs) (a0,a1,a2) +==varargs +void CodesetsFreeVecPooled(APTR pool, APTR mem, Tag attrs, ...) (a0,a1,a2) +STRPTR CodesetsConvertStrA(struct TagItem * attrs) (a0) +==varargs +STRPTR CodesetsConvertStr(Tag attrs, ...) (a0) +struct codesetList * CodesetsListCreateA(struct TagItem *attrs) (a0) +==varargs +struct codesetList * CodesetsListCreate(Tag attrs, ...) (a0) +BOOL CodesetsListDeleteA(struct TagItem *attrs) (a0) +==varargs +BOOL CodesetsListDelete(Tag tag1, ...) (a0) +BOOL CodesetsListAddA(struct codesetList *codesetsList, struct TagItem *attrs) (a0,a1) +==varargs +BOOL CodesetsListAdd(struct codesetList *codesetsList, Tag attrs, ...) (a0,a1) +BOOL CodesetsListRemoveA(struct TagItem *attrs) (a0) +==varargs +BOOL CodesetsListRemove(Tag tag1, ...) (a0) +==end diff --git a/workbench/libs/codesetslib/developer/xml/codesets.xml b/workbench/libs/codesetslib/developer/xml/codesets.xml new file mode 100644 index 000000000..36bab8d9f --- /dev/null +++ b/workbench/libs/codesetslib/developer/xml/codesets.xml @@ -0,0 +1,179 @@ + + + + + libraries/codesets.h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/workbench/libs/codesetslib/include/SDI_compiler.h b/workbench/libs/codesetslib/include/SDI_compiler.h new file mode 100644 index 000000000..1fa3c4127 --- /dev/null +++ b/workbench/libs/codesetslib/include/SDI_compiler.h @@ -0,0 +1,218 @@ +#ifndef SDI_COMPILER_H +#define SDI_COMPILER_H + +/* Includeheader + + Name: SDI_compiler.h + Versionstring: $VER: SDI_compiler.h 1.24 (06.05.2006) + Author: Dirk Stöcker & Jens Langner + Distribution: PD + Project page: http://www.sf.net/projects/sditools/ + Description: defines to hide compiler stuff + + 1.1 25.06.98 : created from data made by Gunter Nikl + 1.2 17.11.99 : added VBCC + 1.3 29.02.00 : fixed VBCC REG define + 1.4 30.03.00 : fixed SAVEDS for VBCC + 1.5 29.07.00 : added #undef statements (needed e.g. for AmiTCP together + with vbcc) + 1.6 19.05.01 : added STACKEXT and Dice stuff + 1.7 16.06.01 : added MorphOS specials and VARARGS68K + 1.8 21.09.02 : added MorphOS register stuff + 1.9 26.09.02 : added OFFSET macro. Thanks Frank Wille for suggestion + 1.10 18.10.02 : reverted to old MorphOS-method for GCC + 1.11 09.11.02 : added REGARGS define to MorphOS section + 1.12 18.01.04 : some adaptions for AmigaOS4 compatibility + 1.13 17.02.04 : changed ASM macros to be a simple define and added + INTERRUPT, CHIP and FAR + 1.14 02.03.04 : added UNUSED which can be used to specify a function parameter + or variable as "unused" which will not cause any compiler warning. + 1.15 02.03.04 : added special INLINE define for gcc > 3.0 version + 1.17 07.03.04 : changed INLINE definition of gcc <= 2.95.3 to be static aswell. + 1.18 21.06.04 : added USED and USED_VAR attribute to allow placing a + __attribute__((used)) to a function and a variable, taking care of + different compiler versions. + 1.19 04.07.04 : register specification for variables is not supported on MorphOS, + so we modified the REG() macro accordingly. + 1.20 28.02.05 : correct INLINE for VBCC. + 1.21 28.02.05 : cleanup __GCC__ case. + 1.22 16.05.05 : changed the vbcc/REG() macro. + added missing vbcc/VARARGS68K define. + moved morphos SDI_EmulLib Stuff into compilers.h. I know it's not + compiler specific, (Guido Mersmann) + 1.23 30.04.06 : modified to get it compatible to AROS. (Guido Mersmann) + 1.24 06.05.06 : __linearvarargs is only valid for vbcc and PPC, so I moved VARARGS68K + to prevent problems with 68K and i86 targets. (Guido Mersmann) +*/ + +/* +** This is PD (Public Domain). This means you can do with it whatever you want +** without any restrictions. I only ask you to tell me improvements, so I may +** fix the main line of this files as well. +** +** To keep confusion level low: When changing this file, please note it in +** above history list and indicate that the change was not made by myself +** (e.g. add your name or nick name). +** +** Find the latest version of this file at: +** http://cvs.sourceforge.net/viewcvs.py/sditools/sditools/headers/ +** +** Jens Langner and +** Dirk Stöcker +*/ + +/* Some SDI internal header */ + +#undef ASM +#undef REG +#undef LREG +#undef CONST +#undef SAVEDS +#undef INLINE +#undef REGARGS +#undef STDARGS +#undef OFFSET +#undef INTERRUPT +#undef CHIP +#undef FAR +#undef UNUSED +#undef USED +#undef USED_VAR + +/* first "exceptions" */ + +#if defined(__MAXON__) + #define STDARGS + #define STACKEXT + #define REGARGS + #define SAVEDS + #define INLINE inline +/*************************************************************************/ +#elif defined(__VBCC__) + #define STDARGS + #define STACKEXT + #define REGARGS + #if (__STDC__ == 1L) && (__STDC_VERSION__ >= 199901L) + #define INLINE inline + #else + #define INLINE static + #endif + #define OFFSET(p,m) __offsetof(struct p,m) + + #if defined(__PPC__) + #define VARARGS68K __linearvarargs + #define REG(reg,arg) arg + #else + #define REG(reg,arg) __reg(#reg) arg + #endif +/*************************************************************************/ +#elif defined(__STORM__) + #define STDARGS + #define STACKEXT + #define REGARGS + #define INLINE inline +/*************************************************************************/ +#elif defined(__SASC) + #define ASM __asm +/*************************************************************************/ +#elif defined(__GNUC__) + #define UNUSED __attribute__((unused)) /* for functions, variables and types */ + #define USED __attribute__((used)) /* for functions only! */ + #if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 0) + #define USED_VAR USED /* for variables only! */ + #define INLINE static __inline __attribute__((always_inline)) + #endif + /* we have to distinguish between AmigaOS4 and MorphOS */ + #if defined(__PPC__) + #define REG(reg,arg) arg + #define SAVEDS + #define STDARGS + #define REGARGS + #define STACKEXT + #if defined(__MORPHOS__) + #define VARARGS68K __attribute__((varargs68k)) + #endif + #define INTERRUPT + #define CHIP + #else + #define REG(reg,arg) arg __asm(#reg) + #define LREG(reg,arg) register REG(reg,arg) + #endif + #define FAR +#elif defined(_DCC) + #define REG(reg,arg) __##reg arg + #define STACKEXT __stkcheck + #define STDARGS __stkargs + #define INLINE static +#endif + +/* then "common" ones */ + +#if !defined(ASM) + #define ASM +#endif +#if !defined(REG) + #define REG(reg,arg) register __##reg arg +#endif +#if !defined(LREG) + #define LREG(reg,arg) register arg +#endif +#if !defined(CONST) + #define CONST const +#endif +#if !defined(SAVEDS) + #define SAVEDS __saveds +#endif +#if !defined(INLINE) + #define INLINE static __inline +#endif +#if !defined(REGARGS) + #define REGARGS __regargs +#endif +#if !defined(STDARGS) + #define STDARGS __stdargs +#endif +#if !defined(STACKEXT) + #define STACKEXT __stackext +#endif +#if !defined(VARARGS68K) + #define VARARGS68K +#endif +#if !defined(OFFSET) + #define OFFSET(structName, structEntry) \ + ((char *)(&(((struct structName *)0)->structEntry))-(char *)0) +#endif +#if !defined(INTERRUPT) + #define INTERRUPT __interrupt +#endif +#if !defined(CHIP) + #define CHIP __chip +#endif +#if !defined(FAR) + #define FAR __far +#endif +#if !defined(UNUSED) + #define UNUSED +#endif +#if !defined(USED) + #define USED +#endif +#if !defined(USED_VAR) + #define USED_VAR +#endif + +/*************************************************************************/ +#ifdef __AROS__ + + #undef REG + #define REG(reg, arg) arg + + #undef SAVEDS + #define SAVEDS + + #undef ASM + #define ASM + +#endif /* __AROS__ */ + +#endif /* SDI_COMPILER_H */ diff --git a/workbench/libs/codesetslib/include/SDI_hook.h b/workbench/libs/codesetslib/include/SDI_hook.h new file mode 100644 index 000000000..9004b310b --- /dev/null +++ b/workbench/libs/codesetslib/include/SDI_hook.h @@ -0,0 +1,192 @@ +#ifndef SDI_HOOK_H +#define SDI_HOOK_H + +/* Includeheader + + Name: SDI_hook.h + Versionstring: $VER: SDI_hook.h 1.15 (30.04.2006) + Author: SDI & Jens Langner + Distribution: PD + Project page: http://www.sf.net/projects/sditools/ + Description: defines to hide compiler specific hook stuff + + 1.0 21.06.02 : based on the work made for freeciv and YAM with + additional texts partly taken from YAM_hook.h changes made + by Jens Langner, largely reworked the mechanism + 1.1 07.10.02 : added HOOKPROTONP and HOOKPROTONONP requested by Jens + 1.2 18.10.02 : reverted to old MorphOS-method for GCC + 1.3 08.02.04 : modified to get it compatible to AmigaOS4 + 1.4 17.02.04 : modified to get compatible to latest SDI_compiler.h changes + 1.5 02.03.04 : added UNUSED define to OS4 hook specification so that the + compiler can ignore some warnings. + 1.6 02.03.04 : added (APTR) casts to MorphOS prototype definition to + reduce compiler warnings. + 1.7 04.07.04 : removed static from all DISPATCHERPROTO definitions as there + may be dispatchers that are of course non static. + 1.8 07.04.05 : added MakeHookWithData (Sebastian Bauer) + 1.9 08.04.05 : changed MorphOS hooks to use HookEntry (Ilkka Lehtoranta) + 1.10 16.05.05 : simplified and fixed for vbcc/MorphOS (Frank Wille) + 1.11 17.05.05 : changed cast in DISPATCHERPROTO from (void(*)()) to APTR + cause SDI version of the EmulLibEntry uses APTR for easy + usage. + Added #ifndef SDI_TRAP_LIB to avoid double defines when + combining with SDI_interrupt.h or SDI_misc.h (Guido + Mersmann) + 1.12 18.05.05 : DISPATCHERPROTO wasn't working, because of the missing REG_Ax + definitions. Added include (Guido Mersmann) + 1.13 11.12.05 : fixed a minor typo in the PPC HOOKPROTONP macro. + (Jens Langner) + 1.14 20.04.06 : unified static of MorphOs with non-MorphOS vesion + 1.15 30.04.06 : modified to get it compatible to AROS. (Guido Mersmann) +*/ + +/* +** This is PD (Public Domain). This means you can do with it whatever you want +** without any restrictions. I only ask you to tell me improvements, so I may +** fix the main line of this files as well. +** +** To keep confusion level low: When changing this file, please note it in +** above history list and indicate that the change was not made by myself +** (e.g. add your name or nick name). +** +** Find the latest version of this file at: +** http://cvs.sourceforge.net/viewcvs.py/sditools/sditools/headers/ +** +** Jens Langner and +** Dirk Stöcker +*/ + +#include "SDI_compiler.h" + +/* +** Hook macros to handle the creation of Hooks/Dispatchers for different +** Operating System versions. +** Currently AmigaOS and MorphOS is supported. +** +** For more information about hooks see include file or +** the relevant descriptions in utility.library autodocs. +** +** Example: +** +** Creates a hook with the name "TestHook" that calls a corresponding +** function "TestFunc" that will be called with a pointer "text" +** (in register A1) and returns a long. +** +** HOOKPROTONHNO(TestFunc, LONG, STRPTR text) +** { +** Printf(text); +** return 0; +** } +** MakeHook(TestHook, TestFunc); +** +** Every function that is created with HOOKPROTO* must have a MakeHook() or +** MakeStaticHook() to create the corresponding hook. Best is to call this +** directly after the hook function. This is required by the GCC macros. +** +** The naming convention for the Hook Prototype macros is as followed: +** +** HOOKPROTO[NH][NO][NP] +** ^^ ^^ ^^ +** NoHook | NoParameter +** NoObject +** +** So a plain HOOKPROTO() creates you a Hook function that requires +** 4 parameters, the "name" of the hookfunction, the "obj" in REG_A2, +** the "param" in REG_A1 and a "hook" in REG_A0. Usually you will always +** use NH, as the hook structure itself is nearly never required. +** +** The DISPATCHERPROTO macro is for MUI dispatcher functions. It gets the +** functionname as argument. To supply this function for use by MUI, use +** The ENTRY macro, which also gets the function name as argument. +*/ + +#if defined(__PPC__) || defined(__AROS__) + #define HOOKPROTO(name, ret, obj, param) static SAVEDS ret \ + name(struct Hook *hook, obj, param) + #define HOOKPROTONO(name, ret, param) static SAVEDS ret \ + name(struct Hook *hook, UNUSED APTR obj, param) + #define HOOKPROTONP(name, ret, obj) static SAVEDS ret \ + name(struct Hook *hook, obj, UNUSED APTR param) + #define HOOKPROTONONP(name, ret) static SAVEDS ret \ + name(struct Hook *hook, UNUSED APTR obj, UNUSED APTR param) + #define HOOKPROTONH(name, ret, obj, param) static SAVEDS ret \ + name(UNUSED struct Hook *hook, obj, param) + #define HOOKPROTONHNO(name, ret, param) static SAVEDS ret \ + name(UNUSED struct Hook *hook, UNUSED APTR obj, param) + #define HOOKPROTONHNP(name, ret, obj) static SAVEDS ret \ + name(UNUSED struct Hook *hook, obj, UNUSED APTR param) + #define HOOKPROTONHNONP(name, ret) static SAVEDS ret name(void) +#else + #define HOOKPROTO(name, ret, obj, param) static SAVEDS ASM ret \ + name(REG(a0, struct Hook *hook), REG(a2, obj), REG(a1, param)) + #define HOOKPROTONO(name, ret, param) static SAVEDS ASM ret \ + name(REG(a0, struct Hook *hook), REG(a1, param)) + #define HOOKPROTONP(name, ret, obj) static SAVEDS ASM ret \ + name(REG(a0, struct Hook *hook), REG(a2, obj)) + #define HOOKPROTONONP(name, ret) static SAVEDS ASM ret \ + name(REG(a0, struct Hook *hook)) + #define HOOKPROTONH(name, ret, obj, param) static SAVEDS ASM ret \ + name(REG(a2, obj), REG(a1, param)) + #define HOOKPROTONHNO(name, ret, param) static SAVEDS ASM ret \ + name(REG(a1, param)) + #define HOOKPROTONHNP(name, ret, obj) static SAVEDS ASM ret \ + name(REG(a2, obj)) + #define HOOKPROTONHNONP(name, ret) static SAVEDS ret name(void) +#endif + +#ifdef __MORPHOS__ + + #ifndef SDI_TRAP_LIB /* avoid defining this twice */ + #include + #include + + #define SDI_TRAP_LIB 0xFF00 /* SDI prefix to reduce conflicts */ + + struct SDI_EmulLibEntry + { + UWORD Trap; + UWORD pad; + APTR Func; + }; + #endif + + #define MakeHook(hookname, funcname) struct Hook hookname = {{NULL, NULL}, \ + (HOOKFUNC)HookEntry, (HOOKFUNC)funcname, NULL} + #define MakeHookWithData(hookname, funcname, data) struct Hook hookname = \ + {{NULL, NULL}, (HOOKFUNC)HookEntry, (HOOKFUNC)funcname, (APTR)data} + #define MakeStaticHook(hookname, funcname) static struct Hook hookname = \ + {{NULL, NULL}, (HOOKFUNC)HookEntry, (HOOKFUNC)funcname, NULL} + #define DISPATCHERPROTO(name) \ + struct IClass; \ + static ULONG name(struct IClass * cl, Object * obj, Msg msg); \ + static ULONG Trampoline_##name(void) {return name((struct IClass *) \ + REG_A0, (Object *) REG_A2, (Msg) REG_A1);} \ + const struct SDI_EmulLibEntry Gate_##name = {SDI_TRAP_LIB, 0, \ + (APTR) Trampoline_##name}; \ + static ULONG name(struct IClass * cl, Object * obj, Msg msg) + #define ENTRY(func) (APTR)&Gate_##func + +#else /* !__MORPHOS__ */ + #define MakeHook(hookname, funcname) struct Hook hookname = {{NULL, NULL}, \ + (HOOKFUNC)funcname, NULL, NULL} + #define MakeHookWithData(hookname, funcname, data) struct Hook hookname = \ + {{NULL, NULL}, (HOOKFUNC)funcname, NULL, (APTR)data} + #define MakeStaticHook(hookname, funcname) static struct Hook hookname = \ + {{NULL, NULL}, (HOOKFUNC)funcname, NULL, NULL} + #define ENTRY(func) (APTR)func + + #if defined(__AROS__) + #define DISPATCHERPROTO(name) IPTR \ + name( struct IClass * cl, Object * obj, Msg msg) + #else + #define DISPATCHERPROTO(name) SAVEDS ASM ULONG name(REG(a0, \ + struct IClass * cl), REG(a2, Object * obj), REG(a1, Msg msg)) + #endif + +#endif + +#define InitHook(hook, orighook, data) ((hook)->h_Entry = (orighook).h_Entry,\ + (hook)->h_SubEntry = (orighook).h_SubEntry,(hook)->h_Data = (APTR)(data)) + +#endif /* SDI_HOOK_H */ + diff --git a/workbench/libs/codesetslib/include/SDI_lib.h b/workbench/libs/codesetslib/include/SDI_lib.h new file mode 100644 index 000000000..99890da2e --- /dev/null +++ b/workbench/libs/codesetslib/include/SDI_lib.h @@ -0,0 +1,196 @@ +#ifndef SDI_LIB_H +#define SDI_LIB_H + +/* Includeheader + + Name: SDI_lib.h + Versionstring: $VER: SDI_lib.h 1.8 (28.02.2006) + Author: Jens Langner + Distribution: PD + Project page: http://www.sf.net/projects/sditools/ + Description: defines to hide OS specific library function definitions + + 1.0 09.05.04 : initial version which allows to hide OS specific shared + library function definition like it has been introduced with + the new interface based library system in AmigaOS4. + 1.1 13.05.04 : replaced the LIBENTRY() macro with some more sophisticated + LFUNC_ macros which allow to maintain varargs library functions + in a much easier manner. + 1.2 22.05.04 : removed the anyway not required SAVEDS and ASM statements + from the LIBFUNC macro for OS4. Also removed the LIBFUNC + statement in the 68k LIBPROTOVA() macro so that no registers + can be used in there (which should be the default). + 1.3 04.07.04 : added empty LIBFUNC define for MorphOS which was missing. + 1.4 05.10.04 : added missing LIBFUNC call to OS3/MOS interface + 1.5 19.05.05 : fixed some documentation glitches (Guido Mersmann) + 1.6 08.06.05 : swapped LIBFUNC and ret within the prototype, because + c standard says attributes first and vbcc want them like + this. (Guido Mersmann) + changed the documentation to explain that LIBFUNC must be + set first. (Guido Mersmann) + 1.7 11.12.05 : adapted all macros to be somewhat more compatible to also + OS3 and MorphOS. Now in the real use case (codesets.library) + it required a fundamental rework of the macros. (Jens Langner) + 1.8 28.02.06 : removed "##" in front of the OS3 __VARARGS__ usage as they + causing errors on GCC >= 3.x. + +*/ + +/* +** This is PD (Public Domain). This means you can do with it whatever you want +** without any restrictions. I only ask you to tell me improvements, so I may +** fix the main line of this files as well. +** +** To keep confusion level low: When changing this file, please note it in +** above history list and indicate that the change was not made by myself +** (e.g. add your name or nick name). +** +** Find the latest version of this file at: +** http://cvs.sourceforge.net/viewcvs.py/sditools/sditools/headers/ +** +** Jens Langner and +** Dirk Stöcker +*/ + +#include "SDI_compiler.h" + +/* +** Library function macros to handle the definition/usage for different +** Operating System versions. +** Currently special library function handling for AmigaOS version 4 is +** supported +** +** Example: +** +** Defines a library jump function "TestFunc" with a ULONG return value and +** which is called by the corresponding library vector of a shared library. +** +** LIBFUNC ULONG TestFunc(REG(d0, text)) +** { +** Printf(text); +** return 0; +** } +** +** Please note the use of the LIBFUNC macro which defines this function +** automatically as a function which is directly called from within a shared +** library. Since this macro contains compiler attributes it must be +** called first, even if some compiler allow attributes and result type +** mixed, other do not and we want to keep the stuff compiler independent. +** +** If you now require to have some OS/compiler independent prototype +** definition please use the following statement: +** +** LIBPROTO(TestFunc, ULONG, REG(d0, text)); +** +** This will ensure that you get a proper prototype for the same function +** where this macro will automatically take care that a libstub_* stub +** will also automatically defines as required if you are generating a +** OS4 shared library which should also be backward compatible to OS3. +** +** So if you then want to add this function to a library interface please +** use the LFUNC_* macros to generate your library function vector +** like this example one: +** +** #define libvector LFUNC_FAS(SomeFunc) \ +** LFUNC_FA_(TestFunc) \ +** LFUNC_VA_(VarargsFunc) +** +** This way you can then easily put the "libvector" define in your real +** library function vector of your shared library instead of having to +** specify each function with surrounded "#ifdef" defines. These macros +** will then also take automatically care that the varargs functions +** will only be specified on OS versions where these functions are now +** real functions (like with OS4) +** +** Such stub functions can then also be easily specified as followed +** (in analogy to the above example) +** +** LIBPROTO(TestFunc, ULONG, REG(d0, text)) +** { +** return TestFunc(text); +** } +** +** On AmigaOS4 using this mechanism for the definition of the library functions +** will automatically ensure that the "struct Interface *self" pointer is included +** and can be easily referenced as such in the function. +** +** By using this schema a developer might ensure full source code backward +** compatibility to AmigaOS3 without having to introduce dozens of #ifdef +** statements in his code. +*/ + +#ifdef LIBFUNC +#undef LIBFUNC +#endif + +#if defined(__amigaos4__) + #define LIBFUNC + #if !defined(__cplusplus) && \ + (__STDC_VERSION__ >= 199901L || __GNUC__ >= 3 || \ + (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)) + #define LIBPROTO(name, ret, ...) \ + LIBFUNC ret name(__VA_ARGS__); \ + LIBFUNC ret libstub_##name(struct Interface *self UNUSED, \ + ## __VA_ARGS__) + #define LIBPROTOVA(name, ret, ...) \ + LIBFUNC ret VARARGS68K \ + libstub_##name(struct Interface *self UNUSED, ## __VA_ARGS__) + #define LIBSTUB(name, ret, ...) \ + LIBFUNC ret name(__VA_ARGS__); \ + LIBFUNC ret libstub_##name(struct Interface *self UNUSED, \ + ## __VA_ARGS__) + #define LIBSTUBVA(name, ret, ...) \ + LIBFUNC ret VARARGS68K \ + libstub_##name(struct Interface *self UNUSED, ## __VA_ARGS__) + #endif + #define LFUNC_FAS(name) libstub_##name + #define LFUNC_VAS(name) libstub_##name + #define LFUNC_FA_(name) ,libstub_##name + #define LFUNC_VA_(name) ,libstub_##name + #define LFUNC(name) libstub_##name +#elif defined(__MORPHOS__) + #define LIBFUNC + #if !defined(__cplusplus) && \ + (__STDC_VERSION__ >= 199901L || __GNUC__ >= 3 || \ + (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)) + #define LIBPROTO(name, ret, ...) \ + LIBFUNC ret name(__VA_ARGS__); \ + LIBFUNC ret libstub_##name(void) + #define LIBPROTOVA(name, ret, ...) + #define LIBSTUB(name, ret, ...) \ + LIBFUNC ret name(__VA_ARGS__); \ + LIBFUNC ret libstub_##name(void) + #define LIBSTUBVA(name, ret, ...) \ + LIBFUNC UNUSED ret VARARGS68K libstub_##name(void) + #endif + #define LFUNC_FAS(name) libstub_##name + #define LFUNC_VAS(name) + #define LFUNC_FA_(name) ,libstub_##name + #define LFUNC_VA_(name) + #define LFUNC(name) libstub_##name +#else + #define LIBFUNC SAVEDS ASM + #if !defined(__cplusplus) && \ + (__STDC_VERSION__ >= 199901L || __GNUC__ >= 3 || \ + (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)) + #define LIBPROTO(name, ret, ...) \ + LIBFUNC ret name(__VA_ARGS__) + #define LIBPROTOVA(name, ret, ...) + #define LIBSTUB(name, ret, ...) \ + LIBFUNC ret name(__VA_ARGS__); \ + LIBFUNC ret libstub_##name(__VA_ARGS__) + #define LIBSTUBVA(name, ret, ...) \ + LIBFUNC UNUSED ret STDARGS libstub_##name(__VA_ARGS__) + #endif + #define LFUNC_FAS(name) name + #define LFUNC_VAS(name) + #define LFUNC_FA_(name) ,name + #define LFUNC_VA_(name) + #define LFUNC(name) name +#endif + +#if !defined(LIBPROTO) || !defined(LIBPROTOVA) + #error "OS or compiler is not yet supported by SDI_lib.h" +#endif + +#endif /* SDI_LIB_H */ diff --git a/workbench/libs/codesetslib/include/SDI_stdarg.h b/workbench/libs/codesetslib/include/SDI_stdarg.h new file mode 100644 index 000000000..a7243e6ce --- /dev/null +++ b/workbench/libs/codesetslib/include/SDI_stdarg.h @@ -0,0 +1,105 @@ +#ifndef SDI_STDARG_H +#define SDI_STDARG_H + +/* Includeheader + + Name: SDI_stdarg.h + Versionstring: $VER: SDI_stdarg.h 1.0 (05.07.2004) + Author: Jens Langner + Distribution: PD + Project page: http://www.sf.net/projects/sditools/ + Description: defines to hide OS specific variable arguments + function definitions + + 1.0 05.07.04 : initial version + +*/ + +/* +** This is PD (Public Domain). This means you can do with it whatever you want +** without any restrictions. I only ask you to tell me improvements, so I may +** fix the main line of this files as well. +** +** To keep confusion level low: When changing this file, please note it in +** above history list and indicate that the change was not made by myself +** (e.g. add your name or nick name). +** +** Find the latest version of this file at: +** http://cvs.sourceforge.net/viewcvs.py/sditools/sditools/headers/ +** +** Jens Langner and +** Dirk Stöcker +*/ + +#include "SDI_compiler.h" + +/* +** Variable arguments function macros to allow specification of the +** variable arguments typical functions like va_list/va_start/va_end in +** an operating system independent fashion. +** +** With help of the following macro definition a developer might define +** variable arguments functions for different types of operating +** system implementations without having to clutter the sources with +** multiple "#ifdef" defines just because all of these operating systems +** come with different varable arguments support functions. +** +** Example: +** +** Instead of using the standard va_list, va_start and va_end functions +** of , a developer might specify the following sprintf() +** function to make it automatically compatible with AmigaOS3, AmigaOS4 +** and also MorphOS. +** +** int VARARGS68K sprintf(char *buf, char *fmt, ...) +** { +** VA_LIST args; +** +** VA_START(args, fmt); +** RawDoFmt(fmt, VA_ARG(args, void *), NULL, buf); +** VA_END(args); +** +** return(strlen(buf)); +** } +** +** Please note the uppercase letters of the macros in contrast to the +** official varargs functions specified in . +** +** By using this schema a developer might ensure full source code backward +** compatibility to AmigaOS3 without having to introduce dozens of #ifdef +** statements in his code. +*/ + +#include + +#ifdef VA_LIST +#undef VA_LIST +#endif +#ifdef VA_START +#undef VA_START +#endif +#ifdef VA_ARG +#undef VA_ARG +#endif +#ifdef VA_END +#undef VA_END +#endif + +#if defined(__amigaos4__) + #define VA_LIST va_list + #define VA_START(va, start) va_startlinear((va), (start)) + #define VA_ARG(va, type) va_getlinearva((va), type) + #define VA_END(va) va_end((va)) +#elif defined(__MORPHOS__) + #define VA_LIST va_list + #define VA_START(va, start) va_start((va), (start)) + #define VA_ARG(va, type) (va)->overflow_arg_area + #define VA_END(va) va_end((va)) +#else + #define VA_LIST va_list + #define VA_START(va, start) va_start((va), (start)) + #define VA_ARG(va, type) (va) + #define VA_END(va) va_end((va)) +#endif + +#endif /* SDI_STDARG_H */ diff --git a/workbench/libs/codesetslib/include/clib/codesets_protos.h b/workbench/libs/codesetslib/include/clib/codesets_protos.h new file mode 100755 index 000000000..e42de58f4 --- /dev/null +++ b/workbench/libs/codesetslib/include/clib/codesets_protos.h @@ -0,0 +1,75 @@ +#ifndef CLIB_CODESETS_PROTOS_H +#define CLIB_CODESETS_PROTOS_H + +/*************************************************************************** + + codesets.library - Amiga shared library for handling different codesets + Copyright (C) 2001-2005 by Alfonso [alfie] Ranieri . + Copyright (C) 2005-2007 by codesets.library Open Source Team + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + codesets.library project: http://sourceforge.net/projects/codesetslib/ + + $Id$ + +***************************************************************************/ + +#ifndef LIBRARIES_CODESETS_H +#include +#endif + +STRPTR *CodesetsSupportedA(struct TagItem *attrs); +STRPTR *CodesetsSupported(Tag tag1 , ...); +void CodesetsFreeA(APTR obj, struct TagItem *attrs); +void CodesetsFree(APTR obj, Tag tag1, ...); +struct codeset *CodesetsSetDefaultA(STRPTR name, struct TagItem *attrs); +struct codeset *CodesetsSetDefault(STRPTR name, Tag tag1, ...); +struct codeset *CodesetsFindA(STRPTR name, struct TagItem *attrs); +struct codeset *CodesetsFind(STRPTR name, Tag tag1, ...); +struct codeset *CodesetsFindBestA(struct TagItem *attrs); +struct codeset *CodesetsFindBest(Tag tag1, ...); +ULONG CodesetsUTF8Len(const UTF8 *str); +ULONG CodesetsStrLenA(STRPTR str, struct TagItem *attrs); +ULONG CodesetsStrLen(STRPTR str, Tag tag1, ...); +STRPTR CodesetsUTF8ToStrA(struct TagItem *attrs); +STRPTR CodesetsUTF8ToStr(Tag tag1, ...); +UTF8 *CodesetsUTF8CreateA(struct TagItem *attrs); +UTF8 *CodesetsUTF8Create(Tag tag1, ...); +BOOL CodesetsIsValidUTF8(STRPTR str); +void CodesetsFreeVecPooledA(APTR pool, APTR mem, struct TagItem *attrs); +void CodesetsFreeVecPooled(APTR pool, APTR mem, Tag tag1, ...); +STRPTR CodesetsConvertStrA(struct TagItem *attrs); +STRPTR CodesetsConvertStr(Tag tag1, ...); +struct codesetList *CodesetsListCreateA(struct TagItem *attrs); +struct codesetList *CodesetsListCreate(Tag tag1, ...); +BOOL CodesetsListDeleteA(struct TagItem *attrs); +BOOL CodesetsListDelete(Tag tag1, ...); +BOOL CodesetsListAddA(struct codesetList *csList, struct TagItem *attrs); +BOOL CodesetsListAdd(struct codesetList *csList, ...); +BOOL CodesetsListRemoveA(struct TagItem *attrs); +BOOL CodesetsListRemove(Tag tag1, ...); + +ULONG CodesetsConvertUTF32toUTF16(const UTF32 **sourceStart, const UTF32 *sourceEnd, UTF16 **targetStart, UTF16 *targetEnd, ULONG flags); +ULONG CodesetsConvertUTF16toUTF32(const UTF16 **sourceStart, const UTF16 *sourceEnd, UTF32 **targetStart, UTF32 *targetEnd, ULONG flags); +ULONG CodesetsConvertUTF16toUTF8(const UTF16 **sourceStart, const UTF16 *sourceEnd, UTF8 **targetStart, UTF8 *targetEnd, ULONG flags); +BOOL CodesetsIsLegalUTF8(const UTF8 *source, ULONG length); +BOOL CodesetsIsLegalUTF8Sequence(const UTF8 *source, const UTF8 *sourceEnd); +ULONG CodesetsConvertUTF8toUTF16(const UTF8 **sourceStart, const UTF8 *sourceEnd, UTF16 **targetStart, UTF16 *targetEnd, ULONG flags); +ULONG CodesetsConvertUTF32toUTF8(const UTF32 **sourceStart, const UTF32 *sourceEnd, UTF8 **targetStart, UTF8 *targetEnd, ULONG flags); +ULONG CodesetsConvertUTF8toUTF32(const UTF8 **sourceStart, const UTF8 *sourceEnd, UTF32 **targetStart, UTF32 *targetEnd, ULONG flags); + +ULONG CodesetsEncodeB64A(struct TagItem *attrs); +ULONG CodesetsEncodeB64(Tag tag1, ...); +ULONG CodesetsDecodeB64A(struct TagItem *attrs); +ULONG CodesetsDecodeB64(Tag tag1, ...); + +#endif /* CLIB_CODESETS_PROTOS_H */ diff --git a/workbench/libs/codesetslib/include/clib/muimaster_protos.h b/workbench/libs/codesetslib/include/clib/muimaster_protos.h new file mode 100755 index 000000000..8680d42ef --- /dev/null +++ b/workbench/libs/codesetslib/include/clib/muimaster_protos.h @@ -0,0 +1,70 @@ +#ifndef CLIB_MUIMASTER_PROTOS_H +#define CLIB_MUIMASTER_PROTOS_H + +#ifndef EXEC_TYPES_H +#include +#endif +#ifndef INTUITION_CLASSES_H +#include +#endif +#ifndef UTILITY_TAGITEM_H +#include +#endif +#ifndef LIBRARIES_MUI_H +#include +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/****************************************/ +/* functions to be used in applications */ +/****************************************/ + +Object *MUI_NewObjectA (char *classname,struct TagItem *tags); +Object *MUI_NewObject (char *classname,Tag tag1,...); +Object *MUI_MakeObjectA (LONG type,ULONG *params); +Object *MUI_MakeObject (LONG type,...); +VOID MUI_DisposeObject (Object *obj); +LONG MUI_RequestA (APTR app,APTR win,LONGBITS flags,char *title,char *gadgets,char *format,APTR params); +LONG MUI_Request (APTR app,APTR win,LONGBITS flags,char *title,char *gadgets,char *format,...); +LONG MUI_Error (VOID); +APTR MUI_AllocAslRequest (unsigned long reqType, struct TagItem *tagList); +APTR MUI_AllocAslRequestTags(unsigned long reqType, Tag Tag1, ...); +VOID MUI_FreeAslRequest (APTR requester ); +BOOL MUI_AslRequest (APTR requester, struct TagItem *tagList); +BOOL MUI_AslRequestTags (APTR requester, Tag Tag1, ...); + +/******************************************/ +/* functions to be used in custom classes */ +/******************************************/ + +LONG MUI_SetError (LONG num); +struct IClass * MUI_GetClass (char *classname); +VOID MUI_FreeClass (struct IClass *classptr); +VOID MUI_RequestIDCMP (Object *obj,ULONG flags); +VOID MUI_RejectIDCMP (Object *obj,ULONG flags); +VOID MUI_Redraw (Object *obj,ULONG flags); +APTR MUI_AddClipping (struct MUI_RenderInfo *mri,WORD left,WORD top,WORD width,WORD height); +VOID MUI_RemoveClipping (struct MUI_RenderInfo *mri,APTR handle); +APTR MUI_AddClipRegion (struct MUI_RenderInfo *mri,struct Region *r); +VOID MUI_RemoveClipRegion (struct MUI_RenderInfo *mri,APTR handle); +BOOL MUI_BeginRefresh (struct MUI_RenderInfo *mri,ULONG flags); +VOID MUI_EndRefresh (struct MUI_RenderInfo *mri,ULONG flags); +struct MUI_CustomClass *MUI_CreateCustomClass(struct Library *base,char *supername,struct MUI_CustomClass *supermcc,int datasize,APTR dispatcher); +BOOL MUI_DeleteCustomClass(struct MUI_CustomClass *mcc); +LONG MUI_ObtainPen (struct MUI_RenderInfo *mri,struct MUI_PenSpec *spec,ULONG flags); +VOID MUI_ReleasePen (struct MUI_RenderInfo *mri,LONG pen); + +/*************************************************************/ +/* layout function, use only in custom layout callback hook! */ +/*************************************************************/ + +BOOL MUI_Layout(Object *obj,LONG left,LONG top,LONG width,LONG height,ULONG flags); + +#ifdef __cplusplus +} +#endif + +#endif /* CLIB_MUIMASTER_PROTOS_H */ diff --git a/workbench/libs/codesetslib/include/codesets_68k.c b/workbench/libs/codesetslib/include/codesets_68k.c new file mode 100644 index 000000000..e81a80183 --- /dev/null +++ b/workbench/libs/codesetslib/include/codesets_68k.c @@ -0,0 +1,437 @@ +/* +** This file was automatically generated by fdtrans 51.17. +** Do not edit it by hand. Instead, edit the sfd file +** that was used to generate this file +*/ + +#ifdef __USE_INLINE__ +#undef __USE_INLINE__ +#endif +#ifndef __NOGLOBALIFACE__ +#define __NOGLOBALIFACE__ +#endif + +#include +#include +#include +#include +#include +#include + + +static inline int8 convert_int8 (uint32 x) { return x; } +static inline int16 convert_int16(uint32 x) { return x; } + + +STATIC struct Library * stub_OpenPPC(ULONG *regarray) +{ + struct Library *Base = (struct Library *) regarray[REG68K_A6/4]; + struct ExtendedLibrary *ExtLib = (struct ExtendedLibrary *) ((ULONG)Base + Base->lib_PosSize); + struct LibraryManagerInterface *Self = (struct LibraryManagerInterface *) ExtLib->ILibrary; + + return Self->Open(0); +} +STATIC CONST struct EmuTrap stub_Open = { TRAPINST, TRAPTYPE, (ULONG (*)(ULONG *))stub_OpenPPC }; + +STATIC APTR stub_ClosePPC(ULONG *regarray) +{ + struct Library *Base = (struct Library *) regarray[REG68K_A6/4]; + struct ExtendedLibrary *ExtLib = (struct ExtendedLibrary *) ((ULONG)Base + Base->lib_PosSize); + struct LibraryManagerInterface *Self = (struct LibraryManagerInterface *) ExtLib->ILibrary; + + return Self->Close(); +} +STATIC CONST struct EmuTrap stub_Close = { TRAPINST, TRAPTYPE, (ULONG (*)(ULONG *))stub_ClosePPC }; + +STATIC APTR stub_ExpungePPC(ULONG *regarray __attribute__((unused))) +{ + return NULL; +} +STATIC CONST struct EmuTrap stub_Expunge = { TRAPINST, TRAPTYPE, (ULONG (*)(ULONG *))stub_ExpungePPC }; + +STATIC ULONG stub_ReservedPPC(ULONG *regarray __attribute__((unused))) +{ + return 0UL; +} +STATIC CONST struct EmuTrap stub_Reserved = { TRAPINST, TRAPTYPE, stub_ReservedPPC }; + +static ULONG stub_CodesetsConvertUTF32toUTF16PPC(ULONG *regarray) +{ + struct Library *Base = (struct Library *) regarray[REG68K_A6/4]; + struct ExtendedLibrary *ExtLib = (struct ExtendedLibrary *) ((ULONG)Base + Base->lib_PosSize); + struct CodesetsIFace *Self = (struct CodesetsIFace *) ExtLib->MainIFace; + + return Self->CodesetsConvertUTF32toUTF16( + (const UTF32 **)regarray[8], + (const UTF32 *)regarray[9], + (UTF16 **)regarray[10], + (UTF16 *)regarray[11], + (ULONG)regarray[0] + ); +} +STATIC CONST struct EmuTrap stub_CodesetsConvertUTF32toUTF16 = { TRAPINST, TRAPTYPE, (ULONG (*)(ULONG *))stub_CodesetsConvertUTF32toUTF16PPC }; + +static ULONG stub_CodesetsConvertUTF16toUTF32PPC(ULONG *regarray) +{ + struct Library *Base = (struct Library *) regarray[REG68K_A6/4]; + struct ExtendedLibrary *ExtLib = (struct ExtendedLibrary *) ((ULONG)Base + Base->lib_PosSize); + struct CodesetsIFace *Self = (struct CodesetsIFace *) ExtLib->MainIFace; + + return Self->CodesetsConvertUTF16toUTF32( + (const UTF16 **)regarray[8], + (const UTF16 *)regarray[9], + (UTF32 **)regarray[10], + (UTF32 *)regarray[11], + (ULONG)regarray[0] + ); +} +STATIC CONST struct EmuTrap stub_CodesetsConvertUTF16toUTF32 = { TRAPINST, TRAPTYPE, (ULONG (*)(ULONG *))stub_CodesetsConvertUTF16toUTF32PPC }; + +static ULONG stub_CodesetsConvertUTF16toUTF8PPC(ULONG *regarray) +{ + struct Library *Base = (struct Library *) regarray[REG68K_A6/4]; + struct ExtendedLibrary *ExtLib = (struct ExtendedLibrary *) ((ULONG)Base + Base->lib_PosSize); + struct CodesetsIFace *Self = (struct CodesetsIFace *) ExtLib->MainIFace; + + return Self->CodesetsConvertUTF16toUTF8( + (const UTF16 **)regarray[8], + (const UTF16 *)regarray[9], + (UTF8 **)regarray[10], + (UTF8 *)regarray[11], + (ULONG)regarray[0] + ); +} +STATIC CONST struct EmuTrap stub_CodesetsConvertUTF16toUTF8 = { TRAPINST, TRAPTYPE, (ULONG (*)(ULONG *))stub_CodesetsConvertUTF16toUTF8PPC }; + +static BOOL stub_CodesetsIsLegalUTF8PPC(ULONG *regarray) +{ + struct Library *Base = (struct Library *) regarray[REG68K_A6/4]; + struct ExtendedLibrary *ExtLib = (struct ExtendedLibrary *) ((ULONG)Base + Base->lib_PosSize); + struct CodesetsIFace *Self = (struct CodesetsIFace *) ExtLib->MainIFace; + + return Self->CodesetsIsLegalUTF8( + (const UTF8 *)regarray[8], + (ULONG)regarray[0] + ); +} +STATIC CONST struct EmuTrap stub_CodesetsIsLegalUTF8 = { TRAPINST, TRAPTYPE, (ULONG (*)(ULONG *))stub_CodesetsIsLegalUTF8PPC }; + +static BOOL stub_CodesetsIsLegalUTF8SequencePPC(ULONG *regarray) +{ + struct Library *Base = (struct Library *) regarray[REG68K_A6/4]; + struct ExtendedLibrary *ExtLib = (struct ExtendedLibrary *) ((ULONG)Base + Base->lib_PosSize); + struct CodesetsIFace *Self = (struct CodesetsIFace *) ExtLib->MainIFace; + + return Self->CodesetsIsLegalUTF8Sequence( + (const UTF8 *)regarray[8], + (const UTF8 *)regarray[9] + ); +} +STATIC CONST struct EmuTrap stub_CodesetsIsLegalUTF8Sequence = { TRAPINST, TRAPTYPE, (ULONG (*)(ULONG *))stub_CodesetsIsLegalUTF8SequencePPC }; + +static ULONG stub_CodesetsConvertUTF8toUTF16PPC(ULONG *regarray) +{ + struct Library *Base = (struct Library *) regarray[REG68K_A6/4]; + struct ExtendedLibrary *ExtLib = (struct ExtendedLibrary *) ((ULONG)Base + Base->lib_PosSize); + struct CodesetsIFace *Self = (struct CodesetsIFace *) ExtLib->MainIFace; + + return Self->CodesetsConvertUTF8toUTF16( + (const UTF8 **)regarray[8], + (const UTF8 *)regarray[9], + (UTF16 **)regarray[10], + (UTF16 *)regarray[11], + (ULONG)regarray[0] + ); +} +STATIC CONST struct EmuTrap stub_CodesetsConvertUTF8toUTF16 = { TRAPINST, TRAPTYPE, (ULONG (*)(ULONG *))stub_CodesetsConvertUTF8toUTF16PPC }; + +static ULONG stub_CodesetsConvertUTF32toUTF8PPC(ULONG *regarray) +{ + struct Library *Base = (struct Library *) regarray[REG68K_A6/4]; + struct ExtendedLibrary *ExtLib = (struct ExtendedLibrary *) ((ULONG)Base + Base->lib_PosSize); + struct CodesetsIFace *Self = (struct CodesetsIFace *) ExtLib->MainIFace; + + return Self->CodesetsConvertUTF32toUTF8( + (const UTF32 **)regarray[8], + (const UTF32 *)regarray[9], + (UTF8 **)regarray[10], + (UTF8 *)regarray[11], + (ULONG)regarray[0] + ); +} +STATIC CONST struct EmuTrap stub_CodesetsConvertUTF32toUTF8 = { TRAPINST, TRAPTYPE, (ULONG (*)(ULONG *))stub_CodesetsConvertUTF32toUTF8PPC }; + +static ULONG stub_CodesetsConvertUTF8toUTF32PPC(ULONG *regarray) +{ + struct Library *Base = (struct Library *) regarray[REG68K_A6/4]; + struct ExtendedLibrary *ExtLib = (struct ExtendedLibrary *) ((ULONG)Base + Base->lib_PosSize); + struct CodesetsIFace *Self = (struct CodesetsIFace *) ExtLib->MainIFace; + + return Self->CodesetsConvertUTF8toUTF32( + (const UTF8 **)regarray[8], + (const UTF8 *)regarray[9], + (UTF32 **)regarray[10], + (UTF32 *)regarray[11], + (ULONG)regarray[0] + ); +} +STATIC CONST struct EmuTrap stub_CodesetsConvertUTF8toUTF32 = { TRAPINST, TRAPTYPE, (ULONG (*)(ULONG *))stub_CodesetsConvertUTF8toUTF32PPC }; + +static struct codeset * stub_CodesetsSetDefaultAPPC(ULONG *regarray) +{ + struct Library *Base = (struct Library *) regarray[REG68K_A6/4]; + struct ExtendedLibrary *ExtLib = (struct ExtendedLibrary *) ((ULONG)Base + Base->lib_PosSize); + struct CodesetsIFace *Self = (struct CodesetsIFace *) ExtLib->MainIFace; + + return Self->CodesetsSetDefaultA( + (STRPTR)regarray[8], + (struct TagItem *)regarray[9] + ); +} +STATIC CONST struct EmuTrap stub_CodesetsSetDefaultA = { TRAPINST, TRAPTYPE, (ULONG (*)(ULONG *))stub_CodesetsSetDefaultAPPC }; + +static void stub_CodesetsFreeAPPC(ULONG *regarray) +{ + struct Library *Base = (struct Library *) regarray[REG68K_A6/4]; + struct ExtendedLibrary *ExtLib = (struct ExtendedLibrary *) ((ULONG)Base + Base->lib_PosSize); + struct CodesetsIFace *Self = (struct CodesetsIFace *) ExtLib->MainIFace; + + Self->CodesetsFreeA( + (APTR)regarray[8], + (struct TagItem *)regarray[9] + ); +} +STATIC CONST struct EmuTrap stub_CodesetsFreeA = { TRAPINST, TRAPTYPENR, (ULONG (*)(ULONG *))stub_CodesetsFreeAPPC }; + +static STRPTR * stub_CodesetsSupportedAPPC(ULONG *regarray) +{ + struct Library *Base = (struct Library *) regarray[REG68K_A6/4]; + struct ExtendedLibrary *ExtLib = (struct ExtendedLibrary *) ((ULONG)Base + Base->lib_PosSize); + struct CodesetsIFace *Self = (struct CodesetsIFace *) ExtLib->MainIFace; + + return Self->CodesetsSupportedA( + (struct TagItem *)regarray[8] + ); +} +STATIC CONST struct EmuTrap stub_CodesetsSupportedA = { TRAPINST, TRAPTYPE, (ULONG (*)(ULONG *))stub_CodesetsSupportedAPPC }; + +static struct codeset * stub_CodesetsFindAPPC(ULONG *regarray) +{ + struct Library *Base = (struct Library *) regarray[REG68K_A6/4]; + struct ExtendedLibrary *ExtLib = (struct ExtendedLibrary *) ((ULONG)Base + Base->lib_PosSize); + struct CodesetsIFace *Self = (struct CodesetsIFace *) ExtLib->MainIFace; + + return Self->CodesetsFindA( + (STRPTR)regarray[8], + (struct TagItem *)regarray[9] + ); +} +STATIC CONST struct EmuTrap stub_CodesetsFindA = { TRAPINST, TRAPTYPE, (ULONG (*)(ULONG *))stub_CodesetsFindAPPC }; + +static struct codeset * stub_CodesetsFindBestAPPC(ULONG *regarray) +{ + struct Library *Base = (struct Library *) regarray[REG68K_A6/4]; + struct ExtendedLibrary *ExtLib = (struct ExtendedLibrary *) ((ULONG)Base + Base->lib_PosSize); + struct CodesetsIFace *Self = (struct CodesetsIFace *) ExtLib->MainIFace; + + return Self->CodesetsFindBestA( + (struct TagItem *)regarray[8] + ); +} +STATIC CONST struct EmuTrap stub_CodesetsFindBestA = { TRAPINST, TRAPTYPE, (ULONG (*)(ULONG *))stub_CodesetsFindBestAPPC }; + +static ULONG stub_CodesetsUTF8LenPPC(ULONG *regarray) +{ + struct Library *Base = (struct Library *) regarray[REG68K_A6/4]; + struct ExtendedLibrary *ExtLib = (struct ExtendedLibrary *) ((ULONG)Base + Base->lib_PosSize); + struct CodesetsIFace *Self = (struct CodesetsIFace *) ExtLib->MainIFace; + + return Self->CodesetsUTF8Len( + (const UTF8 *)regarray[8] + ); +} +STATIC CONST struct EmuTrap stub_CodesetsUTF8Len = { TRAPINST, TRAPTYPE, (ULONG (*)(ULONG *))stub_CodesetsUTF8LenPPC }; + +static STRPTR stub_CodesetsUTF8ToStrAPPC(ULONG *regarray) +{ + struct Library *Base = (struct Library *) regarray[REG68K_A6/4]; + struct ExtendedLibrary *ExtLib = (struct ExtendedLibrary *) ((ULONG)Base + Base->lib_PosSize); + struct CodesetsIFace *Self = (struct CodesetsIFace *) ExtLib->MainIFace; + + return Self->CodesetsUTF8ToStrA( + (struct TagItem *)regarray[8] + ); +} +STATIC CONST struct EmuTrap stub_CodesetsUTF8ToStrA = { TRAPINST, TRAPTYPE, (ULONG (*)(ULONG *))stub_CodesetsUTF8ToStrAPPC }; + +static UTF8 * stub_CodesetsUTF8CreateAPPC(ULONG *regarray) +{ + struct Library *Base = (struct Library *) regarray[REG68K_A6/4]; + struct ExtendedLibrary *ExtLib = (struct ExtendedLibrary *) ((ULONG)Base + Base->lib_PosSize); + struct CodesetsIFace *Self = (struct CodesetsIFace *) ExtLib->MainIFace; + + return Self->CodesetsUTF8CreateA( + (struct TagItem *)regarray[8] + ); +} +STATIC CONST struct EmuTrap stub_CodesetsUTF8CreateA = { TRAPINST, TRAPTYPE, (ULONG (*)(ULONG *))stub_CodesetsUTF8CreateAPPC }; + +static ULONG stub_CodesetsEncodeB64APPC(ULONG *regarray) +{ + struct Library *Base = (struct Library *) regarray[REG68K_A6/4]; + struct ExtendedLibrary *ExtLib = (struct ExtendedLibrary *) ((ULONG)Base + Base->lib_PosSize); + struct CodesetsIFace *Self = (struct CodesetsIFace *) ExtLib->MainIFace; + + return Self->CodesetsEncodeB64A( + (struct TagItem *)regarray[8] + ); +} +STATIC CONST struct EmuTrap stub_CodesetsEncodeB64A = { TRAPINST, TRAPTYPE, (ULONG (*)(ULONG *))stub_CodesetsEncodeB64APPC }; + +static ULONG stub_CodesetsDecodeB64APPC(ULONG *regarray) +{ + struct Library *Base = (struct Library *) regarray[REG68K_A6/4]; + struct ExtendedLibrary *ExtLib = (struct ExtendedLibrary *) ((ULONG)Base + Base->lib_PosSize); + struct CodesetsIFace *Self = (struct CodesetsIFace *) ExtLib->MainIFace; + + return Self->CodesetsDecodeB64A( + (struct TagItem *)regarray[8] + ); +} +STATIC CONST struct EmuTrap stub_CodesetsDecodeB64A = { TRAPINST, TRAPTYPE, (ULONG (*)(ULONG *))stub_CodesetsDecodeB64APPC }; + +static ULONG stub_CodesetsStrLenAPPC(ULONG *regarray) +{ + struct Library *Base = (struct Library *) regarray[REG68K_A6/4]; + struct ExtendedLibrary *ExtLib = (struct ExtendedLibrary *) ((ULONG)Base + Base->lib_PosSize); + struct CodesetsIFace *Self = (struct CodesetsIFace *) ExtLib->MainIFace; + + return Self->CodesetsStrLenA( + (STRPTR)regarray[8], + (struct TagItem *)regarray[9] + ); +} +STATIC CONST struct EmuTrap stub_CodesetsStrLenA = { TRAPINST, TRAPTYPE, (ULONG (*)(ULONG *))stub_CodesetsStrLenAPPC }; + +static BOOL stub_CodesetsIsValidUTF8PPC(ULONG *regarray) +{ + struct Library *Base = (struct Library *) regarray[REG68K_A6/4]; + struct ExtendedLibrary *ExtLib = (struct ExtendedLibrary *) ((ULONG)Base + Base->lib_PosSize); + struct CodesetsIFace *Self = (struct CodesetsIFace *) ExtLib->MainIFace; + + return Self->CodesetsIsValidUTF8( + (STRPTR)regarray[8] + ); +} +STATIC CONST struct EmuTrap stub_CodesetsIsValidUTF8 = { TRAPINST, TRAPTYPE, (ULONG (*)(ULONG *))stub_CodesetsIsValidUTF8PPC }; + +static void stub_CodesetsFreeVecPooledAPPC(ULONG *regarray) +{ + struct Library *Base = (struct Library *) regarray[REG68K_A6/4]; + struct ExtendedLibrary *ExtLib = (struct ExtendedLibrary *) ((ULONG)Base + Base->lib_PosSize); + struct CodesetsIFace *Self = (struct CodesetsIFace *) ExtLib->MainIFace; + + Self->CodesetsFreeVecPooledA( + (APTR)regarray[8], + (APTR)regarray[9], + (struct TagItem *)regarray[10] + ); +} +STATIC CONST struct EmuTrap stub_CodesetsFreeVecPooledA = { TRAPINST, TRAPTYPENR, (ULONG (*)(ULONG *))stub_CodesetsFreeVecPooledAPPC }; + +static STRPTR stub_CodesetsConvertStrAPPC(ULONG *regarray) +{ + struct Library *Base = (struct Library *) regarray[REG68K_A6/4]; + struct ExtendedLibrary *ExtLib = (struct ExtendedLibrary *) ((ULONG)Base + Base->lib_PosSize); + struct CodesetsIFace *Self = (struct CodesetsIFace *) ExtLib->MainIFace; + + return Self->CodesetsConvertStrA( + (struct TagItem *)regarray[8] + ); +} +STATIC CONST struct EmuTrap stub_CodesetsConvertStrA = { TRAPINST, TRAPTYPE, (ULONG (*)(ULONG *))stub_CodesetsConvertStrAPPC }; + +static struct codesetList * stub_CodesetsListCreateAPPC(ULONG *regarray) +{ + struct Library *Base = (struct Library *) regarray[REG68K_A6/4]; + struct ExtendedLibrary *ExtLib = (struct ExtendedLibrary *) ((ULONG)Base + Base->lib_PosSize); + struct CodesetsIFace *Self = (struct CodesetsIFace *) ExtLib->MainIFace; + + return Self->CodesetsListCreateA( + (struct TagItem *)regarray[8] + ); +} +STATIC CONST struct EmuTrap stub_CodesetsListCreateA = { TRAPINST, TRAPTYPE, (ULONG (*)(ULONG *))stub_CodesetsListCreateAPPC }; + +static BOOL stub_CodesetsListDeleteAPPC(ULONG *regarray) +{ + struct Library *Base = (struct Library *) regarray[REG68K_A6/4]; + struct ExtendedLibrary *ExtLib = (struct ExtendedLibrary *) ((ULONG)Base + Base->lib_PosSize); + struct CodesetsIFace *Self = (struct CodesetsIFace *) ExtLib->MainIFace; + + return Self->CodesetsListDeleteA( + (struct TagItem *)regarray[8] + ); +} +STATIC CONST struct EmuTrap stub_CodesetsListDeleteA = { TRAPINST, TRAPTYPE, (ULONG (*)(ULONG *))stub_CodesetsListDeleteAPPC }; + +static BOOL stub_CodesetsListAddAPPC(ULONG *regarray) +{ + struct Library *Base = (struct Library *) regarray[REG68K_A6/4]; + struct ExtendedLibrary *ExtLib = (struct ExtendedLibrary *) ((ULONG)Base + Base->lib_PosSize); + struct CodesetsIFace *Self = (struct CodesetsIFace *) ExtLib->MainIFace; + + return Self->CodesetsListAddA( + (struct codesetList *)regarray[8], + (struct TagItem *)regarray[9] + ); +} +STATIC CONST struct EmuTrap stub_CodesetsListAddA = { TRAPINST, TRAPTYPE, (ULONG (*)(ULONG *))stub_CodesetsListAddAPPC }; + +static BOOL stub_CodesetsListRemoveAPPC(ULONG *regarray) +{ + struct Library *Base = (struct Library *) regarray[REG68K_A6/4]; + struct ExtendedLibrary *ExtLib = (struct ExtendedLibrary *) ((ULONG)Base + Base->lib_PosSize); + struct CodesetsIFace *Self = (struct CodesetsIFace *) ExtLib->MainIFace; + + return Self->CodesetsListRemoveA( + (struct TagItem *)regarray[8] + ); +} +STATIC CONST struct EmuTrap stub_CodesetsListRemoveA = { TRAPINST, TRAPTYPE, (ULONG (*)(ULONG *))stub_CodesetsListRemoveAPPC }; + +CONST CONST_APTR VecTable68K[] = +{ + &stub_Open, + &stub_Close, + &stub_Expunge, + &stub_Reserved, + &stub_Reserved, + &stub_CodesetsConvertUTF32toUTF16, + &stub_CodesetsConvertUTF16toUTF32, + &stub_CodesetsConvertUTF16toUTF8, + &stub_CodesetsIsLegalUTF8, + &stub_CodesetsIsLegalUTF8Sequence, + &stub_CodesetsConvertUTF8toUTF16, + &stub_CodesetsConvertUTF32toUTF8, + &stub_CodesetsConvertUTF8toUTF32, + &stub_CodesetsSetDefaultA, + &stub_CodesetsFreeA, + &stub_CodesetsSupportedA, + &stub_CodesetsFindA, + &stub_CodesetsFindBestA, + &stub_CodesetsUTF8Len, + &stub_CodesetsUTF8ToStrA, + &stub_CodesetsUTF8CreateA, + &stub_CodesetsEncodeB64A, + &stub_CodesetsDecodeB64A, + &stub_CodesetsStrLenA, + &stub_CodesetsIsValidUTF8, + &stub_CodesetsFreeVecPooledA, + &stub_CodesetsConvertStrA, + &stub_CodesetsListCreateA, + &stub_CodesetsListDeleteA, + &stub_CodesetsListAddA, + &stub_CodesetsListRemoveA, + (CONST_APTR)-1 +}; diff --git a/workbench/libs/codesetslib/include/inline/codesets.h b/workbench/libs/codesetslib/include/inline/codesets.h new file mode 100755 index 000000000..c30f6856b --- /dev/null +++ b/workbench/libs/codesetslib/include/inline/codesets.h @@ -0,0 +1,226 @@ +#ifndef _INLINE_CODESETS_H +#define _INLINE_CODESETS_H + +/*************************************************************************** + + codesets.library - Amiga shared library for handling different codesets + Copyright (C) 2001-2005 by Alfonso [alfie] Ranieri . + Copyright (C) 2005-2007 by codesets.library Open Source Team + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + codesets.library project: http://sourceforge.net/projects/codesetslib/ + + $Id$ + +***************************************************************************/ + +#ifndef CLIB_CODESETS_PROTOS_H +#define CLIB_CODESETS_PROTOS_H +#endif + +#ifndef __INLINE_MACROS_H +#include +#endif + +#ifndef LIBRARIES_CODESETS_H +#include +#endif + +#ifndef CODESETS_BASE_NAME +#define CODESETS_BASE_NAME CodesetsBase +#endif + +#define CodesetsConvertUTF32toUTF16(sourceStart, sourceEnd, targetStart, targetEnd, flags) \ + LP5(0x24, ULONG, CodesetsConvertUTF32toUTF16, const , sourceStart, a0, const , sourceEnd, a1, UTF16 **, targetStart, a2, UTF16 *, targetEnd, a3, ULONG, flags, d0, \ + , CODESETS_BASE_NAME) + +#define CodesetsConvertUTF16toUTF32(sourceStart, sourceEnd, targetStart, targetEnd, flags) \ + LP5(0x2a, ULONG, CodesetsConvertUTF16toUTF32, const , sourceStart, a0, const , sourceEnd, a1, UTF32 **, targetStart, a2, UTF32 *, targetEnd, a3, ULONG, flags, d0, \ + , CODESETS_BASE_NAME) + +#define CodesetsConvertUTF16toUTF8(sourceStart, sourceEnd, targetStart, targetEnd, flags) \ + LP5(0x30, ULONG, CodesetsConvertUTF16toUTF8, const , sourceStart, a0, const , sourceEnd, a1, UTF8 **, targetStart, a2, UTF8 *, targetEnd, a3, ULONG, flags, d0, \ + , CODESETS_BASE_NAME) + +#define CodesetsIsLegalUTF8(source, length) \ + LP2(0x36, BOOL, CodesetsIsLegalUTF8, const , source, a0, ULONG, length, d0, \ + , CODESETS_BASE_NAME) + +#define CodesetsIsLegalUTF8Sequence(source, sourceEnd) \ + LP2(0x3c, BOOL, CodesetsIsLegalUTF8Sequence, const , source, a0, const , sourceEnd, a1, \ + , CODESETS_BASE_NAME) + +#define CodesetsConvertUTF8toUTF16(sourceStart, sourceEnd, targetStart, targetEnd, flags) \ + LP5(0x42, ULONG, CodesetsConvertUTF8toUTF16, const , sourceStart, a0, const , sourceEnd, a1, UTF16 **, targetStart, a2, UTF16 *, targetEnd, a3, ULONG, flags, d0, \ + , CODESETS_BASE_NAME) + +#define CodesetsConvertUTF32toUTF8(sourceStart, sourceEnd, targetStart, targetEnd, flags) \ + LP5(0x48, ULONG, CodesetsConvertUTF32toUTF8, const , sourceStart, a0, const , sourceEnd, a1, UTF8 **, targetStart, a2, UTF8 *, targetEnd, a3, ULONG, flags, d0, \ + , CODESETS_BASE_NAME) + +#define CodesetsConvertUTF8toUTF32(sourceStart, sourceEnd, targetStart, targetEnd, flags) \ + LP5(0x4e, ULONG, CodesetsConvertUTF8toUTF32, const , sourceStart, a0, const , sourceEnd, a1, UTF32 **, targetStart, a2, UTF32 *, targetEnd, a3, ULONG, flags, d0, \ + , CODESETS_BASE_NAME) + +#define CodesetsSetDefaultA(name, attrs) \ + LP2(0x54, struct codeset *, CodesetsSetDefaultA, STRPTR, name, a0, struct TagItem *, attrs, a1, \ + , CODESETS_BASE_NAME) + +#ifndef NO_INLINE_STDARG +#define CodesetsSetDefault(name, tags...) \ + ({ULONG _tags[] = {tags}; CodesetsSetDefaultA((name), (struct TagItem *) _tags);}) +#endif + +#define CodesetsFreeA(obj, attrs) \ + LP2NR(0x5a, CodesetsFreeA, APTR, obj, a0, struct TagItem *, attrs, a1, \ + , CODESETS_BASE_NAME) + +#ifndef NO_INLINE_STDARG +#define CodesetsFree(obj, tags...) \ + ({ULONG _tags[] = {tags}; CodesetsFreeA((obj), (struct TagItem *) _tags);}) +#endif + +#define CodesetsSupportedA(attrs) \ + LP1(0x60, STRPTR *, CodesetsSupportedA, struct TagItem *, attrs, a0, \ + , CODESETS_BASE_NAME) + +#ifndef NO_INLINE_STDARG +#define CodesetsSupported(tags...) \ + ({ULONG _tags[] = {tags}; CodesetsSupportedA((struct TagItem *) _tags);}) +#endif + +#define CodesetsFindA(name, attrs) \ + LP2(0x66, struct codeset *, CodesetsFindA, STRPTR, name, a0, struct TagItem *, attrs, a1, \ + , CODESETS_BASE_NAME) + +#ifndef NO_INLINE_STDARG +#define CodesetsFind(name, tags...) \ + ({ULONG _tags[] = {tags}; CodesetsFindA((name), (struct TagItem *) _tags);}) +#endif + +#define CodesetsFindBestA(attrs) \ + LP1(0x6c, struct codeset *, CodesetsFindBestA, struct TagItem *, attrs, a0, \ + , CODESETS_BASE_NAME) + +#ifndef NO_INLINE_STDARG +#define CodesetsFindBest(tags...) \ + ({ULONG _tags[] = {tags}; CodesetsFindBestA((struct TagItem *) _tags);}) +#endif + +#define CodesetsUTF8Len(str) \ + LP1(0x72, ULONG, CodesetsUTF8Len, const , str, a0, \ + , CODESETS_BASE_NAME) + +#define CodesetsUTF8ToStrA(attrs) \ + LP1(0x78, STRPTR, CodesetsUTF8ToStrA, struct TagItem *, attrs, a0, \ + , CODESETS_BASE_NAME) + +#ifndef NO_INLINE_STDARG +#define CodesetsUTF8ToStr(tags...) \ + ({ULONG _tags[] = {tags}; CodesetsUTF8ToStrA((struct TagItem *) _tags);}) +#endif + +#define CodesetsUTF8CreateA(attrs) \ + LP1(0x7e, UTF8 *, CodesetsUTF8CreateA, struct TagItem *, attrs, a0, \ + , CODESETS_BASE_NAME) + +#ifndef NO_INLINE_STDARG +#define CodesetsUTF8Create(tags...) \ + ({ULONG _tags[] = {tags}; CodesetsUTF8CreateA((struct TagItem *) _tags);}) +#endif + +#define CodesetsEncodeB64A(attrs) \ + LP1(0x84, ULONG, CodesetsEncodeB64A, struct TagItem *, attrs, a0, \ + , CODESETS_BASE_NAME) + +#ifndef NO_INLINE_STDARG +#define CodesetsEncodeB64(tags...) \ + ({ULONG _tags[] = {tags}; CodesetsEncodeB64A((struct TagItem *) _tags);}) +#endif + +#define CodesetsDecodeB64A(attrs) \ + LP1(0x8a, ULONG, CodesetsDecodeB64A, struct TagItem *, attrs, a0, \ + , CODESETS_BASE_NAME) + +#ifndef NO_INLINE_STDARG +#define CodesetsDecodeB64(tags...) \ + ({ULONG _tags[] = {tags}; CodesetsDecodeB64A((struct TagItem *) _tags);}) +#endif + +#define CodesetsStrLenA(str, attrs) \ + LP2(0x90, ULONG, CodesetsStrLenA, STRPTR, str, a0, struct TagItem *, attrs, a1, \ + , CODESETS_BASE_NAME) + +#ifndef NO_INLINE_STDARG +#define CodesetsStrLen(str, tags...) \ + ({ULONG _tags[] = {tags}; CodesetsStrLenA((str), (struct TagItem *) _tags);}) +#endif + +#define CodesetsIsValidUTF8(str) \ + LP1(0x96, BOOL, CodesetsIsValidUTF8, STRPTR, str, a0, \ + , CODESETS_BASE_NAME) + +#define CodesetsFreeVecPooledA(pool, mem, attrs) \ + LP3NR(0x9c, CodesetsFreeVecPooledA, APTR, pool, a0, APTR, mem, a1, struct TagItem *, attrs, a2, \ + , CODESETS_BASE_NAME) + +#ifndef NO_INLINE_STDARG +#define CodesetsFreeVecPooled(pool, mem, tags...) \ + ({ULONG _tags[] = {tags}; CodesetsFreeVecPooledA((pool), (mem), (struct TagItem *) _tags);}) +#endif + +#define CodesetsConvertStrA(str) \ + LP1(0xa2, STRPTR, CodesetsConvertStrA, struct TagItem *, str, a0, \ + , CODESETS_BASE_NAME) + +#ifndef NO_INLINE_STDARG +#define CodesetsConvertStr(tags...) \ + ({ULONG _tags[] = {tags}; CodesetsConvertStrA((struct TagItem *) _tags);}) +#endif + +#define CodesetsListCreateA(attrs) \ + LP1(0xa8, struct codesetList *, CodesetsListCreateA, struct TagItem *, attrs, a0, \ + , CODESETS_BASE_NAME) + +#ifndef NO_INLINE_STDARG +#define CodesetsListCreate(tags...) \ + ({ULONG _tags[] = {tags}; CodesetsListCreateA((struct TagItem *) _tags);}) +#endif + +#define CodesetsListDeleteA(attrs) \ + LP1(0xae, BOOL, CodesetsListDeleteA, struct TagItem *, attrs, a0, \ + , CODESETS_BASE_NAME) + +#ifndef NO_INLINE_STDARG +#define CodesetsListDelete(tags...) \ + ({ULONG _tags[] = {tags}; CodesetsListDeleteA((struct TagItem *) _tags);}) +#endif + +#define CodesetsListAddA(list, attrs) \ + LP2(0xb4, BOOL, CodesetsListAddA, struct codesetList *, list, a0, struct TagItem *, attrs, a1, \ + , CODESETS_BASE_NAME) + +#ifndef NO_INLINE_STDARG +#define CodesetsListAdd(list, tags...) \ + ({ULONG _tags[] = {tags}; CodesetsListAddA((list), (struct TagItem *) _tags);}) +#endif + +#define CodesetsListRemoveA(attrs) \ + LP1(0xba, BOOL, CodesetsListRemoveA, struct TagItem *, attrs, a0, \ + , CODESETS_BASE_NAME) + +#ifndef NO_INLINE_STDARG +#define CodesetsListRemove(tags...) \ + ({ULONG _tags[] = {tags}; CodesetsListRemoveA((struct TagItem *) _tags);}) +#endif + +#endif /* _INLINE_CODESETS_H */ diff --git a/workbench/libs/codesetslib/include/inline/muimaster.h b/workbench/libs/codesetslib/include/inline/muimaster.h new file mode 100644 index 000000000..b4d485fd9 --- /dev/null +++ b/workbench/libs/codesetslib/include/inline/muimaster.h @@ -0,0 +1,139 @@ +/* Automatically generated header! Do not edit! */ + +#ifndef _INLINE_MUIMASTER_H +#define _INLINE_MUIMASTER_H + +#ifndef __INLINE_MACROS_H +#include +#endif /* !__INLINE_MACROS_H */ + +#ifndef MUIMASTER_BASE_NAME +#define MUIMASTER_BASE_NAME MUIMasterBase +#endif /* !MUIMASTER_BASE_NAME */ + +#define MUI_AddClipRegion(mri, region) \ + LP2(0xb4, APTR, MUI_AddClipRegion, struct MUI_RenderInfo *, mri, a0, struct Region *, region, a1, \ + , MUIMASTER_BASE_NAME) + +#define MUI_AddClipping(mri, l, t, w, h) \ + LP5(0xa8, APTR, MUI_AddClipping, struct MUI_RenderInfo *, mri, a0, WORD, l, d0, WORD, t, d1, WORD, w, d2, WORD, h, d3, \ + , MUIMASTER_BASE_NAME) + +#define MUI_AllocAslRequest(type, tags) \ + LP2(0x30, APTR, MUI_AllocAslRequest, unsigned long, type, d0, struct TagItem *, tags, a0, \ + , MUIMASTER_BASE_NAME) + +#ifndef NO_INLINE_STDARG +#define MUI_AllocAslRequestTags(a0, tags...) \ + ({ULONG _tags[] = { tags }; MUI_AllocAslRequest((a0), (struct TagItem *)_tags);}) +#endif /* !NO_INLINE_STDARG */ + +#define MUI_AslRequest(req, tags) \ + LP2(0x36, BOOL, MUI_AslRequest, APTR, req, a0, struct TagItem *, tags, a1, \ + , MUIMASTER_BASE_NAME) + +#ifndef NO_INLINE_STDARG +#define MUI_AslRequestTags(a0, tags...) \ + ({ULONG _tags[] = { tags }; MUI_AslRequest((a0), (struct TagItem *)_tags);}) +#endif /* !NO_INLINE_STDARG */ + +#define MUI_BeginRefresh(mri, flags) \ + LP2(0xc0, BOOL, MUI_BeginRefresh, struct MUI_RenderInfo *, mri, a0, ULONG, flags, d0, \ + , MUIMASTER_BASE_NAME) + +#define MUI_CreateCustomClass(base, supername, supermcc, datasize, dispatcher) \ + LP5(0x6c, struct MUI_CustomClass *, MUI_CreateCustomClass, struct Library *, base, a0, char *, supername, a1, struct MUI_CustomClass *, supermcc, a2, int, datasize, d0, APTR, dispatcher, a3, \ + , MUIMASTER_BASE_NAME) + +#define MUI_DeleteCustomClass(mcc) \ + LP1(0x72, BOOL, MUI_DeleteCustomClass, struct MUI_CustomClass *, mcc, a0, \ + , MUIMASTER_BASE_NAME) + +#define MUI_DisposeObject(obj) \ + LP1NR(0x24, MUI_DisposeObject, Object *, obj, a0, \ + , MUIMASTER_BASE_NAME) + +#define MUI_EndRefresh(mri, flags) \ + LP2NR(0xc6, MUI_EndRefresh, struct MUI_RenderInfo *, mri, a0, ULONG, flags, d0, \ + , MUIMASTER_BASE_NAME) + +#define MUI_Error() \ + LP0(0x42, LONG, MUI_Error, \ + , MUIMASTER_BASE_NAME) + +#define MUI_FreeAslRequest(req) \ + LP1NR(0x3c, MUI_FreeAslRequest, APTR, req, a0, \ + , MUIMASTER_BASE_NAME) + +#define MUI_FreeClass(cl) \ + LP1NR(0x54, MUI_FreeClass, struct IClass *, cl, a0, \ + , MUIMASTER_BASE_NAME) + +#define MUI_GetClass(name) \ + LP1(0x4e, struct IClass *, MUI_GetClass, char *, name, a0, \ + , MUIMASTER_BASE_NAME) + +#define MUI_Layout(obj, l, t, w, h, flags) \ + LP6(0x7e, BOOL, MUI_Layout, Object *, obj, a0, LONG, l, d0, LONG, t, d1, LONG, w, d2, LONG, h, d3, ULONG, flags, d4, \ + , MUIMASTER_BASE_NAME) + +#define MUI_MakeObjectA(type, params) \ + LP2(0x78, Object *, MUI_MakeObjectA, LONG, type, d0, ULONG *, params, a0, \ + , MUIMASTER_BASE_NAME) + +#ifndef NO_INLINE_STDARG +#define MUI_MakeObject(a0, tags...) \ + ({ULONG _tags[] = { tags }; MUI_MakeObjectA((a0), (ULONG *)_tags);}) +#endif /* !NO_INLINE_STDARG */ + +#define MUI_NewObjectA(class, tags) \ + LP2(0x1e, Object *, MUI_NewObjectA, char *, class, a0, struct TagItem *, tags, a1, \ + , MUIMASTER_BASE_NAME) + +#ifndef NO_INLINE_STDARG +#define MUI_NewObject(a0, tags...) \ + ({ULONG _tags[] = { tags }; MUI_NewObjectA((a0), (struct TagItem *)_tags);}) +#endif /* !NO_INLINE_STDARG */ + +#define MUI_ObtainPen(mri, spec, flags) \ + LP3(0x9c, LONG, MUI_ObtainPen, struct MUI_RenderInfo *, mri, a0, struct MUI_PenSpec *, spec, a1, ULONG, flags, d0, \ + , MUIMASTER_BASE_NAME) + +#define MUI_Redraw(obj, flags) \ + LP2NR(0x66, MUI_Redraw, Object *, obj, a0, ULONG, flags, d0, \ + , MUIMASTER_BASE_NAME) + +#define MUI_RejectIDCMP(obj, flags) \ + LP2NR(0x60, MUI_RejectIDCMP, Object *, obj, a0, ULONG, flags, d0, \ + , MUIMASTER_BASE_NAME) + +#define MUI_ReleasePen(mri, pen) \ + LP2NR(0xa2, MUI_ReleasePen, struct MUI_RenderInfo *, mri, a0, LONG, pen, d0, \ + , MUIMASTER_BASE_NAME) + +#define MUI_RemoveClipRegion(mri, region) \ + LP2NR(0xba, MUI_RemoveClipRegion, struct MUI_RenderInfo *, mri, a0, APTR, region, a1, \ + , MUIMASTER_BASE_NAME) + +#define MUI_RemoveClipping(mri, h) \ + LP2NR(0xae, MUI_RemoveClipping, struct MUI_RenderInfo *, mri, a0, APTR, h, a1, \ + , MUIMASTER_BASE_NAME) + +#define MUI_RequestA(app, win, flags, title, gadgets, format, params) \ + LP7(0x2a, LONG, MUI_RequestA, APTR, app, d0, APTR, win, d1, LONGBITS, flags, d2, char *, title, a0, char *, gadgets, a1, char *, format, a2, APTR, params, a3, \ + , MUIMASTER_BASE_NAME) + +#ifndef NO_INLINE_STDARG +#define MUI_Request(a0, a1, a2, a3, a4, a5, tags...) \ + ({ULONG _tags[] = { tags }; MUI_RequestA((a0), (a1), (a2), (a3), (a4), (a5), (APTR)_tags);}) +#endif /* !NO_INLINE_STDARG */ + +#define MUI_RequestIDCMP(obj, flags) \ + LP2NR(0x5a, MUI_RequestIDCMP, Object *, obj, a0, ULONG, flags, d0, \ + , MUIMASTER_BASE_NAME) + +#define MUI_SetError(errnum) \ + LP1(0x48, LONG, MUI_SetError, LONG, errnum, d0, \ + , MUIMASTER_BASE_NAME) + +#endif /* !_INLINE_MUIMASTER_H */ diff --git a/workbench/libs/codesetslib/include/inline4/codesets.h b/workbench/libs/codesetslib/include/inline4/codesets.h new file mode 100644 index 000000000..d9bb17c4d --- /dev/null +++ b/workbench/libs/codesetslib/include/inline4/codesets.h @@ -0,0 +1,135 @@ +#ifndef INLINE4_CODESETS_H +#define INLINE4_CODESETS_H + +/* +** This file was auto generated by idltool 51.8. +** +** It provides compatibility to OS3 style library +** calls by substituting functions. +** +** Do not edit manually. +*/ + +#ifndef EXEC_TYPES_H +#include +#endif +#ifndef EXEC_EXEC_H +#include +#endif +#ifndef EXEC_INTERFACES_H +#include +#endif + +#ifndef LIBRARIES_CODESETS_H +#include +#endif + +/* Inline macros for Interface "main" */ +#define CodesetsConvertUTF32toUTF16(sourceStart, sourceEnd, targetStart, targetEnd, flags) ICodesets->CodesetsConvertUTF32toUTF16(sourceStart, sourceEnd, targetStart, targetEnd, flags) +#define CodesetsConvertUTF16toUTF32(sourceStart, sourceEnd, targetStart, targetEnd, flags) ICodesets->CodesetsConvertUTF16toUTF32(sourceStart, sourceEnd, targetStart, targetEnd, flags) +#define CodesetsConvertUTF16toUTF8(sourceStart, sourceEnd, targetStart, targetEnd, flags) ICodesets->CodesetsConvertUTF16toUTF8(sourceStart, sourceEnd, targetStart, targetEnd, flags) +#define CodesetsIsLegalUTF8(source, length) ICodesets->CodesetsIsLegalUTF8(source, length) +#define CodesetsIsLegalUTF8Sequence(source, sourceEnd) ICodesets->CodesetsIsLegalUTF8Sequence(source, sourceEnd) +#define CodesetsConvertUTF8toUTF16(sourceStart, sourceEnd, targetStart, targetEnd, flags) ICodesets->CodesetsConvertUTF8toUTF16(sourceStart, sourceEnd, targetStart, targetEnd, flags) +#define CodesetsConvertUTF32toUTF8(sourceStart, sourceEnd, targetStart, targetEnd, flags) ICodesets->CodesetsConvertUTF32toUTF8(sourceStart, sourceEnd, targetStart, targetEnd, flags) +#define CodesetsConvertUTF8toUTF32(sourceStart, sourceEnd, targetStart, targetEnd, flags) ICodesets->CodesetsConvertUTF8toUTF32(sourceStart, sourceEnd, targetStart, targetEnd, flags) +#define CodesetsSetDefaultA(name, attrs) ICodesets->CodesetsSetDefaultA(name, attrs) +#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || (__GNUC__ >= 3) +#define CodesetsSetDefault(...) ICodesets->CodesetsSetDefault(__VA_ARGS__) +#elif (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) +#define CodesetsSetDefault(vargs...) ICodesets->CodesetsSetDefault(## vargs) +#endif +#define CodesetsFreeA(obj, attrs) ICodesets->CodesetsFreeA(obj, attrs) +#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || (__GNUC__ >= 3) +#define CodesetsFree(...) ICodesets->CodesetsFree(__VA_ARGS__) +#elif (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) +#define CodesetsFree(vargs...) ICodesets->CodesetsFree(## vargs) +#endif +#define CodesetsSupportedA(attrs) ICodesets->CodesetsSupportedA(attrs) +#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || (__GNUC__ >= 3) +#define CodesetsSupported(...) ICodesets->CodesetsSupported(__VA_ARGS__) +#elif (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) +#define CodesetsSupported(...) ICodesets->CodesetsSupported(## vargs) +#endif +#define CodesetsFindA(name, attrs) ICodesets->CodesetsFindA(name, attrs) +#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || (__GNUC__ >= 3) +#define CodesetsFind(...) ICodesets->CodesetsFind(__VA_ARGS__) +#elif (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) +#define CodesetsFind(vargs...) ICodesets->CodesetsFind(## vargs) +#endif +#define CodesetsFindBestA(attrs) ICodesets->CodesetsFindBestA(attrs) +#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || (__GNUC__ >= 3) +#define CodesetsFindBest(...) ICodesets->CodesetsFindBest(__VA_ARGS__) +#elif (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) +#define CodesetsFindBest(...) ICodesets->CodesetsFindBest(## vargs) +#endif +#define CodesetsUTF8Len(str) ICodesets->CodesetsUTF8Len(str) +#define CodesetsUTF8ToStrA(attrs) ICodesets->CodesetsUTF8ToStrA(attrs) +#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || (__GNUC__ >= 3) +#define CodesetsUTF8ToStr(...) ICodesets->CodesetsUTF8ToStr(__VA_ARGS__) +#elif (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) +#define CodesetsUTF8ToStr(...) ICodesets->CodesetsUTF8ToStr(## vargs) +#endif +#define CodesetsUTF8CreateA(attrs) ICodesets->CodesetsUTF8CreateA(attrs) +#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || (__GNUC__ >= 3) +#define CodesetsUTF8Create(...) ICodesets->CodesetsUTF8Create(__VA_ARGS__) +#elif (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) +#define CodesetsUTF8Create(...) ICodesets->CodesetsUTF8Create(## vargs) +#endif +#define CodesetsEncodeB64A(attrs) ICodesets->CodesetsEncodeB64A(attrs) +#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || (__GNUC__ >= 3) +#define CodesetsEncodeB64(...) ICodesets->CodesetsEncodeB64(__VA_ARGS__) +#elif (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) +#define CodesetsEncodeB64(...) ICodesets->CodesetsEncodeB64(## vargs) +#endif +#define CodesetsDecodeB64A(attrs) ICodesets->CodesetsDecodeB64A(attrs) +#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || (__GNUC__ >= 3) +#define CodesetsDecodeB64(...) ICodesets->CodesetsDecodeB64(__VA_ARGS__) +#elif (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) +#define CodesetsDecodeB64(...) ICodesets->CodesetsDecodeB64(## vargs) +#endif +#define CodesetsStrLenA(str, attrs) ICodesets->CodesetsStrLenA(str, attrs) +#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || (__GNUC__ >= 3) +#define CodesetsStrLen(...) ICodesets->CodesetsStrLen(__VA_ARGS__) +#elif (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) +#define CodesetsStrLen(vargs...) ICodesets->CodesetsStrLen(## vargs) +#endif +#define CodesetsIsValidUTF8(str) ICodesets->CodesetsIsValidUTF8(str) +#define CodesetsFreeVecPooledA(pool, mem, attrs) ICodesets->CodesetsFreeVecPooledA(pool, mem, attrs) +#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || (__GNUC__ >= 3) +#define CodesetsFreeVecPooled(pool, ...) ICodesets->CodesetsFreeVecPooled(pool, __VA_ARGS__) +#elif (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) +#define CodesetsFreeVecPooled(pool, vargs...) ICodesets->CodesetsFreeVecPooled(pool, ## vargs) +#endif +#define CodesetsConvertStrA(attrs) ICodesets->CodesetsConvertStrA(attrs) +#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || (__GNUC__ >= 3) +#define CodesetsConvertStr(...) ICodesets->CodesetsConvertStr(__VA_ARGS__) +#elif (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) +#define CodesetsConvertStr(...) ICodesets->CodesetsConvertStr(## vargs) +#endif +#define CodesetsListCreateA(attrs) ICodesets->CodesetsListCreateA(attrs) +#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || (__GNUC__ >= 3) +#define CodesetsListCreate(...) ICodesets->CodesetsListCreate(__VA_ARGS__) +#elif (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) +#define CodesetsListCreate(...) ICodesets->CodesetsListCreate(## vargs) +#endif +#define CodesetsListDeleteA(attrs) ICodesets->CodesetsListDeleteA(attrs) +#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || (__GNUC__ >= 3) +#define CodesetsListDelete(...) ICodesets->CodesetsListDelete(__VA_ARGS__) +#elif (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) +#define CodesetsListDelete(...) ICodesets->CodesetsListDelete(## vargs) +#endif +#define CodesetsListAddA(codesetsList, attrs) ICodesets->CodesetsListAddA(codesetsList, attrs) +#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || (__GNUC__ >= 3) +#define CodesetsListAdd(...) ICodesets->CodesetsListAdd(__VA_ARGS__) +#elif (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) +#define CodesetsListAdd(vargs...) ICodesets->CodesetsListAdd(## vargs) +#endif +#define CodesetsListRemoveA(attrs) ICodesets->CodesetsListRemoveA(attrs) +#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || (__GNUC__ >= 3) +#define CodesetsListRemove(...) ICodesets->CodesetsListRemove(__VA_ARGS__) +#elif (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) +#define CodesetsListRemove(...) ICodesets->CodesetsListRemove(## vargs) +#endif + +#endif /* INLINE4_CODESETS_H */ diff --git a/workbench/libs/codesetslib/include/inline4/muimaster.h b/workbench/libs/codesetslib/include/inline4/muimaster.h new file mode 100644 index 000000000..1cfb81389 --- /dev/null +++ b/workbench/libs/codesetslib/include/inline4/muimaster.h @@ -0,0 +1,73 @@ +#ifndef INLINE4_MUIMASTER_H +#define INLINE4_MUIMASTER_H + +/* +** This file was auto generated by idltool 50.10. +** +** It provides compatibility to OS3 style library +** calls by substituting functions. +** +** Do not edit manually. +*/ + +#ifndef EXEC_TYPES_H +#include +#endif +#ifndef EXEC_EXEC_H +#include +#endif +#ifndef EXEC_INTERFACES_H +#include +#endif + +#ifndef INTUITION_CLASSES_H +#include +#endif +#ifndef UTILITY_TAGITEM_H +#include +#endif +#ifndef LIBRARIES_MUI_H +#include +#endif + +/* Inline macros for Interface "main" */ +#define MUI_NewObjectA(par1, last) IMUIMaster->MUI_NewObjectA(par1, last) +#define MUI_NewObject IMUIMaster->MUI_NewObject +#define MUI_DisposeObject(last) IMUIMaster->MUI_DisposeObject(last) +#define MUI_RequestA(par1, par2, par3, par4, par5, par6, last) IMUIMaster->MUI_RequestA(par1, par2, par3, par4, par5, par6, last) +#if !defined(__cplusplus) && (__STDC_VERSION__ >= 199901L || __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)) +#define MUI_Request(par1, par2, par3, par4, par5, ...) IMUIMaster->MUI_Request(par1, par2, par3, par4, par5, __VA_ARGS__) +#endif +#define MUI_AllocAslRequest(par1, last) IMUIMaster->MUI_AllocAslRequest(par1, last) +#if !defined(__cplusplus) && (__STDC_VERSION__ >= 199901L || __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)) +#define MUI_AllocAslRequestTags(...) IMUIMaster->MUI_AllocAslRequestTags(__VA_ARGS__) +#endif +#define MUI_AslRequest(par1, last) IMUIMaster->MUI_AslRequest(par1, last) +#if !defined(__cplusplus) && (__STDC_VERSION__ >= 199901L || __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)) +#define MUI_AslRequestTags(...) IMUIMaster->MUI_AslRequestTags(__VA_ARGS__) +#endif +#define MUI_FreeAslRequest(last) IMUIMaster->MUI_FreeAslRequest(last) +#define MUI_Error() IMUIMaster->MUI_Error() +#define MUI_SetError(last) IMUIMaster->MUI_SetError(last) +#define MUI_GetClass(last) IMUIMaster->MUI_GetClass(last) +#define MUI_FreeClass(last) IMUIMaster->MUI_FreeClass(last) +#define MUI_RequestIDCMP(par1, last) IMUIMaster->MUI_RequestIDCMP(par1, last) +#define MUI_RejectIDCMP(par1, last) IMUIMaster->MUI_RejectIDCMP(par1, last) +#define MUI_Redraw(par1, last) IMUIMaster->MUI_Redraw(par1, last) +#define MUI_CreateCustomClass(par1, par2, par3, par4, last) IMUIMaster->MUI_CreateCustomClass(par1, par2, par3, par4, last) +#define MUI_DeleteCustomClass(last) IMUIMaster->MUI_DeleteCustomClass(last) +#define MUI_MakeObjectA(par1, last) IMUIMaster->MUI_MakeObjectA(par1, last) +#if !defined(__cplusplus) && (__STDC_VERSION__ >= 199901L || __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)) +#define MUI_MakeObject(...) IMUIMaster->MUI_MakeObject(__VA_ARGS__) +#endif +#define MUI_Layout(par1, par2, par3, par4, par5, last) IMUIMaster->MUI_Layout(par1, par2, par3, par4, par5, last) +#define MUI_ObtainPen(par1, par2, last) IMUIMaster->MUI_ObtainPen(par1, par2, last) +#define MUI_ReleasePen(par1, last) IMUIMaster->MUI_ReleasePen(par1, last) +#define MUI_AddClipping(par1, par2, par3, par4, last) IMUIMaster->MUI_AddClipping(par1, par2, par3, par4, last) +#define MUI_RemoveClipping(par1, last) IMUIMaster->MUI_RemoveClipping(par1, last) +#define MUI_AddClipRegion(par1, last) IMUIMaster->MUI_AddClipRegion(par1, last) +#define MUI_RemoveClipRegion(par1, last) IMUIMaster->MUI_RemoveClipRegion(par1, last) +#define MUI_BeginRefresh(par1, last) IMUIMaster->MUI_BeginRefresh(par1, last) +#define MUI_EndRefresh(par1, last) IMUIMaster->MUI_EndRefresh(par1, last) + +#endif /* INLINE4_MUIMASTER_H */ diff --git a/workbench/libs/codesetslib/include/interfaces/codesets.h b/workbench/libs/codesetslib/include/interfaces/codesets.h new file mode 100644 index 000000000..e1cbd355a --- /dev/null +++ b/workbench/libs/codesetslib/include/interfaces/codesets.h @@ -0,0 +1,76 @@ +#ifndef CODESETS_INTERFACE_DEF_H +#define CODESETS_INTERFACE_DEF_H + +/* +** This file was machine generated by idltool 51.8. +** Do not edit +*/ + +#ifndef EXEC_TYPES_H +#include +#endif +#ifndef EXEC_EXEC_H +#include +#endif +#ifndef EXEC_INTERFACES_H +#include +#endif + +#ifndef LIBRARIES_CODESETS_H +#include +#endif + +struct CodesetsIFace +{ + struct InterfaceData Data; + + ULONG APICALL (*Obtain)(struct CodesetsIFace *Self); + ULONG APICALL (*Release)(struct CodesetsIFace *Self); + void APICALL (*Expunge)(struct CodesetsIFace *Self); + struct Interface * APICALL (*Clone)(struct CodesetsIFace *Self); + void APICALL (*Reserved1)(struct CodesetsIFace *Self); + ULONG APICALL (*CodesetsConvertUTF32toUTF16)(struct CodesetsIFace *Self, const UTF32 ** sourceStart, const UTF32 * sourceEnd, UTF16 ** targetStart, UTF16 * targetEnd, ULONG flags); + ULONG APICALL (*CodesetsConvertUTF16toUTF32)(struct CodesetsIFace *Self, const UTF16 ** sourceStart, const UTF16 * sourceEnd, UTF32 ** targetStart, UTF32 * targetEnd, ULONG flags); + ULONG APICALL (*CodesetsConvertUTF16toUTF8)(struct CodesetsIFace *Self, const UTF16 ** sourceStart, const UTF16 * sourceEnd, UTF8 ** targetStart, UTF8 * targetEnd, ULONG flags); + BOOL APICALL (*CodesetsIsLegalUTF8)(struct CodesetsIFace *Self, const UTF8 * source, ULONG length); + BOOL APICALL (*CodesetsIsLegalUTF8Sequence)(struct CodesetsIFace *Self, const UTF8 * source, const UTF8 * sourceEnd); + ULONG APICALL (*CodesetsConvertUTF8toUTF16)(struct CodesetsIFace *Self, const UTF8 ** sourceStart, const UTF8 * sourceEnd, UTF16 ** targetStart, UTF16 * targetEnd, ULONG flags); + ULONG APICALL (*CodesetsConvertUTF32toUTF8)(struct CodesetsIFace *Self, const UTF32 ** sourceStart, const UTF32 * sourceEnd, UTF8 ** targetStart, UTF8 * targetEnd, ULONG flags); + ULONG APICALL (*CodesetsConvertUTF8toUTF32)(struct CodesetsIFace *Self, const UTF8 ** sourceStart, const UTF8 * sourceEnd, UTF32 ** targetStart, UTF32 * targetEnd, ULONG flags); + struct codeset * APICALL (*CodesetsSetDefaultA)(struct CodesetsIFace *Self, STRPTR name, struct TagItem * attrs); + struct codeset * APICALL (*CodesetsSetDefault)(struct CodesetsIFace *Self, STRPTR name, ...); + void APICALL (*CodesetsFreeA)(struct CodesetsIFace *Self, APTR obj, struct TagItem * attrs); + void APICALL (*CodesetsFree)(struct CodesetsIFace *Self, APTR obj, ...); + STRPTR * APICALL (*CodesetsSupportedA)(struct CodesetsIFace *Self, struct TagItem * attrs); + STRPTR * APICALL (*CodesetsSupported)(struct CodesetsIFace *Self, ...); + struct codeset * APICALL (*CodesetsFindA)(struct CodesetsIFace *Self, STRPTR name, struct TagItem * attrs); + struct codeset * APICALL (*CodesetsFind)(struct CodesetsIFace *Self, STRPTR name, ...); + struct codeset * APICALL (*CodesetsFindBestA)(struct CodesetsIFace *Self, struct TagItem * attrs); + struct codeset * APICALL (*CodesetsFindBest)(struct CodesetsIFace *Self, ...); + ULONG APICALL (*CodesetsUTF8Len)(struct CodesetsIFace *Self, const UTF8 * str); + STRPTR APICALL (*CodesetsUTF8ToStrA)(struct CodesetsIFace *Self, struct TagItem * attrs); + STRPTR APICALL (*CodesetsUTF8ToStr)(struct CodesetsIFace *Self, ...); + UTF8 * APICALL (*CodesetsUTF8CreateA)(struct CodesetsIFace *Self, struct TagItem * attrs); + UTF8 * APICALL (*CodesetsUTF8Create)(struct CodesetsIFace *Self, ...); + ULONG APICALL (*CodesetsEncodeB64A)(struct CodesetsIFace *Self, struct TagItem * attrs); + ULONG APICALL (*CodesetsEncodeB64)(struct CodesetsIFace *Self, ...); + ULONG APICALL (*CodesetsDecodeB64A)(struct CodesetsIFace *Self, struct TagItem * attrs); + ULONG APICALL (*CodesetsDecodeB64)(struct CodesetsIFace *Self, ...); + ULONG APICALL (*CodesetsStrLenA)(struct CodesetsIFace *Self, STRPTR str, struct TagItem * attrs); + ULONG APICALL (*CodesetsStrLen)(struct CodesetsIFace *Self, STRPTR str, ...); + BOOL APICALL (*CodesetsIsValidUTF8)(struct CodesetsIFace *Self, STRPTR str); + void APICALL (*CodesetsFreeVecPooledA)(struct CodesetsIFace *Self, APTR pool, APTR mem, struct TagItem * attrs); + void APICALL (*CodesetsFreeVecPooled)(struct CodesetsIFace *Self, APTR pool, APTR mem, ...); + STRPTR APICALL (*CodesetsConvertStrA)(struct CodesetsIFace *Self, struct TagItem * attrs); + STRPTR APICALL (*CodesetsConvertStr)(struct CodesetsIFace *Self, ...); + struct codesetList * APICALL (*CodesetsListCreateA)(struct CodesetsIFace *Self, struct TagItem * attrs); + struct codesetList * APICALL (*CodesetsListCreate)(struct CodesetsIFace *Self, ...); + BOOL APICALL (*CodesetsListDeleteA)(struct CodesetsIFace *Self, struct TagItem * attrs); + BOOL APICALL (*CodesetsListDelete)(struct CodesetsIFace *Self, ...); + BOOL APICALL (*CodesetsListAddA)(struct CodesetsIFace *Self, struct codesetList * codesetsList, struct TagItem * attrs); + BOOL APICALL (*CodesetsListAdd)(struct CodesetsIFace *Self, struct codesetList * codesetsList, ...); + BOOL APICALL (*CodesetsListRemoveA)(struct CodesetsIFace *Self, struct TagItem * attrs); + BOOL APICALL (*CodesetsListRemove)(struct CodesetsIFace *Self, ...); +}; + +#endif /* CODESETS_INTERFACE_DEF_H */ diff --git a/workbench/libs/codesetslib/include/interfaces/codesets.i b/workbench/libs/codesetslib/include/interfaces/codesets.i new file mode 100644 index 000000000..1468ed0eb --- /dev/null +++ b/workbench/libs/codesetslib/include/interfaces/codesets.i @@ -0,0 +1,62 @@ +#ifndef CODESETS_INTERFACE_DEF_H +#define CODESETS_INTERFACE_DEF_H +/* +** This file is machine generated from idltool +** Do not edit +*/ + +#include +#include +#include + +STRUCTURE CodesetsIFace, InterfaceData_SIZE + FPTR ICodesets_Obtain + FPTR ICodesets_Release + FPTR ICodesets_Expunge + FPTR ICodesets_Clone + FPTR ICodesets_Reserved1 + FPTR ICodesets_CodesetsConvertUTF32toUTF16 + FPTR ICodesets_CodesetsConvertUTF16toUTF32 + FPTR ICodesets_CodesetsConvertUTF16toUTF8 + FPTR ICodesets_CodesetsIsLegalUTF8 + FPTR ICodesets_CodesetsIsLegalUTF8Sequence + FPTR ICodesets_CodesetsConvertUTF8toUTF16 + FPTR ICodesets_CodesetsConvertUTF32toUTF8 + FPTR ICodesets_CodesetsConvertUTF8toUTF32 + FPTR ICodesets_CodesetsSetDefaultA + FPTR ICodesets_CodesetsSetDefault + FPTR ICodesets_CodesetsFreeA + FPTR ICodesets_CodesetsFree + FPTR ICodesets_CodesetsSupportedA + FPTR ICodesets_CodesetsSupported + FPTR ICodesets_CodesetsFindA + FPTR ICodesets_CodesetsFind + FPTR ICodesets_CodesetsFindBestA + FPTR ICodesets_CodesetsFindBest + FPTR ICodesets_CodesetsUTF8Len + FPTR ICodesets_CodesetsUTF8ToStrA + FPTR ICodesets_CodesetsUTF8ToStr + FPTR ICodesets_CodesetsUTF8CreateA + FPTR ICodesets_CodesetsUTF8Create + FPTR ICodesets_CodesetsEncodeB64A + FPTR ICodesets_CodesetsEncodeB64 + FPTR ICodesets_CodesetsDecodeB64A + FPTR ICodesets_CodesetsDecodeB64 + FPTR ICodesets_CodesetsStrLenA + FPTR ICodesets_CodesetsStrLen + FPTR ICodesets_CodesetsIsValidUTF8 + FPTR ICodesets_CodesetsFreeVecPooledA + FPTR ICodesets_CodesetsFreeVecPooled + FPTR ICodesets_CodesetsConvertStrA + FPTR ICodesets_CodesetsConvertStr + FPTR ICodesets_CodesetsListCreateA + FPTR ICodesets_CodesetsListCreate + FPTR ICodesets_CodesetsListDeleteA + FPTR ICodesets_CodesetsListDelete + FPTR ICodesets_CodesetsListAddA + FPTR ICodesets_CodesetsListAdd + FPTR ICodesets_CodesetsListRemoveA + FPTR ICodesets_CodesetsListRemove + LABEL CodesetsIFace_SIZE + +#endif diff --git a/workbench/libs/codesetslib/include/interfaces/muimaster.h b/workbench/libs/codesetslib/include/interfaces/muimaster.h new file mode 100644 index 000000000..d27cc9e17 --- /dev/null +++ b/workbench/libs/codesetslib/include/interfaces/muimaster.h @@ -0,0 +1,73 @@ +#ifndef MUIMASTER_INTERFACE_DEF_H +#define MUIMASTER_INTERFACE_DEF_H + +/* +** This file was machine generated by idltool 50.10. +** Do not edit +*/ + +#ifndef EXEC_TYPES_H +#include +#endif +#ifndef EXEC_EXEC_H +#include +#endif +#ifndef EXEC_INTERFACES_H +#include +#endif + +#ifndef INTUITION_CLASSES_H +#include +#endif +#ifndef UTILITY_TAGITEM_H +#include +#endif +#ifndef LIBRARIES_MUI_H +#include +#endif + +struct MUIMasterIFace +{ + struct InterfaceData Data; + + ULONG APICALL (*Obtain)(struct MUIMasterIFace *Self); + ULONG APICALL (*Release)(struct MUIMasterIFace *Self); + void APICALL (*Expunge)(struct MUIMasterIFace *Self); + struct Interface * APICALL (*Clone)(struct MUIMasterIFace *Self); + Object * APICALL (*MUI_NewObjectA)(struct MUIMasterIFace *Self, char * par1, struct TagItem * last); + Object * APICALL (*MUI_NewObject)(struct MUIMasterIFace *Self, char * par1, ...); + VOID APICALL (*MUI_DisposeObject)(struct MUIMasterIFace *Self, Object * last); + LONG APICALL (*MUI_RequestA)(struct MUIMasterIFace *Self, APTR par1, APTR par2, LONGBITS par3, char * par4, char * par5, char * par6, APTR last); + LONG APICALL (*MUI_Request)(struct MUIMasterIFace *Self, APTR par1, APTR par2, LONGBITS par3, char * par4, char * par5, char * par6, ...); + APTR APICALL (*MUI_AllocAslRequest)(struct MUIMasterIFace *Self, unsigned long par1, struct TagItem * last); + APTR APICALL (*MUI_AllocAslRequestTags)(struct MUIMasterIFace *Self, unsigned long par1, ...); + BOOL APICALL (*MUI_AslRequest)(struct MUIMasterIFace *Self, APTR par1, struct TagItem * last); + BOOL APICALL (*MUI_AslRequestTags)(struct MUIMasterIFace *Self, APTR par1, ...); + VOID APICALL (*MUI_FreeAslRequest)(struct MUIMasterIFace *Self, APTR last); + LONG APICALL (*MUI_Error)(struct MUIMasterIFace *Self); + LONG APICALL (*MUI_SetError)(struct MUIMasterIFace *Self, LONG last); + struct IClass * APICALL (*MUI_GetClass)(struct MUIMasterIFace *Self, char * last); + VOID APICALL (*MUI_FreeClass)(struct MUIMasterIFace *Self, struct IClass * last); + VOID APICALL (*MUI_RequestIDCMP)(struct MUIMasterIFace *Self, Object * par1, ULONG last); + VOID APICALL (*MUI_RejectIDCMP)(struct MUIMasterIFace *Self, Object * par1, ULONG last); + VOID APICALL (*MUI_Redraw)(struct MUIMasterIFace *Self, Object * par1, ULONG last); + struct MUI_CustomClass * APICALL (*MUI_CreateCustomClass)(struct MUIMasterIFace *Self, struct Library * par1, char * par2, struct MUI_CustomClass * par3, int par4, APTR last); + BOOL APICALL (*MUI_DeleteCustomClass)(struct MUIMasterIFace *Self, struct MUI_CustomClass * last); + Object * APICALL (*MUI_MakeObjectA)(struct MUIMasterIFace *Self, LONG par1, ULONG * last); + Object * APICALL (*MUI_MakeObject)(struct MUIMasterIFace *Self, LONG par1, ...); + BOOL APICALL (*MUI_Layout)(struct MUIMasterIFace *Self, Object * par1, LONG par2, LONG par3, LONG par4, LONG par5, ULONG last); + void APICALL (*Reserved1)(struct MUIMasterIFace *Self); + void APICALL (*Reserved2)(struct MUIMasterIFace *Self); + void APICALL (*Reserved3)(struct MUIMasterIFace *Self); + void APICALL (*Reserved4)(struct MUIMasterIFace *Self); + LONG APICALL (*MUI_ObtainPen)(struct MUIMasterIFace *Self, struct MUI_RenderInfo * par1, struct MUI_PenSpec * par2, ULONG last); + VOID APICALL (*MUI_ReleasePen)(struct MUIMasterIFace *Self, struct MUI_RenderInfo * par1, LONG last); + APTR APICALL (*MUI_AddClipping)(struct MUIMasterIFace *Self, struct MUI_RenderInfo * par1, WORD par2, WORD par3, WORD par4, WORD last); + VOID APICALL (*MUI_RemoveClipping)(struct MUIMasterIFace *Self, struct MUI_RenderInfo * par1, APTR last); + APTR APICALL (*MUI_AddClipRegion)(struct MUIMasterIFace *Self, struct MUI_RenderInfo * par1, struct Region * last); + VOID APICALL (*MUI_RemoveClipRegion)(struct MUIMasterIFace *Self, struct MUI_RenderInfo * par1, APTR last); + BOOL APICALL (*MUI_BeginRefresh)(struct MUIMasterIFace *Self, struct MUI_RenderInfo * par1, ULONG last); + VOID APICALL (*MUI_EndRefresh)(struct MUIMasterIFace *Self, struct MUI_RenderInfo * par1, ULONG last); +}; + +#endif /* MUIMASTER_INTERFACE_DEF_H */ diff --git a/workbench/libs/codesetslib/include/libraries/codesets.h b/workbench/libs/codesetslib/include/libraries/codesets.h new file mode 100755 index 000000000..f86733727 --- /dev/null +++ b/workbench/libs/codesetslib/include/libraries/codesets.h @@ -0,0 +1,204 @@ +#ifndef LIBRARIES_CODESETS_H +#define LIBRARIES_CODESETS_H + +/*************************************************************************** + + codesets.library - Amiga shared library for handling different codesets + Copyright (C) 2001-2005 by Alfonso [alfie] Ranieri . + Copyright (C) 2005-2007 by codesets.library Open Source Team + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + codesets.library project: http://sourceforge.net/projects/codesetslib/ + + $Id$ + +***************************************************************************/ + +#ifndef EXEC_SEMAPHORES_H +#include +#endif + +#ifndef UTILITY_TAGITEM_H +#include +#endif + +#ifndef UTILITY_HOOKS_H +#include +#endif + +#ifdef __GNUC__ + #ifdef __PPC__ + #pragma pack(2) + #endif +#elif defined(__VBCC__) + #pragma amiga-align +#endif + +/***********************************************************************/ +/* +** Actual library name and version. +*/ + +#define CODESETSNAME "codesets.library" +#define CODESETSVER 6 + +/***********************************************************************/ +/* + * Types + */ + +typedef unsigned long UTF32; /* at least 32 bits */ +typedef unsigned short UTF16; /* at least 16 bits */ +typedef unsigned char UTF8; /* typically 8 bits */ + +/***********************************************************************/ +/* + * single_convert + */ + +struct single_convert +{ + unsigned char code; /* the code in this representation */ + UTF8 utf8[8]; /* the utf8 string, first byte is alway the length of the string */ + unsigned int ucs4; /* the full 32 bit unicode */ +}; + +/***********************************************************************/ +/* + * codeset + */ + +struct codeset +{ + struct MinNode node; + char *name; + char *alt_name; + char *characterization; + int read_only; + struct single_convert table[256]; + struct single_convert table_sorted[256]; +}; + +/***********************************************************************/ +/* + * codesetList + */ + +struct codesetList +{ + struct MinList list; +}; + +/***********************************************************************/ + +enum +{ + CSR_ConversionOK=0, /* conversion successful */ + CSR_SourceExhausted, /* partial character in source, but hit end */ + CSR_TargetExhausted, /* insuff. room in target for conversion */ + CSR_SourceIllegal /* source sequence is illegal/malformed */ +}; + +enum +{ + CSF_StrictConversion=0, + CSF_LenientConversion +}; + +/***********************************************************************/ + +/* +** Enumerations for CSA_CodesetFamily +*/ +enum +{ + CSV_CodesetFamily_Latin=0, /* Latin Family */ + CSV_CodesetFamily_Cyrillic /* Cyrillic Family */ +}; + +/***********************************************************************/ +/* +** Tags +*/ + +#define CODESETSLIB_TAG(n) ((ULONG)0xfec901f4+(n)) + +#define CSA_Base CODESETSLIB_TAG(0) + +#define CSA_SourceLen CODESETSLIB_TAG(1) +#define CSA_Source CODESETSLIB_TAG(2) +#define CSA_Dest CODESETSLIB_TAG(3) +#define CSA_DestLen CODESETSLIB_TAG(4) +#define CSA_DestHook CODESETSLIB_TAG(5) +#define CSA_DestLenPtr CODESETSLIB_TAG(6) +#define CSA_SourceCodeset CODESETSLIB_TAG(7) +#define CSA_Pool CODESETSLIB_TAG(8) +#define CSA_PoolSem CODESETSLIB_TAG(9) +#define CSA_AllocIfNeeded CODESETSLIB_TAG(10) +#define CSA_Save CODESETSLIB_TAG(11) +#define CSA_FallbackToDefault CODESETSLIB_TAG(12) +#define CSA_DestCodeset CODESETSLIB_TAG(13) +#define CSA_CodesetDir CODESETSLIB_TAG(14) +#define CSA_CodesetFile CODESETSLIB_TAG(15) +#define CSA_CodesetList CODESETSLIB_TAG(16) +#define CSA_FreeCodesets CODESETSLIB_TAG(17) +#define CSA_CodesetFamily CODESETSLIB_TAG(18) +#define CSA_ErrPtr CODESETSLIB_TAG(19) + +#define CSA_B64SourceString CODESETSLIB_TAG(20) +#define CSA_B64SourceLen CODESETSLIB_TAG(21) +#define CSA_B64SourceFile CODESETSLIB_TAG(22) +#define CSA_B64DestPtr CODESETSLIB_TAG(23) +#define CSA_B64DestFile CODESETSLIB_TAG(24) +#define CSA_B64MaxLineLen CODESETSLIB_TAG(25) +#define CSA_B64Unix CODESETSLIB_TAG(26) +#define CSA_B64FLG_NtCheckErr CODESETSLIB_TAG(27) + +/***********************************************************************/ +/* +** Returns code from CodesetsEncodeB64A() CodesetsDecodeB64A() +*/ + +enum +{ + CSR_B64_ERROR_OK = 0, + CSR_B64_ERROR_MEM, + CSR_B64_ERROR_DOS, + CSR_B64_ERROR_INCOMPLETE, + CSR_B64_ERROR_ILLEGAL, +}; + +/***********************************************************************/ + +struct convertMsg +{ + ULONG state; + ULONG len; +}; + +enum +{ + CSV_Translating, + CSV_End, +}; + +/***********************************************************************/ + +#ifdef __GNUC__ + #ifdef __PPC__ + #pragma pack() + #endif +#elif defined(__VBCC__) + #pragma default-align +#endif + +#endif /* LIBRARIES_CODESETS_H */ diff --git a/workbench/libs/codesetslib/include/libraries/mmakefile.src b/workbench/libs/codesetslib/include/libraries/mmakefile.src new file mode 100644 index 000000000..a048adbeb --- /dev/null +++ b/workbench/libs/codesetslib/include/libraries/mmakefile.src @@ -0,0 +1,12 @@ +# $Id$ + +# AROS metamakefile for codesetslib + +include $(TOP)/config/make.cfg + +INCLUDE_FILES := codesets.h + +#MM includes-copy +%copy_includes mmake=includes-copy includes=$(INCLUDE_FILES) path=libraries + +%common diff --git a/workbench/libs/codesetslib/include/libraries/mui.h b/workbench/libs/codesetslib/include/libraries/mui.h new file mode 100755 index 000000000..a1df5ac0d --- /dev/null +++ b/workbench/libs/codesetslib/include/libraries/mui.h @@ -0,0 +1,3192 @@ +/*************************************************************************** +** +** MUI - MagicUserInterface +** (c) 1993-1997 Stefan Stuntz +** +** Main Header File +** +**************************************************************************** +** Class Tree +**************************************************************************** +** +** rootclass (BOOPSI's base class) +** +--Notify (implements notification mechanism) +** ! +--Family (handles multiple children) +** ! ! +--Menustrip (describes a complete menu strip) +** ! ! +--Menu (describes a single menu) +** ! ! \--Menuitem (describes a single menu item) +** ! +--Application (main class for all applications) +** ! +--Window (main class for all windows) +** ! ! \--Aboutmui (About window of MUI preferences) +** ! +--Area (base class for all GUI elements) +** ! +--Rectangle (spacing object) +** ! +--Balance (balancing separator bar) +** ! +--Image (image display) +** ! +--Bitmap (draws bitmaps) +** ! ! \--Bodychunk (makes bitmap from ILBM body chunk) +** ! +--Text (text display) +** ! +--Gadget (base class for intuition gadgets) +** ! ! +--String (string gadget) +** ! ! +--Boopsi (interface to BOOPSI gadgets) +** ! ! \--Prop (proportional gadget) +** ! +--Gauge (fule gauge) +** ! +--Scale (percentage scale) +** ! +--Colorfield (field with changeable color) +** ! +--List (line-oriented list) +** ! ! +--Floattext (special list with floating text) +** ! ! +--Volumelist (special list with volumes) +** ! ! +--Scrmodelist (special list with screen modes) +** ! ! \--Dirlist (special list with files) +** ! +--Numeric (base class for slider gadgets) +** ! ! +--Knob (turning knob) +** ! ! +--Levelmeter (level display) +** ! ! +--Numericbutton (space saving popup slider) +** ! ! \--Slider (traditional slider) +** ! +--Framedisplay (private) +** ! ! \--Popframe (private) +** ! +--Imagedisplay (private) +** ! ! \--Popimage (private) +** ! +--Pendisplay (displays a pen specification) +** ! ! \--Poppen (popup button to adjust a pen spec) +** ! +--Group (groups other GUI elements) +** ! +--Mccprefs (private) +** ! +--Register (handles page groups with titles) +** ! ! \--Penadjust (group to adjust a pen) +** ! +--Settingsgroup (private) +** ! +--Settings (private) +** ! +--Frameadjust (private) +** ! +--Imageadjust (private) +** ! +--Virtgroup (handles virtual groups) +** ! +--Scrollgroup (virtual groups with scrollbars) +** ! +--Scrollbar (traditional scrollbar) +** ! +--Listview (listview) +** ! +--Radio (radio button) +** ! +--Cycle (cycle gadget) +** ! +--Coloradjust (several gadgets to adjust a color) +** ! +--Palette (complete palette gadget) +** ! +--Popstring (base class for popup objects) +** ! +--Popobject (popup aynthing in a separate window) +** ! ! +--Poplist (popup a simple listview) +** ! ! \--Popscreen (popup a list of public screens) +** ! \--Popasl (popup an asl requester) +** +--Semaphore (semaphore equipped objects) +** +--Applist (private) +** +--Dataspace (handles general purpose data spaces) +** \--Configdata (private) +** +**************************************************************************** +** General Header File Information +**************************************************************************** +** +** All macro and structure definitions follow these rules: +** +** Name Meaning +** +** MUIC_ Name of a class +** MUIM__ Method +** MUIP__ Methods parameter structure +** MUIV___ Special method value +** MUIA__ Attribute +** MUIV___ Special attribute value +** MUIE_ Error return code from MUI_Error() +** MUII_ Standard MUI image +** MUIX_ Control codes for text strings +** MUIO_ Object type for MUI_MakeObject() +** +** MUIA_... attribute definitions are followed by a comment +** consisting of the three possible letters I, S and G. +** I: it's possible to specify this attribute at object creation time. +** S: it's possible to change this attribute with SetAttrs(). +** G: it's possible to get this attribute with GetAttr(). +** +** Items marked with "Custom Class" are for use in custom classes only! +*/ + + +#ifndef LIBRARIES_MUI_H +#define LIBRARIES_MUI_H + +#ifndef EXEC_TYPES_H +#include +#endif + +#ifndef DOS_DOS_H +#include +#endif + +#ifndef INTUITION_CLASSES_H +#include +#endif + +#ifndef INTUITION_SCREENS_H +#include +#endif + +#ifndef PROTO_INTUITION_H +#include +#endif + +#ifdef __GNUC__ + #ifdef __PPC__ + #pragma pack(2) + #endif +#elif defined(__VBCC__) + #pragma amiga-align +#endif + + +/*************************************************************************** +** Library specification +***************************************************************************/ + +#define MUIMASTER_NAME "muimaster.library" +#define MUIMASTER_VMIN 11 +#define MUIMASTER_VLATEST 19 + +/* +** !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +** Warning, some of the macros in this header file work only with +** muimaster.library V11 and above. If you recompile your programs, +** be sure to open muimaster.library with MUIMASTER_VMIN as version number. +** !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +*/ + + +/* comment this if you dont want to include obsolete identifiers */ + +#define MUI_OBSOLETE + + + +/************************************************************************* +** Config items for MUIM_GetConfigItem +*************************************************************************/ + + +#define MUICFG_PublicScreen 36 + + + + +/************************************************************************* +** Black box specification structures for images, pens, frames +*************************************************************************/ + +struct MUI_PenSpec +{ + char buf[32]; +}; + + + +/************************************************************************* +** Public Screen Stuff +*************************************************************************/ + +/* +** NOTE: This stuff is only included to allow compilation of the supplied +** public screen manager for educational purposes. Everything +** here is subject to change without notice and I guarantee to +** do that just for fun! +** More info can be found in the screen manager source file. +*/ + +#define PSD_INITIAL_NAME "(unnamed)" +#define PSD_INITIAL_TITLE "MUI Public Screen" +#define PSD_ID_MPUB MAKE_ID('M','P','U','B') + +#define PSD_NAME_FRONTMOST "«Frontmost»" + +#define PSD_FILENAME_SAVE "envarc:mui/PublicScreens.iff" +#define PSD_FILENAME_USE "env:mui/PublicScreens.iff" + +#define PSD_MAXLEN_NAME 32 +#define PSD_MAXLEN_TITLE 128 +#define PSD_MAXLEN_FONT 48 +#define PSD_MAXLEN_BACKGROUND 256 +#define PSD_NUMCOLS 8 +#define PSD_MAXSYSPENS 20 +#define PSD_NUMSYSPENS 12 +#define PSD_MAXMUIPENS 10 +#define PSD_NUMMUIPENS MPEN_COUNT + +struct MUI_RGBcolor +{ + ULONG red; + ULONG green; + ULONG blue; +}; + +struct MUI_PubScreenDesc +{ + LONG Version; + + char Name[PSD_MAXLEN_NAME]; + char Title[PSD_MAXLEN_TITLE]; + char Font[PSD_MAXLEN_FONT]; + char Background[PSD_MAXLEN_BACKGROUND]; + + ULONG DisplayID; + + UWORD DisplayWidth; + UWORD DisplayHeight; + + UBYTE DisplayDepth; + UBYTE OverscanType; + UBYTE AutoScroll; + UBYTE NoDrag; + UBYTE Exclusive; + UBYTE Interleaved; + UBYTE SysDefault; + UBYTE Behind; + UBYTE AutoClose; + UBYTE CloseGadget; + UBYTE DummyWasForeign; + + BYTE SystemPens[PSD_MAXSYSPENS]; + UBYTE Reserved[1+7*4-PSD_MAXSYSPENS]; + + struct MUI_RGBcolor Palette[PSD_NUMCOLS]; + struct MUI_RGBcolor rsvd[PSD_MAXSYSPENS-PSD_NUMCOLS]; + + struct MUI_PenSpec rsvd2[PSD_MAXMUIPENS]; + + LONG Changed; + APTR UserData; +}; + +struct MUIS_InfoClient +{ + struct MinNode node; + struct Task *task; + ULONG sigbit; +}; + + +/*************************************************************************** +** Object Types for MUI_MakeObject() +***************************************************************************/ + +#define MUIO_Label 1 /* STRPTR label, ULONG flags */ +#define MUIO_Button 2 /* STRPTR label */ +#define MUIO_Checkmark 3 /* STRPTR label */ +#define MUIO_Cycle 4 /* STRPTR label, STRPTR *entries */ +#define MUIO_Radio 5 /* STRPTR label, STRPTR *entries */ +#define MUIO_Slider 6 /* STRPTR label, LONG min, LONG max */ +#define MUIO_String 7 /* STRPTR label, LONG maxlen */ +#define MUIO_PopButton 8 /* STRPTR imagespec */ +#define MUIO_HSpace 9 /* LONG space */ +#define MUIO_VSpace 10 /* LONG space */ +#define MUIO_HBar 11 /* LONG space */ +#define MUIO_VBar 12 /* LONG space */ +#define MUIO_MenustripNM 13 /* struct NewMenu *nm, ULONG flags */ +#define MUIO_Menuitem 14 /* STRPTR label, STRPTR shortcut, ULONG flags, ULONG data */ +#define MUIO_BarTitle 15 /* STRPTR label */ +#define MUIO_NumericButton 16 /* STRPTR label, LONG min, LONG max, STRPTR format */ + +#define MUIO_Menuitem_CopyStrings (1<<30) + +#define MUIO_Label_SingleFrame (1<< 8) +#define MUIO_Label_DoubleFrame (1<< 9) +#define MUIO_Label_LeftAligned (1<<10) +#define MUIO_Label_Centered (1<<11) +#define MUIO_Label_FreeVert (1<<12) + +#define MUIO_MenustripNM_CommandKeyCheck (1<<0) /* check for "localized" menu items such as "O\0Open" */ + + + +/*************************************************************************** +** ARexx Interface +***************************************************************************/ + +struct MUI_Command +{ + char *mc_Name; + char *mc_Template; + LONG mc_Parameters; + struct Hook *mc_Hook; + LONG mc_Reserved[5]; +}; + +#define MC_TEMPLATE_ID ((STRPTR)~0) + +#define MUI_RXERR_BADDEFINITION -1 +#define MUI_RXERR_OUTOFMEMORY -2 +#define MUI_RXERR_UNKNOWNCOMMAND -3 +#define MUI_RXERR_BADSYNTAX -4 + + +/*************************************************************************** +** Return values for MUI_Error() +***************************************************************************/ + +#define MUIE_OK 0 +#define MUIE_OutOfMemory 1 +#define MUIE_OutOfGfxMemory 2 +#define MUIE_InvalidWindowObject 3 +#define MUIE_MissingLibrary 4 +#define MUIE_NoARexx 5 +#define MUIE_SingleTask 6 + + + +/*************************************************************************** +** Standard MUI Images & Backgrounds +***************************************************************************/ + +#define MUII_WindowBack 0 /* These images are configured */ +#define MUII_RequesterBack 1 /* with the preferences program. */ +#define MUII_ButtonBack 2 +#define MUII_ListBack 3 +#define MUII_TextBack 4 +#define MUII_PropBack 5 +#define MUII_PopupBack 6 +#define MUII_SelectedBack 7 +#define MUII_ListCursor 8 +#define MUII_ListSelect 9 +#define MUII_ListSelCur 10 +#define MUII_ArrowUp 11 +#define MUII_ArrowDown 12 +#define MUII_ArrowLeft 13 +#define MUII_ArrowRight 14 +#define MUII_CheckMark 15 +#define MUII_RadioButton 16 +#define MUII_Cycle 17 +#define MUII_PopUp 18 +#define MUII_PopFile 19 +#define MUII_PopDrawer 20 +#define MUII_PropKnob 21 +#define MUII_Drawer 22 +#define MUII_HardDisk 23 +#define MUII_Disk 24 +#define MUII_Chip 25 +#define MUII_Volume 26 +#define MUII_RegisterBack 27 +#define MUII_Network 28 +#define MUII_Assign 29 +#define MUII_TapePlay 30 +#define MUII_TapePlayBack 31 +#define MUII_TapePause 32 +#define MUII_TapeStop 33 +#define MUII_TapeRecord 34 +#define MUII_GroupBack 35 +#define MUII_SliderBack 36 +#define MUII_SliderKnob 37 +#define MUII_TapeUp 38 +#define MUII_TapeDown 39 +#define MUII_PageBack 40 +#define MUII_ReadListBack 41 +#define MUII_Count 42 + +#define MUII_BACKGROUND 128 /* These are direct color */ +#define MUII_SHADOW 129 /* combinations and are not */ +#define MUII_SHINE 130 /* affected by users prefs. */ +#define MUII_FILL 131 +#define MUII_SHADOWBACK 132 /* Generally, you should */ +#define MUII_SHADOWFILL 133 /* avoid using them. Better */ +#define MUII_SHADOWSHINE 134 /* use one of the customized */ +#define MUII_FILLBACK 135 /* images above. */ +#define MUII_FILLSHINE 136 +#define MUII_SHINEBACK 137 +#define MUII_FILLBACK2 138 +#define MUII_HSHINEBACK 139 +#define MUII_HSHADOWBACK 140 +#define MUII_HSHINESHINE 141 +#define MUII_HSHADOWSHADOW 142 +#define MUII_MARKSHINE 143 +#define MUII_MARKHALFSHINE 144 +#define MUII_MARKBACKGROUND 145 +#define MUII_LASTPAT 145 + + + +/*************************************************************************** +** Special values for some methods +***************************************************************************/ + +#define MUIV_TriggerValue 0x49893131 +#define MUIV_NotTriggerValue 0x49893133 +#define MUIV_EveryTime 0x49893131 + +#define MUIV_Notify_Self 1 +#define MUIV_Notify_Window 2 +#define MUIV_Notify_Application 3 +#define MUIV_Notify_Parent 4 + +#define MUIV_Application_Save_ENV ((STRPTR) 0) +#define MUIV_Application_Save_ENVARC ((STRPTR)~0) +#define MUIV_Application_Load_ENV ((STRPTR) 0) +#define MUIV_Application_Load_ENVARC ((STRPTR)~0) + +#define MUIV_Application_ReturnID_Quit -1 + +#define MUIV_List_Insert_Top 0 +#define MUIV_List_Insert_Active -1 +#define MUIV_List_Insert_Sorted -2 +#define MUIV_List_Insert_Bottom -3 + +#define MUIV_List_Remove_First 0 +#define MUIV_List_Remove_Active -1 +#define MUIV_List_Remove_Last -2 +#define MUIV_List_Remove_Selected -3 + +#define MUIV_List_Select_Off 0 +#define MUIV_List_Select_On 1 +#define MUIV_List_Select_Toggle 2 +#define MUIV_List_Select_Ask 3 + +#define MUIV_List_GetEntry_Active -1 +#define MUIV_List_Select_Active -1 +#define MUIV_List_Select_All -2 + +#define MUIV_List_Redraw_Active -1 +#define MUIV_List_Redraw_All -2 + +#define MUIV_List_Move_Top 0 +#define MUIV_List_Move_Active -1 +#define MUIV_List_Move_Bottom -2 +#define MUIV_List_Move_Next -3 /* only valid for second parameter */ +#define MUIV_List_Move_Previous -4 /* only valid for second parameter */ + +#define MUIV_List_Exchange_Top 0 +#define MUIV_List_Exchange_Active -1 +#define MUIV_List_Exchange_Bottom -2 +#define MUIV_List_Exchange_Next -3 /* only valid for second parameter */ +#define MUIV_List_Exchange_Previous -4 /* only valid for second parameter */ + +#define MUIV_List_Jump_Top 0 +#define MUIV_List_Jump_Active -1 +#define MUIV_List_Jump_Bottom -2 +#define MUIV_List_Jump_Up -4 +#define MUIV_List_Jump_Down -3 + +#define MUIV_List_NextSelected_Start -1 +#define MUIV_List_NextSelected_End -1 + +#define MUIV_DragQuery_Refuse 0 +#define MUIV_DragQuery_Accept 1 + +#define MUIV_DragReport_Abort 0 +#define MUIV_DragReport_Continue 1 +#define MUIV_DragReport_Lock 2 +#define MUIV_DragReport_Refresh 3 + + + + +/*************************************************************************** +** Control codes for text strings +***************************************************************************/ + +#define MUIX_R "\033r" /* right justified */ +#define MUIX_C "\033c" /* centered */ +#define MUIX_L "\033l" /* left justified */ + +#define MUIX_N "\033n" /* normal */ +#define MUIX_B "\033b" /* bold */ +#define MUIX_I "\033i" /* italic */ +#define MUIX_U "\033u" /* underlined */ + +#define MUIX_PT "\0332" /* text pen */ +#define MUIX_PH "\0338" /* highlight text pen */ + + + +/*************************************************************************** +** Parameter structures for some classes +***************************************************************************/ + +struct MUI_Palette_Entry +{ + LONG mpe_ID; + ULONG mpe_Red; + ULONG mpe_Green; + ULONG mpe_Blue; + LONG mpe_Group; +}; + +#define MUIV_Palette_Entry_End -1 + + +/*****************************/ +/* Application Input Handler */ +/*****************************/ + +struct MUI_InputHandlerNode +{ + struct MinNode ihn_Node; + Object *ihn_Object; + + union + { + ULONG ihn_sigs; + struct + { + UWORD ihn_millis; + UWORD ihn_current; + } ihn_timer; + } + ihn_stuff; + + ULONG ihn_Flags; /* see below */ + ULONG ihn_Method; +}; + +#define ihn_Signals ihn_stuff.ihn_sigs +#define ihn_Millis ihn_stuff.ihn_timer.ihn_millis +#define ihn_Current ihn_stuff.ihn_timer.ihn_current + +/* Flags for ihn_Flags */ +#define MUIIHNF_TIMER (1<<0) /* set ihn_Ticks to number of 1/100 sec ticks you want to be triggered */ + + +/************************/ +/* Window Event Handler */ +/************************/ + +struct MUI_EventHandlerNode +{ + struct MinNode ehn_Node; + BYTE ehn_Reserved; /* don't touch! */ + BYTE ehn_Priority; /* event handlers are inserted according to their priority. */ + UWORD ehn_Flags; /* certain flags, see below for definitions. */ + Object *ehn_Object; /* object which should receive MUIM_HandleEvent. */ + struct IClass *ehn_Class; /* if !=NULL, MUIM_HandleEvent is invoked on exactly this class with CoerceMethod(). */ + ULONG ehn_Events; /* one or more IDCMP flags this handler should react on. */ +}; + +/* flags for ehn_Flags */ +#define MUI_EHF_ALWAYSKEYS (1<<0) + +/* other values reserved for future use */ + +/* return values for MUIM_HandleEvent (bit-masked, all other bits must be 0) */ +#define MUI_EventHandlerRC_Eat (1<<0) /* stop MUI from calling other handlers */ + + +/**********************/ +/* List Position Test */ +/**********************/ + +struct MUI_List_TestPos_Result +{ + LONG entry; /* number of entry, -1 if mouse not over valid entry */ + WORD column; /* numer of column, -1 if no valid column */ + UWORD flags; /* see below */ + WORD xoffset; /* x offset of mouse click relative to column start */ + WORD yoffset; /* y offset of mouse click from center of line + (negative values mean click was above center, + positive values mean click was below center) */ +}; + +#define MUI_LPR_ABOVE (1<<0) +#define MUI_LPR_BELOW (1<<1) +#define MUI_LPR_LEFT (1<<2) +#define MUI_LPR_RIGHT (1<<3) + + +/*************************************************************************** +** +** Macro Section +** ------------- +** +** To make GUI creation more easy and understandable, you can use the +** macros below. If you dont want, just define MUI_NOSHORTCUTS to disable +** them. +** +** These macros are available to C programmers only. +** +***************************************************************************/ + +#ifndef MUI_NOSHORTCUTS + + + +/*************************************************************************** +** +** Object Generation +** ----------------- +** +** The xxxObject (and xChilds) macros generate new instances of MUI classes. +** Every xxxObject can be followed by tagitems specifying initial create +** time attributes for the new object and must be terminated with the +** End macro: +** +** obj = StringObject, +** MUIA_String_Contents, "foo", +** MUIA_String_MaxLen , 40, +** End; +** +** With the Child, SubWindow and WindowContents shortcuts you can +** construct a complete GUI within one command: +** +** app = ApplicationObject, +** +** ... +** +** SubWindow, WindowObject, +** WindowContents, VGroup, +** Child, String("foo",40), +** Child, String("bar",50), +** Child, HGroup, +** Child, CheckMark(TRUE), +** Child, CheckMark(FALSE), +** End, +** End, +** End, +** +** SubWindow, WindowObject, +** WindowContents, HGroup, +** Child, ..., +** Child, ..., +** End, +** End, +** +** ... +** +** End; +** +***************************************************************************/ + +#define MenustripObject MUI_NewObject(MUIC_Menustrip +#define MenuObject MUI_NewObject(MUIC_Menu +#define MenuObjectT(name) MUI_NewObject(MUIC_Menu,MUIA_Menu_Title,name +#define MenuitemObject MUI_NewObject(MUIC_Menuitem +#define WindowObject MUI_NewObject(MUIC_Window +#define ImageObject MUI_NewObject(MUIC_Image +#define BitmapObject MUI_NewObject(MUIC_Bitmap +#define BodychunkObject MUI_NewObject(MUIC_Bodychunk +#define NotifyObject MUI_NewObject(MUIC_Notify +#define ApplicationObject MUI_NewObject(MUIC_Application +#define TextObject MUI_NewObject(MUIC_Text +#define RectangleObject MUI_NewObject(MUIC_Rectangle +#define BalanceObject MUI_NewObject(MUIC_Balance +#define ListObject MUI_NewObject(MUIC_List +#define PropObject MUI_NewObject(MUIC_Prop +#define StringObject MUI_NewObject(MUIC_String +#define ScrollbarObject MUI_NewObject(MUIC_Scrollbar +#define ListviewObject MUI_NewObject(MUIC_Listview +#define RadioObject MUI_NewObject(MUIC_Radio +#define VolumelistObject MUI_NewObject(MUIC_Volumelist +#define FloattextObject MUI_NewObject(MUIC_Floattext +#define DirlistObject MUI_NewObject(MUIC_Dirlist +#define CycleObject MUI_NewObject(MUIC_Cycle +#define GaugeObject MUI_NewObject(MUIC_Gauge +#define ScaleObject MUI_NewObject(MUIC_Scale +#define NumericObject MUI_NewObject(MUIC_Numeric +#define SliderObject MUI_NewObject(MUIC_Slider +#define NumericbuttonObject MUI_NewObject(MUIC_Numericbutton +#define KnobObject MUI_NewObject(MUIC_Knob +#define LevelmeterObject MUI_NewObject(MUIC_Levelmeter +#define BoopsiObject MUI_NewObject(MUIC_Boopsi +#define ColorfieldObject MUI_NewObject(MUIC_Colorfield +#define PenadjustObject MUI_NewObject(MUIC_Penadjust +#define ColoradjustObject MUI_NewObject(MUIC_Coloradjust +#define PaletteObject MUI_NewObject(MUIC_Palette +#define GroupObject MUI_NewObject(MUIC_Group +#define RegisterObject MUI_NewObject(MUIC_Register +#define VirtgroupObject MUI_NewObject(MUIC_Virtgroup +#define ScrollgroupObject MUI_NewObject(MUIC_Scrollgroup +#define PopstringObject MUI_NewObject(MUIC_Popstring +#define PopobjectObject MUI_NewObject(MUIC_Popobject +#define PoplistObject MUI_NewObject(MUIC_Poplist +#define PopaslObject MUI_NewObject(MUIC_Popasl +#define PendisplayObject MUI_NewObject(MUIC_Pendisplay +#define PoppenObject MUI_NewObject(MUIC_Poppen +#define AboutmuiObject MUI_NewObject(MUIC_Aboutmui +#define ScrmodelistObject MUI_NewObject(MUIC_Scrmodelist +#define KeyentryObject MUI_NewObject(MUIC_Keyentry +#define VGroup MUI_NewObject(MUIC_Group +#define HGroup MUI_NewObject(MUIC_Group,MUIA_Group_Horiz,TRUE +#define ColGroup(cols) MUI_NewObject(MUIC_Group,MUIA_Group_Columns,(cols) +#define RowGroup(rows) MUI_NewObject(MUIC_Group,MUIA_Group_Rows ,(rows) +#define PageGroup MUI_NewObject(MUIC_Group,MUIA_Group_PageMode,TRUE +#define VGroupV MUI_NewObject(MUIC_Virtgroup +#define HGroupV MUI_NewObject(MUIC_Virtgroup,MUIA_Group_Horiz,TRUE +#define ColGroupV(cols) MUI_NewObject(MUIC_Virtgroup,MUIA_Group_Columns,(cols) +#define RowGroupV(rows) MUI_NewObject(MUIC_Virtgroup,MUIA_Group_Rows ,(rows) +#define PageGroupV MUI_NewObject(MUIC_Virtgroup,MUIA_Group_PageMode,TRUE +#define RegisterGroup(t) MUI_NewObject(MUIC_Register,MUIA_Register_Titles,(t) +#define End TAG_DONE) + +#define Child MUIA_Group_Child +#define SubWindow MUIA_Application_Window +#define WindowContents MUIA_Window_RootObject + + + +/*************************************************************************** +** +** Frame Types +** ----------- +** +** These macros may be used to specify one of MUI's different frame types. +** Note that every macro consists of one { ti_Tag, ti_Data } pair. +** +** GroupFrameT() is a special kind of frame that contains a centered +** title text. +** +** HGroup, GroupFrameT("Horiz Groups"), +** Child, RectangleObject, TextFrame , End, +** Child, RectangleObject, StringFrame, End, +** Child, RectangleObject, ButtonFrame, End, +** Child, RectangleObject, ListFrame , End, +** End, +** +***************************************************************************/ + +#define NoFrame MUIA_Frame, MUIV_Frame_None +#define ButtonFrame MUIA_Frame, MUIV_Frame_Button +#define ImageButtonFrame MUIA_Frame, MUIV_Frame_ImageButton +#define TextFrame MUIA_Frame, MUIV_Frame_Text +#define StringFrame MUIA_Frame, MUIV_Frame_String +#define ReadListFrame MUIA_Frame, MUIV_Frame_ReadList +#define InputListFrame MUIA_Frame, MUIV_Frame_InputList +#define PropFrame MUIA_Frame, MUIV_Frame_Prop +#define SliderFrame MUIA_Frame, MUIV_Frame_Slider +#define GaugeFrame MUIA_Frame, MUIV_Frame_Gauge +#define VirtualFrame MUIA_Frame, MUIV_Frame_Virtual +#define GroupFrame MUIA_Frame, MUIV_Frame_Group +#define GroupFrameT(s) MUIA_Frame, MUIV_Frame_Group, MUIA_FrameTitle, s, MUIA_Background, MUII_GroupBack + + + +/*************************************************************************** +** +** Spacing Macros +** -------------- +** +***************************************************************************/ + +#define HVSpace MUI_NewObject(MUIC_Rectangle,TAG_DONE) +#define HSpace(x) MUI_MakeObject(MUIO_HSpace,x) +#define VSpace(x) MUI_MakeObject(MUIO_VSpace,x) +#define HCenter(obj) (HGroup, GroupSpacing(0), Child, HSpace(0), Child, (obj), Child, HSpace(0), End) +#define VCenter(obj) (VGroup, GroupSpacing(0), Child, VSpace(0), Child, (obj), Child, VSpace(0), End) +#define InnerSpacing(h,v) MUIA_InnerLeft,(h),MUIA_InnerRight,(h),MUIA_InnerTop,(v),MUIA_InnerBottom,(v) +#define GroupSpacing(x) MUIA_Group_Spacing,x + + + +#ifdef MUI_OBSOLETE + +/*************************************************************************** +** +** String-Object +** ------------- +** +** The following macro creates a simple string gadget. +** +***************************************************************************/ + +#define String(contents,maxlen)\ + StringObject,\ + StringFrame,\ + MUIA_String_MaxLen , maxlen,\ + MUIA_String_Contents, contents,\ + End + +#define KeyString(contents,maxlen,controlchar)\ + StringObject,\ + StringFrame,\ + MUIA_ControlChar , controlchar,\ + MUIA_String_MaxLen , maxlen,\ + MUIA_String_Contents, contents,\ + End + +#endif + + + +#ifdef MUI_OBSOLETE + +/*************************************************************************** +** +** CheckMark-Object +** ---------------- +** +** The following macro creates a checkmark gadget. +** +***************************************************************************/ + +#define CheckMark(selected)\ + ImageObject,\ + ImageButtonFrame,\ + MUIA_InputMode , MUIV_InputMode_Toggle,\ + MUIA_Image_Spec , MUII_CheckMark,\ + MUIA_Image_FreeVert , TRUE,\ + MUIA_Selected , selected,\ + MUIA_Background , MUII_ButtonBack,\ + MUIA_ShowSelState , FALSE,\ + End + +#define KeyCheckMark(selected,control)\ + ImageObject,\ + ImageButtonFrame,\ + MUIA_InputMode , MUIV_InputMode_Toggle,\ + MUIA_Image_Spec , MUII_CheckMark,\ + MUIA_Image_FreeVert , TRUE,\ + MUIA_Selected , selected,\ + MUIA_Background , MUII_ButtonBack,\ + MUIA_ShowSelState , FALSE,\ + MUIA_ControlChar , control,\ + End + +#endif + + +/*************************************************************************** +** +** Button-Objects +** -------------- +** +** Note: Use small letters for KeyButtons, e.g. +** KeyButton("Cancel",'c') and not KeyButton("Cancel",'C') !! +** +***************************************************************************/ + +#define SimpleButton(label) MUI_MakeObject(MUIO_Button,label) + +#ifdef MUI_OBSOLETE + +#define KeyButton(name,key)\ + TextObject,\ + ButtonFrame,\ + MUIA_Font, MUIV_Font_Button,\ + MUIA_Text_Contents, name,\ + MUIA_Text_PreParse, "\33c",\ + MUIA_Text_HiChar , key,\ + MUIA_ControlChar , key,\ + MUIA_InputMode , MUIV_InputMode_RelVerify,\ + MUIA_Background , MUII_ButtonBack,\ + End + +#endif + + +#ifdef MUI_OBSOLETE + +/*************************************************************************** +** +** Cycle-Object +** ------------ +** +***************************************************************************/ + +#define Cycle(entries) CycleObject, MUIA_Font, MUIV_Font_Button, MUIA_Cycle_Entries, entries, End +#define KeyCycle(entries,key) CycleObject, MUIA_Font, MUIV_Font_Button, MUIA_Cycle_Entries, entries, MUIA_ControlChar, key, End + + + +/*************************************************************************** +** +** Radio-Object +** ------------ +** +***************************************************************************/ + +#define Radio(name,array)\ + RadioObject,\ + GroupFrameT(name),\ + MUIA_Radio_Entries,array,\ + End + +#define KeyRadio(name,array,key)\ + RadioObject,\ + GroupFrameT(name),\ + MUIA_Radio_Entries,array,\ + MUIA_ControlChar, key,\ + End + + + +/*************************************************************************** +** +** Slider-Object +** ------------- +** +***************************************************************************/ + + +#define Slider(min,max,level)\ + SliderObject,\ + MUIA_Numeric_Min , min,\ + MUIA_Numeric_Max , max,\ + MUIA_Numeric_Value, level,\ + End + +#define KeySlider(min,max,level,key)\ + SliderObject,\ + MUIA_Numeric_Min , min,\ + MUIA_Numeric_Max , max,\ + MUIA_Numeric_Value, level,\ + MUIA_ControlChar , key,\ + End + +#endif + + + +/*************************************************************************** +** +** Button to be used for popup objects +** +***************************************************************************/ + +#define PopButton(img) MUI_MakeObject(MUIO_PopButton,img) + + + +/*************************************************************************** +** +** Labeling Objects +** ---------------- +** +** Labeling objects, e.g. a group of string gadgets, +** +** Small: |foo | +** Normal: |bar | +** Big: |foobar| +** Huge: |barfoo| +** +** is done using a 2 column group: +** +** ColGroup(2), +** Child, Label2("Small:" ), +** Child, StringObject, End, +** Child, Label2("Normal:"), +** Child, StringObject, End, +** Child, Label2("Big:" ), +** Child, StringObject, End, +** Child, Label2("Huge:" ), +** Child, StringObject, End, +** End, +** +** Note that we have three versions of the label macro, depending on +** the frame type of the right hand object: +** +** Label1(): For use with standard frames (e.g. checkmarks). +** Label2(): For use with double high frames (e.g. string gadgets). +** Label() : For use with objects without a frame. +** +** These macros ensure that your label will look fine even if the +** user of your application configured some strange spacing values. +** If you want to use your own labeling, you'll have to pay attention +** on this topic yourself. +** +***************************************************************************/ + +#define Label(label) MUI_MakeObject(MUIO_Label,label,0) +#define Label1(label) MUI_MakeObject(MUIO_Label,label,MUIO_Label_SingleFrame) +#define Label2(label) MUI_MakeObject(MUIO_Label,label,MUIO_Label_DoubleFrame) +#define LLabel(label) MUI_MakeObject(MUIO_Label,label,MUIO_Label_LeftAligned) +#define LLabel1(label) MUI_MakeObject(MUIO_Label,label,MUIO_Label_LeftAligned|MUIO_Label_SingleFrame) +#define LLabel2(label) MUI_MakeObject(MUIO_Label,label,MUIO_Label_LeftAligned|MUIO_Label_DoubleFrame) +#define CLabel(label) MUI_MakeObject(MUIO_Label,label,MUIO_Label_Centered) +#define CLabel1(label) MUI_MakeObject(MUIO_Label,label,MUIO_Label_Centered|MUIO_Label_SingleFrame) +#define CLabel2(label) MUI_MakeObject(MUIO_Label,label,MUIO_Label_Centered|MUIO_Label_DoubleFrame) + +#define FreeLabel(label) MUI_MakeObject(MUIO_Label,label,MUIO_Label_FreeVert) +#define FreeLabel1(label) MUI_MakeObject(MUIO_Label,label,MUIO_Label_FreeVert|MUIO_Label_SingleFrame) +#define FreeLabel2(label) MUI_MakeObject(MUIO_Label,label,MUIO_Label_FreeVert|MUIO_Label_DoubleFrame) +#define FreeLLabel(label) MUI_MakeObject(MUIO_Label,label,MUIO_Label_FreeVert|MUIO_Label_LeftAligned) +#define FreeLLabel1(label) MUI_MakeObject(MUIO_Label,label,MUIO_Label_FreeVert|MUIO_Label_LeftAligned|MUIO_Label_SingleFrame) +#define FreeLLabel2(label) MUI_MakeObject(MUIO_Label,label,MUIO_Label_FreeVert|MUIO_Label_LeftAligned|MUIO_Label_DoubleFrame) +#define FreeCLabel(label) MUI_MakeObject(MUIO_Label,label,MUIO_Label_FreeVert|MUIO_Label_Centered) +#define FreeCLabel1(label) MUI_MakeObject(MUIO_Label,label,MUIO_Label_FreeVert|MUIO_Label_Centered|MUIO_Label_SingleFrame) +#define FreeCLabel2(label) MUI_MakeObject(MUIO_Label,label,MUIO_Label_FreeVert|MUIO_Label_Centered|MUIO_Label_DoubleFrame) + +#define KeyLabel(label,key) MUI_MakeObject(MUIO_Label,label,key) +#define KeyLabel1(label,key) MUI_MakeObject(MUIO_Label,label,MUIO_Label_SingleFrame|(key)) +#define KeyLabel2(label,key) MUI_MakeObject(MUIO_Label,label,MUIO_Label_DoubleFrame|(key)) +#define KeyLLabel(label,key) MUI_MakeObject(MUIO_Label,label,MUIO_Label_LeftAligned|(key)) +#define KeyLLabel1(label,key) MUI_MakeObject(MUIO_Label,label,MUIO_Label_LeftAligned|MUIO_Label_SingleFrame|(key)) +#define KeyLLabel2(label,key) MUI_MakeObject(MUIO_Label,label,MUIO_Label_LeftAligned|MUIO_Label_DoubleFrame|(key)) +#define KeyCLabel(label,key) MUI_MakeObject(MUIO_Label,label,MUIO_Label_Centered|(key)) +#define KeyCLabel1(label,key) MUI_MakeObject(MUIO_Label,label,MUIO_Label_Centered|MUIO_Label_SingleFrame|(key)) +#define KeyCLabel2(label,key) MUI_MakeObject(MUIO_Label,label,MUIO_Label_Centered|MUIO_Label_DoubleFrame|(key)) + +#define FreeKeyLabel(label,key) MUI_MakeObject(MUIO_Label,label,MUIO_Label_FreeVert|(key)) +#define FreeKeyLabel1(label,key) MUI_MakeObject(MUIO_Label,label,MUIO_Label_FreeVert|MUIO_Label_SingleFrame|(key)) +#define FreeKeyLabel2(label,key) MUI_MakeObject(MUIO_Label,label,MUIO_Label_FreeVert|MUIO_Label_DoubleFrame|(key)) +#define FreeKeyLLabel(label,key) MUI_MakeObject(MUIO_Label,label,MUIO_Label_FreeVert|MUIO_Label_LeftAligned|(key)) +#define FreeKeyLLabel1(label,key) MUI_MakeObject(MUIO_Label,label,MUIO_Label_FreeVert|MUIO_Label_LeftAligned|MUIO_Label_SingleFrame|(key)) +#define FreeKeyLLabel2(label,key) MUI_MakeObject(MUIO_Label,label,MUIO_Label_FreeVert|MUIO_Label_LeftAligned|MUIO_Label_DoubleFrame|(key)) +#define FreeKeyCLabel(label,key) MUI_MakeObject(MUIO_Label,label,MUIO_Label_FreeVert|MUIO_Label_Centered|(key)) +#define FreeKeyCLabel1(label,key) MUI_MakeObject(MUIO_Label,label,MUIO_Label_FreeVert|MUIO_Label_Centered|MUIO_Label_SingleFrame|(key)) +#define FreeKeyCLabel2(label,key) MUI_MakeObject(MUIO_Label,label,MUIO_Label_FreeVert|MUIO_Label_Centered|MUIO_Label_DoubleFrame|(key)) + + + +/*************************************************************************** +** +** Controlling Objects +** ------------------- +** +** set() and get() are two short stubs for BOOPSI GetAttr() and SetAttrs() +** calls: +** +** { +** char *x; +** +** set(obj,MUIA_String_Contents,"foobar"); +** get(obj,MUIA_String_Contents,&x); +** +** printf("gadget contains '%s'\n",x); +** } +** +** nnset() sets an attribute without triggering a possible notification. +** +***************************************************************************/ + +#ifndef __cplusplus + +#define get(obj,attr,store) GetAttr(attr,obj,(ULONG *)store) +#define set(obj,attr,value) SetAttrs(obj,attr,value,TAG_DONE) +#define nnset(obj,attr,value) SetAttrs(obj,MUIA_NoNotify,TRUE,attr,value,TAG_DONE) + +#define setmutex(obj,n) set(obj,MUIA_Radio_Active,n) +#define setcycle(obj,n) set(obj,MUIA_Cycle_Active,n) +#define setstring(obj,s) set(obj,MUIA_String_Contents,s) +#define setcheckmark(obj,b) set(obj,MUIA_Selected,b) +#define setslider(obj,l) set(obj,MUIA_Numeric_Value,l) + +#endif + + +#endif /* MUI_NOSHORTCUTS */ + + +/*************************************************************************** +** +** For Boopsi Image Implementors Only: +** +** If MUI is using a boopsi image object, it will send a special method +** immediately after object creation. This method has a parameter structure +** where the boopsi can fill in its minimum and maximum size and learn if +** its used in a horizontal or vertical context. +** +** The boopsi image must use the method id (MUIM_BoopsiQuery) as return +** value. That's how MUI sees that the method is implemented. +** +** Note: MUI does not depend on this method. If the boopsi image doesn't +** implement it, minimum size will be 0 and maximum size unlimited. +** +***************************************************************************/ + +#define MUIM_BoopsiQuery 0x80427157 /* this is send to the boopsi and */ + /* must be used as return value */ + +struct MUI_BoopsiQuery /* parameter structure */ +{ + ULONG mbq_MethodID; /* always MUIM_BoopsiQuery */ + + struct Screen *mbq_Screen; /* obsolete, use mbq_RenderInfo */ + ULONG mbq_Flags; /* read only, see below */ + + LONG mbq_MinWidth ; /* write only, fill in min width */ + LONG mbq_MinHeight; /* write only, fill in min height */ + LONG mbq_MaxWidth ; /* write only, fill in max width */ + LONG mbq_MaxHeight; /* write only, fill in max height */ + LONG mbq_DefWidth ; /* write only, fill in def width */ + LONG mbq_DefHeight; /* write only, fill in def height */ + + struct MUI_RenderInfo *mbq_RenderInfo; /* read only, display context */ + + /* may grow in future ... */ +}; + +#define MUIP_BoopsiQuery MUI_BoopsiQuery /* old structure name */ + +#define MBQF_HORIZ (1<<0) /* object used in a horizontal */ + /* context (else vertical) */ + +#define MBQ_MUI_MAXMAX (10000) /* use this for unlimited MaxWidth/Height */ + + +/*******************************************/ +/* Begin of automatic header file creation */ +/*******************************************/ + + + + +/****************************************************************************/ +/** Notify **/ +/****************************************************************************/ + +#ifdef _DCC +extern char MUIC_Notify[]; +#else +#define MUIC_Notify "Notify.mui" +#endif + +/* Methods */ + +#define MUIM_CallHook 0x8042b96b /* V4 */ +#define MUIM_Export 0x80420f1c /* V12 */ +#define MUIM_FindUData 0x8042c196 /* V8 */ +#define MUIM_GetConfigItem 0x80423edb /* V11 */ +#define MUIM_GetUData 0x8042ed0c /* V8 */ +#define MUIM_Import 0x8042d012 /* V12 */ +#define MUIM_KillNotify 0x8042d240 /* V4 */ +#define MUIM_KillNotifyObj 0x8042b145 /* V16 */ +#define MUIM_MultiSet 0x8042d356 /* V7 */ +#define MUIM_NoNotifySet 0x8042216f /* V9 */ +#define MUIM_Notify 0x8042c9cb /* V4 */ +#define MUIM_Set 0x8042549a /* V4 */ +#define MUIM_SetAsString 0x80422590 /* V4 */ +#define MUIM_SetUData 0x8042c920 /* V8 */ +#define MUIM_SetUDataOnce 0x8042ca19 /* V11 */ +#define MUIM_WriteLong 0x80428d86 /* V6 */ +#define MUIM_WriteString 0x80424bf4 /* V6 */ +struct MUIP_CallHook { ULONG MethodID; struct Hook *Hook; ULONG param1; /* ... */ }; +struct MUIP_Export { ULONG MethodID; Object *dataspace; }; +struct MUIP_FindUData { ULONG MethodID; ULONG udata; }; +struct MUIP_GetConfigItem { ULONG MethodID; ULONG id; ULONG *storage; }; +struct MUIP_GetUData { ULONG MethodID; ULONG udata; ULONG attr; ULONG *storage; }; +struct MUIP_Import { ULONG MethodID; Object *dataspace; }; +struct MUIP_KillNotify { ULONG MethodID; ULONG TrigAttr; }; +struct MUIP_KillNotifyObj { ULONG MethodID; ULONG TrigAttr; Object *dest; }; +struct MUIP_MultiSet { ULONG MethodID; ULONG attr; ULONG val; APTR obj; /* ... */ }; +struct MUIP_NoNotifySet { ULONG MethodID; ULONG attr; char *format; ULONG val; /* ... */ }; +struct MUIP_Notify { ULONG MethodID; ULONG TrigAttr; ULONG TrigVal; APTR DestObj; ULONG FollowParams; /* ... */ }; +struct MUIP_Set { ULONG MethodID; ULONG attr; ULONG val; }; +struct MUIP_SetAsString { ULONG MethodID; ULONG attr; char *format; ULONG val; /* ... */ }; +struct MUIP_SetUData { ULONG MethodID; ULONG udata; ULONG attr; ULONG val; }; +struct MUIP_SetUDataOnce { ULONG MethodID; ULONG udata; ULONG attr; ULONG val; }; +struct MUIP_WriteLong { ULONG MethodID; ULONG val; ULONG *memory; }; +struct MUIP_WriteString { ULONG MethodID; char *str; char *memory; }; + +/* Attributes */ + +#define MUIA_ApplicationObject 0x8042d3ee /* V4 ..g Object * */ +#define MUIA_AppMessage 0x80421955 /* V5 ..g struct AppMessage * */ +#define MUIA_HelpLine 0x8042a825 /* V4 isg LONG */ +#define MUIA_HelpNode 0x80420b85 /* V4 isg STRPTR */ +#define MUIA_NoNotify 0x804237f9 /* V7 .s. BOOL */ +#define MUIA_ObjectID 0x8042d76e /* V11 isg ULONG */ +#define MUIA_Parent 0x8042e35f /* V11 ..g Object * */ +#define MUIA_Revision 0x80427eaa /* V4 ..g LONG */ +#define MUIA_UserData 0x80420313 /* V4 isg ULONG */ +#define MUIA_Version 0x80422301 /* V4 ..g LONG */ + + + +/****************************************************************************/ +/** Family **/ +/****************************************************************************/ + +#ifdef _DCC +extern char MUIC_Family[]; +#else +#define MUIC_Family "Family.mui" +#endif + +/* Methods */ + +#define MUIM_Family_AddHead 0x8042e200 /* V8 */ +#define MUIM_Family_AddTail 0x8042d752 /* V8 */ +#define MUIM_Family_Insert 0x80424d34 /* V8 */ +#define MUIM_Family_Remove 0x8042f8a9 /* V8 */ +#define MUIM_Family_Sort 0x80421c49 /* V8 */ +#define MUIM_Family_Transfer 0x8042c14a /* V8 */ +struct MUIP_Family_AddHead { ULONG MethodID; Object *obj; }; +struct MUIP_Family_AddTail { ULONG MethodID; Object *obj; }; +struct MUIP_Family_Insert { ULONG MethodID; Object *obj; Object *pred; }; +struct MUIP_Family_Remove { ULONG MethodID; Object *obj; }; +struct MUIP_Family_Sort { ULONG MethodID; Object *obj[1]; }; +struct MUIP_Family_Transfer { ULONG MethodID; Object *family; }; + +/* Attributes */ + +#define MUIA_Family_Child 0x8042c696 /* V8 i.. Object * */ +#define MUIA_Family_List 0x80424b9e /* V8 ..g struct MinList * */ + + + +/****************************************************************************/ +/** Menustrip **/ +/****************************************************************************/ + +#ifdef _DCC +extern char MUIC_Menustrip[]; +#else +#define MUIC_Menustrip "Menustrip.mui" +#endif + +/* Methods */ + + +/* Attributes */ + +#define MUIA_Menustrip_Enabled 0x8042815b /* V8 isg BOOL */ + + + +/****************************************************************************/ +/** Menu **/ +/****************************************************************************/ + +#ifdef _DCC +extern char MUIC_Menu[]; +#else +#define MUIC_Menu "Menu.mui" +#endif + +/* Methods */ + + +/* Attributes */ + +#define MUIA_Menu_Enabled 0x8042ed48 /* V8 isg BOOL */ +#define MUIA_Menu_Title 0x8042a0e3 /* V8 isg STRPTR */ + + + +/****************************************************************************/ +/** Menuitem **/ +/****************************************************************************/ + +#ifdef _DCC +extern char MUIC_Menuitem[]; +#else +#define MUIC_Menuitem "Menuitem.mui" +#endif + +/* Methods */ + + +/* Attributes */ + +#define MUIA_Menuitem_Checked 0x8042562a /* V8 isg BOOL */ +#define MUIA_Menuitem_Checkit 0x80425ace /* V8 isg BOOL */ +#define MUIA_Menuitem_CommandString 0x8042b9cc /* V16 isg BOOL */ +#define MUIA_Menuitem_Enabled 0x8042ae0f /* V8 isg BOOL */ +#define MUIA_Menuitem_Exclude 0x80420bc6 /* V8 isg LONG */ +#define MUIA_Menuitem_Shortcut 0x80422030 /* V8 isg STRPTR */ +#define MUIA_Menuitem_Title 0x804218be /* V8 isg STRPTR */ +#define MUIA_Menuitem_Toggle 0x80424d5c /* V8 isg BOOL */ +#define MUIA_Menuitem_Trigger 0x80426f32 /* V8 ..g struct MenuItem * */ + +#define MUIV_Menuitem_Shortcut_Check -1 + + +/****************************************************************************/ +/** Application **/ +/****************************************************************************/ + +#ifdef _DCC +extern char MUIC_Application[]; +#else +#define MUIC_Application "Application.mui" +#endif + +/* Methods */ + +#define MUIM_Application_AboutMUI 0x8042d21d /* V14 */ +#define MUIM_Application_AddInputHandler 0x8042f099 /* V11 */ +#define MUIM_Application_CheckRefresh 0x80424d68 /* V11 */ +#ifdef MUI_OBSOLETE +#define MUIM_Application_GetMenuCheck 0x8042c0a7 /* V4 */ +#endif /* MUI_OBSOLETE */ +#ifdef MUI_OBSOLETE +#define MUIM_Application_GetMenuState 0x8042a58f /* V4 */ +#endif /* MUI_OBSOLETE */ +#ifdef MUI_OBSOLETE +#define MUIM_Application_Input 0x8042d0f5 /* V4 */ +#endif /* MUI_OBSOLETE */ +#define MUIM_Application_InputBuffered 0x80427e59 /* V4 */ +#define MUIM_Application_Load 0x8042f90d /* V4 */ +#define MUIM_Application_NewInput 0x80423ba6 /* V11 */ +#define MUIM_Application_OpenConfigWindow 0x804299ba /* V11 */ +#define MUIM_Application_PushMethod 0x80429ef8 /* V4 */ +#define MUIM_Application_RemInputHandler 0x8042e7af /* V11 */ +#define MUIM_Application_ReturnID 0x804276ef /* V4 */ +#define MUIM_Application_Save 0x804227ef /* V4 */ +#define MUIM_Application_SetConfigItem 0x80424a80 /* V11 */ +#ifdef MUI_OBSOLETE +#define MUIM_Application_SetMenuCheck 0x8042a707 /* V4 */ +#endif /* MUI_OBSOLETE */ +#ifdef MUI_OBSOLETE +#define MUIM_Application_SetMenuState 0x80428bef /* V4 */ +#endif /* MUI_OBSOLETE */ +#define MUIM_Application_ShowHelp 0x80426479 /* V4 */ +struct MUIP_Application_AboutMUI { ULONG MethodID; Object *refwindow; }; +struct MUIP_Application_AddInputHandler { ULONG MethodID; struct MUI_InputHandlerNode *ihnode; }; +struct MUIP_Application_CheckRefresh { ULONG MethodID; }; +struct MUIP_Application_GetMenuCheck { ULONG MethodID; ULONG MenuID; }; +struct MUIP_Application_GetMenuState { ULONG MethodID; ULONG MenuID; }; +struct MUIP_Application_Input { ULONG MethodID; LONGBITS *signal; }; +struct MUIP_Application_InputBuffered { ULONG MethodID; }; +struct MUIP_Application_Load { ULONG MethodID; STRPTR name; }; +struct MUIP_Application_NewInput { ULONG MethodID; LONGBITS *signal; }; +struct MUIP_Application_OpenConfigWindow { ULONG MethodID; ULONG flags; }; +struct MUIP_Application_PushMethod { ULONG MethodID; Object *dest; LONG count; /* ... */ }; +struct MUIP_Application_RemInputHandler { ULONG MethodID; struct MUI_InputHandlerNode *ihnode; }; +struct MUIP_Application_ReturnID { ULONG MethodID; ULONG retid; }; +struct MUIP_Application_Save { ULONG MethodID; STRPTR name; }; +struct MUIP_Application_SetConfigItem { ULONG MethodID; ULONG item; APTR data; }; +struct MUIP_Application_SetMenuCheck { ULONG MethodID; ULONG MenuID; LONG stat; }; +struct MUIP_Application_SetMenuState { ULONG MethodID; ULONG MenuID; LONG stat; }; +struct MUIP_Application_ShowHelp { ULONG MethodID; Object *window; char *name; char *node; LONG line; }; + +/* Attributes */ + +#define MUIA_Application_Active 0x804260ab /* V4 isg BOOL */ +#define MUIA_Application_Author 0x80424842 /* V4 i.g STRPTR */ +#define MUIA_Application_Base 0x8042e07a /* V4 i.g STRPTR */ +#define MUIA_Application_Broker 0x8042dbce /* V4 ..g Broker * */ +#define MUIA_Application_BrokerHook 0x80428f4b /* V4 isg struct Hook * */ +#define MUIA_Application_BrokerPort 0x8042e0ad /* V6 ..g struct MsgPort * */ +#define MUIA_Application_BrokerPri 0x8042c8d0 /* V6 i.g LONG */ +#define MUIA_Application_Commands 0x80428648 /* V4 isg struct MUI_Command * */ +#define MUIA_Application_Copyright 0x8042ef4d /* V4 i.g STRPTR */ +#define MUIA_Application_Description 0x80421fc6 /* V4 i.g STRPTR */ +#define MUIA_Application_DiskObject 0x804235cb /* V4 isg struct DiskObject * */ +#define MUIA_Application_DoubleStart 0x80423bc6 /* V4 ..g BOOL */ +#define MUIA_Application_DropObject 0x80421266 /* V5 is. Object * */ +#define MUIA_Application_ForceQuit 0x804257df /* V8 ..g BOOL */ +#define MUIA_Application_HelpFile 0x804293f4 /* V8 isg STRPTR */ +#define MUIA_Application_Iconified 0x8042a07f /* V4 .sg BOOL */ +#ifdef MUI_OBSOLETE +#define MUIA_Application_Menu 0x80420e1f /* V4 i.g struct NewMenu * */ +#endif /* MUI_OBSOLETE */ +#define MUIA_Application_MenuAction 0x80428961 /* V4 ..g ULONG */ +#define MUIA_Application_MenuHelp 0x8042540b /* V4 ..g ULONG */ +#define MUIA_Application_Menustrip 0x804252d9 /* V8 i.. Object * */ +#define MUIA_Application_RexxHook 0x80427c42 /* V7 isg struct Hook * */ +#define MUIA_Application_RexxMsg 0x8042fd88 /* V4 ..g struct RxMsg * */ +#define MUIA_Application_RexxString 0x8042d711 /* V4 .s. STRPTR */ +#define MUIA_Application_SingleTask 0x8042a2c8 /* V4 i.. BOOL */ +#define MUIA_Application_Sleep 0x80425711 /* V4 .s. BOOL */ +#define MUIA_Application_Title 0x804281b8 /* V4 i.g STRPTR */ +#define MUIA_Application_UseCommodities 0x80425ee5 /* V10 i.. BOOL */ +#define MUIA_Application_UseRexx 0x80422387 /* V10 i.. BOOL */ +#define MUIA_Application_Version 0x8042b33f /* V4 i.g STRPTR */ +#define MUIA_Application_Window 0x8042bfe0 /* V4 i.. Object * */ +#define MUIA_Application_WindowList 0x80429abe /* V13 ..g struct List * */ + +#define MUIV_Application_Package_NetConnect 0xa3ff7b49 + + +/****************************************************************************/ +/** Window **/ +/****************************************************************************/ + +#ifdef _DCC +extern char MUIC_Window[]; +#else +#define MUIC_Window "Window.mui" +#endif + +/* Methods */ + +#define MUIM_Window_AddEventHandler 0x804203b7 /* V16 */ +#ifdef MUI_OBSOLETE +#define MUIM_Window_GetMenuCheck 0x80420414 /* V4 */ +#endif /* MUI_OBSOLETE */ +#ifdef MUI_OBSOLETE +#define MUIM_Window_GetMenuState 0x80420d2f /* V4 */ +#endif /* MUI_OBSOLETE */ +#define MUIM_Window_RemEventHandler 0x8042679e /* V16 */ +#define MUIM_Window_ScreenToBack 0x8042913d /* V4 */ +#define MUIM_Window_ScreenToFront 0x804227a4 /* V4 */ +#ifdef MUI_OBSOLETE +#define MUIM_Window_SetCycleChain 0x80426510 /* V4 */ +#endif /* MUI_OBSOLETE */ +#ifdef MUI_OBSOLETE +#define MUIM_Window_SetMenuCheck 0x80422243 /* V4 */ +#endif /* MUI_OBSOLETE */ +#ifdef MUI_OBSOLETE +#define MUIM_Window_SetMenuState 0x80422b5e /* V4 */ +#endif /* MUI_OBSOLETE */ +#define MUIM_Window_Snapshot 0x8042945e /* V11 */ +#define MUIM_Window_ToBack 0x8042152e /* V4 */ +#define MUIM_Window_ToFront 0x8042554f /* V4 */ +struct MUIP_Window_AddEventHandler { ULONG MethodID; struct MUI_EventHandlerNode *ehnode; }; +struct MUIP_Window_GetMenuCheck { ULONG MethodID; ULONG MenuID; }; +struct MUIP_Window_GetMenuState { ULONG MethodID; ULONG MenuID; }; +struct MUIP_Window_RemEventHandler { ULONG MethodID; struct MUI_EventHandlerNode *ehnode; }; +struct MUIP_Window_ScreenToBack { ULONG MethodID; }; +struct MUIP_Window_ScreenToFront { ULONG MethodID; }; +struct MUIP_Window_SetCycleChain { ULONG MethodID; Object *obj[1]; }; +struct MUIP_Window_SetMenuCheck { ULONG MethodID; ULONG MenuID; LONG stat; }; +struct MUIP_Window_SetMenuState { ULONG MethodID; ULONG MenuID; LONG stat; }; +struct MUIP_Window_Snapshot { ULONG MethodID; LONG flags; }; +struct MUIP_Window_ToBack { ULONG MethodID; }; +struct MUIP_Window_ToFront { ULONG MethodID; }; + +/* Attributes */ + +#define MUIA_Window_Activate 0x80428d2f /* V4 isg BOOL */ +#define MUIA_Window_ActiveObject 0x80427925 /* V4 .sg Object * */ +#define MUIA_Window_AltHeight 0x8042cce3 /* V4 i.g LONG */ +#define MUIA_Window_AltLeftEdge 0x80422d65 /* V4 i.g LONG */ +#define MUIA_Window_AltTopEdge 0x8042e99b /* V4 i.g LONG */ +#define MUIA_Window_AltWidth 0x804260f4 /* V4 i.g LONG */ +#define MUIA_Window_AppWindow 0x804280cf /* V5 i.. BOOL */ +#define MUIA_Window_Backdrop 0x8042c0bb /* V4 i.. BOOL */ +#define MUIA_Window_Borderless 0x80429b79 /* V4 i.. BOOL */ +#define MUIA_Window_CloseGadget 0x8042a110 /* V4 i.. BOOL */ +#define MUIA_Window_CloseRequest 0x8042e86e /* V4 ..g BOOL */ +#define MUIA_Window_DefaultObject 0x804294d7 /* V4 isg Object * */ +#define MUIA_Window_DepthGadget 0x80421923 /* V4 i.. BOOL */ +#define MUIA_Window_DragBar 0x8042045d /* V4 i.. BOOL */ +#define MUIA_Window_FancyDrawing 0x8042bd0e /* V8 isg BOOL */ +#define MUIA_Window_Height 0x80425846 /* V4 i.g LONG */ +#define MUIA_Window_ID 0x804201bd /* V4 isg ULONG */ +#define MUIA_Window_InputEvent 0x804247d8 /* V4 ..g struct InputEvent * */ +#define MUIA_Window_IsSubWindow 0x8042b5aa /* V4 isg BOOL */ +#define MUIA_Window_LeftEdge 0x80426c65 /* V4 i.g LONG */ +#ifdef MUI_OBSOLETE +#define MUIA_Window_Menu 0x8042db94 /* V4 i.. struct NewMenu * */ +#endif /* MUI_OBSOLETE */ +#define MUIA_Window_MenuAction 0x80427521 /* V8 isg ULONG */ +#define MUIA_Window_Menustrip 0x8042855e /* V8 i.g Object * */ +#define MUIA_Window_MouseObject 0x8042bf9b /* V10 ..g Object * */ +#define MUIA_Window_NeedsMouseObject 0x8042372a /* V10 i.. BOOL */ +#define MUIA_Window_NoMenus 0x80429df5 /* V4 is. BOOL */ +#define MUIA_Window_Open 0x80428aa0 /* V4 .sg BOOL */ +#define MUIA_Window_PublicScreen 0x804278e4 /* V6 isg STRPTR */ +#define MUIA_Window_RefWindow 0x804201f4 /* V4 is. Object * */ +#define MUIA_Window_RootObject 0x8042cba5 /* V4 isg Object * */ +#define MUIA_Window_Screen 0x8042df4f /* V4 isg struct Screen * */ +#define MUIA_Window_ScreenTitle 0x804234b0 /* V5 isg STRPTR */ +#define MUIA_Window_SizeGadget 0x8042e33d /* V4 i.. BOOL */ +#define MUIA_Window_SizeRight 0x80424780 /* V4 i.. BOOL */ +#define MUIA_Window_Sleep 0x8042e7db /* V4 .sg BOOL */ +#define MUIA_Window_Title 0x8042ad3d /* V4 isg STRPTR */ +#define MUIA_Window_TopEdge 0x80427c66 /* V4 i.g LONG */ +#define MUIA_Window_UseBottomBorderScroller 0x80424e79 /* V13 isg BOOL */ +#define MUIA_Window_UseLeftBorderScroller 0x8042433e /* V13 isg BOOL */ +#define MUIA_Window_UseRightBorderScroller 0x8042c05e /* V13 isg BOOL */ +#define MUIA_Window_Width 0x8042dcae /* V4 i.g LONG */ +#define MUIA_Window_Window 0x80426a42 /* V4 ..g struct Window * */ + +#define MUIV_Window_ActiveObject_None 0 +#define MUIV_Window_ActiveObject_Next -1 +#define MUIV_Window_ActiveObject_Prev -2 +#define MUIV_Window_AltHeight_MinMax(p) (0-(p)) +#define MUIV_Window_AltHeight_Visible(p) (-100-(p)) +#define MUIV_Window_AltHeight_Screen(p) (-200-(p)) +#define MUIV_Window_AltHeight_Scaled -1000 +#define MUIV_Window_AltLeftEdge_Centered -1 +#define MUIV_Window_AltLeftEdge_Moused -2 +#define MUIV_Window_AltLeftEdge_NoChange -1000 +#define MUIV_Window_AltTopEdge_Centered -1 +#define MUIV_Window_AltTopEdge_Moused -2 +#define MUIV_Window_AltTopEdge_Delta(p) (-3-(p)) +#define MUIV_Window_AltTopEdge_NoChange -1000 +#define MUIV_Window_AltWidth_MinMax(p) (0-(p)) +#define MUIV_Window_AltWidth_Visible(p) (-100-(p)) +#define MUIV_Window_AltWidth_Screen(p) (-200-(p)) +#define MUIV_Window_AltWidth_Scaled -1000 +#define MUIV_Window_Height_MinMax(p) (0-(p)) +#define MUIV_Window_Height_Visible(p) (-100-(p)) +#define MUIV_Window_Height_Screen(p) (-200-(p)) +#define MUIV_Window_Height_Scaled -1000 +#define MUIV_Window_Height_Default -1001 +#define MUIV_Window_LeftEdge_Centered -1 +#define MUIV_Window_LeftEdge_Moused -2 +#ifdef MUI_OBSOLETE +#define MUIV_Window_Menu_NoMenu -1 +#endif /* MUI_OBSOLETE */ +#define MUIV_Window_TopEdge_Centered -1 +#define MUIV_Window_TopEdge_Moused -2 +#define MUIV_Window_TopEdge_Delta(p) (-3-(p)) +#define MUIV_Window_Width_MinMax(p) (0-(p)) +#define MUIV_Window_Width_Visible(p) (-100-(p)) +#define MUIV_Window_Width_Screen(p) (-200-(p)) +#define MUIV_Window_Width_Scaled -1000 +#define MUIV_Window_Width_Default -1001 + + +/****************************************************************************/ +/** Aboutmui **/ +/****************************************************************************/ + +#ifdef _DCC +extern char MUIC_Aboutmui[]; +#else +#define MUIC_Aboutmui "Aboutmui.mui" +#endif + +/* Methods */ + + +/* Attributes */ + +#define MUIA_Aboutmui_Application 0x80422523 /* V11 i.. Object * */ + + + +/****************************************************************************/ +/** Area **/ +/****************************************************************************/ + +#ifdef _DCC +extern char MUIC_Area[]; +#else +#define MUIC_Area "Area.mui" +#endif + +/* Methods */ + +#define MUIM_AskMinMax 0x80423874 /* Custom Class */ /* V4 */ +#define MUIM_Cleanup 0x8042d985 /* Custom Class */ /* V4 */ +#define MUIM_ContextMenuBuild 0x80429d2e /* V11 */ +#define MUIM_ContextMenuChoice 0x80420f0e /* V11 */ +#define MUIM_CreateBubble 0x80421c41 /* V18 */ +#define MUIM_CreateShortHelp 0x80428e93 /* V11 */ +#define MUIM_DeleteBubble 0x804211af /* V18 */ +#define MUIM_DeleteShortHelp 0x8042d35a /* V11 */ +#define MUIM_DragBegin 0x8042c03a /* V11 */ +#define MUIM_DragDrop 0x8042c555 /* V11 */ +#define MUIM_DragFinish 0x804251f0 /* V11 */ +#define MUIM_DragQuery 0x80420261 /* V11 */ +#define MUIM_DragReport 0x8042edad /* V11 */ +#define MUIM_Draw 0x80426f3f /* Custom Class */ /* V4 */ +#define MUIM_DrawBackground 0x804238ca /* V11 */ +#define MUIM_HandleEvent 0x80426d66 /* Custom Class */ /* V16 */ +#define MUIM_HandleInput 0x80422a1a /* Custom Class */ /* V4 */ +#define MUIM_Hide 0x8042f20f /* Custom Class */ /* V4 */ +#define MUIM_Setup 0x80428354 /* Custom Class */ /* V4 */ +#define MUIM_Show 0x8042cc84 /* Custom Class */ /* V4 */ +struct MUIP_AskMinMax { ULONG MethodID; struct MUI_MinMax *MinMaxInfo; }; /* Custom Class */ +struct MUIP_Cleanup { ULONG MethodID; }; /* Custom Class */ +struct MUIP_ContextMenuBuild { ULONG MethodID; LONG mx; LONG my; }; +struct MUIP_ContextMenuChoice { ULONG MethodID; Object *item; }; +struct MUIP_CreateBubble { ULONG MethodID; LONG x; LONG y; char *txt; ULONG flags; }; +struct MUIP_CreateShortHelp { ULONG MethodID; LONG mx; LONG my; }; +struct MUIP_DeleteBubble { ULONG MethodID; APTR bubble; }; +struct MUIP_DeleteShortHelp { ULONG MethodID; STRPTR help; }; +struct MUIP_DragBegin { ULONG MethodID; Object *obj; }; +struct MUIP_DragDrop { ULONG MethodID; Object *obj; LONG x; LONG y; }; +struct MUIP_DragFinish { ULONG MethodID; Object *obj; }; +struct MUIP_DragQuery { ULONG MethodID; Object *obj; }; +struct MUIP_DragReport { ULONG MethodID; Object *obj; LONG x; LONG y; LONG update; }; +struct MUIP_Draw { ULONG MethodID; ULONG flags; }; /* Custom Class */ +struct MUIP_DrawBackground { ULONG MethodID; LONG left; LONG top; LONG width; LONG height; LONG xoffset; LONG yoffset; LONG flags; }; +struct MUIP_HandleEvent { ULONG MethodID; struct IntuiMessage *imsg; LONG muikey; }; /* Custom Class */ +struct MUIP_HandleInput { ULONG MethodID; struct IntuiMessage *imsg; LONG muikey; }; /* Custom Class */ +struct MUIP_Hide { ULONG MethodID; }; /* Custom Class */ +struct MUIP_Setup { ULONG MethodID; struct MUI_RenderInfo *RenderInfo; }; /* Custom Class */ +struct MUIP_Show { ULONG MethodID; }; /* Custom Class */ + +/* Attributes */ + +#define MUIA_Background 0x8042545b /* V4 is. LONG */ +#define MUIA_BottomEdge 0x8042e552 /* V4 ..g LONG */ +#define MUIA_ContextMenu 0x8042b704 /* V11 isg Object * */ +#define MUIA_ContextMenuTrigger 0x8042a2c1 /* V11 ..g Object * */ +#define MUIA_ControlChar 0x8042120b /* V4 isg char */ +#define MUIA_CycleChain 0x80421ce7 /* V11 isg LONG */ +#define MUIA_Disabled 0x80423661 /* V4 isg BOOL */ +#define MUIA_Draggable 0x80420b6e /* V11 isg BOOL */ +#define MUIA_Dropable 0x8042fbce /* V11 isg BOOL */ +#ifdef MUI_OBSOLETE +#define MUIA_ExportID 0x8042d76e /* V4 isg ULONG */ +#endif /* MUI_OBSOLETE */ +#define MUIA_FillArea 0x804294a3 /* V4 is. BOOL */ +#define MUIA_FixHeight 0x8042a92b /* V4 i.. LONG */ +#define MUIA_FixHeightTxt 0x804276f2 /* V4 i.. STRPTR */ +#define MUIA_FixWidth 0x8042a3f1 /* V4 i.. LONG */ +#define MUIA_FixWidthTxt 0x8042d044 /* V4 i.. STRPTR */ +#define MUIA_Font 0x8042be50 /* V4 i.g struct TextFont * */ +#define MUIA_Frame 0x8042ac64 /* V4 i.. LONG */ +#define MUIA_FramePhantomHoriz 0x8042ed76 /* V4 i.. BOOL */ +#define MUIA_FrameTitle 0x8042d1c7 /* V4 i.. STRPTR */ +#define MUIA_Height 0x80423237 /* V4 ..g LONG */ +#define MUIA_HorizDisappear 0x80429615 /* V11 isg LONG */ +#define MUIA_HorizWeight 0x80426db9 /* V4 isg WORD */ +#define MUIA_InnerBottom 0x8042f2c0 /* V4 i.g LONG */ +#define MUIA_InnerLeft 0x804228f8 /* V4 i.g LONG */ +#define MUIA_InnerRight 0x804297ff /* V4 i.g LONG */ +#define MUIA_InnerTop 0x80421eb6 /* V4 i.g LONG */ +#define MUIA_InputMode 0x8042fb04 /* V4 i.. LONG */ +#define MUIA_LeftEdge 0x8042bec6 /* V4 ..g LONG */ +#define MUIA_MaxHeight 0x804293e4 /* V11 i.. LONG */ +#define MUIA_MaxWidth 0x8042f112 /* V11 i.. LONG */ +#define MUIA_Pressed 0x80423535 /* V4 ..g BOOL */ +#define MUIA_RightEdge 0x8042ba82 /* V4 ..g LONG */ +#define MUIA_Selected 0x8042654b /* V4 isg BOOL */ +#define MUIA_ShortHelp 0x80428fe3 /* V11 isg STRPTR */ +#define MUIA_ShowMe 0x80429ba8 /* V4 isg BOOL */ +#define MUIA_ShowSelState 0x8042caac /* V4 i.. BOOL */ +#define MUIA_Timer 0x80426435 /* V4 ..g LONG */ +#define MUIA_TopEdge 0x8042509b /* V4 ..g LONG */ +#define MUIA_VertDisappear 0x8042d12f /* V11 isg LONG */ +#define MUIA_VertWeight 0x804298d0 /* V4 isg WORD */ +#define MUIA_Weight 0x80421d1f /* V4 i.. WORD */ +#define MUIA_Width 0x8042b59c /* V4 ..g LONG */ +#define MUIA_Window 0x80421591 /* V4 ..g struct Window * */ +#define MUIA_WindowObject 0x8042669e /* V4 ..g Object * */ + +#define MUIV_Font_Inherit 0 +#define MUIV_Font_Normal -1 +#define MUIV_Font_List -2 +#define MUIV_Font_Tiny -3 +#define MUIV_Font_Fixed -4 +#define MUIV_Font_Title -5 +#define MUIV_Font_Big -6 +#define MUIV_Font_Button -7 +#define MUIV_Frame_None 0 +#define MUIV_Frame_Button 1 +#define MUIV_Frame_ImageButton 2 +#define MUIV_Frame_Text 3 +#define MUIV_Frame_String 4 +#define MUIV_Frame_ReadList 5 +#define MUIV_Frame_InputList 6 +#define MUIV_Frame_Prop 7 +#define MUIV_Frame_Gauge 8 +#define MUIV_Frame_Group 9 +#define MUIV_Frame_PopUp 10 +#define MUIV_Frame_Virtual 11 +#define MUIV_Frame_Slider 12 +#define MUIV_Frame_Count 13 +#define MUIV_InputMode_None 0 +#define MUIV_InputMode_RelVerify 1 +#define MUIV_InputMode_Immediate 2 +#define MUIV_InputMode_Toggle 3 + + +/****************************************************************************/ +/** Rectangle **/ +/****************************************************************************/ + +#ifdef _DCC +extern char MUIC_Rectangle[]; +#else +#define MUIC_Rectangle "Rectangle.mui" +#endif + +/* Attributes */ + +#define MUIA_Rectangle_BarTitle 0x80426689 /* V11 i.g STRPTR */ +#define MUIA_Rectangle_HBar 0x8042c943 /* V7 i.g BOOL */ +#define MUIA_Rectangle_VBar 0x80422204 /* V7 i.g BOOL */ + + + +/****************************************************************************/ +/** Balance **/ +/****************************************************************************/ + +#ifdef _DCC +extern char MUIC_Balance[]; +#else +#define MUIC_Balance "Balance.mui" +#endif + + +/****************************************************************************/ +/** Image **/ +/****************************************************************************/ + +#ifdef _DCC +extern char MUIC_Image[]; +#else +#define MUIC_Image "Image.mui" +#endif + +/* Attributes */ + +#define MUIA_Image_FontMatch 0x8042815d /* V4 i.. BOOL */ +#define MUIA_Image_FontMatchHeight 0x80429f26 /* V4 i.. BOOL */ +#define MUIA_Image_FontMatchWidth 0x804239bf /* V4 i.. BOOL */ +#define MUIA_Image_FreeHoriz 0x8042da84 /* V4 i.. BOOL */ +#define MUIA_Image_FreeVert 0x8042ea28 /* V4 i.. BOOL */ +#define MUIA_Image_OldImage 0x80424f3d /* V4 i.. struct Image * */ +#define MUIA_Image_Spec 0x804233d5 /* V4 i.. char * */ +#define MUIA_Image_State 0x8042a3ad /* V4 is. LONG */ + + + +/****************************************************************************/ +/** Bitmap **/ +/****************************************************************************/ + +#ifdef _DCC +extern char MUIC_Bitmap[]; +#else +#define MUIC_Bitmap "Bitmap.mui" +#endif + +/* Attributes */ + +#define MUIA_Bitmap_Bitmap 0x804279bd /* V8 isg struct BitMap * */ +#define MUIA_Bitmap_Height 0x80421560 /* V8 isg LONG */ +#define MUIA_Bitmap_MappingTable 0x8042e23d /* V8 isg UBYTE * */ +#define MUIA_Bitmap_Precision 0x80420c74 /* V11 isg LONG */ +#define MUIA_Bitmap_RemappedBitmap 0x80423a47 /* V11 ..g struct BitMap * */ +#define MUIA_Bitmap_SourceColors 0x80425360 /* V8 isg ULONG * */ +#define MUIA_Bitmap_Transparent 0x80422805 /* V8 isg LONG */ +#define MUIA_Bitmap_UseFriend 0x804239d8 /* V11 i.. BOOL */ +#define MUIA_Bitmap_Width 0x8042eb3a /* V8 isg LONG */ + + + +/****************************************************************************/ +/** Bodychunk **/ +/****************************************************************************/ + +#ifdef _DCC +extern char MUIC_Bodychunk[]; +#else +#define MUIC_Bodychunk "Bodychunk.mui" +#endif + +/* Attributes */ + +#define MUIA_Bodychunk_Body 0x8042ca67 /* V8 isg UBYTE * */ +#define MUIA_Bodychunk_Compression 0x8042de5f /* V8 isg UBYTE */ +#define MUIA_Bodychunk_Depth 0x8042c392 /* V8 isg LONG */ +#define MUIA_Bodychunk_Masking 0x80423b0e /* V8 isg UBYTE */ + + + +/****************************************************************************/ +/** Text **/ +/****************************************************************************/ + +#ifdef _DCC +extern char MUIC_Text[]; +#else +#define MUIC_Text "Text.mui" +#endif + +/* Attributes */ + +#define MUIA_Text_Contents 0x8042f8dc /* V4 isg STRPTR */ +#define MUIA_Text_HiChar 0x804218ff /* V4 i.. char */ +#define MUIA_Text_PreParse 0x8042566d /* V4 isg STRPTR */ +#define MUIA_Text_SetMax 0x80424d0a /* V4 i.. BOOL */ +#define MUIA_Text_SetMin 0x80424e10 /* V4 i.. BOOL */ +#define MUIA_Text_SetVMax 0x80420d8b /* V11 i.. BOOL */ + + + +/****************************************************************************/ +/** Gadget **/ +/****************************************************************************/ + +#ifdef _DCC +extern char MUIC_Gadget[]; +#else +#define MUIC_Gadget "Gadget.mui" +#endif + +/* Attributes */ + +#define MUIA_Gadget_Gadget 0x8042ec1a /* V11 ..g struct Gadget * */ + + + +/****************************************************************************/ +/** String **/ +/****************************************************************************/ + +#ifdef _DCC +extern char MUIC_String[]; +#else +#define MUIC_String "String.mui" +#endif + +/* Methods */ + + +/* Attributes */ + +#define MUIA_String_Accept 0x8042e3e1 /* V4 isg STRPTR */ +#define MUIA_String_Acknowledge 0x8042026c /* V4 ..g STRPTR */ +#define MUIA_String_AdvanceOnCR 0x804226de /* V11 isg BOOL */ +#define MUIA_String_AttachedList 0x80420fd2 /* V4 isg Object * */ +#define MUIA_String_BufferPos 0x80428b6c /* V4 .sg LONG */ +#define MUIA_String_Contents 0x80428ffd /* V4 isg STRPTR */ +#define MUIA_String_DisplayPos 0x8042ccbf /* V4 .sg LONG */ +#define MUIA_String_EditHook 0x80424c33 /* V7 isg struct Hook * */ +#define MUIA_String_Format 0x80427484 /* V4 i.g LONG */ +#define MUIA_String_Integer 0x80426e8a /* V4 isg ULONG */ +#define MUIA_String_LonelyEditHook 0x80421569 /* V11 isg BOOL */ +#define MUIA_String_MaxLen 0x80424984 /* V4 i.g LONG */ +#define MUIA_String_Reject 0x8042179c /* V4 isg STRPTR */ +#define MUIA_String_Secret 0x80428769 /* V4 i.g BOOL */ + +#define MUIV_String_Format_Left 0 +#define MUIV_String_Format_Center 1 +#define MUIV_String_Format_Right 2 + + +/****************************************************************************/ +/** Boopsi **/ +/****************************************************************************/ + +#ifdef _DCC +extern char MUIC_Boopsi[]; +#else +#define MUIC_Boopsi "Boopsi.mui" +#endif + +/* Attributes */ + +#define MUIA_Boopsi_Class 0x80426999 /* V4 isg struct IClass * */ +#define MUIA_Boopsi_ClassID 0x8042bfa3 /* V4 isg char * */ +#define MUIA_Boopsi_MaxHeight 0x8042757f /* V4 isg ULONG */ +#define MUIA_Boopsi_MaxWidth 0x8042bcb1 /* V4 isg ULONG */ +#define MUIA_Boopsi_MinHeight 0x80422c93 /* V4 isg ULONG */ +#define MUIA_Boopsi_MinWidth 0x80428fb2 /* V4 isg ULONG */ +#define MUIA_Boopsi_Object 0x80420178 /* V4 ..g Object * */ +#define MUIA_Boopsi_Remember 0x8042f4bd /* V4 i.. ULONG */ +#define MUIA_Boopsi_Smart 0x8042b8d7 /* V9 i.. BOOL */ +#define MUIA_Boopsi_TagDrawInfo 0x8042bae7 /* V4 isg ULONG */ +#define MUIA_Boopsi_TagScreen 0x8042bc71 /* V4 isg ULONG */ +#define MUIA_Boopsi_TagWindow 0x8042e11d /* V4 isg ULONG */ + + + +/****************************************************************************/ +/** Prop **/ +/****************************************************************************/ + +#ifdef _DCC +extern char MUIC_Prop[]; +#else +#define MUIC_Prop "Prop.mui" +#endif + +/* Methods */ + +#define MUIM_Prop_Decrease 0x80420dd1 /* V16 */ +#define MUIM_Prop_Increase 0x8042cac0 /* V16 */ +struct MUIP_Prop_Decrease { ULONG MethodID; LONG amount; }; +struct MUIP_Prop_Increase { ULONG MethodID; LONG amount; }; + +/* Attributes */ + +#define MUIA_Prop_Entries 0x8042fbdb /* V4 isg LONG */ +#define MUIA_Prop_First 0x8042d4b2 /* V4 isg LONG */ +#define MUIA_Prop_Horiz 0x8042f4f3 /* V4 i.g BOOL */ +#define MUIA_Prop_Slider 0x80429c3a /* V4 isg BOOL */ +#define MUIA_Prop_UseWinBorder 0x8042deee /* V13 i.. LONG */ +#define MUIA_Prop_Visible 0x8042fea6 /* V4 isg LONG */ + +#define MUIV_Prop_UseWinBorder_None 0 +#define MUIV_Prop_UseWinBorder_Left 1 +#define MUIV_Prop_UseWinBorder_Right 2 +#define MUIV_Prop_UseWinBorder_Bottom 3 + + +/****************************************************************************/ +/** Gauge **/ +/****************************************************************************/ + +#ifdef _DCC +extern char MUIC_Gauge[]; +#else +#define MUIC_Gauge "Gauge.mui" +#endif + +/* Attributes */ + +#define MUIA_Gauge_Current 0x8042f0dd /* V4 isg LONG */ +#define MUIA_Gauge_Divide 0x8042d8df /* V4 isg BOOL */ +#define MUIA_Gauge_Horiz 0x804232dd /* V4 i.. BOOL */ +#define MUIA_Gauge_InfoText 0x8042bf15 /* V7 isg STRPTR */ +#define MUIA_Gauge_Max 0x8042bcdb /* V4 isg LONG */ + + + +/****************************************************************************/ +/** Scale **/ +/****************************************************************************/ + +#ifdef _DCC +extern char MUIC_Scale[]; +#else +#define MUIC_Scale "Scale.mui" +#endif + +/* Attributes */ + +#define MUIA_Scale_Horiz 0x8042919a /* V4 isg BOOL */ + + + +/****************************************************************************/ +/** Colorfield **/ +/****************************************************************************/ + +#ifdef _DCC +extern char MUIC_Colorfield[]; +#else +#define MUIC_Colorfield "Colorfield.mui" +#endif + +/* Attributes */ + +#define MUIA_Colorfield_Blue 0x8042d3b0 /* V4 isg ULONG */ +#define MUIA_Colorfield_Green 0x80424466 /* V4 isg ULONG */ +#define MUIA_Colorfield_Pen 0x8042713a /* V4 ..g ULONG */ +#define MUIA_Colorfield_Red 0x804279f6 /* V4 isg ULONG */ +#define MUIA_Colorfield_RGB 0x8042677a /* V4 isg ULONG * */ + + + +/****************************************************************************/ +/** List **/ +/****************************************************************************/ + +#ifdef _DCC +extern char MUIC_List[]; +#else +#define MUIC_List "List.mui" +#endif + +/* Methods */ + +#define MUIM_List_Clear 0x8042ad89 /* V4 */ +#define MUIM_List_CreateImage 0x80429804 /* V11 */ +#define MUIM_List_DeleteImage 0x80420f58 /* V11 */ +#define MUIM_List_Exchange 0x8042468c /* V4 */ +#define MUIM_List_GetEntry 0x804280ec /* V4 */ +#define MUIM_List_Insert 0x80426c87 /* V4 */ +#define MUIM_List_InsertSingle 0x804254d5 /* V7 */ +#define MUIM_List_Jump 0x8042baab /* V4 */ +#define MUIM_List_Move 0x804253c2 /* V9 */ +#define MUIM_List_NextSelected 0x80425f17 /* V6 */ +#define MUIM_List_Redraw 0x80427993 /* V4 */ +#define MUIM_List_Remove 0x8042647e /* V4 */ +#define MUIM_List_Select 0x804252d8 /* V4 */ +#define MUIM_List_Sort 0x80422275 /* V4 */ +#define MUIM_List_TestPos 0x80425f48 /* V11 */ +struct MUIP_List_Clear { ULONG MethodID; }; +struct MUIP_List_CreateImage { ULONG MethodID; Object *obj; ULONG flags; }; +struct MUIP_List_DeleteImage { ULONG MethodID; APTR listimg; }; +struct MUIP_List_Exchange { ULONG MethodID; LONG pos1; LONG pos2; }; +struct MUIP_List_GetEntry { ULONG MethodID; LONG pos; APTR *entry; }; +struct MUIP_List_Insert { ULONG MethodID; APTR *entries; LONG count; LONG pos; }; +struct MUIP_List_InsertSingle { ULONG MethodID; APTR entry; LONG pos; }; +struct MUIP_List_Jump { ULONG MethodID; LONG pos; }; +struct MUIP_List_Move { ULONG MethodID; LONG from; LONG to; }; +struct MUIP_List_NextSelected { ULONG MethodID; LONG *pos; }; +struct MUIP_List_Redraw { ULONG MethodID; LONG pos; }; +struct MUIP_List_Remove { ULONG MethodID; LONG pos; }; +struct MUIP_List_Select { ULONG MethodID; LONG pos; LONG seltype; LONG *state; }; +struct MUIP_List_Sort { ULONG MethodID; }; +struct MUIP_List_TestPos { ULONG MethodID; LONG x; LONG y; struct MUI_List_TestPos_Result *res; }; + +/* Attributes */ + +#define MUIA_List_Active 0x8042391c /* V4 isg LONG */ +#define MUIA_List_AdjustHeight 0x8042850d /* V4 i.. BOOL */ +#define MUIA_List_AdjustWidth 0x8042354a /* V4 i.. BOOL */ +#define MUIA_List_AutoVisible 0x8042a445 /* V11 isg BOOL */ +#define MUIA_List_CompareHook 0x80425c14 /* V4 is. struct Hook * */ +#define MUIA_List_ConstructHook 0x8042894f /* V4 is. struct Hook * */ +#define MUIA_List_DestructHook 0x804297ce /* V4 is. struct Hook * */ +#define MUIA_List_DisplayHook 0x8042b4d5 /* V4 is. struct Hook * */ +#define MUIA_List_DragSortable 0x80426099 /* V11 isg BOOL */ +#define MUIA_List_DropMark 0x8042aba6 /* V11 ..g LONG */ +#define MUIA_List_Entries 0x80421654 /* V4 ..g LONG */ +#define MUIA_List_First 0x804238d4 /* V4 ..g LONG */ +#define MUIA_List_Format 0x80423c0a /* V4 isg STRPTR */ +#define MUIA_List_InsertPosition 0x8042d0cd /* V9 ..g LONG */ +#define MUIA_List_MinLineHeight 0x8042d1c3 /* V4 i.. LONG */ +#define MUIA_List_MultiTestHook 0x8042c2c6 /* V4 is. struct Hook * */ +#define MUIA_List_Pool 0x80423431 /* V13 i.. APTR */ +#define MUIA_List_PoolPuddleSize 0x8042a4eb /* V13 i.. ULONG */ +#define MUIA_List_PoolThreshSize 0x8042c48c /* V13 i.. ULONG */ +#define MUIA_List_Quiet 0x8042d8c7 /* V4 .s. BOOL */ +#define MUIA_List_ShowDropMarks 0x8042c6f3 /* V11 isg BOOL */ +#define MUIA_List_SourceArray 0x8042c0a0 /* V4 i.. APTR */ +#define MUIA_List_Title 0x80423e66 /* V6 isg char * */ +#define MUIA_List_Visible 0x8042191f /* V4 ..g LONG */ + +#define MUIV_List_Active_Off -1 +#define MUIV_List_Active_Top -2 +#define MUIV_List_Active_Bottom -3 +#define MUIV_List_Active_Up -4 +#define MUIV_List_Active_Down -5 +#define MUIV_List_Active_PageUp -6 +#define MUIV_List_Active_PageDown -7 +#define MUIV_List_ConstructHook_String -1 +#define MUIV_List_CopyHook_String -1 +#define MUIV_List_CursorType_None 0 +#define MUIV_List_CursorType_Bar 1 +#define MUIV_List_CursorType_Rect 2 +#define MUIV_List_DestructHook_String -1 + + +/****************************************************************************/ +/** Floattext **/ +/****************************************************************************/ + +#ifdef _DCC +extern char MUIC_Floattext[]; +#else +#define MUIC_Floattext "Floattext.mui" +#endif + +/* Attributes */ + +#define MUIA_Floattext_Justify 0x8042dc03 /* V4 isg BOOL */ +#define MUIA_Floattext_SkipChars 0x80425c7d /* V4 is. STRPTR */ +#define MUIA_Floattext_TabSize 0x80427d17 /* V4 is. LONG */ +#define MUIA_Floattext_Text 0x8042d16a /* V4 isg STRPTR */ + + + +/****************************************************************************/ +/** Volumelist **/ +/****************************************************************************/ + +#ifdef _DCC +extern char MUIC_Volumelist[]; +#else +#define MUIC_Volumelist "Volumelist.mui" +#endif + + +/****************************************************************************/ +/** Scrmodelist **/ +/****************************************************************************/ + +#ifdef _DCC +extern char MUIC_Scrmodelist[]; +#else +#define MUIC_Scrmodelist "Scrmodelist.mui" +#endif + +/* Attributes */ + + + + +/****************************************************************************/ +/** Dirlist **/ +/****************************************************************************/ + +#ifdef _DCC +extern char MUIC_Dirlist[]; +#else +#define MUIC_Dirlist "Dirlist.mui" +#endif + +/* Methods */ + +#define MUIM_Dirlist_ReRead 0x80422d71 /* V4 */ +struct MUIP_Dirlist_ReRead { ULONG MethodID; }; + +/* Attributes */ + +#define MUIA_Dirlist_AcceptPattern 0x8042760a /* V4 is. STRPTR */ +#define MUIA_Dirlist_Directory 0x8042ea41 /* V4 isg STRPTR */ +#define MUIA_Dirlist_DrawersOnly 0x8042b379 /* V4 is. BOOL */ +#define MUIA_Dirlist_FilesOnly 0x8042896a /* V4 is. BOOL */ +#define MUIA_Dirlist_FilterDrawers 0x80424ad2 /* V4 is. BOOL */ +#define MUIA_Dirlist_FilterHook 0x8042ae19 /* V4 is. struct Hook * */ +#define MUIA_Dirlist_MultiSelDirs 0x80428653 /* V6 is. BOOL */ +#define MUIA_Dirlist_NumBytes 0x80429e26 /* V4 ..g LONG */ +#define MUIA_Dirlist_NumDrawers 0x80429cb8 /* V4 ..g LONG */ +#define MUIA_Dirlist_NumFiles 0x8042a6f0 /* V4 ..g LONG */ +#define MUIA_Dirlist_Path 0x80426176 /* V4 ..g STRPTR */ +#define MUIA_Dirlist_RejectIcons 0x80424808 /* V4 is. BOOL */ +#define MUIA_Dirlist_RejectPattern 0x804259c7 /* V4 is. STRPTR */ +#define MUIA_Dirlist_SortDirs 0x8042bbb9 /* V4 is. LONG */ +#define MUIA_Dirlist_SortHighLow 0x80421896 /* V4 is. BOOL */ +#define MUIA_Dirlist_SortType 0x804228bc /* V4 is. LONG */ +#define MUIA_Dirlist_Status 0x804240de /* V4 ..g LONG */ + +#define MUIV_Dirlist_SortDirs_First 0 +#define MUIV_Dirlist_SortDirs_Last 1 +#define MUIV_Dirlist_SortDirs_Mix 2 +#define MUIV_Dirlist_SortType_Name 0 +#define MUIV_Dirlist_SortType_Date 1 +#define MUIV_Dirlist_SortType_Size 2 +#define MUIV_Dirlist_Status_Invalid 0 +#define MUIV_Dirlist_Status_Reading 1 +#define MUIV_Dirlist_Status_Valid 2 + + +/****************************************************************************/ +/** Numeric **/ +/****************************************************************************/ + +#ifdef _DCC +extern char MUIC_Numeric[]; +#else +#define MUIC_Numeric "Numeric.mui" +#endif + +/* Methods */ + +#define MUIM_Numeric_Decrease 0x804243a7 /* V11 */ +#define MUIM_Numeric_Increase 0x80426ecd /* V11 */ +#define MUIM_Numeric_ScaleToValue 0x8042032c /* V11 */ +#define MUIM_Numeric_SetDefault 0x8042ab0a /* V11 */ +#define MUIM_Numeric_Stringify 0x80424891 /* V11 */ +#define MUIM_Numeric_ValueToScale 0x80423e4f /* V11 */ +struct MUIP_Numeric_Decrease { ULONG MethodID; LONG amount; }; +struct MUIP_Numeric_Increase { ULONG MethodID; LONG amount; }; +struct MUIP_Numeric_ScaleToValue { ULONG MethodID; LONG scalemin; LONG scalemax; LONG scale; }; +struct MUIP_Numeric_SetDefault { ULONG MethodID; }; +struct MUIP_Numeric_Stringify { ULONG MethodID; LONG value; }; +struct MUIP_Numeric_ValueToScale { ULONG MethodID; LONG scalemin; LONG scalemax; }; + +/* Attributes */ + +#define MUIA_Numeric_CheckAllSizes 0x80421594 /* V11 isg BOOL */ +#define MUIA_Numeric_Default 0x804263e8 /* V11 isg LONG */ +#define MUIA_Numeric_Format 0x804263e9 /* V11 isg STRPTR */ +#define MUIA_Numeric_Max 0x8042d78a /* V11 isg LONG */ +#define MUIA_Numeric_Min 0x8042e404 /* V11 isg LONG */ +#define MUIA_Numeric_Reverse 0x8042f2a0 /* V11 isg BOOL */ +#define MUIA_Numeric_RevLeftRight 0x804294a7 /* V11 isg BOOL */ +#define MUIA_Numeric_RevUpDown 0x804252dd /* V11 isg BOOL */ +#define MUIA_Numeric_Value 0x8042ae3a /* V11 isg LONG */ + + + +/****************************************************************************/ +/** Knob **/ +/****************************************************************************/ + +#ifdef _DCC +extern char MUIC_Knob[]; +#else +#define MUIC_Knob "Knob.mui" +#endif + + +/****************************************************************************/ +/** Levelmeter **/ +/****************************************************************************/ + +#ifdef _DCC +extern char MUIC_Levelmeter[]; +#else +#define MUIC_Levelmeter "Levelmeter.mui" +#endif + +/* Attributes */ + +#define MUIA_Levelmeter_Label 0x80420dd5 /* V11 isg STRPTR */ + + + +/****************************************************************************/ +/** Numericbutton **/ +/****************************************************************************/ + +#ifdef _DCC +extern char MUIC_Numericbutton[]; +#else +#define MUIC_Numericbutton "Numericbutton.mui" +#endif + + +/****************************************************************************/ +/** Slider **/ +/****************************************************************************/ + +#ifdef _DCC +extern char MUIC_Slider[]; +#else +#define MUIC_Slider "Slider.mui" +#endif + +/* Attributes */ + +#define MUIA_Slider_Horiz 0x8042fad1 /* V11 isg BOOL */ +#ifdef MUI_OBSOLETE +#define MUIA_Slider_Level 0x8042ae3a /* V4 isg LONG */ +#endif /* MUI_OBSOLETE */ +#ifdef MUI_OBSOLETE +#define MUIA_Slider_Max 0x8042d78a /* V4 isg LONG */ +#endif /* MUI_OBSOLETE */ +#ifdef MUI_OBSOLETE +#define MUIA_Slider_Min 0x8042e404 /* V4 isg LONG */ +#endif /* MUI_OBSOLETE */ +#define MUIA_Slider_Quiet 0x80420b26 /* V6 i.. BOOL */ +#ifdef MUI_OBSOLETE +#define MUIA_Slider_Reverse 0x8042f2a0 /* V4 isg BOOL */ +#endif /* MUI_OBSOLETE */ + + + +/****************************************************************************/ +/** Framedisplay **/ +/****************************************************************************/ + +#ifdef _DCC +extern char MUIC_Framedisplay[]; +#else +#define MUIC_Framedisplay "Framedisplay.mui" +#endif + +/* Attributes */ + + + + +/****************************************************************************/ +/** Popframe **/ +/****************************************************************************/ + +#ifdef _DCC +extern char MUIC_Popframe[]; +#else +#define MUIC_Popframe "Popframe.mui" +#endif + + +/****************************************************************************/ +/** Imagedisplay **/ +/****************************************************************************/ + +#ifdef _DCC +extern char MUIC_Imagedisplay[]; +#else +#define MUIC_Imagedisplay "Imagedisplay.mui" +#endif + +/* Attributes */ + + + + +/****************************************************************************/ +/** Popimage **/ +/****************************************************************************/ + +#ifdef _DCC +extern char MUIC_Popimage[]; +#else +#define MUIC_Popimage "Popimage.mui" +#endif + + +/****************************************************************************/ +/** Pendisplay **/ +/****************************************************************************/ + +#ifdef _DCC +extern char MUIC_Pendisplay[]; +#else +#define MUIC_Pendisplay "Pendisplay.mui" +#endif + +/* Methods */ + +#define MUIM_Pendisplay_SetColormap 0x80426c80 /* V13 */ +#define MUIM_Pendisplay_SetMUIPen 0x8042039d /* V13 */ +#define MUIM_Pendisplay_SetRGB 0x8042c131 /* V13 */ +struct MUIP_Pendisplay_SetColormap { ULONG MethodID; LONG colormap; }; +struct MUIP_Pendisplay_SetMUIPen { ULONG MethodID; LONG muipen; }; +struct MUIP_Pendisplay_SetRGB { ULONG MethodID; ULONG red; ULONG green; ULONG blue; }; + +/* Attributes */ + +#define MUIA_Pendisplay_Pen 0x8042a748 /* V13 ..g Object * */ +#define MUIA_Pendisplay_Reference 0x8042dc24 /* V13 isg Object * */ +#define MUIA_Pendisplay_RGBcolor 0x8042a1a9 /* V11 isg struct MUI_RGBcolor * */ +#define MUIA_Pendisplay_Spec 0x8042a204 /* V11 isg struct MUI_PenSpec * */ + + + +/****************************************************************************/ +/** Poppen **/ +/****************************************************************************/ + +#ifdef _DCC +extern char MUIC_Poppen[]; +#else +#define MUIC_Poppen "Poppen.mui" +#endif + + +/****************************************************************************/ +/** Group **/ +/****************************************************************************/ + +#ifdef _DCC +extern char MUIC_Group[]; +#else +#define MUIC_Group "Group.mui" +#endif + +/* Methods */ + +#define MUIM_Group_ExitChange 0x8042d1cc /* V11 */ +#define MUIM_Group_InitChange 0x80420887 /* V11 */ +#define MUIM_Group_Sort 0x80427417 /* V4 */ +struct MUIP_Group_ExitChange { ULONG MethodID; }; +struct MUIP_Group_InitChange { ULONG MethodID; }; +struct MUIP_Group_Sort { ULONG MethodID; Object *obj[1]; }; + +/* Attributes */ + +#define MUIA_Group_ActivePage 0x80424199 /* V5 isg LONG */ +#define MUIA_Group_Child 0x804226e6 /* V4 i.. Object * */ +#define MUIA_Group_ChildList 0x80424748 /* V4 ..g struct List * */ +#define MUIA_Group_Columns 0x8042f416 /* V4 is. LONG */ +#define MUIA_Group_Horiz 0x8042536b /* V4 i.. BOOL */ +#define MUIA_Group_HorizSpacing 0x8042c651 /* V4 isg LONG */ +#define MUIA_Group_LayoutHook 0x8042c3b2 /* V11 i.. struct Hook * */ +#define MUIA_Group_PageMode 0x80421a5f /* V5 i.. BOOL */ +#define MUIA_Group_Rows 0x8042b68f /* V4 is. LONG */ +#define MUIA_Group_SameHeight 0x8042037e /* V4 i.. BOOL */ +#define MUIA_Group_SameSize 0x80420860 /* V4 i.. BOOL */ +#define MUIA_Group_SameWidth 0x8042b3ec /* V4 i.. BOOL */ +#define MUIA_Group_Spacing 0x8042866d /* V4 is. LONG */ +#define MUIA_Group_VertSpacing 0x8042e1bf /* V4 isg LONG */ + +#define MUIV_Group_ActivePage_First 0 +#define MUIV_Group_ActivePage_Last -1 +#define MUIV_Group_ActivePage_Prev -2 +#define MUIV_Group_ActivePage_Next -3 +#define MUIV_Group_ActivePage_Advance -4 + + +/****************************************************************************/ +/** Mccprefs **/ +/****************************************************************************/ + +#ifdef _DCC +extern char MUIC_Mccprefs[]; +#else +#define MUIC_Mccprefs "Mccprefs.mui" +#endif + + +/****************************************************************************/ +/** Register **/ +/****************************************************************************/ + +#ifdef _DCC +extern char MUIC_Register[]; +#else +#define MUIC_Register "Register.mui" +#endif + +/* Attributes */ + +#define MUIA_Register_Frame 0x8042349b /* V7 i.g BOOL */ +#define MUIA_Register_Titles 0x804297ec /* V7 i.g STRPTR * */ + + + +/****************************************************************************/ +/** Penadjust **/ +/****************************************************************************/ + +#ifdef _DCC +extern char MUIC_Penadjust[]; +#else +#define MUIC_Penadjust "Penadjust.mui" +#endif + +/* Methods */ + + +/* Attributes */ + +#define MUIA_Penadjust_PSIMode 0x80421cbb /* V11 i.. BOOL */ + + + +/****************************************************************************/ +/** Settingsgroup **/ +/****************************************************************************/ + +#ifdef _DCC +extern char MUIC_Settingsgroup[]; +#else +#define MUIC_Settingsgroup "Settingsgroup.mui" +#endif + +/* Methods */ + +#define MUIM_Settingsgroup_ConfigToGadgets 0x80427043 /* V11 */ +#define MUIM_Settingsgroup_GadgetsToConfig 0x80425242 /* V11 */ +struct MUIP_Settingsgroup_ConfigToGadgets { ULONG MethodID; Object *configdata; }; +struct MUIP_Settingsgroup_GadgetsToConfig { ULONG MethodID; Object *configdata; }; + +/* Attributes */ + + + + +/****************************************************************************/ +/** Settings **/ +/****************************************************************************/ + +#ifdef _DCC +extern char MUIC_Settings[]; +#else +#define MUIC_Settings "Settings.mui" +#endif + +/* Methods */ + + +/* Attributes */ + + + + +/****************************************************************************/ +/** Frameadjust **/ +/****************************************************************************/ + +#ifdef _DCC +extern char MUIC_Frameadjust[]; +#else +#define MUIC_Frameadjust "Frameadjust.mui" +#endif + +/* Methods */ + + +/* Attributes */ + + + + +/****************************************************************************/ +/** Imageadjust **/ +/****************************************************************************/ + +#ifdef _DCC +extern char MUIC_Imageadjust[]; +#else +#define MUIC_Imageadjust "Imageadjust.mui" +#endif + +/* Methods */ + + +/* Attributes */ + + +#define MUIV_Imageadjust_Type_All 0 +#define MUIV_Imageadjust_Type_Image 1 +#define MUIV_Imageadjust_Type_Background 2 +#define MUIV_Imageadjust_Type_Pen 3 + + +/****************************************************************************/ +/** Virtgroup **/ +/****************************************************************************/ + +#ifdef _DCC +extern char MUIC_Virtgroup[]; +#else +#define MUIC_Virtgroup "Virtgroup.mui" +#endif + +/* Methods */ + + +/* Attributes */ + +#define MUIA_Virtgroup_Height 0x80423038 /* V6 ..g LONG */ +#define MUIA_Virtgroup_Input 0x80427f7e /* V11 i.. BOOL */ +#define MUIA_Virtgroup_Left 0x80429371 /* V6 isg LONG */ +#define MUIA_Virtgroup_Top 0x80425200 /* V6 isg LONG */ +#define MUIA_Virtgroup_Width 0x80427c49 /* V6 ..g LONG */ + + + +/****************************************************************************/ +/** Scrollgroup **/ +/****************************************************************************/ + +#ifdef _DCC +extern char MUIC_Scrollgroup[]; +#else +#define MUIC_Scrollgroup "Scrollgroup.mui" +#endif + +/* Methods */ + + +/* Attributes */ + +#define MUIA_Scrollgroup_Contents 0x80421261 /* V4 i.g Object * */ +#define MUIA_Scrollgroup_FreeHoriz 0x804292f3 /* V9 i.. BOOL */ +#define MUIA_Scrollgroup_FreeVert 0x804224f2 /* V9 i.. BOOL */ +#define MUIA_Scrollgroup_HorizBar 0x8042b63d /* V16 ..g Object * */ +#define MUIA_Scrollgroup_UseWinBorder 0x804284c1 /* V13 i.. BOOL */ +#define MUIA_Scrollgroup_VertBar 0x8042cdc0 /* V16 ..g Object * */ + + + +/****************************************************************************/ +/** Scrollbar **/ +/****************************************************************************/ + +#ifdef _DCC +extern char MUIC_Scrollbar[]; +#else +#define MUIC_Scrollbar "Scrollbar.mui" +#endif + +/* Attributes */ + +#define MUIA_Scrollbar_Type 0x8042fb6b /* V11 i.. LONG */ + +#define MUIV_Scrollbar_Type_Default 0 +#define MUIV_Scrollbar_Type_Bottom 1 +#define MUIV_Scrollbar_Type_Top 2 +#define MUIV_Scrollbar_Type_Sym 3 + + +/****************************************************************************/ +/** Listview **/ +/****************************************************************************/ + +#ifdef _DCC +extern char MUIC_Listview[]; +#else +#define MUIC_Listview "Listview.mui" +#endif + +/* Attributes */ + +#define MUIA_Listview_ClickColumn 0x8042d1b3 /* V7 ..g LONG */ +#define MUIA_Listview_DefClickColumn 0x8042b296 /* V7 isg LONG */ +#define MUIA_Listview_DoubleClick 0x80424635 /* V4 i.g BOOL */ +#define MUIA_Listview_DragType 0x80425cd3 /* V11 isg LONG */ +#define MUIA_Listview_Input 0x8042682d /* V4 i.. BOOL */ +#define MUIA_Listview_List 0x8042bcce /* V4 i.g Object * */ +#define MUIA_Listview_MultiSelect 0x80427e08 /* V7 i.. LONG */ +#define MUIA_Listview_ScrollerPos 0x8042b1b4 /* V10 i.. BOOL */ +#define MUIA_Listview_SelectChange 0x8042178f /* V4 ..g BOOL */ + +#define MUIV_Listview_DragType_None 0 +#define MUIV_Listview_DragType_Immediate 1 +#define MUIV_Listview_MultiSelect_None 0 +#define MUIV_Listview_MultiSelect_Default 1 +#define MUIV_Listview_MultiSelect_Shifted 2 +#define MUIV_Listview_MultiSelect_Always 3 +#define MUIV_Listview_ScrollerPos_Default 0 +#define MUIV_Listview_ScrollerPos_Left 1 +#define MUIV_Listview_ScrollerPos_Right 2 +#define MUIV_Listview_ScrollerPos_None 3 + + +/****************************************************************************/ +/** Radio **/ +/****************************************************************************/ + +#ifdef _DCC +extern char MUIC_Radio[]; +#else +#define MUIC_Radio "Radio.mui" +#endif + +/* Attributes */ + +#define MUIA_Radio_Active 0x80429b41 /* V4 isg LONG */ +#define MUIA_Radio_Entries 0x8042b6a1 /* V4 i.. STRPTR * */ + + + +/****************************************************************************/ +/** Cycle **/ +/****************************************************************************/ + +#ifdef _DCC +extern char MUIC_Cycle[]; +#else +#define MUIC_Cycle "Cycle.mui" +#endif + +/* Attributes */ + +#define MUIA_Cycle_Active 0x80421788 /* V4 isg LONG */ +#define MUIA_Cycle_Entries 0x80420629 /* V4 i.. STRPTR * */ + +#define MUIV_Cycle_Active_Next -1 +#define MUIV_Cycle_Active_Prev -2 + + +/****************************************************************************/ +/** Coloradjust **/ +/****************************************************************************/ + +#ifdef _DCC +extern char MUIC_Coloradjust[]; +#else +#define MUIC_Coloradjust "Coloradjust.mui" +#endif + +/* Methods */ + + +/* Attributes */ + +#define MUIA_Coloradjust_Blue 0x8042b8a3 /* V4 isg ULONG */ +#define MUIA_Coloradjust_Green 0x804285ab /* V4 isg ULONG */ +#define MUIA_Coloradjust_ModeID 0x8042ec59 /* V4 isg ULONG */ +#define MUIA_Coloradjust_Red 0x80420eaa /* V4 isg ULONG */ +#define MUIA_Coloradjust_RGB 0x8042f899 /* V4 isg ULONG * */ + + + +/****************************************************************************/ +/** Palette **/ +/****************************************************************************/ + +#ifdef _DCC +extern char MUIC_Palette[]; +#else +#define MUIC_Palette "Palette.mui" +#endif + +/* Attributes */ + +#define MUIA_Palette_Entries 0x8042a3d8 /* V6 i.g struct MUI_Palette_Entry * */ +#define MUIA_Palette_Groupable 0x80423e67 /* V6 isg BOOL */ +#define MUIA_Palette_Names 0x8042c3a2 /* V6 isg char ** */ + + + +/****************************************************************************/ +/** Popstring **/ +/****************************************************************************/ + +#ifdef _DCC +extern char MUIC_Popstring[]; +#else +#define MUIC_Popstring "Popstring.mui" +#endif + +/* Methods */ + +#define MUIM_Popstring_Close 0x8042dc52 /* V7 */ +#define MUIM_Popstring_Open 0x804258ba /* V7 */ +struct MUIP_Popstring_Close { ULONG MethodID; LONG result; }; +struct MUIP_Popstring_Open { ULONG MethodID; }; + +/* Attributes */ + +#define MUIA_Popstring_Button 0x8042d0b9 /* V7 i.g Object * */ +#define MUIA_Popstring_CloseHook 0x804256bf /* V7 isg struct Hook * */ +#define MUIA_Popstring_OpenHook 0x80429d00 /* V7 isg struct Hook * */ +#define MUIA_Popstring_String 0x804239ea /* V7 i.g Object * */ +#define MUIA_Popstring_Toggle 0x80422b7a /* V7 isg BOOL */ + + + +/****************************************************************************/ +/** Popobject **/ +/****************************************************************************/ + +#ifdef _DCC +extern char MUIC_Popobject[]; +#else +#define MUIC_Popobject "Popobject.mui" +#endif + +/* Attributes */ + +#define MUIA_Popobject_Follow 0x80424cb5 /* V7 isg BOOL */ +#define MUIA_Popobject_Light 0x8042a5a3 /* V7 isg BOOL */ +#define MUIA_Popobject_Object 0x804293e3 /* V7 i.g Object * */ +#define MUIA_Popobject_ObjStrHook 0x8042db44 /* V7 isg struct Hook * */ +#define MUIA_Popobject_StrObjHook 0x8042fbe1 /* V7 isg struct Hook * */ +#define MUIA_Popobject_Volatile 0x804252ec /* V7 isg BOOL */ +#define MUIA_Popobject_WindowHook 0x8042f194 /* V9 isg struct Hook * */ + + + +/****************************************************************************/ +/** Poplist **/ +/****************************************************************************/ + +#ifdef _DCC +extern char MUIC_Poplist[]; +#else +#define MUIC_Poplist "Poplist.mui" +#endif + +/* Attributes */ + +#define MUIA_Poplist_Array 0x8042084c /* V8 i.. char ** */ + + + +/****************************************************************************/ +/** Popscreen **/ +/****************************************************************************/ + +#ifdef _DCC +extern char MUIC_Popscreen[]; +#else +#define MUIC_Popscreen "Popscreen.mui" +#endif + +/* Attributes */ + + + + +/****************************************************************************/ +/** Popasl **/ +/****************************************************************************/ + +#ifdef _DCC +extern char MUIC_Popasl[]; +#else +#define MUIC_Popasl "Popasl.mui" +#endif + +/* Attributes */ + +#define MUIA_Popasl_Active 0x80421b37 /* V7 ..g BOOL */ +#define MUIA_Popasl_StartHook 0x8042b703 /* V7 isg struct Hook * */ +#define MUIA_Popasl_StopHook 0x8042d8d2 /* V7 isg struct Hook * */ +#define MUIA_Popasl_Type 0x8042df3d /* V7 i.g ULONG */ + + + +/****************************************************************************/ +/** Semaphore **/ +/****************************************************************************/ + +#ifdef _DCC +extern char MUIC_Semaphore[]; +#else +#define MUIC_Semaphore "Semaphore.mui" +#endif + +/* Methods */ + +#define MUIM_Semaphore_Attempt 0x80426ce2 /* V11 */ +#define MUIM_Semaphore_AttemptShared 0x80422551 /* V11 */ +#define MUIM_Semaphore_Obtain 0x804276f0 /* V11 */ +#define MUIM_Semaphore_ObtainShared 0x8042ea02 /* V11 */ +#define MUIM_Semaphore_Release 0x80421f2d /* V11 */ +struct MUIP_Semaphore_Attempt { ULONG MethodID; }; +struct MUIP_Semaphore_AttemptShared { ULONG MethodID; }; +struct MUIP_Semaphore_Obtain { ULONG MethodID; }; +struct MUIP_Semaphore_ObtainShared { ULONG MethodID; }; +struct MUIP_Semaphore_Release { ULONG MethodID; }; + + +/****************************************************************************/ +/** Applist **/ +/****************************************************************************/ + +#ifdef _DCC +extern char MUIC_Applist[]; +#else +#define MUIC_Applist "Applist.mui" +#endif + +/* Methods */ + + + +/****************************************************************************/ +/** Cclist **/ +/****************************************************************************/ + +#ifdef _DCC +extern char MUIC_Cclist[]; +#else +#define MUIC_Cclist "Cclist.mui" +#endif + +/* Methods */ + + + +/****************************************************************************/ +/** Dataspace **/ +/****************************************************************************/ + +#ifdef _DCC +extern char MUIC_Dataspace[]; +#else +#define MUIC_Dataspace "Dataspace.mui" +#endif + +/* Methods */ + +#define MUIM_Dataspace_Add 0x80423366 /* V11 */ +#define MUIM_Dataspace_Clear 0x8042b6c9 /* V11 */ +#define MUIM_Dataspace_Find 0x8042832c /* V11 */ +#define MUIM_Dataspace_Merge 0x80423e2b /* V11 */ +#define MUIM_Dataspace_ReadIFF 0x80420dfb /* V11 */ +#define MUIM_Dataspace_Remove 0x8042dce1 /* V11 */ +#define MUIM_Dataspace_WriteIFF 0x80425e8e /* V11 */ +struct MUIP_Dataspace_Add { ULONG MethodID; APTR data; LONG len; ULONG id; }; +struct MUIP_Dataspace_Clear { ULONG MethodID; }; +struct MUIP_Dataspace_Find { ULONG MethodID; ULONG id; }; +struct MUIP_Dataspace_Merge { ULONG MethodID; Object *dataspace; }; +struct MUIP_Dataspace_ReadIFF { ULONG MethodID; struct IFFHandle *handle; }; +struct MUIP_Dataspace_Remove { ULONG MethodID; ULONG id; }; +struct MUIP_Dataspace_WriteIFF { ULONG MethodID; struct IFFHandle *handle; ULONG type; ULONG id; }; + +/* Attributes */ + +#define MUIA_Dataspace_Pool 0x80424cf9 /* V11 i.. APTR */ + + + +/****************************************************************************/ +/** Configdata **/ +/****************************************************************************/ + +#ifdef _DCC +extern char MUIC_Configdata[]; +#else +#define MUIC_Configdata "Configdata.mui" +#endif + +/* Methods */ + + +/* Attributes */ + + + + +/****************************************************************************/ +/** Dtpic **/ +/****************************************************************************/ + +#ifdef _DCC +extern char MUIC_Dtpic[]; +#else +#define MUIC_Dtpic "Dtpic.mui" +#endif + +/* Attributes */ + + + + +/*****************************************/ +/* End of automatic header file creation */ +/*****************************************/ + + + + + + + +/************************************************************************* +** Structures and Macros for creating custom classes. +*************************************************************************/ + + +/* +** GENERAL NOTES: +** +** - Everything described in this header file is only valid within +** MUI classes. You may never use any of these things out of +** a class, e.g. in a traditional MUI application. +** +** - Except when otherwise stated, all structures are strictly read only. +*/ + + +/* Global information for every object */ + +struct MUI_GlobalInfo +{ + ULONG priv0; + Object *mgi_ApplicationObject; + + /* ... private data follows ... */ +}; + + +/* Instance data of notify class */ + +struct MUI_NotifyData +{ + struct MUI_GlobalInfo *mnd_GlobalInfo; + ULONG mnd_UserData; + ULONG mnd_ObjectID; + ULONG priv1; + ULONG priv2; + ULONG priv3; + ULONG priv4; +}; + + +/* MUI_MinMax structure holds information about minimum, maximum + and default dimensions of an object. */ + +struct MUI_MinMax +{ + WORD MinWidth; + WORD MinHeight; + WORD MaxWidth; + WORD MaxHeight; + WORD DefWidth; + WORD DefHeight; +}; + +#define MUI_MAXMAX 10000 /* use this if a dimension is not limited. */ + + +/* Hook message for custom layout */ + +struct MUI_LayoutMsg +{ + ULONG lm_Type; /* type of message (see defines below) */ + struct MinList *lm_Children; /* list of this groups children, traverse with NextObject() */ + struct MUI_MinMax lm_MinMax; /* results for MUILM_MINMAX */ + struct + { + LONG Width; + LONG Height; + ULONG priv5; + ULONG priv6; + } lm_Layout; /* size (and result) for MUILM_LAYOUT */ +}; + +#define MUILM_MINMAX 1 /* MUI wants you to calc your min & max sizes */ +#define MUILM_LAYOUT 2 /* MUI wants you to layout your children */ + +#define MUILM_UNKNOWN -1 /* return this if your hook doesn't implement lm_Type */ + + +/* (partial) instance data of area class */ + +struct MUI_AreaData +{ + struct MUI_RenderInfo *mad_RenderInfo; /* RenderInfo for this object */ + ULONG priv7; + struct TextFont *mad_Font; /* Font */ + struct MUI_MinMax mad_MinMax; /* min/max/default sizes */ + struct IBox mad_Box; /* position and dimension */ + BYTE mad_addleft; /* frame & innerspacing left offset */ + BYTE mad_addtop; /* frame & innerspacing top offset */ + BYTE mad_subwidth; /* frame & innerspacing add. width */ + BYTE mad_subheight; /* frame & innerspacing add. height */ + ULONG mad_Flags; /* see definitions below */ + + /* ... private data follows ... */ +}; + +/* Definitions for mad_Flags, other flags are private */ + +#define MADF_DRAWOBJECT (1<< 0) /* completely redraw yourself */ +#define MADF_DRAWUPDATE (1<< 1) /* only update yourself */ + + + +/* MUI's draw pens */ + +#define MPEN_SHINE 0 +#define MPEN_HALFSHINE 1 +#define MPEN_BACKGROUND 2 +#define MPEN_HALFSHADOW 3 +#define MPEN_SHADOW 4 +#define MPEN_TEXT 5 +#define MPEN_FILL 6 +#define MPEN_MARK 7 +#define MPEN_COUNT 8 + + +/* Mask for pens from MUI_ObtainPen() */ + +#define MUIPEN_MASK 0x0000ffff +#define MUIPEN(pen) ((pen) & MUIPEN_MASK) + + +/* Information on display environment */ + +struct MUI_RenderInfo +{ + Object *mri_WindowObject; /* valid between MUIM_Setup/MUIM_Cleanup */ + + struct Screen *mri_Screen; /* valid between MUIM_Setup/MUIM_Cleanup */ + struct DrawInfo *mri_DrawInfo; /* valid between MUIM_Setup/MUIM_Cleanup */ + UWORD *mri_Pens; /* valid between MUIM_Setup/MUIM_Cleanup */ + struct Window *mri_Window; /* valid between MUIM_Show/MUIM_Hide */ + struct RastPort *mri_RastPort; /* valid between MUIM_Show/MUIM_Hide */ + + ULONG mri_Flags; /* valid between MUIM_Setup/MUIM_Cleanup */ + + /* ... private data follows ... */ +}; + +/* +** If mri_Flags & MUIMRI_RECTFILL, RectFill() is quicker +** than Move()/Draw() for horizontal or vertical lines. +** on the current display. +*/ +#define MUIMRI_RECTFILL (1<<0) + +/* +** If mri_Flags & MUIMRI_TRUECOLOR, display environment is a +** cybergraphics emulated hicolor or true color display. +*/ +#define MUIMRI_TRUECOLOR (1<<1) + +/* +** If mri_Flags & MUIMRI_THINFRAMES, MUI uses thin frames +** (1:1) apsect ratio instead of standard 2:1 frames. +*/ +#define MUIMRI_THINFRAMES (1<<2) + +/* +** If mri_Flags & MUIMRI_REFRESHMODE, MUI is currently +** refreshing a WFLG_SIMPLEREFRESH window and is between +** a BeginRefresh()/EndRefresh() pair. +*/ +#define MUIMRI_REFRESHMODE (1<<3) + + +/* the following macros can be used to get pointers to an objects + GlobalInfo and RenderInfo structures. */ + +struct __dummyXFC2__ +{ + struct MUI_NotifyData mnd; + struct MUI_AreaData mad; +}; + +#define muiNotifyData(obj) (&(((struct __dummyXFC2__ *)(obj))->mnd)) +#define muiAreaData(obj) (&(((struct __dummyXFC2__ *)(obj))->mad)) + +#define muiGlobalInfo(obj) (((struct __dummyXFC2__ *)(obj))->mnd.mnd_GlobalInfo) +#define muiUserData(obj) (((struct __dummyXFC2__ *)(obj))->mnd.mnd_UserData) +#define muiRenderInfo(obj) (((struct __dummyXFC2__ *)(obj))->mad.mad_RenderInfo) + + + +/* User configurable keyboard events coming with MUIM_HandleInput */ + +enum +{ + MUIKEY_RELEASE = -2, /* not a real key, faked when MUIKEY_PRESS is released */ + MUIKEY_NONE = -1, + MUIKEY_PRESS, + MUIKEY_TOGGLE, + MUIKEY_UP, + MUIKEY_DOWN, + MUIKEY_PAGEUP, + MUIKEY_PAGEDOWN, + MUIKEY_TOP, + MUIKEY_BOTTOM, + MUIKEY_LEFT, + MUIKEY_RIGHT, + MUIKEY_WORDLEFT, + MUIKEY_WORDRIGHT, + MUIKEY_LINESTART, + MUIKEY_LINEEND, + MUIKEY_GADGET_NEXT, + MUIKEY_GADGET_PREV, + MUIKEY_GADGET_OFF, + MUIKEY_WINDOW_CLOSE, + MUIKEY_WINDOW_NEXT, + MUIKEY_WINDOW_PREV, + MUIKEY_HELP, + MUIKEY_POPUP, + MUIKEY_COUNT /* counter */ +}; + +#define MUIKEYF_PRESS (1<mgi_ApplicationObject) /* valid between MUIM_Setup/Cleanup */ +#define _win(obj) (muiRenderInfo(obj)->mri_WindowObject) /* valid between MUIM_Setup/Cleanup */ +#define _dri(obj) (muiRenderInfo(obj)->mri_DrawInfo) /* valid between MUIM_Setup/Cleanup */ +#define _screen(obj) (muiRenderInfo(obj)->mri_Screen) /* valid between MUIM_Setup/Cleanup */ +#define _pens(obj) (muiRenderInfo(obj)->mri_Pens) /* valid between MUIM_Setup/Cleanup */ +#define _window(obj) (muiRenderInfo(obj)->mri_Window) /* valid between MUIM_Show/Hide */ +#define _rp(obj) (muiRenderInfo(obj)->mri_RastPort) /* valid between MUIM_Show/Hide */ +#define _left(obj) (muiAreaData(obj)->mad_Box.Left) /* valid during MUIM_Draw */ +#define _top(obj) (muiAreaData(obj)->mad_Box.Top) /* valid during MUIM_Draw */ +#define _width(obj) (muiAreaData(obj)->mad_Box.Width) /* valid during MUIM_Draw */ +#define _height(obj) (muiAreaData(obj)->mad_Box.Height) /* valid during MUIM_Draw */ +#define _right(obj) (_left(obj)+_width(obj)-1) /* valid during MUIM_Draw */ +#define _bottom(obj) (_top(obj)+_height(obj)-1) /* valid during MUIM_Draw */ +#define _addleft(obj) (muiAreaData(obj)->mad_addleft ) /* valid during MUIM_Draw */ +#define _addtop(obj) (muiAreaData(obj)->mad_addtop ) /* valid during MUIM_Draw */ +#define _subwidth(obj) (muiAreaData(obj)->mad_subwidth ) /* valid during MUIM_Draw */ +#define _subheight(obj) (muiAreaData(obj)->mad_subheight) /* valid during MUIM_Draw */ +#define _mleft(obj) (_left(obj)+_addleft(obj)) /* valid during MUIM_Draw */ +#define _mtop(obj) (_top(obj)+_addtop(obj)) /* valid during MUIM_Draw */ +#define _mwidth(obj) (_width(obj)-_subwidth(obj)) /* valid during MUIM_Draw */ +#define _mheight(obj) (_height(obj)-_subheight(obj)) /* valid during MUIM_Draw */ +#define _mright(obj) (_mleft(obj)+_mwidth(obj)-1) /* valid during MUIM_Draw */ +#define _mbottom(obj) (_mtop(obj)+_mheight(obj)-1) /* valid during MUIM_Draw */ +#define _font(obj) (muiAreaData(obj)->mad_Font) /* valid between MUIM_Setup/Cleanup */ +#define _minwidth(obj) (muiAreaData(obj)->mad_MinMax.MinWidth) /* valid between MUIM_Show/Hide */ +#define _minheight(obj) (muiAreaData(obj)->mad_MinMax.MinHeight) /* valid between MUIM_Show/Hide */ +#define _maxwidth(obj) (muiAreaData(obj)->mad_MinMax.MaxWidth) /* valid between MUIM_Show/Hide */ +#define _maxheight(obj) (muiAreaData(obj)->mad_MinMax.MaxHeight) /* valid between MUIM_Show/Hide */ +#define _defwidth(obj) (muiAreaData(obj)->mad_MinMax.DefWidth) /* valid between MUIM_Show/Hide */ +#define _defheight(obj) (muiAreaData(obj)->mad_MinMax.DefHeight) /* valid between MUIM_Show/Hide */ +#define _flags(obj) (muiAreaData(obj)->mad_Flags) + +#endif + + + +/* MUI_CustomClass returned by MUI_CreateCustomClass() */ + +struct MUI_CustomClass +{ + APTR mcc_UserData; /* use for whatever you want */ + + struct Library *mcc_UtilityBase; /* MUI has opened these libraries */ + struct Library *mcc_DOSBase; /* for you automatically. You can */ + struct Library *mcc_GfxBase; /* use them or decide to open */ + struct Library *mcc_IntuitionBase; /* your libraries yourself. */ + + struct IClass *mcc_Super; /* pointer to super class */ + struct IClass *mcc_Class; /* pointer to the new class */ + + /* ... private data follows ... */ +}; + +#ifdef __GNUC__ + #ifdef __PPC__ + #pragma pack() + #endif +#elif defined(__VBCC__) + #pragma default-align +#endif + +#endif /* MUI_H */ diff --git a/workbench/libs/codesetslib/include/mui/TextEditor_mcc.h b/workbench/libs/codesetslib/include/mui/TextEditor_mcc.h new file mode 100755 index 000000000..99b3fe60d --- /dev/null +++ b/workbench/libs/codesetslib/include/mui/TextEditor_mcc.h @@ -0,0 +1,189 @@ +#ifndef TEXTEDITOR_MCC_H +#define TEXTEDITOR_MCC_H + +/*************************************************************************** + + TextEditor.mcc - Textediting MUI Custom Class + Copyright (C) 1997-2000 Allan Odgaard + Copyright (C) 2005 by TextEditor.mcc Open Source Team + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + TextEditor class Support Site: http://www.sf.net/projects/texteditor-mcc + + $VER: TextEditor_mcc.h v15.10 (09.04.2005) + +***************************************************************************/ + +#ifndef EXEC_TYPES_H +#include +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef __GNUC__ + #ifdef __PPC__ + #pragma pack(2) + #endif +#elif defined(__VBCC__) + #pragma amiga-align +#endif + +#define MUIC_TextEditor "TextEditor.mcc" +#define TextEditorObject MUI_NewObject(MUIC_TextEditor + +#define TextEditor_Dummy (0xad000000) + +#define MUIA_TextEditor_AreaMarked (TextEditor_Dummy + 0x14) +#define MUIA_TextEditor_ColorMap (TextEditor_Dummy + 0x2f) +#define MUIA_TextEditor_Contents (TextEditor_Dummy + 0x02) +#define MUIA_TextEditor_CursorX (TextEditor_Dummy + 0x04) +#define MUIA_TextEditor_CursorY (TextEditor_Dummy + 0x05) +#define MUIA_TextEditor_DoubleClickHook (TextEditor_Dummy + 0x06) +#define MUIA_TextEditor_ExportHook (TextEditor_Dummy + 0x08) +#define MUIA_TextEditor_ExportWrap (TextEditor_Dummy + 0x09) +#define MUIA_TextEditor_FixedFont (TextEditor_Dummy + 0x0a) +#define MUIA_TextEditor_Flow (TextEditor_Dummy + 0x0b) +#define MUIA_TextEditor_HasChanged (TextEditor_Dummy + 0x0c) +#define MUIA_TextEditor_HorizontalScroll (TextEditor_Dummy + 0x2d) /* Private and experimental! */ +#define MUIA_TextEditor_ImportHook (TextEditor_Dummy + 0x0e) +#define MUIA_TextEditor_ImportWrap (TextEditor_Dummy + 0x10) +#define MUIA_TextEditor_InsertMode (TextEditor_Dummy + 0x0f) +#define MUIA_TextEditor_InVirtualGroup (TextEditor_Dummy + 0x1b) +#define MUIA_TextEditor_KeyBindings (TextEditor_Dummy + 0x11) +#define MUIA_TextEditor_MultiColorQuoting (TextEditor_Dummy + 0x31) +#define MUIA_TextEditor_NumLock (TextEditor_Dummy + 0x18) +#define MUIA_TextEditor_Pen (TextEditor_Dummy + 0x2e) +#define MUIA_TextEditor_PopWindow_Open (TextEditor_Dummy + 0x03) /* Private!!! */ +#define MUIA_TextEditor_Prop_DeltaFactor (TextEditor_Dummy + 0x0d) +#define MUIA_TextEditor_Prop_Entries (TextEditor_Dummy + 0x15) +#define MUIA_TextEditor_Prop_First (TextEditor_Dummy + 0x20) +#define MUIA_TextEditor_Prop_Release (TextEditor_Dummy + 0x01) /* Private!!! */ +#define MUIA_TextEditor_Prop_Visible (TextEditor_Dummy + 0x16) +#define MUIA_TextEditor_Quiet (TextEditor_Dummy + 0x17) +#define MUIA_TextEditor_ReadOnly (TextEditor_Dummy + 0x19) +#define MUIA_TextEditor_RedoAvailable (TextEditor_Dummy + 0x13) +#define MUIA_TextEditor_Separator (TextEditor_Dummy + 0x2c) +#define MUIA_TextEditor_Slider (TextEditor_Dummy + 0x1a) +#define MUIA_TextEditor_StyleBold (TextEditor_Dummy + 0x1c) +#define MUIA_TextEditor_StyleItalic (TextEditor_Dummy + 0x1d) +#define MUIA_TextEditor_StyleUnderline (TextEditor_Dummy + 0x1e) +#define MUIA_TextEditor_TypeAndSpell (TextEditor_Dummy + 0x07) +#define MUIA_TextEditor_UndoAvailable (TextEditor_Dummy + 0x12) +#define MUIA_TextEditor_WrapBorder (TextEditor_Dummy + 0x21) +#define MUIA_TextEditor_Rows (TextEditor_Dummy + 0x32) +#define MUIA_TextEditor_Columns (TextEditor_Dummy + 0x33) +#define MUIA_TextEditor_AutoClip (TextEditor_Dummy + 0x34) +#define MUIA_TextEditor_CursorPosition (TextEditor_Dummy + 0x35) +#define MUIA_TextEditor_KeyUpFocus (TextEditor_Dummy + 0x36) + +#define MUIM_TextEditor_AddKeyBindings (TextEditor_Dummy + 0x22) +#define MUIM_TextEditor_ARexxCmd (TextEditor_Dummy + 0x23) +#define MUIM_TextEditor_BlockInfo (TextEditor_Dummy + 0x30) +#define MUIM_TextEditor_ClearText (TextEditor_Dummy + 0x24) +#define MUIM_TextEditor_ExportText (TextEditor_Dummy + 0x25) +#define MUIM_TextEditor_HandleError (TextEditor_Dummy + 0x1f) +#define MUIM_TextEditor_InsertText (TextEditor_Dummy + 0x26) +#define MUIM_TextEditor_MacroBegin (TextEditor_Dummy + 0x27) +#define MUIM_TextEditor_MacroEnd (TextEditor_Dummy + 0x28) +#define MUIM_TextEditor_MacroExecute (TextEditor_Dummy + 0x29) +#define MUIM_TextEditor_MarkText (TextEditor_Dummy + 0x2c) +#define MUIM_TextEditor_Replace (TextEditor_Dummy + 0x2a) +#define MUIM_TextEditor_Search (TextEditor_Dummy + 0x2b) + +struct MUIP_TextEditor_ARexxCmd { ULONG MethodID; STRPTR command; }; +struct MUIP_TextEditor_BlockInfo { ULONG MethodID; ULONG *startx; ULONG *starty; ULONG *stopx; ULONG *stopy; }; +struct MUIP_TextEditor_ClearText { ULONG MethodID; }; +struct MUIP_TextEditor_ExportText { ULONG MethodID; }; +struct MUIP_TextEditor_HandleError { ULONG MethodID; ULONG errorcode; }; /* See below for error codes */ +struct MUIP_TextEditor_InsertText { ULONG MethodID; STRPTR text; LONG pos; }; /* See below for positions */ +struct MUIP_TextEditor_MarkText { ULONG MethodID; ULONG start_crsr_x; ULONG start_crsr_y; ULONG stop_crsr_x; ULONG stop_crsr_y; }; +struct MUIP_TextEditor_Search { ULONG MethodID; STRPTR SearchString; ULONG Flags; }; +struct MUIP_TextEditor_Replace { ULONG MethodID; STRPTR NewString; ULONG Flags; }; + +#define MUIV_TextEditor_ExportHook_Plain 0x00000000 +#define MUIV_TextEditor_ExportHook_EMail 0x00000001 + +#define MUIV_TextEditor_Flow_Left 0x00000000 +#define MUIV_TextEditor_Flow_Center 0x00000001 +#define MUIV_TextEditor_Flow_Right 0x00000002 +#define MUIV_TextEditor_Flow_Justified 0x00000003 + +#define MUIV_TextEditor_ImportHook_Plain 0x00000000 +#define MUIV_TextEditor_ImportHook_EMail 0x00000002 +#define MUIV_TextEditor_ImportHook_MIME 0x00000003 +#define MUIV_TextEditor_ImportHook_MIMEQuoted 0x00000004 + +#define MUIV_TextEditor_InsertText_Cursor 0x00000000 +#define MUIV_TextEditor_InsertText_Top 0x00000001 +#define MUIV_TextEditor_InsertText_Bottom 0x00000002 + +#define MUIV_TextEditor_LengthHook_Plain 0x00000000 +#define MUIV_TextEditor_LengthHook_ANSI 0x00000001 +#define MUIV_TextEditor_LengthHook_HTML 0x00000002 +#define MUIV_TextEditor_LengthHook_MAIL 0x00000003 + +/* Flags for MUIM_TextEditor_Search */ +#define MUIF_TextEditor_Search_FromTop (1 << 0) +#define MUIF_TextEditor_Search_Next (1 << 1) +#define MUIF_TextEditor_Search_CaseSensitive (1 << 2) +#define MUIF_TextEditor_Search_DOSPattern (1 << 3) +#define MUIF_TextEditor_Search_Backwards (1 << 4) + +/* Error codes given as argument to MUIM_TextEditor_HandleError */ +#define Error_ClipboardIsEmpty 0x01 +#define Error_ClipboardIsNotFTXT 0x02 +#define Error_MacroBufferIsFull 0x03 +#define Error_MemoryAllocationFailed 0x04 +#define Error_NoAreaMarked 0x05 +#define Error_NoMacroDefined 0x06 +#define Error_NothingToRedo 0x07 +#define Error_NothingToUndo 0x08 +#define Error_NotEnoughUndoMem 0x09 /* This will cause all the stored undos to be freed */ +#define Error_StringNotFound 0x0a +#define Error_NoBookmarkInstalled 0x0b +#define Error_BookmarkHasBeenLost 0x0c + +struct ClickMessage +{ + STRPTR LineContents; /* This field is ReadOnly!!! */ + ULONG ClickPosition; +}; + +/* Definitions for Separator type */ + +#define LNSB_Top 0 /* Mutual exclude: */ +#define LNSB_Middle 1 /* Placement of */ +#define LNSB_Bottom 2 /* the separator */ +#define LNSB_StrikeThru 3 /* Let separator go thru the textfont */ +#define LNSB_Thick 4 /* Extra thick separator */ + +#define LNSF_Top (1< +** All Rights Reserved +** +*/ + +#ifndef TEXTINPUT_MCC_H +#define TEXTINPUT_MCC_H + +#ifndef LIBRARIES_MUI_H +#include +#endif + +/* +** Class name, object macros +*/ + +#define MUIC_Textinput "Textinput.mcc" +#define TextinputObject MUI_NewObject(MUIC_Textinput + +#define MUIC_Textinputscroll "Textinputscroll.mcc" +#define TextinputscrollObject MUI_NewObject(MUIC_Textinputscroll + + +#define MCC_TI_TAGBASE ((TAG_USER)|((1307<<16)+0x712)) +#define MCC_TI_ID(x) (MCC_TI_TAGBASE+(x)) + +#define MCC_Textinput_Version 29 +#define MCC_Textinput_Revision 1 + +#ifdef __GNUC__ + #ifdef __PPC__ + #pragma pack(2) + #endif +#elif defined(__VBCC__) + #pragma amiga-align +#endif + + +/* +** Methods +*/ + +#define MUIM_Textinput_ExternalEdit MCC_TI_ID(1) /* V1 */ +#define MUIM_Textinputscroll_Inform MCC_TI_ID(2) /* V1 (private) */ +#define MUIM_Textinputmcp_GrabCols MCC_TI_ID(3) /* V1 (private) */ +#define MUIM_Textinput_Blink MCC_TI_ID(4) /* V1 (private) */ +#define MUIM_Textinput_SaveToFile MCC_TI_ID(5) /* V1 */ +#define MUIM_Textinput_LoadFromFile MCC_TI_ID(6) /* V1 */ +#define MUIM_Textinput_ExternalEditDone MCC_TI_ID(7) /* V1 (private) */ +#define MUIM_Textinput_DoRevert MCC_TI_ID(8) /* V1 */ +#define MUIM_Textinput_DoDelLine MCC_TI_ID(9) /* V1 */ +#define MUIM_Textinput_DoMarkStart MCC_TI_ID(10) /* V1 */ +#define MUIM_Textinput_DoMarkAll MCC_TI_ID(11) /* V1 */ +#define MUIM_Textinput_DoCut MCC_TI_ID(12) /* V1 */ +#define MUIM_Textinput_DoCopy MCC_TI_ID(13) /* V1 */ +#define MUIM_Textinput_DoPaste MCC_TI_ID(14) /* V1 */ +#define MUIM_Textinput_AppendText MCC_TI_ID(15) /* V1 */ +#define MUIM_Textinputmcp_LAct MCC_TI_ID(16) /* V1 (private) */ +#define MUIM_Textinputmcp_LCopy MCC_TI_ID(17) /* V1 (private) */ +#define MUIM_Textinputmcp_LAdd MCC_TI_ID(18) /* V1 (private) */ +#define MUIM_Textinput_DoToggleWordwrap MCC_TI_ID(19) /* V1 */ +#define MUIM_Textinput_Acknowledge MCC_TI_ID(20) /* V1 */ +#define MUIM_Textinput_TranslateEvent MCC_TI_ID(21) /* V1 */ +#define MUIM_Textinput_InsertText MCC_TI_ID(22) /* V1 */ +#define MUIM_Textinput_DoLeft MCC_TI_ID(23) /* V1 */ +#define MUIM_Textinput_DoRight MCC_TI_ID(24) /* V1 */ +#define MUIM_Textinput_DoUp MCC_TI_ID(25) /* V1 */ +#define MUIM_Textinput_DoDown MCC_TI_ID(26) /* V1 */ +#define MUIM_Textinput_DoLineStart MCC_TI_ID(27) /* V1 */ +#define MUIM_Textinput_DoLineEnd MCC_TI_ID(28) /* V1 */ +#define MUIM_Textinput_DoTop MCC_TI_ID(29) /* V1 */ +#define MUIM_Textinput_DoBottom MCC_TI_ID(30) /* V1 */ +#define MUIM_Textinput_DoPageUp MCC_TI_ID(31) /* V1 */ +#define MUIM_Textinput_DoPageDown MCC_TI_ID(32) /* V1 */ +#define MUIM_Textinput_DoPopup MCC_TI_ID(33) /* V1 */ +#define MUIM_Textinput_DoPrevWord MCC_TI_ID(34) /* V1 */ +#define MUIM_Textinput_DoNextWord MCC_TI_ID(35) /* V1 */ +#define MUIM_Textinput_DoDel MCC_TI_ID(36) /* V1 */ +#define MUIM_Textinput_DoDelEOL MCC_TI_ID(37) /* V1 */ +#define MUIM_Textinput_DoBS MCC_TI_ID(38) /* V1 */ +#define MUIM_Textinput_DoBSSOL MCC_TI_ID(39) /* V1 */ +#define MUIM_Textinput_DoubleClick MCC_TI_ID(42) /* V1 */ +#define MUIM_Textinput_DoBSWord MCC_TI_ID(43) /* V1 */ +#define MUIM_Textinput_DoDelWord MCC_TI_ID(44) /* V1 */ +#define MUIM_Textinput_DoInsertFile MCC_TI_ID(45) /* V1 */ +#define MUIM_Textinput_InsertFromFile MCC_TI_ID(46) /* V1 */ +#define MUIM_Textinput_HandleChar MCC_TI_ID(47) /* V14 */ +#define MUIM_Textinput_HandleURL MCC_TI_ID(48) /* V16 */ +#define MUIM_Textinput_HandleRexxSignal MCC_TI_ID(49) /* V18 (Private) */ +#define MUIM_Textinput_HandleMisspell MCC_TI_ID(50) /* V18 (Private) */ +#define MUIM_Textinput_DoToggleCase MCC_TI_ID(51) /* V21 */ +#define MUIM_Textinput_DoToggleCaseEOW MCC_TI_ID(52) /* V21 */ +#define MUIM_Textinput_DoIncrementDec MCC_TI_ID(53) /* V21 */ +#define MUIM_Textinput_DoDecrementDec MCC_TI_ID(54) /* V21 */ +#define MUIM_Textinputmcp_DefaultKeys MCC_TI_ID(55) /* V21 (Private) */ +#define MUIM_Textinput_DoUndo MCC_TI_ID(56) /* V21 */ +#define MUIM_Textinput_DoRedo MCC_TI_ID(57) /* V21 */ +#define MUIM_Textinput_DoTab MCC_TI_ID(58) /* V22 */ +#define MUIM_Textinput_DoNextGadget MCC_TI_ID(59) /* V22 */ +#define MUIM_Textinput_DoSetBookmark1 MCC_TI_ID(60) /* V22 */ +#define MUIM_Textinput_DoSetBookmark2 MCC_TI_ID(61) /* V22 */ +#define MUIM_Textinput_DoSetBookmark3 MCC_TI_ID(62) /* V22 */ +#define MUIM_Textinput_DoGotoBookmark1 MCC_TI_ID(63) /* V22 */ +#define MUIM_Textinput_DoGotoBookmark2 MCC_TI_ID(64) /* V22 */ +#define MUIM_Textinput_DoGotoBookmark3 MCC_TI_ID(65) /* V22 */ +#define MUIM_Textinput_DoCutLine MCC_TI_ID(66) /* V22 */ +#define MUIM_Textinput_DoCopyCut MCC_TI_ID(67) /* V29 */ + +/* +** Messages +*/ + +struct MUIP_Textinput_ExternalEdit { ULONG MethodID; }; +struct MUIP_Textinputscroll_Inform { ULONG MethodID; ULONG xo; ULONG yo; ULONG xs; ULONG ys; ULONG xv; ULONG yv; ULONG noedit; }; +struct MUIP_Textinputmcp_GrabCols { ULONG MethodID; ULONG notall; }; +struct MUIP_Textinput_Blink { ULONG MethodID; }; +struct MUIP_Textinput_SaveToFile { ULONG MethodID; STRPTR filename; }; +struct MUIP_Textinput_LoadFromFile { ULONG MethodID; STRPTR filename; }; +struct MUIP_Textinput_ExternalEditDone { ULONG MethodID; ULONG changed; }; +struct MUIP_Textinput_DoRevert { ULONG MethodID; }; +struct MUIP_Textinput_DoDelLine { ULONG MethodID; }; +struct MUIP_Textinput_DoCutLine { ULONG MethodID; }; +struct MUIP_Textinput_DoMarkStart { ULONG MethodID; }; +struct MUIP_Textinput_DoMarkAll { ULONG MethodID; }; +struct MUIP_Textinput_DoCut { ULONG MethodID; }; +struct MUIP_Textinput_DoCopyCut { ULONG MethodID; }; +struct MUIP_Textinput_DoCopy { ULONG MethodID; }; +struct MUIP_Textinput_DoPaste { ULONG MethodID; }; +struct MUIP_Textinput_AppendText { ULONG MethodID; STRPTR text; LONG len; }; +struct MUIP_Textinputmcp_LAct { ULONG MethodID; ULONG which; }; +struct MUIP_Textinputmcp_LCopy { ULONG MethodID; }; +struct MUIP_Textinputmcp_LAdd { ULONG MethodID; }; +struct MUIP_Textinput_DoToggleWordwrap { ULONG MethodID; }; +struct MUIP_Textinput_Acknowledge { ULONG MethodID; STRPTR contents; }; +struct MUIP_Textinput_TranslateEvent { ULONG MethodID; struct InputEvent *ie; STRPTR mappedstring; ULONG *mappedlen; }; +struct MUIP_Textinput_InsertText { ULONG MethodID; STRPTR text; LONG len; }; +struct MUIP_Textinput_DoLeft { ULONG MethodID; }; +struct MUIP_Textinput_DoRight { ULONG MethodID; }; +struct MUIP_Textinput_DoUp { ULONG MethodID; }; +struct MUIP_Textinput_DoDown { ULONG MethodID; }; +struct MUIP_Textinput_DoLineStart { ULONG MethodID; }; +struct MUIP_Textinput_DoLineEnd { ULONG MethodID; }; +struct MUIP_Textinput_DoTop { ULONG MethodID; }; +struct MUIP_Textinput_DoBottom { ULONG MethodID; }; +struct MUIP_Textinput_DoPageUp { ULONG MethodID; }; +struct MUIP_Textinput_DoPageDown { ULONG MethodID; }; +struct MUIP_Textinput_DoPopup { ULONG MethodID; }; +struct MUIP_Textinput_DoPrevWord { ULONG MethodID; }; +struct MUIP_Textinput_DoNextWord { ULONG MethodID; }; +struct MUIP_Textinput_DoDel { ULONG MethodID; }; +struct MUIP_Textinput_DoDelEOL { ULONG MethodID; }; +struct MUIP_Textinput_DoBS { ULONG MethodID; }; +struct MUIP_Textinput_DoBSSOL { ULONG MethodID; }; +struct MUIP_Textinput_DoubleClick { ULONG MethodID; ULONG xp; ULONG yp; ULONG cnt; }; +struct MUIP_Textinput_DoDelWord { ULONG MethodID; }; +struct MUIP_Textinput_DoBSWord { ULONG MethodID; }; +struct MUIP_Textinput_DoInsertFile { ULONG MethodID; }; +struct MUIP_Textinput_InsertFromFile { ULONG MethodID; STRPTR filename; }; +struct MUIP_Textinput_HandleChar { ULONG MethodID; ULONG ch; ULONG quiet; }; +struct MUIP_Textinput_HandleURL { ULONG MethodID; STRPTR url; }; +struct MUIP_Textinput_HandleRexxSignal { ULONG MethodID; }; +struct MUIP_Textinput_HandleMisspell { ULONG MethodID; STRPTR word; STRPTR pos; STRPTR correction; }; +struct MUIP_Textinput_DoToggleCase { ULONG MethodID; }; +struct MUIP_Textinput_DoToggleCaseEOW { ULONG MethodID; }; +struct MUIP_Textinput_DoIncrementDec { ULONG MethodID; }; +struct MUIP_Textinput_DoDecrementDec { ULONG MethodID; }; +struct MUIP_Textinputmcp_DefaultKeys { ULONG MethodID; }; +struct MUIP_Textinput_DoUndo { ULONG MethodID; }; +struct MUIP_Textinput_DoRedo { ULONG MethodID; }; +struct MUIP_Textinput_DoTab { ULONG MethodID; }; +struct MUIP_Textinput_DoNextGadget { ULONG MethodID; }; +struct MUIP_Textinput_DoSetBookmark1 { ULONG MethodID; }; +struct MUIP_Textinput_DoSetBookmark2 { ULONG MethodID; }; +struct MUIP_Textinput_DoSetBookmark3 { ULONG MethodID; }; +struct MUIP_Textinput_DoGotoBookmark1 { ULONG MethodID; }; +struct MUIP_Textinput_DoGotoBookmark2 { ULONG MethodID; }; +struct MUIP_Textinput_DoGotoBookmark3 { ULONG MethodID; }; + + +/* +** Attributes +*/ + +#define MUIA_Textinput_Multiline MCC_TI_ID(100) /* V1 i.g BOOL */ +#define MUIA_Textinput_MaxLen MCC_TI_ID(101) /* V1 i.g ULONG */ +#define MUIA_Textinput_MaxLines MCC_TI_ID(102) /* V1 i.g ULONG */ +#define MUIA_Textinput_AutoExpand MCC_TI_ID(103) /* V1 isg BOOL */ +#define MUIA_Textinput_Contents MCC_TI_ID(104) /* V1 isg STRPTR */ +#define MUIA_Textinput_LeftOffset MCC_TI_ID(105) /* V1 .sg ULONG (private) */ +#define MUIA_Textinput_TopOffset MCC_TI_ID(106) /* V1 .sg ULONG (private) */ +#define MUIA_Textinput_TSCO MCC_TI_ID(107) /* V1 .sg Object (private) */ +#define MUIA_Textinput_Blinkrate MCC_TI_ID(108) /* V1 isg ULONG */ +#define MUIA_Textinput_Cursorstyle MCC_TI_ID(109) /* V1 isg ULONG */ +#define MUIA_Textinput_AdvanceOnCR MCC_TI_ID(110) /* V1 isg BOOL */ +#define MUIA_Textinput_TmpExtension MCC_TI_ID(111) /* V1 isg STRPTR */ +#define MUIA_Textinput_Quiet MCC_TI_ID(112) /* V1 .sg BOOL */ +#define MUIA_Textinput_Acknowledge MCC_TI_ID(113) /* V1 ..g STRPTR */ +#define MUIA_Textinput_Integer MCC_TI_ID(114) /* V1 isg ULONG */ +#define MUIA_Textinput_MinVersion MCC_TI_ID(115) /* V1 i.. ULONG */ +#define MUIA_Textinput_DefKeys MCC_TI_ID(116) /* V1 ..g APTR (private) */ +#define MUIA_Textinput_DefaultPopup MCC_TI_ID(117) /* V1 i.. BOOL */ +#define MUIA_Textinput_WordWrap MCC_TI_ID(118) /* V1 isg ULONG */ +#define MUIA_Textinput_IsNumeric MCC_TI_ID(119) /* V1 isg BOOL */ +#define MUIA_Textinput_MinVal MCC_TI_ID(120) /* V1 isg ULONG */ +#define MUIA_Textinput_MaxVal MCC_TI_ID(121) /* V1 isg ULONG */ +#define MUIA_Textinput_AcceptChars MCC_TI_ID(122) /* V1 isg STRPTR */ +#define MUIA_Textinput_RejectChars MCC_TI_ID(123) /* V1 isg STRPTR */ +#define MUIA_Textinput_Changed MCC_TI_ID(124) /* V1 ..g BOOL */ +#define MUIA_Textinput_AttachedList MCC_TI_ID(125) /* V1 isg Object */ +#define MUIA_Textinput_RemainActive MCC_TI_ID(126) /* V1 isg BOOL */ +#define MUIA_Textinput_CursorPos MCC_TI_ID(127) /* V1 .sg ULONG */ +#define MUIA_Textinput_Secret MCC_TI_ID(128) /* V1 isg BOOL */ +#define MUIA_Textinput_Lines MCC_TI_ID(129) /* V1 ..g ULONG */ +#define MUIA_Textinput_Editable MCC_TI_ID(130) /* V1 isg BOOL */ +#define MUIA_Textinputscroll_UseWinBorder MCC_TI_ID(131) /* V1 i.. BOOL */ +#define MUIA_Textinput_IsOld MCC_TI_ID(132) /* V1 isg BOOL */ +#define MUIA_Textinput_MarkStart MCC_TI_ID(133) /* V13 isg ULONG */ +#define MUIA_Textinput_MarkEnd MCC_TI_ID(134) /* V13 isg ULONG */ +#define MUIA_Textinputscroll_VertScrollerOnly MCC_TI_ID(135)/* V14 i.. BOOL */ +#define MUIA_Textinput_NoInput MCC_TI_ID(136) /* V15 i.g BOOL */ +#define MUIA_Textinput_SetMin MCC_TI_ID(137) /* V15 isg BOOL */ +#define MUIA_Textinput_SetMax MCC_TI_ID(138) /* V15 isg BOOL */ +#define MUIA_Textinput_SetVMax MCC_TI_ID(139) /* V15 isg BOOL */ +#define MUIA_Textinput_Styles MCC_TI_ID(140) /* V15 isg ULONG */ +#define MUIA_Textinput_PreParse MCC_TI_ID(141) /* V18 isg STRPTR */ +#define MUIA_Textinput_Format MCC_TI_ID(142) /* V19 i.g ULONG */ +#define MUIA_Textinput_SetVMin MCC_TI_ID(143) /* V20 isg BOOL */ +#define MUIA_Textinput_HandleURLHook MCC_TI_ID(144) /* V22 isg struct Hook * */ +#define MUIA_Textinput_Tabs MCC_TI_ID(145) /* V22 isg ULONG */ +#define MUIA_Textinput_TabLen MCC_TI_ID(146) /* V22 isg ULONG */ +#define MUIA_Textinput_Bookmark1 MCC_TI_ID(147) /* V22 isg ULONG */ +#define MUIA_Textinput_Bookmark2 MCC_TI_ID(148) /* V22 isg ULONG */ +#define MUIA_Textinput_Bookmark3 MCC_TI_ID(149) /* V22 isg ULONG */ +#define MUIA_Textinput_CursorSize MCC_TI_ID(150) /* V22 isg ULONG */ +#define MUIA_Textinput_TopLine MCC_TI_ID(151) /* V22 isg ULONG */ +#define MUIA_Textinput_Font MCC_TI_ID(152) /* V23 isg ULONG */ +#define MUIA_Textinput_SuggestParse MCC_TI_ID(153) /* V24 isg ULONG */ +#define MUIA_Textinput_ProhibitParse MCC_TI_ID(154) /* V24 isg ULONG */ +#define MUIA_Textinput_NoCopy MCC_TI_ID(155) /* V26 isg ULONG */ +#define MUIA_Textinput_MinimumWidth MCC_TI_ID(156) /* V26 i.g ULONG */ +#define MUIA_Textinput_ResetMarkOnCursor MCC_TI_ID(157) /* V29 isg BOOL */ +#define MUIA_Textinput_NoExtraSpacing MCC_TI_ID(158) /* V29 isg BOOL */ + +/* +** Special values +*/ + +#define MUIV_Textinput_ParseB_URL 0 +#define MUIV_Textinput_ParseB_Misspell 1 +#define MUIV_Textinput_ParseF_URL (1<. + Copyright (C) 2005-2007 by codesets.library Open Source Team + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + codesets.library project: http://sourceforge.net/projects/codesetslib/ + + $Id$ + +***************************************************************************/ + +/* Automatically generated header! Do not edit! */ + +#ifndef _PPCINLINE_CODESETS_H +#define _PPCINLINE_CODESETS_H + +#ifndef __PPCINLINE_MACROS_H +#include +#endif /* !__PPCINLINE_MACROS_H */ + +#ifndef CODESETS_BASE_NAME +#define CODESETS_BASE_NAME CodesetsBase +#endif /* !CODESETS_BASE_NAME */ + +#define CodesetsSupportedA(__p0) \ + LP1(96, STRPTR *, CodesetsSupportedA, \ + struct TagItem *, __p0, a0, \ + , CODESETS_BASE_NAME, 0, 0, 0, 0, 0, 0) + +#define CodesetsIsLegalUTF8(__p0, __p1) \ + LP2(54, BOOL , CodesetsIsLegalUTF8, \ + const UTF8 *, __p0, a0, \ + ULONG , __p1, d0, \ + , CODESETS_BASE_NAME, 0, 0, 0, 0, 0, 0) + +#define CodesetsListRemoveA(__p0) \ + LP1(186, BOOL , CodesetsListRemoveA, \ + struct TagItem *, __p0, a0, \ + , CODESETS_BASE_NAME, 0, 0, 0, 0, 0, 0) + +#define CodesetsFindBestA(__p0) \ + LP1(108, struct codeset *, CodesetsFindBestA, \ + struct TagItem *, __p0, a0, \ + , CODESETS_BASE_NAME, 0, 0, 0, 0, 0, 0) + +#define CodesetsListCreateA(__p0) \ + LP1(168, struct codesetList *, CodesetsListCreateA, \ + struct TagItem *, __p0, a0, \ + , CODESETS_BASE_NAME, 0, 0, 0, 0, 0, 0) + +#define CodesetsDecodeB64A(__p0) \ + LP1(138, ULONG , CodesetsDecodeB64A, \ + struct TagItem *, __p0, a0, \ + , CODESETS_BASE_NAME, 0, 0, 0, 0, 0, 0) + +#define CodesetsIsValidUTF8(__p0) \ + LP1(150, BOOL , CodesetsIsValidUTF8, \ + STRPTR , __p0, a0, \ + , CODESETS_BASE_NAME, 0, 0, 0, 0, 0, 0) + +#define CodesetsStrLenA(__p0, __p1) \ + LP2(144, ULONG , CodesetsStrLenA, \ + STRPTR , __p0, a0, \ + struct TagItem *, __p1, a1, \ + , CODESETS_BASE_NAME, 0, 0, 0, 0, 0, 0) + +#define CodesetsConvertStrA(__p0) \ + LP1(162, STRPTR , CodesetsConvertStrA, \ + struct TagItem *, __p0, a0, \ + , CODESETS_BASE_NAME, 0, 0, 0, 0, 0, 0) + +#define CodesetsFindA(__p0, __p1) \ + LP2(102, struct codeset *, CodesetsFindA, \ + STRPTR , __p0, a0, \ + struct TagItem *, __p1, a1, \ + , CODESETS_BASE_NAME, 0, 0, 0, 0, 0, 0) + +#define CodesetsFreeA(__p0, __p1) \ + LP2NR(90, CodesetsFreeA, \ + APTR , __p0, a0, \ + struct TagItem *, __p1, a1, \ + , CODESETS_BASE_NAME, 0, 0, 0, 0, 0, 0) + +#define CodesetsUTF8ToStrA(__p0) \ + LP1(120, STRPTR , CodesetsUTF8ToStrA, \ + struct TagItem *, __p0, a0, \ + , CODESETS_BASE_NAME, 0, 0, 0, 0, 0, 0) + +#define CodesetsFreeVecPooledA(__p0, __p1, __p2) \ + LP3NR(156, CodesetsFreeVecPooledA, \ + APTR , __p0, a0, \ + APTR , __p1, a1, \ + struct TagItem *, __p2, a2, \ + , CODESETS_BASE_NAME, 0, 0, 0, 0, 0, 0) + +#define CodesetsUTF8Len(__p0) \ + LP1(114, ULONG , CodesetsUTF8Len, \ + const UTF8 *, __p0, a0, \ + , CODESETS_BASE_NAME, 0, 0, 0, 0, 0, 0) + +#define CodesetsListAddA(__p0, __p1) \ + LP2(180, BOOL , CodesetsListAddA, \ + struct codesetList *, __p0, a0, \ + struct TagItem *, __p1, a1, \ + , CODESETS_BASE_NAME, 0, 0, 0, 0, 0, 0) + +#define CodesetsConvertUTF32toUTF16(__p0, __p1, __p2, __p3, __p4) \ + LP5(36, ULONG , CodesetsConvertUTF32toUTF16, \ + const UTF32 **, __p0, a0, \ + const UTF32 *, __p1, a1, \ + UTF16 **, __p2, a2, \ + UTF16 *, __p3, a3, \ + ULONG , __p4, d0, \ + , CODESETS_BASE_NAME, 0, 0, 0, 0, 0, 0) + +#define CodesetsConvertUTF16toUTF32(__p0, __p1, __p2, __p3, __p4) \ + LP5(42, ULONG , CodesetsConvertUTF16toUTF32, \ + const UTF16 **, __p0, a0, \ + const UTF16 *, __p1, a1, \ + UTF32 **, __p2, a2, \ + UTF32 *, __p3, a3, \ + ULONG , __p4, d0, \ + , CODESETS_BASE_NAME, 0, 0, 0, 0, 0, 0) + +#define CodesetsListDeleteA(__p0) \ + LP1(174, BOOL , CodesetsListDeleteA, \ + struct TagItem *, __p0, a0, \ + , CODESETS_BASE_NAME, 0, 0, 0, 0, 0, 0) + +#define CodesetsSetDefaultA(__p0, __p1) \ + LP2(84, struct codeset *, CodesetsSetDefaultA, \ + STRPTR , __p0, a0, \ + struct TagItem *, __p1, a1, \ + , CODESETS_BASE_NAME, 0, 0, 0, 0, 0, 0) + +#define CodesetsEncodeB64A(__p0) \ + LP1(132, ULONG , CodesetsEncodeB64A, \ + struct TagItem *, __p0, a0, \ + , CODESETS_BASE_NAME, 0, 0, 0, 0, 0, 0) + +#define CodesetsUTF8CreateA(__p0) \ + LP1(126, UTF8 *, CodesetsUTF8CreateA, \ + struct TagItem *, __p0, a0, \ + , CODESETS_BASE_NAME, 0, 0, 0, 0, 0, 0) + +#define CodesetsConvertUTF32toUTF8(__p0, __p1, __p2, __p3, __p4) \ + LP5(72, ULONG , CodesetsConvertUTF32toUTF8, \ + const UTF32 **, __p0, a0, \ + const UTF32 *, __p1, a1, \ + UTF8 **, __p2, a2, \ + UTF8 *, __p3, a3, \ + ULONG , __p4, d0, \ + , CODESETS_BASE_NAME, 0, 0, 0, 0, 0, 0) + +#define CodesetsConvertUTF8toUTF32(__p0, __p1, __p2, __p3, __p4) \ + LP5(78, ULONG , CodesetsConvertUTF8toUTF32, \ + const UTF8 **, __p0, a0, \ + const UTF8 *, __p1, a1, \ + UTF32 **, __p2, a2, \ + UTF32 *, __p3, a3, \ + ULONG , __p4, d0, \ + , CODESETS_BASE_NAME, 0, 0, 0, 0, 0, 0) + +#define CodesetsConvertUTF16toUTF8(__p0, __p1, __p2, __p3, __p4) \ + LP5(48, ULONG , CodesetsConvertUTF16toUTF8, \ + const UTF16 **, __p0, a0, \ + const UTF16 *, __p1, a1, \ + UTF8 **, __p2, a2, \ + UTF8 *, __p3, a3, \ + ULONG , __p4, d0, \ + , CODESETS_BASE_NAME, 0, 0, 0, 0, 0, 0) + +#define CodesetsIsLegalUTF8Sequence(__p0, __p1) \ + LP2(60, BOOL , CodesetsIsLegalUTF8Sequence, \ + const UTF8 *, __p0, a0, \ + const UTF8 *, __p1, a1, \ + , CODESETS_BASE_NAME, 0, 0, 0, 0, 0, 0) + +#define CodesetsConvertUTF8toUTF16(__p0, __p1, __p2, __p3, __p4) \ + LP5(66, ULONG , CodesetsConvertUTF8toUTF16, \ + const UTF8 **, __p0, a0, \ + const UTF8 *, __p1, a1, \ + UTF16 **, __p2, a2, \ + UTF16 *, __p3, a3, \ + ULONG , __p4, d0, \ + , CODESETS_BASE_NAME, 0, 0, 0, 0, 0, 0) + +#if defined(USE_INLINE_STDARG) && !defined(__STRICT_ANSI__) + +#include + +#define CodesetsSupported(...) \ + ({ULONG _tags[] = { __VA_ARGS__ }; \ + CodesetsSupportedA((struct TagItem *)_tags);}) + +#define CodesetsListRemove(...) \ + ({ULONG _tags[] = { __VA_ARGS__ }; \ + CodesetsListRemoveA((struct TagItem *)_tags);}) + +#define CodesetsListDelete(...) \ + ({ULONG _tags[] = { __VA_ARGS__ }; \ + CodesetsListDeleteA((struct TagItem *)_tags);}) + +#define CodesetsDecodeB64(...) \ + ({ULONG _tags[] = { __VA_ARGS__ }; \ + CodesetsDecodeB64A((struct TagItem *)_tags);}) + +#define CodesetsListCreate(...) \ + ({ULONG _tags[] = { __VA_ARGS__ }; \ + CodesetsListCreateA((struct TagItem *)_tags);}) + +#define CodesetsSetDefault(__p0, ...) \ + ({ULONG _tags[] = { __VA_ARGS__ }; \ + CodesetsSetDefaultA(__p0, (struct TagItem *)_tags);}) + +#define CodesetsStrLen(__p0, ...) \ + ({ULONG _tags[] = { __VA_ARGS__ }; \ + CodesetsStrLenA(__p0, (struct TagItem *)_tags);}) + +#define CodesetsConvertStr(...) \ + ({ULONG _tags[] = { __VA_ARGS__ }; \ + CodesetsConvertStrA((struct TagItem *)_tags);}) + +#define CodesetsUTF8Create(...) \ + ({ULONG _tags[] = { __VA_ARGS__ }; \ + CodesetsUTF8CreateA((struct TagItem *)_tags);}) + +#define CodesetsFree(__p0, ...) \ + ({ULONG _tags[] = { __VA_ARGS__ }; \ + CodesetsFreeA(__p0, (struct TagItem *)_tags);}) + +#define CodesetsFindBest(...) \ + ({ULONG _tags[] = { __VA_ARGS__ }; \ + CodesetsFindBestA((struct TagItem *)_tags);}) + +#define CodesetsEncodeB64(...) \ + ({ULONG _tags[] = { __VA_ARGS__ }; \ + CodesetsEncodeB64A((struct TagItem *)_tags);}) + +#define CodesetsFind(__p0, ...) \ + ({ULONG _tags[] = { __VA_ARGS__ }; \ + CodesetsFindA(__p0, (struct TagItem *)_tags);}) + +#define CodesetsFreeVecPooled(__p0, __p1, ...) \ + ({ULONG _tags[] = { __VA_ARGS__ }; \ + CodesetsFreeVecPooledA(__p0, __p1, (struct TagItem *)_tags);}) + +#define CodesetsUTF8ToStr(...) \ + ({ULONG _tags[] = { __VA_ARGS__ }; \ + CodesetsUTF8ToStrA((struct TagItem *)_tags);}) + +#define CodesetsListAdd(__p0, ...) \ + ({ULONG _tags[] = { __VA_ARGS__ }; \ + CodesetsListAddA(__p0, (struct TagItem *)_tags);}) + +#endif + +#endif /* !_PPCINLINE_CODESETS_H */ diff --git a/workbench/libs/codesetslib/include/pragmas/codesets_pragmas.h b/workbench/libs/codesetslib/include/pragmas/codesets_pragmas.h new file mode 100755 index 000000000..43d65bac0 --- /dev/null +++ b/workbench/libs/codesetslib/include/pragmas/codesets_pragmas.h @@ -0,0 +1,123 @@ +#ifndef PRAGMAS_CODESETS_PRAGMAS_H +#define PRAGMAS_CODESETS_PRAGMAS_H + +/*************************************************************************** + + codesets.library - Amiga shared library for handling different codesets + Copyright (C) 2001-2005 by Alfonso [alfie] Ranieri . + Copyright (C) 2005-2007 by codesets.library Open Source Team + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + codesets.library project: http://sourceforge.net/projects/codesetslib/ + + $Id$ + +***************************************************************************/ + +#ifndef CLIB_CODESETS_PROTOS_H +#include +#endif + +#if defined(AZTEC_C) || defined(__MAXON__) || defined(__STORM__) +#pragma amicall(CodesetsBase,0x024,CodesetsConvertUTF32toUTF16(a0,a1,a2,a3,d0)) +#pragma amicall(CodesetsBase,0x02a,CodesetsConvertUTF16toUTF32(a0,a1,a2,a3,d0)) +#pragma amicall(CodesetsBase,0x030,CodesetsConvertUTF16toUTF8(a0,a1,a2,a3,d0)) +#pragma amicall(CodesetsBase,0x036,CodesetsIsLegalUTF8(a0,d0)) +#pragma amicall(CodesetsBase,0x03c,CodesetsIsLegalUTF8Sequence(a0,a1)) +#pragma amicall(CodesetsBase,0x042,CodesetsConvertUTF8toUTF16(a0,a1,a2,a3,d0)) +#pragma amicall(CodesetsBase,0x048,CodesetsConvertUTF32toUTF8(a0,a1,a2,a3,d0)) +#pragma amicall(CodesetsBase,0x04e,CodesetsConvertUTF8toUTF32(a0,a1,a2,a3,d0)) +#pragma amicall(CodesetsBase,0x054,CodesetsSetDefaultA(a0,a1)) +#pragma amicall(CodesetsBase,0x05a,CodesetsFreeA(a0,a1)) +#pragma amicall(CodesetsBase,0x060,CodesetsSupportedA(a0)) +#pragma amicall(CodesetsBase,0x066,CodesetsFindA(a0,a1)) +#pragma amicall(CodesetsBase,0x06c,CodesetsFindBestA(a0)) +#pragma amicall(CodesetsBase,0x072,CodesetsUTF8Len(a0)) +#pragma amicall(CodesetsBase,0x078,CodesetsUTF8ToStrA(a0)) +#pragma amicall(CodesetsBase,0x07e,CodesetsUTF8CreateA(a0)) +#pragma amicall(CodesetsBase,0x084,CodesetsEncodeB64A(a0)) +#pragma amicall(CodesetsBase,0x08a,CodesetsDecodeB64A(a0)) +#pragma amicall(CodesetsBase,0x090,CodesetsStrLenA(a0,a1)) +#pragma amicall(CodesetsBase,0x096,CodesetsIsValidUTF8(a0)) +#pragma amicall(CodesetsBase,0x09c,CodesetsFreeVecPooledA(a0,a1,a2)) +#pragma amicall(CodesetsBase,0x0a2,CodesetsConvertStrA(a0)) +#pragma amicall(CodesetsBase,0x0a8,CodesetsListCreateA(a0)) +#pragma amicall(CodesetsBase,0x0ae,CodesetsListDeleteA(a0)) +#pragma amicall(CodesetsBase,0x0b4,CodesetsListAddA(a0,a1)) +#pragma amicall(CodesetsBase,0x0ba,CodesetsListRemoveA(a0)) +#endif +#if defined(_DCC) || defined(__SASC) +#pragma libcall CodesetsBase CodesetsConvertUTF32toUTF16 024 0ba9805 +#pragma libcall CodesetsBase CodesetsConvertUTF16toUTF32 02a 0ba9805 +#pragma libcall CodesetsBase CodesetsConvertUTF16toUTF8 030 0ba9805 +#pragma libcall CodesetsBase CodesetsIsLegalUTF8 036 0802 +#pragma libcall CodesetsBase CodesetsIsLegalUTF8Sequence 03c 9802 +#pragma libcall CodesetsBase CodesetsConvertUTF8toUTF16 042 0ba9805 +#pragma libcall CodesetsBase CodesetsConvertUTF32toUTF8 048 0ba9805 +#pragma libcall CodesetsBase CodesetsConvertUTF8toUTF32 04e 0ba9805 +#pragma libcall CodesetsBase CodesetsSetDefaultA 054 9802 +#pragma libcall CodesetsBase CodesetsFreeA 05a 9802 +#pragma libcall CodesetsBase CodesetsSupportedA 060 801 +#pragma libcall CodesetsBase CodesetsFindA 066 9802 +#pragma libcall CodesetsBase CodesetsFindBestA 06c 801 +#pragma libcall CodesetsBase CodesetsUTF8Len 072 801 +#pragma libcall CodesetsBase CodesetsUTF8ToStrA 078 801 +#pragma libcall CodesetsBase CodesetsUTF8CreateA 07e 801 +#pragma libcall CodesetsBase CodesetsEncodeB64A 084 801 +#pragma libcall CodesetsBase CodesetsDecodeB64A 08a 801 +#pragma libcall CodesetsBase CodesetsStrLenA 090 9802 +#pragma libcall CodesetsBase CodesetsIsValidUTF8 096 801 +#pragma libcall CodesetsBase CodesetsFreeVecPooledA 09c a9803 +#pragma libcall CodesetsBase CodesetsConvertStrA 0a2 801 +#pragma libcall CodesetsBase CodesetsListCreateA 0a8 801 +#pragma libcall CodesetsBase CodesetsListDeleteA 0ae 801 +#pragma libcall CodesetsBase CodesetsListAddA 0b4 9802 +#pragma libcall CodesetsBase CodesetsListRemoveA 0ba 801 +#endif +#ifdef __STORM__ +#pragma tagcall(CodesetsBase,0x054,CodesetsSetDefault(a0,a1)) +#pragma tagcall(CodesetsBase,0x05a,CodesetsFree(a0,a1)) +#pragma tagcall(CodesetsBase,0x060,CodesetsSupported(a0)) +#pragma tagcall(CodesetsBase,0x066,CodesetsFind(a0,a1)) +#pragma tagcall(CodesetsBase,0x06c,CodesetsFindBest(a0)) +#pragma tagcall(CodesetsBase,0x078,CodesetsUTF8ToStr(a0)) +#pragma tagcall(CodesetsBase,0x07e,CodesetsUTF8Create(a0)) +#pragma tagcall(CodesetsBase,0x084,CodesetsEncodeB64(a0)) +#pragma tagcall(CodesetsBase,0x08a,CodesetsDecodeB64(a0)) +#pragma tagcall(CodesetsBase,0x090,CodesetsStrLen(a0,a1)) +#pragma tagcall(CodesetsBase,0x09c,CodesetsFreeVecPooled(a0,a1,a2)) +#pragma tagcall(CodesetsBase,0x0a2,CodesetsConvertStr(a0)) +#pragma tagcall(CodesetsBase,0x0a8,CodesetsListCreate(a0)) +#pragma tagcall(CodesetsBase,0x0ae,CodesetsListDelete(a0)) +#pragma tagcall(CodesetsBase,0x0b4,CodesetsListAdd(a0,a1)) +#pragma tagcall(CodesetsBase,0x0ba,CodesetsListRemove(a0)) +#endif +#ifdef __SASC_60 +#pragma tagcall CodesetsBase CodesetsSetDefault 054 9802 +#pragma tagcall CodesetsBase CodesetsFree 05a 9802 +#pragma tagcall CodesetsBase CodesetsSupported 060 801 +#pragma tagcall CodesetsBase CodesetsFind 066 9802 +#pragma tagcall CodesetsBase CodesetsFindBest 06c 801 +#pragma tagcall CodesetsBase CodesetsUTF8ToStr 078 801 +#pragma tagcall CodesetsBase CodesetsUTF8Create 07e 801 +#pragma tagcall CodesetsBase CodesetsEncodeB64 084 801 +#pragma tagcall CodesetsBase CodesetsDecodeB64 08a 801 +#pragma tagcall CodesetsBase CodesetsStrLen 090 9802 +#pragma tagcall CodesetsBase CodesetsFreeVecPooled 09c a9803 +#pragma tagcall CodesetsBase CodesetsConvertStr 0a2 801 +#pragma tagcall CodesetsBase CodesetsListCreate 0a8 801 +#pragma tagcall CodesetsBase CodesetsListDelete 0ae 801 +#pragma tagcall CodesetsBase CodesetsListAdd 0b4 9802 +#pragma tagcall CodesetsBase CodesetsListRemove 0ba 801 +#endif + +#endif /* PRAGMAS_CODESETS_PRAGMAS_H */ diff --git a/workbench/libs/codesetslib/include/proto/codesets.h b/workbench/libs/codesetslib/include/proto/codesets.h new file mode 100755 index 000000000..88ebad73f --- /dev/null +++ b/workbench/libs/codesetslib/include/proto/codesets.h @@ -0,0 +1,74 @@ +#ifndef PROTO_CODESETS_H +#define PROTO_CODESETS_H + +/*************************************************************************** + + codesets.library - Amiga shared library for handling different codesets + Copyright (C) 2001-2005 by Alfonso [alfie] Ranieri . + Copyright (C) 2005-2007 by codesets.library Open Source Team + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + codesets.library project: http://sourceforge.net/projects/codesetslib/ + + $Id$ + +***************************************************************************/ + +#ifndef LIBRARIES_CODESETS_H +#include +#endif + +/****************************************************************************/ + +#ifndef __NOLIBBASE__ + #ifndef __USE_BASETYPE__ + extern struct Library * CodesetsBase; + #else + extern struct Library * CodesetsBase; + #endif /* __USE_BASETYPE__ */ +#endif /* __NOLIBBASE__ */ + +/****************************************************************************/ + +#ifdef __amigaos4__ + #include + #ifdef __USE_INLINE__ + #include + #endif /* __USE_INLINE__ */ + #ifndef CLIB_CODESETS_PROTOS_H + #define CLIB_CODESETS_PROTOS_H 1 + #endif /* CLIB_CODESETS_PROTOS_H */ + #ifndef __NOGLOBALIFACE__ + extern struct CodesetsIFace *ICodesets; + #endif /* __NOGLOBALIFACE__ */ +#else /* __amigaos4__ */ + #ifndef CLIB_CODESETS_PROTOS_H + #include + #endif /* CLIB_CODESETS_PROTOS_H */ + #if defined(__GNUC__) + #ifndef __PPC__ + #include + #else + #include + #endif /* __PPC__ */ + #elif defined(__VBCC__) + #ifndef __PPC__ + #include + #endif /* __PPC__ */ + #else + #include + #endif /* __GNUC__ */ +#endif /* __amigaos4__ */ + +/****************************************************************************/ + +#endif /* PROTO_CODESETS_H */ diff --git a/workbench/libs/codesetslib/include/proto/muimaster.h b/workbench/libs/codesetslib/include/proto/muimaster.h new file mode 100755 index 000000000..cd5ced21a --- /dev/null +++ b/workbench/libs/codesetslib/include/proto/muimaster.h @@ -0,0 +1,67 @@ +#ifndef PROTO_MUIMASTER_H +#define PROTO_MUIMASTER_H + +/* +** $Id$ +** Includes Release 50.1 +** +** Prototype/inline/pragma header file combo +** +** (C) Copyright 2003-2004 Amiga, Inc. +** All Rights Reserved +*/ + +#ifndef EXEC_TYPES_H +#include +#endif +#ifndef INTUITION_CLASSES_H +#include +#endif +#ifndef UTILITY_TAGITEM_H +#include +#endif +#ifndef LIBRARIES_MUI_H +#include +#endif + +/****************************************************************************/ + +#ifndef __NOLIBBASE__ +extern struct Library * MUIMasterBase; +#endif /* __NOLIBBASE__ */ + +/****************************************************************************/ + +#ifdef __amigaos4__ + #include + #ifdef __USE_INLINE__ + #include + #endif /* __USE_INLINE__ */ + #ifndef CLIB_MUIMASTER_PROTOS_H + #define CLIB_MUIMASTER_PROTOS_H 1 + #endif /* CLIB_MUIMASTER_PROTOS_H */ + #ifndef __NOGLOBALIFACE__ + extern struct MUIMasterIFace *IMUIMaster; + #endif /* __NOGLOBALIFACE__ */ +#else /* __amigaos4__ */ + #ifndef CLIB_MUIMASTER_PROTOS_H + #include + #endif /* CLIB_MUIMASTER_PROTOS_H */ + #if defined(__GNUC__) + #ifndef __PPC__ + #include + #else + #include + #endif /* __PPC__ */ + #elif defined(__VBCC__) + #ifndef __PPC__ + #include + #endif /* __PPC__ */ + #else + #include + #endif /* __GNUC__ */ +#endif /* __amigaos4__ */ + +/****************************************************************************/ + +#endif /* PROTO_MUIMASTER_H */ diff --git a/workbench/libs/codesetslib/src/Makefile b/workbench/libs/codesetslib/src/Makefile new file mode 100755 index 000000000..63910c5a9 --- /dev/null +++ b/workbench/libs/codesetslib/src/Makefile @@ -0,0 +1,281 @@ +#/*************************************************************************** +# +# codesets.library - Amiga shared library for handling different codesets +# Copyright (C) 2001-2005 by Alfonso [alfie] Ranieri . +# Copyright (C) 2005-2007 by codesets.library Open Source Team +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library 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 +# Lesser General Public License for more details. +# +# codesets.library project: http://sourceforge.net/projects/codesetslib/ +# +# $Id: makefile.os4 62 2007-01-23 08:55:18Z damato $ +# +#***************************************************************************/ + +########################################################################### +# This makefile is a very generic one. It tries to identify both, the host +# and the target operating system for which YAM should be compiled. +# However, this auto-detection can be easily overridden by directly +# specifying an option on the commandline while calling 'make'. +# +# Example: +# +# # to explicitly compile for AmigaOS3 +# > make OS=os3 +# +# # to compile for AmigaOS4 but with debugging +# > make OS=os4 DEBUG= +# + +############################################# +# find out the HOST operating system +# on which this makefile is run +ifndef (HOST) + HOST = $(shell uname) + ifeq ($(HOST), AmigaOS) + ifeq ($(shell uname -m), powerpc) + HOST = AmigaOS4 + endif + ifeq ($(shell uname -m), ppc) + HOST = AmigaOS4 + endif + endif +endif + +############################################# +# now we find out the target OS for +# which we are going to compile YAM in case +# the caller didn't yet define OS himself +ifndef (OS) + ifeq ($(HOST), AmigaOS4) + OS = os4 + else + ifeq ($(HOST), AmigaOS) + OS = os3 + else + ifeq ($(HOST), MorphOS) + OS = mos + else + ifeq ($(HOST), Aros) + OS = aros + else + OS = os4 + endif + endif + endif + endif +endif + +############################################# +# define common commands we use in this +# makefile. Please note that each of them +# might be overridden on the commandline. + +# common commands +FLEX = flex +FC = flexcat +EXPR = expr +CHMOD = chmod +SED = sed +DATE = date +RM = rm -f +RMDIR = rm -rf +MKDIR = mkdir + +# override commands for native builds +ifeq ($(HOST), AmigaOS4) + # AmigaOS4 host + RM = delete force + RMDIR = delete force all + MKDIR = makedir + DATE = gdate +else +ifeq ($(HOST), AmigaOS) + # AmigaOS3 host + RM = delete force + RMDIR = delete force all + MKDIR = makedir +else +ifeq ($(HOST), MorphOS) + # MorphOS host + RM = delete force + RMDIR = delete force all + MKDIR = makedir +endif +endif +endif + +########################################################################### +# CPU and DEBUG can be defined outside, defaults to above +# using e.g. "make DEBUG= CPU=-mcpu=603e" produces optimized non-debug +# PPC-603e version +# +# OPTFLAGS are disabled by DEBUG normally! +# +# ignored warnings are: +# none - because we want to compile with -Wall all the time + +# Common Directories +PREFIX = . +OBJDIR = .obj_$(OS) +BINDIR = bin_$(OS) + +# target definition +TARGET = $(BINDIR)/codesets.library + +# Common compiler/linker flags +WARN = -W -Wall -Wwrite-strings +OPTFLAGS = -O3 -fomit-frame-pointer -funroll-loops +DEBUG = -DDEBUG #-O0 +DEBUGSYM = -gstabs +CFLAGS = -I. -I../include $(CPU) $(WARN) $(OPTFLAGS) \ + $(DEBUG) $(DEBUGSYM) -c +LDFLAGS = $(CPU) $(DEBUGSYM) -nostartfiles +LDLIBS = + +# different options per target OS +ifeq ($(OS), os4) + + ############################## + # AmigaOS4 + + # Compiler/link/strip commands + CC = ppc-amigaos-gcc + STRIP = ppc-amigaos-strip + OBJDUMP = ppc-amigaos-objdump + + # Compiler/Linker flags + CRT = newlib + CPU = -mcpu=powerpc + REDEFINE = -DCoerceMethod=ICoerceMethod -DDoMethod=IDoMethod \ + -DDoSuperMethod=IDoSuperMethod -DDoSuperMethodA=IDoSuperMethodA + CFLAGS += -mcrt=$(CRT) -D__USE_INLINE__ -D__NEW_TIMEVAL_DEFINITION_USED__ \ + $(REDEFINE) -Wa,-mregnames + LDFLAGS += -mcrt=$(CRT) + + # additional object files required + M68KSTUBS = $(OBJDIR)/codesets_68k.o + +else +ifeq ($(OS), os3) + + ############################## + # AmigaOS3 + + # Compiler/link/strip commands + CC = m68k-amigaos-gcc + STRIP = m68k-amigaos-strip + OBJDUMP = m68k-amigaos-objdump + + # Compiler/Linker flags + CPU = -m68020-60 -msoft-float + CFLAGS += -noixemul + LDFLAGS += -noixemul + LDLIBS += -ldebug + +else +ifeq ($(OS), mos) + + ############################## + # MorphOS + + # Compiler/link/strip commands + CC = ppc-morphos-gcc + STRIP = ppc-morphos-strip + OBJDUMP = ppc-morphos-objdump + + # Compiler/Linker flags + CPU = -mcpu=powerpc + CFLAGS += -noixemul + LDFLAGS += -noixemul + LDLIBS += -ldebug + +else +ifeq ($(OS), aros) + + ############################## + # AROS + + # Compiler/link/strip commands + CC = i686-aros-gcc + STRIP = i686-aros-strip + OBJDUMP = i686-aros-objdump + + # Compiler/Linker flags + CPU = + +endif +endif +endif +endif + +########################################################################### +# Here starts all stuff that is common for all target platforms and +# hosts. + +OBJS = $(OBJDIR)/libinit.o \ + $(OBJDIR)/init.o \ + $(OBJDIR)/utils.o \ + $(OBJDIR)/base64.o \ + $(OBJDIR)/convertUTF.o \ + $(OBJDIR)/codesets.o \ + $(OBJDIR)/debug.o + +# +all: $(BINDIR) $(OBJDIR) $(TARGET) + +# make the object directories +$(OBJDIR): + @printf '\033[33mGenerating $@ directory\033[0m\n' + @$(MKDIR) $(OBJDIR) + +# make the binary directories +$(BINDIR): + @printf '\033[33mGenerating $@ directory\033[0m\n' + @$(MKDIR) $(BINDIR) + +# + +$(OBJDIR)/%.o: %.c + @printf '\033[32mCompiling $<\033[0m\n' + @$(CC) $(CFLAGS) $< -o $@ + +$(OBJDIR)/codesets_68k.o: ../include/codesets_68k.c + @printf '\033[32mCompiling $<\033[0m\n' + @$(CC) $(CFLAGS) $< -o $@ + +# + +$(TARGET): $(M68KSTUBS) $(OBJS) + @printf '\033[32mLinking \033[1m$@\033[0m\n' + @$(CC) $(LDFLAGS) -o $@.debug $(OBJS) $(M68KSTUBS) $(LDLIBS) -Wl,-Map,$@.map + @$(STRIP) --preserve-dates -R.comment -R.sdata2 -S -o $@ $@.debug + +# + +.PHONY: clean +clean: + -$(RM) $(TARGET) $(TARGET).debug $(TARGET).map $(OBJS) $(M68KSTUBS) + +.PHONY: distclean +distclean: clean + -$(RMDIR) $(OBJDIR) + -$(RMDIR) $(BINDIR) + +# + +$(OBJDIR)/libinit.o: libinit.c lib.h version.h base.h macros.h lib_protos.h +$(OBJDIR)/init.o: init.c lib.h base.h macros.h lib_protos.h +$(OBJDIR)/utils.o: utils.c lib.h base.h macros.h lib_protos.h +$(OBJDIR)/base64.o: base64.c lib.h base.h macros.h lib_protos.h +$(OBJDIR)/convertUTF.o: convertUTF.c lib.h convertUTF.h base.h macros.h lib_protos.h +$(OBJDIR)/codesets.o: codesets.c lib.h codesets_table.h convertUTF.h base.h macros.h lib_protos.h +$(OBJDIR)/debug.o: debug.c lib.h version.h diff --git a/workbench/libs/codesetslib/src/base.h b/workbench/libs/codesetslib/src/base.h new file mode 100755 index 000000000..efcab1c7d --- /dev/null +++ b/workbench/libs/codesetslib/src/base.h @@ -0,0 +1,43 @@ +/*************************************************************************** + + codesets.library - Amiga shared library for handling different codesets + Copyright (C) 2001-2005 by Alfonso [alfie] Ranieri . + Copyright (C) 2005-2007 by codesets.library Open Source Team + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + codesets.library project: http://sourceforge.net/projects/codesetslib/ + + $Id$ + +***************************************************************************/ + +/***************************************************************************/ + +struct LibraryHeader +{ + struct Library libBase; + struct Library *sysBase; + ULONG segList; + struct SignalSemaphore libSem; + APTR pool; + struct SignalSemaphore poolSem; + ULONG flags; + struct codesetList codesets; // list with all internal codesets. + struct codeset *systemCodeset; // ptr to the system's default codeset + struct codeset *utf8Codeset; // ptr to the fake utf8 codeset +}; + +/***************************************************************************/ + +extern struct LibraryHeader* CodesetsBase; + +/***************************************************************************/ diff --git a/workbench/libs/codesetslib/src/base64.c b/workbench/libs/codesetslib/src/base64.c new file mode 100755 index 000000000..157cf750f --- /dev/null +++ b/workbench/libs/codesetslib/src/base64.c @@ -0,0 +1,748 @@ +/*************************************************************************** + + codesets.library - Amiga shared library for handling different codesets + Copyright (C) 2001-2005 by Alfonso [alfie] Ranieri . + Copyright (C) 2005-2007 by codesets.library Open Source Team + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + codesets.library project: http://sourceforge.net/projects/codesetslib/ + + $Id$ + +***************************************************************************/ + +#include "lib.h" + +#ifndef __AROS__ +#include "SDI_stdarg.h" +#endif /* __AROS__ */ + +#include "debug.h" + +/****************************************************************************/ + +struct b64 +{ + APTR in; + APTR out; + ULONG flags; + int inIndex; + int inAvailable; + int outIndex; + int maxLineLen; + int lineCounter; + const char *eols; + LONG error; +}; + +enum +{ + B64FLG_SourceFile = 1<<0, + B64FLG_DestFile = 1<<1, + B64FLG_Unix = 1<<2, +}; + +/****************************************************************************/ + +#define MAXLINELEN 72 + +#ifndef EOF +#define EOF (-1) +#endif + +/****************************************************************************/ + +static const UBYTE etable[] = +{ + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, + 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, + 85, 86, 87, 88, 89, 90, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, + 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, + 121, 122, 48, 49, 50, 51, 52, 53, 54, 55, + 56, 57, 43, 47, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0 +}; + +static const UBYTE dtable[] = +{ + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 62, 128, 128, 128, 63, 52, 53, + 54, 55, 56, 57, 58, 59, 60, 61, 128, 128, + 128, 0, 128, 128, 128, 0, 1, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 128, 128, 128, 128, 128, 128, 26, 27, 28, + 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, + 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 0 +}; + +/****************************************************************************/ + +static BPTR +openIn(STRPTR name, ULONG * size) +{ + struct FileInfoBlock *fib; + BPTR file; + + ENTER(); + + if((fib = AllocDosObject(DOS_FIB,NULL))) + { + if((file = Open(name,MODE_OLDFILE))) + { + if(!ExamineFH(file,fib)) + { + Close(file); + file = 0; + } + else + { + *size = fib->fib_Size; + } + } + + FreeDosObject(DOS_FIB,fib); + } + else + file = 0; + + RETURN(file); + return file; +} + +/****************************************************************************/ + +static int +inchar(struct b64 *b64) +{ + int c; + + ENTER(); + + if(b64->flags & B64FLG_SourceFile) + { + if((c = FGetC((BPTR)b64->in))==EOF) + { + if(IoErr()) + b64->error = CSR_B64_ERROR_DOS; + } + } + else + { + if(!b64->inAvailable) + { + RETURN(EOF); + return EOF; + } + + c = ((STRPTR)b64->in)[b64->inIndex++]; + b64->inAvailable--; + } + + RETURN(c); + return c; +} + +/****************************************************************************/ + +static int +ochar(struct b64 *b64,int c) +{ + ENTER(); + + if(b64->flags & B64FLG_DestFile) + { + int r = 0; + + if(b64->maxLineLen && (b64->lineCounter>=b64->maxLineLen)) + { + r = FPuts((BPTR)b64->out,b64->eols); + b64->lineCounter = 0; + } + + if(!r) + { + r = FPutC((BPTR)b64->out,c); + } + + if(r==EOF) + { + b64->error = CSR_B64_ERROR_DOS; + + RETURN(EOF); + return EOF; + } + + b64->lineCounter++; + } + else + { + ((STRPTR)b64->out)[b64->outIndex++] = c; + } + + RETURN(0); + return 0; +} + +/****************************************************************************/ + +static int +ostring(struct b64 *b64,UBYTE * buf,int s) +{ + int i; + + ENTER(); + + if(b64->flags & B64FLG_DestFile) + { + int r; + + for(r = i = 0; (r!=EOF) && (iout,buf[i]); + } + + if(r==EOF) + { + b64->error = CSR_B64_ERROR_DOS; + + RETURN(EOF); + return EOF; + } + } + else + { + for(i = 0; iout)[b64->outIndex++] = buf[i]; + } + + RETURN(0); + return 0; +} + +/****************************************************************************/ + +static int +insig(struct b64 *b64) +{ + int c; + + for(;;) + { + c = inchar(b64); + + if((c==EOF) || (c>' ')) + { + RETURN(c); + return c; + } + } +} + +/****************************************************************************/ + +#ifdef __AROS__ +AROS_LH1(ULONG, CodesetsEncodeB64A, + AROS_LHA(struct TagItem *, attrs, A0), + struct LibraryHeader *, library, 21, Codesets +) +{ + AROS_LIBFUNC_INIT +#else +ULONG LIBFUNC +CodesetsEncodeB64A(REG(a0, struct TagItem *attrs)) +{ +#endif + struct b64 b64; + struct TagItem *tag; + STRPTR source; + APTR dest, in, out; + ULONG totSize, stop, flags; + ULONG size; + int sourceLen = 0, maxLineLen; + + flags = 0; + + if((tag = FindTagItem(CSA_B64SourceFile,attrs))) + { + source = (STRPTR)tag->ti_Data; + flags |= B64FLG_SourceFile; + } + else + { + if((!(source = (STRPTR)GetTagData(CSA_B64SourceString, 0, attrs)))) + { + RETURN(CSR_B64_ERROR_MEM); + return CSR_B64_ERROR_MEM; + } + + if((tag = FindTagItem(CSA_B64SourceLen,attrs))) + sourceLen = tag->ti_Data; + else + sourceLen = strlen(source); + } + + if((tag = FindTagItem(CSA_B64DestFile,attrs))) + { + dest = (APTR)tag->ti_Data; + flags |= B64FLG_DestFile; + } + else + { + if((!(dest = (APTR)GetTagData(CSA_B64DestPtr, 0, attrs)))) + { + RETURN(CSR_B64_ERROR_MEM); + return CSR_B64_ERROR_MEM; + } + } + + maxLineLen = GetTagData(CSA_B64MaxLineLen,0,attrs); + if(maxLineLen<=0 || maxLineLen>=256) + maxLineLen = MAXLINELEN; + + if(GetTagData(CSA_B64Unix,TRUE,attrs)) + flags |= B64FLG_Unix; + + /* source */ + if(flags & B64FLG_SourceFile) + { + if(!(in = (APTR)openIn(source,&size))) + { + RETURN(CSR_B64_ERROR_DOS); + return CSR_B64_ERROR_DOS; + } + + b64.inAvailable = 0; + } + else + { + in = source; + size = sourceLen; + b64.inAvailable = size; + } + + totSize = size<<1; + + /* dest */ + if(flags & B64FLG_DestFile) + { + if(!(out = (APTR)Open(dest,MODE_NEWFILE))) + { + RETURN(CSR_B64_ERROR_DOS); + return CSR_B64_ERROR_DOS; + } + } + else + { + if(!totSize) + totSize = 8; + + if(!(out = allocArbitrateVecPooled(totSize))) + { + if(flags & B64FLG_SourceFile) + Close((BPTR)in); + + RETURN(CSR_B64_ERROR_MEM); + return CSR_B64_ERROR_MEM; + } + + *((STRPTR *)dest) = out; + } + + /* set globals */ + b64.in = in; + b64.out = out; + b64.flags = flags; + b64.inIndex = 0; + b64.outIndex = 0; + b64.maxLineLen = maxLineLen; + b64.lineCounter = 0; + b64.eols = (flags & B64FLG_Unix) ? "\n" : "\r\n"; + b64.error = 0; + + /* encode */ + stop = FALSE; + while(!stop) + { + UBYTE igroup[3], ogroup[4]; + int i, c, n; + + igroup[0] = igroup[1] = igroup[2] = 0; + + for(n = 0; n<3; n++) + { + c = inchar(&b64); + if(c==EOF) + { + stop = TRUE; + break; + } + + igroup[n] = (UBYTE) c; + } + + if(n>0) + { + ogroup[0] = etable[igroup[0]>>2]; + ogroup[1] = etable[((igroup[0] & 3)<<4) | (igroup[1]>>4)]; + ogroup[2] = etable[((igroup[1] & 0xF)<<2) | (igroup[2]>>6)]; + ogroup[3] = etable[igroup[2] & 0x3F]; + + if(n<3) + { + ogroup[3] = '='; + if(n<2) + ogroup[2] = '='; + } + + for(i=0; i<4; i++) + { + c = ochar(&b64,ogroup[i]); + if(c==EOF) + { + stop = TRUE; + break; + } + } + } + } + + if(!(b64.flags & B64FLG_DestFile)) + ((STRPTR)out)[b64.outIndex] = 0; + + /* close source */ + if(flags & B64FLG_SourceFile) + Close((BPTR)in); + + /* flush and close dest */ + if(flags & B64FLG_DestFile) + { + if(!b64.error) + { + if(FPuts((BPTR)out,b64.eols)==EOF) + b64.error = CSR_B64_ERROR_DOS; + + #if defined(__amigaos4__) + FFlush((BPTR)out); + #else + Flush((BPTR)out); + #endif + } + + Close((BPTR)out); + } + else + { + if(b64.error) + { + freeArbitratePooled(out,totSize); + } + } + + RETURN((ULONG)b64.error); + return (ULONG)b64.error; +#ifdef __AROS__ + AROS_LIBFUNC_EXIT +#endif +} + +#ifndef __AROS__ +LIBSTUB(CodesetsEncodeB64A, ULONG, REG(a0, struct TagItem *attrs)) +{ + #ifdef __MORPHOS__ + return CodesetsEncodeB64A((struct TagItem *)REG_A0); + #else + return CodesetsEncodeB64A(attrs); + #endif +} +#endif + +#ifdef __amigaos4__ +LIBSTUBVA(CodesetsEncodeB64, ULONG, ...) +{ + ULONG res; + VA_LIST args; + + VA_START(args, self); + res = CodesetsEncodeB64A(VA_ARG(args, struct TagItem *)); + VA_END(args); + + return res; +} +#endif + +/****************************************************************************/ + +#ifdef __AROS__ +AROS_LH1(ULONG, CodesetsDecodeB64A, + AROS_LHA(struct TagItem *, attrs, A0), + struct LibraryHeader *, library, 22, Codesets +) +{ + AROS_LIBFUNC_INIT +#else +ULONG LIBFUNC +CodesetsDecodeB64A(REG(a0, struct TagItem *attrs)) +{ +#endif + struct b64 b64; + struct TagItem *tag; + STRPTR source; + APTR dest, in, out; + ULONG totSize, flags, errcheck; + ULONG size; + int sourceLen = 0; + + ENTER(); + + flags = 0; + + if((tag = FindTagItem(CSA_B64SourceFile,attrs))) + { + source = (STRPTR)tag->ti_Data; + flags |= B64FLG_SourceFile; + } + else + { + if (!(source = (STRPTR)GetTagData(CSA_B64SourceString,0,attrs))) + { + RETURN(CSR_B64_ERROR_MEM); + return CSR_B64_ERROR_MEM; + } + + if((tag = FindTagItem(CSA_B64SourceLen,attrs))) + sourceLen = tag->ti_Data; + else + sourceLen = strlen(source); + } + + if((tag = FindTagItem(CSA_B64DestFile,attrs))) + { + dest = (APTR)tag->ti_Data; + flags |= B64FLG_DestFile; + } + else + { + if(!(dest = (APTR)GetTagData(CSA_B64DestPtr, 0, attrs))) + { + RETURN(CSR_B64_ERROR_MEM); + return CSR_B64_ERROR_MEM; + } + } + + /* source */ + if(flags & B64FLG_SourceFile) + { + if(!(in = (APTR)openIn(source,&size))) + { + RETURN(CSR_B64_ERROR_DOS); + return CSR_B64_ERROR_DOS; + } + + b64.inAvailable = 0; + } + else + { + in = source; + size = sourceLen; + b64.inAvailable = size; + } + + totSize = size<<1; + + /* dest */ + if(flags & B64FLG_DestFile) + { + if(!(out = (APTR)Open(dest,MODE_NEWFILE))) + { + RETURN(CSR_B64_ERROR_DOS); + return CSR_B64_ERROR_DOS; + } + } + else + { + if(!totSize) + totSize = 8; + + if(!(out = allocArbitrateVecPooled(totSize))) + { + if(flags & B64FLG_SourceFile) + Close((BPTR)in); + + RETURN(CSR_B64_ERROR_MEM); + return CSR_B64_ERROR_MEM; + } + + *((STRPTR *)dest) = out; + } + + b64.in = in; + b64.out = out; + b64.flags = flags; + b64.inIndex = 0; + b64.outIndex = 0; + b64.maxLineLen = 0; + b64.lineCounter = 0; + b64.eols = NULL; + b64.error = 0; + + /* parse error check */ + errcheck = !GetTagData(CSA_B64FLG_NtCheckErr,FALSE,attrs); + + /* decode */ + for(;;) + { + UBYTE a[4], b[4], o[3]; + int i; + + for(i = 0; i<4; i++) + { + int c = insig (&b64); + + if(c==EOF) + { + if(!(b64.flags & B64FLG_DestFile)) + ((STRPTR)out)[b64.outIndex] = 0; + + if(!b64.error && errcheck && (i>0)) + b64.error = CSR_B64_ERROR_INCOMPLETE; + + goto end; + } + + if(dtable[c] & 0x80) + { + if(errcheck) + { + b64.error = CSR_B64_ERROR_ILLEGAL; + + goto end; + } + + i--; + continue; + } + + a[i] = (UBYTE) c; + b[i] = (UBYTE) dtable[c]; + } + + o[0] = (b[0]<<2) | (b[1]>>4); + o[1] = (b[1]<<4) | (b[2]>>2); + o[2] = (b[2]<<6) | b[3]; + + i = a[2]=='=' ? 1 : (a[3]=='=' ? 2 : 3); + + if(ostring(&b64,o,i)==EOF || i < 3) + goto end; + } + +end: + + /* close source */ + if(flags & B64FLG_SourceFile) + Close((BPTR)in); + + /* flush and close dest */ + if(flags & B64FLG_DestFile) + { + if(!b64.error) + { + if(FPuts((BPTR)out,b64.eols)==EOF) + b64.error = CSR_B64_ERROR_DOS; + + #if defined(__amigaos4__) + FFlush((BPTR)out); + #else + Flush((BPTR)out); + #endif + } + + Close((BPTR)out); + } + else + { + if(b64.error) + { + freeArbitratePooled(out,totSize); + } + } + + RETURN((ULONG)b64.error); + return (ULONG)b64.error; +#ifdef __AROS__ + AROS_LIBFUNC_EXIT +#endif +} + +#ifndef __AROS__ +LIBSTUB(CodesetsDecodeB64A, ULONG, REG(a0, struct TagItem *attrs)) +{ + #ifdef __MORPHOS__ + return CodesetsDecodeB64A((struct TagItem *)REG_A0); + #else + return CodesetsDecodeB64A(attrs); + #endif +} +#endif + +#ifdef __amigaos4__ +LIBSTUBVA(CodesetsDecodeB64, ULONG, ...) +{ + ULONG res; + VA_LIST args; + + VA_START(args, self); + res = CodesetsDecodeB64A(VA_ARG(args, struct TagItem *)); + VA_END(args); + + return res; +} +#endif + +/****************************************************************************/ diff --git a/workbench/libs/codesetslib/src/codesets.c b/workbench/libs/codesetslib/src/codesets.c new file mode 100755 index 000000000..fcffff6c4 --- /dev/null +++ b/workbench/libs/codesetslib/src/codesets.c @@ -0,0 +1,5854 @@ +/*************************************************************************** + + codesets.library - Amiga shared library for handling different codesets + Copyright (C) 2001-2005 by Alfonso [alfie] Ranieri . + Copyright (C) 2005-2007 by codesets.library Open Source Team + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + codesets.library project: http://sourceforge.net/projects/codesetslib/ + + Most of the code included in this file was relicensed from GPL to LGPL + from the source code of SimpleMail (http://www.sf.net/projects/simplemail) + with full permissions by its authors. + + $Id$ + +***************************************************************************/ + +#include "lib.h" + +#include + +#include +#include +#include +#include +#include + +#include "codesets_table.h" +#include "convertUTF.h" + +#ifndef __AROS__ +#include "SDI_stdarg.h" +#endif /* __AROS__ */ + +#include "debug.h" + +/****************************************************************************/ + +// data tables for statistically analyzing text and automatically +// identifying the corresponing codesets which matches the autodetection +/// cp1251_data[] +static const char cp1251_data[] = +{ + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x80, 0x80, 0x00, 0x80, 0x00, 0x00, 0x80, 0x80, + 0x00, 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x80, 0x80, 0x00, 0x80, 0x00, 0x00, 0x80, 0x80, + 0x00, 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x80, 0x80, 0x00, 0x80, 0x00, 0x00, 0x80, 0x80, + 0x00, 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x09, 0x1B, 0x06, 0x1A, 0x0E, 0x0B, 0x22, 0x03, 0x08, 0x33, 0x65, 0x25, 0x20, 0x00, 0x0A, + 0x15, 0x32, 0x2F, 0x01, 0x00, 0x0B, 0x01, 0x09, 0x0A, 0x02, 0x80, 0x00, 0x00, 0x00, 0x0A, 0x1A, + 0x00, 0x09, 0x1B, 0x06, 0x1A, 0x0E, 0x0B, 0x22, 0x03, 0x08, 0x33, 0x65, 0x25, 0x20, 0x00, 0x0A, + 0x15, 0x32, 0x2F, 0x01, 0x00, 0x0B, 0x01, 0x09, 0x0A, 0x02, 0x80, 0x00, 0x00, 0x00, 0x0A, 0x1A, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x07, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x08, 0x80, 0x02, 0x06, 0x00, 0x03, 0x1C, 0x00, + 0x0C, 0x00, 0x00, 0x0B, 0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x21, 0x01, 0x00, 0x00, 0x06, + 0x07, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x08, 0x80, 0x02, 0x06, 0x00, 0x03, 0x1C, 0x00, + 0x0C, 0x00, 0x00, 0x0B, 0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x21, 0x01, 0x00, 0x00, 0x06, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x37, 0x00, 0x01, 0x00, 0x04, 0x34, 0x00, 0x06, 0x1F, 0x00, 0x03, 0x07, 0x01, 0x0A, 0x4C, 0x02, + 0x06, 0x21, 0x02, 0x08, 0x00, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x1B, 0x03, 0x00, 0x00, 0x03, + 0x37, 0x00, 0x01, 0x00, 0x04, 0x34, 0x00, 0x06, 0x1F, 0x00, 0x03, 0x07, 0x01, 0x0A, 0x4C, 0x02, + 0x06, 0x21, 0x02, 0x08, 0x00, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x1B, 0x03, 0x00, 0x00, 0x03, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x11, 0x00, 0x00, 0x00, 0x0B, 0x02, 0x80, 0x00, 0x08, 0x80, 0x02, 0x13, 0x00, 0x06, 0x4E, 0x80, + 0x09, 0x00, 0x00, 0x09, 0x80, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x80, 0x00, 0x80, 0x00, 0x00, + 0x11, 0x00, 0x00, 0x00, 0x0B, 0x02, 0x80, 0x00, 0x08, 0x80, 0x02, 0x13, 0x00, 0x06, 0x4E, 0x80, + 0x09, 0x00, 0x00, 0x09, 0x80, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x80, 0x00, 0x80, 0x00, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x31, 0x00, 0x0C, 0x00, 0x00, 0x32, 0x01, 0x00, 0x1C, 0x80, 0x04, 0x06, 0x00, 0x16, 0x2B, 0x00, + 0x0E, 0x02, 0x01, 0x16, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x08, 0x07, 0x00, 0x00, 0x04, + 0x31, 0x00, 0x0C, 0x00, 0x00, 0x32, 0x01, 0x00, 0x1C, 0x80, 0x04, 0x06, 0x00, 0x16, 0x2B, 0x00, + 0x0E, 0x02, 0x01, 0x16, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x08, 0x07, 0x00, 0x00, 0x04, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x12, 0x12, 0x25, 0x20, 0x15, 0x0A, 0x10, 0x01, 0x18, 0x0C, 0x47, 0x26, 0x50, 0x02, 0x0B, + 0x45, 0x2A, 0x3C, 0x01, 0x00, 0x04, 0x04, 0x0A, 0x0B, 0x08, 0x80, 0x80, 0x00, 0x80, 0x01, 0x01, + 0x00, 0x12, 0x12, 0x25, 0x20, 0x15, 0x0A, 0x10, 0x01, 0x18, 0x0C, 0x47, 0x26, 0x50, 0x02, 0x0B, + 0x45, 0x2A, 0x3C, 0x01, 0x00, 0x04, 0x04, 0x0A, 0x0B, 0x08, 0x80, 0x80, 0x00, 0x80, 0x01, 0x01, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x10, 0x00, 0x00, 0x00, 0x08, 0x25, 0x00, 0x00, 0x11, 0x80, 0x02, 0x00, 0x00, 0x08, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x04, 0x80, 0x80, 0x80, 0x01, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x80, + 0x10, 0x00, 0x00, 0x00, 0x08, 0x25, 0x00, 0x00, 0x11, 0x80, 0x02, 0x00, 0x00, 0x08, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x04, 0x80, 0x80, 0x80, 0x01, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x3B, 0x02, 0x07, 0x04, 0x0A, 0x08, 0x00, 0x00, 0x05, 0x80, 0x02, 0x03, 0x03, 0x0F, 0x05, 0x80, + 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x80, 0x04, 0x03, + 0x3B, 0x02, 0x07, 0x04, 0x0A, 0x08, 0x00, 0x00, 0x05, 0x80, 0x02, 0x03, 0x03, 0x0F, 0x05, 0x80, + 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x80, 0x00, 0x03, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x05, 0x1B, 0x05, 0x12, 0x13, 0x04, 0x16, 0x03, 0x0A, 0x1C, 0x3B, 0x1C, 0x25, 0x01, 0x03, + 0x07, 0x22, 0x29, 0x00, 0x00, 0x13, 0x0B, 0x0A, 0x0A, 0x03, 0x80, 0x00, 0x00, 0x80, 0x02, 0x0A, + 0x00, 0x05, 0x1B, 0x05, 0x12, 0x13, 0x04, 0x16, 0x03, 0x0A, 0x1C, 0x3B, 0x1C, 0x25, 0x01, 0x03, + 0x07, 0x22, 0x29, 0x00, 0x00, 0x13, 0x0B, 0x0A, 0x0A, 0x03, 0x80, 0x00, 0x00, 0x80, 0x02, 0x0A, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x00, 0x80, 0x80, 0x01, 0x80, 0x00, 0x80, 0x00, 0x80, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, + 0x80, 0x03, 0x01, 0x80, 0x00, 0x80, 0x01, 0x03, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x00, 0x80, 0x80, 0x01, 0x80, 0x00, 0x80, 0x00, 0x80, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, + 0x80, 0x03, 0x01, 0x80, 0x00, 0x80, 0x01, 0x03, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x60, 0x00, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x2D, 0x00, 0x00, 0x07, 0x00, 0x04, 0x5F, 0x00, + 0x1B, 0x00, 0x06, 0x1E, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x01, 0x80, 0x80, + 0x60, 0x00, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x2D, 0x00, 0x00, 0x07, 0x00, 0x04, 0x5F, 0x00, + 0x1B, 0x00, 0x06, 0x1E, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x01, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x66, 0x00, 0x00, 0x02, 0x00, 0x3C, 0x02, 0x00, 0x4A, 0x80, 0x05, 0x04, 0x00, 0x04, 0x43, 0x00, + 0x00, 0x12, 0x01, 0x10, 0x80, 0x00, 0x00, 0x01, 0x00, 0x00, 0x80, 0x0A, 0x2D, 0x80, 0x09, 0x10, + 0x66, 0x00, 0x00, 0x02, 0x00, 0x3C, 0x02, 0x00, 0x4A, 0x80, 0x05, 0x04, 0x00, 0x04, 0x43, 0x00, + 0x00, 0x12, 0x01, 0x10, 0x80, 0x00, 0x00, 0x01, 0x00, 0x00, 0x80, 0x0A, 0x2D, 0x80, 0x09, 0x10, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x22, 0x00, 0x00, 0x00, 0x00, 0x2D, 0x00, 0x80, 0x21, 0x80, 0x01, 0x03, 0x00, 0x16, 0x29, 0x00, + 0x00, 0x01, 0x00, 0x14, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x80, 0x0D, 0x00, 0x00, 0x80, 0x04, + 0x22, 0x00, 0x00, 0x00, 0x00, 0x2D, 0x00, 0x80, 0x21, 0x80, 0x01, 0x03, 0x00, 0x16, 0x29, 0x00, + 0x00, 0x01, 0x00, 0x14, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x80, 0x0D, 0x00, 0x00, 0x80, 0x04, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x78, 0x00, 0x00, 0x01, 0x01, 0x6E, 0x00, 0x00, 0x48, 0x00, 0x09, 0x00, 0x00, 0x16, 0x6A, 0x00, + 0x01, 0x02, 0x04, 0x25, 0x00, 0x80, 0x06, 0x03, 0x00, 0x01, 0x80, 0x20, 0x13, 0x80, 0x03, 0x19, + 0x78, 0x00, 0x00, 0x01, 0x01, 0x6E, 0x00, 0x00, 0x48, 0x00, 0x09, 0x00, 0x00, 0x16, 0x6A, 0x00, + 0x01, 0x02, 0x04, 0x25, 0x00, 0x80, 0x06, 0x03, 0x00, 0x01, 0x80, 0x20, 0x13, 0x80, 0x03, 0x19, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x22, 0x3F, 0x2D, 0x39, 0x17, 0x14, 0x0D, 0x0B, 0x2E, 0x1E, 0x4A, 0x35, 0x43, 0x01, 0x13, + 0x38, 0x3E, 0x43, 0x00, 0x00, 0x07, 0x01, 0x1C, 0x0B, 0x02, 0x80, 0x00, 0x00, 0x00, 0x03, 0x06, + 0x00, 0x22, 0x3F, 0x2D, 0x39, 0x17, 0x14, 0x0D, 0x0B, 0x2E, 0x1E, 0x4A, 0x35, 0x43, 0x01, 0x13, + 0x38, 0x3E, 0x43, 0x00, 0x00, 0x07, 0x01, 0x1C, 0x0B, 0x02, 0x80, 0x00, 0x00, 0x00, 0x03, 0x06, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x12, 0x80, 0x00, 0x00, 0x00, 0x1A, 0x80, 0x80, 0x0E, 0x80, 0x02, 0x0C, 0x00, 0x01, 0x6E, 0x00, + 0x3E, 0x00, 0x05, 0x0B, 0x80, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x04, 0x00, 0x80, 0x00, 0x03, + 0x12, 0x80, 0x00, 0x00, 0x00, 0x1A, 0x80, 0x80, 0x0E, 0x80, 0x02, 0x0C, 0x00, 0x01, 0x6E, 0x00, + 0x3E, 0x00, 0x05, 0x0B, 0x80, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x04, 0x00, 0x80, 0x00, 0x03, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x4C, 0x00, 0x05, 0x02, 0x03, 0x3E, 0x02, 0x00, 0x31, 0x80, 0x06, 0x01, 0x02, 0x09, 0x4B, 0x01, + 0x00, 0x03, 0x05, 0x22, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x14, 0x07, 0x00, 0x02, 0x0C, + 0x4C, 0x00, 0x05, 0x02, 0x03, 0x3E, 0x02, 0x00, 0x31, 0x80, 0x06, 0x01, 0x02, 0x09, 0x4B, 0x01, + 0x00, 0x03, 0x05, 0x22, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x14, 0x07, 0x00, 0x02, 0x0C, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x11, 0x00, 0x11, 0x00, 0x02, 0x30, 0x01, 0x00, 0x15, 0x80, 0x23, 0x1A, 0x09, 0x0D, 0x1D, 0x14, + 0x02, 0x05, 0x6E, 0x07, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x2B, 0x00, 0x02, 0x2C, + 0x11, 0x00, 0x11, 0x00, 0x02, 0x30, 0x01, 0x00, 0x15, 0x80, 0x23, 0x1A, 0x09, 0x0D, 0x1D, 0x14, + 0x02, 0x05, 0x6E, 0x07, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x2B, 0x00, 0x02, 0x2C, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x41, 0x00, 0x11, 0x00, 0x01, 0x35, 0x00, 0x80, 0x28, 0x80, 0x0B, 0x02, 0x00, 0x0B, 0x7F, 0x00, + 0x24, 0x0C, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x3D, 0x00, 0x00, 0x07, + 0x41, 0x00, 0x11, 0x00, 0x01, 0x35, 0x00, 0x80, 0x28, 0x80, 0x0B, 0x02, 0x00, 0x0B, 0x7F, 0x00, + 0x24, 0x0C, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x3D, 0x00, 0x00, 0x07, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x01, 0x08, 0x08, 0x0F, 0x15, 0x02, 0x11, 0x04, 0x00, 0x01, 0x0B, 0x16, 0x0B, 0x03, 0x00, 0x08, + 0x05, 0x13, 0x16, 0x00, 0x00, 0x06, 0x00, 0x09, 0x0A, 0x02, 0x80, 0x80, 0x00, 0x00, 0x0B, 0x01, + 0x01, 0x08, 0x08, 0x0F, 0x15, 0x02, 0x11, 0x04, 0x00, 0x01, 0x0B, 0x16, 0x0B, 0x03, 0x00, 0x08, + 0x05, 0x13, 0x16, 0x00, 0x00, 0x06, 0x00, 0x09, 0x0A, 0x02, 0x80, 0x80, 0x00, 0x00, 0x0B, 0x01, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x80, 0x80, 0x80, 0x80, 0x01, 0x80, 0x80, 0x02, 0x80, 0x80, 0x00, 0x00, 0x00, 0x01, 0x80, + 0x01, 0x80, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, + 0x00, 0x80, 0x80, 0x80, 0x80, 0x01, 0x80, 0x80, 0x02, 0x80, 0x80, 0x00, 0x00, 0x00, 0x01, 0x80, + 0x01, 0x80, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x08, 0x80, 0x05, 0x00, 0x00, 0x01, 0x80, 0x00, 0x02, 0x80, 0x00, 0x02, 0x00, 0x02, 0x18, 0x80, + 0x01, 0x00, 0x00, 0x02, 0x80, 0x80, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x80, 0x00, + 0x08, 0x80, 0x05, 0x00, 0x00, 0x01, 0x80, 0x00, 0x02, 0x80, 0x00, 0x02, 0x00, 0x02, 0x18, 0x80, + 0x01, 0x00, 0x00, 0x02, 0x80, 0x80, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x80, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x07, 0x80, 0x01, 0x80, 0x80, 0x0A, 0x80, 0x80, 0x02, 0x80, 0x00, 0x80, 0x80, 0x80, 0x02, 0x80, + 0x80, 0x00, 0x00, 0x03, 0x80, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x03, 0x80, 0x80, 0x80, 0x80, + 0x07, 0x80, 0x01, 0x80, 0x80, 0x0A, 0x80, 0x80, 0x02, 0x80, 0x00, 0x80, 0x80, 0x80, 0x02, 0x80, + 0x80, 0x00, 0x00, 0x03, 0x80, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x03, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x15, 0x80, 0x00, 0x80, 0x00, 0x21, 0x80, 0x80, 0x14, 0x80, 0x0B, 0x03, 0x00, 0x07, 0x02, 0x80, + 0x00, 0x80, 0x1A, 0x09, 0x80, 0x80, 0x80, 0x80, 0x01, 0x80, 0x80, 0x00, 0x04, 0x80, 0x80, 0x80, + 0x15, 0x80, 0x00, 0x80, 0x00, 0x21, 0x80, 0x80, 0x14, 0x80, 0x0B, 0x03, 0x00, 0x07, 0x02, 0x80, + 0x00, 0x80, 0x1A, 0x09, 0x80, 0x80, 0x80, 0x80, 0x01, 0x80, 0x80, 0x00, 0x04, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x0A, 0x80, 0x00, 0x00, 0x00, 0x17, 0x00, 0x80, 0x13, 0x00, 0x0D, 0x05, 0x00, 0x03, 0x05, 0x00, + 0x00, 0x80, 0x00, 0x03, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x09, 0x80, 0x80, 0x80, + 0x0A, 0x80, 0x00, 0x00, 0x00, 0x17, 0x00, 0x80, 0x13, 0x00, 0x0D, 0x05, 0x00, 0x03, 0x05, 0x00, + 0x00, 0x80, 0x00, 0x03, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x09, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x03, 0x80, 0x80, 0x80, 0x00, 0x11, 0x80, 0x00, 0x07, 0x80, 0x80, 0x00, 0x80, 0x00, 0x00, 0x80, + 0x00, 0x80, 0x80, 0x02, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x80, 0x00, 0x80, + 0x03, 0x80, 0x80, 0x80, 0x00, 0x11, 0x80, 0x00, 0x07, 0x80, 0x80, 0x00, 0x80, 0x00, 0x00, 0x80, + 0x00, 0x80, 0x80, 0x02, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x80, 0x00, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x02, 0x0B, 0x01, 0x02, 0x0E, 0x00, 0x00, 0x00, 0x11, 0x02, 0x18, 0x0A, 0x02, 0x00, 0x02, + 0x04, 0x09, 0x08, 0x00, 0x00, 0x09, 0x00, 0x01, 0x0A, 0x00, 0x80, 0x00, 0x80, 0x80, 0x00, 0x00, + 0x00, 0x02, 0x0B, 0x01, 0x02, 0x0E, 0x00, 0x00, 0x00, 0x11, 0x02, 0x18, 0x0A, 0x02, 0x00, 0x02, + 0x04, 0x09, 0x08, 0x00, 0x00, 0x09, 0x00, 0x01, 0x0A, 0x00, 0x80, 0x00, 0x80, 0x80, 0x00, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x04, 0x80, 0x01, 0x01, 0x80, 0x13, 0x80, 0x02, 0x0C, 0x00, 0x00, + 0x00, 0x0A, 0x00, 0x80, 0x00, 0x00, 0x01, 0x01, 0x07, 0x00, 0x80, 0x80, 0x00, 0x80, 0x04, 0x04, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x04, 0x80, 0x01, 0x01, 0x80, 0x13, 0x80, 0x02, 0x0C, 0x00, 0x00, + 0x00, 0x0A, 0x00, 0x80, 0x00, 0x00, 0x01, 0x01, 0x07, 0x00, 0x80, 0x80, 0x00, 0x80, 0x04, 0x04, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x16, 0x80, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x16, 0x80, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, + 0x80, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x00, 0x02, 0x03, 0x07, 0x01, 0x02, 0x02, 0x00, 0x01, 0x02, 0x0A, 0x06, 0x07, 0x00, 0x02, + 0x00, 0x07, 0x10, 0x00, 0x80, 0x02, 0x01, 0x01, 0x00, 0x01, 0x80, 0x80, 0x00, 0x80, 0x00, 0x00, + 0x80, 0x00, 0x02, 0x03, 0x07, 0x01, 0x02, 0x02, 0x00, 0x01, 0x02, 0x0A, 0x06, 0x07, 0x00, 0x02, + 0x00, 0x07, 0x10, 0x00, 0x80, 0x02, 0x01, 0x01, 0x00, 0x01, 0x80, 0x80, 0x00, 0x80, 0x00, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x09, 0x1B, 0x06, 0x1A, 0x0E, 0x0B, 0x22, 0x03, 0x08, 0x33, 0x65, 0x25, 0x20, 0x00, 0x0A, + 0x15, 0x32, 0x2F, 0x01, 0x00, 0x0B, 0x01, 0x09, 0x0A, 0x02, 0x80, 0x00, 0x00, 0x00, 0x0A, 0x1A, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x07, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x08, 0x80, 0x02, 0x06, 0x00, 0x03, 0x1C, 0x00, + 0x0C, 0x00, 0x00, 0x0B, 0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x21, 0x01, 0x00, 0x00, 0x06, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x37, 0x00, 0x01, 0x00, 0x04, 0x34, 0x00, 0x06, 0x1F, 0x00, 0x03, 0x07, 0x01, 0x0A, 0x4C, 0x02, + 0x06, 0x21, 0x02, 0x08, 0x00, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x1B, 0x03, 0x00, 0x00, 0x03, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x11, 0x00, 0x00, 0x00, 0x0B, 0x02, 0x80, 0x00, 0x08, 0x80, 0x02, 0x13, 0x00, 0x06, 0x4E, 0x80, + 0x09, 0x00, 0x00, 0x09, 0x80, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x80, 0x00, 0x80, 0x00, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x31, 0x00, 0x0C, 0x00, 0x00, 0x32, 0x01, 0x00, 0x1C, 0x80, 0x04, 0x06, 0x00, 0x16, 0x2B, 0x00, + 0x0E, 0x02, 0x01, 0x16, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x08, 0x07, 0x00, 0x00, 0x04, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x12, 0x12, 0x25, 0x20, 0x15, 0x0A, 0x10, 0x01, 0x18, 0x0C, 0x47, 0x26, 0x50, 0x02, 0x0B, + 0x45, 0x2A, 0x3C, 0x01, 0x00, 0x04, 0x04, 0x0A, 0x0B, 0x08, 0x80, 0x80, 0x00, 0x80, 0x01, 0x01, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x10, 0x00, 0x00, 0x00, 0x08, 0x25, 0x00, 0x00, 0x11, 0x80, 0x02, 0x00, 0x00, 0x08, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x04, 0x80, 0x80, 0x80, 0x01, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x3B, 0x02, 0x07, 0x04, 0x0A, 0x08, 0x00, 0x00, 0x05, 0x80, 0x02, 0x03, 0x03, 0x0F, 0x05, 0x80, + 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x80, 0x04, 0x03, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x05, 0x1B, 0x05, 0x12, 0x13, 0x04, 0x16, 0x03, 0x0A, 0x1C, 0x3B, 0x1C, 0x25, 0x01, 0x03, + 0x07, 0x22, 0x29, 0x00, 0x00, 0x13, 0x0B, 0x0A, 0x0A, 0x03, 0x80, 0x00, 0x00, 0x80, 0x02, 0x0A, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x00, 0x80, 0x80, 0x01, 0x80, 0x00, 0x80, 0x00, 0x80, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, + 0x80, 0x03, 0x01, 0x80, 0x00, 0x80, 0x01, 0x03, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x60, 0x00, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x2D, 0x00, 0x00, 0x07, 0x00, 0x04, 0x5F, 0x00, + 0x1B, 0x00, 0x06, 0x1E, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x01, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x66, 0x00, 0x00, 0x02, 0x00, 0x3C, 0x02, 0x00, 0x4A, 0x80, 0x05, 0x04, 0x00, 0x04, 0x43, 0x00, + 0x00, 0x12, 0x01, 0x10, 0x80, 0x00, 0x00, 0x01, 0x00, 0x00, 0x80, 0x0A, 0x2D, 0x80, 0x09, 0x10, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x22, 0x00, 0x00, 0x00, 0x00, 0x2D, 0x00, 0x80, 0x21, 0x80, 0x01, 0x03, 0x00, 0x16, 0x29, 0x00, + 0x00, 0x01, 0x00, 0x14, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x80, 0x0D, 0x00, 0x00, 0x80, 0x04, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x78, 0x00, 0x00, 0x01, 0x01, 0x6E, 0x00, 0x00, 0x48, 0x00, 0x09, 0x00, 0x00, 0x16, 0x6A, 0x00, + 0x01, 0x02, 0x04, 0x25, 0x00, 0x80, 0x06, 0x03, 0x00, 0x01, 0x80, 0x20, 0x13, 0x80, 0x03, 0x19, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x22, 0x3F, 0x2D, 0x39, 0x17, 0x14, 0x0D, 0x0B, 0x2E, 0x1E, 0x4A, 0x35, 0x43, 0x01, 0x13, + 0x38, 0x3E, 0x43, 0x00, 0x00, 0x07, 0x01, 0x1C, 0x0B, 0x02, 0x80, 0x00, 0x00, 0x00, 0x03, 0x06, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x12, 0x80, 0x00, 0x00, 0x00, 0x1A, 0x80, 0x80, 0x0E, 0x80, 0x02, 0x0C, 0x00, 0x01, 0x6E, 0x00, + 0x3E, 0x00, 0x05, 0x0B, 0x80, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x04, 0x00, 0x80, 0x00, 0x03, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x4C, 0x00, 0x05, 0x02, 0x03, 0x3E, 0x02, 0x00, 0x31, 0x80, 0x06, 0x01, 0x02, 0x09, 0x4B, 0x01, + 0x00, 0x03, 0x05, 0x22, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x14, 0x07, 0x00, 0x02, 0x0C, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x11, 0x00, 0x11, 0x00, 0x02, 0x30, 0x01, 0x00, 0x15, 0x80, 0x23, 0x1A, 0x09, 0x0D, 0x1D, 0x14, + 0x02, 0x05, 0x6E, 0x07, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x2B, 0x00, 0x02, 0x2C, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x41, 0x00, 0x11, 0x00, 0x01, 0x35, 0x00, 0x80, 0x28, 0x80, 0x0B, 0x02, 0x00, 0x0B, 0x7F, 0x00, + 0x24, 0x0C, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x3D, 0x00, 0x00, 0x07, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x01, 0x08, 0x08, 0x0F, 0x15, 0x02, 0x11, 0x04, 0x00, 0x01, 0x0B, 0x16, 0x0B, 0x03, 0x00, 0x08, + 0x05, 0x13, 0x16, 0x00, 0x00, 0x06, 0x00, 0x09, 0x0A, 0x02, 0x80, 0x80, 0x00, 0x00, 0x0B, 0x01, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x80, 0x80, 0x80, 0x80, 0x01, 0x80, 0x80, 0x02, 0x80, 0x80, 0x00, 0x00, 0x00, 0x01, 0x80, + 0x01, 0x80, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x08, 0x80, 0x05, 0x00, 0x00, 0x01, 0x80, 0x00, 0x02, 0x80, 0x00, 0x02, 0x00, 0x02, 0x18, 0x80, + 0x01, 0x00, 0x00, 0x02, 0x80, 0x80, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x80, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x07, 0x80, 0x01, 0x80, 0x80, 0x0A, 0x80, 0x80, 0x02, 0x80, 0x00, 0x80, 0x80, 0x80, 0x02, 0x80, + 0x80, 0x00, 0x00, 0x03, 0x80, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x03, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x15, 0x80, 0x00, 0x80, 0x00, 0x21, 0x80, 0x80, 0x14, 0x80, 0x0B, 0x03, 0x00, 0x07, 0x02, 0x80, + 0x00, 0x80, 0x1A, 0x09, 0x80, 0x80, 0x80, 0x80, 0x01, 0x80, 0x80, 0x00, 0x04, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x0A, 0x80, 0x00, 0x00, 0x00, 0x17, 0x00, 0x80, 0x13, 0x00, 0x0D, 0x05, 0x00, 0x03, 0x05, 0x00, + 0x00, 0x80, 0x00, 0x03, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x09, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x03, 0x80, 0x80, 0x80, 0x00, 0x11, 0x80, 0x00, 0x07, 0x80, 0x80, 0x00, 0x80, 0x00, 0x00, 0x80, + 0x00, 0x80, 0x80, 0x02, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x80, 0x00, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x02, 0x0B, 0x01, 0x02, 0x0E, 0x00, 0x00, 0x00, 0x11, 0x02, 0x18, 0x0A, 0x02, 0x00, 0x02, + 0x04, 0x09, 0x08, 0x00, 0x00, 0x09, 0x00, 0x01, 0x0A, 0x00, 0x80, 0x00, 0x80, 0x80, 0x00, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x04, 0x80, 0x01, 0x01, 0x80, 0x13, 0x80, 0x02, 0x0C, 0x00, 0x00, + 0x00, 0x0A, 0x00, 0x80, 0x00, 0x00, 0x01, 0x01, 0x07, 0x00, 0x80, 0x80, 0x00, 0x80, 0x04, 0x04, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x16, 0x80, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x00, 0x02, 0x03, 0x07, 0x01, 0x02, 0x02, 0x00, 0x01, 0x02, 0x0A, 0x06, 0x07, 0x00, 0x02, + 0x00, 0x07, 0x10, 0x00, 0x80, 0x02, 0x01, 0x01, 0x00, 0x01, 0x80, 0x80, 0x00, 0x80, 0x00, 0x00, +}; + +/// +/// cp866_data[] +static const char cp866_data[] = +{ + 0x00, 0x09, 0x1B, 0x06, 0x1A, 0x0E, 0x0B, 0x22, 0x03, 0x08, 0x33, 0x65, 0x25, 0x20, 0x00, 0x0A, + 0x15, 0x32, 0x2F, 0x01, 0x00, 0x0B, 0x01, 0x09, 0x0A, 0x02, 0x80, 0x00, 0x00, 0x00, 0x0A, 0x1A, + 0x00, 0x09, 0x1B, 0x06, 0x1A, 0x0E, 0x0B, 0x22, 0x03, 0x08, 0x33, 0x65, 0x25, 0x20, 0x00, 0x0A, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x15, 0x32, 0x2F, 0x01, 0x00, 0x0B, 0x01, 0x09, 0x0A, 0x02, 0x80, 0x00, 0x00, 0x00, 0x0A, 0x1A, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x07, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x08, 0x80, 0x02, 0x06, 0x00, 0x03, 0x1C, 0x00, + 0x0C, 0x00, 0x00, 0x0B, 0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x21, 0x01, 0x00, 0x00, 0x06, + 0x07, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x08, 0x80, 0x02, 0x06, 0x00, 0x03, 0x1C, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x0C, 0x00, 0x00, 0x0B, 0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x21, 0x01, 0x00, 0x00, 0x06, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x37, 0x00, 0x01, 0x00, 0x04, 0x34, 0x00, 0x06, 0x1F, 0x00, 0x03, 0x07, 0x01, 0x0A, 0x4C, 0x02, + 0x06, 0x21, 0x02, 0x08, 0x00, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x1B, 0x03, 0x00, 0x00, 0x03, + 0x37, 0x00, 0x01, 0x00, 0x04, 0x34, 0x00, 0x06, 0x1F, 0x00, 0x03, 0x07, 0x01, 0x0A, 0x4C, 0x02, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x06, 0x21, 0x02, 0x08, 0x00, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x1B, 0x03, 0x00, 0x00, 0x03, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x11, 0x00, 0x00, 0x00, 0x0B, 0x02, 0x80, 0x00, 0x08, 0x80, 0x02, 0x13, 0x00, 0x06, 0x4E, 0x80, + 0x09, 0x00, 0x00, 0x09, 0x80, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x80, 0x00, 0x80, 0x00, 0x00, + 0x11, 0x00, 0x00, 0x00, 0x0B, 0x02, 0x80, 0x00, 0x08, 0x80, 0x02, 0x13, 0x00, 0x06, 0x4E, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x09, 0x00, 0x00, 0x09, 0x80, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x80, 0x00, 0x80, 0x00, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x31, 0x00, 0x0C, 0x00, 0x00, 0x32, 0x01, 0x00, 0x1C, 0x80, 0x04, 0x06, 0x00, 0x16, 0x2B, 0x00, + 0x0E, 0x02, 0x01, 0x16, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x08, 0x07, 0x00, 0x00, 0x04, + 0x31, 0x00, 0x0C, 0x00, 0x00, 0x32, 0x01, 0x00, 0x1C, 0x80, 0x04, 0x06, 0x00, 0x16, 0x2B, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x0E, 0x02, 0x01, 0x16, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x08, 0x07, 0x00, 0x00, 0x04, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x12, 0x12, 0x25, 0x20, 0x15, 0x0A, 0x10, 0x01, 0x18, 0x0C, 0x47, 0x26, 0x50, 0x02, 0x0B, + 0x45, 0x2A, 0x3C, 0x01, 0x00, 0x04, 0x04, 0x0A, 0x0B, 0x08, 0x80, 0x80, 0x00, 0x80, 0x01, 0x01, + 0x00, 0x12, 0x12, 0x25, 0x20, 0x15, 0x0A, 0x10, 0x01, 0x18, 0x0C, 0x47, 0x26, 0x50, 0x02, 0x0B, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x45, 0x2A, 0x3C, 0x01, 0x00, 0x04, 0x04, 0x0A, 0x0B, 0x08, 0x80, 0x80, 0x00, 0x80, 0x01, 0x01, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x10, 0x00, 0x00, 0x00, 0x08, 0x25, 0x00, 0x00, 0x11, 0x80, 0x02, 0x00, 0x00, 0x08, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x04, 0x80, 0x80, 0x80, 0x01, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x80, + 0x10, 0x00, 0x00, 0x00, 0x08, 0x25, 0x00, 0x00, 0x11, 0x80, 0x02, 0x00, 0x00, 0x08, 0x01, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x00, 0x00, 0x04, 0x80, 0x80, 0x80, 0x01, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x3B, 0x02, 0x07, 0x04, 0x0A, 0x08, 0x00, 0x00, 0x05, 0x80, 0x02, 0x03, 0x03, 0x0F, 0x05, 0x80, + 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x80, 0x00, 0x03, + 0x3B, 0x02, 0x07, 0x04, 0x0A, 0x08, 0x00, 0x00, 0x05, 0x80, 0x02, 0x03, 0x03, 0x0F, 0x05, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x80, 0x00, 0x03, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x05, 0x1B, 0x05, 0x12, 0x13, 0x04, 0x16, 0x03, 0x0A, 0x1C, 0x3B, 0x1C, 0x25, 0x01, 0x03, + 0x07, 0x22, 0x29, 0x00, 0x00, 0x13, 0x0B, 0x0A, 0x0A, 0x03, 0x80, 0x00, 0x00, 0x80, 0x02, 0x0A, + 0x00, 0x05, 0x1B, 0x05, 0x12, 0x13, 0x04, 0x16, 0x03, 0x0A, 0x1C, 0x3B, 0x1C, 0x25, 0x01, 0x03, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x07, 0x22, 0x29, 0x00, 0x00, 0x13, 0x0B, 0x0A, 0x0A, 0x03, 0x80, 0x00, 0x00, 0x80, 0x02, 0x0A, + 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x00, 0x80, 0x80, 0x01, 0x80, 0x00, 0x80, 0x00, 0x80, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, + 0x80, 0x03, 0x01, 0x80, 0x00, 0x80, 0x01, 0x03, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x00, 0x80, 0x80, 0x01, 0x80, 0x00, 0x80, 0x00, 0x80, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x03, 0x01, 0x80, 0x00, 0x80, 0x01, 0x03, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x60, 0x00, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x2D, 0x00, 0x00, 0x07, 0x00, 0x04, 0x5F, 0x00, + 0x1B, 0x00, 0x06, 0x1E, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x01, 0x80, 0x80, + 0x60, 0x00, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x2D, 0x00, 0x00, 0x07, 0x00, 0x04, 0x5F, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x1B, 0x00, 0x06, 0x1E, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x01, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x66, 0x00, 0x00, 0x02, 0x00, 0x3C, 0x02, 0x00, 0x4A, 0x80, 0x05, 0x04, 0x00, 0x04, 0x43, 0x00, + 0x00, 0x12, 0x01, 0x10, 0x80, 0x00, 0x00, 0x01, 0x00, 0x00, 0x80, 0x0A, 0x2D, 0x80, 0x09, 0x10, + 0x66, 0x00, 0x00, 0x02, 0x00, 0x3C, 0x02, 0x00, 0x4A, 0x80, 0x05, 0x04, 0x00, 0x04, 0x43, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x12, 0x01, 0x10, 0x80, 0x00, 0x00, 0x01, 0x00, 0x00, 0x80, 0x0A, 0x2D, 0x80, 0x09, 0x10, + 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x22, 0x00, 0x00, 0x00, 0x00, 0x2D, 0x00, 0x80, 0x21, 0x80, 0x01, 0x03, 0x00, 0x16, 0x29, 0x00, + 0x00, 0x01, 0x00, 0x14, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x80, 0x0D, 0x00, 0x00, 0x80, 0x04, + 0x22, 0x00, 0x00, 0x00, 0x00, 0x2D, 0x00, 0x80, 0x21, 0x80, 0x01, 0x03, 0x00, 0x16, 0x29, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x01, 0x00, 0x14, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x80, 0x0D, 0x00, 0x00, 0x80, 0x04, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x78, 0x00, 0x00, 0x01, 0x01, 0x6E, 0x00, 0x00, 0x48, 0x00, 0x09, 0x00, 0x00, 0x16, 0x6A, 0x00, + 0x01, 0x02, 0x04, 0x25, 0x00, 0x80, 0x06, 0x03, 0x00, 0x01, 0x80, 0x20, 0x13, 0x80, 0x03, 0x19, + 0x78, 0x00, 0x00, 0x01, 0x01, 0x6E, 0x00, 0x00, 0x48, 0x00, 0x09, 0x00, 0x00, 0x16, 0x6A, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x01, 0x02, 0x04, 0x25, 0x00, 0x80, 0x06, 0x03, 0x00, 0x01, 0x80, 0x20, 0x13, 0x80, 0x03, 0x19, + 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x22, 0x3F, 0x2D, 0x39, 0x17, 0x14, 0x0D, 0x0B, 0x2E, 0x1E, 0x4A, 0x35, 0x43, 0x01, 0x13, + 0x38, 0x3E, 0x43, 0x00, 0x00, 0x07, 0x01, 0x1C, 0x0B, 0x02, 0x80, 0x00, 0x00, 0x00, 0x03, 0x06, + 0x00, 0x22, 0x3F, 0x2D, 0x39, 0x17, 0x14, 0x0D, 0x0B, 0x2E, 0x1E, 0x4A, 0x35, 0x43, 0x01, 0x13, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x38, 0x3E, 0x43, 0x00, 0x00, 0x07, 0x01, 0x1C, 0x0B, 0x02, 0x80, 0x00, 0x00, 0x00, 0x03, 0x06, + 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x12, 0x80, 0x00, 0x00, 0x00, 0x1A, 0x80, 0x80, 0x0E, 0x80, 0x02, 0x0C, 0x00, 0x01, 0x6E, 0x00, + 0x3E, 0x00, 0x05, 0x0B, 0x80, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x04, 0x00, 0x80, 0x00, 0x03, + 0x12, 0x80, 0x00, 0x00, 0x00, 0x1A, 0x80, 0x80, 0x0E, 0x80, 0x02, 0x0C, 0x00, 0x01, 0x6E, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x3E, 0x00, 0x05, 0x0B, 0x80, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x04, 0x00, 0x80, 0x00, 0x03, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x4C, 0x00, 0x05, 0x02, 0x03, 0x3E, 0x02, 0x00, 0x31, 0x80, 0x06, 0x01, 0x02, 0x09, 0x4B, 0x01, + 0x00, 0x03, 0x05, 0x22, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x14, 0x07, 0x00, 0x02, 0x0C, + 0x4C, 0x00, 0x05, 0x02, 0x03, 0x3E, 0x02, 0x00, 0x31, 0x80, 0x06, 0x01, 0x02, 0x09, 0x4B, 0x01, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x03, 0x05, 0x22, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x14, 0x07, 0x00, 0x02, 0x0C, + 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x11, 0x00, 0x11, 0x00, 0x02, 0x30, 0x01, 0x00, 0x15, 0x80, 0x23, 0x1A, 0x09, 0x0D, 0x1D, 0x14, + 0x02, 0x05, 0x6E, 0x07, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x2B, 0x00, 0x02, 0x2C, + 0x11, 0x00, 0x11, 0x00, 0x02, 0x30, 0x01, 0x00, 0x15, 0x80, 0x23, 0x1A, 0x09, 0x0D, 0x1D, 0x14, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x02, 0x05, 0x6E, 0x07, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x2B, 0x00, 0x02, 0x2C, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x41, 0x00, 0x11, 0x00, 0x01, 0x35, 0x00, 0x80, 0x28, 0x80, 0x0B, 0x02, 0x00, 0x0B, 0x7F, 0x00, + 0x24, 0x0C, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x3D, 0x00, 0x00, 0x07, + 0x41, 0x00, 0x11, 0x00, 0x01, 0x35, 0x00, 0x80, 0x28, 0x80, 0x0B, 0x02, 0x00, 0x0B, 0x7F, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x24, 0x0C, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x3D, 0x00, 0x00, 0x07, + 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x01, 0x08, 0x08, 0x0F, 0x15, 0x02, 0x11, 0x04, 0x00, 0x01, 0x0B, 0x16, 0x0B, 0x03, 0x00, 0x08, + 0x05, 0x13, 0x16, 0x00, 0x00, 0x06, 0x00, 0x09, 0x0A, 0x02, 0x80, 0x80, 0x00, 0x00, 0x0B, 0x01, + 0x01, 0x08, 0x08, 0x0F, 0x15, 0x02, 0x11, 0x04, 0x00, 0x01, 0x0B, 0x16, 0x0B, 0x03, 0x00, 0x08, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x05, 0x13, 0x16, 0x00, 0x00, 0x06, 0x00, 0x09, 0x0A, 0x02, 0x80, 0x80, 0x00, 0x00, 0x0B, 0x01, + 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x80, 0x80, 0x80, 0x80, 0x01, 0x80, 0x80, 0x02, 0x80, 0x80, 0x00, 0x00, 0x00, 0x01, 0x80, + 0x01, 0x80, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, + 0x00, 0x80, 0x80, 0x80, 0x80, 0x01, 0x80, 0x80, 0x02, 0x80, 0x80, 0x00, 0x00, 0x00, 0x01, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x01, 0x80, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x08, 0x80, 0x05, 0x00, 0x00, 0x01, 0x80, 0x00, 0x02, 0x80, 0x00, 0x02, 0x00, 0x02, 0x18, 0x80, + 0x01, 0x00, 0x00, 0x02, 0x80, 0x80, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x80, 0x00, + 0x08, 0x80, 0x05, 0x00, 0x00, 0x01, 0x80, 0x00, 0x02, 0x80, 0x00, 0x02, 0x00, 0x02, 0x18, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x01, 0x00, 0x00, 0x02, 0x80, 0x80, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x80, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x07, 0x80, 0x01, 0x80, 0x80, 0x0A, 0x80, 0x80, 0x02, 0x80, 0x00, 0x80, 0x80, 0x80, 0x02, 0x80, + 0x80, 0x00, 0x00, 0x03, 0x80, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x03, 0x80, 0x80, 0x80, 0x80, + 0x07, 0x80, 0x01, 0x80, 0x80, 0x0A, 0x80, 0x80, 0x02, 0x80, 0x00, 0x80, 0x80, 0x80, 0x02, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x00, 0x00, 0x03, 0x80, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x03, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x15, 0x80, 0x00, 0x80, 0x00, 0x21, 0x80, 0x80, 0x14, 0x80, 0x0B, 0x03, 0x00, 0x07, 0x02, 0x80, + 0x00, 0x80, 0x1A, 0x09, 0x80, 0x80, 0x80, 0x80, 0x01, 0x80, 0x80, 0x00, 0x04, 0x80, 0x80, 0x80, + 0x15, 0x80, 0x00, 0x80, 0x00, 0x21, 0x80, 0x80, 0x14, 0x80, 0x0B, 0x03, 0x00, 0x07, 0x02, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x80, 0x1A, 0x09, 0x80, 0x80, 0x80, 0x80, 0x01, 0x80, 0x80, 0x00, 0x04, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x0A, 0x80, 0x00, 0x00, 0x00, 0x17, 0x00, 0x80, 0x13, 0x00, 0x0D, 0x05, 0x00, 0x03, 0x05, 0x00, + 0x00, 0x80, 0x00, 0x03, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x09, 0x80, 0x80, 0x80, + 0x0A, 0x80, 0x00, 0x00, 0x00, 0x17, 0x00, 0x80, 0x13, 0x00, 0x0D, 0x05, 0x00, 0x03, 0x05, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x80, 0x00, 0x03, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x09, 0x80, 0x80, 0x80, + 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x03, 0x80, 0x80, 0x80, 0x00, 0x11, 0x80, 0x00, 0x07, 0x80, 0x80, 0x00, 0x80, 0x00, 0x00, 0x80, + 0x00, 0x80, 0x80, 0x02, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x80, 0x00, 0x80, + 0x03, 0x80, 0x80, 0x80, 0x00, 0x11, 0x80, 0x00, 0x07, 0x80, 0x80, 0x00, 0x80, 0x00, 0x00, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x80, 0x80, 0x02, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x80, 0x00, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x02, 0x0B, 0x01, 0x02, 0x0E, 0x00, 0x00, 0x00, 0x11, 0x02, 0x18, 0x0A, 0x02, 0x00, 0x02, + 0x04, 0x09, 0x08, 0x00, 0x00, 0x09, 0x00, 0x01, 0x0A, 0x00, 0x80, 0x00, 0x80, 0x80, 0x00, 0x00, + 0x00, 0x02, 0x0B, 0x01, 0x02, 0x0E, 0x00, 0x00, 0x00, 0x11, 0x02, 0x18, 0x0A, 0x02, 0x00, 0x02, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x04, 0x09, 0x08, 0x00, 0x00, 0x09, 0x00, 0x01, 0x0A, 0x00, 0x80, 0x00, 0x80, 0x80, 0x00, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x04, 0x80, 0x01, 0x01, 0x80, 0x13, 0x80, 0x02, 0x0C, 0x00, 0x00, + 0x00, 0x0A, 0x00, 0x80, 0x00, 0x00, 0x01, 0x01, 0x07, 0x00, 0x80, 0x80, 0x00, 0x80, 0x04, 0x04, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x04, 0x80, 0x01, 0x01, 0x80, 0x13, 0x80, 0x02, 0x0C, 0x00, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x0A, 0x00, 0x80, 0x00, 0x00, 0x01, 0x01, 0x07, 0x00, 0x80, 0x80, 0x00, 0x80, 0x04, 0x04, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x16, 0x80, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x00, 0x16, 0x80, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, + 0x80, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x00, 0x02, 0x03, 0x07, 0x01, 0x02, 0x02, 0x00, 0x01, 0x02, 0x0A, 0x06, 0x07, 0x00, 0x02, + 0x00, 0x07, 0x10, 0x00, 0x80, 0x02, 0x01, 0x01, 0x00, 0x01, 0x80, 0x80, 0x00, 0x80, 0x00, 0x00, + 0x80, 0x00, 0x02, 0x03, 0x07, 0x01, 0x02, 0x02, 0x00, 0x01, 0x02, 0x0A, 0x06, 0x07, 0x00, 0x02, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x07, 0x10, 0x00, 0x80, 0x02, 0x01, 0x01, 0x00, 0x01, 0x80, 0x80, 0x00, 0x80, 0x00, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x09, 0x1B, 0x06, 0x1A, 0x0E, 0x0B, 0x22, 0x03, 0x08, 0x33, 0x65, 0x25, 0x20, 0x00, 0x0A, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x15, 0x32, 0x2F, 0x01, 0x00, 0x0B, 0x01, 0x09, 0x0A, 0x02, 0x80, 0x00, 0x00, 0x00, 0x0A, 0x1A, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x07, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x08, 0x80, 0x02, 0x06, 0x00, 0x03, 0x1C, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x0C, 0x00, 0x00, 0x0B, 0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x21, 0x01, 0x00, 0x00, 0x06, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x37, 0x00, 0x01, 0x00, 0x04, 0x34, 0x00, 0x06, 0x1F, 0x00, 0x03, 0x07, 0x01, 0x0A, 0x4C, 0x02, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x06, 0x21, 0x02, 0x08, 0x00, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x1B, 0x03, 0x00, 0x00, 0x03, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x11, 0x00, 0x00, 0x00, 0x0B, 0x02, 0x80, 0x00, 0x08, 0x80, 0x02, 0x13, 0x00, 0x06, 0x4E, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x09, 0x00, 0x00, 0x09, 0x80, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x80, 0x00, 0x80, 0x00, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x31, 0x00, 0x0C, 0x00, 0x00, 0x32, 0x01, 0x00, 0x1C, 0x80, 0x04, 0x06, 0x00, 0x16, 0x2B, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x0E, 0x02, 0x01, 0x16, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x08, 0x07, 0x00, 0x00, 0x04, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x12, 0x12, 0x25, 0x20, 0x15, 0x0A, 0x10, 0x01, 0x18, 0x0C, 0x47, 0x26, 0x50, 0x02, 0x0B, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x45, 0x2A, 0x3C, 0x01, 0x00, 0x04, 0x04, 0x0A, 0x0B, 0x08, 0x80, 0x80, 0x00, 0x80, 0x01, 0x01, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x10, 0x00, 0x00, 0x00, 0x08, 0x25, 0x00, 0x00, 0x11, 0x80, 0x02, 0x00, 0x00, 0x08, 0x01, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x00, 0x00, 0x04, 0x80, 0x80, 0x80, 0x01, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x3B, 0x02, 0x07, 0x04, 0x0A, 0x08, 0x00, 0x00, 0x05, 0x80, 0x02, 0x03, 0x03, 0x0F, 0x05, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x80, 0x00, 0x03, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x05, 0x1B, 0x05, 0x12, 0x13, 0x04, 0x16, 0x03, 0x0A, 0x1C, 0x3B, 0x1C, 0x25, 0x01, 0x03, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x07, 0x22, 0x29, 0x00, 0x00, 0x13, 0x0B, 0x0A, 0x0A, 0x03, 0x80, 0x00, 0x00, 0x80, 0x02, 0x0A, + 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x00, 0x80, 0x80, 0x01, 0x80, 0x00, 0x80, 0x00, 0x80, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x03, 0x01, 0x80, 0x00, 0x80, 0x01, 0x03, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x60, 0x00, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x2D, 0x00, 0x00, 0x07, 0x00, 0x04, 0x5F, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x1B, 0x00, 0x06, 0x1E, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x01, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x66, 0x00, 0x00, 0x02, 0x00, 0x3C, 0x02, 0x00, 0x4A, 0x80, 0x05, 0x04, 0x00, 0x04, 0x43, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x12, 0x01, 0x10, 0x80, 0x00, 0x00, 0x01, 0x00, 0x00, 0x80, 0x0A, 0x2D, 0x80, 0x09, 0x10, + 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x22, 0x00, 0x00, 0x00, 0x00, 0x2D, 0x00, 0x80, 0x21, 0x80, 0x01, 0x03, 0x00, 0x16, 0x29, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x01, 0x00, 0x14, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x80, 0x0D, 0x00, 0x00, 0x80, 0x04, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x78, 0x00, 0x00, 0x01, 0x01, 0x6E, 0x00, 0x00, 0x48, 0x00, 0x09, 0x00, 0x00, 0x16, 0x6A, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x01, 0x02, 0x04, 0x25, 0x00, 0x80, 0x06, 0x03, 0x00, 0x01, 0x80, 0x20, 0x13, 0x80, 0x03, 0x19, + 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x22, 0x3F, 0x2D, 0x39, 0x17, 0x14, 0x0D, 0x0B, 0x2E, 0x1E, 0x4A, 0x35, 0x43, 0x01, 0x13, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x38, 0x3E, 0x43, 0x00, 0x00, 0x07, 0x01, 0x1C, 0x0B, 0x02, 0x80, 0x00, 0x00, 0x00, 0x03, 0x06, + 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x12, 0x80, 0x00, 0x00, 0x00, 0x1A, 0x80, 0x80, 0x0E, 0x80, 0x02, 0x0C, 0x00, 0x01, 0x6E, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x3E, 0x00, 0x05, 0x0B, 0x80, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x04, 0x00, 0x80, 0x00, 0x03, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x01, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x4C, 0x00, 0x05, 0x02, 0x03, 0x3E, 0x02, 0x00, 0x31, 0x80, 0x06, 0x01, 0x02, 0x09, 0x4B, 0x01, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x03, 0x05, 0x22, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x14, 0x07, 0x00, 0x02, 0x0C, + 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x11, 0x00, 0x11, 0x00, 0x02, 0x30, 0x01, 0x00, 0x15, 0x80, 0x23, 0x1A, 0x09, 0x0D, 0x1D, 0x14, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x02, 0x05, 0x6E, 0x07, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x2B, 0x00, 0x02, 0x2C, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x41, 0x00, 0x11, 0x00, 0x01, 0x35, 0x00, 0x80, 0x28, 0x80, 0x0B, 0x02, 0x00, 0x0B, 0x7F, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x24, 0x0C, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x3D, 0x00, 0x00, 0x07, + 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x01, 0x08, 0x08, 0x0F, 0x15, 0x02, 0x11, 0x04, 0x00, 0x01, 0x0B, 0x16, 0x0B, 0x03, 0x00, 0x08, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x05, 0x13, 0x16, 0x00, 0x00, 0x06, 0x00, 0x09, 0x0A, 0x02, 0x80, 0x80, 0x00, 0x00, 0x0B, 0x01, + 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x80, 0x80, 0x80, 0x80, 0x01, 0x80, 0x80, 0x02, 0x80, 0x80, 0x00, 0x00, 0x00, 0x01, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x01, 0x80, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x08, 0x80, 0x05, 0x00, 0x00, 0x01, 0x80, 0x00, 0x02, 0x80, 0x00, 0x02, 0x00, 0x02, 0x18, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x01, 0x00, 0x00, 0x02, 0x80, 0x80, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x80, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x07, 0x80, 0x01, 0x80, 0x80, 0x0A, 0x80, 0x80, 0x02, 0x80, 0x00, 0x80, 0x80, 0x80, 0x02, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x00, 0x00, 0x03, 0x80, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x03, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x15, 0x80, 0x00, 0x80, 0x00, 0x21, 0x80, 0x80, 0x14, 0x80, 0x0B, 0x03, 0x00, 0x07, 0x02, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x80, 0x1A, 0x09, 0x80, 0x80, 0x80, 0x80, 0x01, 0x80, 0x80, 0x00, 0x04, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x0A, 0x80, 0x00, 0x00, 0x00, 0x17, 0x00, 0x80, 0x13, 0x00, 0x0D, 0x05, 0x00, 0x03, 0x05, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x80, 0x00, 0x03, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x09, 0x80, 0x80, 0x80, + 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x03, 0x80, 0x80, 0x80, 0x00, 0x11, 0x80, 0x00, 0x07, 0x80, 0x80, 0x00, 0x80, 0x00, 0x00, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x80, 0x80, 0x02, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x80, 0x00, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x02, 0x0B, 0x01, 0x02, 0x0E, 0x00, 0x00, 0x00, 0x11, 0x02, 0x18, 0x0A, 0x02, 0x00, 0x02, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x04, 0x09, 0x08, 0x00, 0x00, 0x09, 0x00, 0x01, 0x0A, 0x00, 0x80, 0x00, 0x80, 0x80, 0x00, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x04, 0x80, 0x01, 0x01, 0x80, 0x13, 0x80, 0x02, 0x0C, 0x00, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x0A, 0x00, 0x80, 0x00, 0x00, 0x01, 0x01, 0x07, 0x00, 0x80, 0x80, 0x00, 0x80, 0x04, 0x04, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x00, 0x16, 0x80, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x00, 0x02, 0x03, 0x07, 0x01, 0x02, 0x02, 0x00, 0x01, 0x02, 0x0A, 0x06, 0x07, 0x00, 0x02, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x07, 0x10, 0x00, 0x80, 0x02, 0x01, 0x01, 0x00, 0x01, 0x80, 0x80, 0x00, 0x80, 0x00, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x80, 0x80, 0x00, 0x80, 0x00, 0x00, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +}; + +/// +/// koi8r_data[] +static const char koi8r_data[] = +{ + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x80, 0x02, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x03, 0x01, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x0A, 0x00, 0x09, 0x01, 0x1A, 0x0E, 0x00, 0x06, 0x0B, 0x03, 0x08, 0x33, 0x65, 0x25, 0x20, 0x00, + 0x0A, 0x1A, 0x15, 0x32, 0x2F, 0x01, 0x0B, 0x1B, 0x00, 0x00, 0x22, 0x0A, 0x00, 0x02, 0x09, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x07, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x08, 0x80, 0x02, 0x06, 0x00, 0x03, 0x1C, + 0x00, 0x06, 0x0C, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x01, 0x21, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x07, 0x80, 0x80, 0x80, 0x0A, 0x80, 0x80, 0x80, 0x02, 0x80, 0x00, 0x80, 0x80, 0x80, 0x02, + 0x80, 0x80, 0x80, 0x00, 0x00, 0x03, 0x80, 0x01, 0x80, 0x03, 0x80, 0x00, 0x80, 0x80, 0x00, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x31, 0x00, 0x00, 0x00, 0x32, 0x80, 0x00, 0x00, 0x1C, 0x80, 0x04, 0x06, 0x00, 0x16, 0x2B, + 0x00, 0x04, 0x0E, 0x02, 0x01, 0x16, 0x01, 0x0C, 0x07, 0x08, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x01, 0x00, 0x12, 0x04, 0x20, 0x15, 0x00, 0x25, 0x04, 0x01, 0x18, 0x0C, 0x47, 0x26, 0x50, 0x02, + 0x0B, 0x01, 0x45, 0x2A, 0x3C, 0x01, 0x0A, 0x12, 0x00, 0x80, 0x11, 0x0B, 0x80, 0x08, 0x0A, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x00, 0x80, 0x80, 0x80, 0x01, 0x00, 0x80, 0x80, 0x02, 0x80, 0x80, 0x00, 0x00, 0x00, 0x01, + 0x80, 0x00, 0x01, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x00, 0x80, 0x80, 0x00, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x11, 0x00, 0x80, 0x0B, 0x02, 0x80, 0x00, 0x80, 0x08, 0x80, 0x02, 0x13, 0x00, 0x06, 0x4E, + 0x80, 0x00, 0x09, 0x00, 0x00, 0x09, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x08, 0x80, 0x80, 0x00, 0x01, 0x80, 0x00, 0x80, 0x02, 0x80, 0x00, 0x02, 0x00, 0x02, 0x18, + 0x80, 0x00, 0x01, 0x00, 0x00, 0x02, 0x80, 0x05, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x02, 0x00, 0x05, 0x0B, 0x12, 0x13, 0x00, 0x05, 0x13, 0x03, 0x0A, 0x1C, 0x3B, 0x1C, 0x25, 0x01, + 0x03, 0x0A, 0x07, 0x22, 0x29, 0x00, 0x04, 0x1B, 0x00, 0x00, 0x16, 0x0A, 0x80, 0x03, 0x0A, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x00, 0x01, 0x01, 0x80, 0x00, 0x80, 0x80, 0x00, 0x80, 0x01, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x80, 0x80, 0x03, 0x01, 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, 0x80, 0x80, 0x03, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x60, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x80, 0x2D, 0x00, 0x00, 0x07, 0x00, 0x04, 0x5F, + 0x00, 0x80, 0x1B, 0x00, 0x06, 0x1E, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x09, 0x66, 0x00, 0x00, 0x00, 0x3C, 0x80, 0x02, 0x00, 0x4A, 0x80, 0x05, 0x04, 0x00, 0x04, 0x43, + 0x00, 0x10, 0x00, 0x12, 0x01, 0x10, 0x02, 0x00, 0x2D, 0x0A, 0x00, 0x00, 0x80, 0x00, 0x01, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x22, 0x00, 0x00, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x21, 0x80, 0x01, 0x03, 0x00, 0x16, 0x29, + 0x00, 0x04, 0x00, 0x01, 0x00, 0x14, 0x00, 0x00, 0x00, 0x0D, 0x80, 0x00, 0x00, 0x00, 0x01, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x03, 0x78, 0x00, 0x06, 0x01, 0x6E, 0x00, 0x01, 0x80, 0x48, 0x00, 0x09, 0x00, 0x00, 0x16, 0x6A, + 0x00, 0x19, 0x01, 0x02, 0x04, 0x25, 0x00, 0x00, 0x13, 0x20, 0x00, 0x00, 0x80, 0x01, 0x03, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x03, 0x00, 0x22, 0x01, 0x39, 0x17, 0x00, 0x2D, 0x07, 0x0B, 0x2E, 0x1E, 0x4A, 0x35, 0x43, 0x01, + 0x13, 0x06, 0x38, 0x3E, 0x43, 0x00, 0x14, 0x3F, 0x00, 0x00, 0x0D, 0x0B, 0x00, 0x02, 0x1C, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x12, 0x80, 0x80, 0x00, 0x1A, 0x80, 0x00, 0x00, 0x0E, 0x80, 0x02, 0x0C, 0x00, 0x01, 0x6E, + 0x00, 0x03, 0x3E, 0x00, 0x05, 0x0B, 0x80, 0x00, 0x00, 0x04, 0x80, 0x00, 0x80, 0x80, 0x00, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x80, 0x00, 0x01, 0x07, 0x01, 0x80, 0x03, 0x02, 0x00, 0x01, 0x02, 0x0A, 0x06, 0x07, 0x00, + 0x02, 0x00, 0x00, 0x07, 0x10, 0x00, 0x02, 0x02, 0x00, 0x80, 0x02, 0x00, 0x80, 0x01, 0x01, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x02, 0x4C, 0x00, 0x00, 0x03, 0x3E, 0x00, 0x02, 0x02, 0x31, 0x80, 0x06, 0x01, 0x02, 0x09, 0x4B, + 0x01, 0x0C, 0x00, 0x03, 0x05, 0x22, 0x02, 0x05, 0x07, 0x14, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x02, 0x11, 0x00, 0x00, 0x02, 0x30, 0x00, 0x00, 0x02, 0x15, 0x80, 0x23, 0x1A, 0x09, 0x0D, 0x1D, + 0x14, 0x2C, 0x02, 0x05, 0x6E, 0x07, 0x01, 0x11, 0x2B, 0x04, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x41, 0x00, 0x00, 0x01, 0x35, 0x00, 0x00, 0x00, 0x28, 0x80, 0x0B, 0x02, 0x00, 0x0B, 0x7F, + 0x00, 0x07, 0x24, 0x0C, 0x00, 0x10, 0x00, 0x11, 0x3D, 0x15, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x0B, 0x01, 0x08, 0x00, 0x15, 0x02, 0x00, 0x0F, 0x06, 0x00, 0x01, 0x0B, 0x16, 0x0B, 0x03, 0x00, + 0x08, 0x01, 0x05, 0x13, 0x16, 0x00, 0x11, 0x08, 0x00, 0x80, 0x04, 0x0A, 0x00, 0x02, 0x09, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x10, 0x00, 0x80, 0x08, 0x25, 0x80, 0x00, 0x80, 0x11, 0x80, 0x02, 0x00, 0x00, 0x08, 0x01, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x01, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x37, 0x00, 0x00, 0x04, 0x34, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x03, 0x07, 0x01, 0x0A, 0x4C, + 0x02, 0x03, 0x06, 0x21, 0x02, 0x08, 0x00, 0x01, 0x03, 0x1B, 0x06, 0x07, 0x00, 0x00, 0x01, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x04, 0x00, 0x00, 0x01, 0x00, 0x04, 0x00, 0x01, 0x00, 0x01, 0x80, 0x13, 0x80, 0x02, 0x0C, 0x00, + 0x00, 0x04, 0x00, 0x0A, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x01, 0x07, 0x80, 0x00, 0x01, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x00, 0x02, 0x00, 0x02, 0x0E, 0x00, 0x01, 0x09, 0x00, 0x11, 0x02, 0x18, 0x0A, 0x02, 0x00, + 0x02, 0x00, 0x04, 0x09, 0x08, 0x00, 0x00, 0x0B, 0x80, 0x00, 0x00, 0x0A, 0x80, 0x00, 0x01, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x3B, 0x02, 0x00, 0x0A, 0x08, 0x00, 0x04, 0x00, 0x05, 0x80, 0x02, 0x03, 0x03, 0x0F, 0x05, + 0x80, 0x03, 0x02, 0x00, 0x00, 0x04, 0x00, 0x07, 0x01, 0x04, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x0A, 0x80, 0x00, 0x00, 0x17, 0x80, 0x00, 0x80, 0x13, 0x00, 0x0D, 0x05, 0x00, 0x03, 0x05, + 0x00, 0x80, 0x00, 0x80, 0x00, 0x03, 0x00, 0x00, 0x09, 0x00, 0x80, 0x00, 0x80, 0x00, 0x00, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x16, 0x80, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x03, 0x80, 0x80, 0x00, 0x11, 0x80, 0x80, 0x80, 0x07, 0x80, 0x80, 0x00, 0x80, 0x00, 0x00, + 0x80, 0x80, 0x00, 0x80, 0x80, 0x02, 0x80, 0x80, 0x00, 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x15, 0x80, 0x80, 0x00, 0x21, 0x80, 0x80, 0x80, 0x14, 0x80, 0x0B, 0x03, 0x00, 0x07, 0x02, + 0x80, 0x80, 0x00, 0x80, 0x1A, 0x09, 0x80, 0x00, 0x04, 0x00, 0x80, 0x01, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x80, 0x02, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x03, 0x01, 0x00, + 0x00, 0x80, 0x02, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x03, 0x01, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x0A, 0x00, 0x09, 0x01, 0x1A, 0x0E, 0x00, 0x06, 0x0B, 0x03, 0x08, 0x33, 0x65, 0x25, 0x20, 0x00, + 0x0A, 0x1A, 0x15, 0x32, 0x2F, 0x01, 0x0B, 0x1B, 0x00, 0x00, 0x22, 0x0A, 0x00, 0x02, 0x09, 0x80, + 0x0A, 0x00, 0x09, 0x01, 0x1A, 0x0E, 0x00, 0x06, 0x0B, 0x03, 0x08, 0x33, 0x65, 0x25, 0x20, 0x00, + 0x0A, 0x1A, 0x15, 0x32, 0x2F, 0x01, 0x0B, 0x1B, 0x00, 0x00, 0x22, 0x0A, 0x00, 0x02, 0x09, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x07, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x08, 0x80, 0x02, 0x06, 0x00, 0x03, 0x1C, + 0x00, 0x06, 0x0C, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x01, 0x21, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x07, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x08, 0x80, 0x02, 0x06, 0x00, 0x03, 0x1C, + 0x00, 0x06, 0x0C, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x01, 0x21, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x07, 0x80, 0x80, 0x80, 0x0A, 0x80, 0x80, 0x80, 0x02, 0x80, 0x00, 0x80, 0x80, 0x80, 0x02, + 0x80, 0x80, 0x80, 0x00, 0x00, 0x03, 0x80, 0x01, 0x80, 0x03, 0x80, 0x00, 0x80, 0x80, 0x00, 0x80, + 0x80, 0x07, 0x80, 0x80, 0x80, 0x0A, 0x80, 0x80, 0x80, 0x02, 0x80, 0x00, 0x80, 0x80, 0x80, 0x02, + 0x80, 0x80, 0x80, 0x00, 0x00, 0x03, 0x80, 0x01, 0x80, 0x03, 0x80, 0x00, 0x80, 0x80, 0x00, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x31, 0x00, 0x00, 0x00, 0x32, 0x80, 0x00, 0x00, 0x1C, 0x80, 0x04, 0x06, 0x00, 0x16, 0x2B, + 0x00, 0x04, 0x0E, 0x02, 0x01, 0x16, 0x01, 0x0C, 0x07, 0x08, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x00, 0x31, 0x00, 0x00, 0x00, 0x32, 0x80, 0x00, 0x00, 0x1C, 0x80, 0x04, 0x06, 0x00, 0x16, 0x2B, + 0x00, 0x04, 0x0E, 0x02, 0x01, 0x16, 0x01, 0x0C, 0x07, 0x08, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x01, 0x00, 0x12, 0x04, 0x20, 0x15, 0x00, 0x25, 0x04, 0x01, 0x18, 0x0C, 0x47, 0x26, 0x50, 0x02, + 0x0B, 0x01, 0x45, 0x2A, 0x3C, 0x01, 0x0A, 0x12, 0x00, 0x80, 0x11, 0x0B, 0x80, 0x08, 0x0A, 0x80, + 0x01, 0x00, 0x12, 0x04, 0x20, 0x15, 0x00, 0x25, 0x04, 0x01, 0x18, 0x0C, 0x47, 0x26, 0x50, 0x02, + 0x0B, 0x01, 0x45, 0x2A, 0x3C, 0x01, 0x0A, 0x12, 0x00, 0x80, 0x11, 0x0B, 0x80, 0x08, 0x0A, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x00, 0x80, 0x80, 0x80, 0x01, 0x00, 0x80, 0x80, 0x02, 0x80, 0x80, 0x00, 0x00, 0x00, 0x01, + 0x80, 0x00, 0x01, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x00, 0x80, 0x80, 0x00, 0x80, + 0x80, 0x00, 0x80, 0x80, 0x80, 0x01, 0x00, 0x80, 0x80, 0x02, 0x80, 0x80, 0x00, 0x00, 0x00, 0x01, + 0x80, 0x00, 0x01, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x00, 0x80, 0x80, 0x00, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x11, 0x00, 0x80, 0x0B, 0x02, 0x80, 0x00, 0x80, 0x08, 0x80, 0x02, 0x13, 0x00, 0x06, 0x4E, + 0x80, 0x00, 0x09, 0x00, 0x00, 0x09, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x80, + 0x00, 0x11, 0x00, 0x80, 0x0B, 0x02, 0x80, 0x00, 0x80, 0x08, 0x80, 0x02, 0x13, 0x00, 0x06, 0x4E, + 0x80, 0x00, 0x09, 0x00, 0x00, 0x09, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x08, 0x80, 0x80, 0x00, 0x01, 0x80, 0x00, 0x80, 0x02, 0x80, 0x00, 0x02, 0x00, 0x02, 0x18, + 0x80, 0x00, 0x01, 0x00, 0x00, 0x02, 0x80, 0x05, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x80, 0x08, 0x80, 0x80, 0x00, 0x01, 0x80, 0x00, 0x80, 0x02, 0x80, 0x00, 0x02, 0x00, 0x02, 0x18, + 0x80, 0x00, 0x01, 0x00, 0x00, 0x02, 0x80, 0x05, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x02, 0x00, 0x05, 0x0B, 0x12, 0x13, 0x00, 0x05, 0x13, 0x03, 0x0A, 0x1C, 0x3B, 0x1C, 0x25, 0x01, + 0x03, 0x0A, 0x07, 0x22, 0x29, 0x00, 0x04, 0x1B, 0x00, 0x00, 0x16, 0x0A, 0x80, 0x03, 0x0A, 0x80, + 0x02, 0x00, 0x05, 0x0B, 0x12, 0x13, 0x00, 0x05, 0x13, 0x03, 0x0A, 0x1C, 0x3B, 0x1C, 0x25, 0x01, + 0x03, 0x0A, 0x07, 0x22, 0x29, 0x00, 0x04, 0x1B, 0x00, 0x00, 0x16, 0x0A, 0x80, 0x03, 0x0A, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x00, 0x01, 0x01, 0x80, 0x00, 0x80, 0x80, 0x00, 0x80, 0x01, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x80, 0x80, 0x03, 0x01, 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, 0x80, 0x80, 0x03, 0x80, + 0x80, 0x80, 0x00, 0x01, 0x01, 0x80, 0x00, 0x80, 0x80, 0x00, 0x80, 0x01, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x80, 0x80, 0x03, 0x01, 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, 0x80, 0x80, 0x03, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x60, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x80, 0x2D, 0x00, 0x00, 0x07, 0x00, 0x04, 0x5F, + 0x00, 0x80, 0x1B, 0x00, 0x06, 0x1E, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x80, + 0x80, 0x60, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x80, 0x2D, 0x00, 0x00, 0x07, 0x00, 0x04, 0x5F, + 0x00, 0x80, 0x1B, 0x00, 0x06, 0x1E, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x09, 0x66, 0x00, 0x00, 0x00, 0x3C, 0x80, 0x02, 0x00, 0x4A, 0x80, 0x05, 0x04, 0x00, 0x04, 0x43, + 0x00, 0x10, 0x00, 0x12, 0x01, 0x10, 0x02, 0x00, 0x2D, 0x0A, 0x00, 0x00, 0x80, 0x00, 0x01, 0x80, + 0x09, 0x66, 0x00, 0x00, 0x00, 0x3C, 0x80, 0x02, 0x00, 0x4A, 0x80, 0x05, 0x04, 0x00, 0x04, 0x43, + 0x00, 0x10, 0x00, 0x12, 0x01, 0x10, 0x02, 0x00, 0x2D, 0x0A, 0x00, 0x00, 0x80, 0x00, 0x01, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x22, 0x00, 0x00, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x21, 0x80, 0x01, 0x03, 0x00, 0x16, 0x29, + 0x00, 0x04, 0x00, 0x01, 0x00, 0x14, 0x00, 0x00, 0x00, 0x0D, 0x80, 0x00, 0x00, 0x00, 0x01, 0x80, + 0x80, 0x22, 0x00, 0x00, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x21, 0x80, 0x01, 0x03, 0x00, 0x16, 0x29, + 0x00, 0x04, 0x00, 0x01, 0x00, 0x14, 0x00, 0x00, 0x00, 0x0D, 0x80, 0x00, 0x00, 0x00, 0x01, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x03, 0x78, 0x00, 0x06, 0x01, 0x6E, 0x00, 0x01, 0x80, 0x48, 0x00, 0x09, 0x00, 0x00, 0x16, 0x6A, + 0x00, 0x19, 0x01, 0x02, 0x04, 0x25, 0x00, 0x00, 0x13, 0x20, 0x00, 0x00, 0x80, 0x01, 0x03, 0x80, + 0x03, 0x78, 0x00, 0x06, 0x01, 0x6E, 0x00, 0x01, 0x80, 0x48, 0x00, 0x09, 0x00, 0x00, 0x16, 0x6A, + 0x00, 0x19, 0x01, 0x02, 0x04, 0x25, 0x00, 0x00, 0x13, 0x20, 0x00, 0x00, 0x80, 0x01, 0x03, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x03, 0x00, 0x22, 0x01, 0x39, 0x17, 0x00, 0x2D, 0x07, 0x0B, 0x2E, 0x1E, 0x4A, 0x35, 0x43, 0x01, + 0x13, 0x06, 0x38, 0x3E, 0x43, 0x00, 0x14, 0x3F, 0x00, 0x00, 0x0D, 0x0B, 0x00, 0x02, 0x1C, 0x80, + 0x03, 0x00, 0x22, 0x01, 0x39, 0x17, 0x00, 0x2D, 0x07, 0x0B, 0x2E, 0x1E, 0x4A, 0x35, 0x43, 0x01, + 0x13, 0x06, 0x38, 0x3E, 0x43, 0x00, 0x14, 0x3F, 0x00, 0x00, 0x0D, 0x0B, 0x00, 0x02, 0x1C, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x12, 0x80, 0x80, 0x00, 0x1A, 0x80, 0x00, 0x00, 0x0E, 0x80, 0x02, 0x0C, 0x00, 0x01, 0x6E, + 0x00, 0x03, 0x3E, 0x00, 0x05, 0x0B, 0x80, 0x00, 0x00, 0x04, 0x80, 0x00, 0x80, 0x80, 0x00, 0x00, + 0x00, 0x12, 0x80, 0x80, 0x00, 0x1A, 0x80, 0x00, 0x00, 0x0E, 0x80, 0x02, 0x0C, 0x00, 0x01, 0x6E, + 0x00, 0x03, 0x3E, 0x00, 0x05, 0x0B, 0x80, 0x00, 0x00, 0x04, 0x80, 0x00, 0x80, 0x80, 0x00, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x80, 0x00, 0x01, 0x07, 0x01, 0x80, 0x03, 0x02, 0x00, 0x01, 0x02, 0x0A, 0x06, 0x07, 0x00, + 0x02, 0x00, 0x00, 0x07, 0x10, 0x00, 0x02, 0x02, 0x00, 0x80, 0x02, 0x00, 0x80, 0x01, 0x01, 0x80, + 0x00, 0x80, 0x00, 0x01, 0x07, 0x01, 0x80, 0x03, 0x02, 0x00, 0x01, 0x02, 0x0A, 0x06, 0x07, 0x00, + 0x02, 0x00, 0x00, 0x07, 0x10, 0x00, 0x02, 0x02, 0x00, 0x80, 0x02, 0x00, 0x80, 0x01, 0x01, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x02, 0x4C, 0x00, 0x00, 0x03, 0x3E, 0x00, 0x02, 0x02, 0x31, 0x80, 0x06, 0x01, 0x02, 0x09, 0x4B, + 0x01, 0x0C, 0x00, 0x03, 0x05, 0x22, 0x02, 0x05, 0x07, 0x14, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x4C, 0x00, 0x00, 0x03, 0x3E, 0x00, 0x02, 0x02, 0x31, 0x80, 0x06, 0x01, 0x02, 0x09, 0x4B, + 0x01, 0x0C, 0x00, 0x03, 0x05, 0x22, 0x02, 0x05, 0x07, 0x14, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x02, 0x11, 0x00, 0x00, 0x02, 0x30, 0x00, 0x00, 0x02, 0x15, 0x80, 0x23, 0x1A, 0x09, 0x0D, 0x1D, + 0x14, 0x2C, 0x02, 0x05, 0x6E, 0x07, 0x01, 0x11, 0x2B, 0x04, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x02, 0x11, 0x00, 0x00, 0x02, 0x30, 0x00, 0x00, 0x02, 0x15, 0x80, 0x23, 0x1A, 0x09, 0x0D, 0x1D, + 0x14, 0x2C, 0x02, 0x05, 0x6E, 0x07, 0x01, 0x11, 0x2B, 0x04, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x41, 0x00, 0x00, 0x01, 0x35, 0x00, 0x00, 0x00, 0x28, 0x80, 0x0B, 0x02, 0x00, 0x0B, 0x7F, + 0x00, 0x07, 0x24, 0x0C, 0x00, 0x10, 0x00, 0x11, 0x3D, 0x15, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x41, 0x00, 0x00, 0x01, 0x35, 0x00, 0x00, 0x00, 0x28, 0x80, 0x0B, 0x02, 0x00, 0x0B, 0x7F, + 0x00, 0x07, 0x24, 0x0C, 0x00, 0x10, 0x00, 0x11, 0x3D, 0x15, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x0B, 0x01, 0x08, 0x00, 0x15, 0x02, 0x00, 0x0F, 0x06, 0x00, 0x01, 0x0B, 0x16, 0x0B, 0x03, 0x00, + 0x08, 0x01, 0x05, 0x13, 0x16, 0x00, 0x11, 0x08, 0x00, 0x80, 0x04, 0x0A, 0x00, 0x02, 0x09, 0x80, + 0x0B, 0x01, 0x08, 0x00, 0x15, 0x02, 0x00, 0x0F, 0x06, 0x00, 0x01, 0x0B, 0x16, 0x0B, 0x03, 0x00, + 0x08, 0x01, 0x05, 0x13, 0x16, 0x00, 0x11, 0x08, 0x00, 0x80, 0x04, 0x0A, 0x00, 0x02, 0x09, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x10, 0x00, 0x80, 0x08, 0x25, 0x80, 0x00, 0x80, 0x11, 0x80, 0x02, 0x00, 0x00, 0x08, 0x01, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x01, 0x80, + 0x00, 0x10, 0x00, 0x80, 0x08, 0x25, 0x80, 0x00, 0x80, 0x11, 0x80, 0x02, 0x00, 0x00, 0x08, 0x01, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x01, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x37, 0x00, 0x00, 0x04, 0x34, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x03, 0x07, 0x01, 0x0A, 0x4C, + 0x02, 0x03, 0x06, 0x21, 0x02, 0x08, 0x00, 0x01, 0x03, 0x1B, 0x06, 0x07, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x37, 0x00, 0x00, 0x04, 0x34, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x03, 0x07, 0x01, 0x0A, 0x4C, + 0x02, 0x03, 0x06, 0x21, 0x02, 0x08, 0x00, 0x01, 0x03, 0x1B, 0x06, 0x07, 0x00, 0x00, 0x01, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x04, 0x00, 0x00, 0x01, 0x00, 0x04, 0x00, 0x01, 0x00, 0x01, 0x80, 0x13, 0x80, 0x02, 0x0C, 0x00, + 0x00, 0x04, 0x00, 0x0A, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x01, 0x07, 0x80, 0x00, 0x01, 0x80, + 0x04, 0x00, 0x00, 0x01, 0x00, 0x04, 0x00, 0x01, 0x00, 0x01, 0x80, 0x13, 0x80, 0x02, 0x0C, 0x00, + 0x00, 0x04, 0x00, 0x0A, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x01, 0x07, 0x80, 0x00, 0x01, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x00, 0x02, 0x00, 0x02, 0x0E, 0x00, 0x01, 0x09, 0x00, 0x11, 0x02, 0x18, 0x0A, 0x02, 0x00, + 0x02, 0x00, 0x04, 0x09, 0x08, 0x00, 0x00, 0x0B, 0x80, 0x00, 0x00, 0x0A, 0x80, 0x00, 0x01, 0x80, + 0x00, 0x00, 0x02, 0x00, 0x02, 0x0E, 0x00, 0x01, 0x09, 0x00, 0x11, 0x02, 0x18, 0x0A, 0x02, 0x00, + 0x02, 0x00, 0x04, 0x09, 0x08, 0x00, 0x00, 0x0B, 0x80, 0x00, 0x00, 0x0A, 0x80, 0x00, 0x01, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x3B, 0x02, 0x00, 0x0A, 0x08, 0x00, 0x04, 0x00, 0x05, 0x80, 0x02, 0x03, 0x03, 0x0F, 0x05, + 0x80, 0x03, 0x02, 0x00, 0x00, 0x04, 0x00, 0x07, 0x01, 0x04, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, + 0x00, 0x3B, 0x02, 0x00, 0x0A, 0x08, 0x00, 0x04, 0x00, 0x05, 0x80, 0x02, 0x03, 0x03, 0x0F, 0x05, + 0x80, 0x03, 0x02, 0x00, 0x00, 0x04, 0x00, 0x07, 0x01, 0x04, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x0A, 0x80, 0x00, 0x00, 0x17, 0x80, 0x00, 0x80, 0x13, 0x00, 0x0D, 0x05, 0x00, 0x03, 0x05, + 0x00, 0x80, 0x00, 0x80, 0x00, 0x03, 0x00, 0x00, 0x09, 0x00, 0x80, 0x00, 0x80, 0x00, 0x00, 0x80, + 0x80, 0x0A, 0x80, 0x00, 0x00, 0x17, 0x80, 0x00, 0x80, 0x13, 0x00, 0x0D, 0x05, 0x00, 0x03, 0x05, + 0x00, 0x80, 0x00, 0x80, 0x00, 0x03, 0x00, 0x00, 0x09, 0x00, 0x80, 0x00, 0x80, 0x00, 0x00, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x16, 0x80, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x16, 0x80, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x03, 0x80, 0x80, 0x00, 0x11, 0x80, 0x80, 0x80, 0x07, 0x80, 0x80, 0x00, 0x80, 0x00, 0x00, + 0x80, 0x80, 0x00, 0x80, 0x80, 0x02, 0x80, 0x80, 0x00, 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x03, 0x80, 0x80, 0x00, 0x11, 0x80, 0x80, 0x80, 0x07, 0x80, 0x80, 0x00, 0x80, 0x00, 0x00, + 0x80, 0x80, 0x00, 0x80, 0x80, 0x02, 0x80, 0x80, 0x00, 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x15, 0x80, 0x80, 0x00, 0x21, 0x80, 0x80, 0x80, 0x14, 0x80, 0x0B, 0x03, 0x00, 0x07, 0x02, + 0x80, 0x80, 0x00, 0x80, 0x1A, 0x09, 0x80, 0x00, 0x04, 0x00, 0x80, 0x01, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x15, 0x80, 0x80, 0x00, 0x21, 0x80, 0x80, 0x80, 0x14, 0x80, 0x0B, 0x03, 0x00, 0x07, 0x02, + 0x80, 0x80, 0x00, 0x80, 0x1A, 0x09, 0x80, 0x00, 0x04, 0x00, 0x80, 0x01, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +}; + +/// + +/**************************************************************************/ + +/// BIN_SEARCH() +// search a sorted array in O(log n) e.g. +// BIN_SEARCH(strings,0,sizeof(strings)/sizeof(strings[0]),strcmp(key,array[mid]),res); +#define BIN_SEARCH(array,low,high,compare,result) \ + {\ + int l = low;\ + int h = high;\ + int m = (low+high)/2;\ + result = NULL;\ + while (l<=h)\ + {\ + int d = compare;\ + if (!d){ result = &array[m]; break; }\ + if (d < 0) h = m - 1;\ + else l = m + 1;\ + m = (l + h)/2;\ + }\ + } + +/// +/// mystrdup() +static STRPTR +mystrdup(const char *str) +{ + STRPTR newStr; + int len; + + if(!str) + return NULL; + + len = strlen(str); + if(!len) + return NULL; + + if((newStr = allocArbitrateVecPooled(len+1))) + strlcpy(newStr, str, len+1); + + return newStr; +} +/// +/// mystrndup() +static STRPTR +mystrndup(const char *str1, int n) +{ + STRPTR dest; + + if((dest = allocArbitrateVecPooled(n+1))) + { + if(str1) + strlcpy(dest, str1, n+1); + else + dest[0] = '\0'; + + dest[n] = '\0'; + } + + return dest; +} +/// +/// readLine() +static ULONG +readLine(BPTR fh, char *buf, ULONG size) +{ + char *c; + + if((c = FGets(fh, buf, size)) == NULL) + return FALSE; + + for(; *c; c++) + { + if(*c == '\n' || *c == '\r') + { + *c = '\0'; + break; + } + } + + return TRUE; +} +/// +/// getConfigItem() +static const char * getConfigItem(const char *buf, const char *item, int len) +{ + ENTER(); + + if(strnicmp(buf, item, len) == 0) + { + UBYTE c; + + buf += len; + + /* skip spaces */ + while((c = *buf) && isspace(c)) + buf++; + + if(*buf != '=') + { + RETURN(NULL); + return NULL; + } + + buf++; + + /* skip spaces */ + while((c = *buf) && isspace(c)) + buf++; + + RETURN(buf); + return buf; + } + + RETURN(NULL); + return NULL; +} +/// +/// parseUtf8() +static int +parseUtf8(STRPTR *ps) +{ + STRPTR s = *ps; + int wc, n, i; + + ENTER(); + + if(*s<0x80) + { + *ps = s+1; + + RETURN(*s); + return *s; + } + + if(*s<0xc2) + { + RETURN(-1); + return -1; + } + else + { + if(*s<0xe0) + { + if((s[1] & 0xc0)!=0x80) + { + RETURN(-1); + return -1; + } + + *ps = s+2; + + RETURN(((s[0] & 0x1f)<<6) | (s[1] & 0x3f)); + return ((s[0] & 0x1f)<<6) | (s[1] & 0x3f); + } + else + { + if(*s<0xf0) + { + n = 3; + } + else + { + if(*s<0xf8) + { + n = 4; + } + else + { + if(*s<0xfc) + { + n = 5; + } + else + { + if(*s<0xfe) + { + n = 6; + } + else + { + RETURN(-1); + return -1; + } + } + } + } + } + } + + wc = *s++ & ((1<<(7-n))-1); + + for(i = 1; ilist.mlh_Head, num = 0; (succ = node->mln_Succ); node = succ) + ++num; + + return num; +} + +/// + +/**************************************************************************/ + +/// defaultCodeset() +static struct codeset * +defaultCodeset(ULONG sem) +{ + char buf[256]; + struct codeset *codeset; + + ENTER(); + + if(sem) + ObtainSemaphoreShared(&CodesetsBase->libSem); + + *buf = 0; + GetVar("codeset_default",buf,sizeof(buf),GVF_GLOBAL_ONLY); + + if(!*buf || !(codeset = codesetsFind(&CodesetsBase->codesets,buf))) + codeset = CodesetsBase->systemCodeset; + + if(sem) + ReleaseSemaphore(&CodesetsBase->libSem); + + RETURN(codeset); + return codeset; +} +/// +/// codesetsCmpUnicode() +// The compare function +static int +codesetsCmpUnicode(struct single_convert *arg1,struct single_convert *arg2) +{ + return strcmp((char*)&arg1->utf8[1], (char*)&arg2->utf8[1]); +} +/// +/// codesetsReadTable() + +#define ITEM_STANDARD "Standard" +#define ITEM_ALTSTANDARD "AltStandard" +#define ITEM_READONLY "ReadOnly" +#define ITEM_CHARACTERIZATION "Characterization" + +// Reads a coding table and adds it +static BOOL +codesetsReadTable(struct codesetList *csList, STRPTR name) +{ + BPTR fh; + BOOL res = FALSE; + + ENTER(); + + D(DBF_STARTUP, "trying to fetch charset file '%s'...", name); + + if((fh = Open(name, MODE_OLDFILE))) + { + struct codeset *codeset; + + if((codeset = (struct codeset *)allocVecPooled(CodesetsBase->pool, sizeof(struct codeset)))) + { + int i; + char buf[512]; + + memset(codeset,0,sizeof(struct codeset)); + + for(i = 0; i<256; i++) + codeset->table[i].code = codeset->table[i].ucs4 = i; + + while(readLine(fh, buf, 512*sizeof(char))) + { + const char *result; + + if(*buf=='#') + continue; + + if((result = getConfigItem(buf, ITEM_STANDARD, strlen(ITEM_STANDARD)))) + codeset->name = mystrdup(result); + else if(codeset->name == NULL) // a valid file starts with standard and nothing else!! + break; + else if((result = getConfigItem(buf,ITEM_ALTSTANDARD,strlen(ITEM_ALTSTANDARD)))) + codeset->alt_name = mystrdup(result); + else if((result = getConfigItem(buf,ITEM_READONLY,strlen(ITEM_READONLY)))) + codeset->read_only = !!atoi(result); + else if((result = getConfigItem(buf,ITEM_CHARACTERIZATION,strlen(ITEM_CHARACTERIZATION)))) + { + if((result[0]=='_') && (result[1]=='(') && (result[2]=='"')) + { + char *end = strchr(result + 3, '"'); + + if(end) + codeset->characterization = mystrndup(result+3,end-(result+3)); + } + else + codeset->characterization = mystrdup(result); + } + else + { + char *p = buf; + int fmt2 = 0; + + if((*p=='=') || (fmt2 = ((*p=='0') || (*(p+1)=='x')))) + { + p++; + p += fmt2; + + i = strtol((const char *)p,(char **)&p,16); + if(i>0 && i<256) + { + while(isspace(*p)) p++; + + if(!strnicmp(p, "U+", 2)) + { + p += 2; + codeset->table[i].ucs4 = strtol((const char *)p,(char **)&p,16); + } + else + { + if(*p!='#') + codeset->table[i].ucs4 = strtol((const char *)p,(char **)&p,0); + } + } + } + } + } + + // check if there is not already codeset with the same name in here + if(codeset->name != NULL && !(codesetsFind(csList, codeset->name))) + { + for(i=0; i<256; i++) + { + UTF32 src = codeset->table[i].ucs4, *src_ptr = &src; + UTF8 *dest_ptr = &codeset->table[i].utf8[1]; + + CodesetsConvertUTF32toUTF8((const UTF32 **)&src_ptr,src_ptr+1,&dest_ptr,dest_ptr+6,CSF_StrictConversion); + *dest_ptr = 0; + codeset->table[i].utf8[0] = (ULONG)dest_ptr-(ULONG)(&codeset->table[i].utf8[1]); + } + + memcpy(codeset->table_sorted, codeset->table, sizeof(codeset->table)); + qsort(codeset->table_sorted, 256, sizeof(codeset->table[0]), (int (*)(const void *arg1,const void *arg2))codesetsCmpUnicode); + AddTail((struct List *)csList, (struct Node *)&codeset->node); + + res = TRUE; + } + else + { + // cleanup + if(codeset->name) freeArbitrateVecPooled(codeset->name); + if(codeset->alt_name) freeArbitrateVecPooled(codeset->alt_name); + if(codeset->characterization) freeArbitrateVecPooled(codeset->characterization); + freeArbitrateVecPooled(codeset); + } + } + + Close(fh); + } + + RETURN(res); + return res; +} +/// +/// codesetsScanDir() +static void +codesetsScanDir(struct codesetList *csList, const char *dirPath) +{ + ENTER(); + + if(dirPath != NULL && dirPath[0] != '\0') + { + BPTR dirLock; + + if((dirLock = Lock(dirPath, ACCESS_READ))) + { + struct ExAllControl *eac; + + D(DBF_STARTUP, "scanning directory '%s' for codesets tables", dirPath); + + if((eac = AllocDosObject(DOS_EXALLCONTROL, NULL))) + { + struct ExAllData *ead; + struct ExAllData *eabuffer; + LONG more; + + eac->eac_LastKey = 0; + eac->eac_MatchString = NULL; + eac->eac_MatchFunc = NULL; + + if((eabuffer = allocVecPooled(CodesetsBase->pool, 10*sizeof(struct ExAllData)))) + { + char filePath[620]; + + do + { + more = ExAll(dirLock, eabuffer, 10*sizeof(struct ExAllData), ED_TYPE, eac); + if(!more && IoErr() != ERROR_NO_MORE_ENTRIES) + break; + + if(eac->eac_Entries == 0) + continue; + + ead = (struct ExAllData *)eabuffer; + do + { + // we only take that ead if it is a file (ed_Type < 0) + if(ead->ed_Type < 0) + { + strlcpy(filePath, dirPath, sizeof(filePath)); + AddPart(filePath, (char *)ead->ed_Name, sizeof(filePath)); + + D(DBF_STARTUP, "about to read codeset table '%s'", filePath); + + codesetsReadTable(csList, filePath); + } + } + while((ead = ead->ed_Next)); + } + while(more); + + freeVecPooled(CodesetsBase->pool, eabuffer); + } + + FreeDosObject(DOS_EXALLCONTROL, eac); + } + + UnLock(dirLock); + } + } + + LEAVE(); +} + +/// +/// codesetsInit() +// Initialized and loads the codesets +BOOL +codesetsInit(struct codesetList *csList) +{ + struct codeset *codeset = NULL; + UTF32 src; + int i; + #if defined(__amigaos4__) + int nextMIB = 3; + #endif + + ENTER(); + + ObtainSemaphore(&CodesetsBase->poolSem); + + NewList((struct List *)&CodesetsBase->codesets); + + // to make the list of the supported codesets complete we also add a + // fake 'UTF-8' only so that our users can query for that codeset as well. + if(!(codeset = allocVecPooled(CodesetsBase->pool, sizeof(struct codeset)))) goto end; + codeset->name = mystrdup("UTF-8"); + codeset->alt_name = NULL; + codeset->characterization = mystrdup("Unicode"); + codeset->read_only = 0; + AddTail((struct List *)csList, (struct Node *)&codeset->node); + CodesetsBase->utf8Codeset = codeset; + + // on AmigaOS4 we can use diskfont.library to inquire charset information as + // it comes with a quite rich implementation of different charsets. + #if defined(__amigaos4__) + do + { + char *mimename; + char *ianaName; + ULONG *mapTable; + int curMIB = nextMIB; + + nextMIB = (ULONG)ObtainCharsetInfo(DFCS_NUMBER, curMIB, DFCS_NEXTNUMBER); + if(nextMIB == 0) + break; + + mapTable = (ULONG *)ObtainCharsetInfo(DFCS_NUMBER, curMIB, DFCS_MAPTABLE); + mimename = (char *)ObtainCharsetInfo(DFCS_NUMBER, curMIB, DFCS_MIMENAME); + ianaName = (char *)ObtainCharsetInfo(DFCS_NUMBER, curMIB, DFCS_NAME); + if(mapTable && mimename && !(codesetsFind(csList, mimename))) + { + D(DBF_STARTUP, "loading charset '%s' from diskfont.library...", mimename); + + if(!(codeset = allocVecPooled(CodesetsBase->pool, sizeof(struct codeset)))) goto end; + codeset->name = mystrdup(mimename); + codeset->alt_name = NULL; + codeset->characterization = mystrdup(ianaName); + codeset->read_only = 0; + + for(i=0; i<256; i++) + { + UTF32 *src_ptr = &src; + UTF8 *dest_ptr = &codeset->table[i].utf8[1]; + + src = mapTable[i]; + + codeset->table[i].code = i; + codeset->table[i].ucs4 = src; + CodesetsConvertUTF32toUTF8((const UTF32 **)&src_ptr, src_ptr+1, &dest_ptr, dest_ptr+6, CSF_StrictConversion); + *dest_ptr = 0; + codeset->table[i].utf8[0] = (ULONG)dest_ptr-(ULONG)&codeset->table[i].utf8[1]; + } + memcpy(codeset->table_sorted,codeset->table,sizeof(codeset->table)); + qsort(codeset->table_sorted,256,sizeof(codeset->table[0]),(int (*)(const void *arg1, const void *arg2))codesetsCmpUnicode); + AddTail((struct List *)csList, (struct Node *)&codeset->node); + } + } + while(TRUE); + #endif + + D(DBF_STARTUP, "loading charsets from Libs:Charsets..."); + + // we try to walk to the LIBS:Charsets directory on our own and readin our + // own charset tables + codesetsScanDir(csList, "LIBS:Charsets"); + + // + // now we go and initialize our internally supported codesets but only if + // we have not already loaded a charset with the same name + // + D(DBF_STARTUP, "initializing internal charsets..."); + + // ISO-8859-1 + EURO + if(!(codesetsFind(csList, "ISO-8859-1 + Euro"))) + { + if(!(codeset = allocVecPooled(CodesetsBase->pool, sizeof(struct codeset)))) goto end; + codeset->name = mystrdup("ISO-8859-1 + Euro"); + codeset->alt_name = NULL; + codeset->characterization = mystrdup("West European (with EURO)"); + codeset->read_only = 1; + for(i = 0; i<256; i++) + { + UTF32 *src_ptr = &src; + UTF8 *dest_ptr = &codeset->table[i].utf8[1]; + + if(i==164) + src = 0x20AC; /* the EURO sign */ + else + src = i; + + codeset->table[i].code = i; + codeset->table[i].ucs4 = src; + CodesetsConvertUTF32toUTF8((const UTF32 **)&src_ptr, src_ptr+1, &dest_ptr, dest_ptr+6, CSF_StrictConversion); + *dest_ptr = 0; + codeset->table[i].utf8[0] = (ULONG)dest_ptr-(ULONG)&codeset->table[i].utf8[1]; + } + memcpy(codeset->table_sorted,codeset->table,sizeof(codeset->table)); + qsort(codeset->table_sorted,256,sizeof(codeset->table[0]),(int (*)(const void *arg1, const void *arg2))codesetsCmpUnicode); + AddTail((struct List *)csList, (struct Node *)&codeset->node); + } + + // ISO-8859-1 + if(!(codesetsFind(csList, "ISO-8859-1"))) + { + if(!(codeset = allocVecPooled(CodesetsBase->pool, sizeof(struct codeset)))) goto end; + codeset->name = mystrdup("ISO-8859-1"); + codeset->alt_name = mystrdup("ISO8859-1"); + codeset->characterization = mystrdup("West European"); + codeset->read_only = 0; + for(i = 0; i<256; i++) + { + UTF32 *src_ptr = &src; + UTF8 *dest_ptr = &codeset->table[i].utf8[1]; + + src = i; + + codeset->table[i].code = i; + codeset->table[i].ucs4 = src; + CodesetsConvertUTF32toUTF8((const UTF32 **)&src_ptr, src_ptr+1, &dest_ptr, dest_ptr+6, CSF_StrictConversion); + *dest_ptr = 0; + codeset->table[i].utf8[0] = (ULONG)dest_ptr-(ULONG)&codeset->table[i].utf8[1]; + } + memcpy(codeset->table_sorted,codeset->table,sizeof(codeset->table)); + qsort(codeset->table_sorted,256,sizeof(codeset->table[0]),(int (*)(const void *arg1,const void *arg2))codesetsCmpUnicode); + AddTail((struct List *)csList, (struct Node *)&codeset->node); + } + + // ISO-8859-2 + if(!(codesetsFind(csList, "ISO-8859-2"))) + { + if(!(codeset = allocVecPooled(CodesetsBase->pool, sizeof(struct codeset)))) goto end; + codeset->name = mystrdup("ISO-8859-2"); + codeset->alt_name = mystrdup("ISO8859-2"); + codeset->characterization = mystrdup("Central/East European"); + codeset->read_only = 0; + for(i = 0; i<256; i++) + { + UTF32 *src_ptr = &src; + UTF8 *dest_ptr = &codeset->table[i].utf8[1]; + + if(i<0xa0) + src = i; + else + src = iso_8859_2_to_ucs4[i-0xa0]; + + codeset->table[i].code = i; + codeset->table[i].ucs4 = src; + CodesetsConvertUTF32toUTF8((const UTF32 **)&src_ptr, src_ptr+1, &dest_ptr,dest_ptr+6, CSF_StrictConversion); + *dest_ptr = 0; + codeset->table[i].utf8[0] = (ULONG)dest_ptr-(ULONG)&codeset->table[i].utf8[1]; + } + memcpy(codeset->table_sorted, codeset->table, sizeof(codeset->table)); + qsort(codeset->table_sorted,256,sizeof(codeset->table[0]),(int (*)(const void *arg1,const void *arg2))codesetsCmpUnicode); + AddTail((struct List *)csList, (struct Node *)&codeset->node); + } + + // ISO-8859-3 + if(!(codesetsFind(csList, "ISO-8859-3"))) + { + if(!(codeset = allocVecPooled(CodesetsBase->pool, sizeof(struct codeset)))) goto end; + codeset->name = mystrdup("ISO-8859-3"); + codeset->alt_name = mystrdup("ISO8859-3"); + codeset->characterization = mystrdup("South European"); + codeset->read_only = 0; + for(i = 0; i<256; i++) + { + UTF32 *src_ptr = &src; + UTF8 *dest_ptr = &codeset->table[i].utf8[1]; + + if(i<0xa0) + src = i; + else + src = iso_8859_3_to_ucs4[i-0xa0]; + + codeset->table[i].code = i; + codeset->table[i].ucs4 = src; + CodesetsConvertUTF32toUTF8((const UTF32 **)&src_ptr,src_ptr+1,&dest_ptr,dest_ptr+6,CSF_StrictConversion); + *dest_ptr = 0; + codeset->table[i].utf8[0] = (ULONG)dest_ptr-(ULONG)&codeset->table[i].utf8[1]; + } + memcpy(codeset->table_sorted,codeset->table,sizeof(codeset->table)); + qsort(codeset->table_sorted,256,sizeof(codeset->table[0]),(int (*)(const void *arg1,const void *arg2))codesetsCmpUnicode); + AddTail((struct List *)csList, (struct Node *)&codeset->node); + } + + // ISO-8859-4 + if(!(codesetsFind(csList, "ISO-8859-4"))) + { + if(!(codeset = allocVecPooled(CodesetsBase->pool,sizeof(struct codeset)))) goto end; + codeset->name = mystrdup("ISO-8859-4"); + codeset->alt_name = mystrdup("ISO8859-4"); + codeset->characterization = mystrdup("North European"); + codeset->read_only = 0; + for(i = 0; i<256; i++) + { + UTF32 *src_ptr = &src; + UTF8 *dest_ptr = &codeset->table[i].utf8[1]; + + if(i<0xa0) + src = i; + else + src = iso_8859_4_to_ucs4[i-0xa0]; + + codeset->table[i].code = i; + codeset->table[i].ucs4 = src; + CodesetsConvertUTF32toUTF8((const UTF32 **)&src_ptr,src_ptr+1,&dest_ptr,dest_ptr+6,CSF_StrictConversion); + *dest_ptr = 0; + codeset->table[i].utf8[0] = (ULONG)dest_ptr-(ULONG)&codeset->table[i].utf8[1]; + } + memcpy(codeset->table_sorted,codeset->table,sizeof(codeset->table)); + qsort(codeset->table_sorted,256,sizeof(codeset->table[0]),(int (*)(const void *arg1, const void *arg2))codesetsCmpUnicode); + AddTail((struct List *)csList, (struct Node *)&codeset->node); + } + + // ISO-8859-5 + if(!(codesetsFind(csList, "ISO-8859-5"))) + { + if(!(codeset = allocVecPooled(CodesetsBase->pool,sizeof(struct codeset)))) goto end; + codeset->name = mystrdup("ISO-8859-5"); + codeset->alt_name = mystrdup("ISO8859-5"); + codeset->characterization = mystrdup("Slavic languages"); + codeset->read_only = 0; + for(i = 0; i<256; i++) + { + UTF32 *src_ptr = &src; + UTF8 *dest_ptr = &codeset->table[i].utf8[1]; + + if(i<0xa0) + src = i; + else + src = iso_8859_5_to_ucs4[i-0xa0]; + + codeset->table[i].code = i; + codeset->table[i].ucs4 = src; + CodesetsConvertUTF32toUTF8((const UTF32 **)&src_ptr,src_ptr+1,&dest_ptr,dest_ptr+6,CSF_StrictConversion); + *dest_ptr = 0; + codeset->table[i].utf8[0] = (ULONG)dest_ptr-(ULONG)&codeset->table[i].utf8[1]; + } + memcpy(codeset->table_sorted,codeset->table,sizeof(codeset->table)); + qsort(codeset->table_sorted,256,sizeof(codeset->table[0]),(int (*)(const void *arg1,const void *arg2))codesetsCmpUnicode); + AddTail((struct List *)csList, (struct Node *)&codeset->node); + } + + // ISO-8859-9 + if(!(codesetsFind(csList, "ISO-8859-9"))) + { + if(!(codeset = allocVecPooled(CodesetsBase->pool,sizeof(struct codeset)))) goto end; + codeset->name = mystrdup("ISO-8859-9"); + codeset->alt_name = mystrdup("ISO8859-9"); + codeset->characterization = mystrdup("Turkish"); + codeset->read_only = 0; + for(i = 0; i<256; i++) + { + UTF32 *src_ptr = &src; + UTF8 *dest_ptr = &codeset->table[i].utf8[1]; + + if(i<0xa0) + src = i; + else + src = iso_8859_9_to_ucs4[i-0xa0]; + + codeset->table[i].code = i; + codeset->table[i].ucs4 = src; + CodesetsConvertUTF32toUTF8((const UTF32 **)&src_ptr,src_ptr+1,&dest_ptr,dest_ptr+6,CSF_StrictConversion); + *dest_ptr = 0; + codeset->table[i].utf8[0] = (ULONG)dest_ptr-(ULONG)&codeset->table[i].utf8[1]; + } + memcpy(codeset->table_sorted,codeset->table,sizeof(codeset->table)); + qsort(codeset->table_sorted,256,sizeof(codeset->table[0]),(int (*)(const void *arg1,const void *arg2))codesetsCmpUnicode); + AddTail((struct List *)csList, (struct Node *)&codeset->node); + } + + // ISO-8859-15 + if(!(codesetsFind(csList, "ISO-8859-15"))) + { + if(!(codeset = allocVecPooled(CodesetsBase->pool,sizeof(struct codeset)))) goto end; + codeset->name = mystrdup("ISO-8859-15"); + codeset->alt_name = mystrdup("ISO8859-15"); + codeset->characterization = mystrdup("West European II"); + codeset->read_only = 0; + for(i = 0; i<256; i++) + { + UTF32 *src_ptr = &src; + UTF8 *dest_ptr = &codeset->table[i].utf8[1]; + + if(i<0xa0) + src = i; + else + src = iso_8859_15_to_ucs4[i-0xa0]; + + codeset->table[i].code = i; + codeset->table[i].ucs4 = src; + CodesetsConvertUTF32toUTF8((const UTF32 **)&src_ptr,src_ptr+1,&dest_ptr,dest_ptr+6,CSF_StrictConversion); + *dest_ptr = 0; + codeset->table[i].utf8[0] = (ULONG)dest_ptr-(ULONG)&codeset->table[i].utf8[1]; + } + memcpy(codeset->table_sorted,codeset->table,sizeof (codeset->table)); + qsort(codeset->table_sorted,256,sizeof(codeset->table[0]),(int (*)(const void *arg1,const void *arg2))codesetsCmpUnicode); + AddTail((struct List *)csList, (struct Node *)&codeset->node); + } + + // ISO-8859-16 + if(!(codesetsFind(csList, "ISO-8859-16"))) + { + if(!(codeset = allocVecPooled(CodesetsBase->pool,sizeof(struct codeset)))) goto end; + codeset->name = mystrdup("ISO-8859-16"); + codeset->alt_name = mystrdup("ISO8869-16"); + codeset->characterization = mystrdup("South-Eastern European"); + codeset->read_only = 0; + for(i=0;i<256;i++) + { + UTF32 *src_ptr = &src; + UTF8 *dest_ptr = &codeset->table[i].utf8[1]; + + if(i < 0xa0) + src = i; + else + src = iso_8859_16_to_ucs4[i-0xa0]; + + codeset->table[i].code = i; + codeset->table[i].ucs4 = src; + CodesetsConvertUTF32toUTF8((const UTF32 **)&src_ptr, src_ptr+1, &dest_ptr, dest_ptr+6, CSF_StrictConversion); + *dest_ptr = 0; + codeset->table[i].utf8[0] = (ULONG)dest_ptr - (ULONG)&codeset->table[i].utf8[1]; + } + memcpy(codeset->table_sorted, codeset->table, sizeof(codeset->table)); + qsort(codeset->table_sorted, 256, sizeof(codeset->table[0]), (int (*)(const void *arg1, const void *arg2))codesetsCmpUnicode); + AddTail((struct List *)csList, (struct Node *)&codeset->node); + } + + // KOI8-R + if(!(codesetsFind(csList, "KOI8-R"))) + { + if(!(codeset = allocVecPooled(CodesetsBase->pool,sizeof(struct codeset)))) goto end; + codeset->name = mystrdup("KOI8-R"); + codeset->alt_name = NULL; + codeset->characterization = mystrdup("Russian"); + codeset->read_only = 0; + for(i = 0; i<256; i++) + { + UTF32 *src_ptr = &src; + UTF8 *dest_ptr = &codeset->table[i].utf8[1]; + + if(i<0x80) + src = i; + else + src = koi8r_to_ucs4[i-0x80]; + + codeset->table[i].code = i; + codeset->table[i].ucs4 = src; + CodesetsConvertUTF32toUTF8((const UTF32 **)&src_ptr,src_ptr+1,&dest_ptr,dest_ptr+6,CSF_StrictConversion); + *dest_ptr = 0; + codeset->table[i].utf8[0] = (ULONG)dest_ptr-(ULONG)&codeset->table[i].utf8[1]; + } + memcpy(codeset->table_sorted,codeset->table,sizeof(codeset->table)); + qsort(codeset->table_sorted,256,sizeof(codeset->table[0]),(int (*)(const void *arg1,const void *arg2))codesetsCmpUnicode); + AddTail((struct List *)csList, (struct Node *)&codeset->node); + } + + // AmigaPL + if(!(codesetsFind(csList, "AmigaPL"))) + { + if(!(codeset = allocVecPooled(CodesetsBase->pool,sizeof(struct codeset)))) goto end; + codeset->name = mystrdup("AmigaPL"); + codeset->alt_name = NULL; + codeset->characterization = mystrdup("Polish (Amiga)"); + codeset->read_only = 1; + for(i=0; i<256; i++) + { + UTF32 *src_ptr = &src; + UTF8 *dest_ptr = &codeset->table[i].utf8[1]; + + if(i<0xa0) + src = i; + else + src = amigapl_to_ucs4[i-0xa0]; + + codeset->table[i].code = i; + codeset->table[i].ucs4 = src; + CodesetsConvertUTF32toUTF8((const UTF32 **)&src_ptr,src_ptr+1,&dest_ptr,dest_ptr+6,CSF_StrictConversion); + *dest_ptr = 0; + codeset->table[i].utf8[0] = (ULONG)dest_ptr-(ULONG)&codeset->table[i].utf8[1]; + } + memcpy(codeset->table_sorted,codeset->table,sizeof(codeset->table)); + qsort(codeset->table_sorted,256,sizeof(codeset->table[0]),(int (*)(const void *arg1,const void *arg2))codesetsCmpUnicode); + AddTail((struct List *)csList, (struct Node *)&codeset->node); + } + + // Amiga-1251 + if(!(codesetsFind(csList, "Amiga-1251"))) + { + if(!(codeset = allocVecPooled(CodesetsBase->pool,sizeof(struct codeset)))) goto end; + codeset->name = mystrdup("Amiga-1251"); + codeset->alt_name = mystrdup("Ami1251"); + codeset->characterization = mystrdup("Cyrillic (Amiga)"); + codeset->read_only = 1; + for(i=0; i<256; i++) + { + UTF32 *src_ptr = &src; + UTF8 *dest_ptr = &codeset->table[i].utf8[1]; + + if(i < 0xa0) + src = i; + else + src = amiga1251_to_ucs4[i-0xa0]; + + codeset->table[i].code = i; + codeset->table[i].ucs4 = src; + CodesetsConvertUTF32toUTF8((const UTF32 **)&src_ptr, src_ptr+1, &dest_ptr, dest_ptr+6, CSF_StrictConversion); + *dest_ptr = 0; + codeset->table[i].utf8[0] = (char*)dest_ptr - (char*)&codeset->table[i].utf8[1]; + } + memcpy(codeset->table_sorted,codeset->table,sizeof(codeset->table)); + qsort(codeset->table_sorted,256,sizeof(codeset->table[0]),(int (*)(const void *arg1, const void *arg2))codesetsCmpUnicode); + AddTail((struct List *)csList, (struct Node *)&codeset->node); + } + +end: + ReleaseSemaphore(&CodesetsBase->poolSem); + + RETURN(codeset != 0); + return codeset != NULL; +} + +/// +/// codesetsCleanup() +// Cleanup the memory for the codeset +void +codesetsCleanup(struct codesetList *csList) +{ + struct codeset *code; + + ENTER(); + + while((code = (struct codeset *)RemHead((struct List *)csList))) + { + if(code->name) freeArbitrateVecPooled(code->name); + if(code->alt_name) freeArbitrateVecPooled(code->alt_name); + if(code->characterization) freeArbitrateVecPooled(code->characterization); + + freeArbitrateVecPooled(code); + } + + LEAVE(); +} + +/// +/// codesetsFind() +// Returns the given codeset. +struct codeset * +codesetsFind(struct codesetList *csList, const char *name) +{ + struct codeset *res = NULL; + + ENTER(); + + if(name && *name) + { + struct codeset *mstate, *succ; + + for(mstate = (struct codeset *)csList->list.mlh_Head; (succ = (struct codeset *)mstate->node.mln_Succ); mstate = succ) + { + if(!stricmp(name, mstate->name) || (mstate->alt_name != NULL && !stricmp(name, mstate->alt_name))) + break; + } + + if(succ) + res = mstate; + } + + RETURN(res); + return res; +} +/// +/// codesetsFindBest() +// Returns the best codeset for the given text +static struct codeset * +codesetsFindBest(struct TagItem *attrs, ULONG csFamily, STRPTR text, int text_len, int *error_ptr) +{ + struct codeset *best_codeset = NULL; + int best_errors = text_len; + BOOL found = FALSE; + + ENTER(); + + // in case the user specified the codeset family as a + // cyrillic one we go and do our cyrillic specific analysis first + if(csFamily == CSV_CodesetFamily_Cyrillic) + { + #define NUM_CYRILLIC 3 + + struct CodesetSearch + { + const char *name; + const char *data; + }; + + struct CodesetSearch search[NUM_CYRILLIC]; + unsigned char *p; + unsigned char *tp; + int ctr[NUM_CYRILLIC]; + int Nmax; + int NGlob = 1; + int max; + int gr = 0; + int lr = 0; + + search[0].name = "windows-1251"; + search[0].data = cp1251_data; + search[1].name = "IBM866"; + search[1].data = cp866_data; + search[2].name = "KOI8-R"; + search[2].data = koi8r_data; + + memset(&ctr, 0, sizeof(ctr)); + + tp = (unsigned char *)text; + + do + { + int n; + int mid = max = -466725766; // TODO: what's the magic behind this constant? + Nmax = 0; + + for(n=0; n < NUM_CYRILLIC; n++) + { + unsigned char la = 0; + unsigned char *tptr = (unsigned char *)search[n].data; + + p = tp; + + do + { + unsigned char lb = (*p++) ^ 128; + + if(!((la | lb) & 128)) + ctr[n] += (signed char)tptr[(la << 7) + lb]; + + la = lb; + } + while(*p); + + if(max < ctr[n]) + { + mid = max; + max = ctr[n]; + Nmax = n+1; + } + } + + tp = p; + if((max >= 500) && ((max-mid) >= 1000)) + { + lr = gr = 1; + NGlob = Nmax; + } + } + while((*p) && (!gr)); + + if(gr || ((!(*p)) && lr)) + Nmax = NGlob; + + // if our analysis found something, we go and try + // to find the corresponding codeset in out codeset list + if(max != 0) + { + struct TagItem *tstate = attrs; + struct TagItem *tag; + + D(DBF_STARTUP, "identified text as '%s", search[Nmax-1].name); + + // now we walk through our taglist and check if the user + // supplied + while((tag = NextTagItem(&tstate))) + { + if(tag->ti_Tag == CSA_CodesetList && tag->ti_Data != 0) + { + struct codesetList *csList = (struct codesetList *)tag->ti_Data; + + if((best_codeset = codesetsFind(csList, search[Nmax-1].name)) != NULL) + break; + } + } + + // if we still haven't found the matching codeset + // we search the internal list + if(best_codeset == NULL) + best_codeset = codesetsFind(&CodesetsBase->codesets, search[Nmax-1].name); + + best_errors = 0; + + found = TRUE; + } + } + + // if we haven't found the best codeset (through the cyrillic analysis + // we go and do the dumb latin search in our codesetlist + if(found == FALSE) + { + struct TagItem *tstate = attrs; + struct TagItem *tag; + BOOL lastIteration = FALSE; + + while((tag = NextTagItem(&tstate)) || (lastIteration = TRUE)) + { + if(lastIteration == TRUE || (tag->ti_Tag == CSA_CodesetList && tag->ti_Data != 0)) + { + struct codesetList *csList = (lastIteration ? &CodesetsBase->codesets : (struct codesetList *)tag->ti_Data); + struct codeset *codeset = (struct codeset *)csList->list.mlh_Head; + + // the following identification/detection routines is NOT really smart. + // we just see how each UTF8 string is the representation of each char + // in our source text and then check if they are valid or not. As said, + // not very smart, but we don't have anything better right now :( + + while(codeset) + { + if(!codeset->read_only && codeset != CodesetsBase->utf8Codeset) + { + char *text_ptr = text; + int i; + int errors = 0; + + for(i=0; i < text_len; i++) + { + unsigned char c = *text_ptr++; + + if(c) + { + struct single_convert *f = &codeset->table[c]; + + if(f->utf8[0] == 0 || f->utf8[1] == 0x00) + errors++; + } + else + break; + } + + D(DBF_STARTUP, "tried to identify text as '%s' text with %ld of %ld errors", codeset->name, errors, text_len); + + if(errors < best_errors) + { + best_codeset = codeset; + best_errors = errors; + } + + if(best_errors == 0) + break; + } + + codeset = (struct codeset *)codeset->node.mln_Succ; + } + + if(lastIteration) + break; + } + } + } + + if(error_ptr) + *error_ptr = best_errors; + + RETURN(best_codeset); + return best_codeset; +} +/// + +/**************************************************************************/ + +/// CodesetsSupportedA() +#ifdef __AROS__ +AROS_LH1(STRPTR *, CodesetsSupportedA, + AROS_LHA(struct TagItem *, attrs, A0), + struct LibraryHeader *, library, 15, Codesets +) +{ + AROS_LIBFUNC_INIT +#else +STRPTR *LIBFUNC +CodesetsSupportedA(REG(a0, UNUSED struct TagItem * attrs)) +{ +#endif + STRPTR *array = NULL; + struct TagItem *tstate = attrs; + struct TagItem *tag; + int numCodesets; + + ENTER(); + + // first we need to check how many codesets our supplied + // lists carry. + numCodesets = countCodesets(&CodesetsBase->codesets); + while((tag = NextTagItem(&tstate))) + { + if(tag->ti_Tag == CSA_CodesetList && tag->ti_Data != 0) + numCodesets += countCodesets((struct codesetList *)tag->ti_Data); + } + + // now that we know how many codesets we have in our lists we + // can put their names into our string arrays + if(numCodesets > 0) + { + if((array = allocArbitrateVecPooled((numCodesets+1)*sizeof(STRPTR)))) + { + struct codeset *code; + struct codeset *succ; + int i=0; + + // reset the tstate + tstate = attrs; + + ObtainSemaphoreShared(&CodesetsBase->libSem); + + // first we walk through the internal codesets list and + // add the names + for(code = (struct codeset *)CodesetsBase->codesets.list.mlh_Head; (succ = (struct codeset *)code->node.mln_Succ); code = succ, i++) + array[i] = code->name; + + // then we also iterate through our private codesets list + while((tag = NextTagItem(&tstate))) + { + if(tag->ti_Tag == CSA_CodesetList && tag->ti_Data != 0) + { + struct codesetList *csList = (struct codesetList *)tag->ti_Data; + + for(code = (struct codeset *)csList->list.mlh_Head; (succ = (struct codeset *)code->node.mln_Succ); code = succ, i++) + array[i] = code->name; + } + } + + array[i] = NULL; + + ReleaseSemaphore(&CodesetsBase->libSem); + } + } + + RETURN(array); + return array; +#ifdef __AROS__ + AROS_LIBFUNC_EXIT +#endif +} + +#ifndef __AROS__ +LIBSTUB(CodesetsSupportedA, STRPTR*, REG(a0, struct TagItem *attrs)) +{ + #ifdef __MORPHOS__ + return CodesetsSupportedA((struct TagItem *)REG_A0); + #else + return CodesetsSupportedA(attrs); + #endif +} +#endif + +#ifdef __amigaos4__ +LIBSTUBVA(CodesetsSupported, STRPTR*, ...) +{ + STRPTR* res; + VA_LIST args; + + VA_START(args, self); + res = CodesetsSupportedA(VA_ARG(args, struct TagItem *)); + VA_END(args); + + return res; +} +#endif + +/// +/// CodesetsFreeA() +#ifdef __AROS__ +AROS_LH2(void, CodesetsFreeA, + AROS_LHA(APTR, obj, A0), + AROS_LHA(struct TagItem *, attrs, A1), + struct LibraryHeader *, library, 14, Codesets +) +{ + AROS_LIBFUNC_INIT +#else +void LIBFUNC +CodesetsFreeA(REG(a0, APTR obj), + REG(a1, UNUSED struct TagItem *attrs)) +{ +#endif + ENTER(); + + if(obj) + freeArbitrateVecPooled(obj); + + LEAVE(); +#ifdef __AROS__ + AROS_LIBFUNC_EXIT +#endif +} + +#ifndef __AROS__ +LIBSTUB(CodesetsFreeA, void, REG(a0, APTR obj), REG(a1, struct TagItem *attrs)) +{ + #ifdef __MORPHOS__ + return CodesetsFreeA((APTR)REG_A0,(struct TagItem *)REG_A1); + #else + return CodesetsFreeA(obj, attrs); + #endif +} +#endif + +#ifdef __amigaos4__ +LIBSTUBVA(CodesetsFree, void, REG(a0, APTR obj), ...) +{ + VA_LIST args; + + VA_START(args, obj); + CodesetsFreeA(obj, VA_ARG(args, struct TagItem *)); + VA_END(args); +} +#endif + +/// +/// CodesetsSetDefaultA() +#ifdef __AROS__ +AROS_LH2(struct codeset *, CodesetsSetDefaultA, + AROS_LHA(STRPTR, name, A0), + AROS_LHA(struct TagItem *, attrs, A1), + struct LibraryHeader *, library, 13, Codesets +) +{ + AROS_LIBFUNC_INIT +#else +struct codeset *LIBFUNC +CodesetsSetDefaultA(REG(a0, STRPTR name), + REG(a1, struct TagItem *attrs)) +{ +#endif + struct codeset *codeset; + + ENTER(); + + ObtainSemaphoreShared(&CodesetsBase->libSem); + + if((codeset = codesetsFind(&CodesetsBase->codesets,name))) + { + ULONG flags; + + flags = GVF_SAVE_VAR | (GetTagData(CSA_Save,FALSE,attrs) ? GVF_GLOBAL_ONLY : 0); + + SetVar("codeset_default",codeset->name,strlen(codeset->name),flags); + } + + ReleaseSemaphore(&CodesetsBase->libSem); + + RETURN(codeset); + return codeset; +#ifdef __AROS__ + AROS_LIBFUNC_EXIT +#endif +} + +#ifndef __AROS__ +LIBSTUB(CodesetsSetDefaultA, struct codeset *, REG(a0, STRPTR name), REG(a1, struct TagItem *attrs)) +{ + #ifdef __MORPHOS__ + return CodesetsSetDefaultA((STRPTR)REG_A0,(struct TagItem *)REG_A1); + #else + return CodesetsSetDefaultA(name, attrs); + #endif +} +#endif + +#ifdef __amigaos4__ +LIBSTUBVA(CodesetsSetDefault, struct codeset *, REG(a0, STRPTR name), ...) +{ + struct codeset *cs; + VA_LIST args; + + VA_START(args, name); + cs = CodesetsSetDefaultA(name, VA_ARG(args, struct TagItem *)); + VA_END(args); + + return cs; +} +#endif + +/// +/// CodesetsFindA() +#ifdef __AROS__ +AROS_LH2(struct codeset *, CodesetsFindA, + AROS_LHA(STRPTR, name, A0), + AROS_LHA(struct TagItem *, attrs, A1), + struct LibraryHeader *, library, 16, Codesets +) +{ + AROS_LIBFUNC_INIT +#else +struct codeset *LIBFUNC +CodesetsFindA(REG(a0, STRPTR name), REG(a1, struct TagItem *attrs)) +{ +#endif + struct codeset *codeset = NULL; + + ENTER(); + + ObtainSemaphoreShared(&CodesetsBase->libSem); + + // if no name pointer was supplied we have to return + // the default codeset only. + if(name != NULL) + { + // we first walk through our internal list and check if we + // can find the requested codeset + codeset = codesetsFind(&CodesetsBase->codesets, name); + + if(codeset == NULL && attrs != NULL) + { + struct TagItem *tstate = attrs; + struct TagItem *tag; + + // now we walk through our taglist and check if the user + // supplied + while((tag = NextTagItem(&tstate))) + { + if(tag->ti_Tag == CSA_CodesetList && tag->ti_Data != 0) + { + struct codesetList *csList = (struct codesetList *)tag->ti_Data; + + if((codeset = codesetsFind(csList, name)) != NULL) + break; + } + } + } + } + + // check if we found something or not. + if(codeset == NULL && (attrs == NULL || GetTagData(CSA_FallbackToDefault, TRUE, attrs))) + codeset = defaultCodeset(FALSE); + + ReleaseSemaphore(&CodesetsBase->libSem); + + RETURN(codeset); + return codeset; +#ifdef __AROS__ + AROS_LIBFUNC_EXIT +#endif +} + +#ifndef __AROS__ +LIBSTUB(CodesetsFindA, struct codeset *, REG(a0, STRPTR name), REG(a1, struct TagItem *attrs)) +{ + #ifdef __MORPHOS__ + return CodesetsFindA((STRPTR)REG_A0,(struct TagItem *)REG_A1); + #else + return CodesetsFindA(name, attrs); + #endif +} +#endif + +#ifdef __amigaos4__ +LIBSTUBVA(CodesetsFind, struct codeset *, REG(a0, STRPTR name), ...) +{ + struct codeset *cs; + VA_LIST args; + + VA_START(args, name); + cs = CodesetsFindA(name, VA_ARG(args, struct TagItem *)); + VA_END(args); + + return cs; +} +#endif +/// +/// CodesetsFindBestA() +#ifdef __AROS__ +AROS_LH1(struct codeset *, CodesetsFindBestA, + AROS_LHA(struct TagItem *, attrs, A0), + struct LibraryHeader *, library, 17, Codesets +) +{ + AROS_LIBFUNC_INIT +#else +struct codeset *LIBFUNC +CodesetsFindBestA(REG(a0, struct TagItem *attrs)) +{ +#endif + struct codeset *codeset = NULL; + + ENTER(); + + ObtainSemaphoreShared(&CodesetsBase->libSem); + + if(attrs) + { + char *text = (char *)GetTagData(CSA_Source, 0, attrs); + ULONG text_len = GetTagData(CSA_SourceLen, text != NULL ? strlen(text) : 0, attrs); + + if(text != NULL && text_len > 0) + { + int numErrors = 0; + ULONG csFamily = GetTagData(CSA_CodesetFamily, CSV_CodesetFamily_Latin, attrs); + int *error_ptr = (int *)GetTagData(CSA_ErrPtr, 0, attrs); + BOOL defaultFallBack = GetTagData(CSA_FallbackToDefault, FALSE, attrs); + + codeset = codesetsFindBest(attrs, csFamily, text, text_len, &numErrors); + + if(error_ptr != NULL) + *error_ptr = numErrors; + + // if we still haven't got the codeset we fallback to the default + if(codeset == NULL && defaultFallBack == TRUE) + codeset = defaultCodeset(FALSE); + } + } + + ReleaseSemaphore(&CodesetsBase->libSem); + + RETURN(codeset); + return codeset; +#ifdef __AROS__ + AROS_LIBFUNC_EXIT +#endif +} + +#ifndef __AROS__ +LIBSTUB(CodesetsFindBestA, struct codeset *, REG(a0, struct TagItem *attrs)) +{ + #ifdef __MORPHOS__ + return CodesetsFindBestA((struct TagItem *)REG_A0); + #else + return CodesetsFindBestA(attrs); + #endif +} +#endif + +#ifdef __amigaos4__ +LIBSTUBVA(CodesetsFindBest, struct codeset *, ...) +{ + struct codeset *cs; + VA_LIST args; + + VA_START(args, self); + cs = CodesetsFindBestA(VA_ARG(args, struct TagItem *)); + VA_END(args); + + return cs; +} +#endif +/// +/// CodesetsUTF8Len() +// Returns the number of characters a utf8 string has. This is not +// identically with the size of memory is required to hold the string. +#ifdef __AROS__ +AROS_LH1(ULONG, CodesetsUTF8Len, + AROS_LHA(const UTF8 *, str, A0), + struct LibraryHeader *, library, 18, Codesets +) +{ + AROS_LIBFUNC_INIT +#else +ULONG LIBFUNC +CodesetsUTF8Len(REG(a0, UTF8 *str)) +{ +#endif + int len; + unsigned char c; + + ENTER(); + + if(!str) + return 0; + + len = 0; + + while((c = *str++)) + { + len++; + str += trailingBytesForUTF8[c]; + } + + RETURN((ULONG)len); + return (ULONG)len; +#ifdef __AROS__ + AROS_LIBFUNC_EXIT +#endif +} + +#ifndef __AROS__ +LIBSTUB(CodesetsUTF8Len, ULONG, REG(a0, UTF8* str)) +{ + #ifdef __MORPHOS__ + return CodesetsUTF8Len((UTF8 *)REG_A0); + #else + return CodesetsUTF8Len(str); + #endif +} +#endif + +/// +/// CodesetsStrLenA() +#ifdef __AROS__ +AROS_LH2(ULONG, CodesetsStrLenA, + AROS_LHA(STRPTR, str, A0), + AROS_LHA(struct TagItem *, attrs, A1), + struct LibraryHeader *, library, 23, Codesets +) +{ + AROS_LIBFUNC_INIT +#else +ULONG LIBFUNC +CodesetsStrLenA(REG(a0, STRPTR str), + REG(a1, struct TagItem *attrs)) +{ +#endif + struct codeset *codeset; + int len, res; + STRPTR src; + UBYTE c; + + ENTER(); + + if(!str) + return 0; + + if(!(codeset = (struct codeset *)GetTagData(CSA_SourceCodeset, 0, attrs))) + codeset = defaultCodeset(TRUE); + + len = GetTagData(CSA_SourceLen, strlen(str), attrs); + + src = str; + res = 0; + + while(((c = *src++) && (len--))) + res += codeset->table[c].utf8[0]; + + RETURN((ULONG)res); + return (ULONG)res; +#ifdef __AROS__ + AROS_LIBFUNC_EXIT +#endif +} + +#ifndef __AROS__ +LIBSTUB(CodesetsStrLenA, ULONG, REG(a0, STRPTR str), + REG(a1, struct TagItem *attrs)) +{ + #ifdef __MORPHOS__ + return CodesetsStrLenA((STRPTR)REG_A0,(struct TagItem *)REG_A1); + #else + return CodesetsStrLenA(str, attrs); + #endif +} +#endif + +#ifdef __amigaos4__ +LIBSTUBVA(CodesetsStrLen, ULONG, REG(a0, STRPTR str), ...) +{ + ULONG res; + VA_LIST args; + + VA_START(args, str); + res = CodesetsStrLenA(str, VA_ARG(args, struct TagItem *)); + VA_END(args); + + return res; +} +#endif +/// +/// CodesetsUTF8ToStrA() +// Converts an UTF8 string to a given charset. Return the number of bytes +// written to dest excluding the NULL byte (which is always ensured by this +// function; it means a NULL str will produce "" as dest; anyway you should +// check NULL str to not waste your time!). +#ifdef __AROS__ +AROS_LH1(STRPTR, CodesetsUTF8ToStrA, + AROS_LHA(struct TagItem *, attrs, A0), + struct LibraryHeader *, library, 19, Codesets +) +{ + AROS_LIBFUNC_INIT +#else +STRPTR LIBFUNC +CodesetsUTF8ToStrA(REG(a0, struct TagItem *attrs)) +{ +#endif + UTF8 *src; + ULONG srcLen; + ULONG *destLenPtr; + ULONG n = 0; + STRPTR dest = NULL; + + ENTER(); + + if((src = (UTF8 *)GetTagData(CSA_Source, 0, attrs)) && + (srcLen = GetTagData(CSA_SourceLen, src != NULL ? strlen((char *)src) : 0, attrs)) > 0) + { + struct convertMsg msg; + struct codeset *codeset; + struct Hook *hook; + char buf[256]; + STRPTR destIter = NULL; + STRPTR b = NULL; + ULONG destLen; + int i = 0; + unsigned char *s = src; + unsigned char *e = (src+srcLen); + int numConvErrors = 0; + int *numConvErrorsPtr; + + // get some more optional attributes + hook = (struct Hook *)GetTagData(CSA_DestHook, 0, attrs); + destLen = GetTagData(CSA_DestLen, 0, attrs); + numConvErrorsPtr = (int *)GetTagData(CSA_ErrPtr, 0, attrs); + + // first we make sure we allocate enough memory + // for our destination buffer + if(hook) + { + if(destLen < 16 || destLen > sizeof(buf)) + destLen = sizeof(buf); + + msg.state = CSV_Translating; + b = buf; + i = 0; + } + else + { + // in case the user wants us to dynamically generate the + // destination buffer ew do it right now + if(!(dest = (STRPTR)GetTagData(CSA_Dest, 0, attrs)) || + GetTagData(CSA_AllocIfNeeded, TRUE, attrs)) + { + ULONG len = 0; + + // calculate the destLen + while(s < e) + { + unsigned char c = *s++; + len++; + s += trailingBytesForUTF8[c]; + } + + if(!dest || (destLen < len+1)) + { + APTR pool; + + if((pool = (APTR)GetTagData(CSA_Pool, 0, attrs))) + { + struct SignalSemaphore *sem; + + if((sem = (struct SignalSemaphore *)GetTagData(CSA_PoolSem, 0, attrs))) + ObtainSemaphore(sem); + + // allocate the destination buffer + dest = allocVecPooled(pool, len+1); + + if(sem) + ReleaseSemaphore(sem); + } + else + dest = allocArbitrateVecPooled(len+1); + + destLen = len+1; + } + + if(!dest) + return NULL; + } + + destIter = dest; + } + + // get the destination codeset pointer + if(!(codeset = (struct codeset *)GetTagData(CSA_DestCodeset, 0, attrs))) + codeset = defaultCodeset(TRUE); + + // now we convert the src string to the + // destination buffer. + for(s=src;;n++) + { + if(!hook && n >= destLen-1) + break; + + // convert until we reach the end of the + // source buffer. + if(s < e) + { + unsigned char c = *s; + unsigned char d; + + if(c > 127) + { + struct single_convert *f; + int lenAdd = trailingBytesForUTF8[c]; + int lenStr = lenAdd+1; + + BIN_SEARCH(codeset->table_sorted, 0, 255, strncmp((char *)s, (char *)codeset->table_sorted[m].utf8+1, lenStr), f); + + if(f) + d = f->code; + else + { + d = '?'; + numConvErrors++; + } + + s += lenAdd; + } + else + d = c; + + if(hook) + { + *b++ = d; + i++; + + if(i%(destLen-1)==0) + { + *b = 0; + msg.len = i; + CallHookPkt(hook, &msg, buf); + + b = buf; + *b = 0; + i = 0; + } + } + else + *destIter++ = d; + + s++; + } + else + break; + } + + if(hook) + { + msg.state = CSV_End; + msg.len = i; + *b = 0; + CallHookPkt(hook,&msg,buf); + } + else + *destIter = 0; + + // let us write the number of conversion errors + // to the proper variable pointer, if wanted + if(numConvErrorsPtr != NULL) + *numConvErrorsPtr = numConvErrors; + } + + // put the final length of our destination buffer + // into the destLenPtr + if((destLenPtr = (ULONG *)GetTagData(CSA_DestLenPtr, 0, attrs))) + *destLenPtr = n; + + RETURN(dest); + return dest; +#ifdef __AROS__ + AROS_LIBFUNC_EXIT +#endif +} + +#ifndef __AROS__ +LIBSTUB(CodesetsUTF8ToStrA, STRPTR, REG(a0, struct TagItem *attrs)) +{ + #ifdef __MORPHOS__ + return CodesetsUTF8ToStrA((struct TagItem *)REG_A0); + #else + return CodesetsUTF8ToStrA(attrs); + #endif +} +#endif + +#ifdef __amigaos4__ +LIBSTUBVA(CodesetsUTF8ToStr, STRPTR, ...) +{ + STRPTR res; + VA_LIST args; + + VA_START(args, self); + res = CodesetsUTF8ToStrA(VA_ARG(args, struct TagItem *)); + VA_END(args); + + return res; +} +#endif + +/// +/// CodesetsUTF8CreateA() +// Converts a string and a charset to an UTF8. Returns the UTF8. +// If a destination hook is supplied always return 0. +// If from is NULL, it returns NULL and doesn't call the hook. +#ifdef __AROS__ +AROS_LH1(UTF8 *, CodesetsUTF8CreateA, + AROS_LHA(struct TagItem *, attrs, A0), + struct LibraryHeader *, library, 20, Codesets +) +{ + AROS_LIBFUNC_INIT +#else +UTF8 *LIBFUNC +CodesetsUTF8CreateA(REG(a0, struct TagItem *attrs)) +{ +#endif + UTF8 *from; + UTF8 *dest; + ULONG fromLen, *destLenPtr; + ULONG n; + + ENTER(); + + dest = NULL; + n = 0; + + from = (UTF8*)GetTagData(CSA_Source, 0, attrs); + fromLen = GetTagData(CSA_SourceLen, from != NULL ? strlen((char *)from) : 0, attrs); + + if(from && fromLen) + { + struct convertMsg msg; + struct codeset *codeset; + struct Hook *hook; + ULONG destLen; + int i = 0; + UBYTE buf[256]; + UBYTE *src, *destPtr = NULL, *b = NULL, c; + + if(!(codeset = (struct codeset *)GetTagData(CSA_SourceCodeset, 0, attrs))) + codeset = defaultCodeset(TRUE); + + hook = (struct Hook *)GetTagData(CSA_DestHook, 0, attrs); + destLen = GetTagData(CSA_DestLen,0,attrs); + + if(hook) + { + if(destLen<16 || destLen>sizeof(buf)) + destLen = sizeof(buf); + + msg.state = CSV_Translating; + b = buf; + i = 0; + } + else + { + if(!(dest = (UTF8*)GetTagData(CSA_Dest, 0, attrs)) || + GetTagData(CSA_AllocIfNeeded,TRUE,attrs)) + { + ULONG len, flen; + + flen = fromLen; + len = 0; + src = from; + + while(((c = *src++) && (flen--))) + len += codeset->table[c].utf8[0]; + + if(!dest || (destLentable[c].utf8[1]; (c = *utf8_seq); utf8_seq++) + { + if(!hook) + { + if(n>=destLen) + break; + } + + if(hook) + { + *b++ = c; + i++; + + if(i%(destLen-1)==0) + { + *b = 0; + msg.len = i; + CallHookPkt(hook,&msg,buf); + + b = buf; + *b = 0; + i = 0; + } + } + else + { + *destPtr++ = c; + } + + n++; + } + } + + if(hook) + { + msg.state = CSV_End; + msg.len = i; + *b = 0; + CallHookPkt(hook,&msg,buf); + } + else + { + *destPtr = 0; + } + } + + if((destLenPtr = (ULONG *)GetTagData(CSA_DestLenPtr, 0, attrs))) + *destLenPtr = n; + + RETURN(dest); + return dest; +#ifdef __AROS__ + AROS_LIBFUNC_EXIT +#endif +} + +#ifndef __AROS__ +LIBSTUB(CodesetsUTF8CreateA, UTF8*, REG(a0, struct TagItem *attrs)) +{ + #ifdef __MORPHOS__ + return CodesetsUTF8CreateA((struct TagItem *)REG_A0); + #else + return CodesetsUTF8CreateA(attrs); + #endif +} +#endif + +#ifdef __amigaos4__ +LIBSTUBVA(CodesetsUTF8Create, UTF8*, ...) +{ + UTF8 *res; + VA_LIST args; + + VA_START(args, self); + res = CodesetsUTF8CreateA(VA_ARG(args, struct TagItem *)); + VA_END(args); + + return res; +} +#endif + +/// +/// CodesetsIsValidUTF8() +#define GOOD_UCS(c) \ + ((c) >= 160 && ((c) & ~0x3ff) != 0xd800 && \ + (c) != 0xfeff && (c) != 0xfffe && (c) != 0xffff) + +#ifdef __AROS__ +AROS_LH1(BOOL, CodesetsIsValidUTF8, + AROS_LHA(STRPTR, s, A0), + struct LibraryHeader *, library, 24, Codesets +) +{ + AROS_LIBFUNC_INIT +#else +BOOL LIBFUNC +CodesetsIsValidUTF8(REG(a0, STRPTR s)) +{ +#endif + STRPTR t = s; + int n; + + ENTER(); + + while((n = parseUtf8(&t))) + { + if(!GOOD_UCS(n)) + { + RETURN(FALSE); + return FALSE; + } + } + + RETURN(TRUE); + return TRUE; +#ifdef __AROS__ + AROS_LIBFUNC_EXIT +#endif +} + +#ifndef __AROS__ +LIBSTUB(CodesetsIsValidUTF8, BOOL, REG(a0, STRPTR s)) +{ + #ifdef __MORPHOS__ + return CodesetsIsValidUTF8((STRPTR)REG_A0); + #else + return CodesetsIsValidUTF8(s); + #endif +} +#endif + +/// +/// CodesetsConvertStrA() +// Converts a given string from one source Codeset to a given destination +// codeset and returns the convert string +#ifdef __AROS__ +AROS_LH1(STRPTR, CodesetsConvertStrA, + AROS_LHA(struct TagItem *, attrs, A0), + struct LibraryHeader *, library, 26, Codesets +) +{ + AROS_LIBFUNC_INIT +#else +STRPTR LIBFUNC +CodesetsConvertStrA(REG(a0, struct TagItem *attrs)) +{ +#endif + STRPTR srcStr; + STRPTR dstStr = NULL; + ULONG srcLen; + ULONG dstLen = 0; + + ENTER(); + + // get the ptr to the src string we want to convert + // from the source codeset to the dest codeset. + srcStr = (STRPTR)GetTagData(CSA_Source, 0, attrs); + srcLen = GetTagData(CSA_SourceLen, srcStr != NULL ? strlen(srcStr) : 0, attrs); + + if(srcStr != NULL && srcLen > 0) + { + struct codeset *srcCodeset; + struct codeset *dstCodeset; + + // get the pointer to the codeset in which the src string is encoded + if(!(srcCodeset = (struct codeset *)GetTagData(CSA_SourceCodeset, 0, attrs))) + srcCodeset = defaultCodeset(TRUE); + + // get the pointer to the codeset in which the dst string should be encoded + if(!(dstCodeset = (struct codeset *)GetTagData(CSA_DestCodeset, 0, attrs))) + dstCodeset = defaultCodeset(TRUE); + + D(DBF_UTF, "srcCodeset: '%s' dstCodeset: '%s'", srcCodeset->name, dstCodeset->name); + + // check that the user didn't supplied the very same codeset + // or otherwise a conversion is not required. + if(srcCodeset != NULL && dstCodeset != NULL && srcCodeset != dstCodeset) + { + BOOL utf8Create = FALSE; + BOOL strCreate = FALSE; + UTF8 *utf8str; + ULONG utf8strLen = 0; + ULONG *destLenPtr; + + // if the source codeset is UTF-8 we don't have to use the UTF8Create() + // function and can directly call the UTF8ToStr() function + if(srcCodeset != CodesetsBase->utf8Codeset) + { + struct TagItem tags[] = { { CSA_SourceCodeset, (ULONG)srcCodeset }, + { CSA_Source, (ULONG)srcStr }, + { CSA_SourceLen, srcLen }, + { CSA_DestLenPtr, (ULONG)&utf8strLen }, + { TAG_DONE, 0 } }; + + utf8str = CodesetsUTF8CreateA((struct TagItem *)&tags[0]); + + utf8Create = TRUE; + } + else + { + utf8str = (UTF8 *)srcStr; + utf8strLen = srcLen; + } + + // in case the destination codeset is UTF-8 we don't have to actually + // use the UTF8ToStr() function and can immediately return our + // UTF8 string + if(utf8str && utf8strLen > 0 && dstCodeset != CodesetsBase->utf8Codeset) + { + struct TagItem tags[] = { { CSA_DestCodeset, (ULONG)dstCodeset }, + { CSA_Source, (ULONG)utf8str }, + { CSA_SourceLen, utf8strLen }, + { CSA_DestLenPtr, (ULONG)&dstLen }, + { TAG_DONE, 0 } }; + + dstStr = CodesetsUTF8ToStrA((struct TagItem *)&tags[0]); + + strCreate = TRUE; + } + else + { + dstStr = (STRPTR)utf8str; + dstLen = utf8strLen; + } + + D(DBF_UTF, "srcStr: %lx srcLen: %ld dstStr: %lx dstLen: %ld utf8create: %ld strCreate: %ld", srcStr, srcLen, + dstStr, dstLen, + utf8Create, + strCreate); + + // if everything was successfull we can go and finalize everything + if(dstStr != NULL && utf8str != NULL) + { + // as the conversion was a two way pass we have to either free the + // memory of the utf8 string or not + if(utf8Create && strCreate) + CodesetsFreeA(utf8str, NULL); + + // if the user wants to be informed abour the length + // of our destination string we store the length now in the supplied ptr. + if((destLenPtr = (ULONG *)GetTagData(CSA_DestLenPtr, 0, attrs))) + *destLenPtr = dstLen; + + D(DBF_UTF, "successfully converted string with len %ld", dstLen); + } + else + { + W(DBF_ALWAYS, "an error occurred while trying to convert a string"); + + // free all memory in case the conversion didn't work out + if(utf8Create && utf8str) + CodesetsFreeA(utf8str, NULL); + + if(strCreate && dstStr) + CodesetsFreeA(dstStr, NULL); + + dstStr = NULL; + } + } + } + + RETURN(dstStr); + return dstStr; +#ifdef __AROS__ + AROS_LIBFUNC_EXIT +#endif +} + +#ifndef __AROS__ +LIBSTUB(CodesetsConvertStrA, STRPTR, REG(a0, struct TagItem *attrs)) +{ + #ifdef __MORPHOS__ + return CodesetsConvertStrA((struct TagItem *)REG_A0); + #else + return CodesetsConvertStrA(attrs); + #endif +} +#endif + +#ifdef __amigaos4__ +LIBSTUBVA(CodesetsConvertStr, STRPTR, ...) +{ + STRPTR res; + VA_LIST args; + + VA_START(args, self); + res = CodesetsConvertStrA(VA_ARG(args, struct TagItem *)); + VA_END(args); + + return res; +} +#endif + +/// +/// CodesetsFreeVecPooledA() +#ifdef __AROS__ +AROS_LH3(void, CodesetsFreeVecPooledA, + AROS_LHA(APTR, pool, A0), + AROS_LHA(APTR, mem, A1), + AROS_LHA(struct TagItem *, attrs, A2), + struct LibraryHeader *, library, 25, Codesets +) +{ + AROS_LIBFUNC_INIT +#else +void LIBFUNC +CodesetsFreeVecPooledA(REG(a0, APTR pool), + REG(a1, APTR mem), + REG(a2, struct TagItem *attrs)) +{ +#endif + ENTER(); + + if(pool && mem) + { + struct SignalSemaphore *sem; + + if((sem = (struct SignalSemaphore *)GetTagData(CSA_PoolSem, 0, attrs))) + ObtainSemaphore(sem); + + freeVecPooled(pool,mem); + + if(sem) + ReleaseSemaphore(sem); + } + + LEAVE(); +#ifdef __AROS__ + AROS_LIBFUNC_EXIT +#endif +} + +#ifndef __AROS__ +LIBSTUB(CodesetsFreeVecPooledA, void, REG(a0, APTR pool), + REG(a1, APTR mem), + REG(a2, struct TagItem *attrs)) +{ + #ifdef __MORPHOS__ + return CodesetsFreeVecPooledA((APTR)REG_A0,(APTR)REG_A1,(struct TagItem *)REG_A2); + #else + return CodesetsFreeVecPooledA(pool, mem, attrs); + #endif +} +#endif + +#ifdef __amigaos4__ +LIBSTUBVA(CodesetsFreeVecPooled, void, REG(a0, APTR pool), + REG(a1, APTR mem), ...) +{ + VA_LIST args; + + VA_START(args, mem); + CodesetsFreeVecPooledA(pool, mem, VA_ARG(args, struct TagItem *)); + VA_END(args); +} +#endif +/// +/// CodesetsListCreateA() +#ifdef __AROS__ +AROS_LH1(struct codesetList *, CodesetsListCreateA, + AROS_LHA(struct TagItem *, attrs, A0), + struct LibraryHeader *, library, 27, Codesets +) +{ + AROS_LIBFUNC_INIT +#else +struct codesetList *LIBFUNC +CodesetsListCreateA(REG(a0, struct TagItem *attrs)) +{ +#endif + struct codesetList *csList = NULL; + + ENTER(); + + ObtainSemaphore(&CodesetsBase->poolSem); + + // no matter what, we create a codesets list we will return to the user + if((csList = allocVecPooled(CodesetsBase->pool, sizeof(struct codesetList)))) + { + BOOL scanProgDir = TRUE; + struct TagItem *tstate = attrs; + struct TagItem *tag; + + // initialize the new private codeset list and put it into a separate list + NewList((struct List *)csList); + + // first we get the path of the directory from which we go + // and scan for charset tables from + while((tag = NextTagItem(&tstate))) + { + switch(tag->ti_Tag) + { + case CSA_CodesetDir: + { + codesetsScanDir(csList, (STRPTR)tag->ti_Data); + + scanProgDir = FALSE; + } + break; + + case CSA_CodesetFile: + { + codesetsReadTable(csList, (STRPTR)tag->ti_Data); + + scanProgDir = FALSE; + } + break; + + case CSA_SourceCodeset: + { + struct codeset *cs = (struct codeset *)tag->ti_Data; + + AddTail((struct List *)csList, (struct Node *)&cs->node); + + scanProgDir = FALSE; + } + break; + } + } + + // in case the user also wants us to scan PROGDIR: + // we do so + if(scanProgDir == TRUE) + codesetsScanDir(csList, "PROGDIR:Charsets"); + } + + ReleaseSemaphore(&CodesetsBase->poolSem); + + RETURN(csList); + return csList; +#ifdef __AROS__ + AROS_LIBFUNC_EXIT +#endif +} + +#ifndef __AROS__ +LIBSTUB(CodesetsListCreateA, struct codesetList *, REG(a0, struct TagItem *attrs)) +{ + #ifdef __MORPHOS__ + return CodesetsListCreateA((struct TagItem *)REG_A0); + #else + return CodesetsListCreateA(attrs); + #endif +} +#endif + +#ifdef __amigaos4__ +LIBSTUBVA(CodesetsListCreate, struct codesetList *, ...) +{ + struct codesetList *res; + VA_LIST args; + + VA_START(args, self); + res = CodesetsListCreateA(VA_ARG(args, struct TagItem *)); + VA_END(args); + + return res; +} +#endif + +/// +/// CodesetsListDeleteA() +#ifdef __AROS__ +AROS_LH1(BOOL, CodesetsListDeleteA, + AROS_LHA(struct TagItem *, attrs, A0), + struct LibraryHeader *, library, 28, Codesets +) +{ + AROS_LIBFUNC_INIT +#else +BOOL LIBFUNC +CodesetsListDeleteA(REG(a0, struct TagItem *attrs)) +{ +#endif + BOOL result = FALSE; + ENTER(); + + ObtainSemaphore(&CodesetsBase->poolSem); + + if(attrs != NULL) + { + BOOL freeCodesets; + struct TagItem *tstate = attrs; + struct TagItem *tag; + + // check if the caller wants us also to free the codesets + freeCodesets = (BOOL)GetTagData(CSA_FreeCodesets, TRUE, attrs); + + // now we iterate through or tagItems and see what the + // user wants to remove from the list + while((tag = NextTagItem(&tstate))) + { + switch(tag->ti_Tag) + { + case CSA_CodesetList: + { + struct codesetList *csList = (struct codesetList *)tag->ti_Data; + + if(csList) + { + // cleanup the codesets within the list + if(freeCodesets) + codesetsCleanup(csList); + + // then free the list itself + freeArbitrateVecPooled(csList); + + result = TRUE; + } + } + } + } + } + + ReleaseSemaphore(&CodesetsBase->poolSem); + + RETURN(result); + return result; +#ifdef __AROS__ + AROS_LIBFUNC_EXIT +#endif +} + +#ifndef __AROS__ +LIBSTUB(CodesetsListDeleteA, BOOL, REG(a0, struct TagItem *attrs)) +{ + #ifdef __MORPHOS__ + return CodesetsListDeleteA((struct TagItem *)REG_A0); + #else + return CodesetsListDeleteA(attrs); + #endif +} +#endif + +#ifdef __amigaos4__ +LIBSTUBVA(CodesetsListDelete, BOOL, ...) +{ + BOOL result; + VA_LIST args; + + VA_START(args, self); + result = CodesetsListDeleteA(VA_ARG(args, struct TagItem *)); + VA_END(args); + + return result; +} +#endif + +/// +/// CodesetsListAddA() +#ifdef __AROS__ +AROS_LH2(BOOL, CodesetsListAddA, + AROS_LHA(struct codesetList *, csList, A0), + AROS_LHA(struct TagItem *, attrs, A1), + struct LibraryHeader *, library, 29, Codesets +) +{ + AROS_LIBFUNC_INIT +#else +BOOL LIBFUNC +CodesetsListAddA(REG(a0, struct codesetList *csList), + REG(a1, struct TagItem *attrs)) +{ +#endif + BOOL result = FALSE; + ENTER(); + + ObtainSemaphore(&CodesetsBase->poolSem); + + if(csList != NULL && attrs != NULL) + { + struct TagItem *tstate = attrs; + struct TagItem *tag; + + // now we iterate through or tagItems and see if the user + // wants to scan a whole directory or just adds a file. + while((tag = NextTagItem(&tstate))) + { + switch(tag->ti_Tag) + { + case CSA_CodesetDir: + { + codesetsScanDir(csList, (STRPTR)tag->ti_Data); + result = TRUE; + } + break; + + case CSA_CodesetFile: + { + codesetsReadTable(csList, (STRPTR)tag->ti_Data); + result = TRUE; + } + break; + + case CSA_SourceCodeset: + { + struct codeset *cs = (struct codeset *)tag->ti_Data; + + AddTail((struct List *)csList, (struct Node *)&cs->node); + result = TRUE; + } + break; + } + } + } + + ReleaseSemaphore(&CodesetsBase->poolSem); + + RETURN(result); + return result; +#ifdef __AROS__ + AROS_LIBFUNC_EXIT +#endif +} + +#ifndef __AROS__ +LIBSTUB(CodesetsListAddA, BOOL, REG(a0, struct codesetList *csList), REG(a1, struct TagItem *attrs)) +{ + #ifdef __MORPHOS__ + return CodesetsListAddA((struct codesetList *)REG_A0, (struct TagItem *)REG_A1); + #else + return CodesetsListAddA(csList, attrs); + #endif +} +#endif + +#ifdef __amigaos4__ +LIBSTUBVA(CodesetsListAdd, BOOL, struct codesetList *csList, ...) +{ + BOOL result; + VA_LIST args; + + VA_START(args, csList); + result = CodesetsListAddA(csList, VA_ARG(args, struct TagItem *)); + VA_END(args); + + return result; +} +#endif + +/// +/// CodesetsListRemoveA() +#ifdef __AROS__ +AROS_LH1(BOOL, CodesetsListRemoveA, + AROS_LHA(struct TagItem *, attrs, A0), + struct LibraryHeader *, library, 30, Codesets +) +{ + AROS_LIBFUNC_INIT +#else +BOOL LIBFUNC +CodesetsListRemoveA(REG(a0, struct TagItem *attrs)) +{ +#endif + BOOL result = FALSE; + ENTER(); + + ObtainSemaphore(&CodesetsBase->poolSem); + + if(attrs != NULL) + { + BOOL freeCodesets; + struct TagItem *tstate = attrs; + struct TagItem *tag; + + // check if the caller wants us also to free the codesets + freeCodesets = (BOOL)GetTagData(CSA_FreeCodesets, TRUE, attrs); + + // now we iterate through or tagItems and see what the + // user wants to remove from the list + while((tag = NextTagItem(&tstate))) + { + switch(tag->ti_Tag) + { + case CSA_SourceCodeset: + { + struct codeset *cs = (struct codeset *)tag->ti_Data; + + if(cs) + { + struct MinNode *mstate = &cs->node; + + // before we actually remove the node from its list, we + // have to make sure it isn't part of our internal codesets list + while(mstate->mln_Succ) + mstate = mstate->mln_Succ; + + if(mstate != CodesetsBase->codesets.list.mlh_Tail) + { + Remove((struct Node *)&cs->node); + + // free all codesets data if requested. + if(freeCodesets == TRUE) + { + if(cs->name) freeArbitrateVecPooled(cs->name); + if(cs->alt_name) freeArbitrateVecPooled(cs->alt_name); + if(cs->characterization) freeArbitrateVecPooled(cs->characterization); + + freeArbitrateVecPooled(cs); + } + + result = TRUE; + } + else + W(DBF_ALWAYS, "user tried to remove an internal codesets!"); + } + } + break; + } + } + } + + ReleaseSemaphore(&CodesetsBase->poolSem); + + RETURN(result); + return result; +#ifdef __AROS__ + AROS_LIBFUNC_EXIT +#endif +} + +#ifndef __AROS__ +LIBSTUB(CodesetsListRemoveA, BOOL, REG(a0, struct TagItem *attrs)) +{ + #ifdef __MORPHOS__ + return CodesetsListRemoveA((struct TagItem *)REG_A0); + #else + return CodesetsListRemoveA(attrs); + #endif +} +#endif + +#ifdef __amigaos4__ +LIBSTUBVA(CodesetsListRemove, BOOL, ...) +{ + BOOL result; + VA_LIST args; + + VA_START(args, self); + result = CodesetsListRemoveA(VA_ARG(args, struct TagItem *)); + VA_END(args); + + return result; +} +#endif + +/// + +/**************************************************************************/ diff --git a/workbench/libs/codesetslib/src/codesets.conf b/workbench/libs/codesetslib/src/codesets.conf new file mode 100644 index 000000000..36ed4d685 --- /dev/null +++ b/workbench/libs/codesetslib/src/codesets.conf @@ -0,0 +1,62 @@ +##begin config +version 6.4 +date 29.07.2007 +copyright Copyright (c) 2005-2007 codesets.library Open Source Team +libbasetype struct LibraryHeader +##end config + +##begin cdef +#include + +struct codeset * CodesetsSetDefault(STRPTR name, Tag attrs, ...); +void CodesetsFree(APTR obj, Tag attrs, ...); +STRPTR * CodesetsSupported(Tag attrs, ...); +struct codeset * CodesetsFind(STRPTR name, Tag attrs, ...); +struct codeset * CodesetsFindBest(Tag attrs, ...); +STRPTR CodesetsUTF8ToStr(Tag attrs, ...); +UTF8 * CodesetsUTF8Create(Tag attrs, ...); +ULONG CodesetsEncodeB64(Tag attrs, ...); +ULONG CodesetsDecodeB64(Tag attrs, ...); +ULONG CodesetsStrLen(STRPTR str, Tag attrs, ...); +void CodesetsFreeVecPooled(APTR pool, APTR mem, Tag attrs, ...); +STRPTR CodesetsConvertStr(Tag attrs, ...); +struct codesetList * CodesetsListCreate(Tag attrs, ...); +BOOL CodesetsListDelete(Tag tag1, ...); +BOOL CodesetsListAdd(struct codesetList *codesetsList, Tag attrs, ...); +BOOL CodesetsListRemove(Tag tag1, ...); +##end cdef + +##begin cdefprivate +#include +#include +#include "base.h" +##end cdefprivate + +##begin functionlist +ULONG CodesetsConvertUTF32toUTF16(const UTF32 **sourceStart, const UTF32 *sourceEnd, UTF16 **targetStart, UTF16 *targetEnd, ULONG flags) (A0,A1,A2,A3,D0) +ULONG CodesetsConvertUTF16toUTF32(const UTF16 **sourceStart, const UTF16 *sourceEnd, UTF32 **targetStart, UTF32 *targetEnd, ULONG flags) (A0,A1,A2,A3,D0) +ULONG CodesetsConvertUTF16toUTF8(const UTF16 **sourceStart, const UTF16 *sourceEnd, UTF8 **targetStart, UTF8 *targetEnd, ULONG flags) (A0,A1,A2,A3,D0) +BOOL CodesetsIsLegalUTF8(const UTF8 *source, ULONG length) (A0,D0) +BOOL CodesetsIsLegalUTF8Sequence(const UTF8 *source, const UTF8 *sourceEnd) (A0,D1) +ULONG CodesetsConvertUTF8toUTF16(const UTF8 **sourceStart, const UTF8 *sourceEnd, UTF16 **targetStart, UTF16 *targetEnd, ULONG flags) (A0,A1,A2,A3,D0) +ULONG CodesetsConvertUTF32toUTF8(const UTF32 **sourceStart, const UTF32 *sourceEnd, UTF8 **targetStart, UTF8 *targetEnd, ULONG flags) (A0,A1,A2,A3,D0) +ULONG CodesetsConvertUTF8toUTF32(const UTF8 **sourceStart, const UTF8 *sourceEnd, UTF32 **targetStart, UTF32 *targetEnd, ULONG flags) (A0,A1,A2,A3,D0) +struct codeset * CodesetsSetDefaultA(STRPTR name, struct TagItem * attrs) (A0,A1) +void CodesetsFreeA(APTR obj, struct TagItem * attrs) (A0,A1) +STRPTR * CodesetsSupportedA(struct TagItem * attrs) (A0) +struct codeset * CodesetsFindA(STRPTR name, struct TagItem * attrs) (A0,A1) +struct codeset * CodesetsFindBestA(struct TagItem * attrs) (A0) +ULONG CodesetsUTF8Len(const UTF8 *str) (A0) +STRPTR CodesetsUTF8ToStrA(struct TagItem * attrs) (A0) +UTF8 * CodesetsUTF8CreateA(struct TagItem * attrs) (A0) +ULONG CodesetsEncodeB64A(struct TagItem * attrs) (A0) +ULONG CodesetsDecodeB64A(struct TagItem * attrs) (A0) +ULONG CodesetsStrLenA(STRPTR str, struct TagItem * attrs) (A0,A1) +BOOL CodesetsIsValidUTF8(STRPTR str) (A0) +void CodesetsFreeVecPooledA(APTR pool, APTR mem, struct TagItem *attrs) (A0,A1,A2) +STRPTR CodesetsConvertStrA(struct TagItem * attrs) (A0) +struct codesetList * CodesetsListCreateA(struct TagItem *attrs) (A0) +BOOL CodesetsListDeleteA(struct TagItem *attrs) (A0) +BOOL CodesetsListAddA(struct codesetList *codesetsList, struct TagItem *attrs) (A0,A1) +BOOL CodesetsListRemoveA(struct TagItem *attrs) (A0) +##end functionlist diff --git a/workbench/libs/codesetslib/src/codesets_table.h b/workbench/libs/codesetslib/src/codesets_table.h new file mode 100755 index 000000000..dbc535df8 --- /dev/null +++ b/workbench/libs/codesetslib/src/codesets_table.h @@ -0,0 +1,924 @@ +/*************************************************************************** + + codesets.library - Amiga shared library for handling different codesets + Copyright (C) 2001-2005 by Alfonso [alfie] Ranieri . + Copyright (C) 2005-2007 by codesets.library Open Source Team + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + codesets.library project: http://sourceforge.net/projects/codesetslib/ + + Most of the code included in this file was relicensed from GPL to LGPL + from the source code of SimpleMail (http://www.sf.net/projects/simplemail) + with full permissions by its authors. + + $Id$ + +***************************************************************************/ + +/* +** codesets_table.h +*/ + +/* This is the mapping from iso latin 8859-1 to the utf8 unicode format */ + +/* is not needed as table */ + +/* This is the mapping from iso latin 8859-2 to the ucs4 unicode format */ +static const unsigned short iso_8859_2_to_ucs4[] = /* starts at 0xa0 */ +{ + 0x00A0, 0x0104, 0x02D8, 0x0141, 0x00A4, 0x013D, 0x015A, 0x00A7, + 0x00A8, 0x0160, 0x015E, 0x0164, 0x0179, 0x00AD, 0x017D, 0x017B, + 0x00B0, 0x0105, 0x02DB, 0x0142, 0x00B4, 0x013E, 0x015B, 0x02C7, + 0x00B8, 0x0161, 0x015F, 0x0165, 0x017A, 0x02DD, 0x017E, 0x017C, + 0x0154, 0x00C1, 0x00C2, 0x0102, 0x00C4, 0x0139, 0x0106, 0x00C7, + 0x010C, 0x00C9, 0x0118, 0x00CB, 0x011A, 0x00CD, 0x00CE, 0x010E, + 0x0110, 0x0143, 0x0147, 0x00D3, 0x00D4, 0x0150, 0x00D6, 0x00D7, + 0x0158, 0x016E, 0x00DA, 0x0170, 0x00DC, 0x00DD, 0x0162, 0x00DF, + 0x0155, 0x00E1, 0x00E2, 0x0103, 0x00E4, 0x013A, 0x0107, 0x00E7, + 0x010D, 0x00E9, 0x0119, 0x00EB, 0x011B, 0x00ED, 0x00EE, 0x010F, + 0x0111, 0x0144, 0x0148, 0x00F3, 0x00F4, 0x0151, 0x00F6, 0x00F7, + 0x0159, 0x016F, 0x00FA, 0x0171, 0x00FC, 0x00FD, 0x0163, 0x02D9 +}; + +/* This is the mapping from iso latin 8859-3 to the ucs4 unicode format */ +static const unsigned short iso_8859_3_to_ucs4[] = /* starts at 0xa0 */ +{ + 0x00A0, 0x0104, 0x02D8, 0x0141, 0x00A4, 0x013D, 0x015A, 0x00A7, + 0x00A8, 0x0160, 0x015E, 0x0164, 0x0179, 0x00AD, 0x017D, 0x017B, + 0x00B0, 0x0105, 0x02DB, 0x0142, 0x00B4, 0x013E, 0x015B, 0x02C7, + 0x00B8, 0x0161, 0x015F, 0x0165, 0x017A, 0x02DD, 0x017E, 0x017C, + 0x0154, 0x00C1, 0x00C2, 0x0102, 0x00C4, 0x0139, 0x0106, 0x00C7, + 0x010C, 0x00C9, 0x0118, 0x00CB, 0x011A, 0x00CD, 0x00CE, 0x010E, + 0x0110, 0x0143, 0x0147, 0x00D3, 0x00D4, 0x0150, 0x00D6, 0x00D7, + 0x0158, 0x016E, 0x00DA, 0x0170, 0x00DC, 0x00DD, 0x0162, 0x00DF, + 0x0155, 0x00E1, 0x00E2, 0x0103, 0x00E4, 0x013A, 0x0107, 0x00E7, + 0x010D, 0x00E9, 0x0119, 0x00EB, 0x011B, 0x00ED, 0x00EE, 0x010F, + 0x0111, 0x0144, 0x0148, 0x00F3, 0x00F4, 0x0151, 0x00F6, 0x00F7, + 0x0159, 0x016F, 0x00FA, 0x0171, 0x00FC, 0x00FD, 0x0163, 0x02D9, +}; + +/* This is the mapping from iso latin 8859-4 to the ucs4 unicode format */ +static const unsigned short iso_8859_4_to_ucs4[] = /* starts at 0xa0 */ +{ + 0x00A0, 0x0104, 0x0138, 0x0156, 0x00A4, 0x0128, 0x013B, 0x00A7, + 0x00A8, 0x0160, 0x0112, 0x0122, 0x0166, 0x00AD, 0x017D, 0x00AF, + 0x00B0, 0x0105, 0x02DB, 0x0157, 0x00B4, 0x0129, 0x013C, 0x02C7, + 0x00B8, 0x0161, 0x0113, 0x0123, 0x0167, 0x014A, 0x017E, 0x014B, + 0x0100, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x012E, + 0x010C, 0x00C9, 0x0118, 0x00CB, 0x0116, 0x00CD, 0x00CE, 0x012A, + 0x0110, 0x0145, 0x014C, 0x0136, 0x00D4, 0x00D5, 0x00D6, 0x00D7, + 0x00D8, 0x0172, 0x00DA, 0x00DB, 0x00DC, 0x0168, 0x016A, 0x00DF, + 0x0101, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x012F, + 0x010D, 0x00E9, 0x0119, 0x00EB, 0x0117, 0x00ED, 0x00EE, 0x012B, + 0x0111, 0x0146, 0x014D, 0x0137, 0x00F4, 0x00F5, 0x00F6, 0x00F7, + 0x00F8, 0x0173, 0x00FA, 0x00FB, 0x00FC, 0x0169, 0x016B, 0x02D9 +}; + +/* This is the mapping from iso latin 8859-5 to the ucs4 unicode format */ +static const unsigned short iso_8859_5_to_ucs4[] = /* starts at 0xa0 */ +{ + 0x00A0, 0x0401, 0x0402, 0x0403, 0x0404, 0x0405, 0x0406, 0x0407, + 0x0408, 0x0409, 0x040A, 0x040B, 0x040C, 0x00AD, 0x040E, 0x040F, + 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, + 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F, + 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, + 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F, + 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, + 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F, + 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, + 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F, + 0x2116, 0x0451, 0x0452, 0x0453, 0x0454, 0x0455, 0x0456, 0x0457, + 0x0458, 0x0459, 0x045A, 0x045B, 0x045C, 0x00A7, 0x045E, 0x045F +}; + +/* This is the mapping from iso latin 8859-9 to the ucs4 unicode format */ +static const unsigned short iso_8859_9_to_ucs4[] = /* starts at 0xa0 */ +{ + 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, + 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF, + 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, + 0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF, + 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7, + 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF, + 0x011E, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7, + 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x0130, 0x015E, 0x00DF, + 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7, + 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF, + 0x011F, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7, + 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x0131, 0x015F, 0x00FF +}; + +/* This is the mapping from iso latin 8859-15 to the ucs4 unicode format */ +static const unsigned short iso_8859_15_to_ucs4[] = /* starts at 0xa0 */ +{ + 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x20AC, 0x00A5, 0x0160, 0x00A7, + 0x0161, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF, + 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x017D, 0x00B5, 0x00B6, 0x00B7, + 0x017E, 0x00B9, 0x00BA, 0x00BB, 0x0152, 0x0153, 0x0178, 0x00BF, + 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7, + 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF, + 0x00D0, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7, + 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x00DE, 0x00DF, + 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7, + 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF, + 0x00F0, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7, + 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE, 0x00FF, +}; + +/* This is the mapping from iso latin 8859-16 to the ucs4 unicode format */ +static const unsigned short iso_8859_16_to_ucs4[] = /* starts at 0xa0 */ +{ + 0x00A0, 0x0104, 0x0105, 0x0141, 0x20AC, 0x201E, 0x0160, 0x00A7, + 0x0161, 0x00A9, 0x0218, 0x00AB, 0x0179, 0x00AD, 0x017A, 0x017B, + 0x00B0, 0x00B1, 0x010C, 0x0142, 0x017D, 0x201D, 0x00B6, 0x00B7, + 0x017E, 0x010D, 0x0219, 0x00BB, 0x0152, 0x0153, 0x0178, 0x017C, + 0x00C0, 0x00C1, 0x00C2, 0x0102, 0x00C4, 0x0106, 0x00C6, 0x00C7, + 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF, + 0x0110, 0x0143, 0x00D2, 0x00D3, 0x00D4, 0x0150, 0x00D6, 0x015A, + 0x0170, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x0118, 0x021A, 0x00DF, + 0x00E0, 0x00E1, 0x00E2, 0x0103, 0x00E4, 0x0107, 0x00E6, 0x00E7, + 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF, + 0x0111, 0x0144, 0x00F2, 0x00F3, 0x00F4, 0x0151, 0x00F6, 0x015B, + 0x0171, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x0119, 0x021B, 0x00FF +}; + +/* This is the mapping from AmigaPL to the ucs4 unicode format */ +static const unsigned short amigapl_to_ucs4[] = /* starts at 0xa0 */ +{ + 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, + 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF, + 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, + 0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF, + 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7, + 0x00C8, 0x00C9, 0x0106, 0x0118, 0x00CC, 0x00CD, 0x0141, 0x0143, + 0x00D0, 0x00D1, 0x00D2, 0x00D3, 0x015A, 0x00D5, 0x00D6, 0x00D7, + 0x00D8, 0x00D9, 0x0179, 0x017B, 0x00DC, 0x00DD, 0x00DE, 0x00DF, + 0x00E0, 0x00E1, 0x0105, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7, + 0x00E8, 0x00E9, 0x0107, 0x0119, 0x00EC, 0x00ED, 0x0142, 0x0144, + 0x00F0, 0x00F1, 0x00F2, 0x00F3, 0x015B, 0x00F5, 0x00F6, 0x00F7, + 0x00F8, 0x00F9, 0x017A, 0x017C, 0x00FC, 0x00FD, 0x00FE, 0x00FF +}; + +static const unsigned short koi8r_to_ucs4[] = /* starts at 0x80 */ +{ + 0x2500, 0x2502, 0x250C, 0x2510, 0x2514, 0x2518, 0x251C, 0x2524, + 0x252C, 0x2534, 0x253C, 0x2580, 0x2584, 0x2588, 0x258C, 0x2590, + 0x2591, 0x2592, 0x2593, 0x2320, 0x25A0, 0x2219, 0x221A, 0x2248, + 0x2264, 0x2265, 0x00A0, 0x2321, 0x00B0, 0x00B2, 0x00B7, 0x00F7, + 0x2550, 0x2551, 0x2552, 0x0451, 0x2553, 0x2554, 0x2555, 0x2556, + 0x2557, 0x2558, 0x2559, 0x255A, 0x255B, 0x255C, 0x255D, 0x255E, + 0x255F, 0x2560, 0x2561, 0x0401, 0x2562, 0x2563, 0x2564, 0x2565, + 0x2566, 0x2567, 0x2568, 0x2569, 0x256A, 0x256B, 0x256C, 0x00A9, + 0x044E, 0x0430, 0x0431, 0x0446, 0x0434, 0x0435, 0x0444, 0x0433, + 0x0445, 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, + 0x043F, 0x044F, 0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432, + 0x044C, 0x044B, 0x0437, 0x0448, 0x044D, 0x0449, 0x0447, 0x044A, + 0x042E, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413, + 0x0425, 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, + 0x041F, 0x042F, 0x0420, 0x0421, 0x0422, 0x0423, 0x0416, 0x0412, + 0x042C, 0x042B, 0x0417, 0x0428, 0x042D, 0x0429, 0x0427, 0x042A +}; + +static const unsigned short amiga1251_to_ucs4[] = /* starts at 0xa0 */ +{ + 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x20AC, 0x00A5, 0x00A6, 0x00A7, + 0x0401, 0x00A9, 0x2116, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF, + 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, + 0x0451, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF, + 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, + 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F, + 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, + 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F, + 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, + 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F, + 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, + 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F +}; + + +/* The unicode to lower table */ +struct uniconv { + unsigned char from[4]; + unsigned char to[4]; +}; + +struct uniconv utf8_tolower_table[] = { + {{0xf0,0x90,0x90,0xa5,}, {0xf0,0x90,0x91,0x8d,}}, + {{0xf0,0x90,0x90,0xa4,}, {0xf0,0x90,0x91,0x8c,}}, + {{0xf0,0x90,0x90,0xa3,}, {0xf0,0x90,0x91,0x8b,}}, + {{0xf0,0x90,0x90,0xa2,}, {0xf0,0x90,0x91,0x8a,}}, + {{0xf0,0x90,0x90,0xa1,}, {0xf0,0x90,0x91,0x89,}}, + {{0xf0,0x90,0x90,0xa0,}, {0xf0,0x90,0x91,0x88,}}, + {{0xf0,0x90,0x90,0x9f,}, {0xf0,0x90,0x91,0x87,}}, + {{0xf0,0x90,0x90,0x9e,}, {0xf0,0x90,0x91,0x86,}}, + {{0xf0,0x90,0x90,0x9d,}, {0xf0,0x90,0x91,0x85,}}, + {{0xf0,0x90,0x90,0x9c,}, {0xf0,0x90,0x91,0x84,}}, + {{0xf0,0x90,0x90,0x9b,}, {0xf0,0x90,0x91,0x83,}}, + {{0xf0,0x90,0x90,0x9a,}, {0xf0,0x90,0x91,0x82,}}, + {{0xf0,0x90,0x90,0x99,}, {0xf0,0x90,0x91,0x81,}}, + {{0xf0,0x90,0x90,0x98,}, {0xf0,0x90,0x91,0x80,}}, + {{0xf0,0x90,0x90,0x97,}, {0xf0,0x90,0x90,0xbf,}}, + {{0xf0,0x90,0x90,0x96,}, {0xf0,0x90,0x90,0xbe,}}, + {{0xf0,0x90,0x90,0x95,}, {0xf0,0x90,0x90,0xbd,}}, + {{0xf0,0x90,0x90,0x94,}, {0xf0,0x90,0x90,0xbc,}}, + {{0xf0,0x90,0x90,0x93,}, {0xf0,0x90,0x90,0xbb,}}, + {{0xf0,0x90,0x90,0x92,}, {0xf0,0x90,0x90,0xba,}}, + {{0xf0,0x90,0x90,0x91,}, {0xf0,0x90,0x90,0xb9,}}, + {{0xf0,0x90,0x90,0x90,}, {0xf0,0x90,0x90,0xb8,}}, + {{0xf0,0x90,0x90,0x8f,}, {0xf0,0x90,0x90,0xb7,}}, + {{0xf0,0x90,0x90,0x8e,}, {0xf0,0x90,0x90,0xb6,}}, + {{0xf0,0x90,0x90,0x8d,}, {0xf0,0x90,0x90,0xb5,}}, + {{0xf0,0x90,0x90,0x8c,}, {0xf0,0x90,0x90,0xb4,}}, + {{0xf0,0x90,0x90,0x8b,}, {0xf0,0x90,0x90,0xb3,}}, + {{0xf0,0x90,0x90,0x8a,}, {0xf0,0x90,0x90,0xb2,}}, + {{0xf0,0x90,0x90,0x89,}, {0xf0,0x90,0x90,0xb1,}}, + {{0xf0,0x90,0x90,0x88,}, {0xf0,0x90,0x90,0xb0,}}, + {{0xf0,0x90,0x90,0x87,}, {0xf0,0x90,0x90,0xaf,}}, + {{0xf0,0x90,0x90,0x86,}, {0xf0,0x90,0x90,0xae,}}, + {{0xf0,0x90,0x90,0x85,}, {0xf0,0x90,0x90,0xad,}}, + {{0xf0,0x90,0x90,0x84,}, {0xf0,0x90,0x90,0xac,}}, + {{0xf0,0x90,0x90,0x83,}, {0xf0,0x90,0x90,0xab,}}, + {{0xf0,0x90,0x90,0x82,}, {0xf0,0x90,0x90,0xaa,}}, + {{0xf0,0x90,0x90,0x81,}, {0xf0,0x90,0x90,0xa9,}}, + {{0xf0,0x90,0x90,0x80,}, {0xf0,0x90,0x90,0xa8,}}, + {{0x00,0xef,0xbc,0xba,}, {0x00,0xef,0xbd,0x9a,}}, + {{0x00,0xef,0xbc,0xb9,}, {0x00,0xef,0xbd,0x99,}}, + {{0x00,0xef,0xbc,0xb8,}, {0x00,0xef,0xbd,0x98,}}, + {{0x00,0xef,0xbc,0xb7,}, {0x00,0xef,0xbd,0x97,}}, + {{0x00,0xef,0xbc,0xb6,}, {0x00,0xef,0xbd,0x96,}}, + {{0x00,0xef,0xbc,0xb5,}, {0x00,0xef,0xbd,0x95,}}, + {{0x00,0xef,0xbc,0xb4,}, {0x00,0xef,0xbd,0x94,}}, + {{0x00,0xef,0xbc,0xb3,}, {0x00,0xef,0xbd,0x93,}}, + {{0x00,0xef,0xbc,0xb2,}, {0x00,0xef,0xbd,0x92,}}, + {{0x00,0xef,0xbc,0xb1,}, {0x00,0xef,0xbd,0x91,}}, + {{0x00,0xef,0xbc,0xb0,}, {0x00,0xef,0xbd,0x90,}}, + {{0x00,0xef,0xbc,0xaf,}, {0x00,0xef,0xbd,0x8f,}}, + {{0x00,0xef,0xbc,0xae,}, {0x00,0xef,0xbd,0x8e,}}, + {{0x00,0xef,0xbc,0xad,}, {0x00,0xef,0xbd,0x8d,}}, + {{0x00,0xef,0xbc,0xac,}, {0x00,0xef,0xbd,0x8c,}}, + {{0x00,0xef,0xbc,0xab,}, {0x00,0xef,0xbd,0x8b,}}, + {{0x00,0xef,0xbc,0xaa,}, {0x00,0xef,0xbd,0x8a,}}, + {{0x00,0xef,0xbc,0xa9,}, {0x00,0xef,0xbd,0x89,}}, + {{0x00,0xef,0xbc,0xa8,}, {0x00,0xef,0xbd,0x88,}}, + {{0x00,0xef,0xbc,0xa7,}, {0x00,0xef,0xbd,0x87,}}, + {{0x00,0xef,0xbc,0xa6,}, {0x00,0xef,0xbd,0x86,}}, + {{0x00,0xef,0xbc,0xa5,}, {0x00,0xef,0xbd,0x85,}}, + {{0x00,0xef,0xbc,0xa4,}, {0x00,0xef,0xbd,0x84,}}, + {{0x00,0xef,0xbc,0xa3,}, {0x00,0xef,0xbd,0x83,}}, + {{0x00,0xef,0xbc,0xa2,}, {0x00,0xef,0xbd,0x82,}}, + {{0x00,0xef,0xbc,0xa1,}, {0x00,0xef,0xbd,0x81,}}, + {{0x00,0xe2,0x93,0x8f,}, {0x00,0xe2,0x93,0xa9,}}, + {{0x00,0xe2,0x93,0x8e,}, {0x00,0xe2,0x93,0xa8,}}, + {{0x00,0xe2,0x93,0x8d,}, {0x00,0xe2,0x93,0xa7,}}, + {{0x00,0xe2,0x93,0x8c,}, {0x00,0xe2,0x93,0xa6,}}, + {{0x00,0xe2,0x93,0x8b,}, {0x00,0xe2,0x93,0xa5,}}, + {{0x00,0xe2,0x93,0x8a,}, {0x00,0xe2,0x93,0xa4,}}, + {{0x00,0xe2,0x93,0x89,}, {0x00,0xe2,0x93,0xa3,}}, + {{0x00,0xe2,0x93,0x88,}, {0x00,0xe2,0x93,0xa2,}}, + {{0x00,0xe2,0x93,0x87,}, {0x00,0xe2,0x93,0xa1,}}, + {{0x00,0xe2,0x93,0x86,}, {0x00,0xe2,0x93,0xa0,}}, + {{0x00,0xe2,0x93,0x85,}, {0x00,0xe2,0x93,0x9f,}}, + {{0x00,0xe2,0x93,0x84,}, {0x00,0xe2,0x93,0x9e,}}, + {{0x00,0xe2,0x93,0x83,}, {0x00,0xe2,0x93,0x9d,}}, + {{0x00,0xe2,0x93,0x82,}, {0x00,0xe2,0x93,0x9c,}}, + {{0x00,0xe2,0x93,0x81,}, {0x00,0xe2,0x93,0x9b,}}, + {{0x00,0xe2,0x93,0x80,}, {0x00,0xe2,0x93,0x9a,}}, + {{0x00,0xe2,0x92,0xbf,}, {0x00,0xe2,0x93,0x99,}}, + {{0x00,0xe2,0x92,0xbe,}, {0x00,0xe2,0x93,0x98,}}, + {{0x00,0xe2,0x92,0xbd,}, {0x00,0xe2,0x93,0x97,}}, + {{0x00,0xe2,0x92,0xbc,}, {0x00,0xe2,0x93,0x96,}}, + {{0x00,0xe2,0x92,0xbb,}, {0x00,0xe2,0x93,0x95,}}, + {{0x00,0xe2,0x92,0xba,}, {0x00,0xe2,0x93,0x94,}}, + {{0x00,0xe2,0x92,0xb9,}, {0x00,0xe2,0x93,0x93,}}, + {{0x00,0xe2,0x92,0xb8,}, {0x00,0xe2,0x93,0x92,}}, + {{0x00,0xe2,0x92,0xb7,}, {0x00,0xe2,0x93,0x91,}}, + {{0x00,0xe2,0x92,0xb6,}, {0x00,0xe2,0x93,0x90,}}, + {{0x00,0xe2,0x85,0xaf,}, {0x00,0xe2,0x85,0xbf,}}, + {{0x00,0xe2,0x85,0xae,}, {0x00,0xe2,0x85,0xbe,}}, + {{0x00,0xe2,0x85,0xad,}, {0x00,0xe2,0x85,0xbd,}}, + {{0x00,0xe2,0x85,0xac,}, {0x00,0xe2,0x85,0xbc,}}, + {{0x00,0xe2,0x85,0xab,}, {0x00,0xe2,0x85,0xbb,}}, + {{0x00,0xe2,0x85,0xaa,}, {0x00,0xe2,0x85,0xba,}}, + {{0x00,0xe2,0x85,0xa9,}, {0x00,0xe2,0x85,0xb9,}}, + {{0x00,0xe2,0x85,0xa8,}, {0x00,0xe2,0x85,0xb8,}}, + {{0x00,0xe2,0x85,0xa7,}, {0x00,0xe2,0x85,0xb7,}}, + {{0x00,0xe2,0x85,0xa6,}, {0x00,0xe2,0x85,0xb6,}}, + {{0x00,0xe2,0x85,0xa5,}, {0x00,0xe2,0x85,0xb5,}}, + {{0x00,0xe2,0x85,0xa4,}, {0x00,0xe2,0x85,0xb4,}}, + {{0x00,0xe2,0x85,0xa3,}, {0x00,0xe2,0x85,0xb3,}}, + {{0x00,0xe2,0x85,0xa2,}, {0x00,0xe2,0x85,0xb2,}}, + {{0x00,0xe2,0x85,0xa1,}, {0x00,0xe2,0x85,0xb1,}}, + {{0x00,0xe2,0x85,0xa0,}, {0x00,0xe2,0x85,0xb0,}}, + {{0x00,0xe2,0x84,0xab,}, {0x00,0x00,0xc3,0xa5,}}, + {{0x00,0xe2,0x84,0xaa,}, {0x00,0x00,0x00,0x6b,}}, + {{0x00,0xe2,0x84,0xa6,}, {0x00,0x00,0xcf,0x89,}}, + {{0x00,0xe1,0xbf,0xbc,}, {0x00,0xe1,0xbf,0xb3,}}, + {{0x00,0xe1,0xbf,0xbb,}, {0x00,0xe1,0xbd,0xbd,}}, + {{0x00,0xe1,0xbf,0xba,}, {0x00,0xe1,0xbd,0xbc,}}, + {{0x00,0xe1,0xbf,0xb9,}, {0x00,0xe1,0xbd,0xb9,}}, + {{0x00,0xe1,0xbf,0xb8,}, {0x00,0xe1,0xbd,0xb8,}}, + {{0x00,0xe1,0xbf,0xac,}, {0x00,0xe1,0xbf,0xa5,}}, + {{0x00,0xe1,0xbf,0xab,}, {0x00,0xe1,0xbd,0xbb,}}, + {{0x00,0xe1,0xbf,0xaa,}, {0x00,0xe1,0xbd,0xba,}}, + {{0x00,0xe1,0xbf,0xa9,}, {0x00,0xe1,0xbf,0xa1,}}, + {{0x00,0xe1,0xbf,0xa8,}, {0x00,0xe1,0xbf,0xa0,}}, + {{0x00,0xe1,0xbf,0x9b,}, {0x00,0xe1,0xbd,0xb7,}}, + {{0x00,0xe1,0xbf,0x9a,}, {0x00,0xe1,0xbd,0xb6,}}, + {{0x00,0xe1,0xbf,0x99,}, {0x00,0xe1,0xbf,0x91,}}, + {{0x00,0xe1,0xbf,0x98,}, {0x00,0xe1,0xbf,0x90,}}, + {{0x00,0xe1,0xbf,0x8c,}, {0x00,0xe1,0xbf,0x83,}}, + {{0x00,0xe1,0xbf,0x8b,}, {0x00,0xe1,0xbd,0xb5,}}, + {{0x00,0xe1,0xbf,0x8a,}, {0x00,0xe1,0xbd,0xb4,}}, + {{0x00,0xe1,0xbf,0x89,}, {0x00,0xe1,0xbd,0xb3,}}, + {{0x00,0xe1,0xbf,0x88,}, {0x00,0xe1,0xbd,0xb2,}}, + {{0x00,0xe1,0xbe,0xbc,}, {0x00,0xe1,0xbe,0xb3,}}, + {{0x00,0xe1,0xbe,0xbb,}, {0x00,0xe1,0xbd,0xb1,}}, + {{0x00,0xe1,0xbe,0xba,}, {0x00,0xe1,0xbd,0xb0,}}, + {{0x00,0xe1,0xbe,0xb9,}, {0x00,0xe1,0xbe,0xb1,}}, + {{0x00,0xe1,0xbe,0xb8,}, {0x00,0xe1,0xbe,0xb0,}}, + {{0x00,0xe1,0xbe,0xaf,}, {0x00,0xe1,0xbe,0xa7,}}, + {{0x00,0xe1,0xbe,0xae,}, {0x00,0xe1,0xbe,0xa6,}}, + {{0x00,0xe1,0xbe,0xad,}, {0x00,0xe1,0xbe,0xa5,}}, + {{0x00,0xe1,0xbe,0xac,}, {0x00,0xe1,0xbe,0xa4,}}, + {{0x00,0xe1,0xbe,0xab,}, {0x00,0xe1,0xbe,0xa3,}}, + {{0x00,0xe1,0xbe,0xaa,}, {0x00,0xe1,0xbe,0xa2,}}, + {{0x00,0xe1,0xbe,0xa9,}, {0x00,0xe1,0xbe,0xa1,}}, + {{0x00,0xe1,0xbe,0xa8,}, {0x00,0xe1,0xbe,0xa0,}}, + {{0x00,0xe1,0xbe,0x9f,}, {0x00,0xe1,0xbe,0x97,}}, + {{0x00,0xe1,0xbe,0x9e,}, {0x00,0xe1,0xbe,0x96,}}, + {{0x00,0xe1,0xbe,0x9d,}, {0x00,0xe1,0xbe,0x95,}}, + {{0x00,0xe1,0xbe,0x9c,}, {0x00,0xe1,0xbe,0x94,}}, + {{0x00,0xe1,0xbe,0x9b,}, {0x00,0xe1,0xbe,0x93,}}, + {{0x00,0xe1,0xbe,0x9a,}, {0x00,0xe1,0xbe,0x92,}}, + {{0x00,0xe1,0xbe,0x99,}, {0x00,0xe1,0xbe,0x91,}}, + {{0x00,0xe1,0xbe,0x98,}, {0x00,0xe1,0xbe,0x90,}}, + {{0x00,0xe1,0xbe,0x8f,}, {0x00,0xe1,0xbe,0x87,}}, + {{0x00,0xe1,0xbe,0x8e,}, {0x00,0xe1,0xbe,0x86,}}, + {{0x00,0xe1,0xbe,0x8d,}, {0x00,0xe1,0xbe,0x85,}}, + {{0x00,0xe1,0xbe,0x8c,}, {0x00,0xe1,0xbe,0x84,}}, + {{0x00,0xe1,0xbe,0x8b,}, {0x00,0xe1,0xbe,0x83,}}, + {{0x00,0xe1,0xbe,0x8a,}, {0x00,0xe1,0xbe,0x82,}}, + {{0x00,0xe1,0xbe,0x89,}, {0x00,0xe1,0xbe,0x81,}}, + {{0x00,0xe1,0xbe,0x88,}, {0x00,0xe1,0xbe,0x80,}}, + {{0x00,0xe1,0xbd,0xaf,}, {0x00,0xe1,0xbd,0xa7,}}, + {{0x00,0xe1,0xbd,0xae,}, {0x00,0xe1,0xbd,0xa6,}}, + {{0x00,0xe1,0xbd,0xad,}, {0x00,0xe1,0xbd,0xa5,}}, + {{0x00,0xe1,0xbd,0xac,}, {0x00,0xe1,0xbd,0xa4,}}, + {{0x00,0xe1,0xbd,0xab,}, {0x00,0xe1,0xbd,0xa3,}}, + {{0x00,0xe1,0xbd,0xaa,}, {0x00,0xe1,0xbd,0xa2,}}, + {{0x00,0xe1,0xbd,0xa9,}, {0x00,0xe1,0xbd,0xa1,}}, + {{0x00,0xe1,0xbd,0xa8,}, {0x00,0xe1,0xbd,0xa0,}}, + {{0x00,0xe1,0xbd,0x9f,}, {0x00,0xe1,0xbd,0x97,}}, + {{0x00,0xe1,0xbd,0x9d,}, {0x00,0xe1,0xbd,0x95,}}, + {{0x00,0xe1,0xbd,0x9b,}, {0x00,0xe1,0xbd,0x93,}}, + {{0x00,0xe1,0xbd,0x99,}, {0x00,0xe1,0xbd,0x91,}}, + {{0x00,0xe1,0xbd,0x8d,}, {0x00,0xe1,0xbd,0x85,}}, + {{0x00,0xe1,0xbd,0x8c,}, {0x00,0xe1,0xbd,0x84,}}, + {{0x00,0xe1,0xbd,0x8b,}, {0x00,0xe1,0xbd,0x83,}}, + {{0x00,0xe1,0xbd,0x8a,}, {0x00,0xe1,0xbd,0x82,}}, + {{0x00,0xe1,0xbd,0x89,}, {0x00,0xe1,0xbd,0x81,}}, + {{0x00,0xe1,0xbd,0x88,}, {0x00,0xe1,0xbd,0x80,}}, + {{0x00,0xe1,0xbc,0xbf,}, {0x00,0xe1,0xbc,0xb7,}}, + {{0x00,0xe1,0xbc,0xbe,}, {0x00,0xe1,0xbc,0xb6,}}, + {{0x00,0xe1,0xbc,0xbd,}, {0x00,0xe1,0xbc,0xb5,}}, + {{0x00,0xe1,0xbc,0xbc,}, {0x00,0xe1,0xbc,0xb4,}}, + {{0x00,0xe1,0xbc,0xbb,}, {0x00,0xe1,0xbc,0xb3,}}, + {{0x00,0xe1,0xbc,0xba,}, {0x00,0xe1,0xbc,0xb2,}}, + {{0x00,0xe1,0xbc,0xb9,}, {0x00,0xe1,0xbc,0xb1,}}, + {{0x00,0xe1,0xbc,0xb8,}, {0x00,0xe1,0xbc,0xb0,}}, + {{0x00,0xe1,0xbc,0xaf,}, {0x00,0xe1,0xbc,0xa7,}}, + {{0x00,0xe1,0xbc,0xae,}, {0x00,0xe1,0xbc,0xa6,}}, + {{0x00,0xe1,0xbc,0xad,}, {0x00,0xe1,0xbc,0xa5,}}, + {{0x00,0xe1,0xbc,0xac,}, {0x00,0xe1,0xbc,0xa4,}}, + {{0x00,0xe1,0xbc,0xab,}, {0x00,0xe1,0xbc,0xa3,}}, + {{0x00,0xe1,0xbc,0xaa,}, {0x00,0xe1,0xbc,0xa2,}}, + {{0x00,0xe1,0xbc,0xa9,}, {0x00,0xe1,0xbc,0xa1,}}, + {{0x00,0xe1,0xbc,0xa8,}, {0x00,0xe1,0xbc,0xa0,}}, + {{0x00,0xe1,0xbc,0x9d,}, {0x00,0xe1,0xbc,0x95,}}, + {{0x00,0xe1,0xbc,0x9c,}, {0x00,0xe1,0xbc,0x94,}}, + {{0x00,0xe1,0xbc,0x9b,}, {0x00,0xe1,0xbc,0x93,}}, + {{0x00,0xe1,0xbc,0x9a,}, {0x00,0xe1,0xbc,0x92,}}, + {{0x00,0xe1,0xbc,0x99,}, {0x00,0xe1,0xbc,0x91,}}, + {{0x00,0xe1,0xbc,0x98,}, {0x00,0xe1,0xbc,0x90,}}, + {{0x00,0xe1,0xbc,0x8f,}, {0x00,0xe1,0xbc,0x87,}}, + {{0x00,0xe1,0xbc,0x8e,}, {0x00,0xe1,0xbc,0x86,}}, + {{0x00,0xe1,0xbc,0x8d,}, {0x00,0xe1,0xbc,0x85,}}, + {{0x00,0xe1,0xbc,0x8c,}, {0x00,0xe1,0xbc,0x84,}}, + {{0x00,0xe1,0xbc,0x8b,}, {0x00,0xe1,0xbc,0x83,}}, + {{0x00,0xe1,0xbc,0x8a,}, {0x00,0xe1,0xbc,0x82,}}, + {{0x00,0xe1,0xbc,0x89,}, {0x00,0xe1,0xbc,0x81,}}, + {{0x00,0xe1,0xbc,0x88,}, {0x00,0xe1,0xbc,0x80,}}, + {{0x00,0xe1,0xbb,0xb8,}, {0x00,0xe1,0xbb,0xb9,}}, + {{0x00,0xe1,0xbb,0xb6,}, {0x00,0xe1,0xbb,0xb7,}}, + {{0x00,0xe1,0xbb,0xb4,}, {0x00,0xe1,0xbb,0xb5,}}, + {{0x00,0xe1,0xbb,0xb2,}, {0x00,0xe1,0xbb,0xb3,}}, + {{0x00,0xe1,0xbb,0xb0,}, {0x00,0xe1,0xbb,0xb1,}}, + {{0x00,0xe1,0xbb,0xae,}, {0x00,0xe1,0xbb,0xaf,}}, + {{0x00,0xe1,0xbb,0xac,}, {0x00,0xe1,0xbb,0xad,}}, + {{0x00,0xe1,0xbb,0xaa,}, {0x00,0xe1,0xbb,0xab,}}, + {{0x00,0xe1,0xbb,0xa8,}, {0x00,0xe1,0xbb,0xa9,}}, + {{0x00,0xe1,0xbb,0xa6,}, {0x00,0xe1,0xbb,0xa7,}}, + {{0x00,0xe1,0xbb,0xa4,}, {0x00,0xe1,0xbb,0xa5,}}, + {{0x00,0xe1,0xbb,0xa2,}, {0x00,0xe1,0xbb,0xa3,}}, + {{0x00,0xe1,0xbb,0xa0,}, {0x00,0xe1,0xbb,0xa1,}}, + {{0x00,0xe1,0xbb,0x9e,}, {0x00,0xe1,0xbb,0x9f,}}, + {{0x00,0xe1,0xbb,0x9c,}, {0x00,0xe1,0xbb,0x9d,}}, + {{0x00,0xe1,0xbb,0x9a,}, {0x00,0xe1,0xbb,0x9b,}}, + {{0x00,0xe1,0xbb,0x98,}, {0x00,0xe1,0xbb,0x99,}}, + {{0x00,0xe1,0xbb,0x96,}, {0x00,0xe1,0xbb,0x97,}}, + {{0x00,0xe1,0xbb,0x94,}, {0x00,0xe1,0xbb,0x95,}}, + {{0x00,0xe1,0xbb,0x92,}, {0x00,0xe1,0xbb,0x93,}}, + {{0x00,0xe1,0xbb,0x90,}, {0x00,0xe1,0xbb,0x91,}}, + {{0x00,0xe1,0xbb,0x8e,}, {0x00,0xe1,0xbb,0x8f,}}, + {{0x00,0xe1,0xbb,0x8c,}, {0x00,0xe1,0xbb,0x8d,}}, + {{0x00,0xe1,0xbb,0x8a,}, {0x00,0xe1,0xbb,0x8b,}}, + {{0x00,0xe1,0xbb,0x88,}, {0x00,0xe1,0xbb,0x89,}}, + {{0x00,0xe1,0xbb,0x86,}, {0x00,0xe1,0xbb,0x87,}}, + {{0x00,0xe1,0xbb,0x84,}, {0x00,0xe1,0xbb,0x85,}}, + {{0x00,0xe1,0xbb,0x82,}, {0x00,0xe1,0xbb,0x83,}}, + {{0x00,0xe1,0xbb,0x80,}, {0x00,0xe1,0xbb,0x81,}}, + {{0x00,0xe1,0xba,0xbe,}, {0x00,0xe1,0xba,0xbf,}}, + {{0x00,0xe1,0xba,0xbc,}, {0x00,0xe1,0xba,0xbd,}}, + {{0x00,0xe1,0xba,0xba,}, {0x00,0xe1,0xba,0xbb,}}, + {{0x00,0xe1,0xba,0xb8,}, {0x00,0xe1,0xba,0xb9,}}, + {{0x00,0xe1,0xba,0xb6,}, {0x00,0xe1,0xba,0xb7,}}, + {{0x00,0xe1,0xba,0xb4,}, {0x00,0xe1,0xba,0xb5,}}, + {{0x00,0xe1,0xba,0xb2,}, {0x00,0xe1,0xba,0xb3,}}, + {{0x00,0xe1,0xba,0xb0,}, {0x00,0xe1,0xba,0xb1,}}, + {{0x00,0xe1,0xba,0xae,}, {0x00,0xe1,0xba,0xaf,}}, + {{0x00,0xe1,0xba,0xac,}, {0x00,0xe1,0xba,0xad,}}, + {{0x00,0xe1,0xba,0xaa,}, {0x00,0xe1,0xba,0xab,}}, + {{0x00,0xe1,0xba,0xa8,}, {0x00,0xe1,0xba,0xa9,}}, + {{0x00,0xe1,0xba,0xa6,}, {0x00,0xe1,0xba,0xa7,}}, + {{0x00,0xe1,0xba,0xa4,}, {0x00,0xe1,0xba,0xa5,}}, + {{0x00,0xe1,0xba,0xa2,}, {0x00,0xe1,0xba,0xa3,}}, + {{0x00,0xe1,0xba,0xa0,}, {0x00,0xe1,0xba,0xa1,}}, + {{0x00,0xe1,0xba,0x94,}, {0x00,0xe1,0xba,0x95,}}, + {{0x00,0xe1,0xba,0x92,}, {0x00,0xe1,0xba,0x93,}}, + {{0x00,0xe1,0xba,0x90,}, {0x00,0xe1,0xba,0x91,}}, + {{0x00,0xe1,0xba,0x8e,}, {0x00,0xe1,0xba,0x8f,}}, + {{0x00,0xe1,0xba,0x8c,}, {0x00,0xe1,0xba,0x8d,}}, + {{0x00,0xe1,0xba,0x8a,}, {0x00,0xe1,0xba,0x8b,}}, + {{0x00,0xe1,0xba,0x88,}, {0x00,0xe1,0xba,0x89,}}, + {{0x00,0xe1,0xba,0x86,}, {0x00,0xe1,0xba,0x87,}}, + {{0x00,0xe1,0xba,0x84,}, {0x00,0xe1,0xba,0x85,}}, + {{0x00,0xe1,0xba,0x82,}, {0x00,0xe1,0xba,0x83,}}, + {{0x00,0xe1,0xba,0x80,}, {0x00,0xe1,0xba,0x81,}}, + {{0x00,0xe1,0xb9,0xbe,}, {0x00,0xe1,0xb9,0xbf,}}, + {{0x00,0xe1,0xb9,0xbc,}, {0x00,0xe1,0xb9,0xbd,}}, + {{0x00,0xe1,0xb9,0xba,}, {0x00,0xe1,0xb9,0xbb,}}, + {{0x00,0xe1,0xb9,0xb8,}, {0x00,0xe1,0xb9,0xb9,}}, + {{0x00,0xe1,0xb9,0xb6,}, {0x00,0xe1,0xb9,0xb7,}}, + {{0x00,0xe1,0xb9,0xb4,}, {0x00,0xe1,0xb9,0xb5,}}, + {{0x00,0xe1,0xb9,0xb2,}, {0x00,0xe1,0xb9,0xb3,}}, + {{0x00,0xe1,0xb9,0xb0,}, {0x00,0xe1,0xb9,0xb1,}}, + {{0x00,0xe1,0xb9,0xae,}, {0x00,0xe1,0xb9,0xaf,}}, + {{0x00,0xe1,0xb9,0xac,}, {0x00,0xe1,0xb9,0xad,}}, + {{0x00,0xe1,0xb9,0xaa,}, {0x00,0xe1,0xb9,0xab,}}, + {{0x00,0xe1,0xb9,0xa8,}, {0x00,0xe1,0xb9,0xa9,}}, + {{0x00,0xe1,0xb9,0xa6,}, {0x00,0xe1,0xb9,0xa7,}}, + {{0x00,0xe1,0xb9,0xa4,}, {0x00,0xe1,0xb9,0xa5,}}, + {{0x00,0xe1,0xb9,0xa2,}, {0x00,0xe1,0xb9,0xa3,}}, + {{0x00,0xe1,0xb9,0xa0,}, {0x00,0xe1,0xb9,0xa1,}}, + {{0x00,0xe1,0xb9,0x9e,}, {0x00,0xe1,0xb9,0x9f,}}, + {{0x00,0xe1,0xb9,0x9c,}, {0x00,0xe1,0xb9,0x9d,}}, + {{0x00,0xe1,0xb9,0x9a,}, {0x00,0xe1,0xb9,0x9b,}}, + {{0x00,0xe1,0xb9,0x98,}, {0x00,0xe1,0xb9,0x99,}}, + {{0x00,0xe1,0xb9,0x96,}, {0x00,0xe1,0xb9,0x97,}}, + {{0x00,0xe1,0xb9,0x94,}, {0x00,0xe1,0xb9,0x95,}}, + {{0x00,0xe1,0xb9,0x92,}, {0x00,0xe1,0xb9,0x93,}}, + {{0x00,0xe1,0xb9,0x90,}, {0x00,0xe1,0xb9,0x91,}}, + {{0x00,0xe1,0xb9,0x8e,}, {0x00,0xe1,0xb9,0x8f,}}, + {{0x00,0xe1,0xb9,0x8c,}, {0x00,0xe1,0xb9,0x8d,}}, + {{0x00,0xe1,0xb9,0x8a,}, {0x00,0xe1,0xb9,0x8b,}}, + {{0x00,0xe1,0xb9,0x88,}, {0x00,0xe1,0xb9,0x89,}}, + {{0x00,0xe1,0xb9,0x86,}, {0x00,0xe1,0xb9,0x87,}}, + {{0x00,0xe1,0xb9,0x84,}, {0x00,0xe1,0xb9,0x85,}}, + {{0x00,0xe1,0xb9,0x82,}, {0x00,0xe1,0xb9,0x83,}}, + {{0x00,0xe1,0xb9,0x80,}, {0x00,0xe1,0xb9,0x81,}}, + {{0x00,0xe1,0xb8,0xbe,}, {0x00,0xe1,0xb8,0xbf,}}, + {{0x00,0xe1,0xb8,0xbc,}, {0x00,0xe1,0xb8,0xbd,}}, + {{0x00,0xe1,0xb8,0xba,}, {0x00,0xe1,0xb8,0xbb,}}, + {{0x00,0xe1,0xb8,0xb8,}, {0x00,0xe1,0xb8,0xb9,}}, + {{0x00,0xe1,0xb8,0xb6,}, {0x00,0xe1,0xb8,0xb7,}}, + {{0x00,0xe1,0xb8,0xb4,}, {0x00,0xe1,0xb8,0xb5,}}, + {{0x00,0xe1,0xb8,0xb2,}, {0x00,0xe1,0xb8,0xb3,}}, + {{0x00,0xe1,0xb8,0xb0,}, {0x00,0xe1,0xb8,0xb1,}}, + {{0x00,0xe1,0xb8,0xae,}, {0x00,0xe1,0xb8,0xaf,}}, + {{0x00,0xe1,0xb8,0xac,}, {0x00,0xe1,0xb8,0xad,}}, + {{0x00,0xe1,0xb8,0xaa,}, {0x00,0xe1,0xb8,0xab,}}, + {{0x00,0xe1,0xb8,0xa8,}, {0x00,0xe1,0xb8,0xa9,}}, + {{0x00,0xe1,0xb8,0xa6,}, {0x00,0xe1,0xb8,0xa7,}}, + {{0x00,0xe1,0xb8,0xa4,}, {0x00,0xe1,0xb8,0xa5,}}, + {{0x00,0xe1,0xb8,0xa2,}, {0x00,0xe1,0xb8,0xa3,}}, + {{0x00,0xe1,0xb8,0xa0,}, {0x00,0xe1,0xb8,0xa1,}}, + {{0x00,0xe1,0xb8,0x9e,}, {0x00,0xe1,0xb8,0x9f,}}, + {{0x00,0xe1,0xb8,0x9c,}, {0x00,0xe1,0xb8,0x9d,}}, + {{0x00,0xe1,0xb8,0x9a,}, {0x00,0xe1,0xb8,0x9b,}}, + {{0x00,0xe1,0xb8,0x98,}, {0x00,0xe1,0xb8,0x99,}}, + {{0x00,0xe1,0xb8,0x96,}, {0x00,0xe1,0xb8,0x97,}}, + {{0x00,0xe1,0xb8,0x94,}, {0x00,0xe1,0xb8,0x95,}}, + {{0x00,0xe1,0xb8,0x92,}, {0x00,0xe1,0xb8,0x93,}}, + {{0x00,0xe1,0xb8,0x90,}, {0x00,0xe1,0xb8,0x91,}}, + {{0x00,0xe1,0xb8,0x8e,}, {0x00,0xe1,0xb8,0x8f,}}, + {{0x00,0xe1,0xb8,0x8c,}, {0x00,0xe1,0xb8,0x8d,}}, + {{0x00,0xe1,0xb8,0x8a,}, {0x00,0xe1,0xb8,0x8b,}}, + {{0x00,0xe1,0xb8,0x88,}, {0x00,0xe1,0xb8,0x89,}}, + {{0x00,0xe1,0xb8,0x86,}, {0x00,0xe1,0xb8,0x87,}}, + {{0x00,0xe1,0xb8,0x84,}, {0x00,0xe1,0xb8,0x85,}}, + {{0x00,0xe1,0xb8,0x82,}, {0x00,0xe1,0xb8,0x83,}}, + {{0x00,0xe1,0xb8,0x80,}, {0x00,0xe1,0xb8,0x81,}}, + {{0x00,0x00,0xd5,0x96,}, {0x00,0x00,0xd6,0x86,}}, + {{0x00,0x00,0xd5,0x95,}, {0x00,0x00,0xd6,0x85,}}, + {{0x00,0x00,0xd5,0x94,}, {0x00,0x00,0xd6,0x84,}}, + {{0x00,0x00,0xd5,0x93,}, {0x00,0x00,0xd6,0x83,}}, + {{0x00,0x00,0xd5,0x92,}, {0x00,0x00,0xd6,0x82,}}, + {{0x00,0x00,0xd5,0x91,}, {0x00,0x00,0xd6,0x81,}}, + {{0x00,0x00,0xd5,0x90,}, {0x00,0x00,0xd6,0x80,}}, + {{0x00,0x00,0xd5,0x8f,}, {0x00,0x00,0xd5,0xbf,}}, + {{0x00,0x00,0xd5,0x8e,}, {0x00,0x00,0xd5,0xbe,}}, + {{0x00,0x00,0xd5,0x8d,}, {0x00,0x00,0xd5,0xbd,}}, + {{0x00,0x00,0xd5,0x8c,}, {0x00,0x00,0xd5,0xbc,}}, + {{0x00,0x00,0xd5,0x8b,}, {0x00,0x00,0xd5,0xbb,}}, + {{0x00,0x00,0xd5,0x8a,}, {0x00,0x00,0xd5,0xba,}}, + {{0x00,0x00,0xd5,0x89,}, {0x00,0x00,0xd5,0xb9,}}, + {{0x00,0x00,0xd5,0x88,}, {0x00,0x00,0xd5,0xb8,}}, + {{0x00,0x00,0xd5,0x87,}, {0x00,0x00,0xd5,0xb7,}}, + {{0x00,0x00,0xd5,0x86,}, {0x00,0x00,0xd5,0xb6,}}, + {{0x00,0x00,0xd5,0x85,}, {0x00,0x00,0xd5,0xb5,}}, + {{0x00,0x00,0xd5,0x84,}, {0x00,0x00,0xd5,0xb4,}}, + {{0x00,0x00,0xd5,0x83,}, {0x00,0x00,0xd5,0xb3,}}, + {{0x00,0x00,0xd5,0x82,}, {0x00,0x00,0xd5,0xb2,}}, + {{0x00,0x00,0xd5,0x81,}, {0x00,0x00,0xd5,0xb1,}}, + {{0x00,0x00,0xd5,0x80,}, {0x00,0x00,0xd5,0xb0,}}, + {{0x00,0x00,0xd4,0xbf,}, {0x00,0x00,0xd5,0xaf,}}, + {{0x00,0x00,0xd4,0xbe,}, {0x00,0x00,0xd5,0xae,}}, + {{0x00,0x00,0xd4,0xbd,}, {0x00,0x00,0xd5,0xad,}}, + {{0x00,0x00,0xd4,0xbc,}, {0x00,0x00,0xd5,0xac,}}, + {{0x00,0x00,0xd4,0xbb,}, {0x00,0x00,0xd5,0xab,}}, + {{0x00,0x00,0xd4,0xba,}, {0x00,0x00,0xd5,0xaa,}}, + {{0x00,0x00,0xd4,0xb9,}, {0x00,0x00,0xd5,0xa9,}}, + {{0x00,0x00,0xd4,0xb8,}, {0x00,0x00,0xd5,0xa8,}}, + {{0x00,0x00,0xd4,0xb7,}, {0x00,0x00,0xd5,0xa7,}}, + {{0x00,0x00,0xd4,0xb6,}, {0x00,0x00,0xd5,0xa6,}}, + {{0x00,0x00,0xd4,0xb5,}, {0x00,0x00,0xd5,0xa5,}}, + {{0x00,0x00,0xd4,0xb4,}, {0x00,0x00,0xd5,0xa4,}}, + {{0x00,0x00,0xd4,0xb3,}, {0x00,0x00,0xd5,0xa3,}}, + {{0x00,0x00,0xd4,0xb2,}, {0x00,0x00,0xd5,0xa2,}}, + {{0x00,0x00,0xd4,0xb1,}, {0x00,0x00,0xd5,0xa1,}}, + {{0x00,0x00,0xd3,0xb8,}, {0x00,0x00,0xd3,0xb9,}}, + {{0x00,0x00,0xd3,0xb4,}, {0x00,0x00,0xd3,0xb5,}}, + {{0x00,0x00,0xd3,0xb2,}, {0x00,0x00,0xd3,0xb3,}}, + {{0x00,0x00,0xd3,0xb0,}, {0x00,0x00,0xd3,0xb1,}}, + {{0x00,0x00,0xd3,0xae,}, {0x00,0x00,0xd3,0xaf,}}, + {{0x00,0x00,0xd3,0xac,}, {0x00,0x00,0xd3,0xad,}}, + {{0x00,0x00,0xd3,0xaa,}, {0x00,0x00,0xd3,0xab,}}, + {{0x00,0x00,0xd3,0xa8,}, {0x00,0x00,0xd3,0xa9,}}, + {{0x00,0x00,0xd3,0xa6,}, {0x00,0x00,0xd3,0xa7,}}, + {{0x00,0x00,0xd3,0xa4,}, {0x00,0x00,0xd3,0xa5,}}, + {{0x00,0x00,0xd3,0xa2,}, {0x00,0x00,0xd3,0xa3,}}, + {{0x00,0x00,0xd3,0xa0,}, {0x00,0x00,0xd3,0xa1,}}, + {{0x00,0x00,0xd3,0x9e,}, {0x00,0x00,0xd3,0x9f,}}, + {{0x00,0x00,0xd3,0x9c,}, {0x00,0x00,0xd3,0x9d,}}, + {{0x00,0x00,0xd3,0x9a,}, {0x00,0x00,0xd3,0x9b,}}, + {{0x00,0x00,0xd3,0x98,}, {0x00,0x00,0xd3,0x99,}}, + {{0x00,0x00,0xd3,0x96,}, {0x00,0x00,0xd3,0x97,}}, + {{0x00,0x00,0xd3,0x94,}, {0x00,0x00,0xd3,0x95,}}, + {{0x00,0x00,0xd3,0x92,}, {0x00,0x00,0xd3,0x93,}}, + {{0x00,0x00,0xd3,0x90,}, {0x00,0x00,0xd3,0x91,}}, + {{0x00,0x00,0xd3,0x8b,}, {0x00,0x00,0xd3,0x8c,}}, + {{0x00,0x00,0xd3,0x87,}, {0x00,0x00,0xd3,0x88,}}, + {{0x00,0x00,0xd3,0x83,}, {0x00,0x00,0xd3,0x84,}}, + {{0x00,0x00,0xd3,0x81,}, {0x00,0x00,0xd3,0x82,}}, + {{0x00,0x00,0xd2,0xbe,}, {0x00,0x00,0xd2,0xbf,}}, + {{0x00,0x00,0xd2,0xbc,}, {0x00,0x00,0xd2,0xbd,}}, + {{0x00,0x00,0xd2,0xba,}, {0x00,0x00,0xd2,0xbb,}}, + {{0x00,0x00,0xd2,0xb8,}, {0x00,0x00,0xd2,0xb9,}}, + {{0x00,0x00,0xd2,0xb6,}, {0x00,0x00,0xd2,0xb7,}}, + {{0x00,0x00,0xd2,0xb4,}, {0x00,0x00,0xd2,0xb5,}}, + {{0x00,0x00,0xd2,0xb2,}, {0x00,0x00,0xd2,0xb3,}}, + {{0x00,0x00,0xd2,0xb0,}, {0x00,0x00,0xd2,0xb1,}}, + {{0x00,0x00,0xd2,0xae,}, {0x00,0x00,0xd2,0xaf,}}, + {{0x00,0x00,0xd2,0xac,}, {0x00,0x00,0xd2,0xad,}}, + {{0x00,0x00,0xd2,0xaa,}, {0x00,0x00,0xd2,0xab,}}, + {{0x00,0x00,0xd2,0xa8,}, {0x00,0x00,0xd2,0xa9,}}, + {{0x00,0x00,0xd2,0xa6,}, {0x00,0x00,0xd2,0xa7,}}, + {{0x00,0x00,0xd2,0xa4,}, {0x00,0x00,0xd2,0xa5,}}, + {{0x00,0x00,0xd2,0xa2,}, {0x00,0x00,0xd2,0xa3,}}, + {{0x00,0x00,0xd2,0xa0,}, {0x00,0x00,0xd2,0xa1,}}, + {{0x00,0x00,0xd2,0x9e,}, {0x00,0x00,0xd2,0x9f,}}, + {{0x00,0x00,0xd2,0x9c,}, {0x00,0x00,0xd2,0x9d,}}, + {{0x00,0x00,0xd2,0x9a,}, {0x00,0x00,0xd2,0x9b,}}, + {{0x00,0x00,0xd2,0x98,}, {0x00,0x00,0xd2,0x99,}}, + {{0x00,0x00,0xd2,0x96,}, {0x00,0x00,0xd2,0x97,}}, + {{0x00,0x00,0xd2,0x94,}, {0x00,0x00,0xd2,0x95,}}, + {{0x00,0x00,0xd2,0x92,}, {0x00,0x00,0xd2,0x93,}}, + {{0x00,0x00,0xd2,0x90,}, {0x00,0x00,0xd2,0x91,}}, + {{0x00,0x00,0xd2,0x8e,}, {0x00,0x00,0xd2,0x8f,}}, + {{0x00,0x00,0xd2,0x8c,}, {0x00,0x00,0xd2,0x8d,}}, + {{0x00,0x00,0xd2,0x80,}, {0x00,0x00,0xd2,0x81,}}, + {{0x00,0x00,0xd1,0xbe,}, {0x00,0x00,0xd1,0xbf,}}, + {{0x00,0x00,0xd1,0xbc,}, {0x00,0x00,0xd1,0xbd,}}, + {{0x00,0x00,0xd1,0xba,}, {0x00,0x00,0xd1,0xbb,}}, + {{0x00,0x00,0xd1,0xb8,}, {0x00,0x00,0xd1,0xb9,}}, + {{0x00,0x00,0xd1,0xb6,}, {0x00,0x00,0xd1,0xb7,}}, + {{0x00,0x00,0xd1,0xb4,}, {0x00,0x00,0xd1,0xb5,}}, + {{0x00,0x00,0xd1,0xb2,}, {0x00,0x00,0xd1,0xb3,}}, + {{0x00,0x00,0xd1,0xb0,}, {0x00,0x00,0xd1,0xb1,}}, + {{0x00,0x00,0xd1,0xae,}, {0x00,0x00,0xd1,0xaf,}}, + {{0x00,0x00,0xd1,0xac,}, {0x00,0x00,0xd1,0xad,}}, + {{0x00,0x00,0xd1,0xaa,}, {0x00,0x00,0xd1,0xab,}}, + {{0x00,0x00,0xd1,0xa8,}, {0x00,0x00,0xd1,0xa9,}}, + {{0x00,0x00,0xd1,0xa6,}, {0x00,0x00,0xd1,0xa7,}}, + {{0x00,0x00,0xd1,0xa4,}, {0x00,0x00,0xd1,0xa5,}}, + {{0x00,0x00,0xd1,0xa2,}, {0x00,0x00,0xd1,0xa3,}}, + {{0x00,0x00,0xd1,0xa0,}, {0x00,0x00,0xd1,0xa1,}}, + {{0x00,0x00,0xd0,0xaf,}, {0x00,0x00,0xd1,0x8f,}}, + {{0x00,0x00,0xd0,0xae,}, {0x00,0x00,0xd1,0x8e,}}, + {{0x00,0x00,0xd0,0xad,}, {0x00,0x00,0xd1,0x8d,}}, + {{0x00,0x00,0xd0,0xac,}, {0x00,0x00,0xd1,0x8c,}}, + {{0x00,0x00,0xd0,0xab,}, {0x00,0x00,0xd1,0x8b,}}, + {{0x00,0x00,0xd0,0xaa,}, {0x00,0x00,0xd1,0x8a,}}, + {{0x00,0x00,0xd0,0xa9,}, {0x00,0x00,0xd1,0x89,}}, + {{0x00,0x00,0xd0,0xa8,}, {0x00,0x00,0xd1,0x88,}}, + {{0x00,0x00,0xd0,0xa7,}, {0x00,0x00,0xd1,0x87,}}, + {{0x00,0x00,0xd0,0xa6,}, {0x00,0x00,0xd1,0x86,}}, + {{0x00,0x00,0xd0,0xa5,}, {0x00,0x00,0xd1,0x85,}}, + {{0x00,0x00,0xd0,0xa4,}, {0x00,0x00,0xd1,0x84,}}, + {{0x00,0x00,0xd0,0xa3,}, {0x00,0x00,0xd1,0x83,}}, + {{0x00,0x00,0xd0,0xa2,}, {0x00,0x00,0xd1,0x82,}}, + {{0x00,0x00,0xd0,0xa1,}, {0x00,0x00,0xd1,0x81,}}, + {{0x00,0x00,0xd0,0xa0,}, {0x00,0x00,0xd1,0x80,}}, + {{0x00,0x00,0xd0,0x9f,}, {0x00,0x00,0xd0,0xbf,}}, + {{0x00,0x00,0xd0,0x9e,}, {0x00,0x00,0xd0,0xbe,}}, + {{0x00,0x00,0xd0,0x9d,}, {0x00,0x00,0xd0,0xbd,}}, + {{0x00,0x00,0xd0,0x9c,}, {0x00,0x00,0xd0,0xbc,}}, + {{0x00,0x00,0xd0,0x9b,}, {0x00,0x00,0xd0,0xbb,}}, + {{0x00,0x00,0xd0,0x9a,}, {0x00,0x00,0xd0,0xba,}}, + {{0x00,0x00,0xd0,0x99,}, {0x00,0x00,0xd0,0xb9,}}, + {{0x00,0x00,0xd0,0x98,}, {0x00,0x00,0xd0,0xb8,}}, + {{0x00,0x00,0xd0,0x97,}, {0x00,0x00,0xd0,0xb7,}}, + {{0x00,0x00,0xd0,0x96,}, {0x00,0x00,0xd0,0xb6,}}, + {{0x00,0x00,0xd0,0x95,}, {0x00,0x00,0xd0,0xb5,}}, + {{0x00,0x00,0xd0,0x94,}, {0x00,0x00,0xd0,0xb4,}}, + {{0x00,0x00,0xd0,0x93,}, {0x00,0x00,0xd0,0xb3,}}, + {{0x00,0x00,0xd0,0x92,}, {0x00,0x00,0xd0,0xb2,}}, + {{0x00,0x00,0xd0,0x91,}, {0x00,0x00,0xd0,0xb1,}}, + {{0x00,0x00,0xd0,0x90,}, {0x00,0x00,0xd0,0xb0,}}, + {{0x00,0x00,0xd0,0x8f,}, {0x00,0x00,0xd1,0x9f,}}, + {{0x00,0x00,0xd0,0x8e,}, {0x00,0x00,0xd1,0x9e,}}, + {{0x00,0x00,0xd0,0x8d,}, {0x00,0x00,0xd1,0x9d,}}, + {{0x00,0x00,0xd0,0x8c,}, {0x00,0x00,0xd1,0x9c,}}, + {{0x00,0x00,0xd0,0x8b,}, {0x00,0x00,0xd1,0x9b,}}, + {{0x00,0x00,0xd0,0x8a,}, {0x00,0x00,0xd1,0x9a,}}, + {{0x00,0x00,0xd0,0x89,}, {0x00,0x00,0xd1,0x99,}}, + {{0x00,0x00,0xd0,0x88,}, {0x00,0x00,0xd1,0x98,}}, + {{0x00,0x00,0xd0,0x87,}, {0x00,0x00,0xd1,0x97,}}, + {{0x00,0x00,0xd0,0x86,}, {0x00,0x00,0xd1,0x96,}}, + {{0x00,0x00,0xd0,0x85,}, {0x00,0x00,0xd1,0x95,}}, + {{0x00,0x00,0xd0,0x84,}, {0x00,0x00,0xd1,0x94,}}, + {{0x00,0x00,0xd0,0x83,}, {0x00,0x00,0xd1,0x93,}}, + {{0x00,0x00,0xd0,0x82,}, {0x00,0x00,0xd1,0x92,}}, + {{0x00,0x00,0xd0,0x81,}, {0x00,0x00,0xd1,0x91,}}, + {{0x00,0x00,0xd0,0x80,}, {0x00,0x00,0xd1,0x90,}}, + {{0x00,0x00,0xcf,0xb4,}, {0x00,0x00,0xce,0xb8,}}, + {{0x00,0x00,0xcf,0xae,}, {0x00,0x00,0xcf,0xaf,}}, + {{0x00,0x00,0xcf,0xac,}, {0x00,0x00,0xcf,0xad,}}, + {{0x00,0x00,0xcf,0xaa,}, {0x00,0x00,0xcf,0xab,}}, + {{0x00,0x00,0xcf,0xa8,}, {0x00,0x00,0xcf,0xa9,}}, + {{0x00,0x00,0xcf,0xa6,}, {0x00,0x00,0xcf,0xa7,}}, + {{0x00,0x00,0xcf,0xa4,}, {0x00,0x00,0xcf,0xa5,}}, + {{0x00,0x00,0xcf,0xa2,}, {0x00,0x00,0xcf,0xa3,}}, + {{0x00,0x00,0xcf,0xa0,}, {0x00,0x00,0xcf,0xa1,}}, + {{0x00,0x00,0xcf,0x9e,}, {0x00,0x00,0xcf,0x9f,}}, + {{0x00,0x00,0xcf,0x9c,}, {0x00,0x00,0xcf,0x9d,}}, + {{0x00,0x00,0xcf,0x9a,}, {0x00,0x00,0xcf,0x9b,}}, + {{0x00,0x00,0xce,0xab,}, {0x00,0x00,0xcf,0x8b,}}, + {{0x00,0x00,0xce,0xaa,}, {0x00,0x00,0xcf,0x8a,}}, + {{0x00,0x00,0xce,0xa9,}, {0x00,0x00,0xcf,0x89,}}, + {{0x00,0x00,0xce,0xa8,}, {0x00,0x00,0xcf,0x88,}}, + {{0x00,0x00,0xce,0xa7,}, {0x00,0x00,0xcf,0x87,}}, + {{0x00,0x00,0xce,0xa6,}, {0x00,0x00,0xcf,0x86,}}, + {{0x00,0x00,0xce,0xa5,}, {0x00,0x00,0xcf,0x85,}}, + {{0x00,0x00,0xce,0xa4,}, {0x00,0x00,0xcf,0x84,}}, + {{0x00,0x00,0xce,0xa3,}, {0x00,0x00,0xcf,0x83,}}, + {{0x00,0x00,0xce,0xa1,}, {0x00,0x00,0xcf,0x81,}}, + {{0x00,0x00,0xce,0xa0,}, {0x00,0x00,0xcf,0x80,}}, + {{0x00,0x00,0xce,0x9f,}, {0x00,0x00,0xce,0xbf,}}, + {{0x00,0x00,0xce,0x9e,}, {0x00,0x00,0xce,0xbe,}}, + {{0x00,0x00,0xce,0x9d,}, {0x00,0x00,0xce,0xbd,}}, + {{0x00,0x00,0xce,0x9c,}, {0x00,0x00,0xce,0xbc,}}, + {{0x00,0x00,0xce,0x9b,}, {0x00,0x00,0xce,0xbb,}}, + {{0x00,0x00,0xce,0x9a,}, {0x00,0x00,0xce,0xba,}}, + {{0x00,0x00,0xce,0x99,}, {0x00,0x00,0xce,0xb9,}}, + {{0x00,0x00,0xce,0x98,}, {0x00,0x00,0xce,0xb8,}}, + {{0x00,0x00,0xce,0x97,}, {0x00,0x00,0xce,0xb7,}}, + {{0x00,0x00,0xce,0x96,}, {0x00,0x00,0xce,0xb6,}}, + {{0x00,0x00,0xce,0x95,}, {0x00,0x00,0xce,0xb5,}}, + {{0x00,0x00,0xce,0x94,}, {0x00,0x00,0xce,0xb4,}}, + {{0x00,0x00,0xce,0x93,}, {0x00,0x00,0xce,0xb3,}}, + {{0x00,0x00,0xce,0x92,}, {0x00,0x00,0xce,0xb2,}}, + {{0x00,0x00,0xce,0x91,}, {0x00,0x00,0xce,0xb1,}}, + {{0x00,0x00,0xce,0x8f,}, {0x00,0x00,0xcf,0x8e,}}, + {{0x00,0x00,0xce,0x8e,}, {0x00,0x00,0xcf,0x8d,}}, + {{0x00,0x00,0xce,0x8c,}, {0x00,0x00,0xcf,0x8c,}}, + {{0x00,0x00,0xce,0x8a,}, {0x00,0x00,0xce,0xaf,}}, + {{0x00,0x00,0xce,0x89,}, {0x00,0x00,0xce,0xae,}}, + {{0x00,0x00,0xce,0x88,}, {0x00,0x00,0xce,0xad,}}, + {{0x00,0x00,0xce,0x86,}, {0x00,0x00,0xce,0xac,}}, + {{0x00,0x00,0xc8,0xb2,}, {0x00,0x00,0xc8,0xb3,}}, + {{0x00,0x00,0xc8,0xb0,}, {0x00,0x00,0xc8,0xb1,}}, + {{0x00,0x00,0xc8,0xae,}, {0x00,0x00,0xc8,0xaf,}}, + {{0x00,0x00,0xc8,0xac,}, {0x00,0x00,0xc8,0xad,}}, + {{0x00,0x00,0xc8,0xaa,}, {0x00,0x00,0xc8,0xab,}}, + {{0x00,0x00,0xc8,0xa8,}, {0x00,0x00,0xc8,0xa9,}}, + {{0x00,0x00,0xc8,0xa6,}, {0x00,0x00,0xc8,0xa7,}}, + {{0x00,0x00,0xc8,0xa4,}, {0x00,0x00,0xc8,0xa5,}}, + {{0x00,0x00,0xc8,0xa2,}, {0x00,0x00,0xc8,0xa3,}}, + {{0x00,0x00,0xc8,0x9e,}, {0x00,0x00,0xc8,0x9f,}}, + {{0x00,0x00,0xc8,0x9c,}, {0x00,0x00,0xc8,0x9d,}}, + {{0x00,0x00,0xc8,0x9a,}, {0x00,0x00,0xc8,0x9b,}}, + {{0x00,0x00,0xc8,0x98,}, {0x00,0x00,0xc8,0x99,}}, + {{0x00,0x00,0xc8,0x96,}, {0x00,0x00,0xc8,0x97,}}, + {{0x00,0x00,0xc8,0x94,}, {0x00,0x00,0xc8,0x95,}}, + {{0x00,0x00,0xc8,0x92,}, {0x00,0x00,0xc8,0x93,}}, + {{0x00,0x00,0xc8,0x90,}, {0x00,0x00,0xc8,0x91,}}, + {{0x00,0x00,0xc8,0x8e,}, {0x00,0x00,0xc8,0x8f,}}, + {{0x00,0x00,0xc8,0x8c,}, {0x00,0x00,0xc8,0x8d,}}, + {{0x00,0x00,0xc8,0x8a,}, {0x00,0x00,0xc8,0x8b,}}, + {{0x00,0x00,0xc8,0x88,}, {0x00,0x00,0xc8,0x89,}}, + {{0x00,0x00,0xc8,0x86,}, {0x00,0x00,0xc8,0x87,}}, + {{0x00,0x00,0xc8,0x84,}, {0x00,0x00,0xc8,0x85,}}, + {{0x00,0x00,0xc8,0x82,}, {0x00,0x00,0xc8,0x83,}}, + {{0x00,0x00,0xc8,0x80,}, {0x00,0x00,0xc8,0x81,}}, + {{0x00,0x00,0xc7,0xbe,}, {0x00,0x00,0xc7,0xbf,}}, + {{0x00,0x00,0xc7,0xbc,}, {0x00,0x00,0xc7,0xbd,}}, + {{0x00,0x00,0xc7,0xba,}, {0x00,0x00,0xc7,0xbb,}}, + {{0x00,0x00,0xc7,0xb8,}, {0x00,0x00,0xc7,0xb9,}}, + {{0x00,0x00,0xc7,0xb7,}, {0x00,0x00,0xc6,0xbf,}}, + {{0x00,0x00,0xc7,0xb6,}, {0x00,0x00,0xc6,0x95,}}, + {{0x00,0x00,0xc7,0xb4,}, {0x00,0x00,0xc7,0xb5,}}, + {{0x00,0x00,0xc7,0xb2,}, {0x00,0x00,0xc7,0xb3,}}, + {{0x00,0x00,0xc7,0xb1,}, {0x00,0x00,0xc7,0xb3,}}, + {{0x00,0x00,0xc7,0xae,}, {0x00,0x00,0xc7,0xaf,}}, + {{0x00,0x00,0xc7,0xac,}, {0x00,0x00,0xc7,0xad,}}, + {{0x00,0x00,0xc7,0xaa,}, {0x00,0x00,0xc7,0xab,}}, + {{0x00,0x00,0xc7,0xa8,}, {0x00,0x00,0xc7,0xa9,}}, + {{0x00,0x00,0xc7,0xa6,}, {0x00,0x00,0xc7,0xa7,}}, + {{0x00,0x00,0xc7,0xa4,}, {0x00,0x00,0xc7,0xa5,}}, + {{0x00,0x00,0xc7,0xa2,}, {0x00,0x00,0xc7,0xa3,}}, + {{0x00,0x00,0xc7,0xa0,}, {0x00,0x00,0xc7,0xa1,}}, + {{0x00,0x00,0xc7,0x9e,}, {0x00,0x00,0xc7,0x9f,}}, + {{0x00,0x00,0xc7,0x9b,}, {0x00,0x00,0xc7,0x9c,}}, + {{0x00,0x00,0xc7,0x99,}, {0x00,0x00,0xc7,0x9a,}}, + {{0x00,0x00,0xc7,0x97,}, {0x00,0x00,0xc7,0x98,}}, + {{0x00,0x00,0xc7,0x95,}, {0x00,0x00,0xc7,0x96,}}, + {{0x00,0x00,0xc7,0x93,}, {0x00,0x00,0xc7,0x94,}}, + {{0x00,0x00,0xc7,0x91,}, {0x00,0x00,0xc7,0x92,}}, + {{0x00,0x00,0xc7,0x8f,}, {0x00,0x00,0xc7,0x90,}}, + {{0x00,0x00,0xc7,0x8d,}, {0x00,0x00,0xc7,0x8e,}}, + {{0x00,0x00,0xc7,0x8b,}, {0x00,0x00,0xc7,0x8c,}}, + {{0x00,0x00,0xc7,0x8a,}, {0x00,0x00,0xc7,0x8c,}}, + {{0x00,0x00,0xc7,0x88,}, {0x00,0x00,0xc7,0x89,}}, + {{0x00,0x00,0xc7,0x87,}, {0x00,0x00,0xc7,0x89,}}, + {{0x00,0x00,0xc7,0x85,}, {0x00,0x00,0xc7,0x86,}}, + {{0x00,0x00,0xc7,0x84,}, {0x00,0x00,0xc7,0x86,}}, + {{0x00,0x00,0xc6,0xbc,}, {0x00,0x00,0xc6,0xbd,}}, + {{0x00,0x00,0xc6,0xb8,}, {0x00,0x00,0xc6,0xb9,}}, + {{0x00,0x00,0xc6,0xb7,}, {0x00,0x00,0xca,0x92,}}, + {{0x00,0x00,0xc6,0xb5,}, {0x00,0x00,0xc6,0xb6,}}, + {{0x00,0x00,0xc6,0xb3,}, {0x00,0x00,0xc6,0xb4,}}, + {{0x00,0x00,0xc6,0xb2,}, {0x00,0x00,0xca,0x8b,}}, + {{0x00,0x00,0xc6,0xb1,}, {0x00,0x00,0xca,0x8a,}}, + {{0x00,0x00,0xc6,0xaf,}, {0x00,0x00,0xc6,0xb0,}}, + {{0x00,0x00,0xc6,0xae,}, {0x00,0x00,0xca,0x88,}}, + {{0x00,0x00,0xc6,0xac,}, {0x00,0x00,0xc6,0xad,}}, + {{0x00,0x00,0xc6,0xa9,}, {0x00,0x00,0xca,0x83,}}, + {{0x00,0x00,0xc6,0xa7,}, {0x00,0x00,0xc6,0xa8,}}, + {{0x00,0x00,0xc6,0xa6,}, {0x00,0x00,0xca,0x80,}}, + {{0x00,0x00,0xc6,0xa4,}, {0x00,0x00,0xc6,0xa5,}}, + {{0x00,0x00,0xc6,0xa2,}, {0x00,0x00,0xc6,0xa3,}}, + {{0x00,0x00,0xc6,0xa0,}, {0x00,0x00,0xc6,0xa1,}}, + {{0x00,0x00,0xc6,0x9f,}, {0x00,0x00,0xc9,0xb5,}}, + {{0x00,0x00,0xc6,0x9d,}, {0x00,0x00,0xc9,0xb2,}}, + {{0x00,0x00,0xc6,0x9c,}, {0x00,0x00,0xc9,0xaf,}}, + {{0x00,0x00,0xc6,0x98,}, {0x00,0x00,0xc6,0x99,}}, + {{0x00,0x00,0xc6,0x97,}, {0x00,0x00,0xc9,0xa8,}}, + {{0x00,0x00,0xc6,0x96,}, {0x00,0x00,0xc9,0xa9,}}, + {{0x00,0x00,0xc6,0x94,}, {0x00,0x00,0xc9,0xa3,}}, + {{0x00,0x00,0xc6,0x93,}, {0x00,0x00,0xc9,0xa0,}}, + {{0x00,0x00,0xc6,0x91,}, {0x00,0x00,0xc6,0x92,}}, + {{0x00,0x00,0xc6,0x90,}, {0x00,0x00,0xc9,0x9b,}}, + {{0x00,0x00,0xc6,0x8f,}, {0x00,0x00,0xc9,0x99,}}, + {{0x00,0x00,0xc6,0x8e,}, {0x00,0x00,0xc7,0x9d,}}, + {{0x00,0x00,0xc6,0x8b,}, {0x00,0x00,0xc6,0x8c,}}, + {{0x00,0x00,0xc6,0x8a,}, {0x00,0x00,0xc9,0x97,}}, + {{0x00,0x00,0xc6,0x89,}, {0x00,0x00,0xc9,0x96,}}, + {{0x00,0x00,0xc6,0x87,}, {0x00,0x00,0xc6,0x88,}}, + {{0x00,0x00,0xc6,0x86,}, {0x00,0x00,0xc9,0x94,}}, + {{0x00,0x00,0xc6,0x84,}, {0x00,0x00,0xc6,0x85,}}, + {{0x00,0x00,0xc6,0x82,}, {0x00,0x00,0xc6,0x83,}}, + {{0x00,0x00,0xc6,0x81,}, {0x00,0x00,0xc9,0x93,}}, + {{0x00,0x00,0xc5,0xbd,}, {0x00,0x00,0xc5,0xbe,}}, + {{0x00,0x00,0xc5,0xbb,}, {0x00,0x00,0xc5,0xbc,}}, + {{0x00,0x00,0xc5,0xb9,}, {0x00,0x00,0xc5,0xba,}}, + {{0x00,0x00,0xc5,0xb8,}, {0x00,0x00,0xc3,0xbf,}}, + {{0x00,0x00,0xc5,0xb6,}, {0x00,0x00,0xc5,0xb7,}}, + {{0x00,0x00,0xc5,0xb4,}, {0x00,0x00,0xc5,0xb5,}}, + {{0x00,0x00,0xc5,0xb2,}, {0x00,0x00,0xc5,0xb3,}}, + {{0x00,0x00,0xc5,0xb0,}, {0x00,0x00,0xc5,0xb1,}}, + {{0x00,0x00,0xc5,0xae,}, {0x00,0x00,0xc5,0xaf,}}, + {{0x00,0x00,0xc5,0xac,}, {0x00,0x00,0xc5,0xad,}}, + {{0x00,0x00,0xc5,0xaa,}, {0x00,0x00,0xc5,0xab,}}, + {{0x00,0x00,0xc5,0xa8,}, {0x00,0x00,0xc5,0xa9,}}, + {{0x00,0x00,0xc5,0xa6,}, {0x00,0x00,0xc5,0xa7,}}, + {{0x00,0x00,0xc5,0xa4,}, {0x00,0x00,0xc5,0xa5,}}, + {{0x00,0x00,0xc5,0xa2,}, {0x00,0x00,0xc5,0xa3,}}, + {{0x00,0x00,0xc5,0xa0,}, {0x00,0x00,0xc5,0xa1,}}, + {{0x00,0x00,0xc5,0x9e,}, {0x00,0x00,0xc5,0x9f,}}, + {{0x00,0x00,0xc5,0x9c,}, {0x00,0x00,0xc5,0x9d,}}, + {{0x00,0x00,0xc5,0x9a,}, {0x00,0x00,0xc5,0x9b,}}, + {{0x00,0x00,0xc5,0x98,}, {0x00,0x00,0xc5,0x99,}}, + {{0x00,0x00,0xc5,0x96,}, {0x00,0x00,0xc5,0x97,}}, + {{0x00,0x00,0xc5,0x94,}, {0x00,0x00,0xc5,0x95,}}, + {{0x00,0x00,0xc5,0x92,}, {0x00,0x00,0xc5,0x93,}}, + {{0x00,0x00,0xc5,0x90,}, {0x00,0x00,0xc5,0x91,}}, + {{0x00,0x00,0xc5,0x8e,}, {0x00,0x00,0xc5,0x8f,}}, + {{0x00,0x00,0xc5,0x8c,}, {0x00,0x00,0xc5,0x8d,}}, + {{0x00,0x00,0xc5,0x8a,}, {0x00,0x00,0xc5,0x8b,}}, + {{0x00,0x00,0xc5,0x87,}, {0x00,0x00,0xc5,0x88,}}, + {{0x00,0x00,0xc5,0x85,}, {0x00,0x00,0xc5,0x86,}}, + {{0x00,0x00,0xc5,0x83,}, {0x00,0x00,0xc5,0x84,}}, + {{0x00,0x00,0xc5,0x81,}, {0x00,0x00,0xc5,0x82,}}, + {{0x00,0x00,0xc4,0xbf,}, {0x00,0x00,0xc5,0x80,}}, + {{0x00,0x00,0xc4,0xbd,}, {0x00,0x00,0xc4,0xbe,}}, + {{0x00,0x00,0xc4,0xbb,}, {0x00,0x00,0xc4,0xbc,}}, + {{0x00,0x00,0xc4,0xb9,}, {0x00,0x00,0xc4,0xba,}}, + {{0x00,0x00,0xc4,0xb6,}, {0x00,0x00,0xc4,0xb7,}}, + {{0x00,0x00,0xc4,0xb4,}, {0x00,0x00,0xc4,0xb5,}}, + {{0x00,0x00,0xc4,0xb2,}, {0x00,0x00,0xc4,0xb3,}}, + {{0x00,0x00,0xc4,0xb0,}, {0x00,0x00,0x00,0x69,}}, + {{0x00,0x00,0xc4,0xae,}, {0x00,0x00,0xc4,0xaf,}}, + {{0x00,0x00,0xc4,0xac,}, {0x00,0x00,0xc4,0xad,}}, + {{0x00,0x00,0xc4,0xaa,}, {0x00,0x00,0xc4,0xab,}}, + {{0x00,0x00,0xc4,0xa8,}, {0x00,0x00,0xc4,0xa9,}}, + {{0x00,0x00,0xc4,0xa6,}, {0x00,0x00,0xc4,0xa7,}}, + {{0x00,0x00,0xc4,0xa4,}, {0x00,0x00,0xc4,0xa5,}}, + {{0x00,0x00,0xc4,0xa2,}, {0x00,0x00,0xc4,0xa3,}}, + {{0x00,0x00,0xc4,0xa0,}, {0x00,0x00,0xc4,0xa1,}}, + {{0x00,0x00,0xc4,0x9e,}, {0x00,0x00,0xc4,0x9f,}}, + {{0x00,0x00,0xc4,0x9c,}, {0x00,0x00,0xc4,0x9d,}}, + {{0x00,0x00,0xc4,0x9a,}, {0x00,0x00,0xc4,0x9b,}}, + {{0x00,0x00,0xc4,0x98,}, {0x00,0x00,0xc4,0x99,}}, + {{0x00,0x00,0xc4,0x96,}, {0x00,0x00,0xc4,0x97,}}, + {{0x00,0x00,0xc4,0x94,}, {0x00,0x00,0xc4,0x95,}}, + {{0x00,0x00,0xc4,0x92,}, {0x00,0x00,0xc4,0x93,}}, + {{0x00,0x00,0xc4,0x90,}, {0x00,0x00,0xc4,0x91,}}, + {{0x00,0x00,0xc4,0x8e,}, {0x00,0x00,0xc4,0x8f,}}, + {{0x00,0x00,0xc4,0x8c,}, {0x00,0x00,0xc4,0x8d,}}, + {{0x00,0x00,0xc4,0x8a,}, {0x00,0x00,0xc4,0x8b,}}, + {{0x00,0x00,0xc4,0x88,}, {0x00,0x00,0xc4,0x89,}}, + {{0x00,0x00,0xc4,0x86,}, {0x00,0x00,0xc4,0x87,}}, + {{0x00,0x00,0xc4,0x84,}, {0x00,0x00,0xc4,0x85,}}, + {{0x00,0x00,0xc4,0x82,}, {0x00,0x00,0xc4,0x83,}}, + {{0x00,0x00,0xc4,0x80,}, {0x00,0x00,0xc4,0x81,}}, + {{0x00,0x00,0xc3,0x9e,}, {0x00,0x00,0xc3,0xbe,}}, + {{0x00,0x00,0xc3,0x9d,}, {0x00,0x00,0xc3,0xbd,}}, + {{0x00,0x00,0xc3,0x9c,}, {0x00,0x00,0xc3,0xbc,}}, + {{0x00,0x00,0xc3,0x9b,}, {0x00,0x00,0xc3,0xbb,}}, + {{0x00,0x00,0xc3,0x9a,}, {0x00,0x00,0xc3,0xba,}}, + {{0x00,0x00,0xc3,0x99,}, {0x00,0x00,0xc3,0xb9,}}, + {{0x00,0x00,0xc3,0x98,}, {0x00,0x00,0xc3,0xb8,}}, + {{0x00,0x00,0xc3,0x96,}, {0x00,0x00,0xc3,0xb6,}}, + {{0x00,0x00,0xc3,0x95,}, {0x00,0x00,0xc3,0xb5,}}, + {{0x00,0x00,0xc3,0x94,}, {0x00,0x00,0xc3,0xb4,}}, + {{0x00,0x00,0xc3,0x93,}, {0x00,0x00,0xc3,0xb3,}}, + {{0x00,0x00,0xc3,0x92,}, {0x00,0x00,0xc3,0xb2,}}, + {{0x00,0x00,0xc3,0x91,}, {0x00,0x00,0xc3,0xb1,}}, + {{0x00,0x00,0xc3,0x90,}, {0x00,0x00,0xc3,0xb0,}}, + {{0x00,0x00,0xc3,0x8f,}, {0x00,0x00,0xc3,0xaf,}}, + {{0x00,0x00,0xc3,0x8e,}, {0x00,0x00,0xc3,0xae,}}, + {{0x00,0x00,0xc3,0x8d,}, {0x00,0x00,0xc3,0xad,}}, + {{0x00,0x00,0xc3,0x8c,}, {0x00,0x00,0xc3,0xac,}}, + {{0x00,0x00,0xc3,0x8b,}, {0x00,0x00,0xc3,0xab,}}, + {{0x00,0x00,0xc3,0x8a,}, {0x00,0x00,0xc3,0xaa,}}, + {{0x00,0x00,0xc3,0x89,}, {0x00,0x00,0xc3,0xa9,}}, + {{0x00,0x00,0xc3,0x88,}, {0x00,0x00,0xc3,0xa8,}}, + {{0x00,0x00,0xc3,0x87,}, {0x00,0x00,0xc3,0xa7,}}, + {{0x00,0x00,0xc3,0x86,}, {0x00,0x00,0xc3,0xa6,}}, + {{0x00,0x00,0xc3,0x85,}, {0x00,0x00,0xc3,0xa5,}}, + {{0x00,0x00,0xc3,0x84,}, {0x00,0x00,0xc3,0xa4,}}, + {{0x00,0x00,0xc3,0x83,}, {0x00,0x00,0xc3,0xa3,}}, + {{0x00,0x00,0xc3,0x82,}, {0x00,0x00,0xc3,0xa2,}}, + {{0x00,0x00,0xc3,0x81,}, {0x00,0x00,0xc3,0xa1,}}, + {{0x00,0x00,0xc3,0x80,}, {0x00,0x00,0xc3,0xa0,}}, +}; diff --git a/workbench/libs/codesetslib/src/convertUTF.c b/workbench/libs/codesetslib/src/convertUTF.c new file mode 100755 index 000000000..16a0e9631 --- /dev/null +++ b/workbench/libs/codesetslib/src/convertUTF.c @@ -0,0 +1,1151 @@ +/* + * Copyright 2001-2004 Unicode, Inc. + * + * Disclaimer + * + * This source code is provided as is by Unicode, Inc. No claims are + * made as to fitness for any particular purpose. No warranties of any + * kind are expressed or implied. The recipient agrees to determine + * applicability of information provided. If this file has been + * purchased on magnetic or optical media from Unicode, Inc., the + * sole remedy for any claim will be exchange of defective media + * within 90 days of receipt. + * + * Limitations on Rights to Redistribute This Code + * + * Unicode, Inc. hereby grants the right to freely use the information + * supplied in this file in the creation of products supporting the + * Unicode Standard, and to make copies of this file in any form + * for internal or external distribution as long as this notice + * remains attached. + */ + +/* --------------------------------------------------------------------- + + Conversions between UTF32, UTF-16, and UTF-8. Source code file. + Author: Mark E. Davis, 1994. + Rev History: Rick McGowan, fixes & updates May 2001. + Sept 2001: fixed const & error conditions per + mods suggested by S. Parent & A. Lillich. + June 2002: Tim Dodd added detection and handling of incomplete + source sequences, enhanced error detection, added casts + to eliminate compiler warnings. + July 2003: slight mods to back out aggressive FFFE detection. + Jan 2004: updated switches in from-UTF8 conversions. + Oct 2004: updated to use UNI_MAX_LEGAL_UTF32 in UTF-32 conversions. + + See the header file "ConvertUTF.h" for complete documentation. + +------------------------------------------------------------------------ */ + +#include "lib.h" +#include "convertUTF.h" + +#ifndef __AROS__ +#include "SDI_lib.h" +#endif /* __AROS__ */ + +#include "debug.h" + +/***********************************************************************/ + +static const int halfShift = 10; /* used for shifting by 10 bits */ + +static const UTF32 halfBase = 0x0010000UL; +static const UTF32 halfMask = 0x3FFUL; + +#define UNI_SUR_HIGH_START (UTF32)0xD800 +#define UNI_SUR_HIGH_END (UTF32)0xDBFF +#define UNI_SUR_LOW_START (UTF32)0xDC00 +#define UNI_SUR_LOW_END (UTF32)0xDFFF + +/***********************************************************************/ + +#ifdef __AROS__ +AROS_LH5(ULONG, CodesetsConvertUTF32toUTF16, + AROS_LHA(const UTF32 **, sourceStart, A0), + AROS_LHA(const UTF32 *, sourceEnd, A1), + AROS_LHA(UTF16 **, targetStart, A2), + AROS_LHA(UTF16 *, targetEnd, A3), + AROS_LHA(ULONG, flags, D0), + struct LibraryHeader *, library, 5, Codesets +) +{ + AROS_LIBFUNC_INIT +#else +ULONG LIBFUNC +CodesetsConvertUTF32toUTF16(REG(a0, const UTF32 ** sourceStart), + REG(a1, const UTF32 * sourceEnd), + REG(a2, UTF16 ** targetStart), + REG(a3, UTF16 * targetEnd), + REG(d0, ULONG flags)) +{ +#endif + ULONG result = CSR_ConversionOK; + const UTF32 *source = *sourceStart; + UTF16 *target = *targetStart; + + ENTER(); + + while(source < sourceEnd) + { + UTF32 ch; + + if(target >= targetEnd) + { + result = CSR_TargetExhausted; + break; + } + + ch = *source++; + if(ch <= UNI_MAX_BMP) + { + /* Target is a character <= 0xFFFF */ + /* UTF-16 surrogate values are illegal in UTF-32; 0xffff or 0xfffe are both reserved values */ + if(ch >= UNI_SUR_HIGH_START && ch <= UNI_SUR_LOW_END) + { + if(flags == CSF_StrictConversion) + { + --source; /* return to the illegal value itself */ + result = CSR_SourceIllegal; + break; + } + else + { + *target++ = UNI_REPLACEMENT_CHAR; + } + } + else + { + *target++ = (UTF16)ch; /* normal case */ + } + } + else if(ch > UNI_MAX_LEGAL_UTF32) + { + if(flags == CSF_StrictConversion) + { + result = CSR_SourceIllegal; + } + else + { + *target++ = UNI_REPLACEMENT_CHAR; + } + } + else + { + /* target is a character in range 0xFFFF - 0x10FFFF. */ + if(target + 1 >= targetEnd) + { + --source; /* Back up source pointer! */ + result = CSR_TargetExhausted; + break; + } + ch -= halfBase; + *target++ = (UTF16) ((ch >> halfShift) + UNI_SUR_HIGH_START); + *target++ = (UTF16) ((ch & halfMask) + UNI_SUR_LOW_START); + } + } + + *sourceStart = source; + *targetStart = target; + + RETURN(result); + return result; +#ifdef __AROS__ + AROS_LIBFUNC_EXIT +#endif +} + +#ifndef __AROS__ +LIBSTUB(CodesetsConvertUTF32toUTF16, ULONG, REG(a0, const UTF32 ** sourceStart), + REG(a1, const UTF32 * sourceEnd), + REG(a2, UTF16 ** targetStart), + REG(a3, UTF16 * targetEnd), + REG(d0, ULONG flags)) +{ + #ifdef __MORPHOS__ + return CodesetsConvertUTF32toUTF16((const UTF32 **)REG_A0, (const UTF32 *)REG_A1, (UTF16 **)REG_A2, (UTF16 *)REG_A3, (ULONG)REG_D0); + #else + return CodesetsConvertUTF32toUTF16(sourceStart, sourceEnd, targetStart, targetEnd, flags); + #endif +} +#endif + +/***********************************************************************/ + +#ifdef __AROS__ +AROS_LH5(ULONG, CodesetsConvertUTF16toUTF32, + AROS_LHA(const UTF16 **, sourceStart, A0), + AROS_LHA(const UTF16 *, sourceEnd, A1), + AROS_LHA(UTF32 **, targetStart, A2), + AROS_LHA(UTF32 *, targetEnd, A3), + AROS_LHA(ULONG, flags, D0), + struct LibraryHeader *, library, 6, Codesets +) +{ + AROS_LIBFUNC_INIT +#else +ULONG LIBFUNC +CodesetsConvertUTF16toUTF32(REG(a0, const UTF16 ** sourceStart), + REG(a1, const UTF16 * sourceEnd), + REG(a2, UTF32 ** targetStart), + REG(a3, UTF32 * targetEnd), + REG(d0, ULONG flags)) +{ +#endif + ULONG result = CSR_ConversionOK; + const UTF16 *source = *sourceStart; + UTF32 *target = *targetStart; + UTF32 ch=0, ch2=0; + + ENTER(); + + while(source < sourceEnd) + { + const UTF16 *oldSource = source; /* In case we have to back up because of target overflow. */ + + ch = *source++; + /* If we have a surrogate pair, convert to UTF32 first. */ + if(ch >= UNI_SUR_HIGH_START && ch <= UNI_SUR_HIGH_END) + { + /* If the 16 bits following the high surrogate are in the source buffer... */ + if(source < sourceEnd) + { + ch2 = *source; + + /* If it's a low surrogate, convert to UTF32. */ + if(ch2 >= UNI_SUR_LOW_START && ch2 <= UNI_SUR_LOW_END) + { + ch = ((ch - UNI_SUR_HIGH_START) << halfShift) + + (ch2 - UNI_SUR_LOW_START) + halfBase; + + ++source; + } + else if(flags == CSF_StrictConversion) + { + /* it's an unpaired high surrogate */ + --source; /* return to the illegal value itself */ + result = CSR_SourceIllegal; + + break; + } + } + else + { + /* We don't have the 16 bits following the high surrogate. */ + --source; /* return to the high surrogate */ + result = CSR_SourceExhausted; + + break; + } + } + else if (flags == CSF_StrictConversion) + { + /* UTF-16 surrogate values are illegal in UTF-32 */ + if(ch >= UNI_SUR_LOW_START && ch <= UNI_SUR_LOW_END) + { + --source; /* return to the illegal value itself */ + result = CSR_SourceIllegal; + + break; + } + } + + if(target >= targetEnd) + { + source = oldSource; /* Back up source pointer! */ + result = CSR_TargetExhausted; + + break; + } + *target++ = ch; + } + + *sourceStart = source; + *targetStart = target; + + #if defined(DEBUG) + if(result == CSR_SourceIllegal) + { + E(DBF_UTF, "ConvertUTF16toUTF32 illegal seq 0x%04x,%04x", ch, ch2); + } + #endif + + RETURN(result); + return result; +#ifdef __AROS__ + AROS_LIBFUNC_EXIT +#endif +} + +#ifndef __AROS__ +LIBSTUB(CodesetsConvertUTF16toUTF32, ULONG, REG(a0, const UTF16 ** sourceStart), + REG(a1, const UTF16 * sourceEnd), + REG(a2, UTF32 ** targetStart), + REG(a3, UTF32 * targetEnd), + REG(d0, ULONG flags)) +{ + #ifdef __MORPHOS__ + return CodesetsConvertUTF16toUTF32((const UTF16 **)REG_A0, (const UTF16 *)REG_A1, (UTF32 **)REG_A2, (UTF32 *)REG_A3, (ULONG)REG_D0); + #else + return CodesetsConvertUTF16toUTF32(sourceStart, sourceEnd, targetStart, targetEnd, flags); + #endif +} +#endif + +/***********************************************************************/ + +/* + * Index into the table below with the first byte of a UTF-8 sequence to + * get the number of trailing bytes that are supposed to follow it. + * Note that *legal* UTF-8 values can't have 4 or 5-bytes. The table is + * left as-is for anyone who may want to do such conversion, which was + * allowed in earlier algorithms. + */ +const char trailingBytesForUTF8[256] = { + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5 +}; + +/* + * Magic values subtracted from a buffer value during UTF8 conversion. + * This table contains as many values as there might be trailing bytes + * in a UTF-8 sequence. + */ +static const UTF32 offsetsFromUTF8[6] = { + 0x00000000UL, 0x00003080UL, 0x000E2080UL, + 0x03C82080UL, 0xFA082080UL, 0x82082080UL +}; + +/* + * Once the bits are split out into bytes of UTF-8, this is a mask OR-ed + * into the first byte, depending on how many bytes follow. There are + * as many entries in this table as there are UTF-8 sequence types. + * (I.e., one byte sequence, two byte... etc.). Remember that sequencs + * for *legal* UTF-8 will be 4 or fewer bytes total. + */ +static const UTF8 firstByteMark[7] = { 0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC }; + +/***********************************************************************/ + +/* The interface converts a whole buffer to avoid function-call overhead. + * Constants have been gathered. Loops & conditionals have been removed as + * much as possible for efficiency, in favor of drop-through switches. + * (See "Note A" at the bottom of the file for equivalent code.) + * If your compiler supports it, the "isLegalUTF8" call can be turned + * into an inline function. + */ + +/***********************************************************************/ + +#ifdef __AROS__ +AROS_LH5(ULONG, CodesetsConvertUTF16toUTF8, + AROS_LHA(const UTF16 **, sourceStart, A0), + AROS_LHA(const UTF16 *, sourceEnd, A1), + AROS_LHA(UTF8 **, targetStart, A2), + AROS_LHA(UTF8 *, targetEnd, A3), + AROS_LHA(ULONG, flags, D0), + struct LibraryHeader *, library, 7, Codesets +) +{ + AROS_LIBFUNC_INIT +#else +ULONG LIBFUNC +CodesetsConvertUTF16toUTF8(REG(a0, const UTF16 ** sourceStart), + REG(a1, const UTF16 * sourceEnd), + REG(a2, UTF8 ** targetStart), + REG(a3, UTF8 * targetEnd), + REG(d0, ULONG flags)) +{ +#endif + ULONG result = CSR_ConversionOK; + const UTF16 *source = *sourceStart; + UTF8 *target = *targetStart; + + ENTER(); + + while(source < sourceEnd) + { + UTF32 ch; + unsigned short bytesToWrite = 0; + const UTF32 byteMask = 0xBF; + const UTF32 byteMark = 0x80; + const UTF16 *oldSource = source; /* In case we have to back up because of target overflow. */ + + ch = *source++; + + /* If we have a surrogate pair, convert to UTF32 first. */ + if(ch >= UNI_SUR_HIGH_START && ch <= UNI_SUR_HIGH_END) + { + /* If the 16 bits following the high surrogate are in the source buffer... */ + if(source < sourceEnd) + { + UTF32 ch2 = *source; + + /* If it's a low surrogate, convert to UTF32. */ + if(ch2 >= UNI_SUR_LOW_START && ch2 <= UNI_SUR_LOW_END) + { + ch = ((ch - UNI_SUR_HIGH_START) << halfShift) + + (ch2 - UNI_SUR_LOW_START) + halfBase; + + ++source; + } + else if(flags == CSF_StrictConversion) + { + /* it's an unpaired high surrogate */ + --source; /* return to the illegal value itself */ + result = CSR_SourceIllegal; + break; + } + } + else + { + /* We don't have the 16 bits following the high surrogate. */ + --source; /* return to the high surrogate */ + result = CSR_SourceExhausted; + + break; + } + } + else if(flags == CSF_StrictConversion) + { + /* UTF-16 surrogate values are illegal in UTF-32 */ + if(ch >= UNI_SUR_LOW_START && ch <= UNI_SUR_LOW_END) + { + --source; /* return to the illegal value itself */ + result = CSR_SourceIllegal; + + break; + } + } + /* Figure out how many bytes the result will require */ + if(ch < (UTF32) 0x80) + { + bytesToWrite = 1; + } + else if (ch < (UTF32) 0x800) + { + bytesToWrite = 2; + } + else if (ch < (UTF32) 0x10000) + { + bytesToWrite = 3; + } + else if (ch < (UTF32) 0x110000) + { + bytesToWrite = 4; + } + else + { + bytesToWrite = 3; + ch = UNI_REPLACEMENT_CHAR; + } + + target += bytesToWrite; + if(target > targetEnd) + { + source = oldSource; /* Back up source pointer! */ + target -= bytesToWrite; + result = CSR_TargetExhausted; + + break; + } + switch(bytesToWrite) + { + /* note: everything falls through. */ + case 4: + *--target = (UTF8) ((ch | byteMark) & byteMask); + ch >>= 6; + + case 3: + *--target = (UTF8) ((ch | byteMark) & byteMask); + ch >>= 6; + + case 2: + *--target = (UTF8) ((ch | byteMark) & byteMask); + ch >>= 6; + + case 1: + *--target = (UTF8) (ch | firstByteMark[bytesToWrite]); + } + + target += bytesToWrite; + } + + *sourceStart = source; + *targetStart = target; + + RETURN(result); + return result; +#ifdef __AROS__ + AROS_LIBFUNC_EXIT +#endif +} + +#ifndef __AROS__ +LIBSTUB(CodesetsConvertUTF16toUTF8, ULONG, REG(a0, const UTF16 ** sourceStart), + REG(a1, const UTF16 * sourceEnd), + REG(a2, UTF8 ** targetStart), + REG(a3, UTF8 * targetEnd), + REG(d0, ULONG flags)) +{ + #ifdef __MORPHOS__ + return CodesetsConvertUTF16toUTF8((const UTF16 **)REG_A0, (const UTF16 *)REG_A1, (UTF8 **)REG_A2, (UTF8 *)REG_A3, (ULONG)REG_D0); + #else + return CodesetsConvertUTF16toUTF8(sourceStart, sourceEnd, targetStart, targetEnd, flags); + #endif +} +#endif + +/***********************************************************************/ + +/* + * Utility routine to tell whether a sequence of bytes is legal UTF-8. + * This must be called with the length pre-determined by the first byte. + * If not calling this from ConvertUTF8to*, then the length can be set by: + * length = trailingBytesForUTF8[*source]+1; + * and the sequence is illegal right away if there aren't that many bytes + * available. + * If presented with a length > 4, this returns FALSE. The Unicode + * definition of UTF-8 goes up to 4-byte sequences. + */ + +#ifdef __AROS__ +AROS_LH2(BOOL, CodesetsIsLegalUTF8, + AROS_LHA(const UTF8 *, source, A0), + AROS_LHA(ULONG, length, D0), + struct LibraryHeader *, library, 8, Codesets +) +{ + AROS_LIBFUNC_INIT +#else +BOOL LIBFUNC +CodesetsIsLegalUTF8(REG(a0, const UTF8 * source), + REG(d0, ULONG length)) +{ +#endif + UTF8 a; + const UTF8 *srcptr = source + length; + + ENTER(); + + switch(length) + { + default: + RETURN(FALSE); + return FALSE; + + /* Everything else falls through when "TRUE"... */ + case 4: + if((a = (*--srcptr)) < 0x80 || a > 0xBF) + { + RETURN(FALSE); + return FALSE; + } + + case 3: + if((a = (*--srcptr)) < 0x80 || a > 0xBF) + { + RETURN(FALSE); + return FALSE; + } + + case 2: + if((a = (*--srcptr)) > 0xBF) + { + RETURN(FALSE); + return FALSE; + } + + switch (*source) + { + /* no fall-through in this inner switch */ + case 0xE0: + if(a < 0xA0) + { + RETURN(FALSE); + return FALSE; + } + break; + + case 0xED: + if(a > 0x9F) + { + RETURN(FALSE); + return FALSE; + } + break; + + case 0xF0: + if(a < 0x90) + { + RETURN(FALSE); + return FALSE; + } + break; + + case 0xF4: + if(a > 0x8F) + { + RETURN(FALSE); + return FALSE; + } + break; + + default: + if(a < 0x80) + { + RETURN(FALSE); + return FALSE; + } + } + + case 1: + if(*source >= 0x80 && *source < 0xC2) + { + RETURN(FALSE); + return FALSE; + } + } + + if(*source > 0xF4) + { + RETURN(FALSE); + return FALSE; + } + + RETURN(TRUE); + return TRUE; +#ifdef __AROS__ + AROS_LIBFUNC_EXIT +#endif +} + +#ifndef __AROS__ +LIBSTUB(CodesetsIsLegalUTF8, BOOL, REG(a0, const UTF8 * source), + REG(d0, ULONG length)) +{ + #ifdef __MORPHOS__ + return CodesetsIsLegalUTF8((const UTF8 *)REG_A0,(ULONG)REG_D0); + #else + return CodesetsIsLegalUTF8(source, length); + #endif +} +#endif + +/***********************************************************************/ + +/* + * Exported function to return whether a UTF-8 sequence is legal or not. + * This is not used here; it's just exported. + */ + +#ifdef __AROS__ +AROS_LH2(BOOL, CodesetsIsLegalUTF8Sequence, + AROS_LHA(const UTF8 *, source, A0), + AROS_LHA(const UTF8 *, sourceEnd, D1), + struct LibraryHeader *, library, 9, Codesets +) +{ + AROS_LIBFUNC_INIT +#else +BOOL LIBFUNC +CodesetsIsLegalUTF8Sequence(REG(a0, const UTF8 * source), + REG(a1, const UTF8 * sourceEnd)) +{ +#endif + int length = trailingBytesForUTF8[*source] + 1; + BOOL res = FALSE; + + ENTER(); + + if(source + length > sourceEnd) + { + RETURN(FALSE); + return FALSE; + } + + res = CodesetsIsLegalUTF8(source, length); + + RETURN(res); + return res; +#ifdef __AROS__ + AROS_LIBFUNC_EXIT +#endif +} + +#ifndef __AROS__ +LIBSTUB(CodesetsIsLegalUTF8Sequence, BOOL, REG(a0, const UTF8 * source), + REG(a1, const UTF8 * sourceEnd)) +{ + #ifdef __MORPHOS__ + return CodesetsIsLegalUTF8Sequence((const UTF8 *)REG_A0,(const UTF8 *)REG_A1); + #else + return CodesetsIsLegalUTF8Sequence(source, sourceEnd); + #endif +} +#endif + +/***********************************************************************/ + +#ifdef __AROS__ +AROS_LH5(ULONG, CodesetsConvertUTF8toUTF16, + AROS_LHA(const UTF8 **, sourceStart, A0), + AROS_LHA(const UTF8 *, sourceEnd, A1), + AROS_LHA(UTF16 **, targetStart, A2), + AROS_LHA(UTF16 *, targetEnd, A3), + AROS_LHA(ULONG, flags, D0), + struct LibraryHeader *, library, 10, Codesets +) +{ + AROS_LIBFUNC_INIT +#else +ULONG LIBFUNC +CodesetsConvertUTF8toUTF16(REG(a0, const UTF8 ** sourceStart), + REG(a1, const UTF8 * sourceEnd), + REG(a2, UTF16 ** targetStart), + REG(a3, UTF16 * targetEnd), + REG(d0, ULONG flags)) +{ +#endif + ULONG result = CSR_ConversionOK; + const UTF8 *source = *sourceStart; + UTF16 *target = *targetStart; + + ENTER(); + + while(source < sourceEnd) + { + UTF32 ch = 0; + unsigned short extraBytesToRead = trailingBytesForUTF8[*source]; + + if(source + extraBytesToRead >= sourceEnd) + { + result = CSR_SourceExhausted; + break; + } + + /* Do this check whether lenient or strict */ + if(!CodesetsIsLegalUTF8 (source, extraBytesToRead + 1)) + { + result = CSR_SourceIllegal; + break; + } + + /* + * The cases all fall through. See "Note A" below. + */ + switch (extraBytesToRead) + { + case 5: + ch += *source++; + ch <<= 6; /* remember, illegal UTF-8 */ + + case 4: + ch += *source++; + ch <<= 6; /* remember, illegal UTF-8 */ + + case 3: + ch += *source++; + ch <<= 6; + + case 2: + ch += *source++; + ch <<= 6; + + case 1: + ch += *source++; + ch <<= 6; + + case 0: + ch += *source++; + } + + ch -= offsetsFromUTF8[extraBytesToRead]; + + if(target >= targetEnd) + { + source -= (extraBytesToRead + 1); /* Back up source pointer! */ + result = CSR_TargetExhausted; + + break; + } + + if(ch <= UNI_MAX_BMP) + { + /* Target is a character <= 0xFFFF */ + /* UTF-16 surrogate values are illegal in UTF-32 */ + if(ch >= UNI_SUR_HIGH_START && ch <= UNI_SUR_LOW_END) + { + if(flags == CSF_StrictConversion) + { + source -= (extraBytesToRead + 1); /* return to the illegal value itself */ + result = CSR_SourceIllegal; + + break; + } + else + { + *target++ = UNI_REPLACEMENT_CHAR; + } + } + else + { + *target++ = (UTF16) ch; /* normal case */ + } + } + else if(ch > UNI_MAX_UTF16) + { + if(flags == CSF_StrictConversion) + { + result = CSR_SourceIllegal; + source -= (extraBytesToRead + 1); /* return to the start */ + + break; /* Bail out; shouldn't continue */ + } + else + { + *target++ = UNI_REPLACEMENT_CHAR; + } + } + else + { + /* target is a character in range 0xFFFF - 0x10FFFF. */ + if(target + 1 >= targetEnd) + { + source -= (extraBytesToRead + 1); /* Back up source pointer! */ + result = CSR_TargetExhausted; + + break; + } + + ch -= halfBase; + *target++ = (UTF16) ((ch >> halfShift) + UNI_SUR_HIGH_START); + *target++ = (UTF16) ((ch & halfMask) + UNI_SUR_LOW_START); + } + } + + *sourceStart = source; + *targetStart = target; + + RETURN(result); + return result; +#ifdef __AROS__ + AROS_LIBFUNC_EXIT +#endif +} + +#ifndef __AROS__ +LIBSTUB(CodesetsConvertUTF8toUTF16, ULONG, REG(a0, const UTF8 ** sourceStart), + REG(a1, const UTF8 * sourceEnd), + REG(a2, UTF16 ** targetStart), + REG(a3, UTF16 * targetEnd), + REG(d0, ULONG flags)) +{ + #ifdef __MORPHOS__ + return CodesetsConvertUTF8toUTF16((const UTF8 **)REG_A0, (const UTF8 *)REG_A1, (UTF16 **)REG_A2, (UTF16 *)REG_A3, (ULONG)REG_D0); + #else + return CodesetsConvertUTF8toUTF16(sourceStart, sourceEnd, targetStart, targetEnd, flags); + #endif +} +#endif + +/***********************************************************************/ + +#ifdef __AROS__ +AROS_LH5(ULONG, CodesetsConvertUTF32toUTF8, + AROS_LHA(const UTF32 **, sourceStart, A0), + AROS_LHA(const UTF32 *, sourceEnd, A1), + AROS_LHA(UTF8 **, targetStart, A2), + AROS_LHA(UTF8 *, targetEnd, A3), + AROS_LHA(ULONG, flags, D0), + struct LibraryHeader *, library, 11, Codesets +) +{ + AROS_LIBFUNC_INIT +#else +ULONG LIBFUNC +CodesetsConvertUTF32toUTF8(REG(a0, const UTF32 ** sourceStart), + REG(a1, const UTF32 * sourceEnd), + REG(a2, UTF8 ** targetStart), + REG(a3, UTF8 * targetEnd), + REG(d0, ULONG flags)) +{ +#endif + ULONG result = CSR_ConversionOK; + const UTF32 *source = *sourceStart; + UTF8 *target = *targetStart; + + ENTER(); + + while(source < sourceEnd) + { + UTF32 ch; + unsigned short bytesToWrite = 0; + const UTF32 byteMask = 0xBF; + const UTF32 byteMark = 0x80; + + ch = *source++; + + if(flags == CSF_StrictConversion) + { + /* UTF-16 surrogate values are illegal in UTF-32 */ + if(ch >= UNI_SUR_HIGH_START && ch <= UNI_SUR_LOW_END) + { + --source; /* return to the illegal value itself */ + result = CSR_SourceIllegal; + + break; + } + } + + /* + * Figure out how many bytes the result will require. Turn any + * illegally large UTF32 things (> Plane 17) into replacement chars. + */ + if(ch < (UTF32) 0x80) + { + bytesToWrite = 1; + } + else if(ch < (UTF32) 0x800) + { + bytesToWrite = 2; + } + else if(ch < (UTF32) 0x10000) + { + bytesToWrite = 3; + } + else if(ch <= UNI_MAX_LEGAL_UTF32) + { + bytesToWrite = 4; + } + else + { + bytesToWrite = 3; + ch = UNI_REPLACEMENT_CHAR; + result = CSR_SourceIllegal; + } + + target += bytesToWrite; + if(target > targetEnd) + { + --source; /* Back up source pointer! */ + target -= bytesToWrite; + result = CSR_TargetExhausted; + + break; + } + switch(bytesToWrite) + { + /* note: everything falls through. */ + case 4: + *--target = (UTF8) ((ch | byteMark) & byteMask); + ch >>= 6; + + case 3: + *--target = (UTF8) ((ch | byteMark) & byteMask); + ch >>= 6; + + case 2: + *--target = (UTF8) ((ch | byteMark) & byteMask); + ch >>= 6; + + case 1: + *--target = (UTF8) (ch | firstByteMark[bytesToWrite]); + } + + target += bytesToWrite; + } + + *sourceStart = source; + *targetStart = target; + + RETURN(result); + return result; +#ifdef __AROS__ + AROS_LIBFUNC_EXIT +#endif +} + +#ifndef __AROS__ +LIBSTUB(CodesetsConvertUTF32toUTF8, ULONG, REG(a0, const UTF32 ** sourceStart), + REG(a1, const UTF32 * sourceEnd), + REG(a2, UTF8 ** targetStart), + REG(a3, UTF8 * targetEnd), + REG(d0, ULONG flags)) +{ + #ifdef __MORPHOS__ + return CodesetsConvertUTF32toUTF8((const UTF32 **)REG_A0, (const UTF32 *)REG_A1, (UTF8 **)REG_A2, (UTF8 *)REG_A3, (ULONG)REG_D0); + #else + return CodesetsConvertUTF32toUTF8(sourceStart, sourceEnd, targetStart, targetEnd, flags); + #endif +} +#endif + +/***********************************************************************/ + +#ifdef __AROS__ +AROS_LH5(ULONG, CodesetsConvertUTF8toUTF32, + AROS_LHA(const UTF8 **, sourceStart, A0), + AROS_LHA(const UTF8 *, sourceEnd, A1), + AROS_LHA(UTF32 **, targetStart, A2), + AROS_LHA(UTF32 *, targetEnd, A3), + AROS_LHA(ULONG, flags, D0), + struct LibraryHeader *, library, 12, Codesets +) +{ + AROS_LIBFUNC_INIT +#else +ULONG LIBFUNC +CodesetsConvertUTF8toUTF32(REG(a0, const UTF8 ** sourceStart), + REG(a1, const UTF8 * sourceEnd), + REG(a2, UTF32 ** targetStart), + REG(a3, UTF32 * targetEnd), + REG(d0, ULONG flags)) +{ +#endif + ULONG result = CSR_ConversionOK; + const UTF8 *source = *sourceStart; + UTF32 *target = *targetStart; + + ENTER(); + + while(source < sourceEnd) + { + UTF32 ch = 0; + unsigned short extraBytesToRead = trailingBytesForUTF8[*source]; + + if(source + extraBytesToRead >= sourceEnd) + { + result = CSR_SourceExhausted; + break; + } + + /* Do this check whether lenient or strict */ + if(!CodesetsIsLegalUTF8(source, extraBytesToRead + 1)) + { + result = CSR_SourceIllegal; + break; + } + + /* + * The cases all fall through. See "Note A" below. + */ + switch (extraBytesToRead) + { + case 5: + ch += *source++; + ch <<= 6; + + case 4: + ch += *source++; + ch <<= 6; + + case 3: + ch += *source++; + ch <<= 6; + + case 2: + ch += *source++; + ch <<= 6; + + case 1: + ch += *source++; + ch <<= 6; + + case 0: + ch += *source++; + } + + ch -= offsetsFromUTF8[extraBytesToRead]; + + if(target >= targetEnd) + { + source -= (extraBytesToRead + 1); /* Back up the source pointer! */ + result = CSR_TargetExhausted; + + break; + } + + if(ch <= UNI_MAX_LEGAL_UTF32) + { + /* + * UTF-16 surrogate values are illegal in UTF-32, and anything + * over Plane 17 (> 0x10FFFF) is illegal. + */ + if(ch >= UNI_SUR_HIGH_START && ch <= UNI_SUR_LOW_END) + { + if(flags == CSF_StrictConversion) + { + source -= (extraBytesToRead + 1); /* return to the illegal value itself */ + result = CSR_SourceIllegal; + + break; + } + else + { + *target++ = UNI_REPLACEMENT_CHAR; + } + } + else + { + *target++ = ch; + } + } + else + { + /* i.e., ch > UNI_MAX_LEGAL_UTF32 */ + result = CSR_SourceIllegal; + *target++ = UNI_REPLACEMENT_CHAR; + } + } + + *sourceStart = source; + *targetStart = target; + + RETURN(result); + return result; +#ifdef __AROS__ + AROS_LIBFUNC_EXIT +#endif +} + +#ifndef __AROS__ +LIBSTUB(CodesetsConvertUTF8toUTF32, ULONG, REG(a0, const UTF8 ** sourceStart), + REG(a1, const UTF8 * sourceEnd), + REG(a2, UTF32 ** targetStart), + REG(a3, UTF32 * targetEnd), + REG(d0, ULONG flags)) +{ + #ifdef __MORPHOS__ + return CodesetsConvertUTF8toUTF32((const UTF8 **)REG_A0, (const UTF8 *)REG_A1, (UTF32 **)REG_A2, (UTF32 *)REG_A3, (ULONG)REG_D0); + #else + return CodesetsConvertUTF8toUTF32(sourceStart, sourceEnd, targetStart, targetEnd, flags); + #endif +} +#endif + +/*********************************************************************** + + Note A. + The fall-through switches in UTF-8 reading code save a + temp variable, some decrements & conditionals. The switches + are equivalent to the following loop: + { + int tmpBytesToRead = extraBytesToRead+1; + do { + ch += *source++; + --tmpBytesToRead; + if (tmpBytesToRead) ch <<= 6; + } while (tmpBytesToRead > 0); + } + In UTF-8 writing code, the switches on "bytesToWrite" are + similarly unrolled loops. + +***********************************************************************/ diff --git a/workbench/libs/codesetslib/src/convertUTF.h b/workbench/libs/codesetslib/src/convertUTF.h new file mode 100755 index 000000000..6007871c3 --- /dev/null +++ b/workbench/libs/codesetslib/src/convertUTF.h @@ -0,0 +1,103 @@ +/* + * Copyright 2001-2004 Unicode, Inc. + * + * Disclaimer + * + * This source code is provided as is by Unicode, Inc. No claims are + * made as to fitness for any particular purpose. No warranties of any + * kind are expressed or implied. The recipient agrees to determine + * applicability of information provided. If this file has been + * purchased on magnetic or optical media from Unicode, Inc., the + * sole remedy for any claim will be exchange of defective media + * within 90 days of receipt. + * + * Limitations on Rights to Redistribute This Code + * + * Unicode, Inc. hereby grants the right to freely use the information + * supplied in this file in the creation of products supporting the + * Unicode Standard, and to make copies of this file in any form + * for internal or external distribution as long as this notice + * remains attached. + */ + +/* --------------------------------------------------------------------- + + Conversions between UTF32, UTF-16, and UTF-8. Header file. + + Several funtions are included here, forming a complete set of + conversions between the three formats. UTF-7 is not included + here, but is handled in a separate source file. + + Each of these routines takes pointers to input buffers and output + buffers. The input buffers are const. + + Each routine converts the text between *sourceStart and sourceEnd, + putting the result into the buffer between *targetStart and + targetEnd. Note: the end pointers are *after* the last item: e.g. + *(sourceEnd - 1) is the last item. + + The return result indicates whether the conversion was successful, + and if not, whether the problem was in the source or target buffers. + (Only the first encountered problem is indicated.) + + After the conversion, *sourceStart and *targetStart are both + updated to point to the end of last text successfully converted in + the respective buffers. + + Input parameters: + sourceStart - pointer to a pointer to the source buffer. + The contents of this are modified on return so that + it points at the next thing to be converted. + targetStart - similarly, pointer to pointer to the target buffer. + sourceEnd, targetEnd - respectively pointers to the ends of the + two buffers, for overflow checking only. + + These conversion functions take a ConversionFlags argument. When this + flag is set to strict, both irregular sequences and isolated surrogates + will cause an error. When the flag is set to lenient, both irregular + sequences and isolated surrogates are converted. + + Whether the flag is strict or lenient, all illegal sequences will cause + an error return. This includes sequences such as: , , + or in UTF-8, and values above 0x10FFFF in UTF-32. Conformant code + must check for illegal sequences. + + When the flag is set to lenient, characters over 0x10FFFF are converted + to the replacement character; otherwise (when the flag is set to strict) + they constitute an error. + + Output parameters: + The value "sourceIllegal" is returned from some routines if the input + sequence is malformed. When "sourceIllegal" is returned, the source + value will point to the illegal value that caused the problem. E.g., + in UTF-8 when a sequence is malformed, it points to the start of the + malformed sequence. + + Author: Mark E. Davis, 1994. + Rev History: Rick McGowan, fixes & updates May 2001. + Fixes & updates, Sept 2001. + +------------------------------------------------------------------------ */ + +/*********************************************************************** + + The following 4 definitions are compiler-specific. + The C standard does not guarantee that wchar_t has at least + 16 bits, so wchar_t is no less portable than unsigned short! + All should be unsigned values to avoid sign extension during + bit mask & shift operations. + +***********************************************************************/ + +/* Some fundamental constants */ +#define UNI_REPLACEMENT_CHAR ((UTF32)0x0000FFFD) +#define UNI_MAX_BMP ((UTF32)0x0000FFFF) +#define UNI_MAX_UTF16 ((UTF32)0x0010FFFF) +#define UNI_MAX_UTF32 ((UTF32)0x7FFFFFFF) +#define UNI_MAX_LEGAL_UTF32 ((UTF32)0x0010FFFF) + +/***********************************************************************/ + +extern const char trailingBytesForUTF8[]; + +/***********************************************************************/ diff --git a/workbench/libs/codesetslib/src/debug.c b/workbench/libs/codesetslib/src/debug.c new file mode 100644 index 000000000..16fa04f02 --- /dev/null +++ b/workbench/libs/codesetslib/src/debug.c @@ -0,0 +1,409 @@ +/*************************************************************************** + + codesets.library - Amiga shared library for handling different codesets + Copyright (C) 2001-2005 by Alfonso [alfie] Ranieri . + Copyright (C) 2005-2007 by codesets.library Open Source Team + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + codesets.library project: http://sourceforge.net/projects/codesetslib/ + + $Id$ + +***************************************************************************/ + +#ifdef DEBUG + +#include +#include +#include +#include + +#include +#include +#include + +#include "version.h" + +#include "debug.h" +#include "macros.h" + +// our static variables with default values +static int indent_level = 0; +static BOOL ansi_output = FALSE; +static ULONG debug_flags = DBF_ALWAYS | DBF_STARTUP; // default debug flags +static ULONG debug_classes = DBC_ERROR | DBC_DEBUG | DBC_WARNING | DBC_ASSERT | DBC_REPORT; // default debug classes + +/****************************************************************************/ + +void SetupDebug(void) +{ + char var[256]; + + kprintf("** codesets.library %s (%s) startup ****************************\n", LIB_REV_STRING, LIB_DATE); + kprintf("Initializing runtime debugging:\n"); + + if(GetVar("codesets.library.debug", var, sizeof(var), 0) > 0) + { + char *s = var; + + // static list of our debugging classes tokens. + // in the yamdebug variable these classes always start with a @ + static struct { const char *token; unsigned long flag; } dbclasses[] = + { + { "ctrace", DBC_CTRACE }, + { "report", DBC_REPORT }, + { "assert", DBC_ASSERT }, + { "timeval", DBC_TIMEVAL }, + { "debug", DBC_DEBUG }, + { "error", DBC_ERROR }, + { "warning", DBC_WARNING }, + { "all", DBC_ALL }, + { NULL, 0 } + }; + + static struct { const char *token; unsigned long flag; } dbflags[] = + { + { "always", DBF_ALWAYS }, + { "startup", DBF_STARTUP }, + { "utf", DBF_UTF }, + { "all", DBF_ALL }, + { NULL, 0 } + }; + + // we parse the env variable token-wise + while(*s) + { + ULONG i; + char *e; + + if((e = strpbrk(s, " ,;")) == NULL) + e = s+strlen(s); + + // check if the token is class definition or + // just a flag definition + if(s[0] == '@') + { + // skip the '@' + s++; + // check if this call is a negation or not + if(s[0] == '!') + { + // skip the '!' + s++; + // search for the token and clear the flag + for(i=0; dbclasses[i].token; i++) + { + if(strnicmp(s, dbclasses[i].token, strlen(dbclasses[i].token)) == 0) + { + kprintf("clear '%s' debug class flag.\n", dbclasses[i].token); + CLEAR_FLAG(debug_classes, dbclasses[i].flag); + } + } + } + else + { + // search for the token and set the flag + for(i=0; dbclasses[i].token; i++) + { + if(strnicmp(s, dbclasses[i].token, strlen(dbclasses[i].token)) == 0) + { + kprintf("set '%s' debug class flag\n", dbclasses[i].token); + SET_FLAG(debug_classes, dbclasses[i].flag); + } + } + } + } + else + { + // check if this call is a negation or not + if(s[0] == '!') + { + // skip the '!' + s++; + for(i=0; dbflags[i].token; i++) + { + if(strnicmp(s, dbflags[i].token, strlen(dbflags[i].token)) == 0) + { + kprintf("clear '%s' debug flag\n", dbflags[i].token); + CLEAR_FLAG(debug_flags, dbflags[i].flag); + } + } + } + else + { + // check if the token was "ansi" and if so enable the ANSI color + // output + if(strnicmp(s, "ansi", 4) == 0) + { + kprintf("ansi output enabled\n"); + ansi_output = TRUE; + } + else + { + for(i=0; dbflags[i].token; i++) + { + if(strnicmp(s, dbflags[i].token, strlen(dbflags[i].token)) == 0) + { + kprintf("set '%s' debug flag\n", dbflags[i].token); + SET_FLAG(debug_flags, dbflags[i].flag); + } + } + } + } + } + + // set the next start to our last search + if(*e) + s = ++e; + else + break; + } + } + + kprintf("set debug classes/flags (env:codesets.library.debug): %08lx/%08lx\n", debug_classes, debug_flags); + kprintf("** Normal processing follows ***************************************\n"); +} + +/****************************************************************************/ + +// define variables for using ANSI colors in our debugging scheme +#define ANSI_ESC_CLR "\033[0m" +#define ANSI_ESC_BOLD "\033[1m" +#define ANSI_ESC_UNDERLINE "\033[4m" +#define ANSI_ESC_BLINK "\033[5m" +#define ANSI_ESC_REVERSE "\033[7m" +#define ANSI_ESC_INVISIBLE "\033[8m" +#define ANSI_ESC_FG_BLACK "\033[0;30m" +#define ANSI_ESC_FG_RED "\033[0;31m" +#define ANSI_ESC_FG_GREEN "\033[0;32m" +#define ANSI_ESC_FG_BROWN "\033[0;33m" +#define ANSI_ESC_FG_BLUE "\033[0;34m" +#define ANSI_ESC_FG_PURPLE "\033[0;35m" +#define ANSI_ESC_FG_CYAN "\033[0;36m" +#define ANSI_ESC_FG_LGRAY "\033[0;37m" +#define ANSI_ESC_FG_DGRAY "\033[1;30m" +#define ANSI_ESC_FG_LRED "\033[1;31m" +#define ANSI_ESC_FG_LGREEN "\033[1;32m" +#define ANSI_ESC_FG_YELLOW "\033[1;33m" +#define ANSI_ESC_FG_LBLUE "\033[1;34m" +#define ANSI_ESC_FG_LPURPLE "\033[1;35m" +#define ANSI_ESC_FG_LCYAN "\033[1;36m" +#define ANSI_ESC_FG_WHITE "\033[1;37m" +#define ANSI_ESC_BG "\033[0;4" // background esc-squ start with 4x +#define ANSI_ESC_BG_BLACK "\033[0;40m" +#define ANSI_ESC_BG_RED "\033[0;41m" +#define ANSI_ESC_BG_GREEN "\033[0;42m" +#define ANSI_ESC_BG_BROWN "\033[0;43m" +#define ANSI_ESC_BG_BLUE "\033[0;44m" +#define ANSI_ESC_BG_PURPLE "\033[0;45m" +#define ANSI_ESC_BG_CYAN "\033[0;46m" +#define ANSI_ESC_BG_LGRAY "\033[0;47m" + +/****************************************************************************/ + +INLINE void _INDENT(void) +{ + int i; + for(i=0; i < indent_level; i++) + kprintf(" "); +} + +/****************************************************************************/ + +void _ENTER(unsigned long dclass, const char *file, int line, const char *function) +{ + if(isFlagSet(debug_classes, dclass)) + { + _INDENT(); + if(ansi_output) + kprintf("%s%s:%ld:Entering %s%s\n", ANSI_ESC_FG_BROWN, file, line, function, ANSI_ESC_CLR); + else + kprintf("%s:%ld:Entering %s\n", file, line, function); + } + + indent_level++; +} + +void _LEAVE(unsigned long dclass, const char *file, int line, const char *function) +{ + indent_level--; + + if(isFlagSet(debug_classes, dclass)) + { + _INDENT(); + if(ansi_output) + kprintf("%s%s:%ld:Leaving %s%s\n", ANSI_ESC_FG_BROWN, file, line, function, ANSI_ESC_CLR); + else + kprintf("%s:%ld:Leaving %s\n", file, line, function); + } +} + +void _RETURN(unsigned long dclass, const char *file, int line, const char *function, unsigned long result) +{ + indent_level--; + + if(isFlagSet(debug_classes, dclass)) + { + _INDENT(); + if(ansi_output) + kprintf("%s%s:%ld:Leaving %s (result 0x%08lx, %ld)%s\n", ANSI_ESC_FG_BROWN, file, line, function, result, result, ANSI_ESC_CLR); + else + kprintf("%s:%ld:Leaving %s (result 0x%08lx, %ld)\n", file, line, function, result, result); + } +} + +/****************************************************************************/ + +void _SHOWVALUE(unsigned long dclass, unsigned long dflags, unsigned long value, int size, const char *name, const char *file, int line) +{ + if(isFlagSet(debug_classes, dclass) && + isFlagSet(debug_flags, dflags)) + { + const char *fmt; + + switch(size) + { + case 1: + fmt = "%s:%ld:%s = %ld, 0x%02lx"; + break; + + case 2: + fmt = "%s:%ld:%s = %ld, 0x%04lx"; + break; + + default: + fmt = "%s:%ld:%s = %ld, 0x%08lx"; + break; + } + + _INDENT(); + + if(ansi_output) + kprintf(ANSI_ESC_FG_GREEN); + + kprintf(fmt, file, line, name, value, value); + + if(size == 1 && value < 256) + { + if(value < ' ' || (value >= 127 && value < 160)) + kprintf(", '\\x%02lx'", value); + else + kprintf(", '%lc'", value); + } + + if(ansi_output) + kprintf("%s\n", ANSI_ESC_CLR); + else + kprintf("\n"); + } +} + +/****************************************************************************/ + +void _SHOWPOINTER(unsigned long dclass, unsigned long dflags, const void *p, const char *name, const char *file, int line) +{ + if(isFlagSet(debug_classes, dclass) && + isFlagSet(debug_flags, dflags)) + { + const char *fmt; + + _INDENT(); + + if(p != NULL) + fmt = "%s:%ld:%s = 0x%08lx\n"; + else + fmt = "%s:%ld:%s = NULL\n"; + + if(ansi_output) + { + kprintf(ANSI_ESC_FG_GREEN); + kprintf(fmt, file, line, name, p); + kprintf(ANSI_ESC_CLR); + } + else + kprintf(fmt, file, line, name, p); + } +} + +/****************************************************************************/ + +void _SHOWSTRING(unsigned long dclass, unsigned long dflags, const char *string, const char *name, const char *file, int line) +{ + if(isFlagSet(debug_classes, dclass) && + isFlagSet(debug_flags, dflags)) + { + _INDENT(); + + if(ansi_output) + kprintf("%s%s:%ld:%s = 0x%08lx \"%s\"%s\n", ANSI_ESC_FG_GREEN, file, line, name, string, string, ANSI_ESC_CLR); + else + kprintf("%s:%ld:%s = 0x%08lx \"%s\"\n", file, line, name, string, string); + } +} + +/****************************************************************************/ + +void _SHOWMSG(unsigned long dclass, unsigned long dflags, const char *msg, const char *file, int line) +{ + if(isFlagSet(debug_classes, dclass) && + isFlagSet(debug_flags, dflags)) + { + _INDENT(); + + if(ansi_output) + kprintf("%s%s:%ld:%s%s\n", ANSI_ESC_FG_GREEN, file, line, msg, ANSI_ESC_CLR); + else + kprintf("%s:%ld:%s\n", file, line, msg); + } +} + +/****************************************************************************/ + +void _DPRINTF(unsigned long dclass, unsigned long dflags, const char *file, int line, const char *format, ...) +{ + if((isFlagSet(debug_classes, dclass) && isFlagSet(debug_flags, dflags)) || + (isFlagSet(dclass, DBC_ERROR) || isFlagSet(dclass, DBC_WARNING))) + { + va_list args; + static char buf[1024]; + + _INDENT(); + + va_start(args, format); + vsnprintf(buf, 1024, format, args); + va_end(args); + + if(ansi_output) + { + const char *highlight = ANSI_ESC_FG_GREEN; + + switch(dclass) + { + case DBC_CTRACE: highlight = ANSI_ESC_FG_BROWN; break; + case DBC_REPORT: highlight = ANSI_ESC_FG_GREEN; break; + case DBC_ASSERT: highlight = ANSI_ESC_FG_RED; break; + case DBC_TIMEVAL: highlight = ANSI_ESC_FG_GREEN; break; + case DBC_DEBUG: highlight = ANSI_ESC_FG_GREEN; break; + case DBC_ERROR: highlight = ANSI_ESC_FG_RED; break; + case DBC_WARNING: highlight = ANSI_ESC_FG_PURPLE;break; + } + + kprintf("%s%s:%ld:%s%s\n", highlight, file, line, buf, ANSI_ESC_CLR); + } + else + kprintf("%s:%ld:%s\n", file, line, buf); + } +} + +/****************************************************************************/ + +#endif diff --git a/workbench/libs/codesetslib/src/debug.h b/workbench/libs/codesetslib/src/debug.h new file mode 100644 index 000000000..9c54f2883 --- /dev/null +++ b/workbench/libs/codesetslib/src/debug.h @@ -0,0 +1,137 @@ +/*************************************************************************** + + codesets.library - Amiga shared library for handling different codesets + Copyright (C) 2001-2005 by Alfonso [alfie] Ranieri . + Copyright (C) 2005-2007 by codesets.library Open Source Team + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + codesets.library project: http://sourceforge.net/projects/codesetslib/ + + $Id$ + +***************************************************************************/ + +#ifndef DEBUG_H +#define DEBUG_H + +// first we make sure all previously defined symbols are undefined now so +// that no other debug system interferes with ours. +#undef ENTER +#undef LEAVE +#undef RETURN +#undef SHOWVALUE +#undef SHOWPOINTER +#undef SHOWSTRING +#undef SHOWMSG +#undef STARTCLOCK +#undef STOPCLOCK +#undef D +#undef E +#undef W +#undef ASSERT + +#if defined(DEBUG) + +#ifndef EXEC_TYPES_H +#include +#endif + +#if defined(__amigaos4__) + #include + #ifdef __USE_INLINE__ + #ifdef DebugPrintF + #undef DebugPrintF + #endif + #endif + #ifndef kprintf + #define kprintf(format, args...) ((struct ExecIFace *)((*(struct ExecBase **)4)->MainInterface))->DebugPrintF(format, ## args) + #endif +#elif defined(__MORPHOS__) + #include + #include + #define KPutFmt(format, args) VNewRawDoFmt(format, (APTR)RAWFMTFUNC_SERIAL, NULL, args) + void kprintf(const char *formatString,...); +#else + void kprintf(const char *formatString,...); +#endif + +// debug classes +#define DBC_CTRACE (1<<0) // call tracing (ENTER/LEAVE etc.) +#define DBC_REPORT (1<<1) // reports (SHOWVALUE/SHOWSTRING etc.) +#define DBC_ASSERT (1<<2) // asserts (ASSERT) +#define DBC_TIMEVAL (1<<3) // time evaluations (STARTCLOCK/STOPCLOCK) +#define DBC_DEBUG (1<<4) // debugging output D() +#define DBC_ERROR (1<<5) // error output E() +#define DBC_WARNING (1<<6) // warning output W() +#define DBC_ALL 0xffffffff + +// debug flags +#define DBF_ALWAYS (1<<0) +#define DBF_STARTUP (1<<1) // for startup/shutdown events +#define DBF_UTF (1<<2) // for the UTF conversion routines. +#define DBF_ALL 0xffffffff + +void SetupDebug(void); + +void _ENTER(unsigned long dclass, const char *file, int line, const char *function); +void _LEAVE(unsigned long dclass, const char *file, int line, const char *function); +void _RETURN(unsigned long dclass, const char *file, int line, const char *function, unsigned long result); +void _SHOWVALUE(unsigned long dclass, unsigned long dflags, unsigned long value, int size, const char *name, const char *file, int line); +void _SHOWPOINTER(unsigned long dclass, unsigned long dflags, const void *p, const char *name, const char *file, int line); +void _SHOWSTRING(unsigned long dclass, unsigned long dflags, const char *string, const char *name, const char *file, int line); +void _SHOWMSG(unsigned long dclass, unsigned long dflags, const char *msg, const char *file, int line); +void _DPRINTF(unsigned long dclass, unsigned long dflags, const char *file, int line, const char *format, ...); + +// Core class information class messages +#define ENTER() _ENTER(DBC_CTRACE, __FILE__, __LINE__, __FUNCTION__) +#define LEAVE() _LEAVE(DBC_CTRACE, __FILE__, __LINE__, __FUNCTION__) +#define RETURN(r) _RETURN(DBC_CTRACE, __FILE__, __LINE__, __FUNCTION__, (long)r) +#define SHOWVALUE(f, v) _SHOWVALUE(DBC_REPORT, f, (long)v, sizeof(v), #v, __FILE__, __LINE__) +#define SHOWPOINTER(f, p) _SHOWPOINTER(DBC_REPORT, f, p, #p, __FILE__, __LINE__) +#define SHOWSTRING(f, s) _SHOWSTRING(DBC_REPORT, f, s, #s, __FILE__, __LINE__) +#define SHOWMSG(f, m) _SHOWMSG(DBC_REPORT, f, m, __FILE__, __LINE__) +#define D(f, s, vargs...) _DPRINTF(DBC_DEBUG, f, __FILE__, __LINE__, s, ## vargs) +#define E(f, s, vargs...) _DPRINTF(DBC_ERROR, f, __FILE__, __LINE__, s, ## vargs) +#define W(f, s, vargs...) _DPRINTF(DBC_WARNING, f, __FILE__, __LINE__, s, ## vargs) +#define ASSERT(expression) \ + ((void) \ + ((expression) ? 0 : \ + ( \ + _DPRINTF(DBC_ASSERT, \ + DBF_ALWAYS, \ + __FILE__, \ + __LINE__, \ + "failed assertion '%s'", \ + #expression), \ + abort(), \ + 0 \ + ) \ + ) \ + ) + +#else // DEBUG + +#define ENTER() ((void)0) +#define LEAVE() ((void)0) +#define RETURN(r) ((void)0) +#define SHOWVALUE(f, v) ((void)0) +#define SHOWPOINTER(f, p) ((void)0) +#define SHOWSTRING(f, s) ((void)0) +#define SHOWMSG(f, m) ((void)0) +#define D(f, s, vargs...) ((void)0) +#define E(f, s, vargs...) ((void)0) +#define W(f, s, vargs...) ((void)0) +#define ASSERT(expression) ((void)0) + +#endif // DEBUG + +#endif // DEBUG_H diff --git a/workbench/libs/codesetslib/src/init.c b/workbench/libs/codesetslib/src/init.c new file mode 100755 index 000000000..b2b1cf415 --- /dev/null +++ b/workbench/libs/codesetslib/src/init.c @@ -0,0 +1,342 @@ +/*************************************************************************** + + codesets.library - Amiga shared library for handling different codesets + Copyright (C) 2001-2005 by Alfonso [alfie] Ranieri . + Copyright (C) 2005-2007 by codesets.library Open Source Team + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + codesets.library project: http://sourceforge.net/projects/codesetslib/ + + $Id$ + +***************************************************************************/ + +#include "lib.h" + +#include +#include +#include +#include +#include +#include +#include + +#include "debug.h" + +#if defined(__amigaos4__) +struct Library *DOSBase = NULL; +struct Library *UtilityBase = NULL; +struct Library *LocaleBase = NULL; +struct Library *DiskfontBase = NULL; + +struct DOSIFace* IDOS = NULL; +struct UtilityIFace* IUtility = NULL; +struct LocaleIFace* ILocale = NULL; +struct DiskfontIFace* IDiskfont = NULL; + +#if !defined(__NEWLIB__) +extern struct Library *__UtilityBase; +extern struct UtilityIFace* __IUtility; +#endif + +#elif defined(__AROS__) +struct DosLibrary *DOSBase = NULL; +struct UtilityBase *UtilityBase = NULL; +#else +struct DosLibrary *DOSBase = NULL; +struct Library *UtilityBase = NULL; +#if defined(__MORPHOS__) +struct Library *LocaleBase = NULL; +#else +struct LocaleBase *LocaleBase = NULL; +#endif +struct Library *__UtilityBase = NULL; // required by clib2 & libnix +#endif + +/****************************************************************************/ + +ULONG +freeBase(struct LibraryHeader *lib) +{ + ENTER(); + + D(DBF_STARTUP, "freeing all resources of codesets.library"); + + // cleanup also the internal public codesets list + codesetsCleanup(&lib->codesets); + + // close locale.library + if(LocaleBase) + { + DROPINTERFACE(ILocale); + CloseLibrary((struct Library *)LocaleBase); + LocaleBase = NULL; + } + + #if defined(__amigaos4__) + // close diskfont.library + if(DiskfontBase) + { + DROPINTERFACE(IDiskfont); + CloseLibrary((struct Library *)DiskfontBase); + DiskfontBase = NULL; + } + #endif + + // delete our private memory pool + if(lib->pool) + { + DeletePool(lib->pool); + lib->pool = NULL; + } + + // close utility.library + if(UtilityBase) + { + DROPINTERFACE(IUtility); + CloseLibrary(UtilityBase); + UtilityBase = NULL; + } + + // close dos.library + if(DOSBase) + { + DROPINTERFACE(IDOS); + CloseLibrary((struct Library *)DOSBase); + DOSBase = NULL; + } + + RETURN(TRUE); + return TRUE; +} + +/***********************************************************************/ + +struct loc +{ + const char *name; + ULONG len; + const char *codesetName; +}; + +// table with the default LANGUAGE<>CHARSET mapping we +// are using in codesets.library. +static const struct loc locs[] = +{ + { "bosanski", 8, "ISO-8859-2" }, + { "català", 6, "ISO-8859-1 + Euro" }, + { "czech", 5, "ISO-8859-2" }, + { "dansk", 5, "ISO-8859-1 + Euro" }, + { "deutsch", 7, "ISO-8859-1 + Euro" }, + { "english", 7, "ISO-8859-1 + Euro" }, + { "esperanto", 9, "ISO-8859-3" }, + { "eesti", 5, "ISO-8859-15" }, + { "español", 7, "ISO-8859-1 + Euro" }, + { "français", 8, "ISO-8859-1 + Euro" }, + { "gaeilge", 7, "ISO-8859-15" }, + { "galego", 6, "ISO-8859-1 + Euro" }, + { "greek", 5, "ISO-8859-7" }, + { "hrvatski", 8, "ISO-8859-2" }, + { "italiano", 8, "ISO-8859-1 + Euro" }, + { "lietuvi", 7, "ISO-8859-13" }, + { "magyar", 6, "ISO-8859-2" }, + { "nederlands", 10, "ISO-8859-1 + Euro" }, + { "norsk", 5, "ISO-8859-1 + Euro" }, + { "polski", 6, "ISO-8859-2" }, + { "português", 9, "ISO-8859-1 + Euro" }, + { "russian", 7, "Amiga-1251" }, + { "slovak", 6, "ISO-8859-2" }, + { "slovensko", 9, "ISO-8859-2" }, + { "srpski", 6, "ISO-8859-2" }, + { "suomi", 5, "ISO-8859-1" }, + { "svenska", 7, "ISO-8859-1 + Euro" }, + { "türkçe", 6, "ISO-8859-9" }, + { NULL, 0, NULL } +}; + +static void +getSystemCodeset(struct LibraryHeader *lib) +{ + struct codeset *foundCodeset = NULL; + + ENTER(); + + // before we go any query the system via locale.library (which + // might not be so accurate) we try different other means of + // finding the codeset/charset of the system + #ifdef __amigaos4__ + { + LONG default_charset = GetDiskFontCtrl(DFCTRL_CHARSET); + char *charset = (char *)ObtainCharsetInfo(DFCS_NUMBER, default_charset, DFCS_MIMENAME); + + foundCodeset = codesetsFind(&lib->codesets, charset); + + D(DBF_STARTUP, "%s system default codeset: '%s' (diskfont)", foundCodeset ? "found" : "not found", charset); + } + #endif + + // if we still do not have our default charset we try to load + // it from and environment variable ENVARC:CHARSET + if(foundCodeset == NULL) + { + char charset[80]; + charset[0] = '\0'; + + if(GetVar("CHARSET", charset, sizeof(charset), 0) > 0) + { + foundCodeset = codesetsFind(&lib->codesets, charset); + } + + D(DBF_STARTUP, "%s system default codeset: '%s' (ENV:CHARSET)", foundCodeset ? "found" : "not found", charset); + } + + // and if even the CHARSET environment variable didn't work + // out we check the LANGUAGE env variable against our own + // internal fallback list + if(foundCodeset == NULL) + { + char language[80]; + + if(GetVar("LANGUAGE", language, sizeof(language), 0) > 0) + { + int i; + struct loc *curLoc = NULL; + BOOL found = FALSE; + + for(i=0;;i++) + { + curLoc = (struct loc *)&locs[i]; + if(curLoc == NULL || curLoc->name == NULL) + break; + + if(!strnicmp(language, curLoc->name, curLoc->len)) + { + found = TRUE; + break; + } + } + + if(found) + foundCodeset = codesetsFind(&lib->codesets, curLoc->codesetName); + } + + D(DBF_STARTUP, "%s system default codeset: '%s' (ENV:LANGUAGE)", foundCodeset ? "found" : "not found", + foundCodeset ? foundCodeset->name : "?"); + } + + // and the very last check we do to find out the system's charset is + // to use locale.library. + if(foundCodeset == NULL) + { + struct Locale *locale; + + if((locale = OpenLocale(NULL))) + { + int i; + char *language = locale->loc_LanguageName; + struct loc *curLoc = NULL; + BOOL found = FALSE; + + for(i=0;;i++) + { + curLoc = (struct loc *)&locs[i]; + if(curLoc == NULL || curLoc->name == NULL) + break; + + if(!strnicmp(language, curLoc->name, curLoc->len)) + { + found = TRUE; + break; + } + } + + CloseLocale(locale); + + if(found) + foundCodeset = codesetsFind(&lib->codesets, curLoc->codesetName); + } + + D(DBF_STARTUP, "%s system default codeset: '%s' (locale)", foundCodeset ? "found" : "not found", + foundCodeset ? foundCodeset->name : "?"); + } + + // and if even that very last test didn't work out we + // can just take the ISO-8859-1 charset as the fallback default + if(foundCodeset == NULL) + lib->systemCodeset = codesetsFind(&lib->codesets, "ISO-8859-1"); + else + lib->systemCodeset = foundCodeset; + + LEAVE(); +} + +/***********************************************************************/ + +ULONG +initBase(struct LibraryHeader *lib) +{ + ENTER(); + + if((DOSBase = (APTR)OpenLibrary("dos.library", 37)) && + GETINTERFACE(IDOS, DOSBase)) + { + if((UtilityBase = OpenLibrary("utility.library", 37)) && + GETINTERFACE(IUtility, UtilityBase)) + { + // we have to please the internal utilitybase + // pointers of libnix and clib2 + #if !defined(__NEWLIB__) && !defined(__AROS__) + __UtilityBase = (APTR)UtilityBase; + #if defined(__amigaos4__) + __IUtility = IUtility; + #endif + #endif + + // setup the debugging stuff + #if defined(DEBUG) + SetupDebug(); + #endif + + #if defined(__amigaos4__) + if((DiskfontBase = OpenLibrary("diskfont.library", 50)) && + GETINTERFACE(IDiskfont, DiskfontBase)) + { + #endif + if((lib->pool = CreatePool(MEMF_ANY, 4096, 512))) + { + if(codesetsInit(&lib->codesets)) + { + lib->systemCodeset = (struct codeset *)lib->codesets.list.mlh_Head; + + if((LocaleBase = (APTR)OpenLibrary("locale.library", 37)) && + GETINTERFACE(ILocale, LocaleBase)) + { + getSystemCodeset(lib); + } + + RETURN(TRUE); + return TRUE; + } + } + #if defined(__amigaos4__) + } + #endif + } + } + + freeBase(lib); + + RETURN(FALSE); + return FALSE; +} + +/***********************************************************************/ diff --git a/workbench/libs/codesetslib/src/lib.h b/workbench/libs/codesetslib/src/lib.h new file mode 100755 index 000000000..e6c6366c4 --- /dev/null +++ b/workbench/libs/codesetslib/src/lib.h @@ -0,0 +1,44 @@ +/*************************************************************************** + + codesets.library - Amiga shared library for handling different codesets + Copyright (C) 2001-2005 by Alfonso [alfie] Ranieri . + Copyright (C) 2005-2007 by codesets.library Open Source Team + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + codesets.library project: http://sourceforge.net/projects/codesetslib/ + + $Id$ + +***************************************************************************/ + +#ifndef _LIB_H +#define _LIB_H + +#include +#include +#include + +#include + +#include +#include + +#include "base.h" +#include "macros.h" + +/***********************************************************************/ + +#include "lib_protos.h" + +/***********************************************************************/ + +#endif /* _LIB_H */ diff --git a/workbench/libs/codesetslib/src/lib_protos.h b/workbench/libs/codesetslib/src/lib_protos.h new file mode 100755 index 000000000..c7ed43169 --- /dev/null +++ b/workbench/libs/codesetslib/src/lib_protos.h @@ -0,0 +1,103 @@ +/*************************************************************************** + + codesets.library - Amiga shared library for handling different codesets + Copyright (C) 2001-2005 by Alfonso [alfie] Ranieri . + Copyright (C) 2005-2007 by codesets.library Open Source Team + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + codesets.library project: http://sourceforge.net/projects/codesetslib/ + + $Id$ + +***************************************************************************/ + +#ifndef _LIB_PROTOS_H +#define _LIB_PROTOS_H + +#ifdef __AROS__ +#define __CODESETS_NOLIBBASE__ +#include +#else /* __AROS__ */ +#include "SDI_lib.h" +#endif /* __AROS__ */ + +/* init.c */ +ULONG freeBase(struct LibraryHeader* lib); +ULONG initBase(struct LibraryHeader* lib); + +/* utils.c */ +APTR allocVecPooled(APTR pool, ULONG size); +void freeVecPooled(APTR pool, APTR mem); +APTR allocArbitratePooled(ULONG s); +void freeArbitratePooled(APTR mem , ULONG s); +APTR allocArbitrateVecPooled(ULONG size); +void freeArbitrateVecPooled(APTR mem); + +/* base64.c */ +#ifndef __AROS__ +LIBPROTO(CodesetsEncodeB64A, ULONG, REG(a0, struct TagItem *attrs)); +LIBPROTOVA(CodesetsEncodeB64,ULONG, ...); +LIBPROTO(CodesetsDecodeB64A, ULONG, REG(a0, struct TagItem *attrs)); +LIBPROTOVA(CodesetsDecodeB64,ULONG, ...); +#endif /* __AROS__ */ + +/* convertUTF.c */ +#ifndef __AROS__ +LIBPROTO(CodesetsConvertUTF32toUTF16, ULONG, REG(a0, const UTF32 **sourceStart), REG(a1, const UTF32 *sourceEnd), REG(a2, UTF16 **targetStart), REG(a3, UTF16 *targetEnd), REG(d0, ULONG flags)); +LIBPROTO(CodesetsConvertUTF16toUTF32, ULONG, REG(a0, const UTF16 **sourceStart), REG(a1, const UTF16 *sourceEnd), REG(a2, UTF32 **targetStart), REG(a3, UTF32 *targetEnd), REG(d0, ULONG flags)); +LIBPROTO(CodesetsConvertUTF16toUTF8, ULONG, REG(a0, const UTF16 **sourceStart), REG(a1, const UTF16 *sourceEnd) , REG(a2, UTF8 **targetStart), REG(a3, UTF8 *targetEnd), REG(d0, ULONG flags)); +LIBPROTO(CodesetsIsLegalUTF8, BOOL, REG(a0, const UTF8 *source), REG(d0, ULONG length)); +LIBPROTO(CodesetsIsLegalUTF8Sequence, BOOL, REG(a0, const UTF8 *source), REG(a1, const UTF8 *sourceEnd)); +LIBPROTO(CodesetsConvertUTF8toUTF16, ULONG, REG(a0, const UTF8 **sourceStart), REG(a1, const UTF8 *sourceEnd), REG(a2, UTF16 **targetStart), REG(a3, UTF16 *targetEnd), REG(d0, ULONG flags)); +LIBPROTO(CodesetsConvertUTF32toUTF8, ULONG, REG(a0, const UTF32 **sourceStart), REG(a1, const UTF32 *sourceEnd), REG(a2, UTF8 **targetStart), REG(a3, UTF8 *targetEnd), REG(d0, ULONG flags)); +LIBPROTO(CodesetsConvertUTF8toUTF32, ULONG, REG(a0, const UTF8 **sourceStart), REG(a1, const UTF8 *sourceEnd), REG(a2, UTF32 **targetStart), REG(a3, UTF32 *targetEnd), REG(d0, ULONG flags)); +#endif /* __AROS__ */ + +/* codesets.c */ +BOOL codesetsInit(struct codesetList *csList); +void codesetsCleanup(struct codesetList *csList); +struct codeset *codesetsFind(struct codesetList *csList, const char *name); + +#ifndef __AROS__ +LIBPROTO(CodesetsSupportedA, STRPTR *, REG(a0, struct TagItem *attrs)); +LIBPROTOVA(CodesetsSupported, STRPTR *, ...); +LIBPROTO(CodesetsFreeA, void, REG(a0, APTR obj), REG(a1, struct TagItem *attrs)); +LIBPROTOVA(CodesetsFree, void, REG(a0, APTR obj), ...); +LIBPROTO(CodesetsSetDefaultA, struct codeset *, REG(a0, STRPTR name), REG(a1, struct TagItem *attrs)); +LIBPROTOVA(CodesetsSetDefault,struct codeset *, REG(a0, STRPTR name), ...); +LIBPROTO(CodesetsFindA, struct codeset *, REG(a0, STRPTR name), REG(a1, struct TagItem *attrs)); +LIBPROTOVA(CodesetsFind, struct codeset *, REG(a0, STRPTR name), ...); +LIBPROTO(CodesetsFindBestA, struct codeset *, REG(a0, struct TagItem *attrs)); +LIBPROTOVA(CodesetsFindBest, struct codeset *, ...); +LIBPROTO(CodesetsStrLenA, ULONG, REG(a0, STRPTR str), REG(a1, struct TagItem *attrs)); +LIBPROTOVA(CodesetsStrLen, ULONG, REG(a0, STRPTR str), ...); +LIBPROTO(CodesetsConvertStrA, STRPTR, REG(a0, struct TagItem *attrs)); +LIBPROTOVA(CodesetsConvertStr,STRPTR, ...); +LIBPROTO(CodesetsUTF8ToStrA, STRPTR, REG(a0, struct TagItem *attrs)); +LIBPROTOVA(CodesetsUTF8ToStr, STRPTR, ...); +LIBPROTO(CodesetsUTF8CreateA, UTF8 *, REG(a0, struct TagItem *attrs)); +LIBPROTOVA(CodesetsUTF8Create,UTF8 *, ...); +LIBPROTO(CodesetsFreeVecPooledA, void, REG(a0, APTR pool), REG(a1, APTR mem), REG(a2, struct TagItem *attrs)); +LIBPROTOVA(CodesetsFreeVecPooled,void, REG(a0, APTR pool), REG(a1, APTR mem), ...); +LIBPROTO(CodesetsIsValidUTF8,BOOL, REG(a0, STRPTR s)); +LIBPROTO(CodesetsUTF8Len, ULONG, REG(a0, UTF8 *str)); +LIBPROTO(CodesetsListCreateA, struct codesetList *, REG(a0, struct TagItem *attrs)); +LIBPROTOVA(CodesetsListCreate, struct codesetList *, ...); +LIBPROTO(CodesetsListDeleteA, BOOL, REG(a0, struct TagItem *attrs)); +LIBPROTOVA(CodesetsListDelete, BOOL, ...); +LIBPROTO(CodesetsListAddA, BOOL, REG(a0, struct codesetList *csList), REG(a1, struct TagItem *attrs)); +LIBPROTOVA(CodesetsListAdd, BOOL, REG(a0, struct codesetList *csList), ...); +LIBPROTO(CodesetsListRemoveA, BOOL, REG(a0, struct TagItem *attrs)); +LIBPROTOVA(CodesetsListRemove, BOOL, ...); +#endif /* __AROS__ */ + +#endif /* _LIB_PROTOS_H */ diff --git a/workbench/libs/codesetslib/src/libinit-aros.c b/workbench/libs/codesetslib/src/libinit-aros.c new file mode 100644 index 000000000..4aed9e027 --- /dev/null +++ b/workbench/libs/codesetslib/src/libinit-aros.c @@ -0,0 +1,85 @@ +/*************************************************************************** + + codesets.library - Amiga shared library for handling different codesets + Copyright (C) 2001-2005 by Alfonso [alfie] Ranieri . + Copyright (C) 2005-2007 by codesets.library Open Source Team + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + codesets.library project: http://sourceforge.net/projects/codesetslib/ + + $Id$ + +***************************************************************************/ + +#include "lib.h" +#include "version.h" + +#include +#include +#include + +#include "debug.h" + +/****************************************************************************/ + +// define the base to avoid recursion when opening the library +struct LibraryHeader * CodesetsBase; + +/****************************************************************************/ + +BOOL LibInit(struct LibraryHeader *base) +{ + BOOL success = FALSE; + + // Init global library base + CodesetsBase = base; + + InitSemaphore(&base->libSem); + InitSemaphore(&base->poolSem); + + base->sysBase = (APTR)SysBase; + base->pool = NULL; + base->flags = 0; + base->systemCodeset = NULL; + + // protect access to initBase() + ObtainSemaphore(&base->libSem); + + success = initBase(base); + + // unprotect initBase() + ReleaseSemaphore(&base->libSem); + + return success; +} + +/****************************************************************************/ + +void LibExpunge(struct LibraryHeader *base) +{ + // free all our private data and stuff. + ObtainSemaphore(&base->libSem); + + freeBase(base); + + // unprotect + ReleaseSemaphore(&base->libSem); + + CodesetsBase = NULL; +} + +/****************************************************************************/ + +ADD2INITLIB(LibInit, 0); +ADD2EXPUNGELIB(LibExpunge, 0); + +/***********************************************************************/ diff --git a/workbench/libs/codesetslib/src/libinit.c b/workbench/libs/codesetslib/src/libinit.c new file mode 100755 index 000000000..3cf2f435e --- /dev/null +++ b/workbench/libs/codesetslib/src/libinit.c @@ -0,0 +1,686 @@ +/*************************************************************************** + + codesets.library - Amiga shared library for handling different codesets + Copyright (C) 2001-2005 by Alfonso [alfie] Ranieri . + Copyright (C) 2005-2007 by codesets.library Open Source Team + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + codesets.library project: http://sourceforge.net/projects/codesetslib/ + + $Id$ + +***************************************************************************/ + +#include "lib.h" +#include "version.h" + +#include +#include + +#include "debug.h" + +// transforms a define into a string +#define STR(x) STR2(x) +#define STR2(x) #x + +/****************************************************************************/ + +#define MIN_STACKSIZE 65536 + +// stack cookie for shell v45+ +static const char USED_VAR stack_size[] = "$STACK:" STR(MIN_STACKSIZE) "\n"; + +/****************************************************************************/ + +#if defined(__amigaos4__) +struct Library *SysBase = NULL; +struct ExecIFace* IExec = NULL; +#if defined(__NEWLIB__) +struct Library *NewlibBase = NULL; +struct NewlibIFace* INewlib = NULL; +#endif +#else +struct ExecBase *SysBase = NULL; +#endif + +struct LibraryHeader *CodesetsBase = NULL; + +static const char UserLibName[] = "codesets.library"; +static const char UserLibID[] = "$VER: codesets.library " LIB_REV_STRING CPU " (" LIB_DATE ") " LIB_COPYRIGHT; + +/****************************************************************************/ + +#define libvector LibNull \ + LFUNC_FA_(CodesetsConvertUTF32toUTF16) \ + LFUNC_FA_(CodesetsConvertUTF16toUTF32) \ + LFUNC_FA_(CodesetsConvertUTF16toUTF8) \ + LFUNC_FA_(CodesetsIsLegalUTF8) \ + LFUNC_FA_(CodesetsIsLegalUTF8Sequence) \ + LFUNC_FA_(CodesetsConvertUTF8toUTF16) \ + LFUNC_FA_(CodesetsConvertUTF32toUTF8) \ + LFUNC_FA_(CodesetsConvertUTF8toUTF32) \ + LFUNC_FA_(CodesetsSetDefaultA) \ + LFUNC_VA_(CodesetsSetDefault) \ + LFUNC_FA_(CodesetsFreeA) \ + LFUNC_VA_(CodesetsFree) \ + LFUNC_FA_(CodesetsSupportedA) \ + LFUNC_VA_(CodesetsSupported) \ + LFUNC_FA_(CodesetsFindA) \ + LFUNC_VA_(CodesetsFind) \ + LFUNC_FA_(CodesetsFindBestA) \ + LFUNC_VA_(CodesetsFindBest) \ + LFUNC_FA_(CodesetsUTF8Len) \ + LFUNC_FA_(CodesetsUTF8ToStrA) \ + LFUNC_VA_(CodesetsUTF8ToStr) \ + LFUNC_FA_(CodesetsUTF8CreateA) \ + LFUNC_VA_(CodesetsUTF8Create) \ + LFUNC_FA_(CodesetsEncodeB64A) \ + LFUNC_VA_(CodesetsEncodeB64) \ + LFUNC_FA_(CodesetsDecodeB64A) \ + LFUNC_VA_(CodesetsDecodeB64) \ + LFUNC_FA_(CodesetsStrLenA) \ + LFUNC_VA_(CodesetsStrLen) \ + LFUNC_FA_(CodesetsIsValidUTF8) \ + LFUNC_FA_(CodesetsFreeVecPooledA) \ + LFUNC_VA_(CodesetsFreeVecPooled) \ + LFUNC_FA_(CodesetsConvertStrA) \ + LFUNC_VA_(CodesetsConvertStr) \ + LFUNC_FA_(CodesetsListCreateA) \ + LFUNC_VA_(CodesetsListCreate) \ + LFUNC_FA_(CodesetsListDeleteA) \ + LFUNC_VA_(CodesetsListDelete) \ + LFUNC_FA_(CodesetsListAddA) \ + LFUNC_VA_(CodesetsListAdd) \ + LFUNC_FA_(CodesetsListRemoveA) \ + LFUNC_VA_(CodesetsListRemove) + + +/****************************************************************************/ + +#if defined(__amigaos4__) + +static struct LibraryHeader * LIBFUNC LibInit (struct LibraryHeader *base, BPTR librarySegment, struct ExecIFace *pIExec); +static BPTR LIBFUNC LibExpunge (struct LibraryManagerInterface *Self); +static struct LibraryHeader * LIBFUNC LibOpen (struct LibraryManagerInterface *Self, ULONG version); +static BPTR LIBFUNC LibClose (struct LibraryManagerInterface *Self); +static LONG LIBFUNC LibNull (void); + +#elif defined(__MORPHOS__) + +static struct LibraryHeader * LIBFUNC LibInit (struct LibraryHeader *base, BPTR librarySegment, struct ExecBase *sb); +static BPTR LIBFUNC LibExpunge(void); +static struct LibraryHeader * LIBFUNC LibOpen (void); +static BPTR LIBFUNC LibClose (void); +static LONG LIBFUNC LibNull (void); + +#else + +static struct LibraryHeader * LIBFUNC LibInit (REG(a0, BPTR Segment), REG(d0, struct LibraryHeader *lh), REG(a6, struct ExecBase *sb)); +static BPTR LIBFUNC LibExpunge (REG(a6, struct LibraryHeader *base)); +static struct LibraryHeader * LIBFUNC LibOpen (REG(a6, struct LibraryHeader *base)); +static BPTR LIBFUNC LibClose (REG(a6, struct LibraryHeader *base)); +static LONG LIBFUNC LibNull (void); + +#endif + +/****************************************************************************/ + +/* + * The system (and compiler) rely on a symbol named _start which marks + * the beginning of execution of an ELF file. To prevent others from + * executing this library, and to keep the compiler/linker happy, we + * define an empty _start symbol here. + * + * On the classic system (pre-AmigaOS4) this was usually done by + * moveq #0,d0 + * rts + * + */ + +#if defined(__amigaos4__) +int _start(void) +#else +int Main(void) +#endif +{ + return RETURN_FAIL; +} + +static LONG LIBFUNC LibNull(VOID) +{ + return(0); +} + +/****************************************************************************/ + +#if defined(__amigaos4__) +/* ------------------- OS4 Manager Interface ------------------------ */ +STATIC uint32 _manager_Obtain(struct LibraryManagerInterface *Self) +{ + uint32 res; + __asm__ __volatile__( + "1: lwarx %0,0,%1\n" + "addic %0,%0,1\n" + "stwcx. %0,0,%1\n" + "bne- 1b" + : "=&r" (res) + : "r" (&Self->Data.RefCount) + : "cc", "memory"); + + return res; +} + +STATIC uint32 _manager_Release(struct LibraryManagerInterface *Self) +{ + uint32 res; + __asm__ __volatile__( + "1: lwarx %0,0,%1\n" + "addic %0,%0,-1\n" + "stwcx. %0,0,%1\n" + "bne- 1b" + : "=&r" (res) + : "r" (&Self->Data.RefCount) + : "cc", "memory"); + + return res; +} + +STATIC CONST CONST_APTR lib_manager_vectors[] = +{ + (CONST_APTR)_manager_Obtain, + (CONST_APTR)_manager_Release, + (CONST_APTR)NULL, + (CONST_APTR)NULL, + (CONST_APTR)LibOpen, + (CONST_APTR)LibClose, + (CONST_APTR)LibExpunge, + (CONST_APTR)NULL, + (CONST_APTR)-1 +}; + +STATIC CONST struct TagItem lib_managerTags[] = +{ + { MIT_Name, (Tag)"__library" }, + { MIT_VectorTable, (Tag)lib_manager_vectors }, + { MIT_Version, 1 }, + { TAG_DONE, 0 } +}; + +/* ------------------- Library Interface(s) ------------------------ */ + +ULONG LibObtain(UNUSED struct Interface *Self) +{ + return 0; +} + +ULONG LibRelease(UNUSED struct Interface *Self) +{ + return 0; +} + +STATIC CONST CONST_APTR main_vectors[] = +{ + (CONST_APTR)LibObtain, + (CONST_APTR)LibRelease, + (CONST_APTR)NULL, + (CONST_APTR)NULL, + (CONST_APTR)libvector, + (CONST_APTR)-1 +}; + +STATIC CONST struct TagItem mainTags[] = +{ + { MIT_Name, (Tag)"main" }, + { MIT_VectorTable, (Tag)main_vectors }, + { MIT_Version, 1 }, + { TAG_DONE, 0 } +}; + +STATIC CONST CONST_APTR libInterfaces[] = +{ + (CONST_APTR)lib_managerTags, + (CONST_APTR)mainTags, + (CONST_APTR)NULL +}; + +// Our libraries always have to carry a 68k jump table with it, so +// lets define it here as extern, as we are going to link it to +// our binary here. +#ifndef NO_VECTABLE68K +extern CONST APTR VecTable68K[]; +#endif + +STATIC CONST struct TagItem libCreateTags[] = +{ + { CLT_DataSize, sizeof(struct LibraryHeader) }, + { CLT_InitFunc, (Tag)LibInit }, + { CLT_Interfaces, (Tag)libInterfaces }, + #ifndef NO_VECTABLE68K + { CLT_Vector68K, (Tag)VecTable68K }, + #endif + { TAG_DONE, 0 } +}; + +#else + +STATIC CONST CONST_APTR LibVectors[] = +{ + #ifdef __MORPHOS__ + (CONST_APTR)FUNCARRAY_32BIT_NATIVE, + #endif + (CONST_APTR)LibOpen, + (CONST_APTR)LibClose, + (CONST_APTR)LibExpunge, + (CONST_APTR)LibNull, + (CONST_APTR)libvector, + (CONST_APTR)-1 +}; + +STATIC CONST ULONG LibInitTab[] = +{ + sizeof(struct LibraryHeader), + (ULONG)LibVectors, + (ULONG)NULL, + (ULONG)LibInit +}; + +#endif + +/****************************************************************************/ + +static const USED_VAR struct Resident ROMTag = +{ + RTC_MATCHWORD, + (struct Resident *)&ROMTag, + (struct Resident *)(&ROMTag + 1), + #if defined(__amigaos4__) + RTF_AUTOINIT|RTF_NATIVE, // The Library should be set up according to the given table. + #elif defined(__MORPHOS__) + RTF_AUTOINIT|RTF_PPC, + #else + RTF_AUTOINIT, + #endif + LIB_VERSION, + NT_LIBRARY, + 0, + (char *)UserLibName, + (char *)UserLibID+6, // +6 to skip '$VER: ' + #if defined(__amigaos4__) + (APTR)libCreateTags // This table is for initializing the Library. + #else + (APTR)LibInitTab, + #endif + #if defined(__MORPHOS__) + LIB_REVISION, + 0 + #endif +}; + +#if defined(__MORPHOS__) +/* + * To tell the loader that this is a new emulppc elf and not + * one for the ppc.library. + * ** IMPORTANT ** + */ +const USED_VAR ULONG __amigappc__ = 1; +const USED_VAR ULONG __abox__ = 1; + +#endif /* __MORPHOS */ + +/****************************************************************************/ + +#if defined(MIN_STACKSIZE) && !defined(__amigaos4__) + +/* generic StackSwap() function which calls function() surrounded by + StackSwap() calls */ +extern ULONG stackswap_call(struct StackSwapStruct *stack, + ULONG (*function)(struct LibraryHeader *), + struct LibraryHeader *arg); + +#if defined(__mc68000__) +asm(".text \n\ + .even \n\ + .globl _stackswap_call \n\ + _stackswap_call: \n\ + moveml #0x3022,sp@- \n\ + movel sp@(20),d3 \n\ + movel sp@(24),a2 \n\ + movel sp@(28),d2 \n\ + movel _SysBase,a6 \n\ + movel d3,a0 \n\ + jsr a6@(-732:W) \n\ + movel d2,sp@- \n\ + jbsr a2@ \n\ + movel d0,d2 \n\ + addql #4,sp \n\ + movel _SysBase,a6 \n\ + movel d3,a0 \n\ + jsr a6@(-732:W) \n\ + movel d2,d0 \n\ + moveml sp@+,#0x440c \n\ + rts"); +#elif !defined(__MORPHOS__) +ULONG stackswap_call(struct StackSwapStruct *stack, + ULONG (*function)(struct LibraryHeader *), + struct LibraryHeader *arg) +{ + register ULONG result; + StackSwap(stack); + result = function(arg); + StackSwap(stack); + return result; +} +#endif + +static BOOL callLibFunction(ULONG (*function)(struct LibraryHeader *), struct LibraryHeader *arg) +{ + BOOL success = FALSE; + struct Task *tc; + ULONG stacksize; + + // retrieve the task structure for the + // current task + tc = FindTask(NULL); + + #if defined(__MORPHOS__) + // In MorphOS we have two stacks. One for PPC code and another for 68k code. + // We are only interested in the PPC stack. + NewGetTaskAttrsA(tc, &stacksize, sizeof(ULONG), TASKINFOTYPE_STACKSIZE, NULL); + #else + // on all other systems we query via SPUpper-SPLower calculation + stacksize = tc->tc_SPUpper - tc->tc_SPLower; + #endif + + // Swap stacks only if current stack is insufficient + if(stacksize < MIN_STACKSIZE) + { + struct StackSwapStruct *stack; + + if((stack = AllocVec(sizeof(*stack), MEMF_PUBLIC)) != NULL) + { + if((stack->stk_Lower = AllocVec(MIN_STACKSIZE, MEMF_PUBLIC)) != NULL) + { + #if defined(__MORPHOS__) + struct PPCStackSwapArgs swapargs; + #endif + + // perform the StackSwap + stack->stk_Upper = (ULONG)stack->stk_Lower + MIN_STACKSIZE; + stack->stk_Pointer = (APTR)stack->stk_Upper; + + // call routine but with embedding it into a [NewPPC]StackSwap() + #if defined(__MORPHOS__) + swapargs.Args[0] = (ULONG)arg; + success = NewPPCStackSwap(stack, function, &swapargs); + #else + success = stackswap_call(stack, function, arg); + #endif + + FreeVec(stack->stk_Lower); + } + FreeVec(stack); + } + } + else + success = function(arg); + + return success; +} + +#endif // !__amigaos4__ + +/****************************************************************************/ + +#if defined(__amigaos4__) +static struct LibraryHeader * LibInit(struct LibraryHeader *base, BPTR librarySegment, struct ExecIFace *pIExec) +{ + struct ExecBase *sb = (struct ExecBase *)pIExec->Data.LibBase; + IExec = pIExec; +#elif defined(__MORPHOS__) +static struct LibraryHeader * LibInit(struct LibraryHeader *base, BPTR librarySegment, struct ExecBase *sb) +{ +#else +static struct LibraryHeader * LIBFUNC LibInit(REG(a0, BPTR librarySegment), REG(d0, struct LibraryHeader *base), REG(a6, struct ExecBase *sb)) +{ +#endif + + SysBase = (APTR)sb; + + // make sure that this is really a 68020+ machine if optimized for 020+ + #if _M68060 || _M68040 || _M68030 || _M68020 || __mc68020 || __mc68030 || __mc68040 || __mc68060 + if(!(SysBase->AttnFlags & AFF_68020)) + return(NULL); + #endif + + #if defined(__amigaos4__) && defined(__NEWLIB__) + if((NewlibBase = OpenLibrary("newlib.library", 3)) && + GETINTERFACE(INewlib, NewlibBase)) + #endif + { + BOOL success = FALSE; + + D(DBF_STARTUP, "LibInit()"); + + // cleanup the library header structure beginning with the + // library base. + base->libBase.lib_Node.ln_Type = NT_LIBRARY; + base->libBase.lib_Node.ln_Pri = 0; + base->libBase.lib_Node.ln_Name = (char *)UserLibName; + base->libBase.lib_Flags = LIBF_CHANGED | LIBF_SUMUSED; + base->libBase.lib_Version = LIB_VERSION; + base->libBase.lib_Revision = LIB_REVISION; + base->libBase.lib_IdString = (char *)(UserLibID+6); + + InitSemaphore(&base->libSem); + InitSemaphore(&base->poolSem); + + base->sysBase = (APTR)SysBase; + base->pool = NULL; + base->flags = 0; + base->systemCodeset = NULL; + + // protect access to initBase() + ObtainSemaphore(&base->libSem); + + // set the CodesetsBase + CodesetsBase = base; + + // If we are not running on AmigaOS4 (no stackswap required) we go and + // do an explicit StackSwap() in case the user wants to make sure we + // have enough stack for his user functions + #if defined(MIN_STACKSIZE) && !defined(__amigaos4__) + success = callLibFunction(initBase, base); + #else + success = initBase(base); + #endif + + // unprotect initBase() + ReleaseSemaphore(&base->libSem); + + // check if everything worked out fine + if(success == TRUE) + { + // everything was successfully so lets + // set the initialized value and contiue + // with the class open phase + base->segList = librarySegment; + + // return the library base as success + return base; + } + else + CodesetsBase = NULL; + + #if defined(__amigaos4__) && defined(__NEWLIB__) + if(NewlibBase) + { + DROPINTERFACE(INewlib); + CloseLibrary(NewlibBase); + NewlibBase = NULL; + } + #endif + } + + return(NULL); +} + +/****************************************************************************/ + +#ifndef __amigaos4__ +#define DeleteLibrary(LIB) \ + FreeMem((STRPTR)(LIB)-(LIB)->lib_NegSize, (ULONG)((LIB)->lib_NegSize+(LIB)->lib_PosSize)) +#endif + +#if defined(__amigaos4__) +static BPTR LibExpunge(struct LibraryManagerInterface *Self) +{ + struct ExecIFace *IExec = (struct ExecIFace *)(*(struct ExecBase **)4)->MainInterface; + struct LibraryHeader *base = (struct LibraryHeader *)Self->Data.LibBase; +#elif defined(__MORPHOS__) +static BPTR LibExpunge(void) +{ + struct LibraryHeader *base = (struct LibraryHeader*)REG_A6; +#else +static BPTR LIBFUNC LibExpunge(REG(a6, struct LibraryHeader *base)) +{ +#endif + BPTR rc; + + D(DBF_STARTUP, "LibExpunge(): %ld", base->libBase.lib_OpenCnt); + + // in case our open counter is still > 0, we have + // to set the late expunge flag and return immediately + if(base->libBase.lib_OpenCnt > 0) + { + base->libBase.lib_Flags |= LIBF_DELEXP; + rc = 0; + } + else + { + // make sure to restore the SysBase + SysBase = (APTR)base->sysBase; + + // remove the library base from exec's lib list in advance + Remove((struct Node *)base); + + // free all our private data and stuff. + ObtainSemaphore(&base->libSem); + + // make sure we have enough stack here + #if defined(MIN_STACKSIZE) && !defined(__amigaos4__) + callLibFunction(freeBase, base); + #else + freeBase(base); + #endif + + // unprotect + ReleaseSemaphore(&base->libSem); + + #if defined(__amigaos4__) && defined(__NEWLIB__) + if(NewlibBase) + { + DROPINTERFACE(INewlib); + CloseLibrary(NewlibBase); + NewlibBase = NULL; + } + #endif + + // make sure the system deletes the library as well. + rc = base->segList; + DeleteLibrary(&base->libBase); + } + + return rc; +} + +/****************************************************************************/ + +#if defined(__amigaos4__) +static struct LibraryHeader *LibOpen(struct LibraryManagerInterface *Self, ULONG version UNUSED) +{ + struct LibraryHeader *base = (struct LibraryHeader *)Self->Data.LibBase; +#elif defined(__MORPHOS__) +static struct LibraryHeader *LibOpen(void) +{ + struct LibraryHeader *base = (struct LibraryHeader*)REG_A6; +#else +static struct LibraryHeader * LIBFUNC LibOpen(REG(a6, struct LibraryHeader *base)) +{ +#endif + struct LibraryHeader *res = base; + + D(DBF_STARTUP, "LibOpen(): %ld", base->libBase.lib_OpenCnt); + + // LibOpen(), LibClose() and LibExpunge() are called while the system is in + // Forbid() state. That means that these functions should be quick and should + // not break this Forbid()!! Therefore the open counter should be increased + // as the very first instruction during LibOpen(), because a ClassOpen() + // which breaks a Forbid() and another task calling LibExpunge() will cause + // to expunge this library while it is not yet fully initialized. A crash + // is unavoidable then. Even the semaphore does not guarantee 100% protection + // against such a race condition, because waiting for the semaphore to be + // obtained will effectively break the Forbid()! + + // increase the open counter ahead of anything else + base->libBase.lib_OpenCnt++; + + // delete the late expunge flag + base->libBase.lib_Flags &= ~LIBF_DELEXP; + + return res; +} + +/****************************************************************************/ + +#if defined(__amigaos4__) +static BPTR LibClose(struct LibraryManagerInterface *Self) +{ + struct LibraryHeader *base = (struct LibraryHeader *)Self->Data.LibBase; +#elif defined(__MORPHOS__) +static BPTR LibClose(void) +{ + struct LibraryHeader *base = (struct LibraryHeader *)REG_A6; +#else +static BPTR LIBFUNC LibClose(REG(a6, struct LibraryHeader *base)) +{ +#endif + BPTR rc = 0; + + D(DBF_STARTUP, "LibClose(): %ld", base->libBase.lib_OpenCnt); + + // decrease the open counter + base->libBase.lib_OpenCnt--; + + // in case the opern counter is <= 0 we can + // make sure that we free everything + if(base->libBase.lib_OpenCnt <= 0) + { + // in case the late expunge flag is set we go and + // expunge the library base right now + if(base->libBase.lib_Flags & LIBF_DELEXP) + { + #if defined(__amigaos4__) + rc = LibExpunge(Self); + #elif defined(__MORPHOS__) + rc = LibExpunge(); + #else + rc = LibExpunge(base); + #endif + + return rc; + } + } + + return rc; +} + +/****************************************************************************/ diff --git a/workbench/libs/codesetslib/src/macros.h b/workbench/libs/codesetslib/src/macros.h new file mode 100755 index 000000000..500e0690a --- /dev/null +++ b/workbench/libs/codesetslib/src/macros.h @@ -0,0 +1,53 @@ +/*************************************************************************** + + codesets.library - Amiga shared library for handling different codesets + Copyright (C) 2001-2005 by Alfonso [alfie] Ranieri . + Copyright (C) 2005-2007 by codesets.library Open Source Team + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + codesets.library project: http://sourceforge.net/projects/codesetslib/ + + $Id$ + +***************************************************************************/ + +#ifndef _MACROS_H +#define _MACROS_H + +/****************************************************************************/ +/* +** Some useful macros +*/ + +#ifndef __AROS__ +#include "SDI_compiler.h" +#endif + +#if defined(__amigaos4__) +#define GETINTERFACE(iface, base) (iface = (APTR)GetInterface((struct Library *)(base), "main", 1L, NULL)) +#define DROPINTERFACE(iface) (DropInterface((struct Interface *)iface), iface = NULL) +#else +#define GETINTERFACE(iface, base) TRUE +#define DROPINTERFACE(iface) +#endif + +// special flagging macros +#define isFlagSet(v,f) (((v) & (f)) == (f)) // return TRUE if the flag is set +#define hasFlag(v,f) (((v) & (f)) != 0) // return TRUE if one of the flags in f is set in v +#define isFlagClear(v,f) (((v) & (f)) == 0) // return TRUE if flag f is not set in v +#define SET_FLAG(v,f) ((v) |= (f)) // set the flag f in v +#define CLEAR_FLAG(v,f) ((v) &= ~(f)) // clear the flag f in v +#define MASK_FLAG(v,f) ((v) &= (f)) // mask the variable v with flag f bitwise + +/****************************************************************************/ + +#endif /* _MACROS_H */ diff --git a/workbench/libs/codesetslib/src/mmakefile.src b/workbench/libs/codesetslib/src/mmakefile.src new file mode 100644 index 000000000..5479ff6d9 --- /dev/null +++ b/workbench/libs/codesetslib/src/mmakefile.src @@ -0,0 +1,37 @@ +# $Id$ + +# AROS metamakefile for codesetslib + +include $(TOP)/config/make.cfg + +FILES := \ + libinit-aros \ + init \ + utils \ + base64 \ + convertUTF \ + codesets \ + debug + +#MM- workbench-libs-codesets : workbench-libs-codesets-lib + +#MM- workbench-libs-codesets-lib : linklibs + +#MM workbench-libs-codesets-lib-includes : \ +#MM kernel-exec-includes \ +#MM kernel-dos-includes \ +#MM kernel-utility-includes \ +#MM includes-copy + +%build_module mmake=workbench-libs-codesets-lib \ + modname=codesets modtype=library \ + files=$(FILES) \ + uselibs="amiga rom codesets" + +#MM workbench-libs-codesets-clean : workbench-libs-codesets-lib-clean + +#MM +workbench-libs-codesets-clean : + $(RM) $(GENDIR)/workbench/libs/codesetslib + +%common diff --git a/workbench/libs/codesetslib/src/utils.c b/workbench/libs/codesetslib/src/utils.c new file mode 100755 index 000000000..38a693575 --- /dev/null +++ b/workbench/libs/codesetslib/src/utils.c @@ -0,0 +1,94 @@ +/*************************************************************************** + + codesets.library - Amiga shared library for handling different codesets + Copyright (C) 2001-2005 by Alfonso [alfie] Ranieri . + Copyright (C) 2005-2007 by codesets.library Open Source Team + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + codesets.library project: http://sourceforge.net/projects/codesetslib/ + + $Id$ + +***************************************************************************/ + +#include "lib.h" + +/****************************************************************************/ + +APTR +allocVecPooled(APTR pool,ULONG size) +{ + ULONG *mem; + + if((mem = AllocPooled(pool,size += sizeof(ULONG)))) + *mem++ = size; + + return mem; +} + +/****************************************************************************/ + +void +freeVecPooled(APTR pool,APTR mem) +{ + FreePooled(pool,(LONG *)mem - 1,*((LONG *)mem - 1)); +} + +/****************************************************************************/ + +APTR +allocArbitratePooled(ULONG s) +{ + APTR mem; + + ObtainSemaphore(&CodesetsBase->poolSem); + mem = AllocPooled(CodesetsBase->pool, s); + ReleaseSemaphore(&CodesetsBase->poolSem); + + return mem; +} + +/****************************************************************************/ + +void +freeArbitratePooled(APTR mem,ULONG s) +{ + ObtainSemaphore(&CodesetsBase->poolSem); + FreePooled(CodesetsBase->pool, mem, s); + ReleaseSemaphore(&CodesetsBase->poolSem); +} + +/****************************************************************************/ + +APTR +allocArbitrateVecPooled(ULONG size) +{ + ULONG *mem; + + ObtainSemaphore(&CodesetsBase->poolSem); + mem = allocVecPooled(CodesetsBase->pool, size); + ReleaseSemaphore(&CodesetsBase->poolSem); + + return mem; +} + +/****************************************************************************/ + +void +freeArbitrateVecPooled(APTR mem) +{ + ObtainSemaphore(&CodesetsBase->poolSem); + freeVecPooled(CodesetsBase->pool, mem); + ReleaseSemaphore(&CodesetsBase->poolSem); +} + +/****************************************************************************/ diff --git a/workbench/libs/codesetslib/src/version.h b/workbench/libs/codesetslib/src/version.h new file mode 100755 index 000000000..a3aaca90b --- /dev/null +++ b/workbench/libs/codesetslib/src/version.h @@ -0,0 +1,56 @@ +/*************************************************************************** + + codesets.library - Amiga shared library for handling different codesets + Copyright (C) 2001-2005 by Alfonso [alfie] Ranieri . + Copyright (C) 2005-2007 by codesets.library Open Source Team + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + codesets.library project: http://sourceforge.net/projects/codesetslib/ + + Most of the code included in this file was relicensed from GPL to LGPL + from the source code of SimpleMail (http://www.sf.net/projects/simplemail) + with full permissions by its authors. + + $Id$ + +***************************************************************************/ + +#ifndef _VERSION_H_ +#define _VERSION_H_ + +#define LIB_VERSION 6 +#define LIB_REVISION 4 + +#define LIB_REV_STRING "6.4" +#define LIB_DATE "29.07.2007" + +#if defined(__PPC__) + #if defined(__MORPHOS__) + #define CPU " [MOS/PPC]" + #else + #define CPU " [OS4/PPC]" + #endif +#elif defined(_M68060) || defined(__M68060) || defined(__mc68060) + #define CPU " [060]" +#elif defined(_M68040) || defined(__M68040) || defined(__mc68040) + #define CPU " [040]" +#elif defined(_M68030) || defined(__M68030) || defined(__mc68030) + #define CPU " [030]" +#elif defined(_M68020) || defined(__M68020) || defined(__mc68020) + #define CPU " [020]" +#else + #define CPU "" +#endif + +#define LIB_COPYRIGHT "Copyright (c) 2005-2007 codesets.library Open Source Team" + +#endif // _VERSION_H_ -- 2.11.4.GIT