diff options
author | Kirill Volinsky <mataes2007@gmail.com> | 2012-05-19 14:01:09 +0000 |
---|---|---|
committer | Kirill Volinsky <mataes2007@gmail.com> | 2012-05-19 14:01:09 +0000 |
commit | 97c496705a49c6cb8fc228b0397d9c7793ad6fb7 (patch) | |
tree | aebb4b88955cb99cb564bd5deeefc047977d1f73 /plugins/LangMan | |
parent | 9dd5697955f03c183d5689e4e8dd0fe8927e3817 (diff) |
added LangMan
git-svn-id: http://svn.miranda-ng.org/main/trunk@74 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
Diffstat (limited to 'plugins/LangMan')
-rw-r--r-- | plugins/LangMan/Info_Src.txt | 30 | ||||
-rw-r--r-- | plugins/LangMan/License_Appendix.txt | 64 | ||||
-rw-r--r-- | plugins/LangMan/common.h | 54 | ||||
-rw-r--r-- | plugins/LangMan/docs/LangMan-Developer.txt | 46 | ||||
-rw-r--r-- | plugins/LangMan/docs/LangMan-License.txt | 278 | ||||
-rw-r--r-- | plugins/LangMan/docs/LangMan-Readme.txt | 146 | ||||
-rw-r--r-- | plugins/LangMan/docs/LangMan-Translation.txt | 293 | ||||
-rw-r--r-- | plugins/LangMan/langman.sln | 25 | ||||
-rw-r--r-- | plugins/LangMan/langman.vcxproj | 407 | ||||
-rw-r--r-- | plugins/LangMan/langman.vcxproj.filters | 131 | ||||
-rw-r--r-- | plugins/LangMan/langpack.c | 456 | ||||
-rw-r--r-- | plugins/LangMan/langpack.h | 49 | ||||
-rw-r--r-- | plugins/LangMan/main.c | 172 | ||||
-rw-r--r-- | plugins/LangMan/options.c | 681 | ||||
-rw-r--r-- | plugins/LangMan/options.h | 27 | ||||
-rw-r--r-- | plugins/LangMan/resource.h | 48 | ||||
-rw-r--r-- | plugins/LangMan/resource.rc | 197 | ||||
-rw-r--r-- | plugins/LangMan/utils.c | 69 | ||||
-rw-r--r-- | plugins/LangMan/utils.h | 23 | ||||
-rw-r--r-- | plugins/LangMan/version.h | 42 | ||||
-rw-r--r-- | plugins/LangMan/version.rc | 51 |
21 files changed, 3289 insertions, 0 deletions
diff --git a/plugins/LangMan/Info_Src.txt b/plugins/LangMan/Info_Src.txt new file mode 100644 index 0000000000..af92c5afb8 --- /dev/null +++ b/plugins/LangMan/Info_Src.txt @@ -0,0 +1,30 @@ +
+Language Pack Manager 1.0.2.2 for Miranda IM 0.6+
+------------------------------------------------------------------------
+ Source Code
+
+Reminder:
+'Language Pack Manager' is released under the terms of the
+GNU General Public License.
+See 'LangMan-License.txt' for more details.
+'Language Pack Manager' is copyright 2005-2007 by H. Herkenrath.
+
+Please notify me of any changes that improve
+'Language Pack Manager' or add new features.
+If you have any questions on the code, feel free
+to contact me at my email address.
+
+ H. Herkenrath (hrathh at users.sourceforge.net)
+
+
+Notes
+------------------------------------------------------------------------
+The following files need to be changed to bump the version number:
+
+Info_Src.txt (1 place)
+version.h (4 places)
+m_langman.h (1 place)
+m_langman.inc (1 place)
+docs\LangMan-Readme.txt (3 places)
+docs\LangMan-Translation.txt (2 places)
+docs\LangMan-Developer.txt (1 place)
diff --git a/plugins/LangMan/License_Appendix.txt b/plugins/LangMan/License_Appendix.txt new file mode 100644 index 0000000000..c590c3f5fb --- /dev/null +++ b/plugins/LangMan/License_Appendix.txt @@ -0,0 +1,64 @@ +
+Excecpt of GNU General Public License (Appendix):
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/plugins/LangMan/common.h b/plugins/LangMan/common.h new file mode 100644 index 0000000000..1f47d8ef75 --- /dev/null +++ b/plugins/LangMan/common.h @@ -0,0 +1,54 @@ +/*
+
+'Language Pack Manager'-Plugin for Miranda IM
+
+Copyright (C) 2005-2007 H. Herkenrath
+
+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 (LangMan-License.txt); if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+*/
+
+#define _CRT_SECURE_NO_WARNINGS
+
+#define __RPCASYNC_H__ /* header shows warnings in VS6 */
+#include <windows.h>
+#pragma warning(disable:4201) /* nonstandard extension used : nameless struct/union */
+#include <commctrl.h>
+#pragma warning(default:4201) /* nonstandard extension used : nameless struct/union */
+#include <win2k.h>
+
+#include <tchar.h>
+#include <stdio.h> /* for mir_snprintf() */
+#include <time.h> /* for time() */
+
+#define MIRANDA_VER 0x0600
+#include <newpluginapi.h>
+#include <m_system.h>
+#include <m_utils.h>
+#include <m_database.h>
+#include <m_langpack.h>
+#include <m_options.h>
+#include <m_skin.h>
+#include <m_icolib.h>
+#include <m_flags.h>
+#include <m_netlib.h>
+#include <m_clist.h>
+
+#include "langpack.h"
+#include "options.h"
+//#include "update.h"
+//#include "unzip.h"
+#include "utils.h"
+#include "resource.h"
+#include "m_langman.h"
diff --git a/plugins/LangMan/docs/LangMan-Developer.txt b/plugins/LangMan/docs/LangMan-Developer.txt new file mode 100644 index 0000000000..6ce0c8dabb --- /dev/null +++ b/plugins/LangMan/docs/LangMan-Developer.txt @@ -0,0 +1,46 @@ +
+Language Pack Manager 1.0.2.2 for Miranda IM 0.6+
+------------------------------------------------------------------------
+ Developer Information
+
+ Contents: -------------------------------
+ | Translation, Services (API), Debug Symbols,
+ | Coding Language, Rebase Info
+
+Translation
+-----------------
+ Translation strings can be found in 'LangMan-Translation.txt'.
+ If you are a translator please refer to 'LangMan-Translation.txt'
+ for more information about how your langpack file info needs to be formated
+ to be viewable in a nice way.
+
+Services (API)
+-----------------
+ For more information about which service functions are provided by
+ 'Language Pack Manager' and about how they can be used by your plugin please
+ refer to 'm_langman.h'.
+ If you would like to use Delphi/Pascal please refer to 'm_langman.inc'.
+
+Debug Symbols
+-----------------
+ Debug symbols are also available for debugging purposes.
+ Copy the PDB-files in the SDK-zip into the same directory as the
+ corresponding DLL-files.
+
+Coding Language
+-----------------
+ 'Language Pack Manager' was written using Microsoft Visual C++ 6.0 SP6
+ and the Microsoft Platform SDK shipped along with it.
+
+Rebase Info
+-----------------
+ 'Language Pack Manager' has set its base address to:
+ 0x24100000
+
+ Please avoid using this base address for your plugins because
+ it will slow down the startup of Miranda IM a little bit.
+
+ Using Microsoft Visual C++, the base address can be configured at:
+ 'Project' -> 'Settings' -> 'Linker' -> 'Output' -> 'Base Address'
+
+H. Herkenrath (hrathh at users.sourceforge.net)
diff --git a/plugins/LangMan/docs/LangMan-License.txt b/plugins/LangMan/docs/LangMan-License.txt new file mode 100644 index 0000000000..a726a52df1 --- /dev/null +++ b/plugins/LangMan/docs/LangMan-License.txt @@ -0,0 +1,278 @@ + 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.
diff --git a/plugins/LangMan/docs/LangMan-Readme.txt b/plugins/LangMan/docs/LangMan-Readme.txt new file mode 100644 index 0000000000..61bc8adc71 --- /dev/null +++ b/plugins/LangMan/docs/LangMan-Readme.txt @@ -0,0 +1,146 @@ +
+Language Pack Manager 1.0.2.2
+------------------------------------------------------------------------
+ Plugin for Miranda IM 0.6 and +
+
+ Plugin Info: ----------------------------
+ | Version: 1.0.2.2
+ | Filename: langman.dll
+ | Author: H. Herkenrath (hrathh at users.sourceforge.net)
+ | Description: Helps you manage Language Packs of different languages.
+
+ Contents: -------------------------------
+ | Features, Requirements, Usage, Installation,
+ | Bugs and Wishes, Version History,
+ | Translation, License and Copyright
+
+Features
+----------------------
+ + Allows to switch installed Language Packs easily
+ + Displays all information about the Language Packs in one place
+ + Shows which Language Pack includes support for what plugins
+ + Right-click on a language pack entry to be able to uninstall it
+ + Auto-Updates for all installed Language Packs
+ + Wizard helping you to download and install your native language
+ + Unicode support
+ + Automatic installation of all files, just unzip into Plugins directory
+ + Supported plugins: Database Editor, Country Flags
+
+Requirements
+----------------------
+ -> Miranda IM 0.6+:
+ Miranda IM is needed in version 0.6 or greater.
+
+Usage
+----------------------
+ The Language Packs can be managed here:
+ 'Options' -> 'Customize' -> 'Language'
+
+ When you do a right-click on a specific language pack, you are able to
+ uninstall that file if it is no longer needed.
+
+Installation
+----------------------
+ Find 'miranda32.exe' on your computer.
+
+ Just copy all the contents of the zip-file as they are into the 'Plugins'
+ subdirectory in the Miranda IM folder.
+ 'Language Pack Manager' will detect the files and move them into the appropriate
+ directories on it's first run.
+
+ You can also do all the installation by hand, if you want to:
+
+ Main Plugin: Copy the file 'langman.dll' into the 'Plugins' subdirectory
+ in the Miranda IM folder.
+
+ The Unicode version of the plugin will only work on Windows NT/2000/XP,
+ Windows Server 2000, Windows Vista or later with an installed
+ Unicode version of Miranda IM.
+ To use it on Windows 95/98/Me, please download the ANSI version of the plugin.
+
+ Documentation: The txt-files should be moved along with the SDK-zip into the
+ 'Docs' directory in the Miranda IM folder.
+
+ That's it!
+
+Bugs and Wishes
+----------------------
+ Feel free to mail me your wishes about 'Language Pack Manager' and tell
+ me all the bugs you may find.
+ My email address is: hrathh at users.sourceforge.net
+
+Version History
+----------------------
+ 1.0.2.2 - try to fix radio buttons on Win9x
+ - try to fix anything else
+ - fixed langpack download
+ - fixed selected flag icon
+ 1.0.2.1 - added flag icons using flags.dll
+ - only search for updates if a langpack is present
+ - better displays incompatible locales
+ - added v0.8 support
+ - minor improvements
+ 1.0.2.0 - fixed langpack removal in context menu
+ - fixed automatic installaton
+ - updated to use new miranda headers
+ - auto-cleanup of langpack info
+ - support for WinXP style radio buttons in list
+ - moved options to 'Customize' section
+ - shows langpack filenames in expert mode
+ - auto-updates for language packs
+ - download wizard to install your native language
+ - other improvements
+ 1.0.1.1 - minor fixes and adjustments
+ 1.0.1.0 - minor fixes
+ - right-click on a language pack entry to uninstall a file
+ - enlarged not-included list a bit
+ - del key is shortcut for context menu item 'remove'
+ 1.0.0.0 - Initial release
+
+Translation
+----------------------
+ Translation strings for language pack maintainers can be found
+ in 'LangMan-Translation.txt' of the SDK package.
+
+License and Copyright
+----------------------
+ 'Language Pack Manager' is released under the terms of the
+ GNU General Public License.
+ See 'LangMan-License.txt' for more details.
+
+ Copyright (C) 2005-2007 by H. Herkenrath. All rights reserved.
+
+ The included unzip code for ZIP-files is
+ Copyright (C) 1995-1998 Jean-Loup Gailly and Mark Adler.
+ It is based on a modification by
+ Copyright (C) 1998 Gilles Vollant, Lucian Wischik.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ 1. Redistributions of source code must retain the copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. The origin of this software must not be misrepresented; you must
+ not claim that you wrote the original software. If you use this
+ software in a product, an acknowledgment in the product
+ documentation would be appreciated but is not required.
+ 3. Altered source versions must be plainly marked as such, and must
+ not be misrepresented as being the original software.
+ 4. The name of the author may not be used to endorse or promote
+ products derived from this software without specific prior written
+ permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR 'AS IS' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+H. Herkenrath (hrathh at users.sourceforge.net)
diff --git a/plugins/LangMan/docs/LangMan-Translation.txt b/plugins/LangMan/docs/LangMan-Translation.txt new file mode 100644 index 0000000000..70dd24253a --- /dev/null +++ b/plugins/LangMan/docs/LangMan-Translation.txt @@ -0,0 +1,293 @@ +
+Language Pack Manager 1.0.2.2 for Miranda IM 0.6+
+------------------------------------------------------------------------
+ Translator Information
+
+ Contents: -------------------------------
+ | General Info, Langpack Header,
+ | String Listing
+
+General Info
+-----------------------------
+ 'Language Pack Manager' can be translated with the Miranda IM
+ language files.
+
+ Put the following strings in a file called 'langpack_<language>.txt'
+ in the Miranda IM directory and translate them into your
+ language.
+ If you need more info on Miranda IM language files visit:
+ http://miranda.svn.sourceforge.net/viewvc/*checkout*/miranda/trunk/miranda/i18n/readme.txt
+
+Langpack Header
+-----------------------------
+ The information that is shown in the options about your
+ Language Pack file is taken from the header privided
+ in that file.
+ If you are the author of a langpack file, please make sure
+ the information you give there is accurate and does follow
+ the offical rules.
+
+ The official names of the header tags and what they specify
+ are described here:
+ http://miranda.svn.sourceforge.net/viewvc/*checkout*/miranda/trunk/miranda/i18n/readme.txt
+
+ Following, I provide a summary of the available tags and
+ I also provide some ideas on how those data could be formated.
+ You do not need to follow those suggestions, but I think it would
+ make the provided information more comfortable to read and more informative.
+
+ 'Language' header (optional):
+ A full description of the language in the file, in English, e.g.
+ 'English (UK)', 'English (US) humorous' or 'German'.
+ This field should really be in in English so everybody knows what
+ is is about. The string is translated using the current langpack
+ before it is displayed.
+ Just provide a country abbreviation in brackets if it is useful.
+ A value of 'French (fr-FR)' is not very senseful as the
+ information is duplicated in the specified locale.
+ 'German (AT)' would be a useful example.
+ Just be a bit smart ;) to find out when those brackets are
+ necessary and when not.
+ Several langpack files for the same language are possible
+ using this field, e.g.
+ 'German' pack using 'Sie' and 'German (informal)' using 'Du'.
+
+ 'Locale' header:
+ The Windows language code. A complete list is available at
+ http://msdn.microsoft.com/library/default.asp?url=/library/en-us/intl/nls_238z.asp
+ Please make sure this is a correct value. There were some
+ langpack files out there specifying the English Locale
+ instead of their own.
+
+ 'Last-Modified-Using' header:
+ Please keep this line up-to-date, containing the last version
+ of Miranda IM you made changes with, so people can compare files
+ containing the same language to see which is the most up-to-date.
+ The formatting of the value is unimportant, as long as it's human-readable.
+ However, it is more comfortable to read when all Language Packs use
+ the same format.
+ I think we could agree upon the following format: 'Miranda IM 0.6'
+ When you use an alpha build the following format fits well:
+ 'Miranda IM 0.6 alpha build #1' (as shown on 'Help'->'About' dialog).
+
+ 'Authors' header:
+ A list of people who have worked on this file.
+ When you do something, add (or move) your name to the front,
+ and put a comma (', ') between each name, e.g.
+ 'Hari Seldon, Gaal Dornick'
+ By the nature of the options dialog the place to display this value
+ is very limited.
+ Important and actively developing people should be listed first.
+ Real names should be prefered instead of just nicknames.
+
+ 'Author-email' header:
+ Should contain the e-mail of the person that last changed
+ the file only, on the assumption that that person is qualified
+ to manage the file.
+ It is enough when the user knows one single email address
+ he can write to.
+ You can use ' at ' instead of '@' to obfuscate your email address.
+
+ 'Plugins-included' header:
+ Contains a list of the plugins that are also translated in this file. It
+ should be a comma-delimited list of the plugin DLL filenames, e.g.
+ 'Plugins-included: splitmsgdialogs,import,historyp'.
+ You really should follow standards here. ;)
+ The Language Pack Manager uses this list to display a list of installed
+ plugins which are not included in this package.
+ 'miranda32' or something like that does not need to be listed here.
+ The list is case-insensitive, but it is a good idea to use exactly the same
+ case of the DLL file.
+ Just use filenames of the plugin DLLs here, e.g.
+ the plugin named 'ICQ.dll' should be listed as 'ICQ'.
+ It is a good idea to even include plugins into this list that do not have
+ any strings for translation, as for example 'png2dib.dll'.
+ The inclusion list states which plugins are fully language adapted.
+ 'png2dib' is, so it should be listed in the header.
+ Additionalliy, each plugin has at least one string to be translated:
+ the long description shown on the plugin's info page in 'Options'->Plugins'.
+
+ 'X-FLName' header (optional, non-standard extension):
+ You can add this header item for Auto-Update support.
+ It contains the name of the language pack as shown on the
+ file listing at http://addons.miranda-im.org.
+ When this tag is omitted the package needs to be listed as
+ 'xyz Language Pack' on the file listing. Whereas 'xyz' is the name
+ of the language pack as stored in the 'Language' header.
+
+ 'X-Version' header (non-standard extension):
+ You can add this header item for Auto-Update support.
+ It contains the version number of the langpack as stated on
+ the file listing at http://addons.miranda-im.org.
+
+ 'langpack_*.txt' file name:
+ To use the file, place it in the same directory as miranda32.exe,
+ and call it langpack_*.txt where * can be anything, however it is
+ recommended that it be the language.
+ It makes sense when the * part of the file name is English(!) and
+ lower case, e.g. 'langpack_chineset.txt' for the
+ 'Chinese (Traditional)' package.
+ Please avoid using any other character than a-z, 0-9 in this name
+ to keep it portable.
+ Please do not include a version number in the file name.
+ It is very hard to replace the file manually when the file name
+ changes all the time.
+
+String Listing
+-----------------------------
+
+; --- Plugin: Language Pack Manager 1.0.2.2 (German) ---
+; Translation by hrathh
+; Please report any mistakes or missing strings in here.
+
+[Language pack manager]
+Sprachdatei-Manager
+[Helps you manage Language Packs of different languages.]
+Hilft dabei Sprachdateien verschiedener Sprachen zu verwalten.
+[Language Pack Manager Plugin]
+Sprachdatei-Manager
+[The Language Pack Manager Plugin can not be loaded. It requires Miranda IM %hs or later.]
+Der Sprachdatei-Manager kann nicht geladen werden. Er benötigt Miranda IM %hs oder neuer.
+[Language Pack Update HTTP connection]
+Sprachdatei-Update HTTP-Verbindung
+
+; Options
+;[Customize]
+[Language]
+Sprachen
+[&Remove...]
+&Entfernen...
+[Installed Languages]
+Installierte Sprachen
+[File]
+Datei
+[built-in]
+enthalten
+[Author(s):]
+Autor(en):
+[E-mail:]
+E-Mail:
+[Last modified using:]
+Verwendung von:
+[Date:]
+Datum:
+;[Version:]
+;[Locale:]
+[(incompatible)]
+(inkompatibel)
+[Unknown]
+Unbekannt
+[Current]
+Aktuell
+[Not included:]
+Nicht enthalten:
+;[%hs (%s)]
+[All installed plugins are included.]
+Alle installierten Plugins sind enthalten.
+[Download more Language Packs]
+Weitere Sprachdateien herunterladen
+[Please restart Miranda IM for your changes to take effect.]
+Bitte Miranda IM neu starten, damit die Änderungen wirksam werden.
+[Check for new &versions of Language Packs periodically]
+Regelmäßig auf neue Sprachdatei-&Versionen überprüfen
+[&Download Language]
+Sprache &herunterladen
+
+; All names of the language packs can be translated
+[English (default)]
+Englisch (Standard)
+
+; Update Notify
+[Language Pack Update Now Available]
+Update für Sprachdatei ist jetzt verfügbar
+[A new version of a Language Pack is now available. Click the install button to download and install this new update.]
+Eine neue Version einer Sprachdatei ist verfügbar. Klicken Sie auf "Jetzt installieren" um das neue Update herunterzuladen und zu installieren.
+[Language:]
+Sprache:
+[Current:]
+Aktuell:
+[New:]
+Neu:
+[&Install Now]
+Jetzt &installieren
+;[Close]
+[Language Pack Update succeeded]
+Sprachdatei-Update erfolgreich
+[The language pack "%s" has been sucessfully downloaded and installed.]
+Die Sprachdatei "%s" wurde erfolgreich heruntergeladen und aktualisiert.
+[Language Pack Update failed]
+Sprachdatei-Update fehlgeschlagen
+[The language pack "%s" could not be downloaded or extracted.]
+Die Sprachdatei "%s" konnte nicht heruntergeladen oder extrahiert werden.
+
+; Download Language
+[Select your language]
+Sprache wählen
+[Miranda IM is available in many languages.\nHere is a list of all available languages of the file listing, please select your native &language:]
+Miranda IM is in vielen Sprachen verfügbar.\nEs folgt eine Liste aller verfügbaren Sprachen auf der Website. Bitte wählen Sie Ihre gewünschte &Sprache aus:
+[Download &all languages]
+&Alle Sprachen herunterladen
+[Note: This will download and install the newest language pack available for the selected language. There might be language packs from other authors available on the file listing.]
+Hinweis: Es wird die jeweils neueste Sprachdatei für die gewählte Sprache heruntergeladen. Es könnten noch weitere Sprachdateien von anderen Autoren auf der Website verfügbar sein.
+[downloading]
+downloaden
+;[OK]
+;[Cancel]
+[Language Pack Download finished]
+Sprachdatei-Download beendet
+[The download succeeded!]
+Der Download war erfolgreich!
+[The download failed!\n\nThe language pack could not be downloaded or extracted.]
+Der Download schlug fehl!\n\nDie Sprachdatei konnte nicht heruntergeladen oder extrahiert werden.
+
+; All language subcategory names on the website can be translated
+;[English (default)]
+[Chinese]
+Chinesisch
+[Portuguese]
+Portugiesisch
+[French]
+Französisch
+[Hebrew]
+Hebräisch
+[Hungarian]
+Ungarisch
+[Italian]
+Italienisch
+[Spanish]
+Spanisch
+[Ukrainian]
+Ukrainisch
+[Russian]
+Russisch
+[German]
+Deutsch
+[Dutch]
+Holländisch
+[Bulgarian]
+Bulgarisch
+[Czech]
+Tschechisch
+[Korean]
+Koreanisch
+[Polish]
+Polnisch
+[Turkish]
+Türkisch
+[Swedish]
+Schwedisch
+[Japanese]
+Japanisch
+[Belarusian]
+Weißrussisch
+[Danish]
+Dänisch
+[Finnish]
+Finnisch
+[Croatian]
+Kroatisch
+
+; ---
+
+
+H. Herkenrath (hrathh at users.sourceforge.net)
diff --git a/plugins/LangMan/langman.sln b/plugins/LangMan/langman.sln new file mode 100644 index 0000000000..c005320ebe --- /dev/null +++ b/plugins/LangMan/langman.sln @@ -0,0 +1,25 @@ +Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual Studio 2010
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "langman", "langman.vcxproj", "{F2ABCBFB-FEB8-49DF-B166-C2FA5148ACE1}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug Unicode|Win32 = Debug Unicode|Win32
+ Debug|Win32 = Debug|Win32
+ Release Unicode|Win32 = Release Unicode|Win32
+ Release|Win32 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {F2ABCBFB-FEB8-49DF-B166-C2FA5148ACE1}.Debug Unicode|Win32.ActiveCfg = Debug Unicode|Win32
+ {F2ABCBFB-FEB8-49DF-B166-C2FA5148ACE1}.Debug Unicode|Win32.Build.0 = Debug Unicode|Win32
+ {F2ABCBFB-FEB8-49DF-B166-C2FA5148ACE1}.Debug|Win32.ActiveCfg = Debug|Win32
+ {F2ABCBFB-FEB8-49DF-B166-C2FA5148ACE1}.Debug|Win32.Build.0 = Debug|Win32
+ {F2ABCBFB-FEB8-49DF-B166-C2FA5148ACE1}.Release Unicode|Win32.ActiveCfg = Release Unicode|Win32
+ {F2ABCBFB-FEB8-49DF-B166-C2FA5148ACE1}.Release Unicode|Win32.Build.0 = Release Unicode|Win32
+ {F2ABCBFB-FEB8-49DF-B166-C2FA5148ACE1}.Release|Win32.ActiveCfg = Release|Win32
+ {F2ABCBFB-FEB8-49DF-B166-C2FA5148ACE1}.Release|Win32.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/plugins/LangMan/langman.vcxproj b/plugins/LangMan/langman.vcxproj new file mode 100644 index 0000000000..0cabb458fa --- /dev/null +++ b/plugins/LangMan/langman.vcxproj @@ -0,0 +1,407 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug Unicode|Win32">
+ <Configuration>Debug Unicode</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release Unicode|Win32">
+ <Configuration>Release Unicode</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{F2ABCBFB-FEB8-49DF-B166-C2FA5148ACE1}</ProjectGuid>
+ <RootNamespace>langman</RootNamespace>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC60.props" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC60.props" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC60.props" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC60.props" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">$(SolutionDir)$(Configuration)/Plugins\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">$(SolutionDir)$(Configuration)/Obj/$(ProjectName)\</IntDir>
+ <IgnoreImportLibrary Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">true</IgnoreImportLibrary>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Configuration)/Plugins\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Configuration)/Obj/$(ProjectName)\</IntDir>
+ <IgnoreImportLibrary Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</IgnoreImportLibrary>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Configuration)/Plugins\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Configuration)/Obj/$(ProjectName)\</IntDir>
+ <IgnoreImportLibrary Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</IgnoreImportLibrary>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">$(SolutionDir)$(Configuration)/Plugins\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">$(SolutionDir)$(Configuration)/Obj/$(ProjectName)\</IntDir>
+ <IgnoreImportLibrary Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">true</IgnoreImportLibrary>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">false</LinkIncremental>
+ <IncludePath Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSdkDir)include;$(FrameworkSDKDir)\include;$(SolutionDir)\..\SVN\Miranda\Trunk\miranda\include</IncludePath>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">false</GenerateManifest>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">
+ <Midl>
+ <PreprocessorDefinitions>_DEBUG;UNICODE;_UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>Win32</TargetEnvironment>
+ <TypeLibraryName>.\temp/Debug/Unicode/langman.tlb</TypeLibraryName>
+ <HeaderFileName>
+ </HeaderFileName>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>../../include;../ExternalAPI;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_DEBUG;UNICODE;WIN32;_WINDOWS;_USRDLL;STRICT;LANGMAN_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BrowseInformation>true</BrowseInformation>
+ <WarningLevel>Level4</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <PrecompiledHeaderFile>common.h</PrecompiledHeaderFile>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>_DEBUG;UNICODE;_UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0809</Culture>
+ <AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ </ResourceCompile>
+ <Link>
+ <AdditionalDependencies>comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <IgnoreSpecificDefaultLibraries>uuid.lib;OLDNAMES;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <GenerateMapFile>true</GenerateMapFile>
+ <BaseAddress>0x24100000</BaseAddress>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ <Bscmake>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Bscmake>
+ <PreBuildEvent />
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Midl>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>Win32</TargetEnvironment>
+ <TypeLibraryName>.\temp/Debug/ANSI/langman.tlb</TypeLibraryName>
+ <HeaderFileName>
+ </HeaderFileName>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>../../include;../ExternalAPI;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_DEBUG;WIN32;_WINDOWS;_USRDLL;STRICT;LANGMAN_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <BrowseInformation>true</BrowseInformation>
+ <WarningLevel>Level4</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <PrecompiledHeaderFile>common.h</PrecompiledHeaderFile>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0809</Culture>
+ <AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ </ResourceCompile>
+ <Link>
+ <AdditionalDependencies>comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <IgnoreSpecificDefaultLibraries>uuid.lib;OLDNAMES;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <GenerateMapFile>true</GenerateMapFile>
+ <BaseAddress>0x24100000</BaseAddress>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ <Bscmake>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Bscmake>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Midl>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>Win32</TargetEnvironment>
+ <TypeLibraryName>.\temp/Release/ANSI/langman.tlb</TypeLibraryName>
+ <HeaderFileName>
+ </HeaderFileName>
+ </Midl>
+ <ClCompile>
+ <AdditionalOptions>/opt:nowin98 %(AdditionalOptions)</AdditionalOptions>
+ <Optimization>Full</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <AdditionalIncludeDirectories>../../include;../ExternalAPI;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>NDEBUG;WIN32;_WINDOWS;_USRDLL;STRICT;LANGMAN_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <BrowseInformation>true</BrowseInformation>
+ <WarningLevel>Level4</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <PrecompiledHeaderFile>common.h</PrecompiledHeaderFile>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0809</Culture>
+ <AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ </ResourceCompile>
+ <Link>
+ <AdditionalOptions>/ignore:4078 %(AdditionalOptions)</AdditionalOptions>
+ <AdditionalDependencies>comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <IgnoreSpecificDefaultLibraries>uuid.lib;OLDNAMES;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <GenerateMapFile>true</GenerateMapFile>
+ <SetChecksum>true</SetChecksum>
+ <BaseAddress>0x24100000</BaseAddress>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
+ <TargetMachine>MachineX86</TargetMachine>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
+ </Link>
+ <Bscmake>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Bscmake>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">
+ <Midl>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>Win32</TargetEnvironment>
+ <TypeLibraryName>.\temp/Release/Unicode/langman.tlb</TypeLibraryName>
+ <HeaderFileName>
+ </HeaderFileName>
+ </Midl>
+ <ClCompile>
+ <Optimization>Full</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <AdditionalIncludeDirectories>../../include;../ExternalAPI;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>NDEBUG;UNICODE;WIN32;_WINDOWS;_USRDLL;STRICT;LANGMAN_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <FunctionLevelLinking>false</FunctionLevelLinking>
+ <EnableEnhancedInstructionSet>NotSet</EnableEnhancedInstructionSet>
+ <XMLDocumentationFileName>$(IntDir)</XMLDocumentationFileName>
+ <BrowseInformation>false</BrowseInformation>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <FloatingPointModel>Fast</FloatingPointModel>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <RuntimeTypeInfo>false</RuntimeTypeInfo>
+ <FloatingPointExceptions>false</FloatingPointExceptions>
+ <CompileAsManaged>false</CompileAsManaged>
+ <ExceptionHandling>false</ExceptionHandling>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <PrecompiledHeaderFile>common.h</PrecompiledHeaderFile>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;UNICODE;_UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0809</Culture>
+ <AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ </ResourceCompile>
+ <Link>
+ <AdditionalDependencies>comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <IgnoreSpecificDefaultLibraries>uuid.lib;OLDNAMES;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <GenerateMapFile>false</GenerateMapFile>
+ <SetChecksum>true</SetChecksum>
+ <BaseAddress>0x24100000</BaseAddress>
+ <RandomizedBaseAddress>true</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
+ <TargetMachine>MachineX86</TargetMachine>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
+ </Link>
+ <Bscmake>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Bscmake>
+ <Xdcmake>
+ <OutputFile>$(IntDir)$(TargetName).xml</OutputFile>
+ </Xdcmake>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="langpack.c">
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <UndefinePreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">%(UndefinePreprocessorDefinitions)</UndefinePreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <UndefinePreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(UndefinePreprocessorDefinitions)</UndefinePreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <UndefinePreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">%(UndefinePreprocessorDefinitions)</UndefinePreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <UndefinePreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(UndefinePreprocessorDefinitions)</UndefinePreprocessorDefinitions>
+ </ClCompile>
+ <ClCompile Include="main.c">
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <UndefinePreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">%(UndefinePreprocessorDefinitions)</UndefinePreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <UndefinePreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(UndefinePreprocessorDefinitions)</UndefinePreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <UndefinePreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">%(UndefinePreprocessorDefinitions)</UndefinePreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <UndefinePreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(UndefinePreprocessorDefinitions)</UndefinePreprocessorDefinitions>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Create</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">Create</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
+ </ClCompile>
+ <ClCompile Include="options.c">
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <UndefinePreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">%(UndefinePreprocessorDefinitions)</UndefinePreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <UndefinePreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(UndefinePreprocessorDefinitions)</UndefinePreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <UndefinePreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">%(UndefinePreprocessorDefinitions)</UndefinePreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <UndefinePreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(UndefinePreprocessorDefinitions)</UndefinePreprocessorDefinitions>
+ </ClCompile>
+ <ClCompile Include="utils.c">
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <UndefinePreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">%(UndefinePreprocessorDefinitions)</UndefinePreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <UndefinePreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(UndefinePreprocessorDefinitions)</UndefinePreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <UndefinePreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">%(UndefinePreprocessorDefinitions)</UndefinePreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <UndefinePreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(UndefinePreprocessorDefinitions)</UndefinePreprocessorDefinitions>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="common.h" />
+ <ClInclude Include="langpack.h" />
+ <ClInclude Include="m_langman.h" />
+ <ClInclude Include="options.h" />
+ <ClInclude Include="utils.h" />
+ <ClInclude Include="resource.h" />
+ <ClInclude Include="version.h" />
+ <ClInclude Include="include\m_clist.h" />
+ <ClInclude Include="include\m_database.h" />
+ <ClInclude Include="include\m_flags.h" />
+ <ClInclude Include="include\m_help.h" />
+ <ClInclude Include="include\m_icolib.h" />
+ <ClInclude Include="include\m_langpack.h" />
+ <ClInclude Include="include\m_netlib.h" />
+ <ClInclude Include="include\m_options.h" />
+ <ClInclude Include="include\m_plugins.h" />
+ <ClInclude Include="include\m_skin.h" />
+ <ClInclude Include="include\m_system.h" />
+ <ClInclude Include="include\m_utils.h" />
+ <ClInclude Include="include\newpluginapi.h" />
+ <ClInclude Include="include\statusmodes.h" />
+ <ClInclude Include="include\win2k.h" />
+ </ItemGroup>
+ <ItemGroup>
+ <ResourceCompile Include="resource.rc">
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ </ResourceCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="docs\LangMan-Developer.txt" />
+ <None Include="docs\LangMan-License.txt" />
+ <None Include="docs\LangMan-Readme.txt" />
+ <None Include="docs\LangMan-Translation.txt" />
+ <None Include="m_langman.inc" />
+ <None Include="Info_Src.txt" />
+ <None Include="License_Appendix.txt" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
\ No newline at end of file diff --git a/plugins/LangMan/langman.vcxproj.filters b/plugins/LangMan/langman.vcxproj.filters new file mode 100644 index 0000000000..05ea25b63c --- /dev/null +++ b/plugins/LangMan/langman.vcxproj.filters @@ -0,0 +1,131 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{3713035e-f4de-4b1b-8c15-b86c77bd853c}</UniqueIdentifier>
+ <Extensions>cpp;c;cxx;rc;def;r;odl;idl;hpj;bat</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{a70dee03-4c9e-4cc9-ba2d-8bd243a18bf6}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl</Extensions>
+ </Filter>
+ <Filter Include="Resource Files">
+ <UniqueIdentifier>{835877bf-050d-4034-b3fb-78e456d60765}</UniqueIdentifier>
+ <Extensions>ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe</Extensions>
+ </Filter>
+ <Filter Include="Documentation">
+ <UniqueIdentifier>{b84ecfeb-8124-4339-b93d-5acdd3d205d9}</UniqueIdentifier>
+ <Extensions>*.txt</Extensions>
+ </Filter>
+ <Filter Include="SDK">
+ <UniqueIdentifier>{515684a1-c0d8-47e1-8a93-d714f9d40790}</UniqueIdentifier>
+ <Extensions>c;h</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="langpack.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="main.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="options.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="utils.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="common.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="langpack.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="m_langman.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="options.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="utils.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="resource.h">
+ <Filter>Resource Files</Filter>
+ </ClInclude>
+ <ClInclude Include="version.h">
+ <Filter>Resource Files</Filter>
+ </ClInclude>
+ <ClInclude Include="include\m_clist.h">
+ <Filter>SDK</Filter>
+ </ClInclude>
+ <ClInclude Include="include\m_database.h">
+ <Filter>SDK</Filter>
+ </ClInclude>
+ <ClInclude Include="include\m_flags.h">
+ <Filter>SDK</Filter>
+ </ClInclude>
+ <ClInclude Include="include\m_help.h">
+ <Filter>SDK</Filter>
+ </ClInclude>
+ <ClInclude Include="include\m_icolib.h">
+ <Filter>SDK</Filter>
+ </ClInclude>
+ <ClInclude Include="include\m_langpack.h">
+ <Filter>SDK</Filter>
+ </ClInclude>
+ <ClInclude Include="include\m_netlib.h">
+ <Filter>SDK</Filter>
+ </ClInclude>
+ <ClInclude Include="include\m_options.h">
+ <Filter>SDK</Filter>
+ </ClInclude>
+ <ClInclude Include="include\m_plugins.h">
+ <Filter>SDK</Filter>
+ </ClInclude>
+ <ClInclude Include="include\m_skin.h">
+ <Filter>SDK</Filter>
+ </ClInclude>
+ <ClInclude Include="include\m_system.h">
+ <Filter>SDK</Filter>
+ </ClInclude>
+ <ClInclude Include="include\m_utils.h">
+ <Filter>SDK</Filter>
+ </ClInclude>
+ <ClInclude Include="include\newpluginapi.h">
+ <Filter>SDK</Filter>
+ </ClInclude>
+ <ClInclude Include="include\statusmodes.h">
+ <Filter>SDK</Filter>
+ </ClInclude>
+ <ClInclude Include="include\win2k.h">
+ <Filter>SDK</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <ResourceCompile Include="resource.rc">
+ <Filter>Resource Files</Filter>
+ </ResourceCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="docs\LangMan-Developer.txt">
+ <Filter>Documentation</Filter>
+ </None>
+ <None Include="docs\LangMan-License.txt">
+ <Filter>Documentation</Filter>
+ </None>
+ <None Include="docs\LangMan-Readme.txt">
+ <Filter>Documentation</Filter>
+ </None>
+ <None Include="docs\LangMan-Translation.txt">
+ <Filter>Documentation</Filter>
+ </None>
+ <None Include="m_langman.inc">
+ <Filter>Documentation</Filter>
+ </None>
+ <None Include="Info_Src.txt" />
+ <None Include="License_Appendix.txt" />
+ </ItemGroup>
+</Project>
\ No newline at end of file diff --git a/plugins/LangMan/langpack.c b/plugins/LangMan/langpack.c new file mode 100644 index 0000000000..6ce827c71a --- /dev/null +++ b/plugins/LangMan/langpack.c @@ -0,0 +1,456 @@ +/*
+
+'Language Pack Manager'-Plugin for Miranda IM
+
+Copyright (C) 2005-2007 H. Herkenrath
+
+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 (LangMan-License.txt); if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+*/
+
+#include "common.h"
+
+/************************* Load ***************************************/
+
+static void TrimString(char *str)
+{
+ int len,start;
+ len = lstrlenA(str);
+ while (str[0]!='\0' && (unsigned char)str[len-1]<=' ') str[--len]=0;
+ for (start=0; str[start] && (unsigned char)str[start]<=' '; ++start);
+ MoveMemory(str,str+start,len-start+1);
+}
+
+static BOOL IsEmpty(const char *str)
+{
+ int i;
+ for(i=0;str[i]!='\0';i++)
+ if(str[i]!=' ' && str[i]!='\r' && str[i]!='\n')
+ return FALSE;
+ return TRUE;
+}
+
+static void CleanupLanguage(char *szLanguage)
+{
+ char *p;
+ /* remove any appended ' (default)' */
+ p=strstr(szLanguage," (default)");
+ if(p!=NULL) *p='\0';
+}
+
+static void CleanupAuthors(char *szAuthors)
+{
+ char *p,*p2;
+ /* remove trailing dot (if any) */
+ p=&szAuthors[lstrlenA(szAuthors)-1];
+ if(*p=='.') *p='\0';
+ /* remove any extra info in parentheses, which is ok
+ * but makes the list very long for some packs */
+ for(;;) {
+ p=strchr(szAuthors,'(');
+ p2=strchr(szAuthors,')');
+ if(p==NULL || p2==NULL) {
+ p=strchr(szAuthors,'[');
+ p2=strchr(szAuthors,']');
+ if(p==NULL || p2==NULL) break;
+ }
+ if(*(p-1)==' ') --p;
+ MoveMemory(p,p2+1,lstrlenA(p2+1)+1);
+ }
+}
+
+static void CleanupEmail(char *szAuthorEmail)
+{
+ char c,*p,*pAt;
+ /* replace ' dot ' with '.' (may be removed) */
+ p=strstr(szAuthorEmail," dot ");
+ if(p!=NULL) {
+ *p='.';
+ MoveMemory(p+1,p+5,lstrlenA(p+5)+1);
+ }
+ /* also allow ' at ' instead of '@' for obfuscation */
+ p=strstr(szAuthorEmail," at ");
+ if(p!=NULL) {
+ *p='@';
+ MoveMemory(p+1,p+4,lstrlenA(p+4)+1);
+ }
+ /* is valid? */
+ pAt=strchr(szAuthorEmail,'@');
+ if(pAt==NULL) {
+ szAuthorEmail[0]='\0';
+ return;
+ }
+ /* strip-off extra text except exactly one email address
+ * this is needed as a click on the email addres brings up the mail client */
+ for(c=' ';;c=',') {
+ p=strchr(pAt,c);
+ if(p!=NULL) *p='\0';
+ p=strrchr(szAuthorEmail,c);
+ if(p!=NULL) MoveMemory(szAuthorEmail,p+1,lstrlenA(p+1)+1);
+ if(c==',') break;
+ }
+ p=strstr(szAuthorEmail,"__");
+ if(p!=NULL) MoveMemory(szAuthorEmail,p+2,lstrlenA(p+2)+1);
+ /* lower case */
+ CharLowerA(szAuthorEmail);
+ /* 'none' specified */
+ if(!lstrcmpiA(szAuthorEmail,"none")) szAuthorEmail[0]='\0';
+}
+
+static void CleanupLastModifiedUsing(char *szLastModifiedUsing,int nSize)
+{
+ char *p;
+ /* remove 'Unicode', as it doesn't matter */
+ p=strstr(szLastModifiedUsing," Unicode");
+ if(p!=NULL) MoveMemory(p,p+8,lstrlenA(p+8)+1);
+ /* use 'Miranda IM' instead of 'Miranda' */
+ p=strstr(szLastModifiedUsing,"Miranda");
+ if(p!=NULL && strncmp(p+7," IM",3)) {
+ MoveMemory(p+10,p+7,lstrlenA(p+7)+1);
+ CopyMemory(p+7," IM",3);
+ }
+ /* use 'Plugin' instead of 'plugin' */
+ p=strstr(szLastModifiedUsing," plugin");
+ if(p!=NULL) CopyMemory(p," Plugin",7);
+ /* remove 'v' prefix */
+ p=strstr(szLastModifiedUsing," v0.");
+ if(p!=NULL) MoveMemory(p+1,p+2,lstrlenA(p+2)+1);
+ /* default if empty */
+ if(!szLastModifiedUsing[0]) {
+ lstrcpynA(szLastModifiedUsing,MIRANDANAME" ",nSize);
+ CallService(MS_SYSTEM_GETVERSIONTEXT,nSize-lstrlenA(szLastModifiedUsing),(LPARAM)szLastModifiedUsing+lstrlenA(szLastModifiedUsing));
+ }
+}
+
+// pack struct should be initialized to zero before call
+// pack->szFileName needs to be filled in before call
+static BOOL LoadPackData(LANGPACK_INFO *pack,BOOL fEnabledPacks,const char *pszFileVersionHeader)
+{
+ FILE *fp;
+ TCHAR szFileName[MAX_PATH];
+ char line[4096],*pszColon,*buf;
+ char szLanguageA[64]; /* same size as pack->szLanguage */
+ /*
+ Miranda Language Pack Version 1
+ Language: (optional)
+ Locale: 0809
+ Authors: Miranda IM Development Team (multiple tags allowed)
+ Author-email: project-info at miranda-im.org (" at " instead of "@" allowed)
+ Last-Modified-Using: Miranda IM 0.7
+ Plugins-included: (multiple tags allowed)
+ X-FLName: name as used on the file listing (non-standard extension)
+ X-Version: 1.2.3.4 (non-standard extension)
+ see 'LangMan-Translation.txt' for some header quidelines
+ */
+ if ( !GetPackPath( szFileName, SIZEOF(szFileName), fEnabledPacks, pack->szFileName))
+ return FALSE;
+
+ fp = _tfopen(szFileName,_T("rt"));
+ if (fp == NULL)
+ return FALSE;
+
+ fgets(line, sizeof(line), fp);
+ TrimString(line);
+ buf = line;
+
+ if (strlen(line) >= 3 && line[0] == '\xef' && line[1] == '\xbb' && line[2] == '\xbf') {
+ pack->codepage = CP_UTF8;
+ buf += 3;
+ }
+
+ if ( lstrcmpA(buf, pszFileVersionHeader )) {
+ fclose(fp);
+ return FALSE;
+ }
+ pack->flags = LPF_NOLOCALE;
+ szLanguageA[0] = '\0';
+ while( !feof( fp )) {
+ if ( fgets(line, sizeof(line), fp) == NULL) break;
+ TrimString(line);
+ if ( IsEmpty(line) || line[0]==';' || line[0]=='\0') continue;
+ if ( line[0]=='[' ) break;
+ pszColon = strchr(line,':');
+ if ( pszColon == NULL ) continue;
+ *pszColon = '\0';
+ TrimString(pszColon+1);
+ if ( !lstrcmpA(line,"Language") && !pack->szLanguage[0] )
+ lstrcpynA(szLanguageA, pszColon+1, sizeof(szLanguageA)); /* buffer safe */
+ else if ( !lstrcmpA(line, "Last-Modified-Using") && !pack->szLastModifiedUsing[0] )
+ lstrcpynA(pack->szLastModifiedUsing, pszColon+1, sizeof(pack->szLastModifiedUsing)); /* buffer safe */
+ else if ( !lstrcmpA(line, "Authors")) {
+ buf=pack->szAuthors+lstrlenA(pack->szAuthors); /* allow multiple tags */
+ if((sizeof(pack->szAuthors)-lstrlenA(pack->szAuthors))>0) /* buffer safe */
+ mir_snprintf(buf,sizeof(pack->szAuthors)-lstrlenA(pack->szAuthors),(pack->szAuthors[0]=='\0')?"%s":" %s",pszColon+1);
+ } else if ( !lstrcmpA(line, "Author-email") && !pack->szAuthorEmail[0])
+ lstrcpynA(pack->szAuthorEmail, pszColon+1, sizeof(pack->szAuthorEmail)); /* buffer safe */
+ else if ( !lstrcmpA(line,"Locale") && (pack->flags & LPF_NOLOCALE)) {
+ pack->Locale = MAKELCID((USHORT)strtol(pszColon+1, NULL, 16), SORT_DEFAULT);
+ if(pack->Locale) pack->flags &= ~LPF_NOLOCALE;
+ }
+ else if ( !lstrcmpA(line,"Plugins-included")) {
+ buf = pack->szPluginsIncluded + lstrlenA(pack->szPluginsIncluded); /* allow multiple tags */
+ if (( sizeof(pack->szPluginsIncluded)-lstrlenA(pack->szPluginsIncluded)) > 0 ) /* buffer safe */
+ mir_snprintf(buf, sizeof(pack->szPluginsIncluded)-lstrlenA(pack->szPluginsIncluded),(pack->szPluginsIncluded[0]=='\0')?"%s":", %s",CharLowerA(pszColon+1));
+ }
+ else if ( !lstrcmpA(line,"X-Version") && !pack->szVersion[0] )
+ lstrcpynA(pack->szVersion, pszColon+1, sizeof(pack->szVersion)); /* buffer safe */
+ else if ( !lstrcmpA(line,"X-FLName") && !pack->szFLName[0] )
+ lstrcpynA(pack->szFLName, pszColon+1, sizeof(pack->szFLName)); /* buffer safe */
+ }
+ CleanupLanguage(szLanguageA);
+ CleanupAuthors(pack->szAuthors);
+ CleanupEmail(pack->szAuthorEmail);
+ CleanupLastModifiedUsing(pack->szLastModifiedUsing,sizeof(pack->szLastModifiedUsing));
+ /* codepage */
+ if(!(pack->flags&LPF_NOLOCALE))
+ if(GetLocaleInfoA(pack->Locale,LOCALE_IDEFAULTANSICODEPAGE,line,6))
+ pack->codepage=(WORD)atoi(line); /* CP_ACP on error */
+ /* language */
+#if defined(_UNICODE)
+ MultiByteToWideChar(pack->codepage,0,szLanguageA,-1,pack->szLanguage,SIZEOF(pack->szLanguage));
+#else
+ lstrcpyA(pack->szLanguage,szLanguageA); /* buffer safe */
+#endif
+ /* ensure the pack always has a language name */
+ if(!pack->szLanguage[0] && !GetLocaleInfo(pack->Locale,LOCALE_SENGLANGUAGE,pack->szLanguage,SIZEOF(pack->szLanguage))) {
+ TCHAR *p;
+ lstrcpyn(pack->szLanguage,pack->szFileName,SIZEOF(pack->szLanguage)); /* buffer safe */
+ p=_tcsrchr(pack->szLanguage,_T('.'));
+ if(p!=NULL) *p='\0';
+ }
+ /* ensure the pack always has a filelisting name */
+ if(!pack->szFLName[0])
+ lstrcatA(lstrcpyA(pack->szFLName,szLanguageA)," Language Pack"); /* buffer safe */
+ fclose(fp);
+ return TRUE;
+}
+
+/************************* Enum ***************************************/
+
+BOOL GetPackPath(TCHAR *pszPath,int nSize,BOOL fEnabledPacks,const TCHAR *pszFile)
+{
+ TCHAR *p;
+ /* main path */
+ if(!GetModuleFileName(NULL,pszPath,nSize)) return FALSE;
+ p=_tcsrchr(pszPath,_T('\\'));
+ if(p!=NULL) *(p+1)=_T('\0');
+ /* subdirectory */
+ if(!fEnabledPacks) {
+ if(nSize<(lstrlen(pszPath)+10)) return FALSE;
+ lstrcat(pszPath,_T("Plugins\\Language\\"));
+ }
+ /* file name */
+ if(pszFile!=NULL) {
+ if(nSize<(lstrlen(pszFile)+11)) return FALSE;
+ lstrcat(pszPath,pszFile);
+ }
+ return TRUE;
+}
+
+// callback is allowed to be NULL
+// returns TRUE if any pack exists except default
+BOOL EnumPacks(ENUM_PACKS_CALLBACK callback,const TCHAR *pszFilePattern,const char *pszFileVersionHeader,BOOL fEnglishDefault,WPARAM wParam,LPARAM lParam)
+{
+ BOOL fPackFound=FALSE;
+ BOOL res=FALSE;
+ LANGPACK_INFO pack;
+ WIN32_FIND_DATA wfd;
+ HANDLE hFind;
+
+ /* enabled packs */
+ if(GetPackPath(pack.szFileName,SIZEOF(pack.szFileName),TRUE,pszFilePattern)) {
+ hFind=FindFirstFile(pack.szFileName,&wfd);
+ if(hFind!=INVALID_HANDLE_VALUE) {
+ do {
+ if(wfd.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY) continue;
+ if((lstrlen(wfd.cFileName)<4) || wfd.cFileName[lstrlen(wfd.cFileName)-4]!=_T('.')) continue;
+ /* get data */
+ ZeroMemory(&pack,sizeof(pack));
+ lstrcpy(pack.szFileName,CharLower(wfd.cFileName)); /* buffer safe */
+ if(LoadPackData(&pack,TRUE,pszFileVersionHeader)) {
+ pack.ftFileDate=wfd.ftLastWriteTime;
+ /* enabled? */
+ if(!fPackFound) pack.flags|=LPF_ENABLED;
+ fPackFound=TRUE;
+ /* callback */
+ if(callback!=NULL) res=callback(&pack,wParam,lParam);
+ if(!res) { FindClose(hFind); return FALSE; }
+ }
+ } while(FindNextFile(hFind,&wfd));
+ FindClose(hFind);
+ }
+ }
+
+ /* default: English (GB) */
+ if(fEnglishDefault && callback!=NULL) {
+ ZeroMemory(&pack,sizeof(pack));
+ pack.Locale=LOCALE_USER_DEFAULT; /* miranda uses default locale in this case */
+ lstrcpy(pack.szLanguage,_T("English (default)")); /* buffer safe */
+ lstrcpyA(pack.szAuthors,"Miranda IM Development Team"); /* buffer safe */
+ lstrcpyA(pack.szAuthorEmail,"project-info at miranda-im.org"); /* buffer safe */
+ CleanupEmail(pack.szAuthorEmail); /* correct " at " */
+ CleanupLastModifiedUsing(pack.szLastModifiedUsing,sizeof(pack.szLastModifiedUsing));
+ /* file date */
+ if(GetModuleFileName(NULL,pack.szFileName,SIZEOF(pack.szFileName))) {
+ HANDLE hFile;
+ hFile=CreateFile(pack.szFileName,0,FILE_SHARE_READ,0,OPEN_EXISTING,0,0);
+ if(hFile!=INVALID_HANDLE_VALUE) {
+ GetFileTime(hFile,NULL,NULL,&pack.ftFileDate);
+ CloseHandle(hFile);
+ }
+ }
+ pack.flags=LPF_NOLOCALE|LPF_DEFAULT;
+ if(!fPackFound) pack.flags|=LPF_ENABLED;
+ /* callback */
+ if(!callback(&pack,wParam,lParam)) return FALSE;
+ }
+
+ /* disabled packs */
+ if(GetPackPath(pack.szFileName,SIZEOF(pack.szFileName),FALSE,pszFilePattern)) {
+ hFind=FindFirstFile(pack.szFileName, &wfd);
+ if(hFind!=INVALID_HANDLE_VALUE) {
+ do {
+ if(wfd.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY) continue;
+ if(lstrlen(wfd.cFileName)<4 || wfd.cFileName[lstrlen(wfd.cFileName)-4]!=_T('.')) continue;
+ /* get data */
+ ZeroMemory(&pack,sizeof(pack));
+ lstrcpy(pack.szFileName,CharLower(wfd.cFileName)); /* buffer safe */
+ if(LoadPackData(&pack,FALSE,pszFileVersionHeader)) {
+ pack.ftFileDate=wfd.ftLastWriteTime;
+ fPackFound=TRUE;
+ /* callback */
+ if(callback!=NULL) res=callback(&pack,wParam,lParam);
+ if(!res) { FindClose(hFind); return FALSE; }
+ }
+ } while(FindNextFile(hFind,&wfd));
+ FindClose(hFind);
+ }
+ }
+ return fPackFound;
+}
+
+BOOL IsPluginIncluded(const LANGPACK_INFO *pack,char *pszFileBaseName)
+{
+ char *p;
+ if(!lstrcmpiA(pszFileBaseName,"png2dib") || !lstrcmpiA(pszFileBaseName,"loadavatars"))
+ return TRUE; /* workaround: does not need no translation */
+ for(p=(char*)pack->szPluginsIncluded;;) {
+ p=strstr(p,CharLowerA(pszFileBaseName));
+ if(p==NULL) return FALSE;
+ if(p==pack->szPluginsIncluded || *(p-1)==' ' || *(p-1)==',') {
+ p+=lstrlenA(pszFileBaseName)+1;
+ if(*p==',' || *p==' ' || *p==0) return TRUE;
+ }
+ else p+=lstrlenA(pszFileBaseName)+1;
+ }
+}
+
+/************************* Switch *************************************/
+
+BOOL EnablePack(const LANGPACK_INFO *pack,const TCHAR *pszFilePattern)
+{
+ TCHAR szFrom[MAX_PATH],szDest[MAX_PATH];
+ HANDLE hFind;
+ WIN32_FIND_DATA wfd;
+
+ /* disable previous pack */
+ if(GetPackPath(szFrom,SIZEOF(szFrom),TRUE,pszFilePattern)) {
+ hFind=FindFirstFile(szFrom,&wfd);
+ if(hFind!=INVALID_HANDLE_VALUE) {
+ do {
+ if(wfd.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY) continue;
+ if(lstrlen(wfd.cFileName)<4 || wfd.cFileName[lstrlen(wfd.cFileName)-4]!=_T('.')) continue;
+ /* ensure dir exists */
+ if(GetPackPath(szFrom,SIZEOF(szFrom),FALSE,NULL))
+ CreateDirectory(szFrom,NULL);
+ /* move file */
+ if(GetPackPath(szFrom,SIZEOF(szFrom),TRUE,wfd.cFileName))
+ if(GetPackPath(szDest,SIZEOF(szDest),FALSE,wfd.cFileName))
+ if(!MoveFile(szFrom,szDest) && GetLastError()==ERROR_ALREADY_EXISTS) {
+ DeleteFile(szDest);
+ MoveFile(szFrom,szDest);
+ }
+ break;
+ } while(FindNextFile(hFind,&wfd));
+ FindClose(hFind);
+ }
+ }
+
+ /* enable current pack */
+ if(pack->flags&LPF_DEFAULT) return TRUE;
+ if(GetPackPath(szFrom,SIZEOF(szFrom),FALSE,pack->szFileName))
+ if(GetPackPath(szDest,SIZEOF(szDest),TRUE,pack->szFileName))
+ return MoveFile(szFrom,szDest);
+ return FALSE;
+}
+
+void CorrectPacks(const TCHAR *pszFilePattern,BOOL fDisableAll)
+{
+ TCHAR szFrom[MAX_PATH],szDest[MAX_PATH],szDir[MAX_PATH],*pszFile;
+ BOOL fDirCreated=FALSE;
+ HANDLE hFind;
+ WIN32_FIND_DATA wfd;
+
+ /* main path */
+ if(!GetModuleFileName(NULL,szDir,SIZEOF(szDir))) return;
+ pszFile=_tcsrchr(szDir,_T('\\'));
+ if(pszFile!=NULL) *pszFile=_T('\0');
+
+ /* move wrongly placed packs from 'Plugins' to 'Language' */
+ mir_sntprintf(szFrom,SIZEOF(szFrom),_T("%s\\Plugins\\%s"),szDir,pszFilePattern);
+ hFind=FindFirstFile(szFrom,&wfd);
+ if(hFind!=INVALID_HANDLE_VALUE) {
+ do {
+ if(wfd.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY) continue;
+ if(lstrlen(wfd.cFileName)<4 || wfd.cFileName[lstrlen(wfd.cFileName)-4]!=_T('.')) continue;
+ /* ensure dir exists */
+ if(!fDirCreated && GetPackPath(szFrom,SIZEOF(szFrom),FALSE,NULL))
+ fDirCreated=CreateDirectory(szFrom,NULL);
+ /* move file */
+ if(GetPackPath(szDest,SIZEOF(szDest),FALSE,wfd.cFileName)) {
+ mir_sntprintf(szFrom,SIZEOF(szFrom),_T("%s\\Plugins\\%s"),szDir,wfd.cFileName);
+ if(!MoveFile(szFrom,szDest) && GetLastError()==ERROR_ALREADY_EXISTS) {
+ DeleteFile(szDest);
+ MoveFile(szFrom,szDest);
+ }
+ }
+ } while(FindNextFile(hFind,&wfd));
+ FindClose(hFind);
+ }
+
+ /* disable all packs except one */
+ if(GetPackPath(szFrom,SIZEOF(szFrom),TRUE,pszFilePattern)) {
+ hFind=FindFirstFile(szFrom,&wfd);
+ if(hFind!=INVALID_HANDLE_VALUE) {
+ do {
+ if(wfd.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY) continue;
+ if(lstrlen(wfd.cFileName)<4 || wfd.cFileName[lstrlen(wfd.cFileName)-4]!=_T('.')) continue;
+ /* skip first file */
+ if(!fDisableAll) { fDisableAll=TRUE; continue; }
+ /* ensure dir exists */
+ if(!fDirCreated && GetPackPath(szFrom,SIZEOF(szFrom),FALSE,NULL))
+ fDirCreated=CreateDirectory(szFrom,NULL);
+ /* move file */
+ if(GetPackPath(szFrom,SIZEOF(szFrom),TRUE,wfd.cFileName))
+ if(GetPackPath(szDest,SIZEOF(szDest),FALSE,wfd.cFileName)) {
+ if(!MoveFile(szFrom,szDest) && GetLastError()==ERROR_ALREADY_EXISTS) {
+ DeleteFile(szDest);
+ MoveFile(szFrom,szDest);
+ }
+ }
+ } while(FindNextFile(hFind,&wfd));
+ FindClose(hFind);
+ }
+ }
+}
\ No newline at end of file diff --git a/plugins/LangMan/langpack.h b/plugins/LangMan/langpack.h new file mode 100644 index 0000000000..17e3f26d1d --- /dev/null +++ b/plugins/LangMan/langpack.h @@ -0,0 +1,49 @@ +/*
+
+'Language Pack Manager'-Plugin for Miranda IM
+
+Copyright (C) 2005-2007 H. Herkenrath
+
+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 (LangMan-License.txt); if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+*/
+
+/* Langpack Info */
+typedef struct {
+ TCHAR szLanguage[64];
+ LCID Locale;
+ WORD codepage;
+ char szAuthors[1024];
+ char szAuthorEmail[128];
+ char szLastModifiedUsing[64];
+ char szPluginsIncluded[4080];
+ char szVersion[21];
+ char szFLName[128];
+ FILETIME ftFileDate;
+ TCHAR szFileName[MAX_PATH]; /* just the file name itself */
+ BYTE flags; /* see LPIF_* flags */
+} LANGPACK_INFO;
+#define LPF_ENABLED 0x01 // pack is enabled
+#define LPF_NOLOCALE 0x02 // pack has no valid locale
+#define LPF_DEFAULT 0x04 // pack is the english default (no langpack)
+
+/* Enum */
+BOOL GetPackPath(TCHAR *pszPath,int nSize,BOOL fEnabledPacks,const TCHAR *pszFile);
+typedef BOOL (*ENUM_PACKS_CALLBACK)(LANGPACK_INFO *pack,WPARAM wParam,LPARAM lParam);
+BOOL EnumPacks(ENUM_PACKS_CALLBACK callback,const TCHAR *pszFilePattern,const char *pszFileVersionHeader,BOOL fEnglishDefault,WPARAM wParam,LPARAM lParam);
+BOOL IsPluginIncluded(const LANGPACK_INFO *pack,char *pszFileBaseName);
+
+/* Switch */
+BOOL EnablePack(const LANGPACK_INFO *pack,const TCHAR *pszFilePattern);
+void CorrectPacks(const TCHAR *pszFilePattern,BOOL fDisableAll);
diff --git a/plugins/LangMan/main.c b/plugins/LangMan/main.c new file mode 100644 index 0000000000..2061a57098 --- /dev/null +++ b/plugins/LangMan/main.c @@ -0,0 +1,172 @@ +/*
+
+'Language Pack Manager'-Plugin for Miranda IM
+
+Copyright (C) 2005-2007 H. Herkenrath
+
+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 (LangMan-License.txt); if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+*/
+
+#include "common.h"
+#include "version.h"
+
+HINSTANCE hInst;
+PLUGINLINK *pluginLink;
+struct MM_INTERFACE mmi;
+static HANDLE hHookModulesLoaded;
+int hLangpack;
+
+static char szEmail[100] = PLUGIN_EMAIL;
+
+static PLUGININFOEX pluginInfo={
+ sizeof(PLUGININFOEX),
+ "Language Pack Manager",
+ PLUGIN_VERSION,
+#if defined(_DEBUG)
+ "Development build not intended for release. ("__DATE__")", /* autotranslated */
+#else
+ "Helps you manage Language Packs of different languages.", /* autotranslated */
+#endif
+ "H. Herkenrath",
+ szEmail, /* @ will be set later */
+ "© 2005-2007 H. Herkenrath",
+ PLUGIN_WEBSITE,
+ UNICODE_AWARE,
+ 0,
+#if defined(_UNICODE)
+ // {D4BDD1EB-56F1-4a87-A187-67246EE919A2}
+ {0xd4bdd1eb,0x56f1,0x4a87,{0xa1,0x87,0x67,0x24,0x6e,0xe9,0x19,0xa2}},
+#else
+ // {08A6937A-4906-4c23-8B9F-B3690B929D52}
+ {0x8a6937a,0x4906,0x4c23,{0x8b,0x9f,0xb3,0x69,0xb,0x92,0x9d,0x52}}
+#endif
+};
+static const MUUID interfaces[]={MIID_LANGMAN,MIID_LAST};
+
+BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,void *pReserved)
+{
+ UNREFERENCED_PARAMETER(pReserved);
+ if(fdwReason==DLL_PROCESS_ATTACH) {
+ /* Do not call this from a DLL that is linked to the static C run-time library (CRT).
+ * The static CRT requires DLL_THREAD_ATTACH and DLL_THREAD_DETATCH notifications
+ * to function properly. */
+ DisableThreadLibraryCalls(hInst=hinstDLL);
+ }
+ return TRUE;
+}
+
+static void InstallFile(const TCHAR *pszFileName,const TCHAR *pszDestSubDir)
+{
+ TCHAR szFileFrom[MAX_PATH+1],szFileTo[MAX_PATH+1],*p;
+ HANDLE hFile;
+
+ if ( !GetModuleFileName(hInst, szFileFrom, SIZEOF(szFileFrom) - lstrlen(pszFileName)))
+ return;
+ p = _tcsrchr(szFileFrom,_T('\\'));
+ if ( p != NULL ) *(++p)=0;
+ lstrcat(szFileFrom, pszFileName); /* buffer safe */
+
+ hFile = CreateFile(szFileFrom, 0, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0);
+ if ( hFile == INVALID_HANDLE_VALUE ) return;
+ CloseHandle(hFile);
+
+ if ( !GetModuleFileName(NULL, szFileTo, SIZEOF(szFileTo) - lstrlen(pszDestSubDir) - lstrlen(pszFileName)))
+ return;
+ p = _tcsrchr(szFileTo, _T('\\'));
+ if ( p != NULL ) *(++p)=0;
+ lstrcat(szFileTo, pszDestSubDir); /* buffer safe */
+ CreateDirectory(szFileTo, NULL);
+ lstrcat(szFileTo, pszFileName); /* buffer safe */
+
+ if ( !MoveFile(szFileFrom, szFileTo) && GetLastError() == ERROR_ALREADY_EXISTS) {
+ DeleteFile(szFileTo);
+ MoveFile(szFileFrom, szFileTo);
+ }
+}
+
+static int LangManModulesLoaded(WPARAM wParam,LPARAM lParam)
+{
+ UNREFERENCED_PARAMETER(wParam);
+ UNREFERENCED_PARAMETER(lParam);
+ if ( ServiceExists("DBEditorpp/RegisterSingleModule"))
+ CallService("DBEditorpp/RegisterSingleModule", (WPARAM)"LangMan", 0);
+ return 0;
+}
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+__declspec(dllexport) const PLUGININFO* MirandaPluginInfo(DWORD mirandaVersion)
+{
+ if(mirandaVersion<PLUGIN_MAKE_VERSION(0,1,0,1)) return NULL;
+ pluginInfo.cbSize = sizeof(PLUGININFO); /* needed as v0.6 does equality check */
+ szEmail[PLUGIN_EMAIL_ATT_POS-1] = '@';
+ return (PLUGININFO*)&pluginInfo; /* header is the same */
+}
+
+__declspec(dllexport) const PLUGININFOEX* MirandaPluginInfoEx(DWORD mirandaVersion)
+{
+ UNREFERENCED_PARAMETER(mirandaVersion);
+ pluginInfo.cbSize = sizeof(PLUGININFOEX);
+ szEmail[PLUGIN_EMAIL_ATT_POS-1] = '@';
+ return &pluginInfo;
+}
+
+__declspec(dllexport) const MUUID* MirandaPluginInterfaces(void)
+{
+ return interfaces;
+}
+
+__declspec(dllexport) int Load(PLUGINLINK *link)
+{
+ INITCOMMONCONTROLSEX icc;
+ pluginLink = link;
+ mir_getLP(&pluginInfo);
+
+ /* existance of MS_SYSTEM_GETVERSION and MS_LANGPACK_TRANSLATESTRING
+ * is checked in MirandaPluginInfo().
+ * Not placed in MirandaPluginInfo() to avoid MessageBoxes on plugin options.
+ * Using ANSI as LANG_UNICODE might not be supported. */
+ if ( CallService(MS_SYSTEM_GETVERSION, 0, 0) < NEEDED_MIRANDA_VERSION ) {
+ char szText[256];
+ mir_snprintf(szText,sizeof(szText),Translate("The Language Pack Manager Plugin can not be loaded. It requires Miranda IM %hs or later."),NEEDED_MIRANDA_VERSION_STR);
+ MessageBoxA(NULL,szText,Translate("Language Pack Manager Plugin"),MB_OK|MB_ICONERROR|MB_SETFOREGROUND|MB_TOPMOST|MB_TASKMODAL);
+ return 1;
+ }
+ if ( mir_getMMI(&mmi)) return 1;
+ icc.dwSize = sizeof(icc);
+ icc.dwICC=ICC_TREEVIEW_CLASSES|ICC_USEREX_CLASSES;
+ InitCommonControlsEx(&icc);
+ InitOptions();
+
+ /* installation */
+ InstallFile(_T("LangMan-Readme.txt"),_T("Docs\\"));
+ InstallFile(_T("LangMan-License.txt"),_T("Docs\\"));
+ InstallFile(_T("LangMan-SDK.zip"),_T("Docs\\"));
+ hHookModulesLoaded = HookEvent(ME_SYSTEM_MODULESLOADED, LangManModulesLoaded);
+ return 0;
+}
+
+__declspec(dllexport) int Unload(void)
+{
+ UninitOptions();
+ UnhookEvent(hHookModulesLoaded);
+ return 0;
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/plugins/LangMan/options.c b/plugins/LangMan/options.c new file mode 100644 index 0000000000..f8676a6b0f --- /dev/null +++ b/plugins/LangMan/options.c @@ -0,0 +1,681 @@ +/*
+
+'Language Pack Manager'-Plugin for Miranda IM
+
+Copyright (C) 2005-2007 H. Herkenrath
+
+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 (LangMan-License.txt); if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+*/
+
+#include "common.h"
+#include <ShlObj.h>
+#include <vsstyle.h>
+
+extern HINSTANCE hInst;
+static HANDLE hHookOptInit;
+
+/************************* Utils **************************************/
+
+#define BOX(str) BOX2("%s (err:%i)",str,GetLastError())
+#define BOX2(fmt,p1,p2) { char str[256]; wsprintfA(str,fmt,p1,p2); MessageBoxA(NULL,str,"dbg",0); }
+
+// ImageList_Destroy() the return value
+// refresh on WM_THEMECHANGED
+static HIMAGELIST CreateRadioImages(COLORREF clrBk,COLORREF clrText)
+{
+ register HDC hdc,hdcScreen;
+ SIZE size;
+ RECT rc;
+ HBITMAP hbm,hbmPrev;
+ HIMAGELIST himl=NULL;
+
+ /* the WinXP+ themed way */
+ HMODULE hUxThemeDLL;
+ HTHEME (WINAPI *pfnOpenThemeData)(HWND,const WCHAR*);
+ HTHEME (WINAPI *pfnCloseThemeData)(HTHEME);
+ HRESULT (WINAPI *pfnDrawThemeBackground)(HTHEME,HDC,int,int,const RECT*,const RECT*);
+ hUxThemeDLL=LoadLibraryA("UXTHEME"); /* all ascii */
+
+ /* draw bitmap */
+ hdcScreen=GetDC(NULL);
+ if(hdcScreen!=NULL) {
+ hdc=CreateCompatibleDC(NULL); /* compatible to screen */
+ if(hdc!=NULL) {
+ size.cx=GetSystemMetrics(SM_CXSMICON);
+ size.cy=GetSystemMetrics(SM_CYSMICON);
+ SetRect(&rc,0,0,2*size.cx,size.cy);
+ hbm=CreateCompatibleBitmap(hdcScreen,rc.right,rc.bottom);
+ if(hbm!=NULL) {
+ hbmPrev=SelectObject(hdc,hbm);
+ if(hbmPrev!=NULL) { /* error on select? */
+ /* the WinXP+ themed way */
+ if(hUxThemeDLL!=NULL) {
+ *(PROC*)&pfnOpenThemeData=GetProcAddress(hUxThemeDLL,"OpenThemeData");
+ *(PROC*)&pfnCloseThemeData=GetProcAddress(hUxThemeDLL,"CloseThemeData");
+ *(PROC*)&pfnDrawThemeBackground=GetProcAddress(hUxThemeDLL,"DrawThemeBackground");
+ if(pfnOpenThemeData!=NULL && pfnCloseThemeData!=NULL && pfnDrawThemeBackground!=NULL) {
+ HTHEME hTheme;
+ hTheme=pfnOpenThemeData(NULL,L"Button");
+ if(hTheme!=NULL) {
+ SetRect(&rc,0,0,size.cx,size.cy);
+ /* unchecked */
+ if(!pfnDrawThemeBackground(hTheme,hdc,BP_RADIOBUTTON,RBS_UNCHECKEDNORMAL,&rc,NULL)) {
+ /* checked */
+ OffsetRect(&rc,size.cx,0);
+ if(!pfnDrawThemeBackground(hTheme,hdc,BP_RADIOBUTTON,RBS_CHECKEDNORMAL,&rc,NULL))
+ himl=ImageList_Create(size.cx,size.cy,ILC_COLOR32|ILC_MASK,3,0);
+ }
+ pfnCloseThemeData(hTheme);
+ }
+ }
+ }
+ /* the classic way */
+ if(himl==NULL) {
+ register HDC hdcMono;
+ HBITMAP hbmMono,hbmPrevMono;
+ RECT rcRadio;
+ COLORREF clrPrevText,clrPrevBk;
+ HBRUSH hbrBk;
+ hbrBk=CreateSolidBrush(clrBk);
+ if(hbrBk!=NULL) {
+ FillRect(hdc,&rc,hbrBk);
+ DeleteObject(hbrBk);
+ hdcMono=CreateCompatibleDC(hdc);
+ if(hdcMono!=NULL) {
+ hbmMono=CreateBitmap(rc.right,rc.bottom,1,1,NULL);
+ if(hbmMono!=NULL) {
+ hbmPrevMono=SelectObject(hdcMono,hbmMono);
+ if(hbmPrevMono!=NULL) { /* error on select? */
+ /* draws a black-and-white mask (see docs)
+ * we need to colorize it using BitBlt with text and background color */
+ clrPrevText=SetTextColor(hdc,clrText);
+ clrPrevBk=SetBkColor(hdc,clrBk);
+ /* check mark is slightly smaller than icon size */
+ SetRect(&rcRadio,0,0,GetSystemMetrics(SM_CXMENUCHECK),GetSystemMetrics(SM_CYMENUCHECK));
+ if(rcRadio.right>size.cx) rcRadio.right=size.cx;
+ if(rcRadio.bottom>size.cy) rcRadio.bottom=size.cy;
+ SetRect(&rc,((size.cx-rcRadio.right)/2)+1,((size.cy-rcRadio.bottom)/2)+1,rcRadio.right+1,rcRadio.bottom+1);
+ /* unchecked */
+ if(BitBlt(hdcMono,0,0,rcRadio.right,rcRadio.bottom,NULL,0,0,WHITENESS)) { /* white back */
+ if(DrawFrameControl(hdcMono,&rcRadio,DFC_BUTTON,DFCS_BUTTONRADIO|DFCS_FLAT)) {
+ if(BitBlt(hdc,rc.left,rc.top,rcRadio.right,rcRadio.bottom,hdcMono,0,0,SRCCOPY|NOMIRRORBITMAP)) {
+ /* checked */
+ OffsetRect(&rc,size.cx,0);
+ if(BitBlt(hdcMono,0,0,rcRadio.right,rcRadio.bottom,NULL,0,0,WHITENESS)) {/* white back */
+ if(DrawFrameControl(hdcMono,&rcRadio,DFC_BUTTON,DFCS_BUTTONRADIO|DFCS_FLAT|DFCS_CHECKED)) {
+ if(BitBlt(hdc,rc.left,rc.top,rcRadio.right,rcRadio.bottom,hdcMono,0,0,SRCCOPY|NOMIRRORBITMAP))
+ himl=ImageList_Create(size.cx,size.cy,ILC_COLOR|ILC_MASK,3,0);
+ } else BOX("second DrawFrameControl() failed");
+ } else BOX("second BitBlt() failed");
+ } else BOX("intermediate BitBlt() failed");
+ } else BOX("DrawFrameControl() failed");
+ } else BOX("first BitBlt() failed");
+ /* restore */
+ SetBkColor(hdc,clrPrevBk);
+ SetTextColor(hdc,clrPrevText);
+ SelectObject(hdcMono,hbmPrevMono);
+ } else BOX("hbmPrevMono==NULL");
+ DeleteObject(hbmMono);
+ } else BOX("hbmMono==NULL");
+ DeleteDC(hdcMono);
+ } else BOX("hdcMono==NULL");
+ }
+ }
+ SelectObject(hdc,hbmPrev);
+ /* create imagelist */
+ if(himl!=NULL) {
+ if(himl==NULL) BOX("img list create failed");
+ if(himl!=NULL) if(ImageList_AddMasked(himl,hbm,clrBk)==-1) BOX("add failed");
+ } else BOX("Win9x: drawing code not reached");
+ }
+ DeleteObject(hbm);
+ }
+ DeleteDC(hdc);
+ }
+ ReleaseDC(NULL,hdcScreen);
+ }
+
+ if(hUxThemeDLL!=NULL) FreeLibrary(hUxThemeDLL);
+ return himl;
+}
+
+static void CleanupPluginName(char *szShortName)
+{
+ char *p;
+ int len;
+ /* strip-off anything in brackets */
+ for(p=szShortName;*p!='\0';++p)
+ if(*p=='(' || *p=='[') {
+ *p='\0';
+ break;
+ }
+ /* remove trailing space */
+ len=lstrlenA(szShortName);
+ while(szShortName[0]!='\0' && szShortName[len-1]==' ')
+ szShortName[--len]=0;
+}
+
+static void DisplayNotIncludedPlugins(HWND hwndListBox,const LANGPACK_INFO *pack)
+{
+ WIN32_FIND_DATA wfd;
+ HANDLE hFind;
+ TCHAR szSearch[MAX_PATH],szDir[MAX_PATH],*p;
+ HMODULE hModule;
+ BOOL fNeedsFree;
+ char buf[128];
+ TCHAR buf2[128];
+ DWORD mirandaVersion;
+ PLUGININFO *pluginInfo;
+ PLUGININFO *(__cdecl *MirandaPluginInfo)(DWORD);
+
+ /* enum plugins */
+ if(!(pack->flags&LPF_DEFAULT) && GetModuleFileName(NULL,szDir,SIZEOF(szDir))) {
+ p=_tcsrchr(szDir,_T('\\'));
+ if(p!=NULL) *p=_T('\0');
+ mir_sntprintf(szSearch,SIZEOF(szSearch),_T("%s\\Plugins\\*.dll"),szDir);
+ hFind=FindFirstFile(szSearch, &wfd);
+ if(hFind!=INVALID_HANDLE_VALUE) {
+ mirandaVersion=CallService(MS_SYSTEM_GETVERSION,0,0);
+ SendMessage(hwndListBox,LB_SETLOCALE,CallService(MS_LANGPACK_GETLOCALE,0,0),0); /* for sort order */
+ SendMessage(hwndListBox,LB_INITSTORAGE,128,lstrlenA(pack->szPluginsIncluded)); /* speed up */
+ do {
+ if(wfd.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY) continue;
+ if((lstrlen(wfd.cFileName)<4) || (wfd.cFileName[lstrlen(wfd.cFileName)-4]!=_T('.'))) continue;
+ /* file name */
+ lstrcpy(szSearch,wfd.cFileName); /* buffer safe */
+ p=_tcsrchr(szSearch,_T('.'));
+ if(p!=NULL) *p=_T('\0');
+#if defined(_UNICODE)
+ { char cFileNameA[MAX_PATH];
+ cFileNameA[0]='\0';
+ WideCharToMultiByte(CP_ACP,0,szSearch,-1,cFileNameA,sizeof(cFileNameA),NULL,NULL);
+ if(IsPluginIncluded(pack,cFileNameA)) continue;
+ }
+#else
+ if(IsPluginIncluded(pack,szSearch)) continue;
+#endif
+ /* friendly name of the plugin */
+ mir_sntprintf(szSearch,SIZEOF(szSearch),_T("%s\\Plugins\\%s"),szDir,wfd.cFileName);
+ hModule=GetModuleHandle(szSearch);
+ fNeedsFree=(hModule==NULL);
+ if(hModule==NULL) {
+ hModule=LoadLibrary(szSearch);
+ if(hModule==NULL) continue;
+ }
+ /* plugin info */
+ *(PROC*)&MirandaPluginInfo=GetProcAddress(hModule,"MirandaPluginInfo");
+ if(MirandaPluginInfo==NULL) /* v0.8 support */
+ *(PROC*)&MirandaPluginInfo=GetProcAddress(hModule,"MirandaPluginInfoEx");
+ if(MirandaPluginInfo!=NULL) { /* both structs have the same header */
+ pluginInfo=MirandaPluginInfo(mirandaVersion);
+ if(pluginInfo!=NULL && pluginInfo->cbSize>=sizeof(PLUGININFO) && pluginInfo->shortName!=NULL) {
+ lstrcpynA(buf,pluginInfo->shortName,sizeof(buf)); /* buffer safe */
+ CleanupPluginName(buf);
+ mir_sntprintf(buf2,SIZEOF(buf2),TranslateT("%hs (%s)"),buf,CharLower(wfd.cFileName));
+ SendMessage(hwndListBox,LB_ADDSTRING,0,(LPARAM)buf2);
+ }
+ }
+ if(fNeedsFree) FreeLibrary(hModule);
+ } while(FindNextFile(hFind,&wfd));
+ FindClose(hFind);
+ }
+ }
+ /* all are included? */
+ if(!SendMessage(hwndListBox,LB_GETCOUNT,0,0))
+ SendMessage(hwndListBox,LB_ADDSTRING,0,(LPARAM)TranslateT("All installed plugins are included."));
+}
+
+static void DisplayPackInfo(HWND hwndDlg,const LANGPACK_INFO *pack)
+{
+ /* compute not-included from included list */
+ SendDlgItemMessage(hwndDlg,IDC_LANGNOTINCLUDED,LB_RESETCONTENT,0,0);
+ DisplayNotIncludedPlugins(GetDlgItem(hwndDlg,IDC_LANGNOTINCLUDED),pack);
+ /* locale string */
+ if(!(pack->flags&LPF_NOLOCALE)) {
+ TCHAR szLocaleName[128];
+ szLocaleName[0]=_T('\0');
+ /* can't use LOCALE_SNAME as it is not present on pre WinVista */
+ if(!GetLocaleInfo(pack->Locale,LOCALE_SISO639LANGNAME,szLocaleName,SIZEOF(szLocaleName))) { /* Win98/NT4+ */
+ if(!GetLocaleInfo(pack->Locale,LOCALE_SLANGUAGE,szLocaleName,SIZEOF(szLocaleName))) /* not unique! */
+ szLocaleName[0]=_T('\0');
+ } else {
+ if(GetLocaleInfo(pack->Locale,LOCALE_SISO3166CTRYNAME,&szLocaleName[3],SIZEOF(szLocaleName)-3)) /* Win98/NT4+ */
+ szLocaleName[2]=_T('-');
+ }
+ /* add some note if its incompatible */
+ if(szLocaleName[0]) {
+ if(!IsValidLocale(pack->Locale,LCID_INSTALLED)) {
+ TCHAR *pszIncompat;
+ pszIncompat=TranslateT("(incompatible)");
+ szLocaleName[SIZEOF(szLocaleName)-lstrlen(pszIncompat)-1]=0;
+ lstrcat(lstrcat(szLocaleName,_T(" ")),pszIncompat); /* buffer safe */
+ }
+ SetDlgItemText(hwndDlg,IDC_LANGLOCALE,szLocaleName);
+ }
+ else SetDlgItemText(hwndDlg,IDC_LANGLOCALE,TranslateT("Unknown"));
+ }
+ else SetDlgItemText(hwndDlg,IDC_LANGLOCALE,TranslateT("Current"));
+ /* file date */
+ { SYSTEMTIME stFileDate;
+ TCHAR szDate[128];
+ szDate[0]=_T('\0');
+ if(FileTimeToSystemTime(&pack->ftFileDate,&stFileDate))
+ GetDateFormat((LCID)CallService(MS_LANGPACK_GETLOCALE,0,0),DATE_SHORTDATE,&stFileDate,NULL,szDate,SIZEOF(szDate));
+ SetDlgItemText(hwndDlg,IDC_LANGDATE,szDate);
+ }
+ /* version */
+ SetDlgItemTextA(hwndDlg,IDC_LANGVERSION,pack->szVersion);
+ if(pack->szVersion[0] && pack->szFLName[0]) {
+ if(!IsWindowVisible(GetDlgItem(hwndDlg,IDC_LANGVERSIONLABEL))) {
+ ShowWindow(GetDlgItem(hwndDlg,IDC_LANGVERSIONLABEL),SW_SHOW);
+ ShowWindow(GetDlgItem(hwndDlg,IDC_LANGVERSION),SW_SHOW);
+ }
+ } else {
+ ShowWindow(GetDlgItem(hwndDlg,IDC_LANGVERSIONLABEL),SW_HIDE);
+ ShowWindow(GetDlgItem(hwndDlg,IDC_LANGVERSION),SW_HIDE);
+ }
+ /* general */
+ SetDlgItemTextA(hwndDlg,IDC_LANGMODUSING,pack->szLastModifiedUsing);
+ SetDlgItemTextA(hwndDlg,IDC_LANGAUTHORS,pack->szAuthors);
+ SetDlgItemTextA(hwndDlg,IDC_LANGEMAIL,pack->szAuthorEmail);
+ SetDlgItemText(hwndDlg,IDC_LANGINFOFRAME,TranslateTS(pack->szLanguage));
+}
+
+/************************* Insert/Delete ******************************/
+
+#define M_RELOADLIST (WM_APP+1)
+#define M_SHOWFILECOL (WM_APP+2)
+
+static void DeletePackFile(HWND hwndDlg,HWND hwndList,int iItem,LANGPACK_INFO *pack)
+{
+ SHFILEOPSTRUCT sfo;
+ TCHAR szFileName[MAX_PATH];
+ ZeroMemory(&sfo,sizeof(sfo));
+ sfo.hwnd=hwndDlg;
+ sfo.wFunc=FO_DELETE;
+ sfo.fFlags=FOF_SIMPLEPROGRESS|FOF_SILENT; /* silent = no progress */
+ /* double zero terminated */
+ if(GetPackPath(szFileName,SIZEOF(szFileName)-1,pack->flags&LPF_ENABLED,pack->szFileName)) {
+ szFileName[lstrlen(szFileName)+1]=_T('\0');
+ sfo.pFrom=szFileName;
+ /* ask to delete file */
+ if(!SHFileOperation(&sfo) && !sfo.fAnyOperationsAborted) {
+ LVITEM lvi;
+ int nCount;
+ lvi.iItem=iItem;
+ lvi.iSubItem=0;
+ lvi.mask=LVIF_STATE;
+ lvi.stateMask=LVIS_STATEIMAGEMASK|LVIS_SELECTED|LVIS_FOCUSED;
+ if(ListView_GetItem(hwndList,&lvi)) {
+ ListView_DeleteItem(hwndList,iItem);
+ /* enable/select next item at same position */
+ nCount=ListView_GetItemCount(hwndList);
+ if(iItem<nCount) lvi.iItem=iItem;
+ else lvi.iItem=iItem-1;
+ ListView_SetItemState(hwndList,lvi.iItem,lvi.state,lvi.stateMask);
+ if(nCount==1) SendMessage(hwndDlg,M_SHOWFILECOL,0,FALSE);
+ }
+ }
+ }
+}
+
+static BOOL InsertPackItemEnumProc(LANGPACK_INFO *pack,WPARAM wParam,LPARAM lParam)
+{
+ LVITEM lvi;
+ LANGPACK_INFO *pack2;
+ UNREFERENCED_PARAMETER(lParam);
+
+ pack2=(LANGPACK_INFO*)mir_alloc(sizeof(LANGPACK_INFO));
+ if(pack2==NULL) return FALSE;
+ CopyMemory(pack2,pack,sizeof(LANGPACK_INFO));
+ /* country flag icon */
+ lvi.mask=LVIF_TEXT|LVIF_PARAM|LVIF_STATE;
+ if((HIMAGELIST)lParam!=NULL) {
+ HICON hIcon;
+ if(pack->flags&LPF_DEFAULT)
+ hIcon=(HICON)CallService(MS_FLAGS_CREATEMERGEDFLAGICON,CTRY_UNITED_STATES,CTRY_UNITED_KINGDOM);
+ else {
+ int countryId=0xFFFF; /* Unknown */
+ TCHAR szBuf[6];
+ /* get country id from locale */
+ if(!(pack->flags&LPF_NOLOCALE))
+ if(GetLocaleInfo(pack->Locale,LOCALE_ICOUNTRY,szBuf,SIZEOF(szBuf)))
+ countryId=_ttoi(szBuf);
+ hIcon=(HICON)CallService(MS_FLAGS_LOADFLAGICON,countryId,0);
+ }
+ if(hIcon==NULL) lvi.iImage=-1;
+ else lvi.iImage=ImageList_AddIcon((HIMAGELIST)lParam,hIcon);
+ lvi.mask|=LVIF_IMAGE;
+ }
+ /* insert */
+ lvi.iItem=lvi.iSubItem=0;
+ lvi.stateMask=LVIS_STATEIMAGEMASK|LVIS_SELECTED;
+ lvi.state=INDEXTOSTATEIMAGEMASK((pack->flags&LPF_ENABLED)?2:1);
+ if(pack->flags&LPF_ENABLED) lvi.state|=LVIS_SELECTED|LVIS_FOCUSED;
+ lvi.pszText=TranslateTS(pack->szLanguage);
+ lvi.lParam=(LPARAM)pack2;
+ ListView_InsertItem((HWND)wParam,&lvi);
+
+ return TRUE;
+}
+
+static int CALLBACK CompareListItem(LPARAM lParam1,LPARAM lParam2,LPARAM lParamSort)
+{
+ int cmp;
+ cmp=CompareString((LCID)lParamSort,0,((LANGPACK_INFO*)lParam1)->szLanguage,-1,((LANGPACK_INFO*)lParam2)->szLanguage,-1);
+ if(cmp!=0) cmp-=2;
+ return cmp;
+}
+
+/************************* Options Page *******************************/
+
+static HWND hwndLangOpt;
+
+static BOOL CALLBACK LangOptDlgProc(HWND hwndDlg,UINT msg,WPARAM wParam,LPARAM lParam)
+{
+ switch(msg) {
+ case WM_INITDIALOG:
+ { HWND hwndList;
+ LVCOLUMN lvc;
+ hwndList=GetDlgItem(hwndDlg,IDC_LANGLIST);
+ hwndLangOpt=hwndDlg;
+ TranslateDialogDefault(hwndDlg);
+ ListView_SetExtendedListViewStyle(hwndList,LVS_EX_FULLROWSELECT|LVS_EX_LABELTIP);
+ ListView_SetImageList(hwndList,CreateRadioImages(ListView_GetBkColor(hwndList),ListView_GetTextColor(hwndList)),LVSIL_STATE); /* auto-destroyed */
+
+ lvc.mask=LVCF_TEXT;
+ lvc.pszText=TranslateT("Installed Languages");
+ ListView_InsertColumn(hwndList,0,&lvc);
+ if(ServiceExists(MS_FLAGS_LOADFLAGICON))
+ ListView_SetImageList(hwndList,ImageList_Create(GetSystemMetrics(SM_CXSMICON),GetSystemMetrics(SM_CYSMICON),ILC_COLOR24,8,8),LVSIL_SMALL);
+ CorrectPacks(_T("langpack_*.txt"),FALSE);
+ CheckDlgButton(hwndDlg,IDC_ENABLEAUTOUPDATES,DBGetContactSettingByte(NULL,"LangMan","EnableAutoUpdates",SETTING_ENABLEAUTOUPDATES_DEFAULT)!=0);
+ SendMessage(hwndDlg,M_RELOADLIST,0,0);
+ SendMessage(hwndDlg,M_SHOWFILECOL,0,SendMessage(GetParent(hwndDlg),PSM_ISEXPERT,0,0));
+ return TRUE;
+ }
+ case M_RELOADLIST:
+ { HWND hwndList;
+ HIMAGELIST himl;
+ int iItem;
+ /* init list */
+ hwndList=GetDlgItem(hwndDlg,IDC_LANGLIST);
+ ListView_DeleteAllItems(hwndList);
+ ListView_DeleteColumn(hwndList,1); /* if present */
+ himl=ListView_GetImageList(hwndList,LVSIL_SMALL);
+ ImageList_RemoveAll(himl);
+ /* enum all packs */
+ EnumPacks(InsertPackItemEnumProc,_T("langpack_*.txt"),"Miranda Language Pack Version 1",TRUE,(WPARAM)hwndList,(LPARAM)himl);
+ /* make it use current langpack locale for sort */
+ ListView_SortItems(hwndList,CompareListItem,CallService(MS_LANGPACK_GETLOCALE,0,0));
+ CheckDlgButton(hwndDlg,IDC_ENABLEAUTOUPDATES,DBGetContactSettingByte(NULL,"LangMan","EnableAutoUpdates",SETTING_ENABLEAUTOUPDATES_DEFAULT)!=0);
+ /* show selection */
+ iItem=ListView_GetNextItem(hwndList,-1,LVNI_SELECTED);
+ if(iItem!=-1) ListView_EnsureVisible(hwndList,iItem,FALSE);
+ return TRUE;
+ }
+ case M_SHOWFILECOL:
+ { HWND hwndList;
+ hwndList=GetDlgItem(hwndDlg,IDC_LANGLIST);
+ if((BOOL)lParam && ListView_GetItemCount(hwndList)>1) {
+ LVCOLUMN lvc;
+ LVITEM lvi;
+ LANGPACK_INFO *pack;
+ /* add column */
+ ListView_SetColumnWidth(hwndList,0,LVSCW_AUTOSIZE_USEHEADER);
+ lvc.mask=LVCF_TEXT|LVCF_WIDTH|LVCF_SUBITEM;
+ lvc.pszText=TranslateT("File");
+ lvc.cx=160;
+ ListView_InsertColumn(hwndList,lvc.iSubItem=1,&lvc);
+ ListView_SetColumnWidth(hwndList,0,ListView_GetColumnWidth(hwndList,0)-lvc.cx);
+ /* add text */
+ lvi.mask=LVIF_PARAM;
+ lvi.iSubItem=0;
+ for(lvi.iItem=0;ListView_GetItem(hwndList,&lvi);++lvi.iItem) {
+ pack=(LANGPACK_INFO*)lvi.lParam;
+ ListView_SetItemText(hwndList,lvi.iItem,1,(pack->flags&LPF_DEFAULT)?TranslateT("built-in"):pack->szFileName);
+ }
+ }
+ else {
+ ListView_DeleteColumn(hwndList,1);
+ ListView_SetColumnWidth(hwndList,0,LVSCW_AUTOSIZE_USEHEADER);
+ }
+ return TRUE;
+ }
+ case WM_DESTROY:
+ ListView_DeleteAllItems(GetDlgItem(hwndDlg,IDC_LANGLIST));
+ return TRUE;
+ case WM_THEMECHANGED:
+ case WM_SETTINGCHANGE:
+ { HIMAGELIST himl;
+ HWND hwndList;
+ hwndList=GetDlgItem(hwndDlg,IDC_LANGLIST);
+ himl=ListView_SetImageList(hwndList,CreateRadioImages(ListView_GetBkColor(hwndList),ListView_GetTextColor(hwndList)),LVSIL_STATE); /* auto-destroyed */
+ if(himl!=NULL) ImageList_Destroy(himl);
+ break;
+ }
+ case WM_CTLCOLORLISTBOX: /* mimic readonly edit */
+ return (BOOL)SendMessage(hwndDlg,WM_CTLCOLORSTATIC,wParam,lParam);
+ case WM_COMMAND:
+ switch(LOWORD(wParam)) {
+ case IDC_LANGEMAIL:
+ { char buf[512];
+ lstrcpyA(buf,"mailto:");
+ if(GetWindowTextA(GetDlgItem(hwndDlg,LOWORD(wParam)),&buf[7],sizeof(buf)-7))
+ CallService(MS_UTILS_OPENURL,FALSE,(LPARAM)buf);
+ return TRUE;
+ }
+ case IDC_MORELANG:
+ CallService(MS_UTILS_OPENURL,TRUE,(LPARAM)"http://addons.miranda-im.org/index.php?action=display&id=23");
+ return TRUE;
+/* case IDC_ENABLEAUTOUPDATES:
+ SendMessage(GetParent(hwndDlg),PSM_CHANGED,0,0); /* enable apply */
+/* return TRUE;
+ case IDC_DOWNLOADLANG:
+ ServiceShowLangDialog(0,0);
+ return TRUE;*/
+ }
+ break;
+ case WM_CONTEXTMENU:
+ if(GetDlgCtrlID((HWND)wParam)==IDC_LANGLIST) {
+ LVHITTESTINFO hti;
+ HMENU hContextMenu;
+ RECT rc;
+ LVITEM lvi;
+ LANGPACK_INFO *pack;
+ /* get item */
+ POINTSTOPOINT(hti.pt,MAKEPOINTS(lParam));
+ if(hti.pt.x==-1 && hti.pt.y==-1) {
+ /* keyboard invoked */
+ hti.iItem=ListView_GetNextItem((HWND)wParam,-1,LVNI_SELECTED);
+ if(hti.iItem!=-1)
+ break;
+ if(!ListView_GetItemRect((HWND)wParam,hti.iItem,&rc,LVIR_SELECTBOUNDS))
+ break;
+ hti.pt.x=rc.left+(rc.right-rc.left)/2;
+ hti.pt.y=rc.top+(rc.bottom-rc.top)/2;
+ ClientToScreen((HWND)wParam,&hti.pt);
+ } else {
+ ScreenToClient((HWND)wParam,&hti.pt);
+ if(ListView_HitTest((HWND)wParam,&hti)==-1 || !(hti.flags&LVHT_ONITEM))
+ break;
+ POINTSTOPOINT(hti.pt,MAKEPOINTS(lParam));
+ }
+ /* param */
+ lvi.iItem=hti.iItem;
+ lvi.iSubItem=0;
+ lvi.mask=LVIF_PARAM;
+ if(!ListView_GetItem((HWND)wParam,&lvi)) break;
+ pack=(LANGPACK_INFO*)lvi.lParam;
+ /* context menu */
+ if(!(pack->flags&LPF_DEFAULT)) {
+ hContextMenu=CreatePopupMenu();
+ if(hContextMenu!=NULL) {
+ AppendMenu(hContextMenu,MF_STRING,2,TranslateT("&Remove..."));
+ if(TrackPopupMenuEx(hContextMenu,TPM_RETURNCMD|TPM_NONOTIFY|TPM_TOPALIGN|TPM_LEFTALIGN|TPM_RIGHTBUTTON|TPM_HORPOSANIMATION|TPM_VERPOSANIMATION,hti.pt.x,hti.pt.y,(HWND)wParam,NULL))
+ DeletePackFile(hwndDlg,(HWND)wParam,hti.iItem,pack);
+ DestroyMenu(hContextMenu);
+ }
+ }
+ return TRUE;
+ }
+ break;
+#if defined(_UNICODE)
+ case WM_NOTIFYFORMAT:
+ SetWindowLong(hwndDlg,DWL_MSGRESULT,NFR_UNICODE);
+ return TRUE;
+#endif
+ case WM_NOTIFY:
+ { NMHDR *nmhdr=(NMHDR*)lParam;
+ switch(nmhdr->idFrom) {
+ case IDC_LANGLIST:
+ switch(nmhdr->code) {
+ case LVN_DELETEITEM:
+ { LVITEM lvi;
+ lvi.iItem=((NMLISTVIEW*)lParam)->iItem; /* nmlv->lParam is invalid */
+ lvi.iSubItem=0;
+ lvi.mask=LVIF_PARAM;
+ if(ListView_GetItem(nmhdr->hwndFrom,&lvi))
+ mir_free((LANGPACK_INFO*)lvi.lParam);
+ break;
+ }
+ case LVN_ITEMCHANGED:
+ { NMLISTVIEW *nmlv=(NMLISTVIEW*)lParam;
+ if(!(nmlv->uChanged&LVIF_STATE)) break;
+ /* display info and check radio item */
+ if(nmlv->uNewState&LVIS_SELECTED && !(nmlv->uOldState&LVIS_SELECTED)) {
+ ListView_SetItemState(nmhdr->hwndFrom,nmlv->iItem,INDEXTOSTATEIMAGEMASK(2),LVIS_STATEIMAGEMASK);
+ DisplayPackInfo(hwndDlg,(LANGPACK_INFO*)nmlv->lParam);
+ }
+ /* disable all other radio items */
+ else if(nmlv->uNewState&INDEXTOSTATEIMAGEMASK(2)) {
+ int iItem;
+ for(iItem=ListView_GetItemCount(nmhdr->hwndFrom)-1;iItem!=-1;--iItem)
+ if(iItem!=nmlv->iItem)
+ ListView_SetItemState(nmhdr->hwndFrom,iItem,INDEXTOSTATEIMAGEMASK(1),LVIS_STATEIMAGEMASK);
+ /* enable apply */
+ if(nmlv->uOldState) {
+ SendMessage(GetParent(hwndDlg),PSM_CHANGED,0,0);
+ ShowWindow(GetDlgItem(hwndDlg,IDC_RESTART),SW_SHOW);
+ }
+ }
+ break;
+ }
+ case LVN_KEYDOWN:
+ { int iItem;
+ iItem=ListView_GetNextItem(nmhdr->hwndFrom,-1,LVNI_SELECTED);
+ switch(((NMLVKEYDOWN*)lParam)->wVKey) {
+ case VK_SPACE:
+ ListView_SetItemState(nmhdr->hwndFrom,iItem,INDEXTOSTATEIMAGEMASK(2),LVIS_STATEIMAGEMASK);
+ break;
+ case VK_DELETE:
+ { LVITEM lvi;
+ LANGPACK_INFO *pack;
+ lvi.iItem=iItem;
+ lvi.iSubItem=0;
+ lvi.mask=LVIF_PARAM;
+ if(ListView_GetItem(nmhdr->hwndFrom,&lvi)) {
+ pack=(LANGPACK_INFO*)lvi.lParam;
+ if(!(pack->flags&LPF_DEFAULT))
+ DeletePackFile(hwndDlg,nmhdr->hwndFrom,iItem,pack);
+ }
+ break;
+ }
+ }
+ break;
+ }
+ case NM_CLICK:
+ { LVHITTESTINFO hti;
+ lParam=GetMessagePos();
+ POINTSTOPOINT(hti.pt,MAKEPOINTS(lParam));
+ ScreenToClient(nmhdr->hwndFrom,&hti.pt);
+ if(ListView_HitTest(nmhdr->hwndFrom,&hti)!=-1)
+ if(hti.flags&(LVHT_ONITEMSTATEICON|LVHT_ONITEMICON)) /* one of them */
+ ListView_SetItemState(nmhdr->hwndFrom,hti.iItem,LVIS_SELECTED,LVIS_SELECTED);
+ break;
+ }
+ } /* switch nmhdr->code */
+ break;
+ case 0:
+ switch(nmhdr->code) {
+ case PSN_APPLY:
+ { HWND hwndList;
+ LVITEM lvi;
+ LANGPACK_INFO *pack;
+ hwndList=GetDlgItem(hwndDlg,IDC_LANGLIST);
+ lvi.mask=LVIF_STATE|LVIF_PARAM;
+ lvi.stateMask=LVIS_STATEIMAGEMASK;
+ lvi.iSubItem=0;
+ for(lvi.iItem=0;ListView_GetItem(hwndList,&lvi);++lvi.iItem) {
+ pack=(LANGPACK_INFO*)lvi.lParam;
+ if(lvi.state&INDEXTOSTATEIMAGEMASK(2)) {
+ EnablePack(pack,_T("langpack_*.txt"));
+ pack->flags|=LPF_ENABLED;
+ } else pack->flags&=~LPF_ENABLED;
+ }
+ DBWriteContactSettingByte(NULL,"LangMan","EnableAutoUpdates",(BYTE)(IsDlgButtonChecked(hwndDlg,IDC_ENABLEAUTOUPDATES)!=0));
+ return TRUE;
+ }
+ case PSN_EXPERTCHANGED:
+ SendMessage(hwndDlg,M_SHOWFILECOL,0,((PSHNOTIFY*)lParam)->lParam);
+ return TRUE;
+ } /* switch nmhdr->code */
+ break;
+ } /* switch nmhdr->idFrom */
+ break;
+ }
+ }
+ return FALSE;
+}
+
+void ReloadLangOptList(void)
+{
+ if(hwndLangOpt!=NULL) {
+ SendMessage(hwndLangOpt,M_RELOADLIST,0,0);
+ SendMessage(hwndLangOpt,M_SHOWFILECOL,0,SendMessage(GetParent(hwndLangOpt),PSM_ISEXPERT,0,0));
+ }
+}
+
+static int LangOptInit(WPARAM wParam,LPARAM lParam)
+{
+ OPTIONSDIALOGPAGE odp;
+ UNREFERENCED_PARAMETER(lParam);
+ ZeroMemory(&odp,sizeof(odp));
+ odp.cbSize=sizeof(odp);
+ odp.hInstance=hInst;
+ odp.flags=ODPF_BOLDGROUPS|ODPF_TCHAR;
+ odp.position=1200000090; /* plugin opts=1300000000 */
+// odp.ptszGroup=_T("Appearance"); /* autotranslated */
+ odp.ptszTitle=_T("Appearance"); /* autotranslated */
+// odp.ptszTab=_T("Language"); /* autotranslated, can be made a tab */
+ odp.pszTemplate=MAKEINTRESOURCEA(IDD_OPT_LANG);
+ odp.pfnDlgProc=LangOptDlgProc;
+ CallService(MS_OPT_ADDPAGE,wParam,(LPARAM)&odp);
+ return 0;
+}
+
+/************************* Misc ***************************************/
+
+void InitOptions(void)
+{
+ hwndLangOpt=NULL;
+ hHookOptInit=HookEvent(ME_OPT_INITIALISE,LangOptInit);
+ CorrectPacks(_T("langpack_*.txt"),FALSE);
+}
+
+void UninitOptions(void)
+{
+ UnhookEvent(hHookOptInit);
+}
\ No newline at end of file diff --git a/plugins/LangMan/options.h b/plugins/LangMan/options.h new file mode 100644 index 0000000000..94236f750a --- /dev/null +++ b/plugins/LangMan/options.h @@ -0,0 +1,27 @@ +/*
+
+'Language Pack Manager'-Plugin for Miranda IM
+
+Copyright (C) 2005-2007 H. Herkenrath
+
+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 (LangMan-License.txt); if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+*/
+
+/* Options Page */
+void ReloadLangOptList(void);
+
+/* Misc */
+void InitOptions(void);
+void UninitOptions(void);
diff --git a/plugins/LangMan/resource.h b/plugins/LangMan/resource.h new file mode 100644 index 0000000000..623b2d01e5 --- /dev/null +++ b/plugins/LangMan/resource.h @@ -0,0 +1,48 @@ +//{{NO_DEPENDENCIES}}
+// Microsoft Developer Studio generated include file.
+// Used by resource.rc
+//
+#define IDD_OPT_LANG 101
+#define IDD_UPDATENOTIFY 102
+#define IDD_DOWNLOADLANG 103
+#define IDC_LANGLIST 1001
+#define IDC_LANGINFOFRAME 1002
+#define IDC_LANGAUTHORSLABEL 1003
+#define IDC_LANGAUTHORS 1004
+#define IDC_LANGEMAILLABEL 1005
+#define IDC_LANGEMAIL 1006
+#define IDC_LANGMODUSINGLABEL 1007
+#define IDC_LANGMODUSING 1008
+#define IDC_LANGDATELABEL 1009
+#define IDC_LANGDATE 1010
+#define IDC_LANGVERSIONLABEL 1011
+#define IDC_LANGVERSION 1012
+#define IDC_LANGLOCALELABEL 1013
+#define IDC_LANGLOCALE 1014
+#define IDC_LANGNOTINCLUDEDLABEL 1015
+#define IDC_LANGNOTINCLUDED 1016
+#define IDC_MORELANG 1017
+#define IDC_RESTART 1018
+#define IDC_ENABLEAUTOUPDATES 1019
+#define IDC_DOWNLOADLANG 1020
+#define IDC_LANGCOMBO 1021
+#define IDC_LANGAUTHORS2 1021
+#define IDC_DOWNLOADALL 1022
+#define IDC_LOADING 1023
+#define IDC_LANGUAGELABEL 1024
+#define IDC_LANGUAGE 1025
+#define IDC_CURRENTVERSION 1026
+#define IDC_NEWVERSION 1027
+#define IDC_NEWVERSIONLABEL 1028
+
+// Next default values for new objects
+//
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NO_MFC 1
+#define _APS_NEXT_RESOURCE_VALUE 104
+#define _APS_NEXT_COMMAND_VALUE 40001
+#define _APS_NEXT_CONTROL_VALUE 1029
+#define _APS_NEXT_SYMED_VALUE 2001
+#endif
+#endif
diff --git a/plugins/LangMan/resource.rc b/plugins/LangMan/resource.rc new file mode 100644 index 0000000000..03eb1e4ade --- /dev/null +++ b/plugins/LangMan/resource.rc @@ -0,0 +1,197 @@ +//Microsoft Developer Studio generated resource script.
+//
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#include <winres.h>
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// Englisch (GB) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENG)
+#ifdef _WIN32
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_UK
+#pragma code_page(1252)
+#endif //_WIN32
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE MOVEABLE PURE
+BEGIN
+ "resource.h\0"
+END
+
+2 TEXTINCLUDE MOVEABLE PURE
+BEGIN
+ "#include <winres.h>\r\n"
+ "\0"
+END
+
+3 TEXTINCLUDE MOVEABLE PURE
+BEGIN
+ "#include ""version.rc""\r\n"
+ "\0"
+END
+
+#endif // APSTUDIO_INVOKED
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Dialog
+//
+
+/*IDD_UPDATENOTIFY DIALOGEX 0, 0, 259, 115
+STYLE DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_VISIBLE |
+ WS_CAPTION | WS_SYSMENU
+CAPTION "Language Pack Update Now Available"
+FONT 8, "MS Shell Dlg", 0, 0, 0x1
+BEGIN
+ LTEXT "A new version of a Language Pack is now available. Click the install button to download and install this new update.",
+ IDC_STATIC,8,7,243,21,SS_NOPREFIX
+ CONTROL "Language:",IDC_LANGUAGELABEL,"Static",SS_SIMPLE |
+ SS_NOPREFIX | WS_GROUP,8,29,65,8
+ EDITTEXT IDC_LANGUAGE,78,29,173,8,ES_AUTOHSCROLL | ES_READONLY |
+ NOT WS_BORDER
+ CONTROL "Current:",IDC_STATIC,"Static",SS_SIMPLE | SS_NOPREFIX |
+ WS_GROUP,8,43,65,8
+ EDITTEXT IDC_CURRENTVERSION,78,43,173,8,ES_AUTOHSCROLL |
+ ES_READONLY | NOT WS_BORDER
+ CONTROL "New:",IDC_NEWVERSIONLABEL,"Static",SS_SIMPLE |
+ SS_NOPREFIX | WS_GROUP,8,58,65,8
+ EDITTEXT IDC_NEWVERSION,78,58,173,8,ES_AUTOHSCROLL | ES_READONLY |
+ NOT WS_BORDER
+ PUSHBUTTON "&Install Now",IDOK,7,73,66,15,WS_GROUP
+ CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,7,92,245,1
+ DEFPUSHBUTTON "Close",IDCANCEL,202,96,50,15
+END
+
+IDD_DOWNLOADLANG DIALOG DISCARDABLE 0, 0, 200, 126
+STYLE DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_VISIBLE |
+ WS_CAPTION | WS_SYSMENU
+CAPTION "Select your language"
+FONT 8, "MS Shell Dlg"
+BEGIN
+ LTEXT "Miranda IM is available in many languages.\nHere is a list of all available languages of the file listing, please select your native &language:",
+ IDC_STATIC,5,5,189,26
+ COMBOBOX IDC_LANGCOMBO,46,36,106,126,CBS_DROPDOWNLIST |
+ CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP
+ CONTROL "Download &all languages",IDC_DOWNLOADALL,"Button",
+ BS_AUTOCHECKBOX | WS_TABSTOP,46,53,148,10
+ LTEXT "Note: This will download and install the newest language pack available for the selected language. There might be language packs from other authors available on the file listing.",
+ IDC_STATIC,5,69,189,34,SS_NOPREFIX | WS_DISABLED
+ CTEXT "",IDC_LOADING,1,109,86,8,SS_NOPREFIX | SS_CENTERIMAGE |
+ NOT WS_VISIBLE
+ PUSHBUTTON "OK",IDOK,89,106,50,14,WS_DISABLED
+ DEFPUSHBUTTON "Cancel",IDCANCEL,144,106,50,15
+END*/
+
+IDD_OPT_LANG DIALOGEX 0, 0, 301, 227
+STYLE DS_FIXEDSYS | WS_CHILD
+EXSTYLE WS_EX_CONTROLPARENT
+FONT 8, "MS Shell Dlg"
+BEGIN
+ CONTROL "",IDC_LANGLIST,"SysListView32",LVS_REPORT |
+ LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER |
+ WS_BORDER | WS_GROUP | WS_TABSTOP,2,3,299,61
+ GROUPBOX "",IDC_LANGINFOFRAME,2,68,298,119,WS_GROUP
+ RTEXT "Author(s):",IDC_LANGAUTHORSLABEL,5,78,66,9,SS_NOPREFIX
+ EDITTEXT IDC_LANGAUTHORS,74,78,220,18,ES_MULTILINE |
+ ES_AUTOVSCROLL | ES_READONLY | NOT WS_BORDER |
+ WS_VSCROLL
+ RTEXT "E-mail:",IDC_LANGEMAILLABEL,5,99,66,8,SS_NOPREFIX
+ CONTROL "",IDC_LANGEMAIL,"Hyperlink",WS_TABSTOP,76,99,207,10
+ RTEXT "Last modified using:",IDC_LANGMODUSINGLABEL,5,112,66,9,
+ SS_NOPREFIX
+ EDITTEXT IDC_LANGMODUSING,75,112,207,12,ES_AUTOHSCROLL |
+ ES_READONLY | NOT WS_BORDER
+ RTEXT "Date:",IDC_LANGDATELABEL,5,125,66,9,SS_NOPREFIX
+ EDITTEXT IDC_LANGDATE,75,125,66,12,ES_AUTOHSCROLL | ES_READONLY |
+ NOT WS_BORDER
+ RTEXT "Version:",IDC_LANGVERSIONLABEL,150,125,39,9,SS_NOPREFIX |
+ NOT WS_VISIBLE
+ EDITTEXT IDC_LANGVERSION,194,125,88,12,ES_AUTOHSCROLL |
+ ES_READONLY | NOT WS_VISIBLE | NOT WS_BORDER
+ RTEXT "Locale:",IDC_LANGLOCALELABEL,5,137,66,9,SS_NOPREFIX
+ EDITTEXT IDC_LANGLOCALE,75,137,207,12,ES_READONLY | NOT WS_BORDER
+ /* RTEXT "Not included:",IDC_LANGNOTINCLUDEDLABEL,5,150,66,10,
+ SS_NOPREFIX
+ LISTBOX IDC_LANGNOTINCLUDED,75,150,219,33,NOT LBS_NOTIFY |
+ LBS_SORT | LBS_HASSTRINGS | LBS_USETABSTOPS |
+ LBS_NOINTEGRALHEIGHT | LBS_DISABLENOSCROLL | NOT
+ WS_BORDER | WS_VSCROLL | WS_TABSTOP,WS_EX_TRANSPARENT*/
+ CONTROL "Download more Language Packs",IDC_MORELANG,"Hyperlink",
+ WS_GROUP | WS_TABSTOP | 0x1,2,189,299,10
+ CTEXT "Please restart Miranda IM for your changes to take effect.",
+ IDC_RESTART,5,200,296,9,SS_NOPREFIX | NOT WS_VISIBLE
+ /* CONTROL "Check for new &versions of Language Packs periodically",
+ IDC_ENABLEAUTOUPDATES,"Button",BS_AUTOCHECKBOX |
+ WS_GROUP | WS_TABSTOP,2,214,209,10
+ PUSHBUTTON "&Download Language",IDC_DOWNLOADLANG,213,213,86,14,
+ WS_GROUP*/
+END
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// DESIGNINFO
+//
+
+#ifdef APSTUDIO_INVOKED
+GUIDELINES DESIGNINFO MOVEABLE PURE
+BEGIN
+ /* IDD_UPDATENOTIFY, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 252
+ VERTGUIDE, 74
+ TOPMARGIN, 7
+ END
+
+ IDD_DOWNLOADLANG, DIALOG
+ BEGIN
+ VERTGUIDE, 5
+ VERTGUIDE, 46
+ VERTGUIDE, 194
+ HORZGUIDE, 106
+ HORZGUIDE, 121
+ END*/
+
+ IDD_OPT_LANG, DIALOG
+ BEGIN
+ VERTGUIDE, 2
+ VERTGUIDE, 70
+ VERTGUIDE, 75
+ VERTGUIDE, 282
+ VERTGUIDE, 294
+ HORZGUIDE, 160
+ END
+END
+#endif // APSTUDIO_INVOKED
+
+#endif // Englisch (GB) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+#include "version.rc"
+
+/////////////////////////////////////////////////////////////////////////////
+#endif // not APSTUDIO_INVOKED
+
diff --git a/plugins/LangMan/utils.c b/plugins/LangMan/utils.c new file mode 100644 index 0000000000..e727df2427 --- /dev/null +++ b/plugins/LangMan/utils.c @@ -0,0 +1,69 @@ +/*
+
+'Language Pack Manager'-Plugin for Miranda IM
+
+Copyright (C) 2005-2007 H. Herkenrath
+
+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 (LangMan-License.txt); if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+*/
+
+#include "common.h"
+
+/************************* Error Output ***************************/
+
+static void MessageBoxIndirectFree(MSGBOXPARAMSA *mbp)
+{
+ MessageBoxIndirectA(mbp);
+ mir_free((char*)mbp->lpszCaption); /* does NULL check */
+ mir_free((char*)mbp->lpszText); /* does NULL check */
+ mir_free(mbp);
+}
+
+void ShowInfoMessage(BYTE flags,const char *pszTitle,const char *pszTextFmt,...)
+{
+ char szText[256]; /* max for systray */
+ MSGBOXPARAMSA *mbp;
+
+ va_list va;
+ va_start(va,pszTextFmt);
+ mir_vsnprintf(szText,SIZEOF(szText),pszTextFmt,va);
+ va_end(va);
+
+ if(ServiceExists(MS_CLIST_SYSTRAY_NOTIFY)) {
+ MIRANDASYSTRAYNOTIFY msn;
+ msn.cbSize=sizeof(msn);
+ msn.szProto=NULL;
+ msn.szInfoTitle=(char*)pszTitle;
+ msn.szInfo=(char*)szText;
+ msn.uTimeout=30000; /* max timeout */
+ msn.dwInfoFlags=flags;
+ if(!CallServiceSync(MS_CLIST_SYSTRAY_NOTIFY,0,(LPARAM)&msn))
+ return; /* success */
+ }
+
+ mbp=(MSGBOXPARAMSA*)mir_calloc(sizeof(*mbp));
+ if(mbp==NULL) return;
+ mbp->cbSize=sizeof(*mbp);
+ mbp->lpszCaption=mir_strdup(pszTitle);
+ mbp->lpszText=mir_strdup(szText);
+ mbp->dwStyle=MB_OK|MB_SETFOREGROUND|MB_TASKMODAL;
+ mbp->dwLanguageId=LANGIDFROMLCID((LCID)CallService(MS_LANGPACK_GETLOCALE,0,0));
+ switch(flags&NIIF_ICON_MASK) {
+ case NIIF_INFO: mbp->dwStyle|=MB_ICONINFORMATION; break;
+ case NIIF_WARNING: mbp->dwStyle|=MB_ICONWARNING; break;
+ case NIIF_ERROR: mbp->dwStyle|=MB_ICONERROR;
+ }
+ mir_forkthread(MessageBoxIndirectFree,mbp);
+}
diff --git a/plugins/LangMan/utils.h b/plugins/LangMan/utils.h new file mode 100644 index 0000000000..259947ecf9 --- /dev/null +++ b/plugins/LangMan/utils.h @@ -0,0 +1,23 @@ +/*
+
+'Language Pack Manager'-Plugin for Miranda IM
+
+Copyright (C) 2005-2007 H. Herkenrath
+
+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 (LangMan-License.txt); if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+*/
+
+/* Error Output */
+void ShowInfoMessage(BYTE flags,const char *pszTitle,const char *pszTextFmt,...);
diff --git a/plugins/LangMan/version.h b/plugins/LangMan/version.h new file mode 100644 index 0000000000..c6731dc051 --- /dev/null +++ b/plugins/LangMan/version.h @@ -0,0 +1,42 @@ +/*
+
+'Language Pack Manager'-Plugin for Miranda IM
+
+Copyright (C) 2005-2007 H. Herkenrath
+
+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 (LangMan-License.txt); if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+*/
+
+#define NEEDED_MIRANDA_VERSION PLUGIN_MAKE_VERSION(0,6,0,0)
+#define NEEDED_MIRANDA_VERSION_STR "0.6"
+#define PLUGIN_VERSION PLUGIN_MAKE_VERSION(1,0,2,3)
+#define FILE_VERSION 1,0,2,3
+
+#if defined(_DEBUG)
+ #define FILE_VERSION_STR "1.0.2.3 alpha"
+ #define USERAGENT_VERSION "1.0.2.3 (alpha)"
+#else
+ #define FILE_VERSION_STR "1.0.2.3"
+ #define USERAGENT_VERSION "1.0.2.3"
+#endif
+
+#define PLUGIN_EMAIL "hrathh users.sourceforge.net"
+#define PLUGIN_EMAIL_ATT_POS 7 /* position of the @-sign in the email adress above */
+
+#if defined(_UNICODE)
+ #define PLUGIN_WEBSITE "http://addons.miranda-im.org/details.php?action=viewfile&id=3003"
+#else
+ #define PLUGIN_WEBSITE "http://addons.miranda-im.org/details.php?action=viewfile&id=3002"
+#endif
diff --git a/plugins/LangMan/version.rc b/plugins/LangMan/version.rc new file mode 100644 index 0000000000..23c6d4dcd8 --- /dev/null +++ b/plugins/LangMan/version.rc @@ -0,0 +1,51 @@ +#ifndef _MAC
+
+#include "version.h"
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Version
+//
+
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION FILE_VERSION
+ PRODUCTVERSION FILE_VERSION
+ FILEFLAGSMASK 0x0L
+#ifdef _DEBUG
+ FILEFLAGS 0x1L
+#else
+ FILEFLAGS 0x0L
+#endif
+ FILEOS 0x40004L
+ FILETYPE 0x2L
+ FILESUBTYPE 0x0L
+BEGIN
+ BLOCK "StringFileInfo"
+ BEGIN
+ BLOCK "000004b0"
+ BEGIN
+ VALUE "Comments", "Licensed under the terms of the GNU General Public License"
+ VALUE "FileDescription", "Language Pack Manager Plugin for Miranda IM"
+ VALUE "FileVersion", FILE_VERSION_STR
+#ifdef _UNICODE
+ VALUE "InternalName", "LangMan (Unicode)"
+#else
+ VALUE "InternalName", "LangMan"
+#endif
+ VALUE "LegalCopyright", "Copyright © 2005-2010 H. Herkenrath"
+ VALUE "OriginalFilename", "langman.dll"
+ VALUE "ProductName", "Language Pack Manager"
+ VALUE "ProductVersion", FILE_VERSION_STR
+ END
+ END
+ BLOCK "VarFileInfo"
+ BEGIN
+ VALUE "Translation", 0x0, 1200
+ END
+END
+
+#endif // !_MAC
+
+
+
+
|