pax_global_header00006660000000000000000000000064145411312530014511gustar00rootroot0000000000000052 comment=5a161ec8eb8b95adf94cac9df799f0d220d17ea8 ydpdict-1.0.5/000077500000000000000000000000001454113125300131545ustar00rootroot00000000000000ydpdict-1.0.5/.gitignore000066400000000000000000000007321454113125300151460ustar00rootroot00000000000000Makefile Makefile.in aclocal.m4 autom4te.cache compile config.guess config.h config.h.in config.log config.rpath config.status config.sub configure contrib/Makefile contrib/Makefile.in depcomp install-sh libtool ltmain.sh m4/libtool.m4 m4/ltoptions.m4 m4/ltsugar.m4 m4/ltversion.m4 m4/lt~obsolete.m4 missing po/Makefile po/Makefile.in po/POTFILES src/.deps src/Makefile src/Makefile.in stamp-* ydpdict.1 ydpdict.conf ydpdict.pl.1 src/ydpdict src/*.o *~ *.gmo *.pot *.tar.gz ydpdict-1.0.5/COPYING000066400000000000000000000431061454113125300142130ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS Appendix: How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) 19yy This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) 19yy name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. ydpdict-1.0.5/Makefile.am000066400000000000000000000007141454113125300152120ustar00rootroot00000000000000AUTOMAKE_OPTIONS = foreign SUBDIRS = src contrib po DIST_SUBDIRS = src contrib po EXTRA_DIST = autogen.sh autoclean.sh configure.ac ydpdict.1.in ydpdict.pl.1.in ydpdict.conf.in man_MANS = ydpdict.1 ACLOCAL_AMFLAGS = -I m4 sysconf_DATA = ydpdict.conf install-data-local: $(INSTALL_SCRIPT) -d $(DESTDIR)$(dictdir) test -d $(DESTDIR)$(mandir)/pl/man1 || mkdir -p $(DESTDIR)$(mandir)/pl/man1 $(INSTALL_DATA) ydpdict.pl.1 $(DESTDIR)$(mandir)/pl/man1/ydpdict.1 ydpdict-1.0.5/README.md000066400000000000000000000255311454113125300144410ustar00rootroot00000000000000ydpdict ======= Program, którego dokumentację w tej chwili czytasz, służy do obsługi multimedialnych słowników angielsko-polskiego i polsko-angielskiego Collinsa oraz niemiecko-polskiego i polsko-niemieckiego Langenscheidta. Oryginalne pakiety oferowane przez firmę [Young Digital Planet](http://www.ydp.com.pl) zawierają jedynie programy dla systemu Windows, co uniemożliwia korzystanie z nich pod innymi systemami. Niniejszy program pozwala korzystać z tych słowników pod kontrolą Linuksa. Możliwe, że zadziała również pod innymi systemami, ponieważ jest pisany w miarę możliwości przenośnie. ![Zrzut ekranu](doc/ydpdict.png) Do prawidłowej pracy niezbędna jest dystrybucja Linuksa (lub innego systemu uniksowego) z biblioteką ncurses wspierającą Unikod oraz zainstalowana biblioteka [libydpdict](https://github.com/wojtekka/libydpdict). W przypadku systemu operacyjnego, który nie wspiera Unikodu, należy użyć wersji wcześniejszej niż 0.99. Aby skompilować i zainstalować oficjalne wydanie, należy po rozpakowaniu wykonać polecenia (ostatnie z nich z uprawnieniami administratora, np. przez `sudo`): ./configure make make install Przy kompilacji źródeł pobranych z repozytorium należy wcześniej wykonać jeszcze polecenie: ./autogen.sh Ze względu na domyślne zachowanie autoconfa, strony manuali będą instalowane w katalogu `$(prefix)/man`, zamiast `$(prefix)/share/man`. Jeśli chcesz je zainstalować w odpowiednim miejscu, wpisz: ./configure --mandir=/usr/local/share/man make make install Następnie należy skopiować cztery pliki z katalogu `database` oryginalnego, pracującego pod systemem Windows programu: * dict100.dat * dict100.idx * dict101.dat * dict101.idx dla słownika angielsko-polskiego i polsko-angielskiego, lub: * dict200.dat * dict200.idx * dict201.dat * dict201.idx dla słownika niemiecko-polskiego i polsko-niemieckiego, do katalogu, w którym znajduje się program. Dodatkowo program będzie szukał plików słownika w systemowym katalogu, np. `/usr/local/share/ydpdict` jeśli do skryptu `./configure` nie przekazano parametru `--prefix` lub `/usr/share/ydpdict` jeśli program pochodzi z pakietu dystrybucji). Można też podać ścieżkę, w której się one znajdują w parametrze `Path` pliku konfiguracyjnego. Należy również zmienić parametr `CDPath` na ścieżkę, gdzie znajduje się podmontowana płyta CD. Jego brak uniemożliwi odtwarzanie próbek dźwiękowych. Aby móc odtwarzać próbki ze słownika angielsko-polskiego i niemiecko-polskiego, należy utworzyć katalog, a w nim katalog `en` z zawartością płyty CD słownika angielsko-polskiego oraz katalog `de` z plikami słownika niemiecko-polskiego. Obsługa programu jest bajecznie prosta. Wystarczy wpisać szukane słowo lub wybrać je klawiszami kursorów. Do przemieszania się między listą słów, a definicją służy klawisz Tab. Odtwarzanie próbek to F2. Zmiana na inny słownik to F3, F4, F5, F6. Program obsługiwać można częściowo za pomocą myszki. Kliknięcie na słowo z listy, spowoduje wyświetlenie jego tłumaczenia. Klikając na dolne i górne krawędzie ekranu, można przewijać listę lub opis. Jeśli klikniemy dwukrotnie na słowo z okienka tłumaczenia, zostanie ono automatycznie wyszukane. Licencja -------- (C) Copyright 1998-2023 Wojtek Kaniewski ydpdict jest wydany na licencji GPL w wersji 2 (treść w języku angielskim dostępna w pliku COPYING). Wszelkie poprawki wysłane do autora na licencji innej niż GPL w wersji 2 zostaną odrzucone. Brak informacji o licencji będzie traktowany jak przyjęcie licencji kodu, który jest poprawiany. Wyjątkiem są pliki adpcm.c i adpcm.h autorstwa Stanley'a J. Brooksa wydane na licencji LGPL w wersji 2 i dostosowane do współczesnych kompilatorów: Copyright (C) 1999 Stanley J. Brooks Lista zmian ----------- - 1.0.5 (2023-12-22): Kolejne poprawki użycia gettext. Poprawka sięgania do wnętrza struktur ncurses Svena Joachima. - 1.0.4 (2023-10-21): Usunięcie nagłówka z wersją i copyrightami. Szerokość definicji będzie wypełniać szerokość terminala. Poprawka kompilacji z gettext. Szukanie pliku konfiguracyjnego najpierw zgodnie ze specyfikacją XDG Base Directory ($XDG_CONFIG_HOME/ydpdict.conf lub $HOME/.config/ydpdict.conf), następnie tak jak poprzednie wersje w ~/ydpdict.conf, ~/.ydpdictrc oraz /etc/ydpdict.conf. Nowe wersje automake, autoconf, gettext, libtool. - 1.0.3 (2020-08-09): Uzupełnienie dokumentacji o domyślne katalogi z plikami słownika zgodnie z sugestiami Adriana Mroczkowskiego (athek@o2.pl). Poprawka budowania z nowymi wersjami GCC po zgłoszeniu problemu przez Marcina Owsianego. - 1.0.2 (2013-01-11): Poprawka błędnego wyświetlania słów z końca słownika zgłoszone przez Jakuba Wilka. - 1.0.1 (2011-05-10): Rozszerzenie pomocy o oznaczenia kwalifikatorów gramatycznych oraz zmiana sposobu działania klawisza Esc: obie modyfikacje autorstwa Cezarego M. Kruka (c.kruk@bigfoot.com). Poprawki dokumentacji. Poprawka roku copyrightów. Poprawka odtwarzania niektórych próbek dźwiękowych Pawła Sobczaka (psobcza@o2.pl). Dodanie obsługi próbek dźwiękowych słownika angielskiego i niemieckiego wg pomysłu Mateusza B. (incusiek@gmail.com). Poprawka błędu odtwarzania niemieckich próbek zgłoszonego przez Krzysztofa Sucheckiego (hetteh@life.pl). Poprawka kompilacji bez libao. Lepsze wyświetlanie indeksów górnych (¹, ²... zamiast ^1, ^2...), jeśli libydpdict jest w wersji 1.0.3 lub nowszej. Poprawka błędu współpracy z nowymi wersjami libao zgłoszonego przez Pawła Sobczaka. - 1.0.0 (2008-02-26): Poprawka błędu zawijania zgłoszonego przez Marcina Owsianego. Aktualizacja pliku z tłumaczeniem. - 0.99.3 (2007-12-16): Poprawki parametrów wywołania programu Tomasza Kojma (tkojm@clamav.net). Dostosowanie do API libydpdict-0.99.3. - 0.99.2 (2007-08-19): Uniezależnienie od wielkości liter w nazwach plików słownika na podstawie poprawki Marcina Owsianego (marcin@owsiany.pl). - 0.99.1 (2007-08-09): Poprawka błędu kompilacji bez libao zgłoszonego przez Piotra Jaroszyńskiego (peper@gentoo.org). Poprawki dokumentacji, dodanie parametru skryptu configure określającego domyślny katalog słownika (marcin@owsiany.pl). - 0.99.0 (2007-02-26): Całkowita zmiana architektury -- wydzielenie biblioteki obsługującej słowniki, modyfikacja kodu do poprawnej pracy w Unikodzie, dodanie obsługi próbek dźwiękowych w formacie ADPCM. Lista zmian starej gałęzi kodu: - 0.67 (2006-xx-xx): Dodanie $(DESTDIR) przy instalacji przez Stanisława Halika (weirdo%tehran.lain.pl). - 0.66 (2006-01-02): Poprawka odtwarzania próbek Tomasza Jakuba Skrynnyka (skrynnyk%post.pl). Poprawka obsługi parametrów Jasia (jasiu%tool.eu.org). Poprawka skryptów budowania. - 0.65 (2005-11-16): Poprawki Jakuba Wilka (jwilk%jwilk.net): usunięcie złych zachowań prowadzących do segfaultów. Dodanie informacji o licencji poprawek. Kosmetyka dokumentacji. - 0.64 (2005-10-18): Poprawki strony manuala Kamila Jarosławskiego (kamil%visual.pl). Obsługa próbek o rozszerzeniu .ogg Tomasza Marciniaka (ciniol%atos.wmid.amu.edu.pl). Oficjalne włączenie poprawki Michała Maternika (michal_m%ks.k.pl) pozwalającej korzystać z niemieckiego słownika. Poprawka działania na amd64 Arkadiusza Kołacza (akolacz%gmail.com). - 0.63 (2004-05-31): Poprawka adresu. Poprawki Marcina Owsianego (marcin%owsiany.pl): poprawne zamykanie plików słownika, usunięcie czytania konfiguracji z aktualnego katalogu, napisanie stron manuali. - 0.62 (2003-11-23): Poprawka Piotra Domagalskiego (szalik%szalik.net): przezroczyste tło w atermie. Poprawki Jarosława Kruka (jareq%pld-linux.org): skok do danego słowa z linii komend, zmiana adresów PLD na aktualne. - 0.61 (2003-10-01): Wyświetlanie pomocy zaraz po uruchomieniu programu. poprawki Cezarego M. Kruka: substytuty dla klawiszy funkcyjnych, blokada odtwarzania próbek dźwiękowych podczas przeglądania słownika polsko-angielskiego, szczegółowa pomoc, drobne zmiany w transkrypcji fonetycznej, korekta zapobiegająca śmieceniu po ekranie podczas odtwarzania plików w formacie MP3. Dodane skrypty do konwersji z formatu WAV do MP3. - 0.60 (2003-08-27): Poprawki Piotra Domagalskiego: buforowanie odczytu przyspieszające start programu. - 0.59 (2003-07-22): Poprawki Jerzego Kędra (jxa%adm.onet.pl): program nie zajmuje już 100% czasu procesora. Patch Michała Maternika (michal_m%ks.k.pl) pozwalający korzystać z niemieckiego słownika w pliku Deutsch.diff. - 0.58 (2003-05-16): Poprawki Piotra Domagalskiego: prosta obsługa myszki, możliwość edycji wpisywanego słowa, Enter zatwierdza i wyszukuje, lepsza reakcja na zmianę rozmiaru terminala, CTRL-L, kosmetyka, xmalloc. - 0.57 (2003-04-15): Kolejne poprawki Piotra Domagalskiego porządkujące kompilację na nielinuksowych systemach. poprawka Pawła Fenglera (pawfen%wp.pl): wywoływanie zewnętrznego odtwarzacza w poprawny sposób. - 0.56 (2003-03-21): Wiosenne porządki w kodzie; obsługa plików bazy z nazwami pisanymi wielkimi literami; obsługa próbek dźwiękowych o rozszerzeniu mp3; uzupełnienie dokumentacji na podstawie archiwalnej wersji 0.5. - 0.55 (2003-03-12): Poprawki Piotra Domagalskiego (szalik%szalik.net): poprawna kompilacja na OpenBSD, dokładniejsze formatowanie tekstu. - 0.54 (2003-01-27): Poprawki Pawła Jabłońskiego (pawelj%lodz.dialog.net.pl): wyświetlenie innego słowa przewija okno definicji do góry; rozpoczęcie pisania słowa, bedąc w oknie definicji, usuwa poprzednie; klawisz F12 równoważny z Ctrl-U. - 0.53 (2003-01-07): Z powodu awarii dysku straciłem poprawki, które podesłano mi od wydania 0.52. dlatego proszę o kontakt. Poprawienie klawisza Backspace. - 0.52 (2002-05-27): autoconf, poprawki Grzegorza Goławskiego (grzegol%pld-linux.org), poprawne działanie na maszynach bigendianowych. - 0.51 (1999-10-17): Stabilna wersja 0.5, które nigdy nie wyszło poza wersję rozwojową. - 0.5 (1999-08-17): Wersja rozwojowa. Spora reorganizacja kodu; pozbycie się SLanga. - 0.4 (1998-xx-xx): Dawno temu i nieprawda. ydpdict-1.0.5/autoclean.sh000077500000000000000000000004041454113125300154640ustar00rootroot00000000000000#!/bin/sh rm -rf config.* autom4te.cache Makefile.in Makefile INSTALL aclocal.m4 depcomp install-sh missing stamp* configure confdefs.h src/.deps src/.libs src/*.o src/Makefile.in src/Makefile src/config.h install-sh ltmain.sh compile libtool mkinstalldirs *~ ydpdict-1.0.5/autogen.sh000077500000000000000000000003321454113125300151530ustar00rootroot00000000000000#!/bin/sh -e echo "aclocal" aclocal -I m4 echo "autoheader" autoheader echo "libtoolize" libtoolize -c -f echo "automake" automake -a -c -f --foreign echo "autoconf" autoconf test x$NOCONFIGURE = x && ./configure $* ydpdict-1.0.5/config.rpath000077500000000000000000000442571454113125300155000ustar00rootroot00000000000000#!/usr/bin/sh # Output a system dependent set of variables, describing how to set the # run time search path of shared libraries in an executable. # # Copyright 1996-2022 Free Software Foundation, Inc. # Taken from GNU libtool, 2001 # Originally by Gordon Matzigkeit , 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # # The first argument passed to this file is the canonical host specification, # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld # should be set by the caller. # # The set of defined variables is at the end of this script. # Known limitations: # - On IRIX 6.5 with CC="cc", the run time search patch must not be longer # than 256 bytes, otherwise the compiler driver will dump core. The only # known workaround is to choose shorter directory names for the build # directory and/or the installation directory. # All known linkers require a '.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a shrext=.so host="$1" host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` # Code taken from libtool.m4's _LT_CC_BASENAME. for cc_temp in $CC""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'` # Code taken from libtool.m4's _LT_COMPILER_PIC. wl= if test "$GCC" = yes; then wl='-Wl,' else case "$host_os" in aix*) wl='-Wl,' ;; mingw* | cygwin* | pw32* | os2* | cegcc*) ;; hpux9* | hpux10* | hpux11*) wl='-Wl,' ;; irix5* | irix6* | nonstopux*) wl='-Wl,' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in ecc*) wl='-Wl,' ;; icc* | ifort*) wl='-Wl,' ;; lf95*) wl='-Wl,' ;; nagfor*) wl='-Wl,-Wl,,' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) wl='-Wl,' ;; ccc*) wl='-Wl,' ;; xl* | bgxl* | bgf* | mpixl*) wl='-Wl,' ;; como) wl='-lopt=' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ F* | *Sun*Fortran*) wl= ;; *Sun\ C*) wl='-Wl,' ;; esac ;; esac ;; newsos6) ;; *nto* | *qnx*) ;; osf3* | osf4* | osf5*) wl='-Wl,' ;; rdos*) ;; solaris*) case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) wl='-Qoption ld ' ;; *) wl='-Wl,' ;; esac ;; sunos4*) wl='-Qoption ld ' ;; sysv4 | sysv4.2uw2* | sysv4.3*) wl='-Wl,' ;; sysv4*MP*) ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) wl='-Wl,' ;; unicos*) wl='-Wl,' ;; uts4*) ;; esac fi # Code taken from libtool.m4's _LT_LINKER_SHLIBS. hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_direct=no hardcode_minus_L=no case "$host_os" in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes if test "$with_gnu_ld" = yes; then # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. # Unlike libtool, we use -rpath here, not --rpath, since the documented # option of GNU ld is called -rpath, not --rpath. hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' case "$host_os" in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no fi ;; amigaos*) case "$host_cpu" in powerpc) ;; m68k) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then : else ld_shlibs=no fi ;; haiku*) ;; interix[3-9]*) hardcode_direct=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; netbsd*) ;; solaris*) if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then ld_shlibs=no elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' else ld_shlibs=no fi ;; esac ;; sunos4*) hardcode_direct=yes ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = no; then hardcode_libdir_flag_spec= fi else case "$host_os" in aix3*) # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac fi hardcode_direct=yes hardcode_libdir_separator=':' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac fi # Begin _LT_AC_SYS_LIBPATH_AIX. echo 'int main () { return 0; }' > conftest.c ${CC} ${LDFLAGS} conftest.c -o conftest aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` fi if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib" fi rm -f conftest.c conftest # End _LT_AC_SYS_LIBPATH_AIX. if test "$aix_use_runtimelinking" = yes; then hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' else hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" fi fi ;; amigaos*) case "$host_cpu" in powerpc) ;; m68k) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; bsdi[45]*) ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec=' ' libext=lib ;; darwin* | rhapsody*) hardcode_direct=no if { case $cc_basename in ifort*) true;; *) test "$GCC" = yes;; esac; }; then : else ld_shlibs=no fi ;; dgux*) hardcode_libdir_flag_spec='-L$libdir' ;; freebsd2.[01]*) hardcode_direct=yes hardcode_minus_L=yes ;; freebsd* | dragonfly* | midnightbsd*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; hpux9*) hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; hpux10*) if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no ;; *) hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; netbsd*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; newsos6) hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then hardcode_libdir_flag_spec='${wl}-rpath,$libdir' else case "$host_os" in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) hardcode_libdir_flag_spec='-R$libdir' ;; *) hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; osf3*) hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) if test "$GCC" = yes; then hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else # Both cc and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi hardcode_libdir_separator=: ;; solaris*) hardcode_libdir_flag_spec='-R$libdir' ;; sunos4*) hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes ;; sysv4) case $host_vendor in sni) hardcode_direct=yes # is this really true??? ;; siemens) hardcode_direct=no ;; motorola) hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac ;; sysv4.3*) ;; sysv4*MP*) if test -d /usr/nec; then ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) ;; sysv5* | sco3.2v5* | sco5v6*) hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' hardcode_libdir_separator=':' ;; uts4*) hardcode_libdir_flag_spec='-L$libdir' ;; *) ld_shlibs=no ;; esac fi # Check dynamic linker characteristics # Code taken from libtool.m4's _LT_SYS_DYNAMIC_LINKER. # Unlike libtool.m4, here we don't care about _all_ names of the library, but # only about the one the linker finds when passed -lNAME. This is the last # element of library_names_spec in libtool.m4, or possibly two of them if the # linker has special search rules. library_names_spec= # the last element of library_names_spec in libtool.m4 libname_spec='lib$name' case "$host_os" in aix3*) library_names_spec='$libname.a' ;; aix[4-9]*) library_names_spec='$libname$shrext' ;; amigaos*) case "$host_cpu" in powerpc*) library_names_spec='$libname$shrext' ;; m68k) library_names_spec='$libname.a' ;; esac ;; beos*) library_names_spec='$libname$shrext' ;; bsdi[45]*) library_names_spec='$libname$shrext' ;; cygwin* | mingw* | pw32* | cegcc*) shrext=.dll library_names_spec='$libname.dll.a $libname.lib' ;; darwin* | rhapsody*) shrext=.dylib library_names_spec='$libname$shrext' ;; dgux*) library_names_spec='$libname$shrext' ;; freebsd[23].*) library_names_spec='$libname$shrext$versuffix' ;; freebsd* | dragonfly* | midnightbsd*) library_names_spec='$libname$shrext' ;; gnu*) library_names_spec='$libname$shrext' ;; haiku*) library_names_spec='$libname$shrext' ;; hpux9* | hpux10* | hpux11*) case $host_cpu in ia64*) shrext=.so ;; hppa*64*) shrext=.sl ;; *) shrext=.sl ;; esac library_names_spec='$libname$shrext' ;; interix[3-9]*) library_names_spec='$libname$shrext' ;; irix5* | irix6* | nonstopux*) library_names_spec='$libname$shrext' case "$host_os" in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;; *) libsuff= shlibsuff= ;; esac ;; esac ;; linux*oldld* | linux*aout* | linux*coff*) ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) library_names_spec='$libname$shrext' ;; knetbsd*-gnu) library_names_spec='$libname$shrext' ;; netbsd*) library_names_spec='$libname$shrext' ;; newsos6) library_names_spec='$libname$shrext' ;; *nto* | *qnx*) library_names_spec='$libname$shrext' ;; openbsd*) library_names_spec='$libname$shrext$versuffix' ;; os2*) libname_spec='$name' shrext=.dll library_names_spec='$libname.a' ;; osf3* | osf4* | osf5*) library_names_spec='$libname$shrext' ;; rdos*) ;; solaris*) library_names_spec='$libname$shrext' ;; sunos4*) library_names_spec='$libname$shrext$versuffix' ;; sysv4 | sysv4.3*) library_names_spec='$libname$shrext' ;; sysv4*MP*) library_names_spec='$libname$shrext' ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) library_names_spec='$libname$shrext' ;; tpf*) library_names_spec='$libname$shrext' ;; uts4*) library_names_spec='$libname$shrext' ;; esac sed_quote_subst='s/\(["`$\\]\)/\\\1/g' escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"` shlibext=`echo "$shrext" | sed -e 's,^\.,,'` escaped_libname_spec=`echo "X$libname_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` escaped_library_names_spec=`echo "X$library_names_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' < header file.]) AC_MSG_RESULT([yes]) LIBS="$LIBS -lncursesw" else if test "x$have_curses_h" = "xyes" ; then AC_DEFINE([HAVE_CURSES_H], [], [Define to 1 if you have the header file.]) AC_MSG_RESULT([maybe]) LIBS="$LIBS -lncursesw" AC_MSG_WARN([ not found, but some Linux distributions provide unicode-away , so let's try]) ncurses_warning=yes else AC_MSG_ERROR([no]) fi fi else AC_MSG_ERROR([no]) fi export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig" PKG_CHECK_MODULES([YDPDICT], [libydpdict >= 0.99.3]) AC_SUBST([YDPDICT_CFLAGS]) AC_SUBST([YDPDICT_LIBS]) AC_ARG_WITH(dictdir, [ --with-dictdir=DIR Databases are in DIR]) if test "x$with_dictdir" != "x"; then dictdir="$with_dictdir" else # Substitute ${datarootdir}, ${prefix} etc. dictdir="${datadir}/ydpdict" save_prefix="$prefix" if test "X$prefix" = "XNONE"; then prefix="$ac_default_prefix" fi eval dictdir="$dictdir" eval dictdir="$dictdir" eval dictdir="$dictdir" eval dictdir="$dictdir" prefix="$save_prefix" fi AC_SUBST([dictdir]) AC_ARG_WITH(libao, [ --without-libao Compile without libao]) if test "x$with_libao" != "xno"; then PKG_CHECK_MODULES([AO], [ao], [AC_DEFINE(HAVE_LIBAO, [], [Define to 1 if libao is available.])], [:]) fi AC_SUBST([AO_CFLAGS]) AC_SUBST([AO_LIBS]) AC_SUBST([HAVE_LIBAO]) CFLAGS="$CFLAGS -DHAVE_CONFIG_H" AC_SUBST([VERSION]) AC_CONFIG_FILES([Makefile src/Makefile contrib/Makefile ydpdict.conf po/Makefile.in ydpdict.1 ydpdict.pl.1]) AC_OUTPUT if test "x$ncurses_warning" = "xyes" ; then AC_MSG_WARN([Build may fail because of ncurses headers ambiguity in some Linux distributions.]) fi ydpdict-1.0.5/contrib/000077500000000000000000000000001454113125300146145ustar00rootroot00000000000000ydpdict-1.0.5/contrib/Makefile.am000066400000000000000000000000471454113125300166510ustar00rootroot00000000000000EXTRA_DIST = wav2mp3 zwieksz zmniejsz ydpdict-1.0.5/contrib/wav2mp3000077500000000000000000000005561454113125300160470ustar00rootroot00000000000000#!/bin/sh # Konwertuje pliki w formacie WAV do formatu MP3 # i wymaga programów sox oraz lame. find -depth -type d -exec sh -c 'cd {} ; \ for file in *.wav ; do file="`echo ${file} | sed 's/.wav//'`" ; \ sox ${file}.wav ${file}.cdr ; \ chmod u+w ${file}.wav ; rm ${file}.wav ; \ lame -b 64 ${file}.cdr ${file}.mp3 ; rm ${file}.cdr ; \ done' \; ydpdict-1.0.5/contrib/zmniejsz000077500000000000000000000002701454113125300164120ustar00rootroot00000000000000#!/bin/sh # Zmienia nazwy plików na pisane małymi literami. find $1 -depth -type d -exec sh -c 'cd {}; \ for i in *; do mv $i `echo $i | tr [:upper:] [:lower:]`; \ done' \; ydpdict-1.0.5/contrib/zwieksz000077500000000000000000000002701454113125300162470ustar00rootroot00000000000000#!/bin/sh # Zmienia nazwy plików na pisane dużymi literami. find $1 -depth -type d -exec sh -c 'cd {}; \ for i in *; do mv $i `echo $i | tr [:lower:] [:upper:]`; \ done' \; ydpdict-1.0.5/doc/000077500000000000000000000000001454113125300137215ustar00rootroot00000000000000ydpdict-1.0.5/doc/ydpdict.png000066400000000000000000003313161454113125300160760ustar00rootroot00000000000000PNG  IHDR&lwsRGBbKGD pHYs  tIME  "+| IDATxwUչ>kr9;T#JS\M,QkrcI4ĒXQHm^N?{U~Q<kwy׻PJa=zBO.wH H(_~g% v_^ȼGeEc$x $@[ A"?_(QS>/yz PV7p &,DTmNBrG1H 9 "V_/u5t}I.$}a3B+$Tz}nEB}R^0&:tr9.kKח>:S}7khh5zjR 6_^JR\JITEEsP{'? B yJFAA/pMN]݁[vqjZϮ#ܦ"cҞ)֩ =!9xrF c& HIUB vD+];<^]4tx =>+:u 㦐r!8 .(BX?tѼo %\)AR A_(?U]ˎ R1NK@c}DB0s2$AJ@0ho{P/ X7b$FQ& wZN՞CLTUu͞U0bѠ:w捽\!BFN'i#fWkSzG[J)! AD(;cM}tbZJ єT/,{W}kg\dӦ-=n)?RI0?'瑇\Jʓ?ξ#-IB0df Xl5At ,DhxjBk8b(aBJn׭A tRnPgPKNuD 2lJUj[*<ј/K${ %$X 2E2LMI!2o\pPNo>yO?rz܇B Dbܖ)Ȥs.TUk mmH0H$ NG8LHe"Au}`afcI9lpQ`[EFMuhVXuێ$8RD ϢfV:iD ҮVSsϦC]1@D c Z[!w<:aܼ$X8jԝ~;jm{.wв|gG.Q:6'McɎ 駇7 |WNHM"͕֙­yhTЉciޓAfg3XsQ(&ظ%n+e:߮4ֶ$m3Z*{K졈h4"uee ʱɌHJI΍+ J\]&2\p " ɘҲo,3y= )D&8(j5L#|Sl֍s<|񇪺68WdZf<')o+ 8H9)lcǎ3W/+jjj1#Ģɘa") ;XHiKg87zo/V/ߚ` rÇMۮj~y޳@ttT&ylIVO9>xAʶ;Ǥ)?"mwLwM>OW1=}'k{ߞo=p(u/-Y5$}noΝW0kjEo<(Y2hܽ=x׎Jڿ*Z>k2 \27v ?U|f0Sy?t㜤jl2&  K!t䓔YOJR@$ UUY@JpR0FGf)B2KRJ.PO[/w`!""H)H?&Bs!]^:Lݱ':N#Qp!\N vCJʠ1^Uk̠dhm: J:} k9wZ㟟zO%%n+3(i{W7AKjs'f6?Ufˢ톽({jiX<\j5<,'_V?d2J`lGPl`ՄkJb/F .%Y?{#dg*ƒ'.t~x.l꯼yw#H8} JHOvw1&%P >;`$B1B( b\$]/e0 E \-nZ& }3fLB*SjB792[" ݲlAoӟ59y͓=9Ӆ._Txb :;Z4*?;WyG A 0.OXD ;J. ́q(A2&4`Z|YE9?zo"vhIyeqCE/A.eA /!TP$3 $$ɑPw2PWo:S!!ͭ0*+e`ђM xT #o8QukC+H*D_r&e#:mĞkKj\1um'ƞWVc+P:jVn=@ 7><]^{ckߺTg4`-Y~9&UFѽI\坚g}/z.0) 4jh!įϷJQ=#3-C[*/-~ fO1?7a)NsCzQ&꾑'WXVzZӯ7ZboˊtI⍸J}>E$j  2Kqnq18wXQ?rBl@ )!ΰXп_=QUP8 ~M|8;!D45qd~0l7LoX/+J ģs\!$V}a<;2JѥP(R9QtȖ>xIb.mݡXqӗ^mozߞ) *:oiBinyK}I-MZ;JK-5d4%cg=" G{e+Z'O70-MV0]}筓@5[ЎO|o׽{?̃tNKQKMu{*VC(VYA8wOg8\6;cY\$i&rã/6LW=lѷAYqH ~pʲ+kU| F,&,d ! %$^?>T|<ڗ zbՖ?BUisCc^uuV8D'|[2{ڄ'/4LD?\B[--$DuXVGPiz4'0& 8Dɴ!TDC3G0O1~Uţ1z*cQSSdoCm(:3IЕAJKV>2'=thYeKa=K2 `2L%زԬ y2j 7Xa%w(emfW;J  \P`D3 kmL6%br iΘpBJT5{m W{I)UShh@'5WP0VWu )Po&Hjܘ7d[[^79'Hw?u `i$UT߸ + $WHx,Ųwi/sv#PоSٿ 32{}̲4w0g >IJᥟ͎ڎۊDwȀzRW\AW79ܞc=@jqд@8u8viۦ=&UpvܭQa\GK<8}y%IG8Dm~3yǫjB<ڳOJZB}ct^ʍPI źo7;߮?`en|q"&͍ʓLOuuUH_UUܾ G*&ݛ?cY1bPth6/a޶LH=eczL;\ s+6dfjL_ḠW1H,9ZYK !ʿoU)7 N_d_?7vR:$w6 AB x #\MnS@''\ 0Gƭ41to~^Q hDB)rx: $O'N [$!  A\[u>G= Avwv1 RTѩP&Vd1˲NgDŽF%@ $eL J!Ga1+[bXPJl9:WH;yxGƌbČkM H`t]?TQӧ*!@H)MI9vBO>ue{GNt3#U)ɬnPEU2-!PKHb!Q5 i^@D2ABY삕+`~Sc_hLKz$T 1_Q)8BU0IKZRfslx[[kܒgkG J)Ѳm'Ngw:zC18&^cFgo{[[WI PL(.sv&=-!]Q9g䧩:QJDQU2-.R݆ eRJBUMUR00,.$~kArӌV5D*fm93'RR-`ȾǣÇz5B X'?zGQ5-.Q2 &&TJŃRV(zsȄ2'>R%DU3HT+ biq (Aj4 $yo0,Ei*% e,&9r-)|i԰2JeЎ#zcBK7%hG^>5[ݢh޻d̨,/`$Ԧ;10ͭkzNl#_5it-$PņΕi/No$gr󇏿!dP7A!"NH˲R2l6;Dw8l A$eS$ U4y.ݦQBttyۡ+ HTy.éS n{-\v% v vy] U)>=:m @7[~ŞEH$ _ܛ"ֿf5)Y뻚b^jٿATUաw.pӮ^X;O9\qS,>pw#"pbwV` ʝOuUN*xd.vn(AT.J$"Qn<^CWf= oj|g۟(vsvˡp9.q;4ɑooi\$J*&Uz!1> IDAT^yu["Լ磕[Xުg E^y&1U9R#}6~1_X~2J/-mSH @lSz7p +INOr(h6E@vh ;N}5hZ^Yq, E$pg)(Af;.u`$e7"cS"Qm.q5%G%Ajw5Jz|˦RD 6]("(JfL롫 ɿk\R"aJg#/80gl7Tiw_^HY[onhSIrTwDɪ^۰knW QFk{qš-5;hDཏDmYY4ih&f+WiEW]>vjӯl1=3,5)>HUp=m7<\-^(D$tƌDWW6yg)sXhZlM]#nyƋ~EƪJdAQ돸g?T .cVFxosc܌3sWn6$9U`pO>LكjlI.vn*{)7,9,?̊8GY0J-_]0f|7-D|ivTR.]:UՇ.T &Qհ}Ӌlg&uB |/k˜rɒGZ?:O97RyfJ ˦Ν:ȟ$*yƑ1IjٽnՎ-sK43/_e~fuDذǖδ~bkˍ# s Ÿ9S\ T]nwy>ok䫨 f.b[Gzl+ ^}q`wƎC>B-HI*Zw#Gzd "GWh;|3K\J_U&˿y$bT>$zc_}ׂ\vھffܫN.Ló -ұ׎x,vC<Ɖ䙗]55OV{;me,72SٷpwE#3PSGT.EQ?6Wg^hh׾7kZ~R~v|]ޙ5/9QK_zɴq9qͧ* oW˛tGF\)c1yRE"1VTjkշN;ΜռwjFY~-iVӥvQUa)P$վcՇ췆N:9m?]tٕl}-gZzT4[g]ަ!USdθW{1O`4o_F "HˈEBQ: Bx5<|h ŘdchfkfD$$;"tTU)wA/RR0(,+.eDu2iH9}Ƹ30K6>bzKi:Z gaTQ vwCZsu%=Ջ1YX7fOu]}s/ 6SsͺDE&M}N-JslK`ތ%^3?Z;c쎍tH=r荧Z9G%Ei?pŋ0}W:r&Λ:aFtʶXgmzIK,Up)1[+X5}px׆]m?a!5n;vm58 敃JNZ0g΄S;WJ#!TEgG3մ᠟ReO(ʑqY/l2]WSpݙȺTsX[9ss ]6aSӆn{ӆ뇕wGg~*&9܈ 2"Zq9iY9&$%ܸĕKHcGO'Nq򑣜MV(( Qӧ>Q3&'!-SΆnnCǚQuݸt[˅"Dѱm[MFKto8PZ`ݷg8?x=W͠9xЙgIۮ{wceI&+1Oh676y0O{|6Os4u]]<~|!;EUҶ 0G%3b_8'\lƺźϛaqȋ|h$js~-Ynӗ\J1(ӣIgBGz9!Nɲ1d rc)gHDN̲TUX$d b&cqfTgwtǬW&Y(DtO{U/ߍD%\( o됇Qi9ب0I\ yI$sjJHϸYl d9%9E^A܈6gR^*㰋pOĒ)Ò:ݺwkUʬD AR=ehXtg 3LbL@?KsuJK8 H ]tR50i&utA]SSʹq[I*^ʧPwG`sK%`D*hM`X~wԔ)K9),$*6޻7\=,B!7tv D tLQhЊ=#>0;ֲoGVr77Pg}n'vwN# ]H =I1`L/QRXLKneqTX4\c3/@5q慟i?L0,1 ^tO^X9?/A޹GO}/_SNUHⱁeI)LSXֹf̈C;, U#gKB+**/Nvͽ9ծ~ 8ν/IH/ \M/KV%BJ`0MTz/9lD9U̜|7tJ_Ô}ܒ#/rl[pXd (FYda$[]G)V) Z$çE:Òs ~VIqEyM?|:q~/P,bi|^=%Mvk Fx DUӈp9,W^wa*IL`4'F8 |jmI˺yW]djךOļ'f˶# tǵ|BK~ Dt;7$!gw}w] +}Su)4g|5j.='6Su,UΦG >.> т{FM1CPgٌ0R g=eτ7^zLN&O·w겛kB0pe%ݏ>΄Vyiߠ;~HV{?۝]^8u}{eNnS4S7jS'e}pewg)cZΆݛ/-b>{6l\(X*HI)).G ,FTrPhakj.\"OӆړJhе}PvyZU='lk:6în96MKɛ?\ʐ}ﭬDF"^S .y HHj;6]W5aU QujM/< Bs_]eH kk3fI)k_zwDy^[s,2x']2%BDXSMRDMotٳq}hmaI6hPFN?!y }x*л׷6)6T!VvmIy zjnTw9E4LL;DV1(I#t]w86]tӦ)Ȕe>8X\$%Pt/RUNi6i'^zi[+񥺡~77.-nܷ- $99m#ff8Z6l:( \ >vTh?7=e R虓&Ӎ/cy)cǍlUm^f Lɷ5]_ ƺ*t%q9 9V>1ɝn>Ǎ&-/`ku'HSf}Uk-[j_]!A-wE>4o\4C !fwsߨ2U0a^0( zN*sw<#np8{fzӪ}"AuNM{̜H>nh7҉ik?ljdTo~pfvlNánwΖ#;?8~Aaj@斻 Q ~Ԯѷ`Q¸̖= vnK ptɫZ|Oֲ#od/l/57*Z&rGˮYpO#5A2,VܶiCR@ @m=c_|/>l !2s^dCwd||⫮y;1c,~ܰ-~ <2_0"3kVȜ8؊m!D˝z#[2s?|sR5BCW|b) Rp*Xpu\_vՌ%ݞOg^iɍ;-cS~Ws,MLfj<:cHR?+sѿs/YcoX[İ=*~yՒKtLKH2R Eyn`K7>z9HlٵΕw-?uoi2}?av1]1ؑ泇v={}ߵp^COvWϿ[89-0 g xl.iOO֝Z\rٌKf^uUߺR[y%W.ߜE_x̟}ןueSɹ.cۇм$:+!ë;Ρ-t9ue_|ȫw_rsUӮ4B*sQ+Ԣ-ms_.[)YIIqfY^}A] 9[Mkim5|{_>b\pθR.4~K.W|hO.{ɥ#rﭿxUW'/ʪֶx40PEUTJ$L8*(ŘžWRJ5MH⭸cɸHJb *R<DJBs gw) $Ab#HTj dPEU)[&CU~jnuB)UDLH@UQi'K=㷿G!3b\9} }? X?TQUBqA(E['{_D qg=REQT̴g%9rTUϺHaũUe1!P%~!Ha1s.⚭P 8gb\|TEx<- TArnB*B=qT/2/ !$* Lp!(B$gH*?N RCOٮBUUEA4-!1>Rp_u5> % ʳK" Am  AqDU#rgiqDP8)UH D3DDJ!JLHDlEY>'RfdffwOp@&B%p-TU[tMjzFw{sxV9?4"H ~En݊ƂKo2ά8WqMCDF 9 H-[!7D$)GxٯD#۪=jH$?IaqضYb~77ãq=?>"uPqj"Q#دwLB _$}!j%ҀS>u?ZQ;ۣâcw ;0eάs 8\.⩶kBy=.{癶uzS|ssN4΢c$ge>3:[E4]78 )bi[ Ҷ-4ǣAH:=-4̓%I):,\pSL" k59qs3ʥ;'gk.gV_t'I8r;|4M۲'t" *#`kg\21-43^3ΏXDDBKID|p<껣?Y)?[gppLi(] IDATcr888888&crP!S3r"BVzoc(Si>^៯* vLFz:VUT!udBG,A0?OU& ֆJKM ?D%OcLzH4w_or[fg%sLU!s$9cI)Ñʕy4%"ؾR՛ Y0@uD2^IA(R&gBT!$=)xMM(bR!Ug$ \y~fF++7;$%OVåUrJa-Wx R S8=,;)YpG%II;ŧYP$Ak%)dm_Ɛ$I)~  PJ;!wG')ܭd^$1V2$d9?jn I}蝋 ZwlbD:yp`d ^a>٤{ z; 3QՆ9ZwhAҡJt޵oy \BP}ZݸA4<7|׆71cHW׭!C g{\@igW=&r IڦFx4F [IaeYrGz4@ДN /K  Ŏ]٭ݝݳBLl,fZeE+=_藟|Y2Ew~0E!2L4abaqKDewӈ%0LSH _9^+I/xWW I&g^RŷF567bqôIˌV܈NnL!aF,7 [H aۆDEX,F%$HaX4 Y3 AÔ\ۦ0$MLMC'iپ&:d.}ڒȿ6N T utW4b>t@nX͸)v^pMvJ%N_5(m0ڞMD { $-{bh0mI$lӨi ۈEVO6qTcqK }O]?yz|)ݮxZ+7c_)s&~yvAe:YOqC $zM}k:`uW?zFu;'(}Ih <{EG98K ) зK)vy'^Q\W, d4,hߢY۫4k鑾Ϳ/-*A}u$Ko,"si9͚jW} [& SI„FW>z˜JݛtbCxyءi#w5k5vk9ۂIB5݅CdŠ ]<sKn{f9vԌgx'uQ,^=cy4UgHMR*$?sܪٺ-4 4(h&͚mTUMݪX22 ˳`W(vH iS_bSIys3r.VҕeBIR}#Y x伒dz{~ kQP}sa2yB }kDVd4q|`Ԝd@aΞ梵ؾ{ tnWؼqc7|}7LްjջSg luv|bؙŠ+ VD5,,9kt:S;zfCʰ1:a7<U2+3ڦ{h=N]CJ|Wo-նss7iޓ=Ok>?=mU5hR qUWʧw8SX|Ȥ1E!tɴ'_C>'G;"Y+a>zw3qjc~tm*%KmP)ҭs>g)h߾QMGdMhW_|챱mx*D4b'_h5$7 {UЦut.n!@=ࡽͿPSv.t@?;QE9}ogqcwx|?ooRdEjn~¢zKE!?EfxI%]n1lɅn"@@*-ï9(ГX<4HZ1.O=7򫚓/a[~ڃ|=wT {[ty??m!P]m7~?.R9jw->舻YHb˷ӟ.:k~q]b++/ћ.҂>oUUyӬ'n$-b l3R䐰1E'J2B$ ߳cu#/>iinKE._?-٭rH溼PdݰdްG+0{ۻaA.Ҽn]a]Դdex! ,ZY .f"HD[o?sSr@`.'9٫xzt&נG*4(P\4 CKN͝{T^]<{ibk2Zf2(^TTRZewǗwB=(mL/0JklQQǡFvDd~.32ś.1o1 rIB#TS6-@=},BQ 5қֹosd-PwLhԄE"-&O23Ձe#J Q`oF@PS L.0wCV|9>;؅Ȅ)l"vjRhYM:xui820cUaCIROISrD swO۹DtW n#6z~j~.3Z'PlJa澔6=Zx_70@PsՕ5!!۵J WCrYhgPM$ Z_zRn;Ty={7 l &vȓq@EIm;FCWݼ1LrbySn ]pRd+ʝa9g+Nͻf nkpډ9:5Moȗ1b!$UZwV1i1PѴAbOFYm&KrOBn\6,G9W&X&Z_pm|.d|ezo%ݪV~yu\u `@u j3QwY ǎqAEF6PUecc6\ᴵ &wcXI\VϟtqώZⳋ):d<3$&hw޹ !ho/>w'MzOiPt*2;JQI 3ڇhV承٧]t3 @XQpo^,sײ9v (gGhBI3c=`D:fkwv*E1]cV47k`,Y|Sl߾eiO.\Wi1:%}.>eݖU{k. D#ddH0‘HL^|iouQqLSCk~lڲ5(95Ֆ !\jWxP8A({4wAFvDhW,?II.v]#PSI1 etr&1k~$I]C6h`)3* .ojr6FdEa"ֽ^5*g m1t N"S>ǻNlI${L2K\|vμWѷj*PuYj& S 3\S"Jd;D-k_1{ŎW Oj{) vMa)\b5ѽ~'/ӏ$LDvJfXGDV05ܝv'3RUN, l=a, "ءPTCƙD UU|*J"kӻu嗿q|keEqhDb yhMyd\A(=ydB 5K}~s$3y~1{]u_޺gmoT]1y`c!hMyH(E4PYjZ`ܝ31mZt˱oAxME4qF`ej8p #TUg|2X*[r0*JTfClG;ncvLA4-EB0#+vnSTkO=Ŗh\9!?S㮒?MO/߶v\XƜOyn,ڄPUTUUfUxgOMn~TgmhbVXѰUJ|R{K>V'f5b%;#͊: `#qE᪦rޮ[ 5]Set 4⌱ÞGiUg>>9w}?{T9op_3"یۉg:6Z\6bG"ˈCV<^+UEI ESU/ d=6qQ |?ru@dF/\{#ݖK8ZsWr}TSkOץG/2g#$=9BHas#DBQ"Ͱtf9W0'Ҙ{F}2e(44>yBr3}d?:O6[=?v $&MHa !+3^ %%v:$&)¶keWch{n߯RB 6;IBضe|'g $#+tog)iZa&P>ԦDmĹC(tr7mK-QM3lۦݙE}3I#rEךTclĕ{;~{Woك 2A9s8k%@dh,nIbU/xsPׅ!3k?DD(/up4j|ZK$r"h9J"@p(-*i51@2+, ;%3A ]۫mWZIA߭8S7_~Ӓ"3Io_Yʟt^fzpKk-aeg{7IN19u9_Ya"-|YmwolDN#iePۢJnjIA m5 Yj"A'G*i۝;dʳwOX>5㞾o}担 @ZڡmIz7U7SgC²^$Z*$Lk7`XR{9!$mFνऊ2縚crib -ntp^2W\o@#" R3F"!ltJo$m!3KX obr8)rti޸M IDATVs8T%''Ȏ$II)A719H { mX6Q'oN0m{=:BOOo̊ut`r114%"!os" F$ꚢ5(| E@(3hĘ#G]HvHIv]jdMz粍0iCHJD$Iqk:*aLB"4s"{*N<#,|"IB$ (QGJ)I#F%:[eC߈H[ B۶v~hBɽ@$BolmEM[=,?`Ќ8{qs$DKׄm"%f< T4'B0Օq&}C=Dqs h4f<)+ڔ(xV<6p 4 &6CTRҒIp5JZO]I H5eT}A"cfrȲmKn:cz yߺASkmwR+QS}2Dǎkn,VYDD3ڟrOn,4aw/ fb/g(cjVjlɟ|0aNY%M^7㋯gvOu;-FO~k#Kw}{B QZzUbQj.Ajznccg2d.'a&5zC`UmewiЗ0W ].fYf'tF{Vⶍ$bїuts Χ6&D# ,0`jS8888^Fۥn~SyR!OzMyaUnяSY!|Y Q?( }O!=X*WV) )΃F4<-Q/%So+TrW-wlx'RyY7>rppM!؆Uuj" wFY]5W58k DȴTr )X懱tnj\jW'L ˦Ν]2ᗱ7śV-wtfi|WMk&Z vGENH52'h]{WAsG7 *0I-hŠh5"@qpp8&^()M+~[ym76 ^ 4EQ΅S#T5MQGd"Vj7$2¹k.%Ջ4Ea2Vpy\QE ȪZ;o8h*G2n7$c\5:.#U)@ 2q({)5109 p(so[6 CD\>0õ+W%0]?:c^R }|fV2xug6w.WίםE>V֭vL@ײ9W_9qqQA6ʫ,scVF4i}<'_vំ[-fn^XmCO;#MuBRv ohi,M{%y!xynYknfveO~_9kͻ3w6+).Θpppp8M et,W,PnۧM2 ${o e۬P\dx|~ϥpA|esr\(cg,~Of}V@03Oe4î8p'q3I+.&- &B->UQ-f1ܓI@5'eW * q$>f+J FDU4r+dK)1;js#r q逜d緟fӢi 1W0bxWб:ǵa;Z\QL!6l+}Qk =-'?/E@614,h|?Gרuw>}e(PݻMͥbjVFX3 9D%!,S2˨XԌ%߽;!͐{9wgkkbo# u /i0s宭3(kz uZ#"ʒ&W|mxr] T4ݥ )㸵Uq]o;3lb4!_)KsӾY6&*Bp쪃 Yՙw^v}fzҖ-2PthTݣꇻ۫wݽWu߫[5ݫ49Щ79Y3w؜$6n rGǕ!CE*:6o0;F\QYcv41lAz0Q[h,P??Iiţ<..-ӴяDv4l(.]Uvhcq\~kœ рѐ@^~-J f,>QINN(, G@qG'c@1 ; &E%iLA$ܻ$A &zЭY!Gy0hkr}x";V=rz5҄}ͣ=Möe}I#@J֗Oo[niɎ {-2U)g8;Noa=7B$zvʃgW![Ypj?TYԁ|II|!79k_6H2\ߑ(.w_ݍVѸB2 e'?6-mfe^-iI 'A//E4xMd& Tg~GO(,{-iKQ&i#;n۪PZuonan18S_gYx;b%g^Sz;;H[+c3?)@RJ覛.>qB*?DDI5}RC E~^nrfM;6ùo<[b¦w={ 3Ss#$eLK7" {%xguTWtiSRw3KOoo6`]^wZ k 957x }++MWٷ^7l@;_7|sΨvy BgV$us\T_i>_|N+ iwwsլykZdZffrWypiT>qFH(,rekb+ٟd@6mR;H0)pFSJߠurCb 2Qk?8iTa~e7OĻd Oî] Pq؟-@)H+g$.{: wPH۰PzA ޛըS rȝ^\3}X; /3SMr9nnLm7ܫuU!Oa*.d0I/l_wm|My'aKVc_3 g[= % xX?~] [KO N,ָm4\9(4>e!D/ AiPcd8:>N*9!_֭V]+%SI"68S~ܵ5=Iy~{8:~?}կJw 5G mjޠ-Ua'rcO{}_ɎMtNdan9MZT9]u33{ZbW62o%;y =Y}{'W 覷פ7۲]_7s=9H)xyuψR:;g'g,lcKzÓ.z۔n$0km2.ybuU+sd\ zD@垳pfK!O>xZQmyF߻t@ RqVA֗e8l 6ƾ|;WivSgͩݏ1"BLv}H ؚVHk!ȲRZ*1 Z3 j6`PPl0-)=Yyz6/30NCj&nz5p1N7^?Y7.zZ杂}jd&.P2zd 59'2K @ l]D{r!){ )@J`,~P9NA4F4 I@КFm߰Z)ひ`f!_%gP $AQ^D }u1F&}rlHϩpLIZoƞo_4Y{gUuONafH;"bł-j4Fƴ71b+TJfS^J}-$1>?9gsk,f$eCxJ.iW,P\lz9a\_WM[|M tkH IRd5[7+nrrl=To[ۛ Ydѡ#ڛJ0c3[YmkEN\vo_{G0T6lQ~" ^9T\v :WkӜmRXKkqhhb4'\FppK$d[d ۥDD>oO3]8R\y  U(قM fD Ip@#@5r#YL$r!I8yL҈76B3C)DfǮ-/vKe݌t8 fa0PҠ6]pUg?[Ɵ\g+OQS~hUS%OuҲdl r3@B7kyo7";┑1Abp/,;ҍ5ekBc1o(3:w%1VQl * FҤps r-H3/On4ײDSE:Y^e:a!'}=ssZB3A+[wήS[֩Cu:Mkn^حyJY9Y.l[BsFnTVH*>1y,qkMlߐR  ׌Ē7Q؏ShD? vR'i //&w~|PR(Mp143k֙ ޻7x42Κ!ӥ99jf>ȿ64FCi,IpPWe\,,1~.&= r5nM80 M*,6 ]r~@.oSD rX,]B%?#> UKKuYZDZz$C^`pPЊCTLiDQ&PW mb/ktBGYDBbJVF^ 'A]e\G9oB,M*'fTW΢3ڒ >*@AWI3g 򲸺 G$mQե'jZ)t QP=|+J.0,C4ԓ{חT'>I%kcVgYfIvUQΆā[䅗Ψ/J#|і:؇ aئB,.8.┙\t۳gс׸-x['u箴Lа5(l_ƛ Θa_ft}'sGN.h AredEEZǎnחHӆܸ͊q۳c߆lbǞzQj'EeىD-ﭣ0z0Im6̑®J4pq5ZxHN ۧ e#ϼı#1aуW5>U H/F Űbvza1u:Շ󠎲$X4ɟ\}HbT ΁a:Q^Lz^Z@y3ƈS0t^]bnp|ǎͽfhnlFF8 OapP%ԼƠ 1UL4~wla3Lv>PmTWL{sQ>Mi0܋ra8T" d BڏP^K TЉL=Pqs%DR6uUcu8c $ΜJR~b5u}{N@7mrY}Ws蕮|Iv9xcuuC?Ҧ}?{y0aHś9^[VTMcOFZ`ѶzQY8n;/XV6U rPId.PU5u ŻXP߁OzwT@ᣌ5q 5vb$9Џ=?H+.cn.nACDt2޼FQ2<}8Wq`ЉK@ewhK/:Hz8]r`;>QI )}P+wCv,݇( ]\^KP8W6!9yū\qUO@YH#RkyxGb,cd!/|^P-#&Q 2dT,v'A`A<ڷ` v ɃATꪉ zcC4 f;!KcRk7ou`XdHicꘉ$VрHaC :1xvyWCF1dhKzK\IɐR7jh87=fSt̬VJhC}hZ"ְz*7^Wup]#FO  p :H{ $#]c1G1m~w#*ea9+n7IGeC}(%8"l2G%4pL =( !D1OT$GDyLRztֵ=T5|F+2rzRQr`:CRi^=XnAaA2 f0S|m^{DWCm8m·&mZQ8t?kCnؤ3ff^䱃C3nFNF IO ÎіGqOyY:LA.>mW+5Ҳr5Fˉ45܌, f$+/)@ }G:Eu'i{0t=6hxeJ˰֑YcI¥_ڌ8HZߠ<~$ɇ}D Dzí4LrM'0QG(̀{-hS$ 'r'iqo ed3.7m׆yDĂJR;6_DXraҤRdNj@vQP'FoɀȄHGaiC:%`DaD?]Q|(Y3Hn_ΞҊ8[) q$9.߉EY'8eN7`G_>nC畽] —IKo?۴d*i4 92 d "Q<ힼHBڑϡ?n=Y /BD@3a[-dV-琂[ZF[uN '~jҴz_~)q2a7+@CvKs՛=&a4;ΝBe5 3A7gQ150fWgZ|N0-/uOfűQXGnuOͭyb/!)%Lh?ZELD dSE$δ"uK~2Jb /JL°hu#1#~ΙΞԧ5KA'AFfւڌ3qYL|{2@cr1?b|>7P<>d/C\|/E?fQrz;Ba}7&ae3}gu v;@d'UٱEJOMI/k= Vվ{LG@/g wa=0fM9ENAA1>빝Ab0 *,-; b?uLC:+1 H!eG`&0L㺎D^sZı$i?iaڶA&8D̃@,Hĵ-AZ~2'b^tM0,d=4%|9$4 "A Ir'ѴSz}DBx--p`WqqCp7PhF1pe0$  Ä $!X^}a8BZAJ޽vW&rbkd)|U7|kgt^N0޽:t[f,~{n '_|ׯո'0I+F y>mA[9vKrġ]]p:M۰'=A7햬֚Cݷ˝i^|vWL1o^79R^ix$tfy97E޻B~T߀doz#ѣ0" ظB/w? 8CA]<`dT\z|76.[pU*b:kR9Y~@mw6 կw>#q¸9uv˟ ~12' '[Rͯ=|SiXU-κ@j7v΅$F㙿n;_T?\vAx|t2cVq0U=M^vҖ#h( KGNI}ԥORJV>2޴y }ff5O?en dask&a y?KjK7ZṹLҢʪ ɺ~f!mvmڸ7稾9{^yi]U~u]պ0lڳrmɮ5vz)wpt3^U?A@!!QЙwWѽQߡ/u544$&K! `'t^tK HOlЋh-o=C ʼnv4zAYԳ?~h 87ruϳ\:~)|ȜuH1n_܋YX"p3SoUtSwu}-Hˑ!!P-KIB4='`b^*j$"dKv  RK@H8YtMX4,[ǼPA"QW b6zO~v톔"ca @-j-y޵7ky鷫Y3$75( 2n&~\YQ1BL){M! nJB*m}CF~9ec/%*U^V0 -DMw' , :.Nbc_0S柿/Z 9 Jp"LH6p8{L^=K vH!H^C#teg`^)G6_N8~`!qMYJxw&;LO**dm00Y|l" *>,S+VZ!NM*G"YZdLJ{olv]۰5)YsKU"Zm >mpxzO~8@6qV%/Ѷ&f;4(JD(-;M~m""gB%"62Hl\ZVL1w[VƚHfNч٨~~{ AZL `#pqϷE0]G͑ ΍Ix.iϺ&GauZ Z}H\Qh=!Kl}XbRRBK}֫;w2qVk7ߢ"H$Z624a$9 PW f`~ 3dpb!;̩5lh4x>=G>C$ɸ3G5^|Zk5xe#о[ׂ Z'0H"Ze駏+SfDG{ā{2?_~6ooٳonCO#/*!?H)H@s0Y:| ӂݍ cS~y3S6HsSdW.[rځπVW\NMN<>Tp}jI,Svz#=[|Y-Guln݁jooD~=ۜG`@HyBR: =)g$2Iz6.׫Y_}TՐ >gʀoPPn IDATR^O! 6$ؘ8k9ծ(/Q\@E>zSY<5@vVw:9U;|+Jc}ϾxBUھ|cgPEpܜNm6Wy.x[YYWuU[>4Z].hغTo1КKtϠH~}4\ks;jS; fś@ :B)g3OӦ%hG u="C\gA=Z2Zш{7=!f\ijaI /g+!PiF/G,8[T.3h9ƕc#T/=p;KN'V8WV(kaGz1j.: Jot`HlF>gcGH{E~jڄ(4+j "DޠFW^F>SLS'S_&i \=x; X<+2Hu,A k?{"'=X-0Ikx !MAdږc0kGtXЏ&v܈cO6EvZ$k)YA2초:DI ql뿗1I7'IN& -.뛎L ?Z[=c5%KH27!T=ldGzOv>e8aQ80Ű\bi0؍mUu)jo*-nH+Ƶ- `OV,"].ٓk>+Cf nO75"ǗIZ:# uL7== 'ϛhF3cBNz1°ֱ 2p 12L;<|6,3U>;tC% ʋ- X.rn8>Ía>nO%Km0f5>f\7"h9nP$ iڔ{75Qd~fahes!2^܋„ dǤȱd#긯CDc=s?'IZ\zcŖqH/)2sxlIK$@l6(aʟF/&Oq’@|m} )/"H8rJ*$-#Q.ԐN$b)KjsU$Mx$(["KI Ex$N8N*@rT2Ce| sh 1ej Vh68i!t@IRH0-L:d?oā$M&6|>iFlG;)B *Gɦښƺ&OifakkLhHvʺx0@KV7%|**sXO'V_STf ) N"tFeS,^˟w6$ٻ`.=g-08o-*"9~W;]sc;ɋ:=xfk=ݳIx>RH!RC6/8[˿?,!CU7_W }uŬt%/5\;(Zm嵍'2Ik8/C/4e|U^Tonzp}ҫ R1RH!|>5duJ;Q3~Ґs7]Z^cuΐB|u2FC]فm~鶅iPS[^NatQP] HWT5j)H8)B _-(8yU1 fٱcλ͐^f !H47]0"#Rk !XK!R*!Yv%tt'eA$kaPs3Zm 9c$s/hjfl0-5MA)ՓB )g[9$mikw}F$uRL_6 cEms'}mؖPKmɏk:?AdZi~֡ B-LӔA IĦ;͗@`xV(>A4t SMR*i7v?͒0S R !O&h{`a2Î'a2Y*w}/X/ZY}ZKzwWuʉY+r9TiO v&֜L׈ذO~Asy&nIW@Yݐ6&YGfzaOA ԅd±_%{0m1{Z*E/U:B"yΕ$u/JY`iLg%RfƕB)m2uOhIZ \4}P\IJyC&6yh;  ϤoBG:C~jѭ>yA1s1f3[11XCd)SNa5wVn_ Y2o,( Nm)+sB+/OzA4u'D"A:H6U8]2WU]U%[G0q/HĖA"e`*H|&DWdvı%0$-bЌ8"edzzufڲ߽=DO&DOxRJ+ qǐDСL$a;ш%ZD 5`t:ac+|eSȈ`JƓ֡RLF,C~D<)V$MlF{a֡!Aux={ljd!OTe 񏪢I %dIDm" 8DApxk5KdekNƑ,Kb TI&8vU@`폑/a(b I@@ڰ" @%Ǐ\0ӠHh7Є?݊[,sp^x yO1c.2t#g|OOW$(+/<{Ճ/8{,S 7eC_F6nZw6UgLk߸Jm{v:?EUE|^o֯qџ6~33f_^=d*L4eBv۵*lo~7W$|8Ƌu16-~%)Ν5O۽ꝗPRWxɏn]ЅZ]˻.}ɣ2X}gN8jUг[AyPv; KzsMK%/vp|k[.{ɷW ݮڸWz}'OӪ. c /!;M;Tn|twGO52;)e SDS ?6Ԯ Hh.AulmKc;ξ36'^z%_b6i{wXfmvnؐ /A֭[Ri+,YZV3;% gs%CZ=ST&vXƫ 4E%t_\l۾z:Zkn?0LE[b̆){c[U*-oҠ~YKq\[?z]iϮSlB Y`!8n1'LԜVzs/]u zs83NMV?X_.2M.4E8xFx+"QS߷Tq+%oKFӲq@~i]cRf w09=*D ¡U(ZJƣDN:]QK@: x8oA˰ jT/Tn4@!!aDaLƁ[T<Až`8޹#̈++vFNXaaFH'-D`~w)0){Ε; OnxV؂'˔0tssRt)o;/RlGd5[w|0PF, [zz~3։&4;Xf9"4EXQNX`18^ɽWn||>:aeJA4MKˏY#*c:gPrɣ{g$ò %kaPPUemWTA4MSK)adNU['d$xI0,K4bb9o zEbGT{Nm:yS!-#[A`ݲCb%OÚ'?<2e4jJx‡קoN\S<2@&Y P)5gy@G@Dㅇ*pSjE0`KGkFH46d*y`MS,9"HB"Vٻ8?sm]XK *Ʈ_&&Qc&{A@A@7{}3?.eYgδ"0@`  !\HaVDηйQ5A*o2@Tr ]!ѐl RD@Ԧ#H)-ې1'}M\te;5}Y |YyOUSUj2yx?u ),/Wusi1{_޻﻽;= Ku$gI!ׅ.ػbi o??r'X6ߗMd,oȯn>ݕ v:ɫ&":c$2aT5X[9/b)yI+P%*aIHc8̀b\3hl.*D Ta;aqy/Eͱ؛db& $XheECut55EiDrtI(A"̽ 8X.2!0ZjЊ]6A*S"n۠|]G=Iz_QӀrZ!8 fL+@&@MUճNU[e/jxn`ȸf-Y[^sܰ<  k97쩋ILJ;Ђ+6Pّx<'\Bⱸc 3 %/ 'u 戴ؒ>VT}=N; stsuW ˤh("cS2xYq[yb4oN/ط,N+* רE%[ ` cM"$cqGP[; 2wtKv¶q㎐ O-Ju]@gQ_\p$rw5ySv/SIzvXmY 1 ;=x).s狪&VSm>۞;yԼi3D!i b&!@O!8 cFTlU "|p>\Ϲ{t&J,$% ,f Ep\0A0K(Z,m#VS+%r5/dk?4o]q)wOgޛ}V vj9ƥWK`ΎUyq;]]cȓLD9qz&^djxs\[?;KM{+cox8!cϝ0$a?K,|N4DnW.g) XMv pN;u'fh9l-Ƣֆiu'єī§FӒsk0Y.4c/>5~{MP? H. ;an"l*b>[陻e&]k8A];d !"8X?+t ඈ9@OͰy3 D\?0k2Ld8 ƒ?)Ԭ[QSx^Ulٺ}؈w:ΝX4K޿ 8R ]׵f @7M]kR#"GDM4+#IB]9#: dg\74#Տ\,ƿ9cM4!{F^S1N"Ͻѿu R↮%p~^ߙhz-C9g؎PqDM '뺩sΚ3&\p,?_dϙ:qn1P ǵ]AqL4$\:? u\I1RR:+bLM#v" DfAN IDAT^iP7 M(&kL;kNivS).$\ բ &\\A3А  h::2$ Ca&5 B0 EQW0V^VGa7sBB6;cfg\.0A-3O$Q$@h&q[=[Hi9?6uc w%>N,ҤJR)RR :ii,;}}u_x`Øn9mB0ã[tWz5}3A~ "xz=18Gvy<52uq%W4t|0~a`X8}W[pf^iF(ɵ_n@ƙ=CK,\3MuU)m@ z#Gi: lut u _0x(b<%<  5+j8n7[Y9 F+`)=\w+;[.׽eA"=(v/ŀ~̉E,v 2PS$sM2'ʮ(64~LyL&n BS9QfL)Joz 6~m b'j0'`<}P5RRHI 1\  /@nMyGfYw2)y̺xX-/LWdH^πsYR=DԅLӎ>.fӬVo$p hH!)RurQԣ@T6ΠT:٠)G]O@[>2?ݟRJRt4CDBZ}zuIZA֠d=T<}=R(q;/9ԏ}4i(E)Jя[(cP$G#qG) "&P(RN:!%9Nc(!NJ:v,qG(Rn"pD)]EJ8h8N 7HخT@Jc GH;W&Id^q۱cX"[_$H 'hg?g ^WEcX,ј#J1(E)tZF>N-RBq\Gv^_=հ}:oL}gl}uTFV_ဳORծ^`P3Oؽvz}UC'Y~%bW.tG#{XqG-u<Ҟ{g.♅{f욷 T :DX^xӵf=:7׫-1;\W4cNK>}qL)JQRr 8ѥf{y5u2AIklCϹli;p:ea0-xIV=`;{XQFBѸgN쎺7ӝ5VFґgy\z 4 Mw$!--P(@1O} T*D4DHuYuC(P3t@ ٌRzNRgreڈ-ǎ_S'6@HXѧO7s͍ ə=l Kw2 &~M}!Pq;7-]zrO`6@r?H}غ`fLŪ3.}h˚}xFz -EcwEp=ʆ}e剢cPTټ1ϖ]ջ6^}]/U2S{>O~srM/xTiUEsh6IVS? r@)ݩ\dػ H!O/M_.JG1 kXH"{+5v0wyn%=۟>zHq\rMϭ۳|AdǶ&Ϡ@CzF|H!SMՕU]z ˮ*K۽6,\H:dL\w+o|rDL8v=iQ0u?X3{$xٯJ297~Ho^z5Yѓwhx,S rSѾ"ۑRIkBMNI%k#rƾߙߨ6}x"ғ[,DJ)f[7gQsuZd}MlJ1Y9 {}GI3R#n"E@:onLH)#C;ÑDs IKdxRm޷2:9;/lo'72ngW]8OVB!CeR\av()8$KG@" -pNƭA $bW>”]ާ`E\GNzj.wpү>*;_Yj.N?0yʇ8k!X":_#}o=yٝSO>'S&tZAԌxννɓ{qL~ez[d[9iⴏ%bwS{><.`Gݮu69D$=1ËG_.'Xʰ5o+0DkDu]!q]5Hpw]/t+7Rv$IqԔgTȸn$/DJR!r@iz•$݄S91_S;v.}ש/xVC0FIqe3vHdHpGHE熡k*G$m;e~aL`2.0R纑JnqM3 ds5]ʉ^|^? >̵k?;ިhQ$l'Q1sH^nod0 p\1c͔t$2fG㸊fƘB8?%um!Ir4: d'lIX2apqD, #PM8K"E‰ 醡kp! i3i,K庶k6{LJ :h 7P &Nccr){~07] CG.|tO]nbGӦ7֠[t(W8BHk3i;B18ODC^5dZMOvSTp"7V1GVJ$ "-_"PW@%u@iP^N֯R] !!ItQ{P.Y=;Ekk%Iu?np-XyŚaXkTinYc/gXro0(|9N8}pwݺ-M#EP=+XR` n]tź Kw]/ߝ@6I =4]mA1xAVoYzcިbj}YxY}YT v}6E,HS;.^77;R2M>_t|Rn9F|7%!T"6|Xt; 8e̹E5K W 4=9**s{^x=Vν(jJO3yc׳˕mO[O j\IFZDֆ>k\1}^; d -t뚽rv^~R)co9{muҰhU =P&P,MkzV2C,9hhڧ֭vP 5Ҥ#9r>=1b\ԏ ik"Tyig>u!;jXZ{+.OF.|~nY/[۶]s gL0}Yo'g g>r=מY ʳdtOyPn sŅkB"%@Jk_XR9Pܢ. ̵bk :uT ;C#.?w~k{{UyTp-;bƠfv+*;, ױcQf_5=qfο+yV,{>l{t_?p9[?s syUUyQd7wtg<ucv&GNLM/=k.JdvO.4~EH-ESGm^gUa܍sFq&yYК1FО7u}~}j9 NOd6YXnS[gyQձySuVǕ>_7_W8ڜwoV>-uJ}G?]+߾gk>w}ali]pWvkv_=n^Z7k.Nj|_~oOJB~qO<4aMK) DDz=^PX|qM{\IzV܎Oytwϝ]1Xҭ$pOfq {($¢SеKVpFcs׬v}O#7m-VU[A=vp Xii%&H=c*c$|d6XM6z5J%jB|#/Wk*Xĺe`h1hgMî5Hϵ2"QK$2ȻsߙY[Gp$;>_K`؅N_:k3LVpZXz[ʘ U|1Iawt|k+U|{\:Lٶ*:񼡑{J-cA'8ޮg]޽_Wޞ=O־MB~C#PRh]o $'g l>wn߁Eڔ sc]ow%X.L}љ@Q߾eTMxhN{FfVD1gkmΛo?hn1,[ǑbϺbinOh ck_gkn{tOYywNwǻ󴀇/ieS{sTm_NY~N{C=>]öT E"vu |zC3{n;c]:PdFn"e;@Yӫ7T<0+獻_,|çLlrSLg+5wԼ_y>q g7}tX [[;>k\rV7Diu|UQۺ<) G̓:$]'qY7 CO.]]zu5:s׶I'$MukUF]zȸ~Ȧ_;;  Ң/ o=~dp߾hM dyu_?ґ#y{ɗD r\;+ +>yɹBDo-uϠ4S 4o a@dwVKMtM<"QSޟQTo^'L8|iWLo:eGo/޺mgmlRb#B VOX#yi{;#tDd?=:(0Ҽ&4LozFcg4b4g@l]-L9۟ 6q8u3iXU&^rlN cT\pO.۽(`u;ۣe|B)Vg\s22~V)w{Eצ}1(#s㦁[ZWّ]#׶9XQ7CUuݏk_8첿>-Fq8S3DUaZ,  O˴A܀1=-y5Ҭ@k54e0ܫt^._jΦ;b@z5.C?fzpߟnQzXG@r/UH] ~ xP}u]}~ڵI}O 3|`3P }Ov IDAT1? 1N= oy ԑIthYs>.uj $i!H NRn:ݫX/ѹHL"d?05ZX tZ_[-SPFJy3&ui8󅇪|ЩГϿE;ֽڑ/DNp{nnK}ΙC1O>}.i ƈfADb7NtMu$KR*mI<&m6a$`V(=B|Tf'eK @p@ڂM"P9㌁$@Hl^paYӴߴefP㸞^'\Ţ;猵(R wq8T$H8C@oHH@jD)o;,`H"oLgɤ't#k(Y ItE!QDDPe!_ED qPnMdh$h[bBTC^Ίɽ] 6ue B4Qc8ZALSuәvR@`T,+9yƂьnL)DiCDTl_y@7ץ8KW(P#;~slW,/heu=_V{]=oEGN\\x3X):[`g9ii  N$PW[f~s֞Ex.lҳ;(^Rn(PWߔB)'T__3s\ii_kު _= V1\=|ESN[o߳ ՘AgMǦ& )RX>  p0X[RIV!v;U6U:Cd  f @w֊0AQ='p#lN28ĒCN^j J0o_%ڹh5RZPKn(TA=;t t`Y Q[+û=О9J!ZV^5 w9m'K9 Zk#ʵuVu(ȍ6kkc+ijk%;˞T__WH4{˷/ć79FYBr'bf| xaDz5-iYa\.EaMMY?6.|?9{l}cn?빟5 L )]ߵrɚZݬ㭝G3^z ʩ];͏ zuBx_>Ч!PJ|SW wݙksQ󤃕s,H3n~|Վwꅒ?1eo\^ƭ\>w_m '|;fO1wmxca-%7<g!E5+g٫}xSBjrEc|+ʝk>Yt=s6z,+l\e ->9 |p/ҳ;?xE=O,$cΣa2!+#|^?`kSSw9OT7??#SϿ粿MŠz|vt.o0 s^}-/|U[v}c"BnG/N /`/Y_=MՂO`0DtO&x2ӽZ}IK@xnu >t3~튙ca7}_d8n;vXdͽiYSfwe e ^Øѱj+7f^6}N9YH^-W)s863zwn {ciK`iYK{u!c,_1[>6e-[;Ϧ9W&7>3}Ȗ?@>&\1c3?~wgOϞ:|Vޖ9jHJJB@s'|x˳/k0%D,f$iy< ư-4u""`ܰ|hdGcq[ph{DcE@J;myQډ4_Qg dIH)<~35TthƅlKϰpEH"@5]jm͓ (Iģq&LD%%"c&e^K@JXԶ+=Ѿg_r [5ttbhB*Rh^3Ƙc5HCg[SR6/79|7`^Vz-C,E OzňsJcXSg&bh7>k*Tt@&PDLCtA0 Bz}`(p* %3o !a`N h`Z^z8CLZ d!yI+$i e<GMWH@łsFm^B YXn f)K1N, : rb!;!tMf1︈zLCnha7W8ugߊW{樽低d8i>9&+|PDEwȡ~#mv!#moIixX{Ў8#~xJг84Ï43&i'R%}:u=<Db5 ߺyi\cZ\/F;w49h?Z9Z]$G!#ZM'=/%0q]3M;^zD U hN@/Ogqwz 5Wi9\A_$64ㆎN%ƾ!4hJ%Jns4~6ӣ2(R;%-&_=ǤP1@b6#8gk)눽Eц4 l&Ek*t$}"R n,z~|jd9EJJUAVy| U*xw?xEenno$M$ڥi$[ہw un+h<õ̉0=u<}lD] Lsޓ5̵ r$I!|6yi_ΛlZpf;2(vtI2 9G "Tc3FR:h%R_)+pxq\M g2RR)@ys&Rg@ Dv$%%m]WRJJdm %\;"PH2tNqC/|᧞v/5[O?sWDD&Sg!&"TTzŸԞKhrv$x ; d613zBl[{@K. AW; @`ؕ\*ʗΠ~d6@ gU^'XCZOؼ@& >S .`^ <G ҇ǜ{w;Bu`!dǪwP_.õۮX'EZK񗋰q9qIpIn*E6;y|p);Lak807 _us@25rF=}zb󤫨&s'3Avo,o~>YNԉ6v=Ϫ&_V% uGH !DD Dj<%i5xѹsy7O=mIIvԅG7uM6[[߾/+˵pim&EM{?M6ϦMs=ҝ7L`yr`g÷|֥-P)Գ{̉^O7g@ryمx`DN_x~q;Dy=1JgЃ/сW=}?n:H N4~iSrDҖ̓ƿ=J]OIIԋYUs㎘Ɂd\8|G{lT6}K>< dږ1䔋D=uu4_d?Ȗ']3٭|ej@IJgh?99tGxH-[ztbޢ[6oo!o S2IHkNE;႔, d`jf!g-0-Ez}lTK J gJPu @@je TRTpcR1˅vv U\~YI`=#ПL,5( 9JrhQ.T"}Nnaml;0 ҆5o}5T0.P޶KqP KOS4x&Ts6#wirҽpĹgÖޥP'q(vpu?wnq>(gK01U)*ZfX %iPT@ʴplYY^Yk)_q{,R3⬳F jMI+> 9R }4MXv~GI'R_DDjNt=t!.QjP6#f=Pl&Ij[:Vcdhoת(0v-^s8?W2"i׆ 6΁shP -@"8{ߠ e#,ܚ@ks~ء v;BI{V8+ׇv`ClVE߼}|.0Bw pAӮOo+dK>~W?j{i=EQ&t=GH~⇕}O?wު4ݾm޳ϽpG;ZW{MˎIf?39Q*HMPn֕uqgˏVSXq-2vʷ[m jdcG@}^UT M٬Co*m\L0(;ta=4"ըm)!"_b jP2@v+փN5 m0d9 : As %O54@}#HEҤ:o`*A5eWJ⮖]tT'VBf{(;jc`Pm0|Cgˉ swAԌs_qڽϟXUP-O {kehʗSAԯ^[}Wto>:uю:eG8_I퓪Ն*y]uޭ.Ԡ' ʬ7}f Df5,fnOY1^v\V-"ĊQgbLHAĘ_YZ;J6T{mnoǿ3z*_/?Er`??:SܘEkʯ6xH;K|"տװ5Pc)-RYc ATmpffS;Z#PZjI6UWEs)LSyAq}Ԧ}g'%^U[^QImd@Sy y J#ZJNnvAhcF˕%C7"e8"F #;;͈K5MDJN9~yűG$M >d7hJK))C HlLqA(M[v@ _+ZKn?(sڠ`QuՆAHFAFLKMAS PDaJ&䤣J!0/hF*,#.$1f`"!@ ܒsdhf&򊉷!%y1;:h1ZWHP$alѶ Ibv& nfS6vE7`xn:]2#>Sm!mC Hx0 WQU#IBԇEyd7I1' Ҥl,!pWHam #hUPT!w"PVҖJ &EJJ۶LS+*I<{xj?1>LXu; kT@&Xcia}IB.#"C %H!c3o%` k8KhZeEu%Ȑ1]Wu C5E%'ʂd|[])Cl! f7mS?QPB0PqsȑQ]1$N82 TQ*-&"LB}H B'Ў-N0g HTSebĀ34821`* @@*NTW[u@FB` Y AӚT\'$!ͥC`@kj#He;h'`ZdRI!]'Զ+JVB(\M+oO#경%CK(|ΐ}k؁CױY]'ڝxG䈈2ު^'2ʸhy"Cl~(5]X*ҿ2)d"a(d Z4~H Av|3.x(_뷢ˠeؽb3h c?{["-wVZoZ}d{ΑE\ءd/O; WqsrN%߾{ ȶlbNMqfl+Ңq) 'J8Pcι;0J]cD %t"8UEJZJ6O~u!%e"k;"jU~[ ~_H2"Aё\ 9KK-̙9|HADHfV×ȖF&Mv$qΔI2g"yO?&3+hZ]'ӞsƁC9[pRA(١X8\USiڲQ^OSG)-˖R%N!}{וX`WM;zἻoG0~h.q {%b\}EZk?T,KԽsW?т1ำ8W4m;+O!}vuow1 i? ߧ1]= H :{ |zt ~sX~m )e6w'gv{Gg6.W J 9CReK`>9U1Sz7ͽ{§unmTԒ6QqzO".yA+_~X[1/֩Ԁ[_ٓ~U䵿:ewp1݂_>~=#o}c s^g䢎>qZاgdQe)OS^^m3bQ s^Ν|an͋0s6|/yxϱ6e(-*w%ݳ2MlXe0Kڢ1Ӟ+I2pA*{pnKJ*;H[CMI.7%_^U&ZeG@xMM4^|^8mS(`IR @uծ$Åvpża.Xt&Ps"R UB6/~t4x YgJSq!"2bn@H3 c_VL4UR@U3ng_18 k [W|iiq̈́?6mCPr9|>0 j12\/^3maD(59'~WvfF&">zcY٧x날bհ` tDUm^]ʰ>)_lJ>4vK:D UC#KF Z:nG+|["0k蚋L{a?z>:i5ufއ뮻gň|q'3aCf2b <9GM2,3K+Y 4jIɹc.y`c?%٫sP?^rթ72lY-K}1bx\.+7<~T-[5 ?{z/}g^~Ϡ+3eoT3qH#׼ª>Mѷw' 7׽>I[Psq:p@9\|.I;Ya#,@Ʃzٌ~=sܲb-Aq] 3d]Ė=3YSG t妮ޱ)nsgR>߶jܺv~jѴbB; X9qpe<[۪߶zU-j8GDM'޶fqpM[g 8pPZH޴5nd-^P)`\Bp ,[xB8o$ *΅&GPs+@\hUs62nxжkApq{B•BM *k.iwDBBsz~?,Tzҝ/ZU6 CD.}w\.`\nҬ2.}.cXUfߧ&eD )88)Qֶ<~1k%!: &ԧU"Cj*h>nٖ$ͥ G qm5!Hc E,\> "Dc=nJҶ"%fxWcx$Q%I(XnځeQ8 ׍◆gx $CGEp4BG$sHZq˴litt=_6e!ϻBV0OI @)i#P8ۻIx4 E⦭~r Eb"G .eMIflݼcϜzShФ(EBP(f_DmGA3Ȧh:Ў(X!>i,~آ(O]9n(-źg+{)vơl;͸Λ.>6`h2H)r@ \ ѓs̼s߽s f_[8 WS Wɝw}vItA@)|yk}@X0W\hnpihQݸ~m^sm}[֬]D?+bS%E9pRӤ \  t!OsԿߡ0by/[t&wQI"d!HʖL86"rF"Bh# "b BJ[(Τe:y~ݥRĸr) qM ɎL;ZIh))Rڊ!"&i|=J cCHNf"FmqƘeJn0 eX̴!H[">O;]88g@J*`asVDΑdT]1Ȅv^c@H!pcI)B@h;(10s1PDJ T}R}8τoXON%8;8-f?rgI8~f{up;w2ۖRWOݽ'|+.kɓ]9s>]JS3DHקsٺY6u}T gԑֆ 2|'8}_߸# ܮ}?B(˟~\>gJL*uU缾eBܺٽ苟^^l_ხr~vkU*Qq~-&~ͽR}fa>4}Y݄}W4~vJÎR`ݽF2bqKBM]eK?<)&Ο|1Hܒ?^-2O3ӦC; BxӜs:6;+W/{e9s<$[;kF4z|Ip1$0j$ToN6_(£Nge6`"V)uvd\9fhɲ<ό~,.0H"yx 1{?MM`ӻ7Y߀OgĤkyTGNfYUYGkրeA< E+7ZǺuS'/_mN Cn69IYZֺU,~Na&PٽaIҫPf;<+&@2!4 .CNhݒeaI$45hBP&6(B0mO%DΗKӆqatqODޗߑD4{$I@i0.&rHl|6Y}vYocBD( @8$JF}XnCLBfWoغ)ltM  *Dˌ(ւi@z4LOh1-Z\8{\/mţwA8$h8T P0= 0‘GF6}ӶM˕i#.G?} j sò" 3RU,>p-c Np8* Hp%<p0lҌEp\K5Fܽv3ބkUơX,1d =j񽓾>=JC@Rq$e46o-g|vY$k|" & ڱ$`:qQJG0C,VL@A=lCSR^p̒m˪G>≁r{LYx].Cۋ~: =Gvg`ߏW|>CqfÕ_}^xđ'|k! !‰Y\}CϣnOWu^m=NKs43YdU~ne;?d]3xRM |g~S <`eD-zvų/'9kސvgvD= . IDAT[q l ַ#{>.g̅&S R;QUaJU`jwL=t"*|,?H{rM-fiR5Xkq:,{9<׫K G~I=YW~*Krv.BLGIq ɯUs/ؐ/}CS?C{f,S۴kvE+wFsd`UW7UmX Duzjѷ IFV7[]/w:ydZ}b[vFPUyV .Y$/KNl1 7C_ wFrhoe `xۜ|Œ BơpӖ%ʈ(?km(ؐ_KU_pՖ+^YVY,݁*X& *nZש~9[[ɩ|MM[֭Zrk[ծ]|M[69iݬ٫ 6HZMׅBUm[+kJʢB֯ذaUWli0 TVVZd-l6ܼfk%<m^҂ʘb-#flT\ \PYD۷HhBFX  kg_j{g–jZP:nsIR8m>-܏eqXL.+@2b=m]K卐ѓF Sop&S@9|h/ !O_|Dґic@ujcSAyVnh-]M۫T]DhZ* Z#[y gJ KG 3fٖ'R|D19om}<^_4ܴ|2}e?ZCM-G=QeaJMlY_N R ]5p+ˌ-4,7-B7 M XMn!JXEuo ks$eI{dǣQR pkei+@dBwt}&iB}q7+߳ _8WݺEMK*d\3\qTV<[RƥR51(Lۣ[Ѹ$yXP87<4c{BOЛ JHkDJI+[J.ʊMH^X$n+LhK Hۊ%qM3\6oDL tpwEqLAlE 0q0=;Y(}k$Y&6(@7P b'y $x~X@~--#H Ծzn&@Fd`Z p\:2pܳ8DLtpk` eƩCMBvHQI[*IJRޔmpʒXNmu)_"p5{adGs#䷏m)ovv5Trn۫G$t=73M'.;k^JM׹м~W^ط~sy4W2=WdRisœt֫o,ͯ?I-2& OEpz2.t[i(AA~*.7?>4C 79Bcz5[Pk1 RS04߮ -Zɻ1<_ 7#^ξCFDoWTC᠞d-҂t،< x/?d{H}EIe}٦މmQt[a?h"5.ʓW_'U0A9ȅj*[UqAZI3LXu2">P(d`VU s!~x ɎTnYS(st gpj.ZH;PN mF-%"X#~bK@78Q˗2t0a`'kDF'eCl%:IvT'Uy,Ž$I _;]]2SO&W&/X:GYT5C9պرx\vn#imss[;Rq+ /~VAv ]{,7c߃dEwN{k쿏p|ȹ]ԬcElz%/oןב$truнm*Ai m;bʩX 2L&^%҆z;  "M l:MO0XA!!_R=^$l3 @ϥ#ٱH̔46ջ5OXפ\hUIڶX4sEcJv,YɌƙӼ'eMK)H$RjmV$HYpC=g.; єQHԔ ?v.Rv$XՐ>Zۛ5cH4Pp{\k%i4#H&` $q\6#јi)%d,Xڴ Tc]M}"$e"i+Q7)OFTm+ݗf,m`z4oƄ0(WǬ!/6U6e$udFјe+qHҎÑpjnZ#umR4R7F M@BUװ[XQMqr@f 1\Rjz`a~d>י@P&!B aCQLP  ez@7x!(D-êѢ<4O+l Eg*w۶7v]zƂkbO&jLD H*H/,e{Ιy,4c{f̙g2 ^ 9#@()bA+ %׆P#ՃjD:  Dt DTx ApKɡ BVlC)@pREKyRv&^US׬Z%eu_\0;\s~Z^sUQ1zԵM~Wu4t޲7ΟQN )w ́•Op mt,ǧirvܬ D^>}Ν~t=;n+q'>j=3G杜7bf2ND .gϿҨ`K[ lkE1snr\oՖe!˂3nL%tEPXŠrztו;yK~/͌G!f}iaQyJW6?Dv73t%mONGH嚋ඨs[#w_8j~R)8"~”yrݩ; ,[(Q'҅V&BP|?8A%c ,ȜK/DU-5F tB0g)GzFFrtVЀv!D8 {Q<&|\T?:4,>Gɧ)_ >y+Q\ŽCj.yk]|{G; ask ?3g͝k}(+;IJ# E\~Agݩs׺ o.xd؛?ȭrNڢ _fQ{mv$C$VuٯypW&ZhԊ@-ҡ*ڎʮ[د/wksƶx;PYx{3+=׶ Zjk[5{Ȁ[RΨg#he/>羑W}EϞܧuk1[ ϊ{yxSo an};9qsp{V9/O+CQ߲Edl$2{o,}og_ ;xR8k{Xn|6?LRx󻔾xn}m^_||scMTfͼU_7M-&-=?{{?yꁅ^r<Ş0;1zˤa[ ࿾W;@ǁ?[F>.~s=,/[;j}K{45d.󟠖{Hx+g΃'Y@J֜A׈_}*JK'tukC7# #(~mglt8":Pڂn5+2 VI"Y`bFHJ.Xq h=Iy0.HuV?=vL[wD)Q4LewE4J1#3e;:WV'uoty)ȜXI9$lHי}pEOWj<$=k[/y|ߦvNt6+5+HTRӱx݆C%y:沴!6loIu5C9aDvRR2o?*_߱W𴄓}4nJ1R"9wUk֊#k'%"k6 1 A"I uEض>}>}>.FVr W gl??8nEeғT '?Y_\DemڤV.pBM1:'h#}۷)ioV![u9.^contK}WI8C$"@c}k:ni}-GuMy>8UfdH"B8S0Ꮰ}w+AZQ=GdD28uJ=+FBCD`8@|] %D@e9Ԙ/_M;EWCx \r*ZGi $0 6=!A"@\eAs*"C@v#xqa)htB!Z-G6ʠ݇ jVm#PRh'@iEPZ&l J`i'CuRIس#kG_"g̡̕RE~Z@![`G)I{32;~[1墯OSR EldhE IbK kd)ݐax' 7b B H" =^%c Zz/^;( VCD3@6wcIɼ)>Ԅ  7 Fs0 CL544p@#M.WOh^S;'ǷG#uО-0 DPpx[ݺAu5TP@#I"u"Hۉ)|^_%bhUEƄiHU |Y6wo瘮k^{ֆ3΋|CP$d *UL*Lj•:5kXKW|)>h 7TᄣXQ1şv AM2Z LUDy$B$)`prp.otH͗>"7/.`"0k @QRr6a|{|T @hZFڭf-vn9`IF_f~n{t_lMMP$)n)lqϒs)DMHU:x\$б@fOeCbd$FbF.(";ag.N(! +y3@UIŽ IDATC!׆z`&|1 !_tҞ} Y"XI|AeTxPW6Lԉ&Tţ|0&^a2 e$v_ڜ"lx~V|lJye10>, r`Y3p jЪO= <,˫" %m^ty#v19sƦ Gcl̜Ν3j; Э*-iJ3ePAzvme ; ѩcԝ9e&ڱ+"GS+?p$Fk))3[,mೆvkym}P{N * F Ogxd{ n: CVDY#!\@`M=N⒩ÆN'vn准ŠKivha81gk7۱=?ʹ3:[S5?jڏ٩EZN{(FN9™rýN~%Uq9ZC8/um{jz|yWtaOuCK77{Κ5o>>OSxZO(+k- 8Gnb^|J+r? vX.$-8ZImZ)9+^Qk(aJ69}^PUpЛۀ7e8v ՞)p="et?ۜMvcc\%:h3ZTĀ+80园Cf 0Nek1jYR\ +* P]%m6p6g@0;,IڴF Uk45Q 6mKO9kA8Z,ؘ 4 p@lez2 7ԾϗZl%o2lL{ E;MܮE Qk{sFw mtٮ:ReAm?dzo]\>A@ѦZ9ҬWG=w|g[[&9Cܶ1?Zd: =RJ쭰7(EtU݈}F͙?CkhUrsK9 M-ɪ:_FtO#*P9ͤc&;}އ;N %&(|\'C nW-;-v٢"z ?mg oj-Jr\rqSOj@9qO؇nݾRP&Y瓧 ؄,wPA!t̆}WBe13xDrx 1:)G]EvRMZ"1 ʹ{l0h>iVT+Qa'Q}]:]ȀS!Z\E1rj:N9PՏ) %_5ǐ.`r<@u%g24OvU`ԅ|\uMrY., |LXl*:F*6o/]Z=rP40U4`C4Х˾-{eЁ=q/DZaX{S)bvM1ѴyYIѐO9ױΪocR ۟mn/jܲK`a} w0DZM &ݣG2d|& "61c -G05cEQ9H [>0 )\'b Ec!cpѰEk*j)fcÖҍC{=/G}D$brN}.{\+ ElI?ѯsF "QjxS!)H z/kZk_4T;I5* 6$D=V8R"kDn4TyU$ǎCaە\7^S-v$!L׫s -W3>G o/SMףsX`ؖȐ$4}' ވ(5A~y@\8T& Qp\EUҡp]B  ~@ V"SA& Ăzn! k4A|.;$8(&(: v]B \p4p js1RMA@ : 8vu}E A4{Qrmh {\!%g!`@0 @=neh_d a<DGCU6v=j8 + )IJ""$p]ǶE'L^SQ3OґnHly#=xωhd?A%DG=UgVu_?L 7ZӪ/p\/78Щ2N'{oDEiN!BJITa Rz 몦ǛoqEß`{S5iO3]D3~yN6<{z ^?~,:;2yC\D𤇭xTWM3OvC/|fրjby';he~T?H֥M0uT0OP-ڷ$pٞL~@c ?D "@LhfNgі4b T6 8>aC\c@N1 yCё(:oF@3br,5/CÍUԓ@t ne~ǧ{~I!hc{m})~Ip:i5 Gۂ3F``U_ŃQ ~0A  !x!Ӥo/Z!.-X,"gRIkU00N-:۶Dcs˪ylizN{#E&d $XaܡUS0b/r{54>aElદ)[f#:$}e\pH bsY)9 z)MmՀx ?췏b--;nf?$QԖ8Te19cKObC 1W#EAGeHC \ӽCAr"M5ZB,|oCUL7Otl+P #(Dn8hk.rxt%E1C eCD|vukD{.;"V~V7`ϽH>. ;몃5wu[r3B>66ee\vτe%"Eb!~8cJn͜47t4QJWzMKgSݟ}5~m7_?~v9ɹh篺_\_KI$ 0sۏw)WOhAB\D1C ]C†=ڹ{/-h֣z/vڸf7Hrh'(I#"Z5 AK~G Wn+)ݵbEEJ4&el c!~&8cF)Ql HZuާsffAd :G@U2Fq81C } eDo7n}WwM3snxTQ I%:qL]Rb!~8J[r{vJ1at-Z;_i~Nɢ0ZQ3Ғu$8QI$p4njJs+*C 1_I9ɋ>yyO>yu@DV%1}]j7~^ۏNod2O9`?Ypո.C !GCdL4b!~68C5n* [_d_jzI C݇hi:Gne>QaѢmo]4eq4 /۝O0]T{xN9b!~A mJ;7V׈}KJ _w?! ("S4O\z ?(ڣGC 1d8JҢbSv)/Z1jQUKÈ!~Vr] [ĝ k %iq1USc6g!TӣŤc!=r +-@"WꭻlynX֑#4ӈ8A 6+C 1imw¨24!~"#"2:O54X%$ ŪC ?+Gh$STd=C)\+)nұU5Zv}t˦:oJIڵ`uGwhf\WE VВ\Ǖ4T5o'y4FҶ‘KL5<ئ{1ϖrܰ{%3G4lhuH^)׵ bzm(߿ ݱpNVolFwvllW0i{$l=6IHV*JҼHZ-)iI'3gOl4O0NG )Dz.pU MAPcmyLiYڞ.w"٧L; M &Lҹf΀ϯaW=m;Qʊ{;$LQr$i)(]; L5<jtmcر̓$`cxokUW>9OMAVز1T,c'ͱh8b^q׊X#$rM74'0Sv7'{Naa47t;:7s=Un!8{tpv%CaBS({LS;V0u+PҰ/Y-.&Lug)O, AD uDm@(ɲAJ;"4wWp3 v,GsHDɶ jDP50LRP$v[L z(Y6y MEgqt5$$$E-l U@ abxbg Ikh 8 KO;_dqOfgC$"yԱ}2wZⶽϞ:^%+vUaB!F 5ĝfЀ-YxG߲Ƀ(_^9IM|NǤ=}.|Zm3|W=>ޤj1ڙcSɎE[۝WIf0͏%I4[͒qybΠUG}ERKrʷ~r) Ԗ+s@++ǽ]$\ngSrjb[ā]PTjVN'Sڷ_UXH@B/߬sƦpLն}GN>OKUe۫krQL&sܽY_qX??F#j|[^vo;5| )2c]^]s7,yB=Mg؍aV||gnJW_ڱd_UݶkyPsN4WܳkN8w %| M @!4Zk)7Lv #u녭㨖7Mh0` :ڶI16 mX&wy{ Lazrf9w랍jܴBt I=ٸu 0nkC؎PRTKYYGaۢMh()3QHD ;1 хT GX\⻰qXTQڿjƲZS}'\!^ Iv&DfQfl*>8wkWnG:DDRzXv28a\wÇ*8YAQGA6~&69Eg5$uN1 IDAT5"GTEڌ1Y*HrŅ=>ԙ#Rd4X[pUccuYI޾ڈKe5QYd2wkDH^^IЍ:W$ 'X)P@Qy;yF]q߱i۞b0 zGpiUb0pvشr3N6aGJDן m1'X_]Zf'd e`ޝ©߿kJ^3M3Hm5;=A#<5{O<+9sj:}]߲kO~T߱`q_td]aD4ڵgY_8_9Z!^s nFţK1kZ|F>];зw[u(b}/ٛ*ݓ[b1v{ ,U[uooS.; D$!!]q2$d$ ޳~MG'EoCol]եƒ0$ֆiE:3gP[u= XK6Tuiy^:_7TT=M+qM[@N Z¡= m+.ƌH Qny)0pGq@_2Sjd DZ<^|rhs  kocٕ)[Lgen1v>manlUByܝO(ޚoeC v|F?NE\tY'tPmnE=w eu򃴵NQnF_̻?+>0@:gʡ 6oﯯhוBǧ{޿j}\r+==okQbe揖v=4xrz-+{oզ}֮0g5|nqZ1mZBWWckgt:w_q}_2U#476 \5U~e;eT[Q4elvɢϏnRJ D7l EBΩro w.kD }z>5O?R O?vхguYzhsE[o$%)9?SK8[rC7#/y#nybO}f]sξy*7ĥh䊬Z1r]x#^~-ח( ҎZ=qk :* | S/͋O[\;<@(\}3:HL ՋP4r!A wP?D ] :ՑGf]4ÒCjvtZxa&IcxW5N{z~xt/`X4l:yA0Dk>{$rfcMt g  Y/R2KƎv_eaf&0 Xو.Pwu`$a  +$ilRbqEװC@t0E f#ܛ0=\/ŗmw)N \erU>aK3);s䶵í`@(k`"/ d1bV&A2 6 r}x1A"z^Jd:pKsJZy80Rh@_r'; 6S&~(݄$ I* וY!?.0igE+{w?~cG+ kGtiӈT7&wMK)h( WQ$Q݈+{d1/tDЬGԜK l׎bp`¡,)] qUUȵwiiu] HDD "w^FoJ?.9G&R* DVS9 QI'nͺNz ,Eʛ/@YLUF[$hӗϜ.݅G@~vc;~,A<ô΃p#8-|QLZN}|v߯GdZdk u1`*zEn,|Y{fCF@z}C( ׵ abT @ "j+A*D?z2.f]nӷNK@AnK~˕!p(>-"PTEnMg9㢒HD^Y ٽ9sVv #ν#+s ! WeGo=jL;0Z>?m␸uZ~c#݈Tp"㞜44թC{%ZujB91"'lO+{=zMX{1hRJ>/WgZ!ʑU۶8'dsK E+k#fݒtоn69S(R( \22sk r8 (%Th!5((]6Arؖ0X_e.[ev0AXzsUʙ< P^Ac܈.K)0&3,v}z2zjb@ђkh?wBb A[A)PׄhWVS<&LIUg8Th!4(W7]FCڧͫ7EOlPJG0%SQPR l=za)7aI>"W_@ ^ P(00==$X S:9r)kWI 7BRB`@kteSS$¨ rY.9,8E@{_^Օ9WsZmJ;u6uNN(N\;콾?nB! hwɑk/-K}v'jyy9РLf_i1F^w"PgOQDfp58@B l!'](/]n pQSgqhe:(ڭ?/(}hKwSܹ#VY1zf+yYuG8c>G5%\MD22g׌~AU AY%9G_ټOމI $KWOR2I<~X6sj6eddh iyy/ q;=z+ m^[qz]f ϓf U:mJ>MH~7{~19ne2<~g -sޤ/H++pٌ<{8⥗^Gh[WXբϟ{uxD޿/76)¶ / $ZWN~su'J$@\7۞OxpҕKq S(QIc|0݁%!-?| A 7c&O>Qdݟ"3-?z<Y93{nl0-_zuqo,e\ӏPu߸rX;Vڮ$7T/}ȣ0nP {݇w7==ZX.%;S{`5"S>w;0Dzzf6Hd(*ź%n(Q/Ms[ I_ǥDЇ|C\wƑTZt6hYWG>.ںbOCRq)c)|#D~b\wTCi ͎QDx<<] Ww01G6¹ȿ#G:li/}<}~I=6ѵzQPo[_7Qqœ՟ֻ֩_*X,qp&* ZW'>.ҺtzoIφ/FQgՓDO~j\wi,v](dxv˚1{8053+xĚs㊧XJ'3 "|jQ*NXkDRd6DISo ɗХ},{)tvȟRZ'۬Vmɬ#BY3o+eG2+ڭk|u !3DR$8iweg2MGC-B "j+\1Z)&ZSsrM/}]7RyڮGk۫R$z "Aඩ$g3Xs{!َZ|ױU?JېDM3SHH0n &"E& 3i f1kbF2ݞ6HeS k% $:Fj_`i~".l"p"zؕMs'6a b"Fᒐt2q{I됔 jMȎM֔l= ۏE0NdEZY #.SqDEЃ_wmsg]}ѩ?fI+Wi\)Rضa>%;7駞y X\xq=7_Ѱ !0: "@tvncOF$ yVR~R{OCZEⒹWj6W懆}}Μ8 !sX劗oI|?#$ECȟP_.>dw_՜-55qH) ӳ]} ]5? IxLsHD0,2vYZO)vTu25}z{@ ٲzuLe%\Dj8-t36@T=2Kf@hE}9 `ddAx1bF3ƌsy !;~H8 x ^[9}=AW0@a/bO DT!Wsj*[ `4B u * N m8&^d_8t0l+MJ! eWwGn5)东=Yג A:|{27bmA>)h rAdCBJXَo!'7q rΡ*gO =g]k5`O>g>g?Q:謳7POsb7>0"t~Q6zʣɨN!ðO>B@<֢у!3TݎNl.bs0bϣv2r"'Qr b'̎u(?3_m8JiơSՙkMݯ/(oѢ"\gzاCz;M<݅Jy~iÉv } ո0Oc`e4 eiÉNn&QӄeP»R 7#GtNeD$4-SPL\^^F:#ZHb5!44 Rxv{>Vva)bHh^KKS!sR*A:~ O1qYbѵ+b@FΈ~?ٞPvFtǒ@Z*:{~]alv5(ӫ7֋>54 j*HqD!nBDw[]ij D 3 `+$s] AR/a+FaҒ~4X"+5 P݄ EP^ 4AH$i@" &b3$3[Q_ͥͨ10TmeǠd[X6͡04lcc".'D 4xFZ7!X:éR"%$Ab ?d*P[]eyeN2$5KXB5HHJp~U0D]C4IT#nogMnh.z.f}Bs~Foh&)~D"G†ُx9H @ĥPSôUCT IDATZ Eޱr&}kIE͊InG+ !؍wP@B866}Cn5`Av8f(F&S6ծmU@[AJ֤2m=G͐}A]6844fg "?3 Xkvukࠧo*f߯ Cb#5b"ӚPhRjX2(m$[XHy9%hnE,jEĂbmAQ1Jhl@c z cBA ~! >ZJKAٮemgVx8R;1eKbD> *Σ<|H3tBX:boitlAs)mNQJ 3f@z:D-|{%:j)DNbyuG\?w޼g*&5}qR~{orTZW H u{o9yHb޼v}M~J,_1%0!_*F׃ :mqPɣX\̻=Gff>ٞgL›o:H8U ץ ]zӬO}NlMcO:L/њaG_yyKaWȿϛg !`_&R)iLҀV<~S5H$- cD].oI 턫4 ׍\Śe0ݓh)G4<}0=KlN4iaiw+ (၊@)JHi! ǠO*"Cv?Yy0]81 n+\VL,Rk)`k 94rkVnN$hKH$U<Z&QȜv@:CJj{a&L:;n.G!iL 6\L]Ѐ1kNqUrbbL 04x,XehƏ*v3Nrkm$Pim2^$}'>1IRɁ.ۋg`D^aMhTD:{8xl 77٪)®> {ˢ惮{!gkN&/@.S_,r8n#Wa@D q^tms'Y@HvH?%~v9JmJ5Us9cT~'?J춖m$v9˦ޚC6Џ8+4Ar|0SwސB ߋ"+gvٷ/i2M" )lBIĖ^AR]v(1YdK03IcAHs jIL#BJ+4-i[Rrʯ] mLRLD] NHAEG&,[ )0I+%iI4DZfo hNUwZR-B )"Gk庶mێc; ful۶mWi J4u߻ZlNض4k뺎|<V*ؒ}:0 ;)tX+޶$)B )؉L2GDuJUmlff  alY_R¾Cz{Ek"6w VZ~"R.bD)HDŚeZvp1kHF ^KَF~"Rx} u )®(rc=?̃uYM~z3Gsi|ֱoJȣ7?!UTERS y앥55<Ŀ^ڰ%fwA啕LҬ\O8nx-o&^zJD~Ͻ_d{2eAO!RհmG_1JEKKQ)kS?w xcƅaw`߷_} 5ƣ i}7^o2w@OىIjK E>e>}B_zݯ,zcG#RHa9e M][aiق҈{uםw`aLן{@0#5.ӂj˲Mq]isCJLtJRWN^ NY@ZZ8Fo֙^Z1wPpSRH!_;-H:G`յ ft %jѿ`CoMF6$Hh6ۈ `p!iTXj )®Sׯ # AbaVz'M]lf% }#-]3Immmm9}zf{($D8?%I/F[ V,-8t,'2Wp*z RHaW9D'өo;0@hW&}s% @aIM#/z{mtfqڹw;1\| װ|i! Dd3;fΞ4O7ޭe-0թSx{/; "'ϖB )kbgI0-]7O2 D[N{ɢ4C[jl A/NHp~Wo<$Oƚ#xo&j^}ŏ7Fת Spϭh!eO~K*2I!RENY4&kլEÏ/_Tcr ABHRrjssbUqˆ ! Se:QBIXcfBBk6h Cj)B )_~,ykH$$ !$H9ED'I )O@}p2l#B )"`X(u1+Ni֠Yff%*=:)® dBG~i[wVΜ:10Hl%!"nc&Jv m5_ۙidABt$Y3iLgPkhƿ) Fu^2@A1dT &#Xt=̚)yT;`k@$䌭uso۞%b(4=SWN^4! K73+Ôyrv>\߉prWVnom$ Ð`~y0 Ôyn$_)ZE{/.x;όWEs7#)-@~l^4ˆ!f81!FaaF!ƒ9W!$Sf)Bgg䝧"ldrNܝ~UxMCw7ߕO@A3̴7?/1sl? A UìX+w=3(2`fRJ)y 4oM?>`vk-߶O}qG9fVZosqU`*,9D)q[[,A[+n> ʱ G+u)7>\4}ZsfVj[@ 8*Zkh狩|_ZuٳU"!]W+WdYX3mK6r @3kZõhZbXehvE)Z3kQ.+ʆD޶uTl`z{-~"9 CB1EbAgI&l ɏB)8 D'lKY'#_39 v5vur%s+nd#t&':$2Uض`&%`:P1ˮ'eB;t׸rMu -mdVr3Es}f8/ͮ3-# fLIL:SSVe0 fuɔHSCSLVMlF\# vcVV5e0+'oonlh؞&51eznNȒn<HmE223ҼR[jjbܬ0堥)m;u1` +)s3S1Qccvf O 铸%P)AvI9H$ZQCVوrc򻉌V$}πmC 44Az`Ґ.*jX F[$ CXZ0ɀ?5 v#(4C pCHU`7URZX)w8Vy)Gȃ^U7Gv"]kfIH02s7`qMHk&![mj 饬<4kRA6W @*,t Qdd Emb.bcL@g֦3*fET 330/;ˎ>u uxqW_oJǫԞ8}슣{UZx 9=u}ڇ߭;s&, z^qfɣ=Buj!EΚݺnϾ>#n~0 푧c^g;vGg\̂ox`2szQnzsO!e^rq'/~x"asyl<է_Il]*fN{Xn08{㤛nnS4O70N4ǯ=ȳqi;b|܃sn&NzG٧O~O=Ͽ?ɢ[~뒮!T /د~o^{ރ>֫N4&xWO謾^z[*Ѧ7[G]RahrC;z~VMpmt?DrE)*1sDOE ͡O(̭<}FyUTUS]  g?(&73ְ=Dj: Ql|# xsK}>ϮI#0Fj_[)Vl {Q*O=r+)R8<>,}|QǺ\gY|s3=xco^$uϾͽ?ywoUv}=143ϺnI8V8hzp9biq#{D٫7]s w.hXt}Kqp1ێ9Ѓv^,cC+% m|S/N8 M63]G8|le+ zKw {8f=/9O*ğNbR?Cz!lpv촃z7zʅh?/g*z#^;nw÷cpе?(kG%$MS;;)?fhn;s`+M<=Oz#T}3_M<' OK~ta=lP_zrWYԅ8̳nuqS缉Ω-iDcOCGZpA N_v&Um!/:P 468O>dssq+ģiXwyunYdthhA[5ŀf;MwQne&A= U^67/݃_b]ތ@} n`N-X=qsjl]ۿ;ѾEq5QuQF=䥗cS.ыcdz@ۗm$lъӬOh6sQv.g VG-/׏Q; `&E7Ыu$F:d g*<` S.НfO{V0*t,/t+X˴~܉y3޺HhE]ݠοG."wEk4پ@оz/C߲̐pG2ݲʾ]%e|%!dgG/~Q6Rm>'?0/#'KOg|'- vv)?ݸFY%yCoDl(r:P * geyPff򤥧i$3+K7yP? gdLCL g{%!Qټ~ keQ/ki- '/솴^'7a~!!PfVvVgaDDҘSWN백1nʦusˍ!sP`2MCHxyo4ހO#޲Þ@AdnxxCl>oo;t&^UMGlj!ԽQ1u\%efQ8 ɀ1K9Da}iHRbXd')pQZ/>.Z3N2`(0HCFM=C8]Zc$$tB MdF^E6Lp10U+V_Na"IY6 HkyY \A pSQX# bıp t ݏzพEb\H]@RY{0 i5 ݊&RAazA/ J}sGbn,1^6%@/1Սxeo^^ԣ/56;xu3}Ϧuo-uXYڍ|`&h|`͖`Ծ~k)Ҥ(T8d0_yImS_7%/m ۆ]Jւ`; `$X% ?9%iACÖikm)ͭgoCkv)°yҽ_np_Lqm%oCfE A.|ُ0|Md`K 7RbҴ,$PWQh2*c2ˍ|QhhJX`!G=Ô;u\avv W[d䋞~>\jΠ4K酺d9Gbm%c<Ӑ &Voh k>A0vdzRex݇YZ醇s 2ŭ)LqN" qqˆ%ˆp9J+f|MmC +g-3nMxz0)[9kјpmJ/҈K  0|f 0E/_˦j6;럖۽@?Z0o֬o[1yKܳ.bw Ӵ| SP9w>_d 7>2Q/\.ӊmK”_8;ݏ)ςе7:FolIDeڌCqOҲś_XV$>K a/zakO?}ΤOVy>&g^_( #<{W:n7n^3筅0[gU3HP/%.:Bw$6'{-[V &D.ҩƓ7fo49x~,FY.H#RѴAO,Gf^^tOWsā}W/U?pg],KꕇQFQZ\*FZ2(_^N<|x_XǼch{+L2y!ؽ/o r/e^2ioytoDUZ֫7Fh\v)2Gq4^Oxy ;ĉUXD?!lA x P`(#)t#{X;Jd}P`|%52c!=Xaڊ:9 U0deC묠ןgZqVHe5(?`,nY}gmf7W'QjYqMB)GQP6U00qQq0;E([Uۘܳ'p4T[nc#$Jd10[>}q w[&a3rwJWD)#U,S6}ZP=r҃>o/Ukl1{:5VPStsnz?.=^HEjc+XNYF/vfe;Ç ]?qI۾#%PZCG )uWZU7h첥df%N]њ͍~Æ-ȴZQr%;OjOCQ^:+ C̥,4xbpZGi[,q(Rb6A7E"k:8ibFxrfA$9pc%x-TqvOG]ˣƟk^xI% 1X{aĪ̡D7ꍈ*>!a6 ~)4LЏ HHH "-J=sd/R R^oZXG:5oIK^%\*nꇀѴՀ P9I[&C>hX)YWgo~kV4l0夡Lp^F 4Trz'`ߠL5D됑zi 2 Šapu *DP;<{3 hd>SL#ph5w3ůg^W.'вy}y[Esg]}ѩ?fI+WCH̚Rضa>%;7駞ܩ"V(!_{gbUZL2C# "> >EW>'E*>--VjD,նiL3_ν{|8ܯɘL&q39g=g-9 p~? 3r=ON-7'~X$Rε:)\UB nZZKHꢟHEسl5hD>t1~E8G*V~%:rܚEcRKZՉU#C??y9`1JU0;3ancJ󺊔a.U}5B ws{\rĤU{&hɹk%+@RT9h9@AFpZ%R!08Ptc9PabV\TE ;ԲuɻDp挮 DR5gDHDKmf-!bT #EsA#)AsX53MVhs~G:8IO+ :.n.Q*m%J#iγyt" F #nd ) DAv1f[#O[CxFQQ<<̋E Ԣ/5\ց5jOΏ.&'n O?oVȹ8)ݝt gvdf5ܵtO ~7c(Yv܅[Gv<4oD7>CZv~ƅ;uIlL䕄¼پH3?8كDc Y;}yQ$+zzNgl|^V*$ލ|l,~q ]tC ^K', tlٽ7ah}m|](h c ~|FBa̵xJL 0]!"rOs[Z1 0v옹^x^0 cWlz}Օ~WO=^]ca\0ȝK^c^ط_=6Ba[vXk+19'b!0 øh+z谈7W]7 0K7}"Hhf6䨙0 ؞V_CHɎ꘮[onz:&,3=c30 R%5iR 07!6>~c>}wݢ-[*PԚWV^|On񱐓sOEc~ڼS;m0 c7|Gbz_n`"MMΛ}w.Zq3z2`nAs`1a72M0.aK78vn?|<Z`iHՏӦrgyS0vM7m' @uݶ, 1995-2000. dnl Bruno Haible , 2000-2006, 2008-2010. dnl Macro to add for using GNU gettext. dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]). dnl INTLSYMBOL must be one of 'external', 'use-libtool'. dnl INTLSYMBOL should be 'external' for packages other than GNU gettext, and dnl 'use-libtool' for the packages 'gettext-runtime' and 'gettext-tools'. dnl If INTLSYMBOL is 'use-libtool', then a libtool library dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static, dnl depending on --{enable,disable}-{shared,static} and on the presence of dnl AM-DISABLE-SHARED). dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext dnl implementations (in libc or libintl) without the ngettext() function dnl will be ignored. If NEEDSYMBOL is specified and is dnl 'need-formatstring-macros', then GNU gettext implementations that don't dnl support the ISO C 99 formatstring macros will be ignored. dnl INTLDIR is used to find the intl libraries. If empty, dnl the value '$(top_builddir)/intl/' is used. dnl dnl The result of the configuration is one of three cases: dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled dnl and used. dnl Catalog format: GNU --> install in $(datadir) dnl Catalog extension: .mo after installation, .gmo in source tree dnl 2) GNU gettext has been found in the system's C library. dnl Catalog format: GNU --> install in $(datadir) dnl Catalog extension: .mo after installation, .gmo in source tree dnl 3) No internationalization, always use English msgid. dnl Catalog format: none dnl Catalog extension: none dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur. dnl The use of .gmo is historical (it was needed to avoid overwriting the dnl GNU format catalogs when building on a platform with an X/Open gettext), dnl but we keep it in order not to force irrelevant filename changes on the dnl maintainers. dnl AC_DEFUN([AM_GNU_GETTEXT], [ dnl Argument checking. m4_if([$1], [], , [m4_if([$1], [external], , [m4_if([$1], [use-libtool], , [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT ])])])]) m4_if(m4_if([$1], [], [old])[]m4_if([$1], [no-libtool], [old]), [old], [errprint([ERROR: Use of AM_GNU_GETTEXT without [external] argument is no longer supported. ])]) m4_if([$2], [], , [m4_if([$2], [need-ngettext], , [m4_if([$2], [need-formatstring-macros], , [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT ])])])]) define([gt_included_intl], m4_if([$1], [external], [no], [yes])) gt_NEEDS_INIT AM_GNU_GETTEXT_NEED([$2]) AC_REQUIRE([AM_PO_SUBDIRS])dnl m4_if(gt_included_intl, yes, [ AC_REQUIRE([AM_INTL_SUBDIR])dnl ]) dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) dnl Sometimes libintl requires libiconv, so first search for libiconv. dnl Ideally we would do this search only after the dnl if test "$USE_NLS" = "yes"; then dnl if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT dnl the configure script would need to contain the same shell code dnl again, outside any 'if'. There are two solutions: dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'. dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE. dnl Since AC_PROVIDE_IFELSE is not documented, we avoid it. m4_if(gt_included_intl, yes, , [ AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) ]) dnl Sometimes, on Mac OS X, libintl requires linking with CoreFoundation. gt_INTL_MACOSX dnl Set USE_NLS. AC_REQUIRE([AM_NLS]) m4_if(gt_included_intl, yes, [ BUILD_INCLUDED_LIBINTL=no USE_INCLUDED_LIBINTL=no ]) LIBINTL= LTLIBINTL= POSUB= dnl Add a version number to the cache macros. case " $gt_needs " in *" need-formatstring-macros "*) gt_api_version=3 ;; *" need-ngettext "*) gt_api_version=2 ;; *) gt_api_version=1 ;; esac gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc" gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl" dnl If we use NLS figure out what method if test "$USE_NLS" = "yes"; then gt_use_preinstalled_gnugettext=no m4_if(gt_included_intl, yes, [ AC_MSG_CHECKING([whether included gettext is requested]) AC_ARG_WITH([included-gettext], [ --with-included-gettext use the GNU gettext library included here], nls_cv_force_use_gnu_gettext=$withval, nls_cv_force_use_gnu_gettext=no) AC_MSG_RESULT([$nls_cv_force_use_gnu_gettext]) nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" if test "$nls_cv_force_use_gnu_gettext" != "yes"; then ]) dnl User does not insist on using GNU NLS library. Figure out what dnl to use. If GNU gettext is available we use this. Else we have dnl to fall back to GNU NLS library. if test $gt_api_version -ge 3; then gt_revision_test_code=' #ifndef __GNU_GETTEXT_SUPPORTED_REVISION #define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) #endif changequote(,)dnl typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; changequote([,])dnl ' else gt_revision_test_code= fi if test $gt_api_version -ge 2; then gt_expression_test_code=' + * ngettext ("", "", 0)' else gt_expression_test_code= fi AC_CACHE_CHECK([for GNU gettext in libc], [$gt_func_gnugettext_libc], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[ #include #ifndef __GNU_GETTEXT_SUPPORTED_REVISION extern int _nl_msg_cat_cntr; extern int *_nl_domain_bindings; #define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_domain_bindings) #else #define __GNU_GETTEXT_SYMBOL_EXPRESSION 0 #endif $gt_revision_test_code ]], [[ bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION ]])], [eval "$gt_func_gnugettext_libc=yes"], [eval "$gt_func_gnugettext_libc=no"])]) if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then dnl Sometimes libintl requires libiconv, so first search for libiconv. m4_if(gt_included_intl, yes, , [ AM_ICONV_LINK ]) dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv]) dnl because that would add "-liconv" to LIBINTL and LTLIBINTL dnl even if libiconv doesn't exist. AC_LIB_LINKFLAGS_BODY([intl]) AC_CACHE_CHECK([for GNU gettext in libintl], [$gt_func_gnugettext_libintl], [gt_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $INCINTL" gt_save_LIBS="$LIBS" LIBS="$LIBS $LIBINTL" dnl Now see whether libintl exists and does not depend on libiconv. AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[ #include #ifndef __GNU_GETTEXT_SUPPORTED_REVISION extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (const char *); #define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_expand_alias ("")) #else #define __GNU_GETTEXT_SYMBOL_EXPRESSION 0 #endif $gt_revision_test_code ]], [[ bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION ]])], [eval "$gt_func_gnugettext_libintl=yes"], [eval "$gt_func_gnugettext_libintl=no"]) dnl Now see whether libintl exists and depends on libiconv. if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then LIBS="$LIBS $LIBICONV" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[ #include #ifndef __GNU_GETTEXT_SUPPORTED_REVISION extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (const char *); #define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_expand_alias ("")) #else #define __GNU_GETTEXT_SYMBOL_EXPRESSION 0 #endif $gt_revision_test_code ]], [[ bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION ]])], [LIBINTL="$LIBINTL $LIBICONV" LTLIBINTL="$LTLIBINTL $LTLIBICONV" eval "$gt_func_gnugettext_libintl=yes" ]) fi CPPFLAGS="$gt_save_CPPFLAGS" LIBS="$gt_save_LIBS"]) fi dnl If an already present or preinstalled GNU gettext() is found, dnl use it. But if this macro is used in GNU gettext, and GNU dnl gettext is already preinstalled in libintl, we update this dnl libintl. (Cf. the install rule in intl/Makefile.in.) if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \ || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \ && test "$PACKAGE" != gettext-runtime \ && test "$PACKAGE" != gettext-tools; }; then gt_use_preinstalled_gnugettext=yes else dnl Reset the values set by searching for libintl. LIBINTL= LTLIBINTL= INCINTL= fi m4_if(gt_included_intl, yes, [ if test "$gt_use_preinstalled_gnugettext" != "yes"; then dnl GNU gettext is not found in the C library. dnl Fall back on included GNU gettext library. nls_cv_use_gnu_gettext=yes fi fi if test "$nls_cv_use_gnu_gettext" = "yes"; then dnl Mark actions used to generate GNU NLS library. BUILD_INCLUDED_LIBINTL=yes USE_INCLUDED_LIBINTL=yes LIBINTL="m4_if([$3],[],\${top_builddir}/intl,[$3])/libintl.la $LIBICONV $LIBTHREAD" LTLIBINTL="m4_if([$3],[],\${top_builddir}/intl,[$3])/libintl.la $LTLIBICONV $LTLIBTHREAD" LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'` fi CATOBJEXT= if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then dnl Mark actions to use GNU gettext tools. CATOBJEXT=.gmo fi ]) if test -n "$INTL_MACOSX_LIBS"; then if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then dnl Some extra flags are needed during linking. LIBINTL="$LIBINTL $INTL_MACOSX_LIBS" LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS" fi fi if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then AC_DEFINE([ENABLE_NLS], [1], [Define to 1 if translation of program messages to the user's native language is requested.]) else USE_NLS=no fi fi AC_MSG_CHECKING([whether to use NLS]) AC_MSG_RESULT([$USE_NLS]) if test "$USE_NLS" = "yes"; then AC_MSG_CHECKING([where the gettext function comes from]) if test "$gt_use_preinstalled_gnugettext" = "yes"; then if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then gt_source="external libintl" else gt_source="libc" fi else gt_source="included intl directory" fi AC_MSG_RESULT([$gt_source]) fi if test "$USE_NLS" = "yes"; then if test "$gt_use_preinstalled_gnugettext" = "yes"; then if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then AC_MSG_CHECKING([how to link with libintl]) AC_MSG_RESULT([$LIBINTL]) AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL]) fi dnl For backward compatibility. Some packages may be using this. AC_DEFINE([HAVE_GETTEXT], [1], [Define if the GNU gettext() function is already present or preinstalled.]) AC_DEFINE([HAVE_DCGETTEXT], [1], [Define if the GNU dcgettext() function is already present or preinstalled.]) fi dnl We need to process the po/ directory. POSUB=po fi m4_if(gt_included_intl, yes, [ dnl In GNU gettext we have to set BUILD_INCLUDED_LIBINTL to 'yes' dnl because some of the testsuite requires it. BUILD_INCLUDED_LIBINTL=yes dnl Make all variables we use known to autoconf. AC_SUBST([BUILD_INCLUDED_LIBINTL]) AC_SUBST([USE_INCLUDED_LIBINTL]) AC_SUBST([CATOBJEXT]) ]) dnl For backward compatibility. Some Makefiles may be using this. INTLLIBS="$LIBINTL" AC_SUBST([INTLLIBS]) dnl Make all documented variables known to autoconf. AC_SUBST([LIBINTL]) AC_SUBST([LTLIBINTL]) AC_SUBST([POSUB]) ]) dnl gt_NEEDS_INIT ensures that the gt_needs variable is initialized. m4_define([gt_NEEDS_INIT], [ m4_divert_text([DEFAULTS], [gt_needs=]) m4_define([gt_NEEDS_INIT], []) ]) dnl Usage: AM_GNU_GETTEXT_NEED([NEEDSYMBOL]) AC_DEFUN([AM_GNU_GETTEXT_NEED], [ m4_divert_text([INIT_PREPARE], [gt_needs="$gt_needs $1"]) ]) dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version]) AC_DEFUN([AM_GNU_GETTEXT_VERSION], []) dnl Usage: AM_GNU_GETTEXT_REQUIRE_VERSION([gettext-version]) AC_DEFUN([AM_GNU_GETTEXT_REQUIRE_VERSION], []) ydpdict-1.0.5/m4/host-cpu-c-abi.m4000066400000000000000000000537201454113125300164600ustar00rootroot00000000000000# host-cpu-c-abi.m4 serial 15 dnl Copyright (C) 2002-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible and Sam Steingold. dnl Sets the HOST_CPU variable to the canonical name of the CPU. dnl Sets the HOST_CPU_C_ABI variable to the canonical name of the CPU with its dnl C language ABI (application binary interface). dnl Also defines __${HOST_CPU}__ and __${HOST_CPU_C_ABI}__ as C macros in dnl config.h. dnl dnl This canonical name can be used to select a particular assembly language dnl source file that will interoperate with C code on the given host. dnl dnl For example: dnl * 'i386' and 'sparc' are different canonical names, because code for i386 dnl will not run on SPARC CPUs and vice versa. They have different dnl instruction sets. dnl * 'sparc' and 'sparc64' are different canonical names, because code for dnl 'sparc' and code for 'sparc64' cannot be linked together: 'sparc' code dnl contains 32-bit instructions, whereas 'sparc64' code contains 64-bit dnl instructions. A process on a SPARC CPU can be in 32-bit mode or in 64-bit dnl mode, but not both. dnl * 'mips' and 'mipsn32' are different canonical names, because they use dnl different argument passing and return conventions for C functions, and dnl although the instruction set of 'mips' is a large subset of the dnl instruction set of 'mipsn32'. dnl * 'mipsn32' and 'mips64' are different canonical names, because they use dnl different sizes for the C types like 'int' and 'void *', and although dnl the instruction sets of 'mipsn32' and 'mips64' are the same. dnl * The same canonical name is used for different endiannesses. You can dnl determine the endianness through preprocessor symbols: dnl - 'arm': test __ARMEL__. dnl - 'mips', 'mipsn32', 'mips64': test _MIPSEB vs. _MIPSEL. dnl - 'powerpc64': test _BIG_ENDIAN vs. _LITTLE_ENDIAN. dnl * The same name 'i386' is used for CPUs of type i386, i486, i586 dnl (Pentium), AMD K7, Pentium II, Pentium IV, etc., because dnl - Instructions that do not exist on all of these CPUs (cmpxchg, dnl MMX, SSE, SSE2, 3DNow! etc.) are not frequently used. If your dnl assembly language source files use such instructions, you will dnl need to make the distinction. dnl - Speed of execution of the common instruction set is reasonable across dnl the entire family of CPUs. If you have assembly language source files dnl that are optimized for particular CPU types (like GNU gmp has), you dnl will need to make the distinction. dnl See . AC_DEFUN([gl_HOST_CPU_C_ABI], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gl_C_ASM]) AC_CACHE_CHECK([host CPU and C ABI], [gl_cv_host_cpu_c_abi], [case "$host_cpu" in changequote(,)dnl i[34567]86 ) changequote([,])dnl gl_cv_host_cpu_c_abi=i386 ;; x86_64 ) # On x86_64 systems, the C compiler may be generating code in one of # these ABIs: # - 64-bit instruction set, 64-bit pointers, 64-bit 'long': x86_64. # - 64-bit instruction set, 64-bit pointers, 32-bit 'long': x86_64 # with native Windows (mingw, MSVC). # - 64-bit instruction set, 32-bit pointers, 32-bit 'long': x86_64-x32. # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': i386. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if (defined __x86_64__ || defined __amd64__ \ || defined _M_X64 || defined _M_AMD64) int ok; #else error fail #endif ]])], [AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __ILP32__ || defined _ILP32 int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi=x86_64-x32], [gl_cv_host_cpu_c_abi=x86_64])], [gl_cv_host_cpu_c_abi=i386]) ;; changequote(,)dnl alphaev[4-8] | alphaev56 | alphapca5[67] | alphaev6[78] ) changequote([,])dnl gl_cv_host_cpu_c_abi=alpha ;; arm* | aarch64 ) # Assume arm with EABI. # On arm64 systems, the C compiler may be generating code in one of # these ABIs: # - aarch64 instruction set, 64-bit pointers, 64-bit 'long': arm64. # - aarch64 instruction set, 32-bit pointers, 32-bit 'long': arm64-ilp32. # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': arm or armhf. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#ifdef __aarch64__ int ok; #else error fail #endif ]])], [AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __ILP32__ || defined _ILP32 int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi=arm64-ilp32], [gl_cv_host_cpu_c_abi=arm64])], [# Don't distinguish little-endian and big-endian arm, since they # don't require different machine code for simple operations and # since the user can distinguish them through the preprocessor # defines __ARMEL__ vs. __ARMEB__. # But distinguish arm which passes floating-point arguments and # return values in integer registers (r0, r1, ...) - this is # gcc -mfloat-abi=soft or gcc -mfloat-abi=softfp - from arm which # passes them in float registers (s0, s1, ...) and double registers # (d0, d1, ...) - this is gcc -mfloat-abi=hard. GCC 4.6 or newer # sets the preprocessor defines __ARM_PCS (for the first case) and # __ARM_PCS_VFP (for the second case), but older GCC does not. echo 'double ddd; void func (double dd) { ddd = dd; }' > conftest.c # Look for a reference to the register d0 in the .s file. AC_TRY_COMMAND(${CC-cc} $CFLAGS $CPPFLAGS $gl_c_asm_opt conftest.c) >/dev/null 2>&1 if LC_ALL=C grep 'd0,' conftest.$gl_asmext >/dev/null; then gl_cv_host_cpu_c_abi=armhf else gl_cv_host_cpu_c_abi=arm fi rm -f conftest* ]) ;; hppa1.0 | hppa1.1 | hppa2.0* | hppa64 ) # On hppa, the C compiler may be generating 32-bit code or 64-bit # code. In the latter case, it defines _LP64 and __LP64__. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#ifdef __LP64__ int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi=hppa64], [gl_cv_host_cpu_c_abi=hppa]) ;; ia64* ) # On ia64 on HP-UX, the C compiler may be generating 64-bit code or # 32-bit code. In the latter case, it defines _ILP32. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#ifdef _ILP32 int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi=ia64-ilp32], [gl_cv_host_cpu_c_abi=ia64]) ;; mips* ) # We should also check for (_MIPS_SZPTR == 64), but gcc keeps this # at 32. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined _MIPS_SZLONG && (_MIPS_SZLONG == 64) int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi=mips64], [# In the n32 ABI, _ABIN32 is defined, _ABIO32 is not defined (but # may later get defined by ), and _MIPS_SIM == _ABIN32. # In the 32 ABI, _ABIO32 is defined, _ABIN32 is not defined (but # may later get defined by ), and _MIPS_SIM == _ABIO32. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if (_MIPS_SIM == _ABIN32) int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi=mipsn32], [gl_cv_host_cpu_c_abi=mips])]) ;; powerpc* ) # Different ABIs are in use on AIX vs. Mac OS X vs. Linux,*BSD. # No need to distinguish them here; the caller may distinguish # them based on the OS. # On powerpc64 systems, the C compiler may still be generating # 32-bit code. And on powerpc-ibm-aix systems, the C compiler may # be generating 64-bit code. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __powerpc64__ || defined __LP64__ int ok; #else error fail #endif ]])], [# On powerpc64, there are two ABIs on Linux: The AIX compatible # one and the ELFv2 one. The latter defines _CALL_ELF=2. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined _CALL_ELF && _CALL_ELF == 2 int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi=powerpc64-elfv2], [gl_cv_host_cpu_c_abi=powerpc64]) ], [gl_cv_host_cpu_c_abi=powerpc]) ;; rs6000 ) gl_cv_host_cpu_c_abi=powerpc ;; riscv32 | riscv64 ) # There are 2 architectures (with variants): rv32* and rv64*. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if __riscv_xlen == 64 int ok; #else error fail #endif ]])], [cpu=riscv64], [cpu=riscv32]) # There are 6 ABIs: ilp32, ilp32f, ilp32d, lp64, lp64f, lp64d. # Size of 'long' and 'void *': AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __LP64__ int ok; #else error fail #endif ]])], [main_abi=lp64], [main_abi=ilp32]) # Float ABIs: # __riscv_float_abi_double: # 'float' and 'double' are passed in floating-point registers. # __riscv_float_abi_single: # 'float' are passed in floating-point registers. # __riscv_float_abi_soft: # No values are passed in floating-point registers. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __riscv_float_abi_double int ok; #else error fail #endif ]])], [float_abi=d], [AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __riscv_float_abi_single int ok; #else error fail #endif ]])], [float_abi=f], [float_abi='']) ]) gl_cv_host_cpu_c_abi="${cpu}-${main_abi}${float_abi}" ;; s390* ) # On s390x, the C compiler may be generating 64-bit (= s390x) code # or 31-bit (= s390) code. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __LP64__ || defined __s390x__ int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi=s390x], [gl_cv_host_cpu_c_abi=s390]) ;; sparc | sparc64 ) # UltraSPARCs running Linux have `uname -m` = "sparc64", but the # C compiler still generates 32-bit code. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __sparcv9 || defined __arch64__ int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi=sparc64], [gl_cv_host_cpu_c_abi=sparc]) ;; *) gl_cv_host_cpu_c_abi="$host_cpu" ;; esac ]) dnl In most cases, $HOST_CPU and $HOST_CPU_C_ABI are the same. HOST_CPU=`echo "$gl_cv_host_cpu_c_abi" | sed -e 's/-.*//'` HOST_CPU_C_ABI="$gl_cv_host_cpu_c_abi" AC_SUBST([HOST_CPU]) AC_SUBST([HOST_CPU_C_ABI]) # This was # AC_DEFINE_UNQUOTED([__${HOST_CPU}__]) # AC_DEFINE_UNQUOTED([__${HOST_CPU_C_ABI}__]) # earlier, but KAI C++ 3.2d doesn't like this. sed -e 's/-/_/g' >> confdefs.h <. dnl Don't make changes that are incompatible with that documentation! AC_DEFUN([AM_ICONV_LINKFLAGS_BODY], [ dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV dnl accordingly. AC_LIB_LINKFLAGS_BODY([iconv]) ]) AC_DEFUN([AM_ICONV_LINK], [ dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and dnl those with the standalone portable GNU libiconv installed). AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV dnl accordingly. AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) dnl Add $INCICONV to CPPFLAGS before performing the following checks, dnl because if the user has installed libiconv and not disabled its use dnl via --without-libiconv-prefix, he wants to use it. The first dnl AC_LINK_IFELSE will then fail, the second AC_LINK_IFELSE will succeed. am_save_CPPFLAGS="$CPPFLAGS" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV]) AC_CACHE_CHECK([for iconv], [am_cv_func_iconv], [ am_cv_func_iconv="no, consider installing GNU libiconv" am_cv_lib_iconv=no AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[ #include #include ]], [[iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd);]])], [am_cv_func_iconv=yes]) if test "$am_cv_func_iconv" != yes; then am_save_LIBS="$LIBS" LIBS="$LIBS $LIBICONV" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[ #include #include ]], [[iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd);]])], [am_cv_lib_iconv=yes] [am_cv_func_iconv=yes]) LIBS="$am_save_LIBS" fi ]) if test "$am_cv_func_iconv" = yes; then AC_CACHE_CHECK([for working iconv], [am_cv_func_iconv_works], [ dnl This tests against bugs in AIX 5.1, AIX 6.1..7.1, HP-UX 11.11, dnl Solaris 10. am_save_LIBS="$LIBS" if test $am_cv_lib_iconv = yes; then LIBS="$LIBS $LIBICONV" fi am_cv_func_iconv_works=no for ac_iconv_const in '' 'const'; do AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[ #include #include #ifndef ICONV_CONST # define ICONV_CONST $ac_iconv_const #endif ]], [[int result = 0; /* Test against AIX 5.1...7.2 bug: Failures are not distinguishable from successful returns. This is even documented in */ { iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8"); if (cd_utf8_to_88591 != (iconv_t)(-1)) { static ICONV_CONST char input[] = "\342\202\254"; /* EURO SIGN */ char buf[10]; ICONV_CONST char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_utf8_to_88591, &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) result |= 1; iconv_close (cd_utf8_to_88591); } } /* Test against Solaris 10 bug: Failures are not distinguishable from successful returns. */ { iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646"); if (cd_ascii_to_88591 != (iconv_t)(-1)) { static ICONV_CONST char input[] = "\263"; char buf[10]; ICONV_CONST char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_ascii_to_88591, &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) result |= 2; iconv_close (cd_ascii_to_88591); } } /* Test against AIX 6.1..7.1 bug: Buffer overrun. */ { iconv_t cd_88591_to_utf8 = iconv_open ("UTF-8", "ISO-8859-1"); if (cd_88591_to_utf8 != (iconv_t)(-1)) { static ICONV_CONST char input[] = "\304"; static char buf[2] = { (char)0xDE, (char)0xAD }; ICONV_CONST char *inptr = input; size_t inbytesleft = 1; char *outptr = buf; size_t outbytesleft = 1; size_t res = iconv (cd_88591_to_utf8, &inptr, &inbytesleft, &outptr, &outbytesleft); if (res != (size_t)(-1) || outptr - buf > 1 || buf[1] != (char)0xAD) result |= 4; iconv_close (cd_88591_to_utf8); } } #if 0 /* This bug could be worked around by the caller. */ /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */ { iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591"); if (cd_88591_to_utf8 != (iconv_t)(-1)) { static ICONV_CONST char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; char buf[50]; ICONV_CONST char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_88591_to_utf8, &inptr, &inbytesleft, &outptr, &outbytesleft); if ((int)res > 0) result |= 8; iconv_close (cd_88591_to_utf8); } } #endif /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is provided. */ { /* Try standardized names. */ iconv_t cd1 = iconv_open ("UTF-8", "EUC-JP"); /* Try IRIX, OSF/1 names. */ iconv_t cd2 = iconv_open ("UTF-8", "eucJP"); /* Try AIX names. */ iconv_t cd3 = iconv_open ("UTF-8", "IBM-eucJP"); /* Try HP-UX names. */ iconv_t cd4 = iconv_open ("utf8", "eucJP"); if (cd1 == (iconv_t)(-1) && cd2 == (iconv_t)(-1) && cd3 == (iconv_t)(-1) && cd4 == (iconv_t)(-1)) result |= 16; if (cd1 != (iconv_t)(-1)) iconv_close (cd1); if (cd2 != (iconv_t)(-1)) iconv_close (cd2); if (cd3 != (iconv_t)(-1)) iconv_close (cd3); if (cd4 != (iconv_t)(-1)) iconv_close (cd4); } return result; ]])], [am_cv_func_iconv_works=yes], , [case "$host_os" in aix* | hpux*) am_cv_func_iconv_works="guessing no" ;; *) am_cv_func_iconv_works="guessing yes" ;; esac]) test "$am_cv_func_iconv_works" = no || break done LIBS="$am_save_LIBS" ]) case "$am_cv_func_iconv_works" in *no) am_func_iconv=no am_cv_lib_iconv=no ;; *) am_func_iconv=yes ;; esac else am_func_iconv=no am_cv_lib_iconv=no fi if test "$am_func_iconv" = yes; then AC_DEFINE([HAVE_ICONV], [1], [Define if you have the iconv() function and it works.]) fi if test "$am_cv_lib_iconv" = yes; then AC_MSG_CHECKING([how to link with libiconv]) AC_MSG_RESULT([$LIBICONV]) else dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV dnl either. CPPFLAGS="$am_save_CPPFLAGS" LIBICONV= LTLIBICONV= fi AC_SUBST([LIBICONV]) AC_SUBST([LTLIBICONV]) ]) dnl Define AM_ICONV using AC_DEFUN_ONCE, in order to avoid warnings like dnl "warning: AC_REQUIRE: `AM_ICONV' was expanded before it was required". dnl This is tricky because of the way 'aclocal' is implemented: dnl - It requires defining an auxiliary macro whose name ends in AC_DEFUN. dnl Otherwise aclocal's initial scan pass would miss the macro definition. dnl - It requires a line break inside the AC_DEFUN_ONCE and AC_DEFUN expansions. dnl Otherwise aclocal would emit many "Use of uninitialized value $1" dnl warnings. AC_DEFUN_ONCE([AM_ICONV], [ AM_ICONV_LINK if test "$am_cv_func_iconv" = yes; then AC_CACHE_CHECK([whether iconv is compatible with its POSIX signature], [gl_cv_iconv_nonconst], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[ #include #include extern #ifdef __cplusplus "C" #endif size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); ]], [[]])], [gl_cv_iconv_nonconst=yes], [gl_cv_iconv_nonconst=no]) ]) else dnl When compiling GNU libiconv on a system that does not have iconv yet, dnl pick the POSIX compliant declaration without 'const'. gl_cv_iconv_nonconst=yes fi if test $gl_cv_iconv_nonconst = yes; then iconv_arg1="" else iconv_arg1="const" fi AC_DEFINE_UNQUOTED([ICONV_CONST], [$iconv_arg1], [Define as const if the declaration of iconv() needs const.]) dnl Also substitute ICONV_CONST in the gnulib generated . m4_ifdef([gl_ICONV_H_DEFAULTS], [AC_REQUIRE([gl_ICONV_H_DEFAULTS]) if test $gl_cv_iconv_nonconst != yes; then ICONV_CONST="const" fi ]) ]) ydpdict-1.0.5/m4/intlmacosx.m4000066400000000000000000000062351454113125300161250ustar00rootroot00000000000000# intlmacosx.m4 serial 8 (gettext-0.20.2) dnl Copyright (C) 2004-2014, 2016, 2019-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can be used in projects which are not available under dnl the GNU General Public License or the GNU Lesser General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Lesser General Public License, and the rest of the GNU dnl gettext package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Checks for special options needed on Mac OS X. dnl Defines INTL_MACOSX_LIBS. AC_DEFUN([gt_INTL_MACOSX], [ dnl Check for API introduced in Mac OS X 10.4. AC_CACHE_CHECK([for CFPreferencesCopyAppValue], [gt_cv_func_CFPreferencesCopyAppValue], [gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include ]], [[CFPreferencesCopyAppValue(NULL, NULL)]])], [gt_cv_func_CFPreferencesCopyAppValue=yes], [gt_cv_func_CFPreferencesCopyAppValue=no]) LIBS="$gt_save_LIBS"]) if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then AC_DEFINE([HAVE_CFPREFERENCESCOPYAPPVALUE], [1], [Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in the CoreFoundation framework.]) fi dnl Don't check for the API introduced in Mac OS X 10.5, CFLocaleCopyCurrent, dnl because in macOS 10.13.4 it has the following behaviour: dnl When two or more languages are specified in the dnl "System Preferences > Language & Region > Preferred Languages" panel, dnl it returns en_CC where CC is the territory (even when English is not among dnl the preferred languages!). What we want instead is what dnl CFLocaleCopyCurrent returned in earlier macOS releases and what dnl CFPreferencesCopyAppValue still returns, namely ll_CC where ll is the dnl first among the preferred languages and CC is the territory. AC_CACHE_CHECK([for CFLocaleCopyPreferredLanguages], [gt_cv_func_CFLocaleCopyPreferredLanguages], [gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include ]], [[CFLocaleCopyPreferredLanguages();]])], [gt_cv_func_CFLocaleCopyPreferredLanguages=yes], [gt_cv_func_CFLocaleCopyPreferredLanguages=no]) LIBS="$gt_save_LIBS"]) if test $gt_cv_func_CFLocaleCopyPreferredLanguages = yes; then AC_DEFINE([HAVE_CFLOCALECOPYPREFERREDLANGUAGES], [1], [Define to 1 if you have the Mac OS X function CFLocaleCopyPreferredLanguages in the CoreFoundation framework.]) fi INTL_MACOSX_LIBS= if test $gt_cv_func_CFPreferencesCopyAppValue = yes \ || test $gt_cv_func_CFLocaleCopyPreferredLanguages = yes; then INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" fi AC_SUBST([INTL_MACOSX_LIBS]) ]) ydpdict-1.0.5/m4/lib-ld.m4000066400000000000000000000123701454113125300151040ustar00rootroot00000000000000# lib-ld.m4 serial 10 dnl Copyright (C) 1996-2003, 2009-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Subroutines of libtool.m4, dnl with replacements s/_*LT_PATH/AC_LIB_PROG/ and s/lt_/acl_/ to avoid dnl collision with libtool.m4. dnl From libtool-2.4. Sets the variable with_gnu_ld to yes or no. AC_DEFUN([AC_LIB_PROG_LD_GNU], [AC_CACHE_CHECK([if the linker ($LD) is GNU ld], [acl_cv_prog_gnu_ld], [# I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 /dev/null 2>&1 \ && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ || PATH_SEPARATOR=';' } fi if test -n "$LD"; then AC_MSG_CHECKING([for ld]) elif test "$GCC" = yes; then AC_MSG_CHECKING([for ld used by $CC]) elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi if test -n "$LD"; then # Let the user override the test with a path. : else AC_CACHE_VAL([acl_cv_path_LD], [ acl_cv_path_LD= # Final result of this test ac_prog=ld # Program to search in $PATH if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw acl_output=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) acl_output=`($CC -print-prog-name=ld) 2>&5` ;; esac case $acl_output in # Accept absolute paths. [[\\/]]* | ?:[[\\/]]*) re_direlt='/[[^/]][[^/]]*/\.\./' # Canonicalize the pathname of ld acl_output=`echo "$acl_output" | sed 's%\\\\%/%g'` while echo "$acl_output" | grep "$re_direlt" > /dev/null 2>&1; do acl_output=`echo $acl_output | sed "s%$re_direlt%/%"` done # Got the pathname. No search in PATH is needed. acl_cv_path_LD="$acl_output" ac_prog= ;; "") # If it fails, then pretend we aren't using GCC. ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac fi if test -n "$ac_prog"; then # Search for $ac_prog in $PATH. acl_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$acl_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then acl_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$acl_cv_path_LD" -v 2>&1 conftest.sh . ./conftest.sh rm -f ./conftest.sh acl_cv_rpath=done ]) wl="$acl_cv_wl" acl_libext="$acl_cv_libext" acl_shlibext="$acl_cv_shlibext" acl_libname_spec="$acl_cv_libname_spec" acl_library_names_spec="$acl_cv_library_names_spec" acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" acl_hardcode_direct="$acl_cv_hardcode_direct" acl_hardcode_minus_L="$acl_cv_hardcode_minus_L" dnl Determine whether the user wants rpath handling at all. AC_ARG_ENABLE([rpath], [ --disable-rpath do not hardcode runtime library paths], :, enable_rpath=yes) ]) dnl AC_LIB_FROMPACKAGE(name, package) dnl declares that libname comes from the given package. The configure file dnl will then not have a --with-libname-prefix option but a dnl --with-package-prefix option. Several libraries can come from the same dnl package. This declaration must occur before an AC_LIB_LINKFLAGS or similar dnl macro call that searches for libname. AC_DEFUN([AC_LIB_FROMPACKAGE], [ pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) define([acl_frompackage_]NAME, [$2]) popdef([NAME]) pushdef([PACK],[$2]) pushdef([PACKUP],[m4_translit(PACK,[abcdefghijklmnopqrstuvwxyz./+-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) define([acl_libsinpackage_]PACKUP, m4_ifdef([acl_libsinpackage_]PACKUP, [m4_defn([acl_libsinpackage_]PACKUP)[, ]],)[lib$1]) popdef([PACKUP]) popdef([PACK]) ]) dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and dnl the libraries corresponding to explicit and implicit dependencies. dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables. dnl Also, sets the LIB${NAME}_PREFIX variable to nonempty if libname was found dnl in ${LIB${NAME}_PREFIX}/$acl_libdirstem. AC_DEFUN([AC_LIB_LINKFLAGS_BODY], [ AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) pushdef([PACK],[m4_ifdef([acl_frompackage_]NAME, [acl_frompackage_]NAME, lib[$1])]) pushdef([PACKUP],[m4_translit(PACK,[abcdefghijklmnopqrstuvwxyz./+-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) pushdef([PACKLIBS],[m4_ifdef([acl_frompackage_]NAME, [acl_libsinpackage_]PACKUP, lib[$1])]) dnl By default, look in $includedir and $libdir. use_additional=yes AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\" eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\" ]) AC_ARG_WITH(PACK[-prefix], [[ --with-]]PACK[[-prefix[=DIR] search for ]]PACKLIBS[[ in DIR/include and DIR/lib --without-]]PACK[[-prefix don't search for ]]PACKLIBS[[ in includedir and libdir]], [ if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\" eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\" ]) else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" additional_libdir2="$withval/$acl_libdirstem2" additional_libdir3="$withval/$acl_libdirstem3" fi fi ]) if test "X$additional_libdir2" = "X$additional_libdir"; then additional_libdir2= fi if test "X$additional_libdir3" = "X$additional_libdir"; then additional_libdir3= fi dnl Search the library and its dependencies in $additional_libdir and dnl $LDFLAGS. Using breadth-first-seach. LIB[]NAME= LTLIB[]NAME= INC[]NAME= LIB[]NAME[]_PREFIX= dnl HAVE_LIB${NAME} is an indicator that LIB${NAME}, LTLIB${NAME} have been dnl computed. So it has to be reset here. HAVE_LIB[]NAME= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='$1 $2' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" dnl See if it was already located by an earlier AC_LIB_LINKFLAGS dnl or AC_LIB_HAVE_LINKFLAGS call. uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value" else dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined dnl that this library doesn't exist. So just drop it. : fi else dnl Search the library lib$name in $additional_libdir and $LDFLAGS dnl and the already constructed $LIBNAME/$LTLIBNAME. found_dir= found_la= found_so= found_a= eval libname=\"$acl_libname_spec\" # typically: libname=lib$name if test -n "$acl_shlibext"; then shrext=".$acl_shlibext" # typically: shrext=.so else shrext= fi if test $use_additional = yes; then for additional_libdir_variable in additional_libdir additional_libdir2 additional_libdir3; do if test "X$found_dir" = "X"; then eval dir=\$$additional_libdir_variable if test -n "$dir"; then dnl The same code as in the loop below: dnl First look for a shared library. if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi dnl Then look for a static library. if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi fi fi done fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` dnl First look for a shared library. if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi dnl Then look for a static library. if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then dnl Found the library. LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then dnl Linking with a shared library. We attempt to hardcode its dnl directory into the executable's runpath, unless it's the dnl standard /usr/lib. if test "$enable_rpath" = no \ || test "X$found_dir" = "X/usr/$acl_libdirstem" \ || test "X$found_dir" = "X/usr/$acl_libdirstem2" \ || test "X$found_dir" = "X/usr/$acl_libdirstem3"; then dnl No hardcoding is needed. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else dnl Use an explicit option to hardcode DIR into the resulting dnl binary. dnl Potentially add DIR to ltrpathdirs. dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi dnl The hardcoding into $LIBNAME is system dependent. if test "$acl_hardcode_direct" = yes; then dnl Using DIR/libNAME.so during linking hardcodes DIR into the dnl resulting binary. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then dnl Use an explicit option to hardcode DIR into the resulting dnl binary. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" dnl Potentially add DIR to rpathdirs. dnl The rpathdirs will be appended to $LIBNAME at the end. haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else dnl Rely on "-L$found_dir". dnl But don't add it if it's already contained in the LDFLAGS dnl or the already constructed $LIBNAME haveit= for x in $LDFLAGS $LIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir" fi if test "$acl_hardcode_minus_L" != no; then dnl FIXME: Not sure whether we should use dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" dnl here. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else dnl We cannot use $acl_hardcode_runpath_var and LD_RUN_PATH dnl here, because this doesn't fit in flags passed to the dnl compiler. So give up. No hardcoding. This affects only dnl very old systems. dnl FIXME: Not sure whether we should use dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" dnl here. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then dnl Linking with a static library. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a" else dnl We shouldn't come here, but anyway it's good to have a dnl fallback. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name" fi fi dnl Assume the include files are nearby. additional_includedir= case "$found_dir" in */$acl_libdirstem | */$acl_libdirstem/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` if test "$name" = '$1'; then LIB[]NAME[]_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem2 | */$acl_libdirstem2/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` if test "$name" = '$1'; then LIB[]NAME[]_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem3 | */$acl_libdirstem3/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem3/"'*$,,'` if test "$name" = '$1'; then LIB[]NAME[]_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then dnl Potentially add $additional_includedir to $INCNAME. dnl But don't add it dnl 1. if it's the standard /usr/include, dnl 2. if it's /usr/local/include and we are using GCC on Linux, dnl 3. if it's already present in $CPPFLAGS or the already dnl constructed $INCNAME, dnl 4. if it doesn't exist as a directory. if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INC[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then dnl Really add $additional_includedir to $INCNAME. INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir" fi fi fi fi fi dnl Look for dependencies. if test -n "$found_la"; then dnl Read the .la file. It defines the variables dnl dlname, library_names, old_library, dependency_libs, current, dnl age, revision, installed, dlopen, dlpreopen, libdir. save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" dnl We use only dependency_libs. for dep in $dependency_libs; do case "$dep" in -L*) dependency_libdir=`echo "X$dep" | sed -e 's/^X-L//'` dnl Potentially add $dependency_libdir to $LIBNAME and $LTLIBNAME. dnl But don't add it dnl 1. if it's the standard /usr/lib, dnl 2. if it's /usr/local/lib and we are using GCC on Linux, dnl 3. if it's already present in $LDFLAGS or the already dnl constructed $LIBNAME, dnl 4. if it doesn't exist as a directory. if test "X$dependency_libdir" != "X/usr/$acl_libdirstem" \ && test "X$dependency_libdir" != "X/usr/$acl_libdirstem2" \ && test "X$dependency_libdir" != "X/usr/$acl_libdirstem3"; then haveit= if test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem" \ || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem2" \ || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem3"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$dependency_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$dependency_libdir"; then dnl Really add $dependency_libdir to $LIBNAME. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$dependency_libdir" fi fi haveit= for x in $LDFLAGS $LTLIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$dependency_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$dependency_libdir"; then dnl Really add $dependency_libdir to $LTLIBNAME. LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$dependency_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then dnl Potentially add DIR to rpathdirs. dnl The rpathdirs will be appended to $LIBNAME at the end. haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi dnl Potentially add DIR to ltrpathdirs. dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) dnl Handle this in the next round. dnl But on GNU systems, ignore -lc options, because dnl - linking with libc is the default anyway, dnl - linking with libc.a may produce an error dnl "/usr/bin/ld: dynamic STT_GNU_IFUNC symbol `strcmp' with pointer equality in `/usr/lib/libc.a(strcmp.o)' can not be used when making an executable; recompile with -fPIE and relink with -pie" dnl or may produce an executable that always crashes, see dnl . dep=`echo "X$dep" | sed -e 's/^X-l//'` if test "X$dep" != Xc \ || case $host_os in linux* | gnu* | k*bsd*-gnu) false ;; *) true ;; esac; then names_next_round="$names_next_round $dep" fi ;; *.la) dnl Handle this in the next round. Throw away the .la's dnl directory; it is already contained in a preceding -L dnl option. names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) dnl Most likely an immediate library name. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep" LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep" ;; esac done fi else dnl Didn't find the library; assume it is in the system directories dnl known to the linker and runtime loader. (All the system dnl directories known to the linker should also be known to the dnl runtime loader, otherwise the system is severely misconfigured.) LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$acl_hardcode_libdir_separator"; then dnl Weird platform: only the last -rpath option counts, the user must dnl pass all path elements in one option. We can arrange that for a dnl single library, but not when more than one $LIBNAMEs are used. alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done dnl Note: acl_hardcode_libdir_flag_spec uses $libdir and $wl. acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" else dnl The -rpath options are cumulative. for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then dnl When using libtool, the option that works for both libraries and dnl executables is -R. The -R options are cumulative. for found_dir in $ltrpathdirs; do LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir" done fi popdef([PACKLIBS]) popdef([PACKUP]) popdef([PACK]) popdef([NAME]) ]) dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR, dnl unless already present in VAR. dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes dnl contains two or three consecutive elements that belong together. AC_DEFUN([AC_LIB_APPENDTOVAR], [ for element in [$2]; do haveit= for x in $[$1]; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then [$1]="${[$1]}${[$1]:+ }$element" fi done ]) dnl For those cases where a variable contains several -L and -l options dnl referring to unknown libraries and directories, this macro determines the dnl necessary additional linker options for the runtime path. dnl AC_LIB_LINKFLAGS_FROM_LIBS([LDADDVAR], [LIBSVALUE], [USE-LIBTOOL]) dnl sets LDADDVAR to linker options needed together with LIBSVALUE. dnl If USE-LIBTOOL evaluates to non-empty, linking with libtool is assumed, dnl otherwise linking without libtool is assumed. AC_DEFUN([AC_LIB_LINKFLAGS_FROM_LIBS], [ AC_REQUIRE([AC_LIB_RPATH]) AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) $1= if test "$enable_rpath" != no; then if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then dnl Use an explicit option to hardcode directories into the resulting dnl binary. rpathdirs= next= for opt in $2; do if test -n "$next"; then dir="$next" dnl No need to hardcode the standard /usr/lib. if test "X$dir" != "X/usr/$acl_libdirstem" \ && test "X$dir" != "X/usr/$acl_libdirstem2" \ && test "X$dir" != "X/usr/$acl_libdirstem3"; then rpathdirs="$rpathdirs $dir" fi next= else case $opt in -L) next=yes ;; -L*) dir=`echo "X$opt" | sed -e 's,^X-L,,'` dnl No need to hardcode the standard /usr/lib. if test "X$dir" != "X/usr/$acl_libdirstem" \ && test "X$dir" != "X/usr/$acl_libdirstem2" \ && test "X$dir" != "X/usr/$acl_libdirstem3"; then rpathdirs="$rpathdirs $dir" fi next= ;; *) next= ;; esac fi done if test "X$rpathdirs" != "X"; then if test -n ""$3""; then dnl libtool is used for linking. Use -R options. for dir in $rpathdirs; do $1="${$1}${$1:+ }-R$dir" done else dnl The linker is used for linking directly. if test -n "$acl_hardcode_libdir_separator"; then dnl Weird platform: only the last -rpath option counts, the user dnl must pass all path elements in one option. alldirs= for dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" $1="$flag" else dnl The -rpath options are cumulative. for dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" $1="${$1}${$1:+ }$flag" done fi fi fi fi fi AC_SUBST([$1]) ]) ydpdict-1.0.5/m4/lib-prefix.m4000066400000000000000000000276451454113125300160150ustar00rootroot00000000000000# lib-prefix.m4 serial 20 dnl Copyright (C) 2001-2005, 2008-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed dnl to access previously installed libraries. The basic assumption is that dnl a user will want packages to use other packages he previously installed dnl with the same --prefix option. dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate dnl libraries, but is otherwise very convenient. AC_DEFUN([AC_LIB_PREFIX], [ AC_BEFORE([$0], [AC_LIB_LINKFLAGS]) AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) dnl By default, look in $includedir and $libdir. use_additional=yes AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) AC_ARG_WITH([lib-prefix], [[ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib --without-lib-prefix don't search for libraries in includedir and libdir]], [ if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" fi fi ]) if test $use_additional = yes; then dnl Potentially add $additional_includedir to $CPPFLAGS. dnl But don't add it dnl 1. if it's the standard /usr/include, dnl 2. if it's already present in $CPPFLAGS, dnl 3. if it's /usr/local/include and we are using GCC on Linux, dnl 4. if it doesn't exist as a directory. if test "X$additional_includedir" != "X/usr/include"; then haveit= for x in $CPPFLAGS; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then if test -d "$additional_includedir"; then dnl Really add $additional_includedir to $CPPFLAGS. CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir" fi fi fi fi dnl Potentially add $additional_libdir to $LDFLAGS. dnl But don't add it dnl 1. if it's the standard /usr/lib, dnl 2. if it's already present in $LDFLAGS, dnl 3. if it's /usr/local/lib and we are using GCC on Linux, dnl 4. if it doesn't exist as a directory. if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then haveit= for x in $LDFLAGS; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then if test -n "$GCC"; then case $host_os in linux*) haveit=yes;; esac fi fi if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LDFLAGS. LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir" fi fi fi fi fi ]) dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix, dnl acl_final_exec_prefix, containing the values to which $prefix and dnl $exec_prefix will expand at the end of the configure script. AC_DEFUN([AC_LIB_PREPARE_PREFIX], [ dnl Unfortunately, prefix and exec_prefix get only finally determined dnl at the end of configure. if test "X$prefix" = "XNONE"; then acl_final_prefix="$ac_default_prefix" else acl_final_prefix="$prefix" fi if test "X$exec_prefix" = "XNONE"; then acl_final_exec_prefix='${prefix}' else acl_final_exec_prefix="$exec_prefix" fi acl_save_prefix="$prefix" prefix="$acl_final_prefix" eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" prefix="$acl_save_prefix" ]) dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the dnl variables prefix and exec_prefix bound to the values they will have dnl at the end of the configure script. AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX], [ acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" $1 exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" ]) dnl AC_LIB_PREPARE_MULTILIB creates dnl - a function acl_is_expected_elfclass, that tests whether standard input dn; has a 32-bit or 64-bit ELF header, depending on the host CPU ABI, dnl - 3 variables acl_libdirstem, acl_libdirstem2, acl_libdirstem3, containing dnl the basename of the libdir to try in turn, either "lib" or "lib64" or dnl "lib/64" or "lib32" or "lib/sparcv9" or "lib/amd64" or similar. AC_DEFUN([AC_LIB_PREPARE_MULTILIB], [ dnl There is no formal standard regarding lib, lib32, and lib64. dnl On most glibc systems, the current practice is that on a system supporting dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under dnl $prefix/lib64 and 32-bit libraries go under $prefix/lib. However, on dnl Arch Linux based distributions, it's the opposite: 32-bit libraries go dnl under $prefix/lib32 and 64-bit libraries go under $prefix/lib. dnl We determine the compiler's default mode by looking at the compiler's dnl library search path. If at least one of its elements ends in /lib64 or dnl points to a directory whose absolute pathname ends in /lib64, we use that dnl for 64-bit ABIs. Similarly for 32-bit ABIs. Otherwise we use the default, dnl namely "lib". dnl On Solaris systems, the current practice is that on a system supporting dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under dnl $prefix/lib/64 (which is a symlink to either $prefix/lib/sparcv9 or dnl $prefix/lib/amd64) and 32-bit libraries go under $prefix/lib. AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gl_HOST_CPU_C_ABI_32BIT]) AC_CACHE_CHECK([for ELF binary format], [gl_cv_elf], [AC_EGREP_CPP([Extensible Linking Format], [#if defined __ELF__ || (defined __linux__ && defined __EDG__) Extensible Linking Format #endif ], [gl_cv_elf=yes], [gl_cv_elf=no]) ]) if test $gl_cv_elf = yes; then # Extract the ELF class of a file (5th byte) in decimal. # Cf. https://en.wikipedia.org/wiki/Executable_and_Linkable_Format#File_header if od -A x < /dev/null >/dev/null 2>/dev/null; then # Use POSIX od. func_elfclass () { od -A n -t d1 -j 4 -N 1 } else # Use BSD hexdump. func_elfclass () { dd bs=1 count=1 skip=4 2>/dev/null | hexdump -e '1/1 "%3d "' echo } fi # Use 'expr', not 'test', to compare the values of func_elfclass, because on # Solaris 11 OpenIndiana and Solaris 11 OmniOS, the result is 001 or 002, # not 1 or 2. changequote(,)dnl case $HOST_CPU_C_ABI_32BIT in yes) # 32-bit ABI. acl_is_expected_elfclass () { expr "`func_elfclass | sed -e 's/[ ]//g'`" = 1 > /dev/null } ;; no) # 64-bit ABI. acl_is_expected_elfclass () { expr "`func_elfclass | sed -e 's/[ ]//g'`" = 2 > /dev/null } ;; *) # Unknown. acl_is_expected_elfclass () { : } ;; esac changequote([,])dnl else acl_is_expected_elfclass () { : } fi dnl Allow the user to override the result by setting acl_cv_libdirstems. AC_CACHE_CHECK([for the common suffixes of directories in the library search path], [acl_cv_libdirstems], [dnl Try 'lib' first, because that's the default for libdir in GNU, see dnl . acl_libdirstem=lib acl_libdirstem2= acl_libdirstem3= case "$host_os" in solaris*) dnl See Solaris 10 Software Developer Collection > Solaris 64-bit Developer's Guide > The Development Environment dnl . dnl "Portable Makefiles should refer to any library directories using the 64 symbolic link." dnl But we want to recognize the sparcv9 or amd64 subdirectory also if the dnl symlink is missing, so we set acl_libdirstem2 too. if test $HOST_CPU_C_ABI_32BIT = no; then acl_libdirstem2=lib/64 case "$host_cpu" in sparc*) acl_libdirstem3=lib/sparcv9 ;; i*86 | x86_64) acl_libdirstem3=lib/amd64 ;; esac fi ;; *) dnl If $CC generates code for a 32-bit ABI, the libraries are dnl surely under $prefix/lib or $prefix/lib32, not $prefix/lib64. dnl Similarly, if $CC generates code for a 64-bit ABI, the libraries dnl are surely under $prefix/lib or $prefix/lib64, not $prefix/lib32. dnl Find the compiler's search path. However, non-system compilers dnl sometimes have odd library search paths. But we can't simply invoke dnl '/usr/bin/gcc -print-search-dirs' because that would not take into dnl account the -m32/-m31 or -m64 options from the $CC or $CFLAGS. searchpath=`(LC_ALL=C $CC $CPPFLAGS $CFLAGS -print-search-dirs) 2>/dev/null \ | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` if test $HOST_CPU_C_ABI_32BIT != no; then # 32-bit or unknown ABI. if test -d /usr/lib32; then acl_libdirstem2=lib32 fi fi if test $HOST_CPU_C_ABI_32BIT != yes; then # 64-bit or unknown ABI. if test -d /usr/lib64; then acl_libdirstem3=lib64 fi fi if test -n "$searchpath"; then acl_save_IFS="${IFS= }"; IFS=":" for searchdir in $searchpath; do if test -d "$searchdir"; then case "$searchdir" in */lib32/ | */lib32 ) acl_libdirstem2=lib32 ;; */lib64/ | */lib64 ) acl_libdirstem3=lib64 ;; */../ | */.. ) # Better ignore directories of this form. They are misleading. ;; *) searchdir=`cd "$searchdir" && pwd` case "$searchdir" in */lib32 ) acl_libdirstem2=lib32 ;; */lib64 ) acl_libdirstem3=lib64 ;; esac ;; esac fi done IFS="$acl_save_IFS" if test $HOST_CPU_C_ABI_32BIT = yes; then # 32-bit ABI. acl_libdirstem3= fi if test $HOST_CPU_C_ABI_32BIT = no; then # 64-bit ABI. acl_libdirstem2= fi fi ;; esac test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem" test -n "$acl_libdirstem3" || acl_libdirstem3="$acl_libdirstem" acl_cv_libdirstems="$acl_libdirstem,$acl_libdirstem2,$acl_libdirstem3" ]) dnl Decompose acl_cv_libdirstems into acl_libdirstem, acl_libdirstem2, and dnl acl_libdirstem3. changequote(,)dnl acl_libdirstem=`echo "$acl_cv_libdirstems" | sed -e 's/,.*//'` acl_libdirstem2=`echo "$acl_cv_libdirstems" | sed -e 's/^[^,]*,//' -e 's/,.*//'` acl_libdirstem3=`echo "$acl_cv_libdirstems" | sed -e 's/^[^,]*,[^,]*,//' -e 's/,.*//'` changequote([,])dnl ]) ydpdict-1.0.5/m4/nls.m4000066400000000000000000000023221454113125300145310ustar00rootroot00000000000000# nls.m4 serial 6 (gettext-0.20.2) dnl Copyright (C) 1995-2003, 2005-2006, 2008-2014, 2016, 2019-2022 Free dnl Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can be used in projects which are not available under dnl the GNU General Public License or the GNU Lesser General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Lesser General Public License, and the rest of the GNU dnl gettext package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1995-2000. dnl Bruno Haible , 2000-2003. AC_PREREQ([2.50]) AC_DEFUN([AM_NLS], [ AC_MSG_CHECKING([whether NLS is requested]) dnl Default is enabled NLS AC_ARG_ENABLE([nls], [ --disable-nls do not use Native Language Support], USE_NLS=$enableval, USE_NLS=yes) AC_MSG_RESULT([$USE_NLS]) AC_SUBST([USE_NLS]) ]) ydpdict-1.0.5/m4/po.m4000066400000000000000000000451011454113125300143550ustar00rootroot00000000000000# po.m4 serial 32 (gettext-0.21.1) dnl Copyright (C) 1995-2014, 2016, 2018-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can be used in projects which are not available under dnl the GNU General Public License or the GNU Lesser General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Lesser General Public License, and the rest of the GNU dnl gettext package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1995-2000. dnl Bruno Haible , 2000-2003. AC_PREREQ([2.60]) dnl Checks for all prerequisites of the po subdirectory. AC_DEFUN([AM_PO_SUBDIRS], [ AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl AC_REQUIRE([AC_PROG_SED])dnl AC_REQUIRE([AM_NLS])dnl dnl Release version of the gettext macros. This is used to ensure that dnl the gettext macros and po/Makefile.in.in are in sync. AC_SUBST([GETTEXT_MACRO_VERSION], [0.20]) dnl Perform the following tests also if --disable-nls has been given, dnl because they are needed for "make dist" to work. dnl Search for GNU msgfmt in the PATH. dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions. dnl The second test excludes FreeBSD msgfmt. AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, [$ac_dir/$ac_word --statistics /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], :) AC_PATH_PROG([GMSGFMT], [gmsgfmt], [$MSGFMT]) dnl Test whether it is GNU msgfmt >= 0.15. changequote(,)dnl case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;; *) GMSGFMT_015=$GMSGFMT ;; esac changequote([,])dnl AC_SUBST([GMSGFMT_015]) dnl Search for GNU xgettext 0.12 or newer in the PATH. dnl The first test excludes Solaris xgettext and early GNU xgettext versions. dnl The second test excludes FreeBSD xgettext. AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, [$ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], :) dnl Remove leftover from FreeBSD xgettext call. rm -f messages.po dnl Test whether it is GNU xgettext >= 0.15. changequote(,)dnl case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;; *) XGETTEXT_015=$XGETTEXT ;; esac changequote([,])dnl AC_SUBST([XGETTEXT_015]) dnl Search for GNU msgmerge 0.11 or newer in the PATH. AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge, [$ac_dir/$ac_word --update -q /dev/null /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1], :) dnl Test whether it is GNU msgmerge >= 0.20. if LC_ALL=C $MSGMERGE --help | grep ' --for-msgfmt ' >/dev/null; then MSGMERGE_FOR_MSGFMT_OPTION='--for-msgfmt' else dnl Test whether it is GNU msgmerge >= 0.12. if LC_ALL=C $MSGMERGE --help | grep ' --no-fuzzy-matching ' >/dev/null; then MSGMERGE_FOR_MSGFMT_OPTION='--no-fuzzy-matching --no-location --quiet' else dnl With these old versions, $(MSGMERGE) $(MSGMERGE_FOR_MSGFMT_OPTION) is dnl slow. But this is not a big problem, as such old gettext versions are dnl hardly in use any more. MSGMERGE_FOR_MSGFMT_OPTION='--no-location --quiet' fi fi AC_SUBST([MSGMERGE_FOR_MSGFMT_OPTION]) dnl Support for AM_XGETTEXT_OPTION. test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS= AC_SUBST([XGETTEXT_EXTRA_OPTIONS]) AC_CONFIG_COMMANDS([po-directories], [[ for ac_file in $CONFIG_FILES; do # Support "outfile[:infile[:infile...]]" case "$ac_file" in *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; esac # PO directories have a Makefile.in generated from Makefile.in.in. case "$ac_file" in */Makefile.in) # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'` ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" case "$ac_given_srcdir" in .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; /*) top_srcdir="$ac_given_srcdir" ;; *) top_srcdir="$ac_dots$ac_given_srcdir" ;; esac # Treat a directory as a PO directory if and only if it has a # POTFILES.in file. This allows packages to have multiple PO # directories under different names or in different locations. if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then rm -f "$ac_dir/POTFILES" test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" gt_tab=`printf '\t'` cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ${gt_tab}]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" POMAKEFILEDEPS="POTFILES.in" # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend # on $ac_dir but don't depend on user-specified configuration # parameters. if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then # The LINGUAS file contains the set of available languages. if test -n "$OBSOLETE_ALL_LINGUAS"; then test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" fi ALL_LINGUAS=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" else # The set of available languages was given in configure.in. ALL_LINGUAS=$OBSOLETE_ALL_LINGUAS fi # Compute POFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) # Compute UPDATEPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) # Compute DUMMYPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) # Compute GMOFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) case "$ac_given_srcdir" in .) srcdirpre= ;; *) srcdirpre='$(srcdir)/' ;; esac POFILES= UPDATEPOFILES= DUMMYPOFILES= GMOFILES= for lang in $ALL_LINGUAS; do POFILES="$POFILES $srcdirpre$lang.po" UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" DUMMYPOFILES="$DUMMYPOFILES $lang.nop" GMOFILES="$GMOFILES $srcdirpre$lang.gmo" done # CATALOGS depends on both $ac_dir and the user's LINGUAS # environment variable. INST_LINGUAS= if test -n "$ALL_LINGUAS"; then for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "$LINGUAS"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang" | "$presentlang"_* | "$presentlang".* | "$presentlang"@*) useit=yes ;; esac done if test $useit = yes; then INST_LINGUAS="$INST_LINGUAS $presentlang" fi done fi CATALOGS= if test -n "$INST_LINGUAS"; then for lang in $INST_LINGUAS; do CATALOGS="$CATALOGS $lang.gmo" done fi test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do if test -f "$f"; then case "$f" in *.orig | *.bak | *~) ;; *) cat "$f" >> "$ac_dir/Makefile" ;; esac fi done fi ;; esac done]], [# Capture the value of obsolete ALL_LINGUAS because we need it to compute # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. OBSOLETE_ALL_LINGUAS="$ALL_LINGUAS" # Capture the value of LINGUAS because we need it to compute CATALOGS. LINGUAS="${LINGUAS-%UNSET%}" ]) ]) dnl Postprocesses a Makefile in a directory containing PO files. AC_DEFUN([AM_POSTPROCESS_PO_MAKEFILE], [ # When this code is run, in config.status, two variables have already been # set: # - OBSOLETE_ALL_LINGUAS is the value of LINGUAS set in configure.in, # - LINGUAS is the value of the environment variable LINGUAS at configure # time. changequote(,)dnl # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'` ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" case "$ac_given_srcdir" in .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; /*) top_srcdir="$ac_given_srcdir" ;; *) top_srcdir="$ac_dots$ac_given_srcdir" ;; esac # Find a way to echo strings without interpreting backslash. if test "X`(echo '\t') 2>/dev/null`" = 'X\t'; then gt_echo='echo' else if test "X`(printf '%s\n' '\t') 2>/dev/null`" = 'X\t'; then gt_echo='printf %s\n' else echo_func () { cat < "$ac_file.tmp" tab=`printf '\t'` if grep -l '@TCLCATALOGS@' "$ac_file" > /dev/null; then # Add dependencies that cannot be formulated as a simple suffix rule. for lang in $ALL_LINGUAS; do frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'` cat >> "$ac_file.tmp" < /dev/null; then # Add dependencies that cannot be formulated as a simple suffix rule. for lang in $ALL_LINGUAS; do frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'` cat >> "$ac_file.tmp" <> "$ac_file.tmp" <, 1996. AC_PREREQ([2.53]) # Search path for a program which passes the given test. dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) AC_DEFUN([AM_PATH_PROG_WITH_TEST], [ # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which # contains only /bin. Note that ksh looks also at the FPATH variable, # so we have to set that as well for the test. PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ || PATH_SEPARATOR=';' } fi # Find out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "$2", so it can be a program name with args. set dummy $2; ac_word=[$]2 AC_MSG_CHECKING([for $ac_word]) AC_CACHE_VAL([ac_cv_path_$1], [case "[$]$1" in [[\\/]]* | ?:[[\\/]]*) ac_cv_path_$1="[$]$1" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in m4_if([$5], , $PATH, [$5]); do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then echo "$as_me: trying $ac_dir/$ac_word..." >&AS_MESSAGE_LOG_FD if [$3]; then ac_cv_path_$1="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" dnl If no 4th arg is given, leave the cache variable unset, dnl so AC_PATH_PROGS will keep looking. m4_if([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" ])dnl ;; esac])dnl $1="$ac_cv_path_$1" if test m4_if([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then AC_MSG_RESULT([$][$1]) else AC_MSG_RESULT([no]) fi AC_SUBST([$1])dnl ]) ydpdict-1.0.5/po/000077500000000000000000000000001454113125300135725ustar00rootroot00000000000000ydpdict-1.0.5/po/LINGUAS000066400000000000000000000000031454113125300146100ustar00rootroot00000000000000pl ydpdict-1.0.5/po/Makefile.in.in000066400000000000000000000461631454113125300162560ustar00rootroot00000000000000# Makefile for PO directory in any package using GNU gettext. # Copyright (C) 1995-2000 Ulrich Drepper # Copyright (C) 2000-2020 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # # Origin: gettext-0.21 GETTEXT_MACRO_VERSION = 0.20 PACKAGE = @PACKAGE@ VERSION = @VERSION@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ SED = @SED@ SHELL = /bin/sh @SET_MAKE@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ datarootdir = @datarootdir@ datadir = @datadir@ localedir = @localedir@ gettextsrcdir = $(datadir)/gettext/po INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ # We use $(mkdir_p). # In automake <= 1.9.x, $(mkdir_p) is defined either as "mkdir -p --" or as # "$(mkinstalldirs)" or as "$(install_sh) -d". For these automake versions, # @install_sh@ does not start with $(SHELL), so we add it. # In automake >= 1.10, @mkdir_p@ is derived from ${MKDIR_P}, which is defined # either as "/path/to/mkdir -p" or ".../install-sh -c -d". For these automake # versions, $(mkinstalldirs) and $(install_sh) are unused. mkinstalldirs = $(SHELL) @install_sh@ -d install_sh = $(SHELL) @install_sh@ MKDIR_P = @MKDIR_P@ mkdir_p = @mkdir_p@ # When building gettext-tools, we prefer to use the built programs # rather than installed programs. However, we can't do that when we # are cross compiling. CROSS_COMPILING = @CROSS_COMPILING@ GMSGFMT_ = @GMSGFMT@ GMSGFMT_no = @GMSGFMT@ GMSGFMT_yes = @GMSGFMT_015@ GMSGFMT = $(GMSGFMT_$(USE_MSGCTXT)) XGETTEXT_ = @XGETTEXT@ XGETTEXT_no = @XGETTEXT@ XGETTEXT_yes = @XGETTEXT_015@ XGETTEXT = $(XGETTEXT_$(USE_MSGCTXT)) MSGMERGE = @MSGMERGE@ MSGMERGE_UPDATE = @MSGMERGE@ --update MSGMERGE_FOR_MSGFMT_OPTION = @MSGMERGE_FOR_MSGFMT_OPTION@ MSGINIT = msginit MSGCONV = msgconv MSGFILTER = msgfilter POFILES = @POFILES@ GMOFILES = @GMOFILES@ UPDATEPOFILES = @UPDATEPOFILES@ DUMMYPOFILES = @DUMMYPOFILES@ DISTFILES.common = Makefile.in.in remove-potcdate.sin \ $(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3) DISTFILES = $(DISTFILES.common) Makevars POTFILES.in \ $(POFILES) $(GMOFILES) \ $(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3) POTFILES = \ CATALOGS = @CATALOGS@ POFILESDEPS_ = $(srcdir)/$(DOMAIN).pot POFILESDEPS_yes = $(POFILESDEPS_) POFILESDEPS_no = POFILESDEPS = $(POFILESDEPS_$(PO_DEPENDS_ON_POT)) DISTFILESDEPS_ = update-po DISTFILESDEPS_yes = $(DISTFILESDEPS_) DISTFILESDEPS_no = DISTFILESDEPS = $(DISTFILESDEPS_$(DIST_DEPENDS_ON_UPDATE_PO)) # Makevars gets inserted here. (Don't remove this line!) all: all-@USE_NLS@ .SUFFIXES: .SUFFIXES: .po .gmo .sed .sin .nop .po-create .po-update # The .pot file, stamp-po, .po files, and .gmo files appear in release tarballs. # The GNU Coding Standards say in # : # "GNU distributions usually contain some files which are not source files # ... . Since these files normally appear in the source directory, they # should always appear in the source directory, not in the build directory. # So Makefile rules to update them should put the updated files in the # source directory." # Therefore we put these files in the source directory, not the build directory. # During .po -> .gmo conversion, take into account the most recent changes to # the .pot file. This eliminates the need to update the .po files when the # .pot file has changed, which would be troublesome if the .po files are put # under version control. $(GMOFILES): $(srcdir)/$(DOMAIN).pot .po.gmo: @lang=`echo $* | sed -e 's,.*/,,'`; \ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ echo "$${cdcmd}rm -f $${lang}.gmo && $(MSGMERGE) $(MSGMERGE_FOR_MSGFMT_OPTION) -o $${lang}.1po $${lang}.po $(DOMAIN).pot && $(GMSGFMT) -c --statistics --verbose -o $${lang}.gmo $${lang}.1po && rm -f $${lang}.1po"; \ cd $(srcdir) && \ rm -f $${lang}.gmo && \ $(MSGMERGE) $(MSGMERGE_FOR_MSGFMT_OPTION) -o $${lang}.1po $${lang}.po $(DOMAIN).pot && \ $(GMSGFMT) -c --statistics --verbose -o t-$${lang}.gmo $${lang}.1po && \ mv t-$${lang}.gmo $${lang}.gmo && \ rm -f $${lang}.1po .sin.sed: sed -e '/^#/d' $< > t-$@ mv t-$@ $@ all-yes: $(srcdir)/stamp-po all-no: # Ensure that the gettext macros and this Makefile.in.in are in sync. CHECK_MACRO_VERSION = \ test "$(GETTEXT_MACRO_VERSION)" = "@GETTEXT_MACRO_VERSION@" \ || { echo "*** error: gettext infrastructure mismatch: using a Makefile.in.in from gettext version $(GETTEXT_MACRO_VERSION) but the autoconf macros are from gettext version @GETTEXT_MACRO_VERSION@" 1>&2; \ exit 1; \ } # $(srcdir)/$(DOMAIN).pot is only created when needed. When xgettext finds no # internationalized messages, no $(srcdir)/$(DOMAIN).pot is created (because # we don't want to bother translators with empty POT files). We assume that # LINGUAS is empty in this case, i.e. $(POFILES) and $(GMOFILES) are empty. # In this case, $(srcdir)/stamp-po is a nop (i.e. a phony target). # $(srcdir)/stamp-po is a timestamp denoting the last time at which the CATALOGS # have been loosely updated. Its purpose is that when a developer or translator # checks out the package from a version control system, and the $(DOMAIN).pot # file is not under version control, "make" will update the $(DOMAIN).pot and # the $(CATALOGS), but subsequent invocations of "make" will do nothing. This # timestamp would not be necessary if updating the $(CATALOGS) would always # touch them; however, the rule for $(POFILES) has been designed to not touch # files that don't need to be changed. $(srcdir)/stamp-po: $(srcdir)/$(DOMAIN).pot @$(CHECK_MACRO_VERSION) test ! -f $(srcdir)/$(DOMAIN).pot || \ test -z "$(GMOFILES)" || $(MAKE) $(GMOFILES) @test ! -f $(srcdir)/$(DOMAIN).pot || { \ echo "touch $(srcdir)/stamp-po" && \ echo timestamp > $(srcdir)/stamp-poT && \ mv $(srcdir)/stamp-poT $(srcdir)/stamp-po; \ } # Note: Target 'all' must not depend on target '$(DOMAIN).pot-update', # otherwise packages like GCC can not be built if only parts of the source # have been downloaded. # This target rebuilds $(DOMAIN).pot; it is an expensive operation. # Note that $(DOMAIN).pot is not touched if it doesn't need to be changed. # The determination of whether the package xyz is a GNU one is based on the # heuristic whether some file in the top level directory mentions "GNU xyz". # If GNU 'find' is available, we avoid grepping through monster files. $(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed package_gnu="$(PACKAGE_GNU)"; \ test -n "$$package_gnu" || { \ if { if (LC_ALL=C find --version) 2>/dev/null | grep GNU >/dev/null; then \ LC_ALL=C find -L $(top_srcdir) -maxdepth 1 -type f -size -10000000c -exec grep -i 'GNU @PACKAGE@' /dev/null '{}' ';' 2>/dev/null; \ else \ LC_ALL=C grep -i 'GNU @PACKAGE@' $(top_srcdir)/* 2>/dev/null; \ fi; \ } | grep -v 'libtool:' >/dev/null; then \ package_gnu=yes; \ else \ package_gnu=no; \ fi; \ }; \ if test "$$package_gnu" = "yes"; then \ package_prefix='GNU '; \ else \ package_prefix=''; \ fi; \ if test -n '$(MSGID_BUGS_ADDRESS)' || test '$(PACKAGE_BUGREPORT)' = '@'PACKAGE_BUGREPORT'@'; then \ msgid_bugs_address='$(MSGID_BUGS_ADDRESS)'; \ else \ msgid_bugs_address='$(PACKAGE_BUGREPORT)'; \ fi; \ case `$(XGETTEXT) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-5] | 0.1[0-5].* | 0.16 | 0.16.[0-1]*) \ $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \ --add-comments=TRANSLATORS: \ --files-from=$(srcdir)/POTFILES.in \ --copyright-holder='$(COPYRIGHT_HOLDER)' \ --msgid-bugs-address="$$msgid_bugs_address" \ $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \ ;; \ *) \ $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \ --add-comments=TRANSLATORS: \ --files-from=$(srcdir)/POTFILES.in \ --copyright-holder='$(COPYRIGHT_HOLDER)' \ --package-name="$${package_prefix}@PACKAGE@" \ --package-version='@VERSION@' \ --msgid-bugs-address="$$msgid_bugs_address" \ $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \ ;; \ esac test ! -f $(DOMAIN).po || { \ if test -f $(srcdir)/$(DOMAIN).pot-header; then \ sed -e '1,/^#$$/d' < $(DOMAIN).po > $(DOMAIN).1po && \ cat $(srcdir)/$(DOMAIN).pot-header $(DOMAIN).1po > $(DOMAIN).po && \ rm -f $(DOMAIN).1po \ || exit 1; \ fi; \ if test -f $(srcdir)/$(DOMAIN).pot; then \ sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \ sed -f remove-potcdate.sed < $(DOMAIN).po > $(DOMAIN).2po && \ if cmp $(DOMAIN).1po $(DOMAIN).2po >/dev/null 2>&1; then \ rm -f $(DOMAIN).1po $(DOMAIN).2po $(DOMAIN).po; \ else \ rm -f $(DOMAIN).1po $(DOMAIN).2po $(srcdir)/$(DOMAIN).pot && \ mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \ fi; \ else \ mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \ fi; \ } # This rule has no dependencies: we don't need to update $(DOMAIN).pot at # every "make" invocation, only create it when it is missing. # Only "make $(DOMAIN).pot-update" or "make dist" will force an update. $(srcdir)/$(DOMAIN).pot: $(MAKE) $(DOMAIN).pot-update # This target rebuilds a PO file if $(DOMAIN).pot has changed. # Note that a PO file is not touched if it doesn't need to be changed. $(POFILES): $(POFILESDEPS) @test -f $(srcdir)/$(DOMAIN).pot || $(MAKE) $(srcdir)/$(DOMAIN).pot @lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \ if test -f "$(srcdir)/$${lang}.po"; then \ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ echo "$${cdcmd}$(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} --previous $${lang}.po $(DOMAIN).pot"; \ cd $(srcdir) \ && { case `$(MSGMERGE_UPDATE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-5] | 0.1[0-5].*) \ $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) $${lang}.po $(DOMAIN).pot;; \ 0.1[6-7] | 0.1[6-7].*) \ $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --previous $${lang}.po $(DOMAIN).pot;; \ *) \ $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} --previous $${lang}.po $(DOMAIN).pot;; \ esac; \ }; \ else \ $(MAKE) $${lang}.po-create; \ fi install: install-exec install-data install-exec: install-data: install-data-@USE_NLS@ if test "$(PACKAGE)" = "gettext-tools"; then \ $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \ for file in $(DISTFILES.common) Makevars.template; do \ $(INSTALL_DATA) $(srcdir)/$$file \ $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ for file in Makevars; do \ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ else \ : ; \ fi install-data-no: all install-data-yes: all @catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ dir=$(localedir)/$$lang/LC_MESSAGES; \ $(mkdir_p) $(DESTDIR)$$dir; \ if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \ $(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \ echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \ for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \ if test -n "$$lc"; then \ if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \ link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \ mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \ for file in *; do \ if test -f $$file; then \ ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \ fi; \ done); \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ else \ if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \ :; \ else \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ fi; \ fi; \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ ln -s ../LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \ ln $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \ cp -p $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ echo "installing $$realcat link as $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo"; \ fi; \ done; \ done install-strip: install installdirs: installdirs-exec installdirs-data installdirs-exec: installdirs-data: installdirs-data-@USE_NLS@ if test "$(PACKAGE)" = "gettext-tools"; then \ $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \ else \ : ; \ fi installdirs-data-no: installdirs-data-yes: @catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ dir=$(localedir)/$$lang/LC_MESSAGES; \ $(mkdir_p) $(DESTDIR)$$dir; \ for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \ if test -n "$$lc"; then \ if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \ link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \ mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \ for file in *; do \ if test -f $$file; then \ ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \ fi; \ done); \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ else \ if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \ :; \ else \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ fi; \ fi; \ fi; \ done; \ done # Define this as empty until I found a useful application. installcheck: uninstall: uninstall-exec uninstall-data uninstall-exec: uninstall-data: uninstall-data-@USE_NLS@ if test "$(PACKAGE)" = "gettext-tools"; then \ for file in $(DISTFILES.common) Makevars.template; do \ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ else \ : ; \ fi uninstall-data-no: uninstall-data-yes: catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ for lc in LC_MESSAGES $(EXTRA_LOCALE_CATEGORIES); do \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ done; \ done check: all info dvi ps pdf html tags TAGS ctags CTAGS ID: install-dvi install-ps install-pdf install-html: mostlyclean: rm -f remove-potcdate.sed rm -f $(srcdir)/stamp-poT rm -f core core.* $(DOMAIN).po $(DOMAIN).1po $(DOMAIN).2po *.new.po rm -fr *.o clean: mostlyclean distclean: clean rm -f Makefile Makefile.in POTFILES maintainer-clean: distclean @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." rm -f $(srcdir)/$(DOMAIN).pot $(srcdir)/stamp-po $(GMOFILES) distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) dist distdir: test -z "$(DISTFILESDEPS)" || $(MAKE) $(DISTFILESDEPS) @$(MAKE) dist2 # This is a separate target because 'update-po' must be executed before. dist2: $(srcdir)/stamp-po $(DISTFILES) @dists="$(DISTFILES)"; \ if test "$(PACKAGE)" = "gettext-tools"; then \ dists="$$dists Makevars.template"; \ fi; \ if test -f $(srcdir)/$(DOMAIN).pot; then \ dists="$$dists $(DOMAIN).pot stamp-po"; \ else \ case $(XGETTEXT) in \ :) echo "Warning: Creating a tarball without '$(DOMAIN).pot', because a suitable 'xgettext' program was not found in PATH." 1>&2;; \ *) echo "Warning: Creating a tarball without '$(DOMAIN).pot', because 'xgettext' found no strings to extract. Check the contents of the POTFILES.in file and the XGETTEXT_OPTIONS in the Makevars file." 1>&2;; \ esac; \ fi; \ if test -f $(srcdir)/ChangeLog; then \ dists="$$dists ChangeLog"; \ fi; \ for i in 0 1 2 3 4 5 6 7 8 9; do \ if test -f $(srcdir)/ChangeLog.$$i; then \ dists="$$dists ChangeLog.$$i"; \ fi; \ done; \ if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \ for file in $$dists; do \ if test -f $$file; then \ cp -p $$file $(distdir) || exit 1; \ else \ cp -p $(srcdir)/$$file $(distdir) || exit 1; \ fi; \ done update-po: Makefile $(MAKE) $(DOMAIN).pot-update test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES) $(MAKE) update-gmo # General rule for creating PO files. .nop.po-create: @lang=`echo $@ | sed -e 's/\.po-create$$//'`; \ echo "File $$lang.po does not exist. If you are a translator, you can create it through 'msginit'." 1>&2; \ exit 1 # General rule for updating PO files. .nop.po-update: @lang=`echo $@ | sed -e 's/\.po-update$$//'`; \ if test "$(PACKAGE)" = "gettext-tools" && test "$(CROSS_COMPILING)" != "yes"; then PATH=`pwd`/../src:$$PATH; fi; \ tmpdir=`pwd`; \ echo "$$lang:"; \ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ echo "$${cdcmd}$(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang --previous $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \ cd $(srcdir); \ if { case `$(MSGMERGE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-5] | 0.1[0-5].*) \ $(MSGMERGE) $(MSGMERGE_OPTIONS) -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \ 0.1[6-7] | 0.1[6-7].*) \ $(MSGMERGE) $(MSGMERGE_OPTIONS) --previous -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \ *) \ $(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang --previous -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \ esac; \ }; then \ if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ rm -f $$tmpdir/$$lang.new.po; \ else \ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ :; \ else \ echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ exit 1; \ fi; \ fi; \ else \ echo "msgmerge for $$lang.po failed!" 1>&2; \ rm -f $$tmpdir/$$lang.new.po; \ fi $(DUMMYPOFILES): update-gmo: Makefile $(GMOFILES) @: # Recreate Makefile by invoking config.status. Explicitly invoke the shell, # because execution permission bits may not work on the current file system. # Use @SHELL@, which is the shell determined by autoconf for the use by its # scripts, not $(SHELL) which is hardwired to /bin/sh and may be deficient. Makefile: Makefile.in.in Makevars $(top_builddir)/config.status @POMAKEFILEDEPS@ cd $(top_builddir) \ && @SHELL@ ./config.status $(subdir)/$@.in po-directories force: # Tell versions [3.59,3.63) of GNU make not to export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ydpdict-1.0.5/po/Makevars000066400000000000000000000034251454113125300152720ustar00rootroot00000000000000# Makefile variables for PO directory in any package using GNU gettext. # Usually the message domain is the same as the package name. DOMAIN = $(PACKAGE) # These two variables depend on the location of this directory. subdir = po top_builddir = .. # These options get passed to xgettext. XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ # This is the copyright holder that gets inserted into the header of the # $(DOMAIN).pot file. Set this to the copyright holder of the surrounding # package. (Note that the msgstr strings, extracted from the package's # sources, belong to the copyright holder of the package.) Translators are # expected to transfer the copyright for their translations to this person # or entity, or to disclaim their copyright. The empty string stands for # the public domain; in this case the translators are expected to disclaim # their copyright. COPYRIGHT_HOLDER = Wojtek Kaniewski # This is the email address or URL to which the translators shall report # bugs in the untranslated strings: # - Strings which are not entire sentences, see the maintainer guidelines # in the GNU gettext documentation, section 'Preparing Strings'. # - Strings which use unclear terms or require additional context to be # understood. # - Strings which make invalid assumptions about notation of date, time or # money. # - Pluralisation problems. # - Incorrect English spelling. # - Incorrect formatting. # It can be your email address, or a mailing list address where translators # can write to without being subscribed, or the URL of a web page through # which the translators can contact you. MSGID_BUGS_ADDRESS = wojtekka@toxygen.net # This is the list of locale categories, beyond LC_MESSAGES, for which the # message catalogs shall be used. It is usually empty. EXTRA_LOCALE_CATEGORIES = ydpdict-1.0.5/po/Makevars.template000066400000000000000000000067541454113125300171140ustar00rootroot00000000000000# Makefile variables for PO directory in any package using GNU gettext. # # Copyright (C) 2003-2019 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation gives # unlimited permission to use, copy, distribute, and modify it. # Usually the message domain is the same as the package name. DOMAIN = $(PACKAGE) # These two variables depend on the location of this directory. subdir = po top_builddir = .. # These options get passed to xgettext. XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ # This is the copyright holder that gets inserted into the header of the # $(DOMAIN).pot file. Set this to the copyright holder of the surrounding # package. (Note that the msgstr strings, extracted from the package's # sources, belong to the copyright holder of the package.) Translators are # expected to transfer the copyright for their translations to this person # or entity, or to disclaim their copyright. The empty string stands for # the public domain; in this case the translators are expected to disclaim # their copyright. COPYRIGHT_HOLDER = Free Software Foundation, Inc. # This tells whether or not to prepend "GNU " prefix to the package # name that gets inserted into the header of the $(DOMAIN).pot file. # Possible values are "yes", "no", or empty. If it is empty, try to # detect it automatically by scanning the files in $(top_srcdir) for # "GNU packagename" string. PACKAGE_GNU = # This is the email address or URL to which the translators shall report # bugs in the untranslated strings: # - Strings which are not entire sentences, see the maintainer guidelines # in the GNU gettext documentation, section 'Preparing Strings'. # - Strings which use unclear terms or require additional context to be # understood. # - Strings which make invalid assumptions about notation of date, time or # money. # - Pluralisation problems. # - Incorrect English spelling. # - Incorrect formatting. # It can be your email address, or a mailing list address where translators # can write to without being subscribed, or the URL of a web page through # which the translators can contact you. MSGID_BUGS_ADDRESS = # This is the list of locale categories, beyond LC_MESSAGES, for which the # message catalogs shall be used. It is usually empty. EXTRA_LOCALE_CATEGORIES = # This tells whether the $(DOMAIN).pot file contains messages with an 'msgctxt' # context. Possible values are "yes" and "no". Set this to yes if the # package uses functions taking also a message context, like pgettext(), or # if in $(XGETTEXT_OPTIONS) you define keywords with a context argument. USE_MSGCTXT = no # These options get passed to msgmerge. # Useful options are in particular: # --previous to keep previous msgids of translated messages, # --quiet to reduce the verbosity. MSGMERGE_OPTIONS = # These options get passed to msginit. # If you want to disable line wrapping when writing PO files, add # --no-wrap to MSGMERGE_OPTIONS, XGETTEXT_OPTIONS, and # MSGINIT_OPTIONS. MSGINIT_OPTIONS = # This tells whether or not to regenerate a PO file when $(DOMAIN).pot # has changed. Possible values are "yes" and "no". Set this to no if # the POT file is checked in the repository and the version control # program ignores timestamps. PO_DEPENDS_ON_POT = yes # This tells whether or not to forcibly update $(DOMAIN).pot and # regenerate PO files on "make dist". Possible values are "yes" and # "no". Set this to no if the POT file and PO files are maintained # externally. DIST_DEPENDS_ON_UPDATE_PO = yes ydpdict-1.0.5/po/POTFILES.in000066400000000000000000000001661454113125300153520ustar00rootroot00000000000000# List of source files which contain translatable strings. src/xmalloc.c src/ydpconfig.c src/ydpdict.c src/ydpsound.c ydpdict-1.0.5/po/Rules-quot000066400000000000000000000045331454113125300156020ustar00rootroot00000000000000# Special Makefile rules for English message catalogs with quotation marks. # # Copyright (C) 2001-2017 Free Software Foundation, Inc. # This file, Rules-quot, and its auxiliary files (listed under # DISTFILES.common.extra1) are free software; the Free Software Foundation # gives unlimited permission to use, copy, distribute, and modify them. DISTFILES.common.extra1 = quot.sed boldquot.sed en@quot.header en@boldquot.header insert-header.sin Rules-quot .SUFFIXES: .insert-header .po-update-en en@quot.po-create: $(MAKE) en@quot.po-update en@boldquot.po-create: $(MAKE) en@boldquot.po-update en@quot.po-update: en@quot.po-update-en en@boldquot.po-update: en@boldquot.po-update-en .insert-header.po-update-en: @lang=`echo $@ | sed -e 's/\.po-update-en$$//'`; \ if test "$(PACKAGE)" = "gettext-tools" && test "$(CROSS_COMPILING)" != "yes"; then PATH=`pwd`/../src:$$PATH; GETTEXTLIBDIR=`cd $(top_srcdir)/src && pwd`; export GETTEXTLIBDIR; fi; \ tmpdir=`pwd`; \ echo "$$lang:"; \ ll=`echo $$lang | sed -e 's/@.*//'`; \ LC_ALL=C; export LC_ALL; \ cd $(srcdir); \ if $(MSGINIT) $(MSGINIT_OPTIONS) -i $(DOMAIN).pot --no-translator -l $$lang -o - 2>/dev/null \ | $(SED) -f $$tmpdir/$$lang.insert-header | $(MSGCONV) -t UTF-8 | \ { case `$(MSGFILTER) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-8] | 0.1[0-8].*) \ $(MSGFILTER) $(SED) -f `echo $$lang | sed -e 's/.*@//'`.sed \ ;; \ *) \ $(MSGFILTER) `echo $$lang | sed -e 's/.*@//'` \ ;; \ esac } 2>/dev/null > $$tmpdir/$$lang.new.po \ ; then \ if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ rm -f $$tmpdir/$$lang.new.po; \ else \ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ :; \ else \ echo "creation of $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ exit 1; \ fi; \ fi; \ else \ echo "creation of $$lang.po failed!" 1>&2; \ rm -f $$tmpdir/$$lang.new.po; \ fi en@quot.insert-header: insert-header.sin sed -e '/^#/d' -e 's/HEADER/en@quot.header/g' $(srcdir)/insert-header.sin > en@quot.insert-header en@boldquot.insert-header: insert-header.sin sed -e '/^#/d' -e 's/HEADER/en@boldquot.header/g' $(srcdir)/insert-header.sin > en@boldquot.insert-header mostlyclean: mostlyclean-quot mostlyclean-quot: rm -f *.insert-header ydpdict-1.0.5/po/boldquot.sed000066400000000000000000000003311454113125300161150ustar00rootroot00000000000000s/"\([^"]*\)"/“\1”/g s/`\([^`']*\)'/‘\1’/g s/ '\([^`']*\)' / ‘\1’ /g s/ '\([^`']*\)'$/ ‘\1’/g s/^'\([^`']*\)' /‘\1’ /g s/“”/""/g s/“/“/g s/”/”/g s/‘/‘/g s/’/’/g ydpdict-1.0.5/po/en@boldquot.header000066400000000000000000000024721454113125300172250ustar00rootroot00000000000000# All this catalog "translates" are quotation characters. # The msgids must be ASCII and therefore cannot contain real quotation # characters, only substitutes like grave accent (0x60), apostrophe (0x27) # and double quote (0x22). These substitutes look strange; see # https://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html # # This catalog translates grave accent (0x60) and apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019). # It also translates pairs of apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019) # and pairs of quotation mark (0x22) to # left double quotation mark (U+201C) and right double quotation mark (U+201D). # # When output to an UTF-8 terminal, the quotation characters appear perfectly. # When output to an ISO-8859-1 terminal, the single quotation marks are # transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to # grave/acute accent (by libiconv), and the double quotation marks are # transliterated to 0x22. # When output to an ASCII terminal, the single quotation marks are # transliterated to apostrophes, and the double quotation marks are # transliterated to 0x22. # # This catalog furthermore displays the text between the quotation marks in # bold face, assuming the VT100/XTerm escape sequences. # ydpdict-1.0.5/po/en@quot.header000066400000000000000000000022641454113125300163630ustar00rootroot00000000000000# All this catalog "translates" are quotation characters. # The msgids must be ASCII and therefore cannot contain real quotation # characters, only substitutes like grave accent (0x60), apostrophe (0x27) # and double quote (0x22). These substitutes look strange; see # https://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html # # This catalog translates grave accent (0x60) and apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019). # It also translates pairs of apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019) # and pairs of quotation mark (0x22) to # left double quotation mark (U+201C) and right double quotation mark (U+201D). # # When output to an UTF-8 terminal, the quotation characters appear perfectly. # When output to an ISO-8859-1 terminal, the single quotation marks are # transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to # grave/acute accent (by libiconv), and the double quotation marks are # transliterated to 0x22. # When output to an ASCII terminal, the single quotation marks are # transliterated to apostrophes, and the double quotation marks are # transliterated to 0x22. # ydpdict-1.0.5/po/insert-header.sin000066400000000000000000000016121454113125300170370ustar00rootroot00000000000000# Sed script that inserts the file called HEADER before the header entry. # # Copyright (C) 2001 Free Software Foundation, Inc. # Written by Bruno Haible , 2001. # This file is free software; the Free Software Foundation gives # unlimited permission to use, copy, distribute, and modify it. # # At each occurrence of a line starting with "msgid ", we execute the following # commands. At the first occurrence, insert the file. At the following # occurrences, do nothing. The distinction between the first and the following # occurrences is achieved by looking at the hold space. /^msgid /{ x # Test if the hold space is empty. s/m/m/ ta # Yes it was empty. First occurrence. Read the file. r HEADER # Output the file's contents by reading the next line. But don't lose the # current line while doing this. g N bb :a # The hold space was nonempty. Following occurrences. Do nothing. x :b } ydpdict-1.0.5/po/pl.po000066400000000000000000000222161454113125300145500ustar00rootroot00000000000000# Polish translations for ydpdict package # Polskie tłumaczenia dla pakietu ydpdict. # Copyright (C) 2006 Free Software Foundation, Inc. # This file is distributed under the same license as the ydpdict package. # Wojtek Kaniewski , 2006. # msgid "" msgstr "" "Project-Id-Version: ydpdict 0.99.0\n" "Report-Msgid-Bugs-To: wojtekka@toxygen.net\n" "POT-Creation-Date: 2023-10-21 10:46+0200\n" "PO-Revision-Date: 2006-04-18 00:38+0200\n" "Last-Translator: Wojtek Kaniewski \n" "Language-Team: Polish \n" "Language: pl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2);\n" #: src/xmalloc.c:52 src/xmalloc.c:69 src/xmalloc.c:100 src/xmalloc.c:120 #: src/ydpdict.c:297 msgid "Out of memory" msgstr "Brak pamięci" #: src/ydpconfig.c:90 #, c-format msgid "" "Usage: %s [OPTIONS]\n" " -e, --eng start with English-Polish dictionary (default)\n" " -p, --pol start with Polish-English dictionary\n" " -g, --ger-pol start with German-Polish dictionary\n" " -o, --pol-ger start with Polish-German dictionary\n" " -f, --path=PATH set database path\n" " -c, --cdpath=PATH set CD-ROM path\n" " -P, --player=PATH set sound player path\n" " -w, --word=WORD start with selected WORD's definition\n" " -A, --audio=DEVICE set default audio device\n" " -V, --version print program version\n" " -h, --help print this message\n" "\n" msgstr "" "Użycie: %s [OPCJE]\n" " -e, --eng włącza słownik angielsko-polski (domyślnie)\n" " -p, --pol włącza słownik polsko-angielski\n" " -g, --ger-pol włącza słownik niemiecko-polski\n" " -o, --pol-ger włącza słownik polsko-niemiecki\n" " -f, --path=ŚCIEŻKA określa ścieżkę bazy danych\n" " -c, --cdpath=ŚCIEŻKA określa ścieżkę napędu CD\n" " -P, --player=ŚCIEŻKA określa ścieżkę do otwarzacza plików dźwiękowych\n" " -w, --word=SŁOWO rozpoczyna pracę od definicji danego słowa\n" " -A, --audio=URZĄDZENIE określa domyślne urządzenie dźwiękowe\n" " -V, --version wyświetla wersję programu\n" " -h, --help wyświetla tą informację\n" "\n" #: src/ydpconfig.c:261 #, c-format msgid "Error in config file, line %d: %s\n" msgstr "Błąd w pliku konfiguracyjnym, linia %d: %s\n" #: src/ydpdict.c:113 msgid "{\\b Grammatical qualifiers}{\\par\\pard}" msgstr "{\\b Kwalifikatory gramatyczne}{\\par\\pard}" #: src/ydpdict.c:117 msgid "abbreviation" msgstr "skrót" #: src/ydpdict.c:118 msgid "accusative" msgstr "biernik" #: src/ydpdict.c:119 msgid "adjective" msgstr "przymiotnik" #: src/ydpdict.c:120 msgid "adverb" msgstr "przysłówek" #: src/ydpdict.c:121 msgid "article" msgstr "przedimek" #: src/ydpdict.c:122 msgid "attribute" msgstr "przydawka" #: src/ydpdict.c:123 msgid "auxiliary" msgstr "posiłkowy" #: src/ydpdict.c:124 msgid "comparative degree" msgstr "stopień wyższy" #: src/ydpdict.c:125 msgid "complement" msgstr "dopełnienie" #: src/ydpdict.c:126 msgid "conjunction" msgstr "spójnik" #: src/ydpdict.c:127 msgid "compound" msgstr "złożony" #: src/ydpdict.c:128 msgid "dative" msgstr "celownik" #: src/ydpdict.c:129 msgid "definite" msgstr "określony" #: src/ydpdict.c:130 msgid "declined" msgstr "odmieniany" #: src/ydpdict.c:131 msgid "diminutive" msgstr "zdrobnienie" #: src/ydpdict.c:132 msgid "exclamation" msgstr "wykrzyknik" #: src/ydpdict.c:133 msgid "feminine" msgstr "rodzaj żeński" #: src/ydpdict.c:134 msgid "figurative" msgstr "przenośny" #: src/ydpdict.c:135 msgid "formal" msgstr "oficjalny" #: src/ydpdict.c:136 msgid "fused" msgstr "złożony" #: src/ydpdict.c:137 msgid "genitive" msgstr "dopełniacz" #: src/ydpdict.c:138 src/ydpdict.c:139 msgid "imperfective" msgstr "niedokonany" #: src/ydpdict.c:140 msgid "impersonal" msgstr "bezosobowy" #: src/ydpdict.c:141 msgid "indefinite" msgstr "nieokreślony" #: src/ydpdict.c:142 src/ydpdict.c:166 msgid "informal" msgstr "potoczny" #: src/ydpdict.c:143 msgid "infinitive" msgstr "bezokolicznik" #: src/ydpdict.c:144 msgid "instrumental" msgstr "narzędnik" #: src/ydpdict.c:145 msgid "invariable" msgstr "nieodmienny" #: src/ydpdict.c:146 msgid "irregular" msgstr "nieregularny" #: src/ydpdict.c:147 src/ydpdict.c:148 msgid "literary" msgstr "książkowy" #: src/ydpdict.c:149 msgid "locative" msgstr "miejscownik" #: src/ydpdict.c:150 msgid "masculine" msgstr "rodzaj męski" #: src/ydpdict.c:151 msgid "modal" msgstr "modalny" #: src/ydpdict.c:152 msgid "noun" msgstr "rzeczownik" #: src/ydpdict.c:153 msgid "nominative" msgstr "mianownik" #: src/ydpdict.c:154 msgid "noun plural" msgstr "rzeczownik mnogi" #: src/ydpdict.c:155 msgid "neuter" msgstr "rodzaj nijaki" #: src/ydpdict.c:156 msgid "numeral" msgstr "liczebnik" #: src/ydpdict.c:157 msgid "non-virile gender" msgstr "rodzaj niemęskoosobowy" #: src/ydpdict.c:158 msgid "old" msgstr "dawny" #: src/ydpdict.c:159 msgid "particle" msgstr "partykuła" #: src/ydpdict.c:160 msgid "pejorative" msgstr "pejoratywny" #: src/ydpdict.c:161 msgid "perfective" msgstr "dokonany" #: src/ydpdict.c:162 msgid "plural" msgstr "liczba mnoga" #: src/ydpdict.c:163 msgid "polite" msgstr "uprzejmy" #: src/ydpdict.c:164 msgid "possesive" msgstr "dzierżawczy" #: src/ydpdict.c:165 msgid "postposition" msgstr "postpozycja" #: src/ydpdict.c:167 msgid "past participle" msgstr "imiesłów bierny" #: src/ydpdict.c:168 msgid "prefix" msgstr "przedrostek" #: src/ydpdict.c:169 msgid "predicate" msgstr "orzeczenie" #: src/ydpdict.c:170 msgid "preposition" msgstr "przyimek" #: src/ydpdict.c:171 msgid "pronoun" msgstr "zaimek" #: src/ydpdict.c:172 msgid "past simple" msgstr "czas przeszły prosty" #: src/ydpdict.c:173 msgid "singular" msgstr "liczba pojedyncza" #: src/ydpdict.c:174 msgid "suffix" msgstr "przyrostek" #: src/ydpdict.c:175 msgid "superlative degree" msgstr "stopień najwyższy" #: src/ydpdict.c:176 msgid "verb" msgstr "czasownik" #: src/ydpdict.c:177 msgid "intransitive verb" msgstr "czasownik nieprzechodni" #: src/ydpdict.c:178 msgid "virile gender" msgstr "rodzaj męskoosobowy" #: src/ydpdict.c:179 msgid "vocative" msgstr "wołacz" #: src/ydpdict.c:180 msgid "reflexive verb" msgstr "czasownik zwrotny" #: src/ydpdict.c:181 msgid "transitive verb" msgstr "czasownik przechodni" #: src/ydpdict.c:190 msgid "{\\cf2 F1} or {\\cf2 ?} - this help" msgstr "{\\cf2 F1} lub {\\cf2 ?} - wyświetl pomoc" #: src/ydpdict.c:191 msgid "{\\line{\\cf2 Tab} - change focus}" msgstr "{\\line{\\cf2 Tab} - przełącz panel}" #: src/ydpdict.c:192 msgid "{\\line{\\cf2 Up} and {\\cf2 Down} - scroll up and down}" msgstr "{\\line{\\cf2 Up} i {\\cf2 Down} - przewiń w górę i w dół}" #: src/ydpdict.c:193 msgid "{\\line{\\cf2 Page Up} and {\\cf2 Page Down} - scroll page up and down}" msgstr "{\\line{\\cf2 Page Up} i {\\cf2 Page Down} - przewiń stronę}" #: src/ydpdict.c:194 msgid "{\\line{\\cf2 F2} or {\\cf2 `} - play pronunciation sample}" msgstr "{\\line{\\cf2 F2} lub {\\cf2 `} - odtwórz próbkę wymowy}" #: src/ydpdict.c:195 msgid "{\\line{\\cf2 F3} or {\\cf2 <} - English-Polish dictionary}" msgstr "{\\line{\\cf2 F3} lub {\\cf2 <} - słownik angielsko-polski}" #: src/ydpdict.c:196 msgid "{\\line{\\cf2 F4} or {\\cf2 >} - Polish-English dictionary}" msgstr "{\\line{\\cf2 F4} lub {\\cf2 >} - słownik polsko-angielski}" #: src/ydpdict.c:197 msgid "{\\line{\\cf2 F5} or {\\cf2 [} - German-Polish dictionary}" msgstr "{\\line{\\cf2 F5} lub {\\cf2 [} - słownik niemiecko-polski}" #: src/ydpdict.c:198 msgid "{\\line{\\cf2 F6} or {\\cf2 ]} - Polish-German dictionary}" msgstr "{\\line{\\cf2 F6} lub {\\cf2 ]} - słownik polsko-niemiecki}" #: src/ydpdict.c:199 msgid "{\\line{\\cf2 F7} or {\\cf2 !} - grammatical qualifiers}" msgstr "{\\line{\\cf2 F7} lub {\\cf2 !} - kwalifikatory gramatyczne}" #: src/ydpdict.c:200 msgid "{\\line{\\cf2 Esc} - go back}" msgstr "{\\line{\\cf2 Esc} - cofnij}" #: src/ydpdict.c:201 msgid "{\\line{\\cf2 Ctrl-U} or {\\cf2 Ctrl-W} - clear input field}" msgstr "{\\line{\\cf2 Ctrl-U} lub {\\cf2 Ctrl-W} - wyczyść pole tekstowe}" #: src/ydpdict.c:202 msgid "{\\line{\\cf2 Ctrl-L} - refresh display}" msgstr "{\\line{\\cf2 Ctrl-L} - odśwież ekran}" #: src/ydpdict.c:203 msgid "{\\line{\\cf2 Ctrl-C} or {\\cf2 Ctrl-X} - quit program}" msgstr "{\\line{\\cf2 Ctrl-C} lub {\\cf2 Ctrl-X} - zakończ program}" #: src/ydpdict.c:206 #, c-format msgid "" "{\\par\\pard}Contact: {\\b %s}. Current version is always available at {\\b " "%s}" msgstr "" "{\\par\\pard}Kontakt: {\\b %s}. Aktualna wersja dostępna pod adresem {\\b %s}" #: src/ydpdict.c:713 msgid "Please wait, loading the dictionary..." msgstr "Proszę czekać, trwa ładowanie..." #: src/ydpdict.c:739 msgid "Invalid file format" msgstr "Niepoprawny format pliku" #: src/ydpdict.c:743 #, c-format msgid "" "{\\cf2 Error!}\\par\\pard{Unable to open dictionary: %s. Press {\\cf2 F1} or " "{\\cf2 ?} for help.}" msgstr "" "{\\cf2 Błąd!}\\par\\pard{Nie można otworzyć słownika: %s. Pomoc dostępna pod " "klawiszami {\\cf2 F1} lub {\\cf2 ?}.}" ydpdict-1.0.5/po/quot.sed000066400000000000000000000002311454113125300152530ustar00rootroot00000000000000s/"\([^"]*\)"/“\1”/g s/`\([^`']*\)'/‘\1’/g s/ '\([^`']*\)' / ‘\1’ /g s/ '\([^`']*\)'$/ ‘\1’/g s/^'\([^`']*\)' /‘\1’ /g s/“”/""/g ydpdict-1.0.5/po/remove-potcdate.sed000066400000000000000000000000721454113125300173640ustar00rootroot00000000000000/^"POT-Creation-Date: .*"$/{ x s/P/P/ ta g d bb :a x :b } ydpdict-1.0.5/po/remove-potcdate.sin000066400000000000000000000013201454113125300173770ustar00rootroot00000000000000# Sed script that removes the POT-Creation-Date line in the header entry # from a POT file. # # Copyright (C) 2002 Free Software Foundation, Inc. # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # # The distinction between the first and the following occurrences of the # pattern is achieved by looking at the hold space. /^"POT-Creation-Date: .*"$/{ x # Test if the hold space is empty. s/P/P/ ta # Yes it was empty. First occurrence. Remove the line. g d bb :a # The hold space was nonempty. Following occurrences. Do nothing. x :b } ydpdict-1.0.5/src/000077500000000000000000000000001454113125300137435ustar00rootroot00000000000000ydpdict-1.0.5/src/Makefile.am000066400000000000000000000004751454113125300160050ustar00rootroot00000000000000bin_PROGRAMS = ydpdict ydpdict_SOURCES = ydpconfig.c ydpconfig.h ydpsound.c ydpsound.h ydpdict.c xmalloc.c xmalloc.h adpcm.c adpcm.h ydpdict_CFLAGS = -Wall @CFLAGS@ @YDPDICT_CFLAGS@ @AO_CFLAGS@ -DSYSCONFDIR=\"@sysconfdir@\" -DLOCALEDIR=\"$(localedir)\" ydpdict_LDADD = -lm @LIBS@ @YDPDICT_LIBS@ @AO_LIBS@ @LTLIBINTL@ ydpdict-1.0.5/src/adpcm.c000066400000000000000000000351431454113125300152010ustar00rootroot00000000000000/* * adpcm.c codex functions for MS_ADPCM data * (hopefully) provides interoperability with * Microsoft's ADPCM format, but, as usual, * see LACK-OF-WARRANTY information below. * * Copyright (C) 1999 Stanley J. Brooks * * 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 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. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ /* * November 22, 1999 * specs I've seen are unclear about ADPCM supporting more than 2 channels, * but these routines support more channels in a manner which looks (IMHO) * like the most natural extension. * * Remark: code still turbulent, encoding very new. * */ /* * 2020-08-05: Changed inline to static inline functions to fix build with * recent GCC versions. * * 2020-08-08: Removed unused variables. */ #include #include #include // Modifications by Wojtek Kaniewski below: //#include "stconfig.h" // End of modifications #include "adpcm.h" typedef struct MsState { st_sample_t step; /* step size */ short iCoef[2]; } MsState_t; #define lsbshortldi(x,p) { (x)=((short)((int)(p)[0] + ((int)(p)[1]<<8))); (p) += 2; } /* * Lookup tables for MS ADPCM format */ /* these are step-size adjust factors, where * 1.0 is scaled to 0x100 */ static const st_sample_t stepAdjustTable[] = { 230, 230, 230, 230, 307, 409, 512, 614, 768, 614, 512, 409, 307, 230, 230, 230 }; /* TODO : The first 7 iCoef sets are always hardcoded and must appear in the actual WAVE file. They should be read in in case a sound program added extras to the list. */ const short iCoef[7][2] = { { 256, 0}, { 512,-256}, { 0, 0}, { 192, 64}, { 240, 0}, { 460,-208}, { 392,-232} }; static inline st_sample_t AdpcmDecode(st_sample_t c, MsState_t *state, st_sample_t sample1, st_sample_t sample2) { st_sample_t vlin; st_sample_t sample; st_sample_t step; /** Compute next step value **/ step = state->step; { st_sample_t nstep; nstep = (stepAdjustTable[c] * step) >> 8; state->step = (nstep < 16)? 16:nstep; } /** make linear prediction for next sample **/ vlin = ((sample1 * state->iCoef[0]) + (sample2 * state->iCoef[1])) >> 8; /** then add the code*step adjustment **/ c -= (c & 0x08) << 1; sample = (c * step) + vlin; if (sample > 0x7fff) sample = 0x7fff; else if (sample < -0x8000) sample = -0x8000; return (sample); } /* AdpcmBlockExpandI() outputs interleaved samples into one output buffer */ const char *AdpcmBlockExpandI( int chans, /* total channels */ int nCoef, const short *iCoef, const unsigned char *ibuff,/* input buffer[blockAlign] */ SAMPL *obuff, /* output samples, n*chans */ int n /* samples to decode PER channel */ ) { const unsigned char *ip; int ch; const char *errmsg = NULL; MsState_t state[4]; /* One decompressor state for each channel */ /* Read the four-byte header for each channel */ ip = ibuff; for (ch = 0; ch < chans; ch++) { unsigned char bpred = *ip++; if (bpred >= nCoef) { errmsg = "MSADPCM bpred >= nCoef, arbitrarily using 0\n"; bpred = 0; } state[ch].iCoef[0] = iCoef[(int)bpred*2+0]; state[ch].iCoef[1] = iCoef[(int)bpred*2+1]; } for (ch = 0; ch < chans; ch++) lsbshortldi(state[ch].step, ip); /* sample1's directly into obuff */ for (ch = 0; ch < chans; ch++) lsbshortldi(obuff[chans+ch], ip); /* sample2's directly into obuff */ for (ch = 0; ch < chans; ch++) lsbshortldi(obuff[ch], ip); { int ch; unsigned char b; short *op, *top, *tmp; /* already have 1st 2 samples from block-header */ op = obuff + 2*chans; top = obuff + n*chans; ch = 0; while (op < top) { b = *ip++; tmp = op; *op++ = AdpcmDecode(b >> 4, state+ch, tmp[-chans], tmp[-2*chans]); if (++ch == chans) ch = 0; /* ch = ++ch % chans; */ tmp = op; *op++ = AdpcmDecode(b&0x0f, state+ch, tmp[-chans], tmp[-2*chans]); if (++ch == chans) ch = 0; /* ch = ++ch % chans; */ } } return errmsg; } static int AdpcmMashS( int ch, /* channel number to encode, REQUIRE 0 <= ch < chans */ int chans, /* total channels */ SAMPL v[2], /* values to use as starting 2 */ const short iCoef[2],/* lin predictor coeffs */ const SAMPL *ibuff, /* ibuff[] is interleaved input samples */ int n, /* samples to encode PER channel */ int *iostep, /* input/output step, REQUIRE 16 <= *st <= 0x7fff */ unsigned char *obuff, /* output buffer[blockAlign], or NULL for no output */ int sho /* nonzero for debug printout */ ) { const SAMPL *ip, *itop; unsigned char *op; int ox = 0; /* */ int d, v0, v1, step; double d2; /* long long is okay also, speed abt the same */ ip = ibuff + ch; /* point ip to 1st input sample for this channel */ itop = ibuff + n*chans; v0 = v[0]; v1 = v[1]; d = *ip - v1; ip += chans; /* 1st input sample for this channel */ d2 = d*d; /* d2 will be sum of squares of errors, given input v0 and *st */ d = *ip - v0; ip += chans; /* 2nd input sample for this channel */ d2 += d*d; step = *iostep; op = obuff; /* output pointer (or NULL) */ if (op) { /* NULL means don't output, just compute the rms error */ op += chans; /* skip bpred indices */ op += 2*ch; /* channel's stepsize */ op[0] = step; op[1] = step>>8; op += 2*chans; /* skip to v0 */ op[0] = v0; op[1] = v0>>8; op += 2*chans; /* skip to v1 */ op[0] = v1; op[1] = v1>>8; op = obuff+7*chans; /* point to base of output nibbles */ ox = 4*ch; } for (; ip < itop; ip+=chans) { int vlin,d,dp,c; /* make linear prediction for next sample */ vlin = (v0 * iCoef[0] + v1 * iCoef[1]) >> 8; d = *ip - vlin; /* difference between linear prediction and current sample */ dp = d + (step<<3) + (step>>1); c = 0; if (dp>0) { c = dp/step; if (c>15) c = 15; } c -= 8; dp = c * step; /* quantized estimate of samp - vlin */ c &= 0x0f; /* mask to 4 bits */ v1 = v0; /* shift history */ v0 = vlin + dp; if (v0<-0x8000) v0 = -0x8000; else if (v0>0x7fff) v0 = 0x7fff; d = *ip - v0; d2 += d*d; /* update square-error */ if (op) { /* if we want output, put it in proper place */ /* FIXME: does c<<0 work properly? */ op[ox>>3] |= (ox&4)? c:(c<<4); ox += 4*chans; /* if (sho) fprintf(stderr,"%.1x",c); */ } /* Update the step for the next sample */ step = (stepAdjustTable[c] * step) >> 8; if (step < 16) step = 16; } /* if (sho && op) fprintf(stderr,"\n");*/ d2 /= n; /* be sure it's non-negative */ #ifdef DEBUG if (sho) { fprintf(stderr, "ch%d: st %d->%d, d %.1f\n", ch, *iostep, step, sqrt(d2)); fflush(stderr); } #endif *iostep = step; return (int) sqrt(d2); } #if 0 static long AvgDelta(int ch, int chans, const SAMPL *ibuff, int n) { const SAMPL *ip, *itop; long v0; long d1; ip = ibuff + ch; itop = ip + n*chans; d1 = 0; v0 = *ip; ip += chans; for ( ; ip < itop; ip+=chans) { long v1; v1 = *ip; d1 = abs(v1-v0); v0 = v1; } return (d1/(n-1)); } static long ReAvgDelta(int ch, int chans, const SAMPL *ibuff, int n, int step) { const SAMPL *ip, *itop; long v0; long d1; ip = ibuff + ch; itop = ip + n*chans; d1 = 0; v0 = *ip; ip += chans; for ( ; ip < itop; ip+=chans) { long v1, c; v1 = *ip; c = abs(v1-v0); if (step && c>2*step) c=2*step; d1 += c; v0 = v1; } return (d1/(n-1)); } #endif static inline void AdpcmMashChannel( int ch, /* channel number to encode, REQUIRE 0 <= ch < chans */ int chans, /* total channels */ const SAMPL *ip, /* ip[] is interleaved input samples */ int n, /* samples to encode PER channel, REQUIRE */ int *st, /* input/output steps, 16<=st[i] */ unsigned char *obuff, /* output buffer[blockAlign] */ int opt /* non-zero allows some cpu-intensive code to improve output */ ) { SAMPL v[2]; int n0,s0,s1,ss,smin; int dmin,k,kmin; n0 = n/2; if (n0>32) n0=32; #if 0 s0=ReAvgDelta(ch, chans, ip, n, 0); s1=ReAvgDelta(ch, chans, ip, n, s0); fprintf(stderr, "ReAvg%d: %d->%d (%d)\n", ch, s0,s1,*st); fflush(stderr); #endif if (*st<16) *st = 16; v[1] = ip[ch]; v[0] = ip[ch+chans]; dmin = 0; kmin = 0; smin = 0; /* for each of 7 standard coeff sets, we try compression * beginning with last step-value, and with slightly * forward-adjusted step-value, taking best of the 14 */ for (k=0; k<7; k++) { int d0,d1; ss = s0 = *st; d0=AdpcmMashS(ch, chans, v, iCoef[k], ip, n, &ss, NULL, 0); /* with step s0 */ s1 = s0; AdpcmMashS(ch, chans, v, iCoef[k], ip, n0, &s1, NULL, 0); /* fprintf(stderr," s32 %d\n",s1); */ ss = s1 = (3*s0+s1)/4; d1=AdpcmMashS(ch, chans, v, iCoef[k], ip, n, &ss, NULL, 0); /* with step s1 */ if (!k || d0= 7*chans + chans*(n-2)/2.0 */ int opt /* non-zero allows some cpu-intensive code to improve output */ ) { int ch; unsigned char *p; /*fprintf(stderr,"AdpcmMashI(chans %d, ip %p, n %d, st %p, obuff %p, bA %d)\n", chans, ip, n, st, obuff, blockAlign);*/ for (p=obuff+7*chans; p= 7*chans) { m -= 7*chans; /* bytes beyond block-header */ m = (2*m)/chans + 2; /* nibbles/chans + 2 in header */ if (samplesPerBlock && m > samplesPerBlock) m = samplesPerBlock; n += m; } return n; /* wSamplesPerBlock = 2*(wBlockAlign - 7*wChannels)/wChannels + 2; */ } st_size_t AdpcmBytesPerBlock( unsigned short chans, unsigned short samplesPerBlock ) { st_size_t n; n = 7*chans; /* header */ if (samplesPerBlock > 2) n += (((st_size_t)samplesPerBlock-2)*chans + 1)/2; return n; } ydpdict-1.0.5/src/adpcm.h000066400000000000000000000037461454113125300152120ustar00rootroot00000000000000/* * adpcm.h */ // Modifications by Wojtek Kaniewski below: //#include "st.h" #include typedef int32_t st_sample_t; typedef uint32_t st_size_t; typedef int32_t st_ssize_t; typedef uint32_t st_rate_t; // End of modifications #ifndef SAMPL #define SAMPL short #endif /* default coef sets */ extern const short iCoef[7][2]; /* AdpcmBlockExpandI() outputs interleaved samples into one output buffer */ extern const char *AdpcmBlockExpandI( int chans, /* total channels */ int nCoef, const short *iCoef, const unsigned char *ibuff,/* input buffer[blockAlign] */ SAMPL *obuff, /* output samples, n*chans */ int n /* samples to decode PER channel, REQUIRE n % 8 == 1 */ ); extern void AdpcmBlockMashI( int chans, /* total channels */ const SAMPL *ip, /* ip[n*chans] is interleaved input samples */ int n, /* samples to encode PER channel, REQUIRE */ int *st, /* input/output steps, 16<=st[i] */ unsigned char *obuff, /* output buffer[blockAlign] */ int blockAlign, /* >= 7*chans + n/2 */ int opt /* non-zero allows some cpu-intensive code to improve output */ ); /* Some helper functions for computing samples/block and blockalign */ /* * AdpcmSamplesIn(dataLen, chans, blockAlign, samplesPerBlock) * returns the number of samples/channel which would be * in the dataLen, given the other parameters ... * if input samplesPerBlock is 0, then returns the max * samplesPerBlock which would go into a block of size blockAlign * Yes, it is confusing usage. */ extern st_size_t AdpcmSamplesIn( st_size_t dataLen, unsigned short chans, unsigned short blockAlign, unsigned short samplesPerBlock ); /* * st_size_t AdpcmBytesPerBlock(chans, samplesPerBlock) * return minimum blocksize which would be required * to encode number of chans with given samplesPerBlock */ extern st_size_t AdpcmBytesPerBlock( unsigned short chans, unsigned short samplesPerBlock ); ydpdict-1.0.5/src/config.h.in000066400000000000000000000001161454113125300157640ustar00rootroot00000000000000#undef WORDS_BIGENDIAN #undef HAVE_LINUX_SOUNDCARD_H #undef HAVE_GETOPT_LONG ydpdict-1.0.5/src/xmalloc.c000066400000000000000000000043211454113125300155460ustar00rootroot00000000000000/* * ydpdict * (C) Copyright 2001-2007 Wojtek Kaniewski * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License Version 2 as * published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #include #include #include #include #ifdef ENABLE_NLS #include #define _(x) gettext(x) #else #define _(x) x #endif extern int show_error(const char *msg); /** * \bried calloc() with error handling * * \param nmemb member count * \param size member size * * \return Allocated buffer */ void *xcalloc(size_t nmemb, size_t size) { void *tmp = calloc(nmemb, size); if (!tmp) show_error(_("Out of memory")); return tmp; } /** * \bried malloc() with error handling and zeroing * * \param size buffer size * * \return Allocated buffer */ void *xmalloc(size_t size) { void *tmp = malloc(size); if (!tmp) show_error(_("Out of memory")); memset(tmp, 0, size); return tmp; } /** * \brief free() with error handling * * \param ptr pointer to be freed */ void xfree(void *ptr) { if (ptr) free(ptr); } /** * \brief realloc() with error handling * * \param ptr pointer to be reallocated * \param size new size * * \return Allocated buffer */ void *xrealloc(void *ptr, size_t size) { void *tmp = realloc(ptr, size); if (!tmp) show_error(_("Out of memory")); return tmp; } /** * \brief strdup() with error handling * * \param s string to be duplicated * * \return Allocated buffer */ char *xstrdup(const char *s) { char *tmp; if (!s) return NULL; if (!(tmp = strdup(s))) show_error(_("Out of memory")); return tmp; } ydpdict-1.0.5/src/xmalloc.h000066400000000000000000000017331454113125300155570ustar00rootroot00000000000000/* * ydpdict * (C) Copyright 2001-2007 Wojtek Kaniewski * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License Version 2 as * published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifndef __XMALLOC_H #define __XMALLOC_H #include void *xcalloc(size_t nmemb, size_t size); void *xmalloc(size_t size); void xfree(void *ptr); void *xrealloc(void *ptr, size_t size); char *xstrdup(const char *s); #endif /* __XMALLOC_H */ ydpdict-1.0.5/src/ydpconfig.c000066400000000000000000000172231454113125300160760ustar00rootroot00000000000000/* * ydpdict * (C) Copyright 1998-2023 Wojtek Kaniewski * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #define _XOPEN_SOURCE_EXTENDED #ifdef HAVE_NCURSESW_NCURSES_H # include #else # ifdef HAVE_CURSES_H # include # endif #endif #include #ifdef HAVE_GETOPT_LONG #include #endif #include #include #include #include #include "ydpconfig.h" #include "xmalloc.h" #ifdef ENABLE_NLS #include #define _(x) gettext(x) #else #define _(x) x #endif char *config_path = NULL; char *config_cdpath = NULL; char *config_player = NULL; char *config_word = NULL; char *config_audio = NULL; int config_dict = 0; int config_color = 1; int config_transparent = 0; int config_text = COLOR_WHITE; int config_cf1 = COLOR_CYAN | A_BOLD; int config_cf2 = COLOR_GREEN | A_BOLD; #ifdef HAVE_GETOPT_LONG static struct option const longopts[] = { { "help", no_argument, 0, 'h' }, { "version", no_argument, 0, 'V' }, { "eng", no_argument, 0, 'e' }, { "pol", no_argument, 0, 'p' }, { "pol-ger", no_argument, 0, 'o' }, { "ger-pol", no_argument, 0, 'g' }, { "path", required_argument, 0, 'f' }, { "cdpath", required_argument, 0, 'c' }, { "player", required_argument, 0, 'P' }, { "word", required_argument, 0, 'w'}, { "audio", required_argument, 0, 'A'}, { 0, 0, 0, 0 } }; #endif /* HAVE_GETOPT_LONG */ /** * \brief Prints usage instructions * * \param argv0 argv[0] from main() */ void usage(const char *argv0) { printf(_( "Usage: %s [OPTIONS]\n" " -e, --eng start with English-Polish dictionary (default)\n" " -p, --pol start with Polish-English dictionary\n" " -g, --ger-pol start with German-Polish dictionary\n" " -o, --pol-ger start with Polish-German dictionary\n" " -f, --path=PATH set database path\n" " -c, --cdpath=PATH set CD-ROM path\n" " -P, --player=PATH set sound player path\n" " -w, --word=WORD start with selected WORD's definition\n" " -A, --audio=DEVICE set default audio device\n" " -V, --version print program version\n" " -h, --help print this message\n" "\n"), argv0); } enum config_entry_type { ENTRY_COLOR = 1, ENTRY_BOOL, ENTRY_STRING, ENTRY_INT }; struct config_entry { int type; const char *label; void *ptr; } entries[] = { { ENTRY_COLOR, "Color", &config_text }, { ENTRY_COLOR, "DefinitionColor", &config_cf1 }, { ENTRY_COLOR, "InformationColor", &config_cf2 }, { ENTRY_BOOL, "UseColor", &config_color }, { ENTRY_STRING, "Path", &config_path }, { ENTRY_STRING, "CDPath", &config_cdpath }, { ENTRY_STRING, "Player", &config_player }, { ENTRY_STRING, "AudioDevice", &config_audio }, { ENTRY_INT, "DefaultDictionary", &config_dict }, { ENTRY_BOOL, "UseTransparent", &config_transparent }, { 0, NULL, NULL } }; struct color_entry { const char *name; int value; } colors[] = { { "Black", COLOR_BLACK }, { "Red", COLOR_RED }, { "Greed", COLOR_GREEN }, { "Brown", COLOR_YELLOW }, { "Blue", COLOR_BLUE }, { "Magenta", COLOR_MAGENTA }, { "Cyan", COLOR_CYAN }, { "White", COLOR_WHITE }, { "Gray", COLOR_WHITE | A_DIM }, { "LightRed", COLOR_RED }, { "LightGreed", COLOR_GREEN | A_BOLD }, { "Yellow", COLOR_YELLOW | A_BOLD }, { "LightBlue", COLOR_BLUE | A_BOLD }, { "LightMagenta", COLOR_MAGENTA | A_BOLD }, { "LightCyan", COLOR_CYAN | A_BOLD }, { "LightWhite", COLOR_WHITE | A_BOLD }, { NULL, 0 } }; /** * \brief Reads configuration from file, then handles program arguments * * \param argc argc passed from main() * \param argv argv passed from main() * * \return 0 on success, -1 on failure */ int read_config(int argc, char **argv) { char buf[4096], *home, *xdg_config_dir; int line = 0, optc; FILE *f = NULL; /* Check if any of the config files exist */ xdg_config_dir = getenv("XDG_CONFIG_HOME"); if (xdg_config_dir) { snprintf(buf, sizeof(buf), "%s/%s", xdg_config_dir, CONFIGFILE_CWD1); f = fopen(buf, "r"); } home = getenv("HOME"); if (home) { if (!f) { snprintf(buf, sizeof(buf), "%s/.config/%s", home, CONFIGFILE_CWD1); f = fopen(buf, "r"); } if (!f) { snprintf(buf, sizeof(buf), "%s/%s", home, CONFIGFILE_CWD1); f = fopen(buf, "r"); } if (!f) { snprintf(buf, sizeof(buf), "%s/%s", home, CONFIGFILE_CWD2); f = fopen(buf, "r"); } } if (!f) f = fopen(CONFIGFILE_GLOBAL, "r"); if (!f) return -1; /* Parse every line */ while (fgets(buf, sizeof(buf), f)) { int len, i; line++; len = strlen(buf); if (len && buf[len - 1] == '\n') buf[--len] = 0; if (len && buf[len - 1] == '\r') buf[--len] = 0; if (!len || buf[0] == '#') continue; for (i = 0; entries[i].label; i++) { const char *value; len = strlen(entries[i].label); if (strncasecmp(buf, entries[i].label, len) || !buf[len]) continue; value = buf + len + 1; switch (entries[i].type) { case ENTRY_COLOR: { int j; for (j = 0; colors[j].name; j++) { if (!strcasecmp(value, colors[j].name)) *(int*)(entries[i].ptr) = colors[j].value; } break; } case ENTRY_BOOL: if (!strncasecmp(value, "on", 2)) *(int*)(entries[i].ptr) = 1; if (!strncasecmp(value, "off", 2)) *(int*)(entries[i].ptr) = 0; break; case ENTRY_STRING: if (*(char**)(entries[i].ptr)) xfree(*(char**)entries[i].ptr); *(char**)(entries[i].ptr) = xstrdup(value); break; case ENTRY_INT: *(int*)(entries[i].ptr) = atoi(value); break; } break; } if (!entries[i].label) { fprintf(stderr, _("Error in config file, line %d: %s\n"), line, buf); exit(1); } } fclose(f); #ifdef HAVE_GETOPT_LONG while ((optc = getopt_long(argc, argv, "hvVpeogf:c:w:A:", longopts, (int*) 0)) != -1) { #else while ((optc = getopt(argc, argv, "hvVpeogf:c:w:A:")) != -1) { #endif switch(optc) { case 'h': usage(argv[0]); exit(0); case 'v': case 'V': printf("ydpdict-" VERSION "\n"); exit(0); case 'e': config_dict = 0; break; case 'p': config_dict = 1; break; case 'g': config_dict = 2; break; case 'o': config_dict = 3; break; case 'f': if (config_path) xfree(config_path); config_path = xstrdup(optarg); break; case 'c': if (config_cdpath) xfree(config_cdpath); config_cdpath = xstrdup(optarg); break; case 'P': if (config_path) xfree(config_path); config_path = xstrdup(optarg); break; case 'w': if (config_word) xfree(config_word); config_word = xstrdup(optarg); break; case 'A': if (config_audio) xfree(config_audio); config_audio = xstrdup(optarg); break; default: usage(argv[0]); exit(1); } } if (!config_path) config_path = xstrdup(DEFAULT_PATH); if (!config_cdpath) config_cdpath = xstrdup(DEFAULT_CDPATH); #ifdef DEFAULT_AUDIO if (!config_audio) config_audio = xstrdup(DEFAULT_AUDIO); #endif return 0; } ydpdict-1.0.5/src/ydpconfig.h000066400000000000000000000037451454113125300161070ustar00rootroot00000000000000/* * ydpdict * (C) Copyright 1998-2023 Wojtek Kaniewski * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifndef __YDPCONFIG_H #define __YDPCONFIG_H #ifdef HAVE_CONFIG_H #include "config.h" #endif #define HEADER_NAME "ydpdict-" VERSION #define HEADER_COPYRIGHT "(C) Copyright 1998-2023 Wojtek Kaniewski" #define HELP_EMAIL "wojtekka@toxygen.net" #define HELP_WEBSITE "http://toxygen.net/ydpdict/" #define CONFIGFILE_GLOBAL SYSCONFDIR "/ydpdict.conf" #define CONFIGFILE_CWD1 "ydpdict.conf" #define CONFIGFILE_CWD2 ".ydpdictrc" #define DEFAULT_PATH "." #define DEFAULT_CDPATH "/media/cdrom" #ifndef HAVE_LIBAO #define DEFAULT_AUDIO "/dev/dsp" #endif #define DEFAULT_DAT_AP "dict100.dat" #define DEFAULT_IDX_AP "dict100.idx" #define DEFAULT_DAT_PA "dict101.dat" #define DEFAULT_IDX_PA "dict101.idx" #define DEFAULT_DAT_DP "dict200.dat" #define DEFAULT_IDX_DP "dict200.idx" #define DEFAULT_DAT_PD "dict201.dat" #define DEFAULT_IDX_PD "dict201.idx" #define INPUT_LEN 17 extern char *config_path; extern char *config_cdpath; extern char *config_player; extern char *config_word; extern char *config_audio; extern int config_dict; extern int config_color; extern int config_transparent; extern int config_text; extern int config_cf1; extern int config_cf2; int read_config(int argc, char **argv); #endif /* __YDPCONFIG_H */ ydpdict-1.0.5/src/ydpdict.c000066400000000000000000000673311454113125300155610ustar00rootroot00000000000000/* * ydpdict * (C) Copyright 1998-2023 Wojtek Kaniewski * Piotr Domagalski * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #include #include #define _XOPEN_SOURCE_EXTENDED #ifdef HAVE_NCURSESW_NCURSES_H # include #else # ifdef HAVE_CURSES_H # include # endif #endif #include #include #include #include #include #include #include #include #include #include #ifdef ENABLE_NLS #include #include #define _(x) gettext(x) #else #define _(x) x #endif #define N_(x) x #ifdef HAVE_LIBAO #include #endif #include "ydpconfig.h" #include "ydpsound.h" #include "xmalloc.h" #if defined(YDPDICT_VERSION) && defined(YDPDICT_MAKE_VERSION) #if YDPDICT_VERSION >= YDPDICT_MAKE_VERSION(1,0,3) #define YDPDICT_HAS_SUPERSCRIPT #endif #endif #ifndef COLOR_DEFAULT #define COLOR_DEFAULT (-1) #endif ydpdict_t *dict; ///< Dictionary handle int word_count; ///< Dictionary word count wchar_t input[INPUT_LEN + 1]; ///< Input word int input_index; ///< Input word cursor index int input_exact = 1; ///< Input word Exact match flag int list_index; ///< Word list scroll line index int list_page; ///< Word list scroll page int focus; ///< Current focus (0 - word list, 1 - word definition, 2 - help screen) int saved_focus; ///< focus stored while showing help etc. char *def; ///< Current definition int def_encoding; ///< Definition encoding int def_index; ///< Definition scroll line index int def_saved_index; ///< def_index stored while showing help etc. int def_height; ///< Definition height in lines int def_update; ///< Definition update flag int def_raw_rtf; ///< Display raw RTF flag int screen_width; ///< Screen width int screen_height; ///< Screen height int resized_term; ///< Terminal resize flag WINDOW *window_word; ///< Wordlist window WINDOW *window_def; ///< Definition window WINDOW *window_sep; ///< Separator window WINDOW *window_arrows; ///< Arrows window #define ATTR_HIDE 0x10000 ///< Private attribute to indicate hidden text #define ATTR_SUPER 0x20000 ///< Private attribute to indicate superscript #define ATTR_MASK 0x30000 int color_text; int color_cf1; int color_cf2; const char *qualifiers_header = N_("{\\b Grammatical qualifiers}{\\par\\pard}"); const char *qualifiers[][2] = { { "abbr", N_("abbreviation") }, { "acc", N_("accusative") }, { "adj", N_("adjective") }, { "adv", N_("adverb") }, { "art", N_("article") }, { "attr", N_("attribute") }, { "aux", N_("auxiliary") }, { "comp", N_("comparative degree") }, { "compl.", N_("complement") }, { "conj", N_("conjunction") }, { "cpd", N_("compound") }, { "dat", N_("dative") }, { "def", N_("definite") }, { "decl", N_("declined") }, { "dimin", N_("diminutive") }, { "excl", N_("exclamation") }, { "f", N_("feminine") }, { "fig", N_("figurative") }, { "fml", N_("formal") }, { "fus", N_("fused") }, { "gen", N_("genitive") }, { "imp", N_("imperfective") }, { "imperf", N_("imperfective") }, { "impers", N_("impersonal") }, { "indef", N_("indefinite") }, { "inf", N_("informal") }, { "infin", N_("infinitive") }, { "instr", N_("instrumental") }, { "inv", N_("invariable") }, { "irreg", N_("irregular") }, { "ksi", N_("literary") }, { "liter.", N_("literary") }, { "loc", N_("locative") }, { "m", N_("masculine") }, { "modal", N_("modal") }, { "n", N_("noun") }, { "nom", N_("nominative") }, { "npl", N_("noun plural") }, { "nt", N_("neuter") }, { "num", N_("numeral") }, { "nvir", N_("non-virile gender") }, { "old", N_("old") }, { "part", N_("particle") }, { "pej", N_("pejorative") }, { "perf", N_("perfective") }, { "pl", N_("plural") }, { "polite", N_("polite") }, { "poss.", N_("possesive") }, { "post", N_("postposition") }, { "pot", N_("informal") }, { "pp", N_("past participle") }, { "pref", N_("prefix") }, { "pred", N_("predicate") }, { "prep", N_("preposition") }, { "pron", N_("pronoun") }, { "pt", N_("past simple") }, { "sg", N_("singular") }, { "suff", N_("suffix") }, { "superl", N_("superlative degree") }, { "vb", N_("verb") }, { "vi", N_("intransitive verb") }, { "vir", N_("virile gender") }, { "voc", N_("vocative") }, { "vr", N_("reflexive verb") }, { "vt", N_("transitive verb") }, }; const char *qualifiers_format = "{\\line{\\cf2 %s} {%s}}"; const char *help[] = { "{\\b " HEADER_NAME "}", "{\\line{\\b " HEADER_COPYRIGHT "}}{\\pard\\pard}", N_("{\\cf2 F1} or {\\cf2 ?} - this help"), N_("{\\line{\\cf2 Tab} - change focus}"), N_("{\\line{\\cf2 Up} and {\\cf2 Down} - scroll up and down}"), N_("{\\line{\\cf2 Page Up} and {\\cf2 Page Down} - scroll page up and down}"), N_("{\\line{\\cf2 F2} or {\\cf2 `} - play pronunciation sample}"), N_("{\\line{\\cf2 F3} or {\\cf2 <} - English-Polish dictionary}"), N_("{\\line{\\cf2 F4} or {\\cf2 >} - Polish-English dictionary}"), N_("{\\line{\\cf2 F5} or {\\cf2 [} - German-Polish dictionary}"), N_("{\\line{\\cf2 F6} or {\\cf2 ]} - Polish-German dictionary}"), N_("{\\line{\\cf2 F7} or {\\cf2 !} - grammatical qualifiers}"), N_("{\\line{\\cf2 Esc} - go back}"), N_("{\\line{\\cf2 Ctrl-U} or {\\cf2 Ctrl-W} - clear input field}"), N_("{\\line{\\cf2 Ctrl-L} - refresh display}"), N_("{\\line{\\cf2 Ctrl-C} or {\\cf2 Ctrl-X} - quit program}"), }; const char *help_footer = N_("{\\par\\pard}Contact: {\\b %s}. Current version is always available at {\\b %s}"); /** * \brief Exits program * * \param msg Error message or NULL if there is no error condition * * Cleans up a bit. */ void show_error(const char *msg) { if (window_word) delwin(window_word); if (window_sep) delwin(window_sep); if (window_def) delwin(window_def); if (window_arrows) delwin(window_arrows); werase(stdscr); wrefresh(stdscr); endwin(); if (dict) { ydpdict_close(dict); dict = NULL; } xfree(def); if (msg) fprintf(stderr, "%s\n\n", msg); #ifdef HAVE_LIBAO ao_shutdown(); #endif exit(msg ? 1 : 0); } /** * \brief SIGTERM handler. */ static void sigterm(int sig) { show_error(NULL); } /** * \brief Updates and redraws all ncurses windows */ void update_all(void) { wnoutrefresh(window_sep); wnoutrefresh(window_def); wnoutrefresh(window_arrows); wnoutrefresh(window_word); doupdate(); } /** * \brief Creates and configures ncurses windows * * Configuration also means filling the header and separator window */ void create_windows(void) { int i; /* Destroy windows */ if (window_word) delwin(window_word); if (window_def) delwin(window_def); if (window_sep) delwin(window_sep); if (window_arrows) delwin(window_arrows); /* Create windows */ window_word = newwin(screen_height - 2, 20, 1, 2); window_def = newwin(screen_height - 2, screen_width - 29, 1, 27); window_sep = newwin(screen_height, 4, 0, 23); window_arrows = newwin(screen_height, 1, 0, screen_width - 1); if (!window_word || !window_def || !window_sep) show_error(_("Out of memory")); /* Configure windows */ keypad(window_word, TRUE); halfdelay(100); erase(); /* Draw vertical bar */ for (i = 0; i < screen_height; i++) mvwaddch(window_sep, i, 1, ACS_VLINE); } /** * \brief SIGWINCH handler */ void sigwinch(int sig) { resized_term = 1; } /** * \brief Checks and adjusts word list selection to match the new window size */ void check_size(void) { int newx, newy, fake = 0, diff; newx = getmaxx(stdscr); newy = getmaxy(stdscr); /* Minimum size */ if (newx < 29) fake = newx = 29; if (newy < 4) fake = newy = 4; if (fake) resizeterm(newy, newx); screen_width = newx; screen_height = newy; diff = list_page + (screen_height - 3) - word_count; if (diff > 0) { list_page -= diff; list_index += diff; } diff = list_index - (screen_height - 4); if (diff > 0) { list_page += diff; list_index -= diff; } } /** * \brief Handles terminal resize */ void resize(void) { endwin(); refresh(); check_size(); create_windows(); resized_term = 0; } #define is_visible(x) ((ypos >= first && ypos < (screen_height - 2) + first) ? x : "") /** * \brief Prints the definition * * \param def Definition RTF source * \param first First line visible on the screen * * \return Total number of lines */ int def_print(char *def, int first) { int attr = color_text, attrs[16], level = 0, lastsp = 1, xpos = 0; int phon = 0, lp = 0, dispword, newline_, newattr, lastnl = 0; int ypos = 0, margin = 0, tp, newphon; char token[64], line[screen_width]; if (!def) return 1; werase(window_def); if (def_raw_rtf) { wattrset(window_def, A_NORMAL); waddstr(window_def, def); return 1; } while (def && *def) { dispword = 0; newline_ = 0; newattr = attr; newphon = phon; switch(*def) { case '{': if (level < 16) attrs[level++] = attr; dispword = 1; break; case '\\': def++; tp = 0; while ((*def >= 'a' && *def <= 'z') || (*def >= '0' && *def <= '9')) token[tp++] = *def++; token[tp] = 0; if (*def == ' ') def++; if (!lastnl) { if (!strcmp(token, "par") || !strcmp(token, "line")) newline_ = 1; margin = 0; } if (!strcmp(token, "pard")) { newline_ = 1; margin = 0; } if (!strncmp(token, "sa", 2)) { margin = 1; waddstr(window_def, is_visible(" ")); xpos = 3; } if (!strcmp(token, "b")) newattr |= A_BOLD; if (!strcmp(token, "cf0")) newattr = color_text; if (!strcmp(token, "cf1")) newattr = color_cf1; if (!strcmp(token, "cf2")) newattr = color_cf2; if (!strcmp(token, "cf5")) newattr = color_text; if (token[0] == 'f') newphon = 0; if (!strcmp(token, "f1")) newphon = 1; if (!strcmp(token, "qc")) newattr |= ATTR_HIDE; if (!strcmp(token, "super")) { #ifndef YDPDICT_HAS_SUPERSCRIPT line[lp++] = '^'; line[lp] = 0; #endif newattr |= ATTR_SUPER; } def--; dispword = 1; break; case '}': if (!level) break; newattr = attrs[--level]; dispword = 1; newphon = 0; break; default: if (attr & ATTR_HIDE) break; #ifdef YDPDICT_HAS_SUPERSCRIPT if ((attr & ATTR_SUPER) && isdigit(*def)) *def -= '0'; #endif wattrset(window_def, attr & ~ATTR_MASK); lastnl = 0; switch (*def) { case ' ': if (lastsp) break; dispword = 1; lastsp = 1; if (!lp) { line[0] = ' '; line[1] = 0; lp = 1; lastsp = 0; } break; default: if (*def == 0x7f) (*def)--; line[lp++] = *def; line[lp] = 0; lastsp = 0; } } def++; if (dispword && lp) { if (screen_width - 30 - xpos < lp) { waddstr(window_def, is_visible("\n")); ypos++; if (margin) waddstr(window_def, is_visible(" ")); xpos = ((margin) ? 3 : 0) + strlen(line); } else { xpos += strlen(line); } if (def_encoding == YDPDICT_ENCODING_UTF8) { waddstr(window_def, is_visible(line)); } else { if (phon) { char *tmp = ydpdict_phonetic_to_utf8(is_visible(line)); waddstr(window_def, tmp); xfree(tmp); } else { #ifndef YDPDICT_HAS_SUPERSCRIPT char *tmp = ydpdict_windows1250_to_utf8(is_visible(line)); #else char *tmp = ydpdict_windows1250_super_to_utf8(is_visible(line)); #endif waddstr(window_def, tmp); xfree(tmp); } } if (lastsp && xpos != screen_width - 30) { waddstr(window_def, is_visible(" ")); xpos++; } lp = 0; } if (newline_ && !(attr & ATTR_HIDE)) { waddstr(window_def, is_visible("\n")); ypos++; xpos = (margin) ? 3 : 0; if (margin) waddstr(window_def, is_visible(" ")); lastsp = 1; lastnl = 1; } attr = newattr; phon = newphon; } if (lp) { if (screen_width - 30 - xpos < lp) { waddstr(window_def, is_visible("\n")); ypos++; } if (def_encoding == YDPDICT_ENCODING_UTF8) { waddstr(window_def, is_visible(line)); } else { if (phon) { char *tmp = ydpdict_phonetic_to_utf8(is_visible(line)); waddstr(window_def, tmp); xfree(tmp); } else { char *tmp = ydpdict_windows1250_to_utf8(is_visible(line)); waddstr(window_def, tmp); xfree(tmp); } } } ypos++; return ypos; } /** * \brief Looks up current input word in the dictionary */ void input_find(void) { char dest[64]; wchar_t src_buf[64]; const wchar_t *src; int idx; int i; if (!dict) return; input_exact = 1; for (i = wcslen(input); i > 0; i--) { wcsncpy(src_buf, input, i); src_buf[i] = 0; src = src_buf; wcsrtombs(dest, &src, sizeof(dest), NULL); idx = ydpdict_find_word(dict, dest); if (idx != -1) { list_page = idx; list_index = 0; if (list_page > word_count - (screen_height - 3)) { list_page = word_count - (screen_height - 3); list_index = idx - list_page; } break; } input_exact = 0; } } /** * \brief Redraws word list */ void list_redraw(void) { int y; werase(window_word); if (dict) { for (y = 0; y < (screen_height - 3); y++) { wattrset(window_word, (y == list_index) ? A_REVERSE : A_NORMAL); mvwaddstr(window_word, y + 1, 0, " "); if (list_page + y >= word_count) continue; mvwaddstr(window_word, y + 1, 1, ydpdict_get_word(dict, list_page + y)); } } wattrset(window_word, input_exact ? A_BOLD : A_NORMAL); mvwaddstr(window_word, 0, 0, "[__________________]"); mvwaddwstr(window_word, 0, 1, input); wattrset(window_word, A_NORMAL); wmove(window_word, 0, input_index + 1); } /** * \brief Redraws the definition */ void def_redraw(void) { if (def_update && dict) { xfree(def); def = (char*) ydpdict_read_rtf(dict, list_page + list_index); def_encoding = YDPDICT_ENCODING_WINDOWS1250; def_update = 0; } list_redraw(); def_height = def_print(def, def_index); curs_set((focus) ? 0 : 1); wattrset(window_sep, A_BOLD); if (focus) { mvwaddch(window_sep, screen_height / 2, 0, ACS_HLINE); mvwaddch(window_sep, screen_height / 2, 1, ACS_HLINE); mvwaddch(window_sep, screen_height / 2, 2, ACS_RARROW); } else { mvwaddch(window_sep, screen_height / 2, 0, ACS_LARROW); mvwaddch(window_sep, screen_height / 2, 1, ACS_HLINE); mvwaddch(window_sep, screen_height / 2, 2, ACS_HLINE); } wattrset(window_arrows, A_DIM); mvwaddch(window_arrows, 1, 0, (def_index > 0) ? ACS_UARROW : ' '); mvwaddch(window_arrows, screen_height - 2, 0, (def_index < def_height - (screen_height - 2)) ? ACS_DARROW : ' '); update_all(); } void switch_dict(int new_dict) { const char *idx[4] = { DEFAULT_IDX_AP, DEFAULT_IDX_PA, DEFAULT_IDX_DP, DEFAULT_IDX_PD }; const char *dat[4] = { DEFAULT_DAT_AP, DEFAULT_DAT_PA, DEFAULT_DAT_DP, DEFAULT_DAT_PD }; char *full_idx = NULL, *full_dat = NULL; struct dirent *de; DIR *dh; if (new_dict < 0 || new_dict > 3) return; if (dict) { ydpdict_close(dict); dict = NULL; } curs_set(0); wattrset(window_def, A_NORMAL); werase(window_def); waddstr(window_def, _("Please wait, loading the dictionary...")); update_all(); errno = ENOENT; if (config_path && (dh = opendir(config_path))) { while ((de = readdir(dh))) { if (strcasecmp(de->d_name, idx[new_dict]) == 0 && full_idx == NULL) { full_idx = xmalloc(strlen(config_path) + 1 + strlen(de->d_name) + 1); sprintf(full_idx, "%s/%s", config_path, de->d_name); } if (strcasecmp(de->d_name, dat[new_dict]) == 0 && full_dat == NULL) { full_dat = xmalloc(strlen(config_path) + 1 + strlen(de->d_name) + 1); sprintf(full_dat, "%s/%s", config_path, de->d_name); } } closedir(dh); } if (full_idx == NULL || full_dat == NULL || !(dict = ydpdict_open(full_dat, full_idx, YDPDICT_ENCODING_UTF8))) { const char *tmp, *err; /* errno is set to ENOENT above for missing dictionary files */ if (!errno) err = _("Invalid file format"); else err = strerror(errno); tmp = _("{\\cf2 Error!}\\par\\pard{Unable to open dictionary: %s. Press {\\cf2 F1} or {\\cf2 ?} for help.}"); xfree(def); def = xmalloc(strlen(tmp) + strlen(err)); sprintf(def, tmp, err); def_encoding = YDPDICT_ENCODING_UTF8; def_index = 0; word_count = 0; } else { word_count = ydpdict_get_count(dict); def_update = 1; } xfree(full_idx); xfree(full_dat); config_dict = new_dict; def_index = 0; input_index = 0; list_index = 0; list_page = 0; if (wcslen(input)) { input_index = wcslen(input); input_find(); } curs_set(1); update_all(); } int main(int argc, char **argv) { MEVENT m_event; int bg; #ifdef ENABLE_NLS setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, LOCALEDIR); textdomain(PACKAGE); #endif #ifdef HAVE_LIBAO ao_initialize(); #endif #ifdef SIGWINCH signal(SIGWINCH, sigwinch); #endif signal(SIGTERM, sigterm); signal(SIGINT, sigterm); signal(SIGHUP, sigterm); read_config(argc, argv); initscr(); noecho(); cbreak(); if (config_transparent) { bg = COLOR_DEFAULT; use_default_colors(); } else bg = COLOR_BLACK; /* Prepare colors */ if (config_color && has_colors()) { start_color(); init_pair(1, config_text & 127, bg); init_pair(2, config_cf1 & 127, bg); init_pair(3, config_cf2 & 127, bg); color_text = COLOR_PAIR(1) | (config_text & A_BOLD); color_cf1 = COLOR_PAIR(2) | (config_cf1 & A_BOLD); color_cf2 = COLOR_PAIR(3) | (config_cf2 & A_BOLD); } else { color_text = A_NORMAL; color_cf1 = A_NORMAL; color_cf2 = A_NORMAL; } memset(input, 0, sizeof(input)); /* Prepare UI */ check_size(); create_windows(); /* Load the dictionary */ switch_dict(config_dict); mousemask(BUTTON1_CLICKED | BUTTON1_DOUBLE_CLICKED, NULL); if (config_word) { const char *src = config_word; mbsrtowcs(input, &src, INPUT_LEN, NULL); input_find(); input_index = wcslen(input); } for (;;) { int ch; if (resized_term) resize(); def_redraw(); ch = wgetch(window_word); switch (ch) { #define __MOUSE_IN(window, event, correct1, correct2, correct3, correct4) (\ event.y > (getbegy(window) + correct1) && event.y < (getbegy(window) + getmaxy(window) - 1 + correct2) &&\ event.x > (getbegx(window) + correct3) && event.x < (getbegx(window) + getmaxx(window) - 1 + correct4)) case KEY_MOUSE: if (getmouse(&m_event) == OK) { /* Double-click points to the word */ if (m_event.bstate & BUTTON1_DOUBLE_CLICKED && __MOUSE_IN(window_def, m_event, -2, 1, -3, 2)) { wchar_t ch, buf[INPUT_LEN + 1]; cchar_t cc; int i = 0, x = m_event.x - 27; mvwin_wch(window_def, m_event.y - 2, x, &cc); ch = cc.chars[0]; if (!(iswalpha(ch) || ch == L'-')) break; /* Look for first non-letter */ do { x--; mvwin_wch(window_def, m_event.y - 2, x, &cc); ch = cc.chars[0]; } while ((iswalpha(ch) || ch == L'-') && x >= 0); /* And collect characters on the right */ do { x++; mvwin_wch(window_def, m_event.y - 2, x, &cc); ch = cc.chars[0]; buf[i++] = ch; } while ((iswalpha(ch) || ch == L'-') && x < getmaxx(window_def) - 1); buf[--i] = L'\0'; /* Did we find anything? */ if (wcslen(buf)) { wcsncpy(input, buf, INPUT_LEN); input[INPUT_LEN] = 0; input_index = wcslen(input); input_find(); def_update = 1; } break; } if (m_event.bstate & BUTTON1_CLICKED || m_event.bstate & BUTTON1_DOUBLE_CLICKED) { /* Clicked on the word list */ if (__MOUSE_IN(window_word, m_event, -2, 1, -1, 1) && m_event.y > 2) { list_index = m_event.y - 3; memset(input, 0, sizeof(input)); input_index = 0; def_index = 0; def_update = 1; } /* Header */ if (m_event.y == 0) { ungetch(KEY_F(1)); break; } /* Scrolling */ if (m_event.y == screen_height - 1) { ungetch(KEY_NPAGE); break; } if (m_event.y <= 1) { ungetch(KEY_PPAGE); break; } } if (m_event.bstate & BUTTON1_CLICKED) { /* Change of the active window */ if (__MOUSE_IN(window_word, m_event, -2, 1, -3, 2) && focus) { if (focus == 2) def_update = 1; focus = 0; } if (__MOUSE_IN(window_def, m_event, -2, 1, -3, 2) && !focus) focus = 1; } } break; #undef isalpha_pl_PL #undef __MOUSE_IN case 10: /* Enter */ if (focus) { if (def_index < def_height - (screen_height - 2)) def_index++; } else { wchar_t *c = input + wcslen(input) - 1; while (wcslen(input) > 1 && *c == L' ') *c-- = 0; input_index = wcslen(input); input_find(); def_update = 1; } break; case 27: /* ESC */ if (focus == 2) { focus = saved_focus; def_update = 1; def_index = def_saved_index; } else if (focus == 1) { focus = 0; } else { memset(&input, 0, sizeof(input)); list_index = 0; list_page = 0; input_index = 0; def_index = 0; def_update = 1; } break; case 24: /* Ctrl-X */ show_error(NULL); break; #ifdef KEY_RESIZE case KEY_RESIZE: resized_term = 1; break; #endif case 9: /* TAB */ if (focus == 2) { def_update = 1; def_index = 0; } focus = (focus) ? 0 : 1; break; case KEY_F(2): case '`': if (config_dict == 0 || config_dict == 2) play_sample(config_dict, list_page + list_index); break; case KEY_F(1): case '?': { unsigned int len = 0; int i; for (i = 0; i < sizeof(help) / sizeof(help[0]); i++) len += strlen(_(help[i])); len += strlen(_(help_footer)); xfree(def); def = xmalloc(len + strlen(HELP_EMAIL) + strlen(HELP_WEBSITE) + 1); def[0] = 0; for (i = 0; i < sizeof(help) / sizeof(help[0]); i++) strcat(def, _(help[i])); sprintf(def + strlen(def), _(help_footer), HELP_EMAIL, HELP_WEBSITE); def_saved_index = def_index; def_index = 0; def_encoding = YDPDICT_ENCODING_UTF8; saved_focus = focus; focus = 2; break; } case KEY_F(3): case '<': if (config_dict != 0) switch_dict(0); break; case KEY_F(4): case '>': if (config_dict != 1) switch_dict(1); break; case KEY_F(5): case '[': if (config_dict != 2) switch_dict(2); break; case KEY_F(6): case ']': if (config_dict != 3) switch_dict(3); break; case KEY_F(7): case '!': { unsigned int len = 0; int i; len += strlen(_(qualifiers_header)); for (i = 0; i < sizeof(qualifiers) / sizeof(qualifiers[0]); i++) { len += strlen(qualifiers_format); len += strlen(qualifiers[i][0]); len += strlen(_(qualifiers[i][1])); } xfree(def); def = xmalloc(len); strcpy(def, _(qualifiers_header)); for (i = 0; i < sizeof(qualifiers) / sizeof(qualifiers[0]); i++) sprintf(def + strlen(def), qualifiers_format, qualifiers[i][0], _(qualifiers[i][1])); def_saved_index = def_index; def_index = 0; def_encoding = YDPDICT_ENCODING_UTF8; saved_focus = focus; focus = 2; break; } case KEY_UP: if (focus) { if (def_index > 0) def_index--; } else { if (list_index > 0) list_index--; else if (list_page > 0) list_page--; def_index = 0; def_update = 1; } break; case KEY_PPAGE: if (focus) { if (def_index > screen_height - 3) def_index -= screen_height - 2; else def_index = 0; } else { if (list_index > 0) list_index = 0; else if (list_page > screen_height - 4) list_page -= screen_height - 3; else list_page = 0; def_index = 0; def_update = 1; } break; case KEY_DOWN: if (focus) { if (def_index < def_height - (screen_height - 2)) def_index++; } else { if (list_index < screen_height - 4 && (list_index + 1 < word_count)) list_index++; else if (list_page < word_count - (screen_height - 3)) list_page++; def_index = 0; def_update = 1; } break; case KEY_NPAGE: if (focus) { if (def_index < def_height - (screen_height - 2) * 2 - 1) def_index += screen_height - 2; else def_index = def_height - (screen_height - 2); } else { if (list_index < screen_height - 4) list_index = screen_height - 4; else if (list_page < word_count - (screen_height - 3) * 2 - 1) list_page += screen_height - 3; else list_page = word_count - (screen_height - 3); def_index = 0; def_update = 1; } break; case KEY_F(9): def_raw_rtf = !def_raw_rtf; break; case KEY_DC: if (!focus) { if (input_index < wcslen(input)) { memmove(input + input_index, input + input_index + 1, (wcslen(input) - input_index + 1) * sizeof(wchar_t)); input_find(); def_update = 1; } else beep(); } break; case KEY_BACKSPACE: case 127: case 8: if (focus) { if (def_index > 0) def_index--; break; } else { if (input_index) { memmove(input + input_index - 1, input + input_index, (wcslen(input) - input_index + 1) * sizeof(wchar_t)); input_index--; input_find(); def_update = 1; } else beep(); } break; case 12: /* Ctrl-L */ resized_term = 1; break; case 21: /* Ctrl-U */ case 23: /* Ctrl-W */ memset(&input, 0, sizeof(input)); list_index = 0; list_page = 0; input_index = 0; def_index = 0; def_update = 1; focus = 0; break; case KEY_HOME: case KEY_FIND: input_index = 0; break; case KEY_END: case KEY_SELECT: input_index = wcslen(input); break; case KEY_LEFT: if (!input_index || focus) beep(); else input_index--; break; case KEY_RIGHT: if (input_index >= wcslen(input) || focus) beep(); else input_index++; break; default: { static char mb[5]; static int mblen = 0, mbofs = 0; int len; wchar_t wc; if (ch < ' ' || ch > 255) break; if ((ch & 0xe0) == 0xc0) { mb[0] = ch; mblen = 2; mbofs = 1; break; } if ((ch & 0xf0) == 0xe0) { mb[0] = ch; mblen = 3; mbofs = 1; break; } if ((ch & 0xf8) == 0xf0) { mb[0] = ch; mblen = 4; mbofs = 1; break; } if ((ch & 0xc0) == 0x80) { if (!mblen) break; mb[mbofs++] = ch; if (mbofs == mblen) { mb[mbofs] = 0; mbrtowc(&wc, mb, strlen(mb), NULL); } else break; } else { wc = ch; } if (focus) { memset(input, 0, sizeof(input)); input_index = 0; } if (wcslen(input) > INPUT_LEN) break; if (input_index < wcslen(input)) memmove(input + input_index + 1, input + input_index, (wcslen(input) - input_index + 1) * sizeof(wchar_t)); input[input_index++] = wc; len = wcslen(input); if (len >= 2 && !wcscmp(input + len - 2, L":q")) show_error(NULL); if (len >= 3 && !wcscmp(input + len - 3, L":wq")) show_error(NULL); if (len >= 2 && !wcscmp(input + len - 2, L":x")) show_error(NULL); input_find(); def_update = 1; focus = 0; def_index = 0; break; } } } show_error(NULL); return 0; } ydpdict-1.0.5/src/ydpsound.c000066400000000000000000000242211454113125300157550ustar00rootroot00000000000000/* * ydpdict * (c) Copyright 1998-2020 Wojtek Kaniewski * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #include #include #include #include #include "ydpconfig.h" #include "ydpsound.h" #include "xmalloc.h" #include "adpcm.h" #ifdef HAVE_LINUX_SOUNDCARD_H #include #include #include #endif #ifdef HAVE_LIBAO #include #endif #ifdef ENABLE_NLS #include #define _(x) gettext(x) #else #define _(x) x #endif /** * \brief Convert 32-bit value from little-endian to machine-endian * * \param value little-endian value * * \return machine-endian value */ static inline uint32_t fix32(uint32_t value) { #ifdef WORDS_BIGENDIAN return (uint32_t) (((value & (uint32_t) 0x000000ffU) << 24) | ((value & (uint32_t) 0x0000ff00U) << 8) | ((value & (uint32_t) 0x00ff0000U) >> 8) | ((value & (uint32_t) 0xff000000U) >> 24)); #else return value; #endif } /** * \brief Convert 16-bit value from little-endian to machine-endian * * \param value little-endian value * * \return machine-endian value */ static inline uint16_t fix16(uint16_t value) { #ifdef WORDS_BIGENDIAN return (uint16_t) (((value & (uint16_t) 0x00ffU) << 8) | ((value & (uint16_t) 0xff00U) >> 8)); #else return value; #endif } #ifdef HAVE_LIBAO /** * \brief Play sample using libao * * \param sample Sample data * \param size Sample size in bytes * \param freq Sampling frequency * \param bits Bits per sample * \param chans Channels * * \return 0 on success, -1 on error */ static int play_libao(char *sample, int size, int freq, int bits, int chans) { ao_device *device; ao_sample_format format; int driver; if (!config_audio) driver = ao_default_driver_id(); else driver = ao_driver_id(config_audio); if (driver == -1) return -1; memset(&format, 0, sizeof(format)); format.bits = bits; format.channels = chans; format.rate = freq; format.byte_format = AO_FMT_NATIVE; if (!(device = ao_open_live(driver, &format, NULL))) return -1; ao_play(device, sample, size); ao_close(device); return 0; } #else /* HAVE_LIBAO */ #ifdef HAVE_LINUX_SOUNDCARD_H /** * \brief Play sample using Linux OSS interface * * \param sample Sample data * \param size Sample size in bytes * \param freq Sampling frequency * \param bits Bits per sample * \param chans Channels * * \return 0 on success, -1 on error */ static int play_linux(char *sample, int size, int freq, int bits, int chans) { int fd; if (!config_audio) return -1; if ((fd = open(config_audio, O_WRONLY)) == -1) return -1; if (ioctl(fd, SNDCTL_DSP_SPEED, &freq) == -1) { close(fd); return -1; } if (ioctl(fd, SNDCTL_DSP_SAMPLESIZE, &bits) == -1) { close(fd); return -1; } if (ioctl(fd, SNDCTL_DSP_CHANNELS, &chans) == -1) { close(fd); return -1; } while (size > 0) { int res; if ((res = write(fd, sample, size)) == -1) { close(fd); return -1; } size -= res; sample += res; } close(fd); return 0; } #endif /* HAVE_LINUX_SOUNDCARD_H */ #endif /* HAVE_LIBAO */ /** * \brief Plays sample for pronunciation * * \param dict Dictionary type * \param def Word index * * \return 0 on success, -1 on invalid file format, -2 on invalid file codec, -3 on playback error */ int play_sample(int dict, int def) { char *exts[] = { "WAV", "wav", "MP3", "mp3", "OGG", "ogg", NULL }; struct riff_header_type riff_header; struct riff_block_type riff_block; struct wave_fmt_type wave_fmt; struct wave_adpcm_type wave_adpcm; int i, fd = -1, rd, result; char path[4096], *sample = NULL; int bytesPerBlock; short *coefs = NULL; for (i = 0; exts[i]; i++) { if (dict == 0) { snprintf(path, sizeof(path), "%s/en/S%.3d/%.6d.%s", config_cdpath, (def + 1) / 1000, def + 1, exts[i]); if (!access(path, R_OK)) break; snprintf(path, sizeof(path), "%s/en/s%.3d/%.6d.%s", config_cdpath, (def + 1) / 1000, def + 1, exts[i]); if (!access(path, R_OK)) break; } if (dict == 2) { snprintf(path, sizeof(path), "%s/de/sg%.3d/sg%.6d.%s", config_cdpath, (def + 1) / 1000, def + 1, exts[i]); if (!access(path, R_OK)) break; snprintf(path, sizeof(path), "%s/de/SG%.3d/SG%.6d.%s", config_cdpath, (def + 1) / 1000, def + 1, exts[i]); if (!access(path, R_OK)) break; } snprintf(path, sizeof(path), "%s/S%.3d/%.6d.%s", config_cdpath, (def + 1) / 1000, def + 1, exts[i]); if (!access(path, R_OK)) break; snprintf(path, sizeof(path), "%s/s%.3d/%.6d.%s", config_cdpath, (def + 1) / 1000, def + 1, exts[i]); if (!access(path, R_OK)) break; snprintf(path, sizeof(path), "%s/sg%.3d/sg%.6d.%s", config_cdpath, (def + 1) / 1000, def + 1, exts[i]); if (!access(path, R_OK)) break; snprintf(path, sizeof(path), "%s/SG%.3d/SG%.6d.%s", config_cdpath, (def + 1) / 1000, def + 1, exts[i]); if (!access(path, R_OK)) break; } if (!exts[i]) return 0; if (config_player) { char command[strlen(config_player) + strlen(path) + 32]; snprintf(command, sizeof(command), "%s %s > /dev/null 2> /dev/null", config_player, path); return system(command); } if ((fd = open(path, O_RDONLY)) == -1) { result = 0; goto failure; } if (read(fd, &riff_header, sizeof(riff_header)) < sizeof(riff_header)) { result = -1; goto failure; } riff_header.size = fix32(riff_header.size); if (strncmp(riff_header.id, "RIFF", sizeof(riff_header.id))) { result = -1; goto failure; } if (strncmp(riff_header.format, "WAVE", sizeof(riff_header.format))) { result = -1; goto failure; } for (;;) { if (read(fd, &riff_block, sizeof(riff_block)) < sizeof(riff_block)) { result = -1; goto failure; } riff_block.size = fix32(riff_block.size); rd = lseek(fd, 0, SEEK_CUR); if (!strncmp(riff_block.id, "fmt ", sizeof(riff_block.id))) { if (read(fd, &wave_fmt, sizeof(wave_fmt)) < sizeof(wave_fmt)) { result = -1; goto failure; } wave_fmt.wFormatTag = fix16(wave_fmt.wFormatTag); wave_fmt.wChannels = fix16(wave_fmt.wChannels); wave_fmt.dwSamplesPerSec = fix32(wave_fmt.dwSamplesPerSec); wave_fmt.dwAvgBytesPerSec = fix32(wave_fmt.dwAvgBytesPerSec); wave_fmt.wBlockAlign = fix16(wave_fmt.wBlockAlign); wave_fmt.wBitsPerSample = fix16(wave_fmt.wBitsPerSample); switch (wave_fmt.wFormatTag) { case WAVE_FORMAT_PCM: lseek(fd, riff_block.size - sizeof(wave_fmt), SEEK_CUR); break; case WAVE_FORMAT_ADPCM: if (riff_block.size < sizeof(wave_fmt) + sizeof(wave_adpcm)) { result = -1; goto failure; } if (read(fd, &wave_adpcm, sizeof(wave_adpcm)) < sizeof(wave_adpcm)) { result = -1; goto failure; } wave_adpcm.wExtSize = fix16(wave_adpcm.wExtSize); wave_adpcm.wSamplesPerBlock = fix16(wave_adpcm.wSamplesPerBlock); wave_adpcm.wCoefs = fix16(wave_adpcm.wCoefs); bytesPerBlock = 7 * wave_fmt.wChannels; if (wave_adpcm.wSamplesPerBlock > 2) bytesPerBlock += ((wave_adpcm.wSamplesPerBlock - 2) * wave_fmt.wChannels + 1) / 2; if (riff_block.size < sizeof(wave_fmt) + sizeof(wave_adpcm) + wave_adpcm.wCoefs * 4) { result = -1; goto failure; } coefs = xmalloc(wave_adpcm.wCoefs * 2 * sizeof(short)); if (read(fd, coefs, wave_adpcm.wCoefs * 2 * sizeof(short)) != wave_adpcm.wCoefs * 2 * sizeof(short)) { result = -1; goto failure; } for (i = 0; i < wave_adpcm.wCoefs; i++) coefs[i] = (short) fix16((unsigned short) coefs[i]); lseek(fd, riff_block.size - sizeof(wave_fmt) - sizeof(wave_adpcm) - 4 * wave_adpcm.wCoefs, SEEK_CUR); break; default: result = -2; goto failure; } continue; } if (!strncmp(riff_block.id, "data", 4)) { int bits = wave_fmt.wBitsPerSample; switch (wave_fmt.wFormatTag) { case WAVE_FORMAT_PCM: { sample = xmalloc(riff_block.size); rd = read(fd, sample, riff_block.size); break; } case WAVE_FORMAT_ADPCM: { int res, count, bytes; char *packet; short *samples; packet = xmalloc(wave_fmt.wBlockAlign); samples = xmalloc(wave_adpcm.wSamplesPerBlock * sizeof(short)); bits = 16; bytes = 0; sample = NULL; rd = 0; while (bytes < riff_block.size) { res = read(fd, packet, wave_fmt.wBlockAlign); if (res < 1) { result = -2; goto failure; } bytes += res; count = wave_adpcm.wSamplesPerBlock; if (res < wave_fmt.wBlockAlign) { if (!(count = AdpcmSamplesIn(0, wave_fmt.wChannels, res, 0))) { result = -2; goto failure; } } sample = xrealloc(sample, rd + count * sizeof(short)); AdpcmBlockExpandI(wave_fmt.wChannels, wave_adpcm.wCoefs, coefs, (unsigned char*) packet, (short*) (sample + rd), count); rd += count * sizeof(short); } xfree(packet); xfree(samples); break; } } close(fd); fd = -1; #ifdef HAVE_LIBAO if (play_libao(sample, rd, wave_fmt.dwSamplesPerSec, bits, wave_fmt.wChannels) == -1) { result = -3; goto failure; } #else #ifdef HAVE_LINUX_SOUNDCARD_H if (play_linux(sample, rd, wave_fmt.dwSamplesPerSec, bits, wave_fmt.wChannels) == -1) { result = -3; goto failure; } #endif /* HAVE_LINUX_SOUNDCARD_H */ #endif /* HAVE_LIBAO */ xfree(sample); break; } lseek(fd, riff_block.size, SEEK_CUR); } return 0; failure: xfree(sample); xfree(coefs); if (fd != -1) close(fd); return result; } ydpdict-1.0.5/src/ydpsound.h000066400000000000000000000027541454113125300157710ustar00rootroot00000000000000/* * ydpdict * (C) Copyright 1998-2009 Wojtek Kaniewski * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifndef __YDPSOUND_H #define __YDPSOUND_H #include struct riff_header_type { char id[4]; uint32_t size; char format[4]; } __attribute__ ((packed)); struct riff_block_type { char id[4]; uint32_t size; } __attribute__ ((packed)); enum wave_fmt_type_type { WAVE_FORMAT_PCM = 0x0001, WAVE_FORMAT_ADPCM = 0x0002 }; struct wave_fmt_type { uint16_t wFormatTag; uint16_t wChannels; uint32_t dwSamplesPerSec; uint32_t dwAvgBytesPerSec; uint16_t wBlockAlign; uint16_t wBitsPerSample; } __attribute__ ((packed)); struct wave_adpcm_type { uint16_t wExtSize; uint16_t wSamplesPerBlock; uint16_t wCoefs; } __attribute__ ((packed)); int play_sample(int dict, int def); #endif /* __YDPSOUND_H */ ydpdict-1.0.5/ydpdict.1.in000066400000000000000000000051451454113125300153100ustar00rootroot00000000000000.TH YDPDICT 1 "December 13, 2013" .SH NAME ydpdict \- an interface for Collins and Langenscheidt dictionaries .SH SYNOPSIS .B ydpdict [ .BI options .B ] .SH DESCRIPTION .B ydpdict is an ncurses interface for English-Polish and Polish-English Collins dictionaries, as well as German-Polish and Polish-German Langenscheidt dictionaries, which are distributed by Young Digital Planet. .PP .B ydpdict tries to load the configuration file from the following locations (reads only the first one found): .TP 1) .BI ~/ydpdict.conf .TP 2) .BI ~/.ydpdictrc .TP 3) .BI /etc/ydpdict.conf .PP .B ydpdict searches for dictionary files in current directory and .I @dictdir@. .PP Pronunciation samples are read from .I /media/cdrom by default. To play samples of both english and german words, one shall create .I en and .I de subdirectiories with respective content. .SH OPTIONS .TP .BI \-e\ [\-\-eng] Starts the English-Polish dictionary (default). .TP .BI \-p\ [\-\-pol] Starts the Polish-English dictionary. .TP .BI \-g\ [\-\-ger-pol] Starts the German-Polish dictionary. .TP .BI \-o\ [\-\-pol-ger] Starts the Polish-German dictionary. .TP .BI \-f\ [\-\-path=PATH] Sets the path to data files. .TP .BI \-c\ [\-\-cdpath=PATH] Sets the path to the CD with pronunciation samples. .TP .BI \-P\ [\-\-player=PATH] Sets the path to the sound player. .TP .BI \-w\ [\-\-word=WORD] Starts the dictionary and translates the specified word. .TP .BI \-A\ [\-\-audio=DEVICE] Sets the default audio device. .TP .BI \-\-version Displays the version of the program. .TP .BI \-h\ [\-\-help] Shows command line options. .SH CONFIGURATION OPTIONS .TP .BI Path\ \fiPATH\fR Sets the path to data files. .TP .BI CDPath\ \fiPATH\fR Sets the path to the CD with pronunciation samples. .TP .BI Player\ \fiCOMMAND\fR Sets the path to the sound player. .TP .BI DefaultDictionary\ \fiTYPE\fR Default dictionary (0 - English-Polish, 1 - Polish-English, 2 - German-Polish, 3 - Polish-German). .TP .BI UseColor\ \fiBOOLEAN\fR Color support is autodetected, but color display can be forced with this option (On, Off). .TP .BI UseTransparent\ \fiBOOLEAN\fR Terminal transparency (On, Off). .TP .BI Color\ \fiCOLOR\fR .TP .BI DefinitionColor\ \fiCOLOR\fR .TP .BI InformationColor\ \fiCOLOR\fR Colors used to display definitions can be set to one of the following: Black, Red, Green, Brown, Blue, Magenta, Cyan, White, Gray, Yellow, LightRed, LightGreen, LightBlue, LightMagenta, LightCyan, LightWhite. Note: for colors with "Light" prefix, emphasis will be invisible. .SH AUTHOR .B ydpdict was written by Wojtek Kaniewski . Latest version can be found at .I http://toxygen.net/ydpdict/ ydpdict-1.0.5/ydpdict.conf.in000066400000000000000000000016471454113125300161000ustar00rootroot00000000000000# Path to dictionary files (*.dat and *.idx). Filenames within the directory # MUST be written using lowercase letters. Path @dictdir@ # Path to pronuciation samples. CDPath /media/cdrom # Path to external sound player. If unset, internal playback routines are # used. #Player play #Player mpg321 #Player ogg123 # Default dictionary (0 - English-Polish, 1 - Polish-English, # 2 - German-Polish, 3 - Polish-German) DefaultDictionary 0 # Color support is autodetected, but color display can be forced with this # option. UseColor On # Terminal transparency UseTransparent On # Colors used to display definitions can be set to one of the following: # Black, Red, Green, Brown, Blue, Magenta, Cyan, White, Gray, Yellow, # LightRed, LightGreen, LightBlue, LightMagenta, LightCyan, LightWhite. # Note: for colors with "Light" prefix, emphasis will be invisible. Color White DefinitionColor LightCyan InformationColor LightGreen ydpdict-1.0.5/ydpdict.pl.1.in000066400000000000000000000055111454113125300157170ustar00rootroot00000000000000.TH YDPDICT 1 "13 grudnia 2013" .SH NAZWA ydpdict \- interfejs słowników Collinsa i Langenscheidt .SH SKŁADNIA .B ydpdict [ .BI opcje .B ] .SH OPIS .B ydpdict jest korzystającym z biblioteki ncurses interfejsem służącym do obsługi multimedialnych słowników: angielsko-polskiego, polsko-angielskiego Collinsa, oraz niemiecko-polskiego i polsko-niemieckiego Langenscheidt, wydanych przez Young Digital Planet. .PP .B ydpdict szuka pliku konfiguracyjnego w następujących miejscach (czytany jest tylko pierwszy znaleziony plik): .TP 1) .BI ~/ydpdict.conf .TP 2) .BI ~/.ydpdictrc .TP 3) .BI /etc/ydpdict.conf .PP .B ydpdict szuka plików słowinka w bieżącym katalogu oraz .I @dictdir@ .PP Próbki wymowy są domyślnie czytane z katalogu .I /media/cdrom By odtwarzać próbki wymowy angielskiej i niemieckiej, należy utworzyć katalogi .I en oraz .I de i umieścić w nich próbki wymowy odpowiednich słowników. .SH OPCJE .TP .BI \-e\ [\-\-eng] Uruchamia słownik angielsko-polski (domyślne). .TP .BI \-p\ [\-\-pol] Uruchamia słownik polsko-angielski. .TP .BI \-g\ [\-\-ger-pol] Uruchamia słownik niemiecko-polski. .TP .BI \-o\ [\-\-pol-ger] Uruchamia słownik polsko-niemiecki. .TP .BI \-f\ [\-\-path=ŚCIEŻKA] Podaje ścieżkę do plików danych. .TP .BI \-c\ [\-\-cdpath=ŚCIEŻKA] Podaje ścieżkę do płyty CD z próbkami wymowy. .TP .BI \-P\ [\-\-player=ŚCIEŻKA] Podaje ścieżkę do odtwarzacza plików dźwiękowych. .TP .BI \-w\ [\-\-word=SŁOWO] Uruchamia słownik i tłumaczy podane słowo. .TP .BI \-A\ [\-\-audio=URZĄDZENIE] Określa domyślne urządzenie dźwiękowe. .TP .BI \-\-version Wyświetla wersję programu. .TP .BI \-h\ [\-\-help] Wyświetla tekst pomocy. .SH OPCJE KONFIGURACJI .TP .BI Path\ \fiŚCIEŻKA\fR Podaje ścieżkę do plików danych. .TP .BI CDPath\ \fiŚCIEŻKA\fR Podaje ścieżkę do płyty CD z próbkami wymowy. .TP .BI Player\ \fiCOMMAND\fR Podaje ścieżkę do odtwarzacza plików dźwiękowych. .TP .BI DefaultDictionary\ \fiRODZAJ\fR Domyślny słownik (0 - angielsko-polski, 1 - polsko-angielski, 2 - niemiecko-polski, 3 - polsko-niemiecki. .TP .BI UseColor\ \fiBOOLEAN\fR Dostępność koloru jest wykrywana, ale można wymusić ją tą opcją (On, Off). .TP .BI UseTransparent\ \fiBOOLEAN\fR Przezroczystość terminala (On, Off). .TP .BI Color\ \fiKOLOR\fR .TP .BI DefinitionColor\ \fiKOLOR\fR .TP .BI InformationColor\ \fiKOLOR\fR Kolory używane do wyświetlania definicji mogą być ustawione na jeden z następujących: Black, Red, Green, Brown, Blue, Magenta, Cyan, White, Gray, Yellow, LightRed, LightGreen, LightBlue, LightMagenta, LightCyan, LightWhite. Uwaga: przy kolorach z przedrostkiem "Light", wyróżnienie tekstu nie będzie widoczne. .SH AUTOR .B ydpdict został napisany przez Wojtka Kaniewskiego . Najnowszą wersję można znaleźć pod adresem .I http://toxygen.net/ydpdict/