浏览代码

First public commit of thirdparty_hotfix branch

Source commit: 03a5a42d3ce0820620b93ec9d6f62fc7d00f9ef0
Martin Prikryl 9 年之前
父节点
当前提交
3daface2af
共有 100 个文件被更改,包括 9 次插入13090 次删除
  1. 2 0
      .gitignore
  2. 0 22
      build.bat
  3. 1 0
      buildtools/.gitignore
  4. 0 29
      deployment/WinSCPnet.nuspec
  5. 0 7
      deployment/install.ps1
  6. 0 286
      deployment/license.setup.txt
  7. 0 722
      deployment/license.txt
  8. 0 9
      deployment/readme.txt
  9. 0 68
      deployment/winscp.isl
  10. 二进制
      deployment/winscpsetup.ico
  11. 0 1342
      deployment/winscpsetup.iss
  12. 0 9
      dotnet/App.config
  13. 0 45
      dotnet/ChmodEventArgs.cs
  14. 0 18
      dotnet/CommandExecutionResult.cs
  15. 0 19
      dotnet/FailedEventArgs.cs
  16. 0 16
      dotnet/FileOperationEventArgs.cs
  17. 0 269
      dotnet/FilePermissions.cs
  18. 0 26
      dotnet/FileTransferProgressEventArgs.cs
  19. 0 153
      dotnet/GlobalSuppressions.cs
  20. 0 17
      dotnet/OperationEventArgs.cs
  21. 0 32
      dotnet/OperationResultBase.cs
  22. 0 23
      dotnet/OutputDataReceivedEventArgs.cs
  23. 0 22
      dotnet/RemoteDirectoryInfo.cs
  24. 0 49
      dotnet/RemoteFileInfo.cs
  25. 0 39
      dotnet/RemovalEventArgs.cs
  26. 0 22
      dotnet/RemovalOperationResult.cs
  27. 0 1734
      dotnet/Session.cs
  28. 0 19
      dotnet/SessionEvents.cs
  29. 0 25
      dotnet/SessionException.cs
  30. 0 27
      dotnet/SessionLocalException.cs
  31. 0 391
      dotnet/SessionOptions.cs
  32. 0 92
      dotnet/SessionRemoteException.cs
  33. 0 36
      dotnet/SynchronizationResult.cs
  34. 0 47
      dotnet/TouchEventArgs.cs
  35. 0 51
      dotnet/TransferEventArgs.cs
  36. 0 22
      dotnet/TransferOperationResult.cs
  37. 0 86
      dotnet/TransferOptions.cs
  38. 0 81
      dotnet/TransferResumeSupport.cs
  39. 0 113
      dotnet/WinSCPnet.csproj
  40. 0 9
      dotnet/WinSCPnet.ruleset
  41. 0 57
      dotnet/internal/Callstack.cs
  42. 0 22
      dotnet/internal/CallstackAndLock.cs
  43. 0 215
      dotnet/internal/ConsoleCommStruct.cs
  44. 0 9
      dotnet/internal/Constants.cs
  45. 0 126
      dotnet/internal/CustomLogReader.cs
  46. 0 85
      dotnet/internal/ElementLogReader.cs
  47. 0 741
      dotnet/internal/ExeSessionProcess.cs
  48. 0 17
      dotnet/internal/ISessionProcess.cs
  49. 0 69
      dotnet/internal/Job.cs
  50. 0 32
      dotnet/internal/Lock.cs
  51. 0 313
      dotnet/internal/Logger.cs
  52. 0 21
      dotnet/internal/OperationResultGuard.cs
  53. 0 22
      dotnet/internal/ProgressHandler.cs
  54. 0 95
      dotnet/internal/ReadOnlyInteropCollectionHelper.cs
  55. 0 36
      dotnet/internal/SessionElementLogReader.cs
  56. 0 253
      dotnet/internal/SessionLogReader.cs
  57. 0 54
      dotnet/internal/Tools.cs
  58. 0 110
      dotnet/internal/UnsafeNativeMethods.cs
  59. 0 88
      dotnet/interopcollections/RemoteFileInfoCollection.cs
  60. 0 88
      dotnet/interopcollections/RemovalEventArgsCollection.cs
  61. 0 88
      dotnet/interopcollections/SessionRemoteExceptionCollection.cs
  62. 0 93
      dotnet/interopcollections/StringCollection.cs
  63. 0 88
      dotnet/interopcollections/TransferEventArgsCollection.cs
  64. 0 373
      dotnet/license-dotnet.txt
  65. 0 27
      dotnet/properties/AssemblyInfo.cs
  66. 2 0
      libs/.gitignore
  67. 0 64
      libs/buildlibs.bat
  68. 0 21
      libs/cleaninterm.bat
  69. 2 2
      libs/expat/bcb5/expat_static.mak
  70. 2 2
      libs/expat/bcb5/expatw_static.mak
  71. 0 242
      libs/expat/lib/libexpat.vcxproj
  72. 0 2
      libs/expat/lib/winconfig.h
  73. 0 3
      libs/expat/lib/xmltok_impl.c
  74. 0 284
      libs/mfc/include/Chs/afxctl.rc
  75. 0 105
      libs/mfc/include/Chs/afxdb.rc
  76. 0 66
      libs/mfc/include/Chs/afxolecl.rc
  77. 0 53
      libs/mfc/include/Chs/afxolesv.rc
  78. 0 90
      libs/mfc/include/Chs/afxprint.rc
  79. 0 202
      libs/mfc/include/Chs/afxres.rc
  80. 0 284
      libs/mfc/include/Cht/afxctl.rc
  81. 0 105
      libs/mfc/include/Cht/afxdb.rc
  82. 0 66
      libs/mfc/include/Cht/afxolecl.rc
  83. 0 53
      libs/mfc/include/Cht/afxolesv.rc
  84. 0 90
      libs/mfc/include/Cht/afxprint.rc
  85. 0 202
      libs/mfc/include/Cht/afxres.rc
  86. 0 284
      libs/mfc/include/Deu/afxctl.rc
  87. 0 105
      libs/mfc/include/Deu/afxdb.rc
  88. 0 66
      libs/mfc/include/Deu/afxolecl.rc
  89. 0 53
      libs/mfc/include/Deu/afxolesv.rc
  90. 0 90
      libs/mfc/include/Deu/afxprint.rc
  91. 0 202
      libs/mfc/include/Deu/afxres.rc
  92. 0 284
      libs/mfc/include/Esp/afxctl.rc
  93. 0 105
      libs/mfc/include/Esp/afxdb.rc
  94. 0 66
      libs/mfc/include/Esp/afxolecl.rc
  95. 0 53
      libs/mfc/include/Esp/afxolesv.rc
  96. 0 90
      libs/mfc/include/Esp/afxprint.rc
  97. 0 202
      libs/mfc/include/Esp/afxres.rc
  98. 0 284
      libs/mfc/include/Fra/afxctl.rc
  99. 0 105
      libs/mfc/include/Fra/afxdb.rc
  100. 0 66
      libs/mfc/include/Fra/afxolecl.rc

+ 2 - 0
.gitignore

@@ -0,0 +1,2 @@
+*.suo
+tools

+ 0 - 22
build.bat

@@ -1,22 +0,0 @@
-@echo off
-rem See 'readme' file
-if "%PROCESSOR_ARCHITECTURE%"=="x86" set BDS=%ProgramFiles%\Embarcadero\Studio\14.0
-if "%PROCESSOR_ARCHITECTURE%"=="AMD64" set BDS=%ProgramFiles(x86)%\Embarcadero\Studio\14.0
-set WITH_DRAGEXT64=0
-set WITH_DOTNET=1
-rem set DRAGEXT64CL=<path to x64 cl.exe>
-rem set DRAGEXT64INCL=<path to x64 includes>
-rem set DRAGEXT64LIB=<path to x64 libraries>
-if "%BUILD_TARGET%"=="" set BUILD_TARGET=Build
-if "%BUILD_CONFIG%"=="" set BUILD_CONFIG=Release
-
-cd libs
-call buildlibs.bat
-
-cd ..\source
-%WINDIR%\Microsoft.NET\Framework\v3.5\MSBuild.exe WinSCP.groupproj /t:%BUILD_TARGET% /p:RELEASE_TYPE=%RELEASE_TYPE%;CONFIG=%BUILD_CONFIG%;INTERM_PATH=.;FINAL_PATH=.
-
-if "%WITH_DOTNET%"=="0" goto SKIP_DOTNET
-cd ..\dotnet
-%WINDIR%\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe WinSCPnet.csproj /t:Build "/p:Configuration=%BUILD_CONFIG%;Platform=AnyCPU;INTERM_PATH=.;FINAL_PATH=."
-:SKIP_DOTNET

+ 1 - 0
buildtools/.gitignore

@@ -0,0 +1 @@
+*.chw

+ 0 - 29
deployment/WinSCPnet.nuspec

@@ -1,29 +0,0 @@
-<?xml version="1.0"?>
-<package >
-  <metadata>
-    <id>WinSCP</id>
-    <version>$version$</version>
-    <title>WinSCP .NET assembly</title>
-    <authors>Martin Prikryl</authors>
-    <owners>Martin Prikryl</owners>
-    <licenseUrl>http://www.mozilla.org/MPL/2.0/</licenseUrl>
-    <projectUrl>http://winscp.net/eng/docs/library</projectUrl>
-    <iconUrl>http://winscp.net/pad/winscp.png</iconUrl>
-    <requireLicenseAcceptance>false</requireLicenseAcceptance>
-    <summary>The WinSCP .NET assembly is a .NET wrapper around WinSCP’s scripting interface.</summary>
-    <description>The WinSCP .NET assembly is a .NET wrapper around WinSCP’s scripting interface that allows your code to connect to a remote machine and manipulate remote files over SFTP, SCP, and FTP sessions.
-    
-The library is primarily intended for advanced automation tasks that require conditional processing, loops or other control structures for which the basic scripting interface is too limited. The library is not a general purpose file transfer library. It particularly lacks support for interactive processing and as such it is not well suited for use in GUI applications.
-
-For documentation and examples of use, see project website.
-
-The NuGet package includes the assembly itself and a required WinSCP executable. When installed, it adds the assembly as reference to your project and sets up WinSCP executable to be copied to project output directory, so that it can be found on run-time.</description>
-    <copyright>Copyright © 2012-2016 Martin Prikryl</copyright>
-    <tags>winscp sftp ftp ftps scp transfer</tags>
-  </metadata>
-  <files>
-    <file src="$BuildConfigDir$\WinSCPnet.dll" target="lib"/>
-    <file src="$BuildConfigDir$\WinSCP.exe" target="content"/>
-    <file src="install.ps1" target="tools"/>
-  </files>
-</package>

+ 0 - 7
deployment/install.ps1

@@ -1,7 +0,0 @@
-param($installPath, $toolsPath, $package, $project)
-
-$file1 = $project.ProjectItems.Item("WinSCP.exe")
-
-# set 'Copy To Output Directory' to 'Copy if newer'
-$copyToOutput = $file1.Properties.Item("CopyToOutputDirectory")
-$copyToOutput.Value = 2

+ 0 - 286
deployment/license.setup.txt

@@ -1,286 +0,0 @@
-You can also review this license and further details online at:
-http://winscp.net/eng/docs/license
-
-  
-  A. GNU General Public License
-  B. License of WinSCP Icon Set
-  C. Privacy Policy
-
-
-  A. GNU GENERAL PUBLIC LICENSE
-  Version 3, 29 June 2007
-
-Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
-Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
-
-  Preamble
-
-The GNU General Public License is a free, copyleft license for software and other kinds of works.
-
-The licenses for most software and other practical works are designed to take away your freedom to share and change the works.  By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users.  We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors.  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 them 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 prevent others from denying you these rights or asking you to surrender the rights.  Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others.
-
-For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received.  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.
-
-Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it.
-
-For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software.  For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions.
-
-Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so.  This is fundamentally incompatible with the aim of protecting users' freedom to change the software.  The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable.  Therefore, we have designed this version of the GPL to prohibit the practice for those products.  If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users.
-
-Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary.  To prevent this, the GPL assures that patents cannot be used to render the program non-free.
-
-The precise terms and conditions for copying, distribution and modification follow.
-
-  TERMS AND CONDITIONS
-
-  0. Definitions.
-
-"This License" refers to version 3 of the GNU General Public License.
-
-"Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks.
-
-"The Program" refers to any copyrightable work licensed under this License.  Each licensee is addressed as "you".  "Licensees" and "recipients" may be individuals or organizations.
-
-To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy.  The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work.
-
-A "covered work" means either the unmodified Program or a work based on the Program.
-
-To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy.  Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well.
-
-To "convey" a work means any kind of propagation that enables other parties to make or receive copies.  Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying.
-
-An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License.  If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-The "source code" for a work means the preferred form of the work for making modifications to it.  "Object code" means any non-source form of a work.
-
-A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language.
-
-The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form.  A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it.
-
-The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities.  However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work.  For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work.
-
-The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source.
-
-The Corresponding Source for a work in source code form is that same work.
-
-  2. Basic Permissions.
-
-All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met.  This License explicitly affirms your unlimited permission to run the unmodified Program.  The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work.  This License acknowledges your rights of fair use or other equivalent, as provided by copyright law.
-
-You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force.  You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright.  Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you.
-
-Conveying under any other circumstances is permitted solely under the conditions stated below.  Sublicensing is not allowed; section 10 makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures.
-
-When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures.
-
-  4. Conveying Verbatim Copies.
-
-You may convey 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; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program.
-
-You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions:
-
-a) The work must carry prominent notices stating that you modified it, and giving a relevant date.
-
-b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7.  This requirement modifies the requirement in section 4 to "keep intact all notices".
-
-c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy.  This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged.  This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it.
-
-d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so.
-
-A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit.  Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways:
-
-a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange.
-
-b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge.
-
-c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source.  This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b.
-
-d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge.  You need not require recipients to copy the Corresponding Source along with the object code.  If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source.  Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements.
-
-e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d.
-
-A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work.
-
-A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling.  In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage.  For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product.  A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product.
-
-"Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source.  The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made.
-
-If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information.  But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM).
-
-The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed.  Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network.
-
-Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying.
-
-  7. Additional Terms.
-
-"Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law.  If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions.
-
-When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it.  (Additional permissions may be written to require their own removal in certain cases when you modify the work.)  You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission.
-
-Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms:
-
-a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or
-
-b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or
-
-c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or
-
-d) Limiting the use for publicity purposes of names of licensors or authors of the material; or
-
-e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or
-
-f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors.
-
-All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10.  If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term.  If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying.
-
-If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms.
-
-Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way.
-
-  8. Termination.
-
-You may not propagate or modify a covered work except as expressly provided under this License.  Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11).
-
-However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.
-
-Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.
-
-Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License.  If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-You are not required to accept this License in order to receive or run a copy of the Program.  Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance.  However, nothing other than this License grants you permission to propagate or modify any covered work.  These actions infringe copyright if you do not accept this License.  Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License.  You are not responsible for enforcing compliance by third parties with this License.
-
-An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations.  If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts.
-
-You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License.  For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based.  The work thus licensed is called the contributor's "contributor version".
-
-A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version.  For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License.
-
-Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version.
-
-In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement).  To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party.
-
-If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients.  "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid.
-
-If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it.
-
-A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License.  You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007.
-
-Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-If 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 convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all.  For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work.  The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such.
-
-  14. Revised Versions of this License.
-
-The Free Software Foundation may publish revised and/or new versions of the GNU 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 that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Softwar  Foundation.  If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation.
-
-If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program.
-
-Later license versions may give you additional or different permissions.  However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version.
-
-  15. Disclaimer of Warranty.
-
-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.
-
-  16. Limitation of Liability.
-
-IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 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.
-
-  17. Interpretation of Sections 15 and 16.
-
-If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.
-
-  END OF TERMS AND CONDITIONS
-
-  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 state 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 3 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, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode:
-
-  <program>  Copyright (C) <year>  <name of author>
-  This program 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, your program's commands might be different; for a GUI interface, you would use an "about box".
-
-You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see <http://www.gnu.org/licenses/>.
-
-The GNU 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 Lesser General Public License instead of this License.  But first, please read <http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
-
-  B. License of WinSCP Icon Set
-  
-Note that all images distributed in or with WinSCP application are NOT published under the GNU General Public License. It means that it is not allowed to redistribute or reuse these images or parts of them or modifications of them without WinSCP separately or in or with another software.
-
-You agree that all ownership and copyright of the licensed stock icons remain the property of York Technologies Limited. WinSCP was granted a license to display this graphical media royalty-free in WinSCP software applications, web design, presentations, and multimedia projects that WinSCP creates and/or distributes.
-
-
-  C. WinSCP Privacy Policy
-
-Please take time to read WinSCP Privacy policy at http://winscp.net/eng/docs/privacy
-
-WinSCP includes functionality to collect and send non-personal WinSCP Usage statistics and to automatically check for application updates. The only potentially personal information sent to WinSCP is IP addresses. Users can opt-out from using this functionality in the installer or anytime later in WinSCP Preferences. WinSCP Usage statistics help improve future versions of WinSCP. Once sent, usage statistics are stored for analysis (except IP addresses) and made available to the core WinSCP team only.
-
-Before disabling WinSCP Usage statistics, be so kind and consider that it plays very important role in the WinSCP development. We work very hard to make WinSCP reliable and useful. We also love improving WinSCP with every release. And last but not least, we provide WinSCP application to you for free and we want this to stay so! However our resources and time are unfortunately very limited. We want to focus our effort on improving the right features for you. That is why we need to learn more about how you use WinSCP.
-
-If you still want to disable WinSCP Usage statistics already during installation, you may do so using Custom installation.
-
-Thank you!
-

+ 0 - 722
deployment/license.txt

@@ -1,722 +0,0 @@
-  A. GNU General Public License
-  B. License of WinSCP Icon Set
-  C. Privacy Policy
-
-  
-  A. GNU GENERAL PUBLIC LICENSE
-  Version 3, 29 June 2007
-
-  Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
-  Everyone is permitted to copy and distribute verbatim copies
-  of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  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
-them 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 prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  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.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey 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;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If 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 convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU 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 that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  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.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-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.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            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
-state 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 3 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, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program 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, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU 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 Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
-
-  B. License of WinSCP Icon Set
-  
-Note that all images distributed in or with WinSCP application are NOT
-published under the GNU General Public License. It means that it is not
-allowed to redistribute or reuse these images or parts of them or modifications
-of them without WinSCP separately or in or with another software.
-
-You agree that all ownership and copyright of the licensed stock icons remain
-the property of York Technologies Limited. WinSCP was granted a license to
-display this graphical media royalty-free in WinSCP software applications,
-web design, presentations, and multimedia projects that WinSCP creates and/or
-distributes.
-
-
-  C. WinSCP Privacy Policy
-
-Please take time to read WinSCP Privacy policy at
-http://winscp.net/eng/docs/privacy
-
-WinSCP includes functionality to collect and send non-personal WinSCP
-Usage statistics and to automatically check for application updates. The only
-potentially personal information sent to WinSCP is IP addresses. Users can
-opt-out from using this functionality in the installer or anytime later
-in WinSCP Preferences. WinSCP Usage statistics help improve future versions
-of WinSCP. Once sent, usage statistics are stored for analysis (except
-IP addresses) and made available to the core WinSCP team only.
-
-Before disabling WinSCP Usage statistics, be so kind and consider that it
-plays very important role in the WinSCP development. We work very hard
-to make WinSCP reliable and useful. We also love improving WinSCP with every
-release. And last but not least, we provide WinSCP application to you
-for free and we want this to stay so! However our resources and time are
-unfortunately very limited. We want to focus our effort on improving
-the right features for you. That is why we need to learn more about how you
-use WinSCP.
-
-If you still want to disable WinSCP Usage statistics already during
-installation, you may do so using Custom installation.
-
-Thank you!
-

+ 0 - 9
deployment/readme.txt

@@ -1,9 +0,0 @@
-To create 'winscpxxxsetup.exe' install package, follow these steps:
-1) build 'WinSCP.exe', 'Console.com' and 'DragExt.dll' (see ..\readme)
-2) install 'Inno Setup'
-   http://www.jrsoftware.org/isinfo.php
-3) install 'PuTTY' package to directory 'c:\program files\putty\'
-   http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
-   (A Windows-style installer for everything except PuTTYtel)
-4) run 'iscc winscpsetup.iss'
-4) file 'winscpxxxsetup.exe' is created

+ 0 - 68
deployment/winscp.isl

@@ -1,68 +0,0 @@
-[CustomMessages]
-LanguageISOCode=en
-
-ApplicationComponent=WinSCP application
-ShellExtComponent=Drag & drop shell extension (allows direct downloads, may require restart)
-PuTTYgenComponent=PuTTYgen (key generator)
-PageantComponent=Pageant (SSH authentication agent)
-TranslationsComponent=Translations
-
-DesktopIconTask=Create a &desktop icon
-DesktopIconUserTask=For the current user only
-DesktopIconCommonTask=For all users
-QuickLaunchIconTask=Create a &Quick Launch icon
-SendToHookTask=Add &upload shortcut to Explorer's 'Send to' context menu
-RegisterAsUrlHandlers=Register to handle URL &addresses
-AddSearchPath=Add installation directory to &search path (%PATH%)
-EnableUpdates=Enable automatic &check for application updates (recommended)
-EnableCollectUsage=Enable collecting &anonymous usage statistics
-
-RegisteringAsUrlHandlers=Registering to handle URL addresses...
-AddingSearchPath=Adding installation directory to search path (%PATH%)
-RemovingObsoleteTranslations=Removing obsolete translations
-
-SendToHookNew=WinSCP (for upload)
-Launch=Launch &WinSCP
-OpenGettingStarted=Open &Getting started page
-
-HelpButton=&Help
-ProgramComment=SFTP, FTP and SCP client
-
-; WinSCP Runtime
-Recommended=%1 (recommended)
-SetupTypeTitle=Setup type
-SetupTypePrompt=What type of setup do you want?
-TypicalType=&Typical installation
-TypicalType1=- installs to default destination
-TypicalType2Intl=- installs all components, but only %1 translation
-TypicalType2Eng=- installs all components, but no translations
-TypicalType3=- enables most typical features
-TypicalUpgradeType=&Full upgrade
-TypicalUpgradeType1=- upgrades all previously installed components
-TypicalUpgradeTypeNoTransl=- except for all translations, as this release does NOT include any
-TypicalUpgradeTypeMissingTransl=- except for some translations that are NOT included in this release: %1
-CustomType=&Custom installation
-CustomType1=- allows full selection of destination, components and features
-CustomUpgradeType=&Custom upgrade or new installation
-CustomUpgradeType1=- allows custom upgrade of existing installation or
-CustomUpgradeType2=- new installation to different destination
-UserSettingsTitle=Initial user settings
-UserSettingsPrompt=Please, select your preferred user interface options.
-UserInterfaceStyle=User interface style
-NortonCommanderInterfaceC=&Commander
-NortonCommanderInterface1=- two panels (left for local directory, right for remote directory)
-NortonCommanderInterface2=- keyboard shortcuts like in Norton Commander (and other similar programs as Total Commander, Midnight Commander...)
-NortonCommanderInterface3=- drag && drop to/from both panels
-ExplorerInterfaceC=&Explorer
-ExplorerInterface1=- only remote directory
-ExplorerInterface2=- keyboard shortcuts like in Windows Explorer
-ExplorerInterface3=- drag && drop
-UserSettingsOverview=Initial user settings (can be changed later)
-FinishedRestartDragExtLabel=To complete the installation of WinSCP, Setup must restart your computer to load updated version of Drag & drop shell extension. You can restart your computer later, if you do not need to use the extension. Would you like to restart now?
-PleaseDonate=Please consider donating to support WinSCP development.
-AboutDonations=About donations
-Donate=Donate %s
-Currency=USD
-ImportSites=Looking for sites to import...
-ApplicationsFoundDragExt=The following applications have loaded WinSCP Drag & drop shell extension that needs to be updated by Setup. It is recommended that you allow Setup to automatically close these applications. After the installation has completed, Setup will attempt to restart the applications. You can restart your computer later instead, if you do not need to use the extension.
-AcceptButton=&Accept >

二进制
deployment/winscpsetup.ico


+ 0 - 1342
deployment/winscpsetup.iss

@@ -1,1342 +0,0 @@
-#define AppId "winscp3"
-#define ParentRegistryKey "Software\Martin Prikryl"
-#define RegistryKey ParentRegistryKey+"\WinSCP 2"
-#define DefaultLang "en"
-#define WebRoot "http://winscp.net/"
-#define WebForum WebRoot+"forum/"
-#define WebDocumentation WebRoot+"eng/docs/"
-#define WebReport WebRoot+"install.php"
-#define WebPuTTY "http://www.chiark.greenend.org.uk/~sgtatham/putty/"
-#define Year 2016
-#define EnglishLang "English"
-#define SetupTypeData "SetupType"
-#define InnoSetupReg "Software\Microsoft\Windows\CurrentVersion\Uninstall\" + AppId + "_is1"
-#define InnoSetupAppPathReg "Inno Setup: App Path"
-
-#ifndef PuttySourceDir
-  #define PuttySourceDir "c:\Program Files\PuTTY"
-#endif
-#ifndef Status
-  #define Status "unofficial"
-#endif
-#ifndef SourceDir
-  #define SourceDir "..\source"
-#endif
-#ifndef BinariesDir
-  #define BinariesDir SourceDir + "\Release"
-#endif
-#ifndef OutputSuffix
-  #define OutputSuffix
-#endif
-#ifndef AllTranslations
-  #define AllTranslations
-#endif
-
-#define TranslationDirRel "translations"
-#define TranslationDir "translations"
-#define OutputDir "."
-
-#define TranslationFileMask "WinSCP.???"
-#define MainFileName "WinSCP.exe"
-#define MainFileSource BinariesDir+"\"+MainFileName
-#define ShellExtFileName "DragExt.dll"
-#define ShellExtFileSource BinariesDir+"\"+ShellExtFileName
-#define ShellExt64FileName "DragExt64.dll"
-#define ShellExt64FileSource BinariesDir+"\"+ShellExt64FileName
-#define ConsoleFileSource BinariesDir+"\WinSCP.com"
-#define IconFileSource SourceDir+"\resource\Icon256.ico"
-#define MapFileSource BinariesDir+"\WinSCP.map"
-
-#ifdef Donations
-#define PayPalCardImage "paypalcard.bmp"
-#endif
-
-#define Major
-#define Minor
-#define Rev
-#define Build
-#expr ParseVersion(MainFileSource, Major, Minor, Rev, Build)
-#define VersionOnly Str(Major)+"."+Str(Minor)+(Rev > 0 ? "."+Str(Rev) : "")
-#define Version VersionOnly+(Status != "" ? " "+Status : "")
-
-#define WebArguments "ver=" +VersionOnly + "&lang={language}&utm_source=winscp&utm_medium=setup&utm_campaign=" + VersionOnly
-#define WebGettingStarted WebRoot + "eng/installed.php?" + WebArguments + "&prevver="
-
-; Some features of ISCC requires path relative to script,
-; some path relative to CWD
-#define MessagesPathRel(L) TranslationDirRel + "\" + "WinSCP." + L + ".isl"
-
-#define ExplorerFile "explorer.bmp"
-#define CommanderFile "commander.bmp"
-
-[Setup]
-AppId={#AppId}
-AppName=WinSCP
-AppMutex=WinSCP
-AppPublisher=Martin Prikryl
-AppPublisherURL={#WebRoot}
-AppSupportURL={#WebForum}
-AppUpdatesURL={#WebRoot}eng/download.php
-VersionInfoCompany=Martin Prikryl
-VersionInfoDescription=Setup for WinSCP {#Version} (SFTP, FTP and SCP client)
-VersionInfoVersion={#Major}.{#Minor}.{#Rev}.{#Build}
-VersionInfoTextVersion={#Version}
-VersionInfoCopyright=(c) 2000-{#Year} Martin Prikryl
-DefaultDirName={pf}\WinSCP
-DefaultGroupName=WinSCP
-AllowNoIcons=yes
-LicenseFile=license.setup.txt
-UninstallDisplayIcon={app}\WinSCP.exe
-OutputDir={#OutputDir}
-DisableStartupPrompt=yes
-AppVersion={#Version}
-AppVerName=WinSCP {#Version}
-OutputBaseFilename=winscp{#Major}{#Minor}{#Rev}setup{#OutputSuffix}
-SolidCompression=yes
-WizardImageFile=compiler:WizModernImage-IS.bmp
-WizardSmallImageFile=compiler:WizModernSmallImage-IS.bmp
-ShowTasksTreeLines=yes
-PrivilegesRequired=none
-UsePreviousLanguage=yes
-DisableProgramGroupPage=yes
-MinVersion=0,5.1
-SetupIconFile=winscpsetup.ico
-#ifdef Sign
-SignTool=sign $f "WinSCP Installer" http://winscp.net/eng/docs/installation
-#endif
-
-[Languages]
-; English has to be first so that it is pre-selected
-; on Setup Select Language window, when no translation matching
-; Windows UI locale is available
-Name: {#DefaultLang}; MessagesFile: {#MessagesPathRel(DefaultLang)}
-
-#define FindHandle
-#dim Languages[200]
-#define LanguageCount 0
-#define AnyLanguageComplete 0
-#define LangI
-#define Complete
-#define DirName
-#define DirNameRel
-
-#sub ProcessTranslationFile
-
-  #define FileName FindGetFileName(FindHandle)
-  #define Lang Copy(FileName, Pos(".", FileName)+1)
-  #define MessagesPath DirName + "\" + "WinSCP." + Lang + ".isl"
-
-  #define LangNameFull ReadIni(MessagesPath, "LangOptions", "LanguageName")
-  #define Sep Pos(" - ", LangNameFull)
-  #if Sep > 0
-    #define LangName Copy(LangNameFull, 1, Sep - 1)
-  #else
-    #define LangName LangNameFull
-  #endif
-  #define LangID ReadIni(MessagesPath, "LangOptions", "LanguageID")
-
-  #expr Languages[LanguageCount*4] = Lang
-  #expr Languages[LanguageCount*4+1] = LangName
-  #expr Languages[LanguageCount*4+2] = LangID
-  #expr Languages[LanguageCount*4+3] = Complete
-  #expr LanguageCount++
-
-#if Complete == 1
-Name: {#Lang}; MessagesFile: {#MessagesPathRel(Lang)}
-  #expr AnyLanguageComplete = 1
-#endif
-
-#endsub /* sub ProcessTranslationFile */
-
-#sub ProcessTranslationDir
-
-  #if FindHandle = FindFirst(DirNameRel + "\" + TranslationFileMask, 0)
-    #define FResult 1
-    #for {0; FResult; FResult = FindNext(FindHandle)} ProcessTranslationFile
-    #expr FindClose(FindHandle)
-  #endif
-
-#endsub /* sub ProcessTranslationDir */
-
-#expr Complete = 1
-#expr DirName = TranslationDir
-#expr DirNameRel = TranslationDirRel
-#emit ProcessTranslationDir
-
-#ifdef TranslationIncompleteDir
-  #expr Complete = 0
-  #expr DirName = TranslationIncompleteDir
-  #expr DirNameRel = TranslationIncompleteDirRel
-  #emit ProcessTranslationDir
-#endif
-
-; Types are not used anymore, they are preserved only to let setup
-; detect previous installation type and decide between typical/custom setup
-[Types]
-Name: full; Description: "full"
-Name: compact; Description: "compact"
-Name: custom; Description: "custom"; Flags: iscustom
-
-[Components]
-Name: main; Description: {cm:ApplicationComponent}; \
-  Types: full custom compact; Flags: fixed
-Name: shellext; Description: {cm:ShellExtComponent}; \
-  Types: full compact
-Name: pageant; Description: {cm:PageantComponent}; \
-  Types: full
-Name: puttygen; Description: {cm:PuTTYgenComponent}; \
-  Types: full
-#if AnyLanguageComplete == 1
-Name: transl; Description: {cm:TranslationsComponent}; \
-  Types: full
-#endif
-
-[Tasks]
-Name: enableupdates; Description: {cm:EnableUpdates}
-Name: enableupdates\enablecollectusage; Description: {cm:EnableCollectUsage}
-; Windows integration
-Name: desktopicon; Description: {cm:DesktopIconTask}
-Name: desktopicon\user; Description: {cm:DesktopIconUserTask}; \
-  Flags: exclusive unchecked
-Name: desktopicon\common; Description: {cm:DesktopIconCommonTask}; \
-  Flags: exclusive
-; No Quick Launch on Win7
-Name: quicklaunchicon; Description: {cm:QuickLaunchIconTask}; \
-  Flags: unchecked; OnlyBelowVersion: 6.1.7600
-Name: sendtohook; Description: {cm:SendToHookTask}
-Name: urlhandler; Description: {cm:RegisterAsUrlHandlers}
-Name: searchpath; Description: {cm:AddSearchPath}; \
-  Flags: unchecked; Check: IsAdminLoggedOn
-
-[Icons]
-Name: "{commonprograms}\WinSCP"; Filename: "{app}\WinSCP.exe"; Components: main; \
-  Comment: "{cm:ProgramComment}"
-; This is created when desktopicon task is selected
-Name: "{userdesktop}\WinSCP"; Filename: "{app}\WinSCP.exe"; \
-  Tasks: desktopicon\user
-Name: "{commondesktop}\WinSCP"; Filename: "{app}\WinSCP.exe"; \
-  Tasks: desktopicon\common
-; This is created when quicklaunchicon task is selected
-Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\WinSCP"; \
-  Filename: "{app}\WinSCP.exe"; Tasks: quicklaunchicon
-; This is created when sendtohook task is selected
-Name: "{sendto}\{cm:SendToHookNew}"; Filename: "{app}\WinSCP.exe"; \
-  Parameters: "/upload"; Tasks: sendtohook
-
-[InstallDelete]
-; Remove pre-524 licence file (without .txt extension)
-Type: files; Name: "{app}\license"
-; Remove pre-520 start menu folders
-Type: filesandordirs; Name: "{commonprograms}\WinSCP"
-Type: filesandordirs; Name: "{userprograms}\WinSCP"; Check: HasUserPrograms
-
-[Run]
-Filename: "{app}\WinSCP.exe"; Parameters: "/RegisterForDefaultProtocols"; \
-  StatusMsg: {cm:RegisteringAsUrlHandlers}; Tasks: urlhandler
-Filename: "{app}\WinSCP.exe"; Parameters: "/AddSearchPath"; \
-  StatusMsg: {cm:AddingSearchPath}; Tasks: searchpath
-Filename: "{app}\WinSCP.exe"; Parameters: "/ImportSitesIfAny"; \
-  StatusMsg: {cm:ImportSites}; Flags: skipifsilent
-
-[UninstallDelete]
-; These additional files are created by application
-Type: files; Name: "{app}\WinSCP.ini"
-Type: files; Name: "{app}\WinSCP.cgl"
-
-[Files]
-Source: "{#MainFileSource}"; DestDir: "{app}"; \
-  Components: main; Flags: ignoreversion
-Source: "{#ConsoleFileSource}"; DestDir: "{app}"; \
-  Components: main; Flags: ignoreversion
-Source: "{#MapFileSource}"; DestDir: "{app}"; \
-  Components: main; Flags: ignoreversion
-Source: "license.txt"; DestDir: "{app}"; \
-  Components: main; Flags: ignoreversion
-Source: "{#ShellExtFileSource}"; DestDir: "{app}"; \
-  Components: shellext; \
-  Flags: regserver restartreplace uninsrestartdelete; \
-  Check: not IsWin64 and IsShellExtNewer(ExpandConstant('{app}\{#ShellExtFileName}'), '{#GetFileVersion(ShellExtFileSource)}')
-Source: "{#ShellExt64FileSource}"; DestDir: "{app}"; \
-  Components: shellext; \
-  Flags: regserver restartreplace uninsrestartdelete; \
-  Check: IsWin64 and IsShellExtNewer(ExpandConstant('{app}\{#ShellExt64FileName}'), '{#GetFileVersion(ShellExt64FileSource)}')
-Source: "{#PuttySourceDir}\LICENCE"; DestDir: "{app}\PuTTY"; \
-  Components: pageant puttygen; Flags: ignoreversion
-Source: "{#PuttySourceDir}\putty.hlp"; DestDir: "{app}\PuTTY"; \
-  Components: pageant puttygen; Flags: ignoreversion
-Source: "{#PuttySourceDir}\pageant.exe"; DestDir: "{app}\PuTTY"; \
-  Components: pageant; Flags: ignoreversion
-Source: "{#PuttySourceDir}\puttygen.exe"; DestDir: "{app}\PuTTY"; \
-  Components: puttygen; Flags: ignoreversion
-Source: "{#ExplorerFile}"; Flags: dontcopy
-Source: "{#CommanderFile}"; Flags: dontcopy
-#ifdef Donations
-Source: "{#PayPalCardImage}"; \
-  Flags: dontcopy
-#endif
-
-[Registry]
-Root: HKCU; Subkey: "{#ParentRegistryKey}"; Flags: uninsdeletekeyifempty
-Root: HKCU; Subkey: "{#RegistryKey}"; Flags: uninsdeletekeyifempty
-; Norton Commander interface
-Root: HKCU; SubKey: "{#RegistryKey}\Configuration\Interface"; ValueType: dword; \
-  ValueName: "Interface"; ValueData: 0; Check: UserSettings(1)
-Root: HKLM; SubKey: "{#RegistryKey}"; ValueType: dword; \
-  ValueName: "DefaultInterfaceInterface"; ValueData: 0; \
-  Check: UserSettings(1); Flags: noerror
-; Explorer-like interface
-Root: HKCU; SubKey: "{#RegistryKey}\Configuration\Interface"; ValueType: dword; \
-  ValueName: "Interface"; ValueData: 1; Check: not UserSettings(1)
-Root: HKLM; SubKey: "{#RegistryKey}"; ValueType: dword; \
-  ValueName: "DefaultInterfaceInterface"; ValueData: 1; \
-  Check: not UserSettings(1); Flags: noerror
-; If installer enabled ddext, let it reset the settings on uninstall,
-; so the default is used on the next run
-Root: HKCU; SubKey: "{#RegistryKey}\Configuration\Interface"; ValueType: dword; \
-  ValueName: "DDExtEnabled"; ValueData: 1; Components: shellext; \
-  Flags: uninsdeletevalue
-; Updates
-Root: HKCU; SubKey: "{#RegistryKey}\Configuration\Interface\Updates"; \
-  ValueType: dword; ValueName: "Period"; ValueData: 7; \
-  Tasks: enableupdates; Check: not UpdatesEnabled
-Root: HKLM; SubKey: "{#RegistryKey}"; \
-  ValueType: dword; ValueName: "DefaultUpdatesPeriod"; ValueData: 7; \
-  Tasks: enableupdates; Flags: noerror
-Root: HKLM; SubKey: "{#RegistryKey}"; \
-  ValueType: dword; ValueName: "DefaultCollectUsage"; ValueData: 1; \
-  Tasks: enableupdates\enablecollectusage; Flags: noerror
-
-#if AnyLanguageComplete == 1
-
-[Components]
-Name: transl\eng; Description: {#EnglishLang}; Types: full custom compact; \
-  Flags: fixed
-
-#endif
-
-#sub EmitLang
-
-  #if Languages[LangI*4+3] == 1
-
-[Components]
-Name: transl\{#Languages[LangI*4]}; Description: {#Languages[LangI*4+1]}; \
-  Types: full compact custom; Check: IsLang('{#Languages[LangI*4]}')
-Name: transl\{#Languages[LangI*4]}; Description: {#Languages[LangI*4+1]}; \
-  Check: not IsLang('{#Languages[LangI*4]}')
-
-[Files]
-Source: "{#TranslationDirRel}\WinSCP.{#Languages[LangI*4]}"; DestDir: "{app}"; \
-  Components: transl\{#Languages[LangI*4]}; Flags: ignoreversion
-
-[Registry]
-; set program default language to setup language, but only if user installs it
-Root: HKCU; SubKey: "{#RegistryKey}\Configuration\Interface"; \
-  ValueType: dword; ValueName: "LocaleSafe"; ValueData: {#Languages[LangI*4+2]}; \
-  Components: transl\{#Languages[LangI*4]}; Languages: {#Languages[LangI*4]}
-
-  #endif
-
-#endsub /* sub EmitLang */
-
-#for {LangI = 0; LangI < LanguageCount; LangI++} EmitLang
-
-[UninstallRun]
-; Make sure no later uninstall task recreate the configuration
-Filename: "{app}\WinSCP.exe"; Parameters: "/UninstallCleanup"; \
-  RunOnceId: "UninstallCleanup"
-Filename: "{app}\WinSCP.exe"; Parameters: "/RemoveSearchPath"; \
-  RunOnceId: "RemoveSearchPath"
-Filename: "{app}\WinSCP.exe"; Parameters: "/UnregisterForProtocols"; \
-  RunOnceId: "UnregisterForProtocols"
-
-[Code]
-const
-  wpSetupType = 100;
-  wpInterface = 101;
-  NewLine = #13#10;
-
-var
-  TypicalTypeButton: TRadioButton;
-  CustomTypeButton: TRadioButton;
-  CommanderRadioButton: TRadioButton;
-  ExplorerRadioButton: TRadioButton;
-  LaunchCheckbox: TCheckbox;
-  OpenGettingStartedCheckbox: TCheckbox;
-  AreUpdatesEnabled: Boolean;
-  Upgrade: Boolean;
-  MissingTranslations: string;
-  PrevVersion: string;
-  ShellExtNewerCacheFileName: string;
-  ShellExtNewerCacheResult: Boolean;
-#ifdef Donations
-  DonationPanel: TPanel;
-#endif
-  InstallationDone: Boolean;
-  LicenseAccepted: Boolean;
-  InitDir: string;
-  InitComponents: string;
-  InitTasks: string;
-  InitInterface: Integer;
-  Donated: Boolean;
-
-procedure ShowMessage(Text: string);
-begin
-  MsgBox(Text, mbInformation, MB_OK);
-end;
-
-function IsLang(Lang: string): Boolean;
-begin
-  Result := (Lang = ActiveLanguage);
-end;
-
-function IsWin8: Boolean;
-var
-  Version: TWindowsVersion;
-begin
-  GetWindowsVersionEx(Version);
-
-  Result :=
-    (Version.Major > 6) or
-    ((Version.Major = 6) and (Version.Minor >= 2));
-end;
-
-procedure CutVersionPart(var VersionString: string; var VersionPart: Word);
-var
-  P: Integer;
-begin
-  P := Pos('.', VersionString);
-  if P > 0 then
-  begin
-    VersionPart := StrToIntDef(Copy(VersionString, 1, P - 1), 0);
-    Delete(VersionString, 1, P);
-  end
-    else
-  begin
-    VersionPart := StrToIntDef(VersionString, 0);
-    VersionString := '';
-  end;
-end;
-
-function IsShellExtNewer(FileName: string; InstalledVersion: string): Boolean;
-var
-  ExistingMS, ExistingLS: Cardinal;
-  ExistingMajor, ExistingMinor, ExistingRev, ExistingBuild: Cardinal;
-  InstalledMajor, InstalledMinor, InstalledRev, InstalledBuild: Word;
-begin
-  if ShellExtNewerCacheFileName = FileName then
-  begin
-    if ShellExtNewerCacheResult then
-    begin
-      Log(Format('Allowing installation of shell extension %s as already decided', [FileName]));
-      Result := True;
-    end
-      else
-    begin
-      Log(Format('Skipping installation of shell extension %s as already decided', [FileName]));
-      Result := False;
-    end;
-  end
-    else
-  if not FileExists(FileName) then
-  begin
-    Log(Format('Shell extension %s does not exist yet, allowing installation', [FileName]));
-    Result := True;
-  end
-    else
-  if not GetVersionNumbers(FileName, ExistingMS, ExistingLS) then
-  begin
-    Log(Format('Cannot retrieve version of existing shell extension %s, allowing installation', [FileName]));
-    Result := True;
-  end
-    else
-  begin
-    ExistingMajor := ExistingMS shr 16;
-    ExistingMinor := ExistingMS and $FFFF;
-    ExistingRev := ExistingLS shr 16;
-    ExistingBuild := ExistingLS and $FFFF;
-    Log(Format('Existing shell extension %s version: %d.%d.%d[.%d]', [FileName, ExistingMajor, ExistingMinor, ExistingRev, ExistingBuild]));
-
-    Log(Format('Installed extension version string: %s', [InstalledVersion]));
-    CutVersionPart(InstalledVersion, InstalledMajor);
-    CutVersionPart(InstalledVersion, InstalledMinor);
-    CutVersionPart(InstalledVersion, InstalledRev);
-    CutVersionPart(InstalledVersion, InstalledBuild);
-    Log(Format('Installed extension version: %d.%d.%d[.%d]', [InstalledMajor, InstalledMinor, InstalledRev, InstalledBuild]));
-
-    if ((InstalledMajor > ExistingMajor)) or
-       ((InstalledMajor = ExistingMajor) and (InstalledMinor > ExistingMinor)) or
-       ((InstalledMajor = ExistingMajor) and (InstalledMinor = ExistingMinor) and (InstalledRev > ExistingRev)) then
-    begin
-      Log('Installed extension is newer than existing extension, allowing installation');
-      Result := True;
-    end
-      else
-    begin
-      Log('Installed extension is same or older than existing extension, skipping installation');
-      Result := False;
-    end;
-  end;
-
-  ShellExtNewerCacheFileName := FileName;
-  ShellExtNewerCacheResult := Result;
-end;
-
-function UpdatesEnabled: Boolean;
-begin
-  Result := AreUpdatesEnabled;
-end;
-
-function UserSettings(Settings: Integer): Boolean;
-begin
-  case Settings of
-    1: Result := CommanderRadioButton.Checked;
-    else Result := False;
-  end;
-end;
-
-function LanguageName(Lang: string; Unknown: string): string;
-begin
-  #sub EmitLang2
-  if Lang = '{#Languages[LangI*4]}' then Result := '{#Languages[LangI*4+1]}'
-    else
-  #endsub /* sub EmitLang2 */
-
-  #for {LangI = 0; LangI < LanguageCount; LangI++} EmitLang2
-
-  Result := Unknown;
-end;
-
-function ContainsLanguage(Lang: string): Boolean;
-begin
-  #sub EmitLang3
-    #if Languages[LangI*4+3] == 1
-  if (Lang = '{#Languages[LangI*4]}') then Result := True
-    else
-    #endif
-  #endsub /* sub EmitLang3 */
-
-  #for {LangI = 0; LangI < LanguageCount; LangI++} EmitLang3
-
-  Result := False;
-end;
-
-procedure OpenBrowser(Url: string);
-var
-  ErrorCode: Integer;
-begin
-  ShellExec('open', Url, '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
-end;
-
-procedure OpenHelp;
-begin
-  OpenBrowser('{#WebDocumentation}installation?page=' + IntToStr(WizardForm.CurPageID) + '&' + ExpandConstant('{#WebArguments}'));
-end;
-
-procedure HelpButtonClick(Sender: TObject);
-begin
-  OpenHelp;
-end;
-
-#ifdef Donations
-
-procedure AboutDonationsLinkClick(Sender: TObject);
-begin
-  OpenBrowser('{#WebRoot}eng/donate.php?' + ExpandConstant('{#WebArguments}'));
-  Donated := true;
-end;
-
-procedure DonateLinkClick(Sender: TObject);
-var
-  Control: TControl;
-begin
-  Control := TControl(Sender);
-  OpenBrowser('{#WebRoot}eng/donate.php?amount=' + IntToStr(Control.Tag) + '&currency=' + ExpandConstant('{cm:Currency}') + '&' + ExpandConstant('{#WebArguments}'));
-  Donated := true;
-end;
-
-#endif
-
-procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
-begin
-  if Key = 112 { VK_F1 } then
-  begin
-    OpenHelp;
-    Key := 0;
-  end;
-end;
-
-procedure CaptionClick(Sender: TObject);
-begin
-  WizardForm.ActiveControl := TLabel(Sender).FocusControl;
-end;
-
-procedure ImageClick(Sender: TObject);
-begin
-  WizardForm.ActiveControl := TWinControl(TControl(Sender).Tag);
-end;
-
-type
-  TProcessTranslationEvent = procedure(Lang: string; FileName: string);
-
-procedure CollectNames(Lang: string; FileName: string);
-begin
-  if Length(MissingTranslations) > 0 then
-    MissingTranslations := MissingTranslations + ', ';
-  MissingTranslations := MissingTranslations + LanguageName(Lang, Lang);
-end;
-
-procedure DeleteTranslation(Lang: string; FileName: string);
-begin
-  DeleteFile(FileName);
-end;
-
-procedure ProcessMissingTranslations(OnProcessTranslation: TProcessTranslationEvent);
-var
-  Path: string;
-  FindRec: TFindRec;
-  Ext: string;
-  LExt: string;
-begin
-  Path := AddBackslash(WizardDirValue);
-
-  if FindFirst(ExpandConstant(Path + '{#TranslationFileMask}'), FindRec) then
-  begin
-    try
-      repeat
-        if FindRec.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then
-        begin
-          Ext := Uppercase(ExtractFileExt(FindRec.Name));
-          if Pos('.', Ext) = 1  then
-          begin
-            Ext := Uppercase(Copy(Ext, 2, Length(Ext) - 1));
-            LExt := Lowercase(Ext);
-            if (Pos('-' + Ext + '-', '-{#AllTranslations}-') > 0) and
-               not ContainsLanguage(LExt) then
-              OnProcessTranslation(LExt, Path + FindRec.Name);
-          end;
-        end;
-      until not FindNext(FindRec);
-    finally
-      FindClose(FindRec);
-    end;
-  end;
-end;
-
-function WillRestart: Boolean;
-begin
-  Result := WizardForm.YesRadio.Visible and WizardForm.YesRadio.Checked;
-end;
-
-procedure UpdatePostInstallRunCheckboxes(Sender: TObject);
-begin
-  LaunchCheckbox.Enabled := not WillRestart;
-  OpenGettingStartedCheckbox.Enabled :=
-    LaunchCheckbox.Enabled
-end;
-
-procedure LinkLabel(Control: TLabel);
-begin
-  Control.ParentFont := True;
-  Control.Font.Style := Control.Font.Style + [fsUnderline];
-  Control.Font.Color := clBlue;
-  Control.Cursor := crHand;
-end;
-
-function IsTypicalInstallation: Boolean;
-begin
-  Result := TypicalTypeButton.Checked;
-end;
-
-#ifdef Donations
-
-procedure CreateDonateLink(Amount: Integer; Row: Integer; Top: Integer);
-var
-  Caption: TLabel;
-begin
-  Caption := TLabel.Create(DonationPanel);
-  Caption.Left := 0;
-  Caption.Top := Top + Row * ScaleY(16);
-  Caption.Tag := Amount;
-  Caption.Parent := DonationPanel;
-  Caption.Caption := Format(ExpandConstant('{cm:Donate}'), ['$' + IntToStr(Amount)]);
-  Caption.OnClick := @DonateLinkClick;
-  LinkLabel(Caption);
-end;
-
-#endif
-
-procedure LoadEmbededBitmap(Image: TBitmapImage; Name: string);
-begin
-  ExtractTemporaryFile(Name);
-  Image.Bitmap.LoadFromFile(ExpandConstant('{tmp}\' + Name));
-  Image.AutoSize := True;
-end;
-
-// WORKAROUND
-// Checkboxes and Radio buttons created on runtime do
-// not scale their height automatically
-procedure ScaleFixedHeightControl(Control: TButtonControl);
-begin
-  Control.Height := ScaleY(Control.Height);
-end;
-
-procedure InitializeWizard;
-var
-  DefaultLang: Boolean;
-  UserInterface: Cardinal;
-  UpdatesPeriod: Cardinal;
-  InterfacePage: TWizardPage;
-  SetupTypePage: TWizardPage;
-  Caption: TLabel;
-  Image: TBitmapImage;
-  HelpButton: TButton;
-#ifdef Donations
-  P: Integer;
-#endif
-  S: string;
-begin
-  InstallationDone := False;
-  LicenseAccepted := False;
-  InitInterface := -1;
-
-  DefaultLang := (ActiveLanguage = '{#DefaultLang}');
-
-  Upgrade :=
-    RegQueryStringValue(HKLM, '{#InnoSetupReg}', '{#InnoSetupAppPathReg}', S) or
-    RegQueryStringValue(HKCU, '{#InnoSetupReg}', '{#InnoSetupAppPathReg}', S)
-
-  if Upgrade and GetVersionNumbersString(AddBackslash(WizardDirValue) + '{#MainFileName}', PrevVersion) and
-     (PrevVersion[2] = '.') and (PrevVersion[4] = '.') and (PrevVersion[6] = '.') then
-  begin
-    PrevVersion := Copy(PrevVersion, 1, 5);
-  end;
-
-  ProcessMissingTranslations(@CollectNames);
-
-  WizardForm.KeyPreview := True;
-  WizardForm.OnKeyDown := @FormKeyDown;
-  // to accomodate one more task
-  WizardForm.TasksList.Height := WizardForm.TasksList.Height + ScaleY(8);
-
-  // allow installation without requiring user to accept license
-  WizardForm.LicenseAcceptedRadio.Checked := True;
-  WizardForm.LicenseAcceptedRadio.Visible := False;
-  WizardForm.LicenseNotAcceptedRadio.Visible := False;
-  WizardForm.LicenseMemo.Height :=
-    WizardForm.LicenseNotAcceptedRadio.Top +
-    WizardForm.LicenseNotAcceptedRadio.Height -
-    WizardForm.LicenseMemo.Top - 5;
-
-  // hide installation types combo
-  WizardForm.TypesCombo.Visible := False;
-  WizardForm.ComponentsList.Height :=
-    WizardForm.ComponentsList.Top + WizardForm.ComponentsList.Height -
-    WizardForm.TypesCombo.Top;
-  WizardForm.ComponentsList.Top := WizardForm.TypesCombo.Top;
-
-  // add help button
-  HelpButton := TButton.Create(WizardForm);
-  HelpButton.Parent := WizardForm;
-  HelpButton.Left :=
-    WizardForm.ClientWidth -
-    (WizardForm.CancelButton.Left + WizardForm.CancelButton.Width);
-  HelpButton.Top := WizardForm.CancelButton.Top;
-  HelpButton.Width := WizardForm.CancelButton.Width;
-  HelpButton.Height := WizardForm.CancelButton.Height;
-  HelpButton.Caption := ExpandConstant('{cm:HelpButton}');
-  HelpButton.OnClick := @HelpButtonClick;
-
-  // installation type page
-
-  SetupTypePage := CreateCustomPage(wpLicense,
-    ExpandConstant('{cm:SetupTypeTitle}'),
-    ExpandConstant('{cm:SetupTypePrompt}'));
-
-  TypicalTypeButton := TRadioButton.Create(SetupTypePage);
-  if not Upgrade then
-    S := ExpandConstant('{cm:TypicalType}')
-  else
-    S := ExpandConstant('{cm:TypicalUpgradeType}');
-  TypicalTypeButton.Caption :=
-    FmtMessage(ExpandConstant('{cm:Recommended}'), [S]);
-  // check typical install, if typical install was installed before or
-  // when version without setup type support was installed with
-  // "full" installation or when there were no installation before
-  // ("full" installation is default)
-  TypicalTypeButton.Checked :=
-    ((GetPreviousData('{#SetupTypeData}', '') = 'typical')) or
-    ((GetPreviousData('{#SetupTypeData}', '') = '') and
-     (WizardSetupType(False) = 'full'));
-  TypicalTypeButton.Left := ScaleX(4);
-  TypicalTypeButton.Width := SetupTypePage.SurfaceWidth -
-    TypicalTypeButton.Left;
-  ScaleFixedHeightControl(TypicalTypeButton);
-  TypicalTypeButton.Parent := SetupTypePage.Surface;
-
-  Caption := TLabel.Create(SetupTypePage);
-  Caption.WordWrap := True;
-  if not Upgrade then
-  begin
-    if DefaultLang then
-      S := ExpandConstant('{cm:TypicalType2Eng}')
-    else
-      S := FmtMessage(ExpandConstant('{cm:TypicalType2Intl}'), [LanguageName(ActiveLanguage, 'Unknown')]);
-    Caption.Caption :=
-      ExpandConstant('{cm:TypicalType1}') + NewLine +
-      S + NewLine +
-      ExpandConstant('{cm:TypicalType3}');
-  end
-    else
-  begin
-    if Length(MissingTranslations) > 0 then
-    begin
-      #if AnyLanguageComplete
-        S := FmtMessage(ExpandConstant('{cm:TypicalUpgradeTypeMissingTransl}'), [MissingTranslations]);
-      #else
-        S := ExpandConstant('{cm:TypicalUpgradeTypeNoTransl}');
-      #endif
-      S := NewLine + S;
-    end
-      else S := '';
-
-    Caption.Caption :=
-      ExpandConstant('{cm:TypicalUpgradeType1}') + S;
-  end;
-  Caption.Left := ScaleX(4) + ScaleX(20);
-  Caption.Width := SetupTypePage.SurfaceWidth - Caption.Left;
-  Caption.Top := TypicalTypeButton.Top + TypicalTypeButton.Height + ScaleY(6);
-  Caption.Parent := SetupTypePage.Surface;
-  Caption.FocusControl := TypicalTypeButton;
-  Caption.OnClick := @CaptionClick;
-
-  CustomTypeButton := TRadioButton.Create(SetupTypePage);
-  if not Upgrade then
-    CustomTypeButton.Caption := ExpandConstant('{cm:CustomType}')
-  else
-    CustomTypeButton.Caption := ExpandConstant('{cm:CustomUpgradeType}');
-  CustomTypeButton.Checked := (not TypicalTypeButton.Checked);
-  CustomTypeButton.Left := ScaleX(4);
-  CustomTypeButton.Width := SetupTypePage.SurfaceWidth -
-    CustomTypeButton.Left;
-  CustomTypeButton.Top := Caption.Top + Caption.Height + ScaleY(10);
-  ScaleFixedHeightControl(CustomTypeButton);
-  CustomTypeButton.Parent := SetupTypePage.Surface;
-
-  Caption := TLabel.Create(SetupTypePage);
-  Caption.WordWrap := True;
-  if not Upgrade then
-  begin
-    Caption.Caption :=
-      ExpandConstant('{cm:CustomType1}');
-  end
-    else
-  begin
-    Caption.Caption :=
-      ExpandConstant('{cm:CustomUpgradeType1}') + NewLine +
-      ExpandConstant('{cm:CustomUpgradeType2}');
-  end;
-  Caption.Left := ScaleX(4) + ScaleX(20);
-  Caption.Width := SetupTypePage.SurfaceWidth - Caption.Left;
-  Caption.Top := CustomTypeButton.Top + CustomTypeButton.Height +
-    ScaleY(6);
-  Caption.Parent := SetupTypePage.Surface;
-  Caption.FocusControl := CustomTypeButton;
-  Caption.OnClick := @CaptionClick;
-
-  // interface page
-
-  InterfacePage := CreateCustomPage(wpSelectTasks,
-    ExpandConstant('{cm:UserSettingsTitle}'),
-    ExpandConstant('{cm:UserSettingsPrompt}'));
-
-  UpdatesPeriod := 0;
-  RegQueryDWordValue(HKCU, '{#RegistryKey}\Configuration\Interface\Updates',
-    'Period', UpdatesPeriod);
-  AreUpdatesEnabled := (UpdatesPeriod <> 0);
-
-  UserInterface := 0; { default is commander }
-  RegQueryDWordValue(HKCU, '{#RegistryKey}\Configuration\Interface',
-    'Interface', UserInterface);
-
-  Caption := TLabel.Create(InterfacePage);
-  Caption.Caption := ExpandConstant('{cm:UserInterfaceStyle}');
-  Caption.Width := InterfacePage.SurfaceWidth;
-  Caption.Parent := InterfacePage.Surface;
-
-  CommanderRadioButton := TRadioButton.Create(InterfacePage);
-  CommanderRadioButton.Caption := ExpandConstant('{cm:NortonCommanderInterfaceC}');
-  CommanderRadioButton.Checked := (UserInterface = 0);
-  CommanderRadioButton.Left := ScaleX(4);
-  CommanderRadioButton.Width := ScaleX(116);
-  CommanderRadioButton.Top := Caption.Top + Caption.Height + ScaleY(6);
-  ScaleFixedHeightControl(CommanderRadioButton);
-  CommanderRadioButton.Parent := InterfacePage.Surface;
-
-  Image := TBitmapImage.Create(InterfacePage);
-  Image.Top := CommanderRadioButton.Top + CommanderRadioButton.Height + ScaleY(6);
-  Image.Left := CommanderRadioButton.Left + ScaleX(45);
-  Image.Parent := InterfacePage.Surface;
-  LoadEmbededBitmap(Image, '{#CommanderFile}');
-  Image.ReplaceColor := $FF00FF;
-  Image.ReplaceWithColor := InterfacePage.Surface.Color;
-  Image.OnClick := @ImageClick;
-  Image.Tag := Integer(CommanderRadioButton);
-
-  Caption := TLabel.Create(InterfacePage);
-  Caption.WordWrap := True;
-  Caption.Caption :=
-      ExpandConstant('{cm:NortonCommanderInterface1}') + NewLine +
-      ExpandConstant('{cm:NortonCommanderInterface2}') + NewLine +
-      ExpandConstant('{cm:NortonCommanderInterface3}');
-  Caption.Left := CommanderRadioButton.Left + CommanderRadioButton.Width;
-  Caption.Width := InterfacePage.SurfaceWidth - Caption.Left;
-  Caption.Top := CommanderRadioButton.Top;
-  Caption.Parent := InterfacePage.Surface;
-  Caption.FocusControl := CommanderRadioButton;
-  Caption.OnClick := @CaptionClick;
-
-  ExplorerRadioButton := TRadioButton.Create(InterfacePage);
-  ExplorerRadioButton.Caption := ExpandConstant('{cm:ExplorerInterfaceC}');
-  ExplorerRadioButton.Checked := (UserInterface <> 0);
-  ExplorerRadioButton.Left := ScaleX(4);
-  ExplorerRadioButton.Width := CommanderRadioButton.Width;
-  ExplorerRadioButton.Top := Caption.Top + Caption.Height + ScaleY(10);
-  ScaleFixedHeightControl(ExplorerRadioButton);
-  ExplorerRadioButton.Parent := InterfacePage.Surface;
-
-  Image := TBitmapImage.Create(InterfacePage);
-  Image.Top := ExplorerRadioButton.Top + ExplorerRadioButton.Height + ScaleY(6);
-  Image.Left := ExplorerRadioButton.Left + ScaleX(45);
-  Image.Parent := InterfacePage.Surface;
-  LoadEmbededBitmap(Image, '{#ExplorerFile}');
-  Image.ReplaceColor := $C020E0;
-  Image.ReplaceWithColor := InterfacePage.Surface.Color;
-  Image.OnClick := @ImageClick;
-  Image.Tag := Integer(ExplorerRadioButton);
-
-  Caption := TLabel.Create(InterfacePage);
-  Caption.WordWrap := True;
-  Caption.Caption :=
-      ExpandConstant('{cm:ExplorerInterface1}') + NewLine +
-      ExpandConstant('{cm:ExplorerInterface2}') + NewLine +
-      ExpandConstant('{cm:ExplorerInterface3}');
-  Caption.Left := ExplorerRadioButton.Left + ExplorerRadioButton.Width;
-  Caption.Width := InterfacePage.SurfaceWidth - Caption.Left;
-  Caption.Top := ExplorerRadioButton.Top;
-  Caption.Parent := InterfacePage.Surface;
-  Caption.FocusControl := ExplorerRadioButton;
-  Caption.OnClick := @CaptionClick;
-
-  // run checkbox
-  LaunchCheckbox := TCheckbox.Create(WizardForm.FinishedPage);
-  LaunchCheckbox.Caption := ExpandConstant('{cm:Launch}');
-  LaunchCheckbox.Checked := True;
-  LaunchCheckbox.Left := WizardForm.YesRadio.Left;
-  LaunchCheckbox.Width := WizardForm.YesRadio.Width;
-  ScaleFixedHeightControl(LaunchCheckbox);
-  LaunchCheckbox.Parent := WizardForm.FinishedPage;
-  OpenGettingStartedCheckbox := TCheckbox.Create(WizardForm.FinishedPage);
-  OpenGettingStartedCheckbox.Caption := ExpandConstant('{cm:OpenGettingStarted}');
-  OpenGettingStartedCheckbox.Checked := True;
-  OpenGettingStartedCheckbox.Left := WizardForm.YesRadio.Left;
-  OpenGettingStartedCheckbox.Width := WizardForm.YesRadio.Width;
-  ScaleFixedHeightControl(OpenGettingStartedCheckbox);
-  OpenGettingStartedCheckbox.Parent := WizardForm.FinishedPage;
-
-#ifdef Donations
-
-  DonationPanel := TPanel.Create(WizardForm.FinishedPage);
-  DonationPanel.Left := WizardForm.YesRadio.Left;
-  DonationPanel.Width := WizardForm.YesRadio.Width;
-  DonationPanel.Parent := WizardForm.FinishedPage;
-  DonationPanel.Top := ScaleY(190);
-  DonationPanel.Height := ScaleY(110);
-  DonationPanel.BevelInner := bvNone;
-  DonationPanel.BevelOuter := bvNone;
-  DonationPanel.Color := WizardForm.FinishedPage.Color;
-
-  Caption := TLabel.Create(DonationPanel);
-  Caption.Left := 0;
-  Caption.Top := 0;
-  Caption.Width := DonationPanel.Width;
-  Caption.Parent := DonationPanel;
-  Caption.Caption := ExpandConstant('{cm:PleaseDonate}');
-
-  P := Caption.Top + Caption.Height + ScaleY(12);
-
-  CreateDonateLink( 9, 0, P);
-  CreateDonateLink(19, 1, P);
-  CreateDonateLink(29, 2, P);
-  CreateDonateLink(49, 3, P);
-
-  Caption := TLabel.Create(DonationPanel);
-  Caption.Left := 0;
-  Caption.Top := P + 3 * ScaleY(16) + ScaleY(24);
-  Caption.Parent := DonationPanel;
-  Caption.Caption := ExpandConstant('{cm:AboutDonations}');
-  Caption.OnClick := @AboutDonationsLinkClick;
-  LinkLabel(Caption);
-
-  Image := TBitmapImage.Create(DonationPanel);
-  LoadEmbededBitmap(Image, '{#PayPalCardImage}');
-  Image.Cursor := crHand;
-  Image.Parent := DonationPanel;
-  Image.Left := ScaleX(100);
-  Image.Top := P + ScaleX(8);
-  Image.ReplaceColor := $FCFE04;
-  Image.ReplaceWithColor := WizardForm.FinishedPage.Color;
-  Image.Hint := ExpandConstant('{cm:AboutDonations}');
-  Image.ShowHint := True;
-  Image.OnClick := @AboutDonationsLinkClick;
-
-#endif
-
-  WizardForm.YesRadio.OnClick := @UpdatePostInstallRunCheckboxes;
-  WizardForm.NoRadio.OnClick := @UpdatePostInstallRunCheckboxes;
-  UpdatePostInstallRunCheckboxes(nil);
-
-  if IsWin8 then
-  begin
-    WizardForm.NoIconsCheck.Checked := True;
-  end;
-end;
-
-procedure RegisterPreviousData(PreviousDataKey: Integer);
-var
-  S: string;
-begin
-  if IsTypicalInstallation then S := 'typical'
-    else S := 'custom';
-
-  SetPreviousData(PreviousDataKey, '{#SetupTypeData}', S);
-end;
-
-function SaveCheckListBoxState(ListBox: TNewCheckListBox): string;
-var
-  I: Integer;
-begin
-  for I := 0 to ListBox.Items.Count - 1 do
-  begin
-    Result := Result + IntToStr(Integer(ListBox.State[I]));
-  end;
-end;
-
-procedure CurPageChanged(CurPageID: Integer);
-var
-  Delta: Integer;
-  LineHeight: Integer;
-  LaunchCheckboxTop: Integer;
-begin
-  if CurPageID = wpLicense then
-  begin
-    WizardForm.NextButton.Caption := ExpandConstant('{cm:AcceptButton}')
-  end;
-
-  if CurPageID = wpSelectDir then
-  begin
-    if InitDir = '' then
-      InitDir := WizardForm.DirEdit.Text;
-  end
-    else
-  if CurPageID = wpSelectComponents then
-  begin
-    if InitComponents = '' then
-      InitComponents := SaveCheckListBoxState(WizardForm.ComponentsList);
-  end
-    else
-  if CurPageID = wpSelectTasks then
-  begin
-    if InitTasks = '' then
-      InitTasks := SaveCheckListBoxState(WizardForm.TasksList);
-  end
-    else
-  if CurPageID = wpInterface then
-  begin
-    if InitInterface < 0 then
-      InitInterface := Integer(CommanderRadioButton.Checked);
-  end
-    else
-  if CurPageID = wpFinished then
-  begin
-    LineHeight := (WizardForm.NoRadio.Top - WizardForm.YesRadio.Top);
-
-    // Are we at the "Restart?" screen
-    if WizardForm.YesRadio.Visible then
-    begin
-      WizardForm.FinishedLabel.Caption :=
-        ExpandConstant('{cm:FinishedRestartDragExtLabel}') + NewLine;
-
-      Delta := WizardForm.AdjustLabelHeight(WizardForm.FinishedLabel);
-      WizardForm.YesRadio.Top := WizardForm.YesRadio.Top + Delta;
-      WizardForm.NoRadio.Top := WizardForm.NoRadio.Top + Delta;
-
-      LaunchCheckboxTop := WizardForm.NoRadio.Top + LineHeight;
-#ifdef Donations
-      DonationPanel.Visible := False;
-#endif
-    end
-      else
-    begin
-      LaunchCheckboxTop := WizardForm.RunList.Top;
-    end;
-
-    LaunchCheckbox.Top := LaunchCheckboxTop;
-    OpenGettingStartedCheckbox.Top := LaunchCheckbox.Top + LineHeight;
-
-    UpdatePostInstallRunCheckboxes(nil);
-  end
-    else
-  if CurPageID = wpSetupType then
-  begin
-    Log('License accepted');
-    LicenseAccepted := True;
-  end
-    else
-  if CurPageID = wpPreparing then
-  begin
-    // Are we at the "Restart applications?" screen
-    if WizardForm.PreparingLabel.Visible then
-    begin
-      WizardForm.PreparingLabel.Caption :=
-        ExpandConstant('{cm:ApplicationsFoundDragExt}');
-      WizardForm.IncTopDecHeight(WizardForm.PreparingMemo,
-        WizardForm.AdjustLabelHeight(WizardForm.PreparingLabel));
-    end;
-  end;
-end;
-
-function AskedRestart: Boolean;
-begin
-  Result := WizardForm.YesRadio.Visible;
-end;
-
-procedure DeinitializeSetup;
-var
-  WinHttpReq: Variant;
-  ReportUrl: string;
-  ReportData: string;
-begin
-  // cannot send report, unless user already accepted license
-  // (with privacy policy)
-  if LicenseAccepted then
-  begin
-    Log('Preparing intallation report');
-
-    ReportData := Format(
-      'installed=%d&silent=%d&ver=%s&lang=%s&prevver=%s&', [
-       Integer(InstallationDone), Integer(WizardSilent),
-       ExpandConstant('{#VersionOnly}'), ActiveLanguage,
-       PrevVersion]);
-
-    try
-      ReportUrl := ExpandConstant('{#WebReport}?') + ReportData;
-
-      Log('Sending installation report: ' + ReportUrl);
-
-      WinHttpReq := CreateOleObject('WinHttp.WinHttpRequest.5.1');
-      WinHttpReq.Open('GET', ReportUrl, False);
-      WinHttpReq.Send('');
-
-      Log('Installation report send result: ' + IntToStr(WinHttpReq.Status) + ' ' + WinHttpReq.StatusText);
-    except
-      Log('Error sending installation report: ' + GetExceptionMessage);
-    end;
-  end;
-end;
-
-procedure CurStepChanged(CurStep: TSetupStep);
-var
-  ErrorCode: Integer;
-  ShowCmd: Integer;
-  Path: string;
-  WebGettingStarted: string;
-  OpenGettingStarted: Boolean;
-  UsageData: string;
-  CanPostInstallRuns: Boolean;
-begin
-  if CurStep = ssPostInstall then
-  begin
-    Log('Post install');
-    if Length(MissingTranslations) > 0 then
-    begin
-      Log('Removing obsolete translations');
-      WizardForm.StatusLabel.Caption :=
-        ExpandConstant('{cm:RemovingObsoleteTranslations}');
-      ProcessMissingTranslations(@DeleteTranslation);
-    end;
-    InstallationDone := True;
-  end
-    else
-  if CurStep = ssDone then
-  begin
-    Log('Done');
-    // bug in InnoSetup causes it using ssDone even when
-    // setup failed because machine was not restarted to complete previous
-    // installation. double check that ssPostInstall was called
-    if InstallationDone then
-    begin
-      Path := ExpandConstant('{app}\{#MainFileName}');
-
-      CanPostInstallRuns := (not WizardSilent) and (not WillRestart);
-
-      OpenGettingStarted :=
-        OpenGettingStartedCheckbox.Enabled and
-         OpenGettingStartedCheckbox.Checked;
-
-      UsageData := '/Usage=';
-      
-      // old style counter
-      UsageData := UsageData + Format('TypicalInstallation:%d,', [Integer(IsTypicalInstallation)]);
-      
-      // new style counters
-      if not Upgrade then
-      begin
-        if IsTypicalInstallation then
-          UsageData := UsageData + 'InstallationsFirstTypical+,'
-        else
-          UsageData := UsageData + 'InstallationsFirstCustom+,';
-      end
-        else
-      begin
-        if IsTypicalInstallation then
-          UsageData := UsageData + 'InstallationsUpgradeTypical+,'
-        else
-          UsageData := UsageData + 'InstallationsUpgradeCustom+,';
-      end;
-      
-      if (InitDir <> '') and (InitDir <> WizardForm.DirEdit.Text) then
-        UsageData := UsageData + 'InstallationsCustomDir+,';
-      if (InitComponents <> '') and (InitComponents <> SaveCheckListBoxState(WizardForm.ComponentsList)) then
-        UsageData := UsageData + 'InstallationsCustomComponents+,';
-      if (InitTasks <> '') and (InitTasks <> SaveCheckListBoxState(WizardForm.TasksList)) then
-        UsageData := UsageData + 'InstallationsCustomTasks+,';
-      if (InitInterface >= 0) and (InitInterface <> Integer(CommanderRadioButton.Checked)) then
-        UsageData := UsageData + 'InstallationsCustomInterface+,';
-      if CanPostInstallRuns and OpenGettingStarted then
-        UsageData := UsageData + 'InstallationsGettingStarted+,';
-      if CanPostInstallRuns and LaunchCheckbox.Checked then
-        UsageData := UsageData + 'InstallationsLaunch+,';
-      if WizardSilent then
-        UsageData := UsageData + 'InstallationsSilent+,';
-      if AskedRestart then
-        UsageData := UsageData + 'InstallationsNeedRestart+,';
-      if WillRestart then
-        UsageData := UsageData + 'InstallationsRestart+,';
-      if Donated then
-        UsageData := UsageData + 'InstallationsDonate+,';
-
-      // have to do this before running WinSCP GUI instance below,
-      // otherwise it loads the empty/previous counters and overwrites our changes,
-      // when it's closed
-      Log('Recording installer usage statistics: ' + UsageData);
-      // make sure we write the counters using the "normal" account
-      // (the account that will be used to report the counters)
-      ExecAsOriginalUser(Path, UsageData, '', SW_HIDE, ewWaitUntilTerminated, ErrorCode);
-
-      if CanPostInstallRuns then
-      begin
-        if OpenGettingStarted then
-        begin
-          WebGettingStarted :=
-            ExpandConstant('{#WebGettingStarted}') + PrevVersion;
-          Log('Opening getting started page: ' + WebGettingStarted);
-          OpenBrowser(WebGettingStarted);
-        end;
-
-        if LaunchCheckbox.Checked then
-        begin
-          if OpenGettingStarted then
-          begin
-            Log('Will launch WinSCP minimized');
-            ShowCmd := SW_SHOWMINIMIZED
-          end
-            else
-          begin
-            ShowCmd := SW_SHOWNORMAL;
-          end;
-
-          Log('Launching WinSCP');
-          ExecAsOriginalUser(Path, '', '', ShowCmd, ewNoWait, ErrorCode)
-        end;
-      end;
-    end;
-  end;
-end;
-
-function ShouldSkipPage(PageID: Integer): Boolean;
-begin
-  Result :=
-    { Hide most pages during typical installation }
-    IsTypicalInstallation and
-    ((PageID = wpSelectDir) or (PageID = wpSelectComponents) or
-     (PageID = wpSelectTasks) or
-     { Hide Interface page for upgrades only, show for fresh installs }
-     ((PageID = wpInterface) and Upgrade));
-end;
-
-function UpdateReadyMemo(Space, NewLine, MemoUserInfoInfo, MemoDirInfo,
-  MemoTypeInfo, MemoComponentsInfo, MemoGroupInfo, MemoTasksInfo: string): string;
-var
-  S: string;
-  S2: string;
-begin
-  S := '';
-
-  S := S + MemoDirInfo + NewLine + NewLine;
-
-  if not Upgrade then
-  begin
-    if IsTypicalInstallation then S2 := ExpandConstant('{cm:TypicalType}')
-      else S2 := ExpandConstant('{cm:CustomType}');
-  end
-    else
-  begin
-    if IsTypicalInstallation then S2 := ExpandConstant('{cm:TypicalUpgradeType}')
-      else S2 := ExpandConstant('{cm:CustomUpgradeType}');
-  end;
-  StringChange(S2, '&', '');
-  S := S + SetupMessage(msgReadyMemoType) + NewLine + Space + S2 + NewLine + NewLine;
-
-  S := S + MemoComponentsInfo + NewLine + NewLine;
-
-  if Length(MemoGroupInfo) > 0 then
-    S := S + MemoGroupInfo + NewLine + NewLine;
-
-  if Length(MemoTasksInfo) > 0 then
-    S := S + MemoTasksInfo + NewLine + NewLine;
-
-  S := S + ExpandConstant('{cm:UserSettingsOverview}') + NewLine;
-  S := S + Space;
-  if CommanderRadioButton.Checked then S2 := ExpandConstant('{cm:NortonCommanderInterfaceC}')
-    else S2 := ExpandConstant('{cm:ExplorerInterfaceC}');
-  StringChange(S2, '&', '');
-  S := S + S2;
-  S := S + NewLine;
-
-  Result := S;
-end;
-
-function InitializeUninstall: Boolean;
-begin
-  // let application know that we are running silent uninstall,
-  // this turns UninstallCleanup to noop
-  if UninstallSilent then
-    CreateMutex('WinSCPSilentUninstall');
-  Result := True;
-end;
-
-function HasUserPrograms: Boolean;
-begin
-  // To avoid the installer failing when the {userprograms}
-  // cannot be resolved (when installing via system account or SCCM)
-  try
-    ExpandConstant('{userprograms}');
-    Log('Have user programs');
-    Result := True;
-  except
-    Log('Does not have user programs');
-    Result := False;
-  end;
-end;
-
-#expr SaveToFile(AddBackslash(SourcePath) + "Preprocessed.iss")

+ 0 - 9
dotnet/App.config

@@ -1,9 +0,0 @@
-<?xml version="1.0"?>
-<configuration>
-	<startup useLegacyV2RuntimeActivationPolicy="true">
-		<supportedRuntime version="v2.0"/>
-		<supportedRuntime version="v3.0"/>
-		<supportedRuntime version="v3.5"/>
-		<supportedRuntime version="v4.0"/>
-	</startup>
-</configuration>

+ 0 - 45
dotnet/ChmodEventArgs.cs

@@ -1,45 +0,0 @@
-using System.Runtime.InteropServices;
-
-namespace WinSCP
-{
-    [Guid("DFCA88E2-6A47-4290-AD66-A39C5682D610")]
-    [ClassInterface(Constants.ClassInterface)]
-    [ComVisible(true)]
-    public sealed class ChmodEventArgs : FileOperationEventArgs
-    {
-        public FilePermissions FilePermissions { get; private set; }
-
-        internal const string Tag = "chmod";
-
-        private ChmodEventArgs()
-        {
-        }
-
-        internal static ChmodEventArgs Read(CustomLogReader areader)
-        {
-            ChmodEventArgs args = new ChmodEventArgs();
-
-            using (ElementLogReader reader = new ElementLogReader(areader))
-            {
-                while (reader.Read(0))
-                {
-                    string value;
-                    if (reader.GetEmptyElementValue("filename", out value))
-                    {
-                        args.FileName = value;
-                    }
-                    else if (reader.GetEmptyElementValue("permissions", out value))
-                    {
-                        args.FilePermissions = FilePermissions.CreateReadOnlyFromText(value);
-                    }
-                    else if (SessionRemoteException.IsResult(reader))
-                    {
-                        args.Error = SessionRemoteException.ReadResult(reader);
-                    }
-                }
-            }
-
-            return args;
-        }
-    }
-}

+ 0 - 18
dotnet/CommandExecutionResult.cs

@@ -1,18 +0,0 @@
-using System.Runtime.InteropServices;
-
-namespace WinSCP
-{
-    [Guid("70C312F8-9A09-4D9B-B8EC-FB6ED753892B")]
-    [ClassInterface(Constants.ClassInterface)]
-    [ComVisible(true)]
-    public sealed class CommandExecutionResult : OperationResultBase
-    {
-        public string Output { get; internal set; }
-        public string ErrorOutput { get; internal set; }
-        public int ExitCode { get; internal set; }
-        
-        internal CommandExecutionResult()
-        {
-        }
-    }
-}

+ 0 - 19
dotnet/FailedEventArgs.cs

@@ -1,19 +0,0 @@
-using System.Runtime.InteropServices;
-
-namespace WinSCP
-{
-    [Guid("2C29B0BD-4F77-4743-A72A-B91F6D0EAD16")]
-    [ClassInterface(Constants.ClassInterface)]
-    [ComVisible(true)]
-    public sealed class FailedEventArgs : OperationEventArgs
-    {
-        internal FailedEventArgs()
-        {
-        }
-
-        public override string ToString()
-        {
-            return (Error != null) ? Error.ToString() : "<no error>";
-        }
-    }
-}

+ 0 - 16
dotnet/FileOperationEventArgs.cs

@@ -1,16 +0,0 @@
-using System.Runtime.InteropServices;
-
-namespace WinSCP
-{
-    [Guid("FF8D5772-2653-4C9B-870E-4C5EF8F55673")]
-    [ClassInterface(Constants.ClassInterface)]
-    [ComVisible(true)]
-    public class FileOperationEventArgs : OperationEventArgs
-    {
-        public string FileName { get; internal set; }
-
-        internal FileOperationEventArgs()
-        {
-        }
-    }
-}

+ 0 - 269
dotnet/FilePermissions.cs

@@ -1,269 +0,0 @@
-using System;
-using System.Globalization;
-using System.Runtime.InteropServices;
-
-namespace WinSCP
-{
-    [Guid("90A290B2-C8CE-4900-8C42-7736F9E435C6")]
-    [ClassInterface(Constants.ClassInterface)]
-    [ComVisible(true)]
-    public sealed class FilePermissions
-    {
-        public int Numeric
-        {
-            get
-            {
-                return _numeric;
-            }
-
-            set
-            {
-                if (_readOnly)
-                {
-                    throw new InvalidOperationException("Cannot change read-only permissions");
-                }
-
-                if ((value < 0) || (value > 0xFFF))
-                {
-                    throw new ArgumentOutOfRangeException(string.Format(CultureInfo.CurrentCulture, "{0} is not valid numerical permissions", value));
-                }
-
-                _numeric = value;
-            }
-        }
-
-        public string Text
-        {
-            get
-            {
-                return NumericToText(Numeric);
-            }
-
-            set
-            {
-                Numeric = TextToNumeric(value);
-            }
-        }
-
-        public string Octal
-        {
-            get
-            {
-                string result = Convert.ToString(Numeric, 8);
-                return new string('0', Math.Max(3 - result.Length, 0)) + result;
-            }
-
-            set
-            {
-                if ((value == null) || ((value.Length != 3) && (value.Length != 4)))
-                {
-                    throw new ArgumentException(string.Format(CultureInfo.CurrentCulture, "{0} is not valid octal permissions", value));
-                }
-
-                Numeric = Convert.ToInt16(value, 8);
-            }
-        }
-
-        public bool OtherExecute
-        {
-            get { return GetBit(0); }
-            set { SetBit(0, value); }
-        }
-
-        public bool OtherWrite
-        {
-            get { return GetBit(1); }
-            set { SetBit(1, value); }
-        }
-
-        public bool OtherRead
-        {
-            get { return GetBit(2); }
-            set { SetBit(2, value); }
-        }
-
-        public bool GroupExecute
-        {
-            get { return GetBit(3); }
-            set { SetBit(3, value); }
-        }
-
-        public bool GroupWrite
-        {
-            get { return GetBit(4); }
-            set { SetBit(4, value); }
-        }
-
-        public bool GroupRead
-        {
-            get { return GetBit(5); }
-            set { SetBit(5, value); }
-        }
-
-        public bool UserExecute
-        {
-            get { return GetBit(6); }
-            set { SetBit(6, value); }
-        }
-
-        public bool UserWrite
-        {
-            get { return GetBit(7); }
-            set { SetBit(7, value); }
-        }
-
-        public bool UserRead
-        {
-            get { return GetBit(8); }
-            set { SetBit(8, value); }
-        }
-
-        public bool Sticky
-        {
-            get { return GetBit(9); }
-            set { SetBit(9, value); }
-        }
-
-        public bool SetGid
-        {
-            get { return GetBit(10); }
-            set { SetBit(10, value); }
-        }
-
-        public bool SetUid
-        {
-            get { return GetBit(11); }
-            set { SetBit(11, value); }
-        }
-
-        public FilePermissions() :
-            this(0)
-        {
-        }
-
-        public FilePermissions(int numeric)
-        {
-            Numeric = numeric;
-        }
-
-        public override string ToString()
-        {
-            return Text;
-        }
-
-        private const string BasicSymbols = "rwxrwxrwx";
-        private const string CombinedSymbols = "--s--s--t";
-        private const string ExtendedSymbols = "--S--S--T";
-        private const char UnsetSymbol = '-';
-
-        internal static FilePermissions CreateReadOnlyFromText(string text)
-        {
-            FilePermissions result = new FilePermissions();
-            result.Numeric = TextToNumeric(text);
-            result._readOnly = true;
-            return result;
-        }
-
-        internal static int TextToNumeric(string text)
-        {
-            if (text.Length != BasicSymbols.Length)
-            {
-                throw new ArgumentException(string.Format(CultureInfo.CurrentCulture, "{0} is not valid permissions string", text));
-            }
-
-            int result = 0;
-            int flag = 1;
-            int extendedFlag = 0x200;
-            for (int i = text.Length - 1; i >= 0; i--)
-            {
-                if (text[i] == UnsetSymbol)
-                {
-                    // noop
-                }
-                else if (text[i] == CombinedSymbols[i])
-                {
-                    result |= flag | extendedFlag;
-                }
-                else if (text[i] == ExtendedSymbols[i])
-                {
-                    result |= extendedFlag;
-                }
-                else
-                {
-                    result |= flag;
-                }
-
-                flag <<= 1;
-                if (i % 3 == 0)
-                {
-                    extendedFlag <<= 1;
-                }
-            }
-
-            return result;
-        }
-
-        private static string NumericToText(int numeric)
-        {
-            char[] buf = new char[BasicSymbols.Length];
-
-            int flag = 1;
-            int extendedFlag = 0x200;
-            bool extendedPos = true;
-            int i = BasicSymbols.Length - 1;
-            while (i >= 0)
-            {
-                char symbol;
-                if (extendedPos &&
-                    ((numeric & (flag | extendedFlag)) == (flag | extendedFlag)))
-                {
-                    symbol = CombinedSymbols[i];
-                }
-                else if ((numeric & flag) != 0)
-                {
-                    symbol = BasicSymbols[i];
-                }
-                else if (extendedPos && ((numeric & extendedFlag) != 0))
-                {
-                    symbol = ExtendedSymbols[i];
-                }
-                else
-                {
-                    symbol = UnsetSymbol;
-                }
-                
-                buf[i] = symbol;
-
-                flag <<= 1;
-                i--;
-                extendedPos = ((i % 3) == 2);
-                if (extendedPos)
-                {
-                    extendedFlag <<= 1;
-                }
-            }
-
-            return new string(buf);
-        }
-
-        private bool GetBit(int bit)
-        {
-            return (Numeric & (1 << bit)) != 0;
-        }
-
-        private void SetBit(int bit, bool value)
-        {
-            if (value)
-            {
-                Numeric |= (1 << bit);
-            }
-            else
-            {
-                Numeric &= ~(1 << bit);
-            }
-        }
-
-        private int _numeric;
-        private bool _readOnly;
-    }
-}

+ 0 - 26
dotnet/FileTransferProgressEventArgs.cs

@@ -1,26 +0,0 @@
-using System;
-using System.Runtime.InteropServices;
-
-namespace WinSCP
-{
-    public enum ProgressOperation { Transfer }
-    public enum ProgressSide { Local, Remote }
-
-    [Guid("E421924E-87F0-433E-AF38-CE034DC8E8CB")]
-    [ClassInterface(Constants.ClassInterface)]
-    [ComVisible(true)]
-    public sealed class FileTransferProgressEventArgs : EventArgs
-    {
-        public ProgressOperation Operation { get; internal set; }
-        public ProgressSide Side { get; internal set; }
-        public string FileName { get; internal set; }
-        public string Directory { get; internal set; }
-        public double OverallProgress { get; internal set; }
-        public double FileProgress { get; internal set; }
-        public int CPS { get; internal set; }
-
-        internal FileTransferProgressEventArgs()
-        {
-        }
-    }
-}

+ 0 - 153
dotnet/GlobalSuppressions.cs

@@ -1,153 +0,0 @@
-// This file is used by Code Analysis to maintain SuppressMessage 
-// attributes that are applied to this project.
-// Project-level suppressions either have no target or are given 
-// a specific target and scoped to a namespace, type, member, etc.
-//
-// To add a suppression to this file, right-click the message in the 
-// Error List, point to "Suppress Message(s)", and click 
-// "In Project Suppression File".
-// You do not need to add suppressions to this file manually.
-
-using System.Diagnostics.CodeAnalysis;
-
-[assembly: SuppressMessage("Microsoft.Design", "CA1032:ImplementStandardExceptionConstructors", Scope = "type", Target = "WinSCP.SessionException")]
-[assembly: SuppressMessage("Microsoft.Design", "CA1032:ImplementStandardExceptionConstructors", Scope = "type", Target = "WinSCP.SessionLocalException")]
-[assembly: SuppressMessage("Microsoft.Design", "CA1032:ImplementStandardExceptionConstructors", Scope = "type", Target = "WinSCP.SessionRemoteException")]
-[assembly: SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes", Scope = "member", Target = "WinSCP.ElementLogReader.#Dispose()")]
-[assembly: SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes", Scope = "member", Target = "WinSCP.Session.#Cleanup()")]
-[assembly: SuppressMessage("Microsoft.Naming", "CA1714:FlagsEnumsShouldHavePluralNames", Scope = "type", Target = "WinSCP.SynchronizationCriteria")]
-[assembly: SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "WinSCP.Session.#Cleanup()")]
-[assembly: SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "WinSCP.Session.#Open(WinSCP.SessionOptions)")]
-[assembly: SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "WinSCP.Session.#WriteCommand(System.String)")]
-[assembly: SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "SCP")]
-[assembly: SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "SCP", Scope = "namespace", Target = "WinSCP")]
-[assembly: SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope", Scope = "member", Target = "WinSCP.Session.#Open(WinSCP.SessionOptions)")]
-[assembly: SuppressMessage("Microsoft.Usage", "CA2237:MarkISerializableTypesWithSerializable", Scope = "type", Target = "WinSCP.SessionLocalException")]
-[assembly: SuppressMessage("Microsoft.Usage", "CA2237:MarkISerializableTypesWithSerializable", Scope = "type", Target = "WinSCP.SessionRemoteException")]
-[assembly: SuppressMessage("Microsoft.Usage", "CA2237:MarkISerializableTypesWithSerializable", Scope = "type", Target = "WinSCP.SessionException")]
-[assembly: SuppressMessage("Microsoft.Design", "CA2210:AssembliesShouldHaveValidStrongNames")]
-[assembly: SuppressMessage("Microsoft.Interoperability", "CA1408:DoNotUseAutoDualClassInterfaceType", Scope = "type", Target = "WinSCP.ChmodEventArgs")]
-[assembly: SuppressMessage("Microsoft.Interoperability", "CA1408:DoNotUseAutoDualClassInterfaceType", Scope = "type", Target = "WinSCP.CommandExecutionResult")]
-[assembly: SuppressMessage("Microsoft.Interoperability", "CA1408:DoNotUseAutoDualClassInterfaceType", Scope = "type", Target = "WinSCP.FailedEventArgs")]
-[assembly: SuppressMessage("Microsoft.Interoperability", "CA1408:DoNotUseAutoDualClassInterfaceType", Scope = "type", Target = "WinSCP.FileOperationEventArgs")]
-[assembly: SuppressMessage("Microsoft.Interoperability", "CA1408:DoNotUseAutoDualClassInterfaceType", Scope = "type", Target = "WinSCP.FilePermissions")]
-[assembly: SuppressMessage("Microsoft.Interoperability", "CA1408:DoNotUseAutoDualClassInterfaceType", Scope = "type", Target = "WinSCP.OperationEventArgs")]
-[assembly: SuppressMessage("Microsoft.Interoperability", "CA1408:DoNotUseAutoDualClassInterfaceType", Scope = "type", Target = "WinSCP.OperationResultBase")]
-[assembly: SuppressMessage("Microsoft.Interoperability", "CA1408:DoNotUseAutoDualClassInterfaceType", Scope = "type", Target = "WinSCP.RemoteFileInfo")]
-[assembly: SuppressMessage("Microsoft.Interoperability", "CA1408:DoNotUseAutoDualClassInterfaceType", Scope = "type", Target = "WinSCP.RemovalEventArgs")]
-[assembly: SuppressMessage("Microsoft.Interoperability", "CA1408:DoNotUseAutoDualClassInterfaceType", Scope = "type", Target = "WinSCP.RemovalOperationResult")]
-[assembly: SuppressMessage("Microsoft.Interoperability", "CA1408:DoNotUseAutoDualClassInterfaceType", Scope = "type", Target = "WinSCP.Session")]
-[assembly: SuppressMessage("Microsoft.Interoperability", "CA1408:DoNotUseAutoDualClassInterfaceType", Scope = "type", Target = "WinSCP.SessionException")]
-[assembly: SuppressMessage("Microsoft.Interoperability", "CA1408:DoNotUseAutoDualClassInterfaceType", Scope = "type", Target = "WinSCP.SessionLocalException")]
-[assembly: SuppressMessage("Microsoft.Interoperability", "CA1408:DoNotUseAutoDualClassInterfaceType", Scope = "type", Target = "WinSCP.SessionOptions")]
-[assembly: SuppressMessage("Microsoft.Interoperability", "CA1408:DoNotUseAutoDualClassInterfaceType", Scope = "type", Target = "WinSCP.SessionRemoteException")]
-[assembly: SuppressMessage("Microsoft.Interoperability", "CA1408:DoNotUseAutoDualClassInterfaceType", Scope = "type", Target = "WinSCP.SynchronizationResult")]
-[assembly: SuppressMessage("Microsoft.Interoperability", "CA1408:DoNotUseAutoDualClassInterfaceType", Scope = "type", Target = "WinSCP.TouchEventArgs")]
-[assembly: SuppressMessage("Microsoft.Interoperability", "CA1408:DoNotUseAutoDualClassInterfaceType", Scope = "type", Target = "WinSCP.TransferEventArgs")]
-[assembly: SuppressMessage("Microsoft.Interoperability", "CA1408:DoNotUseAutoDualClassInterfaceType", Scope = "type", Target = "WinSCP.TransferOperationResult")]
-[assembly: SuppressMessage("Microsoft.Interoperability", "CA1408:DoNotUseAutoDualClassInterfaceType", Scope = "type", Target = "WinSCP.TransferOptions")]
-[assembly: SuppressMessage("Microsoft.Interoperability", "CA1409:ComVisibleTypesShouldBeCreatable", Scope = "type", Target = "WinSCP.ChmodEventArgs")]
-[assembly: SuppressMessage("Microsoft.Interoperability", "CA1409:ComVisibleTypesShouldBeCreatable", Scope = "type", Target = "WinSCP.CommandExecutionResult")]
-[assembly: SuppressMessage("Microsoft.Interoperability", "CA1409:ComVisibleTypesShouldBeCreatable", Scope = "type", Target = "WinSCP.FailedEventArgs")]
-[assembly: SuppressMessage("Microsoft.Interoperability", "CA1409:ComVisibleTypesShouldBeCreatable", Scope = "type", Target = "WinSCP.FileOperationEventArgs")]
-[assembly: SuppressMessage("Microsoft.Interoperability", "CA1409:ComVisibleTypesShouldBeCreatable", Scope = "type", Target = "WinSCP.OperationEventArgs")]
-[assembly: SuppressMessage("Microsoft.Interoperability", "CA1409:ComVisibleTypesShouldBeCreatable", Scope = "type", Target = "WinSCP.OperationResultBase")]
-[assembly: SuppressMessage("Microsoft.Interoperability", "CA1409:ComVisibleTypesShouldBeCreatable", Scope = "type", Target = "WinSCP.RemoteFileInfo")]
-[assembly: SuppressMessage("Microsoft.Interoperability", "CA1409:ComVisibleTypesShouldBeCreatable", Scope = "type", Target = "WinSCP.RemovalEventArgs")]
-[assembly: SuppressMessage("Microsoft.Interoperability", "CA1409:ComVisibleTypesShouldBeCreatable", Scope = "type", Target = "WinSCP.RemovalOperationResult")]
-[assembly: SuppressMessage("Microsoft.Interoperability", "CA1409:ComVisibleTypesShouldBeCreatable", Scope = "type", Target = "WinSCP.SessionException")]
-[assembly: SuppressMessage("Microsoft.Interoperability", "CA1409:ComVisibleTypesShouldBeCreatable", Scope = "type", Target = "WinSCP.SessionLocalException")]
-[assembly: SuppressMessage("Microsoft.Interoperability", "CA1409:ComVisibleTypesShouldBeCreatable", Scope = "type", Target = "WinSCP.SessionRemoteException")]
-[assembly: SuppressMessage("Microsoft.Interoperability", "CA1409:ComVisibleTypesShouldBeCreatable", Scope = "type", Target = "WinSCP.SynchronizationResult")]
-[assembly: SuppressMessage("Microsoft.Interoperability", "CA1409:ComVisibleTypesShouldBeCreatable", Scope = "type", Target = "WinSCP.TouchEventArgs")]
-[assembly: SuppressMessage("Microsoft.Interoperability", "CA1409:ComVisibleTypesShouldBeCreatable", Scope = "type", Target = "WinSCP.TransferEventArgs")]
-[assembly: SuppressMessage("Microsoft.Interoperability", "CA1409:ComVisibleTypesShouldBeCreatable", Scope = "type", Target = "WinSCP.TransferOperationResult")]
-[assembly: SuppressMessage("Microsoft.Design", "CA1003:UseGenericEventHandlerInstances", Scope = "type", Target = "WinSCP.FailedEventHandler")]
-[assembly: SuppressMessage("Microsoft.Design", "CA1003:UseGenericEventHandlerInstances", Scope = "type", Target = "WinSCP.FileTransferredEventHandler")]
-[assembly: SuppressMessage("Microsoft.Interoperability", "CA1409:ComVisibleTypesShouldBeCreatable", Scope = "type", Target = "WinSCP.RemoteDirectoryInfo")]
-[assembly: SuppressMessage("Microsoft.Interoperability", "CA1408:DoNotUseAutoDualClassInterfaceType", Scope = "type", Target = "WinSCP.RemoteDirectoryInfo")]
-[assembly: SuppressMessage("Microsoft.Interoperability", "CA1408:DoNotUseAutoDualClassInterfaceType", Scope = "type", Target = "WinSCP.RemoteFileInfoCollection")]
-[assembly: SuppressMessage("Microsoft.Usage", "CA1801:ReviewUnusedParameters", MessageId = "index", Scope = "member", Target = "WinSCP.ReadOnlyInteropCollectionHelper`1.#Item[System.Int32]")]
-[assembly: SuppressMessage("Microsoft.Usage", "CA1801:ReviewUnusedParameters", MessageId = "value", Scope = "member", Target = "WinSCP.ReadOnlyInteropCollectionHelper`1.#Item[System.Int32]")]
-[assembly: SuppressMessage("Microsoft.Interoperability", "CA1408:DoNotUseAutoDualClassInterfaceType", Scope = "type", Target = "WinSCP.RemovalEventArgsCollection")]
-[assembly: SuppressMessage("Microsoft.Interoperability", "CA1408:DoNotUseAutoDualClassInterfaceType", Scope = "type", Target = "WinSCP.SessionRemoteExceptionCollection")]
-[assembly: SuppressMessage("Microsoft.Interoperability", "CA1408:DoNotUseAutoDualClassInterfaceType", Scope = "type", Target = "WinSCP.StringCollection")]
-[assembly: SuppressMessage("Microsoft.Interoperability", "CA1408:DoNotUseAutoDualClassInterfaceType", Scope = "type", Target = "WinSCP.TransferEventArgsCollection")]
-[assembly: SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "WinSCP.Session.#CheckVersion(System.String,System.Diagnostics.FileVersionInfo,System.String)")]
-[assembly: SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "WinSCP.Session.#CheckVersions(System.String)")]
-[assembly: SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "WinSCP.Logger.#WriteLine(System.String)")]
-[assembly: SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "WinSCP.Logger.#WriteEnvironmentInfo()")]
-[assembly: SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "WinSCP.ConsoleSessionProcess.#.ctor(System.String,System.String)")]
-[assembly: SuppressMessage("Microsoft.Design", "CA1003:UseGenericEventHandlerInstances", Scope = "type", Target = "WinSCP.OutputDataReceivedEventHandler")]
-[assembly: SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "WinSCP.ExeSessionProcess.#.ctor(WinSCP.Session,System.String,System.String)")]
-[assembly: SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope", Scope = "member", Target = "WinSCP.ExeSessionProcess.#CreateEvent(System.String)")]
-[assembly: SuppressMessage("Microsoft.Reliability", "CA2006:UseSafeHandleToEncapsulateNativeResources", Scope = "member", Target = "WinSCP.ConsoleCommStruct.#_ptr")]
-[assembly: SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope", Scope = "member", Target = "WinSCP.ExeSessionProcess.#InitializeConsole()")]
-[assembly: SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "WinSCP.ExeSessionProcess.#InitializeChild()")]
-[assembly: SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "WinSCP.ExeSessionProcess.#InitializeConsole()")]
-[assembly: SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "WinSCP.ExeSessionProcess.#HasExited")]
-[assembly: SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "WinSCP.ExeSessionProcess.#ExitCode")]
-[assembly: SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "WinSCP.ExeSessionProcess.#Dispose()")]
-[assembly: SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "WinSCP.ExeSessionProcess.#Close()")]
-[assembly: SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "WinSCP.ConsoleCommStruct.#Size")]
-[assembly: SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "WinSCP.ConsoleCommStruct.#.ctor(WinSCP.Session,Microsoft.Win32.SafeHandles.SafeFileHandle)")]
-[assembly: SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "WinSCP.Session.#CheckVersion(System.String,System.Diagnostics.FileVersionInfo)")]
-[assembly: SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "WinSCP.SECURITY_ATTRIBUTES.#lpSecurityDescriptor")]
-[assembly: SuppressMessage("Microsoft.Reliability", "CA2006:UseSafeHandleToEncapsulateNativeResources", Scope = "member", Target = "WinSCP.Job.#_handle")]
-[assembly: SuppressMessage("Microsoft.Usage", "CA1806:DoNotIgnoreMethodResults", MessageId = "WinSCP.UnsafeNativeMethods.CloseHandle(System.IntPtr)", Scope = "member", Target = "WinSCP.Job.#Close()")]
-[assembly: SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "WinSCP.Job.#.ctor()")]
-[assembly: SuppressMessage("Microsoft.Interoperability", "CA1409:ComVisibleTypesShouldBeCreatable", Scope = "type", Target = "WinSCP.OutputDataReceivedEventArgs")]
-[assembly: SuppressMessage("Microsoft.Interoperability", "CA1408:DoNotUseAutoDualClassInterfaceType", Scope = "type", Target = "WinSCP.OutputDataReceivedEventArgs")]
-[assembly: SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "WinSCP.ExeSessionProcess.#CheckVersion(System.String,System.Diagnostics.FileVersionInfo)")]
-[assembly: SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "WinSCP.ExeSessionProcess.#.ctor(WinSCP.Session)")]
-[assembly: SuppressMessage("Microsoft.Maintainability", "CA1506:AvoidExcessiveClassCoupling", Scope = "type", Target = "WinSCP.Session")]
-[assembly: SuppressMessage("Microsoft.Globalization", "CA1303:Do not pass literals as localized parameters", MessageId = "WinSCP.Logger.WriteLine(System.String)", Scope = "member", Target = "WinSCP.Session.#System.Reflection.IReflect.InvokeMember(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object,System.Object[],System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[])")]
-[assembly: SuppressMessage("Microsoft.Globalization", "CA1303:Do not pass literals as localized parameters", MessageId = "WinSCP.Logger.WriteLine(System.String)", Scope = "member", Target = "WinSCP.ExeSessionProcess.#CheckVersion(System.String,System.Diagnostics.FileVersionInfo)")]
-[assembly: SuppressMessage("Microsoft.Globalization", "CA1303:Do not pass literals as localized parameters", MessageId = "WinSCP.Logger.WriteLine(System.String)", Scope = "member", Target = "WinSCP.Session.#Cleanup()")]
-[assembly: SuppressMessage("Microsoft.Globalization", "CA1303:Do not pass literals as localized parameters", MessageId = "WinSCP.Logger.WriteLine(System.String)", Scope = "member", Target = "WinSCP.Logger.#Dispose()")]
-[assembly: SuppressMessage("Microsoft.Globalization", "CA1303:Do not pass literals as localized parameters", MessageId = "WinSCP.Logger.WriteLine(System.String)", Scope = "member", Target = "WinSCP.SessionLogReader.#OpenLog()")]
-[assembly: SuppressMessage("Microsoft.Globalization", "CA1303:Do not pass literals as localized parameters", MessageId = "WinSCP.Logger.WriteLine(System.String)", Scope = "member", Target = "WinSCP.ExeSessionProcess.#Close()")]
-[assembly: SuppressMessage("Microsoft.Globalization", "CA1303:Do not pass literals as localized parameters", MessageId = "WinSCP.Logger.WriteLine(System.String)", Scope = "member", Target = "WinSCP.SessionLogReader.#LogContents()")]
-[assembly: SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes", Scope = "member", Target = "WinSCP.SessionLogReader.#LogContents()")]
-[assembly: SuppressMessage("Microsoft.Globalization", "CA1303:Do not pass literals as localized parameters", MessageId = "WinSCP.Logger.WriteLine(System.String)", Scope = "member", Target = "WinSCP.ElementLogReader.#Dispose()")]
-[assembly: SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes", Scope = "member", Target = "WinSCP.Logger.#.ctor()")]
-[assembly: SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes", Scope = "member", Target = "WinSCP.Logger.#Dispose()")]
-[assembly: SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "WinSCP.ExeSessionProcess.#Abort()")]
-[assembly: SuppressMessage("Microsoft.Usage", "CA2201:DoNotRaiseReservedExceptionTypes", Scope = "member", Target = "WinSCP.Logger.#GetAssemblyFilePath()")]
-[assembly: SuppressMessage("Microsoft.Globalization", "CA1303:Do not pass literals as localized parameters", MessageId = "WinSCP.Logger.WriteLine(System.String)", Scope = "member", Target = "WinSCP.ExeSessionProcess.#AbortedOrExited()")]
-[assembly: SuppressMessage("Microsoft.Globalization", "CA1303:Do not pass literals as localized parameters", MessageId = "WinSCP.Logger.WriteLine(System.String)", Scope = "member", Target = "WinSCP.SessionLogReader.#DoRead()")]
-[assembly: SuppressMessage("Microsoft.Globalization", "CA1303:Do not pass literals as localized parameters", MessageId = "WinSCP.Logger.WriteLine(System.String)", Scope = "member", Target = "WinSCP.SessionLogReader.#Cleanup()")]
-[assembly: SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "WinSCP.Session.#GetTempPath()")]
-[assembly: SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "WinSCP.Session.#SetupTempPath()")]
-[assembly: SuppressMessage("Microsoft.Globalization", "CA1303:Do not pass literals as localized parameters", MessageId = "WinSCP.Logger.WriteLine(System.String)", Scope = "member", Target = "WinSCP.Logger.#GetAssemblyFilePath()")]
-[assembly: SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "CPS", Scope = "member", Target = "WinSCP.FileTransferProgressEventArgs.#CPS")]
-[assembly: SuppressMessage("Microsoft.Interoperability", "CA1409:ComVisibleTypesShouldBeCreatable", Scope = "type", Target = "WinSCP.FileTransferProgressEventArgs")]
-[assembly: SuppressMessage("Microsoft.Design", "CA1003:UseGenericEventHandlerInstances", Scope = "type", Target = "WinSCP.FileTransferProgressEventHandler")]
-[assembly: SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule", Scope = "member", Target = "WinSCP.UnsafeNativeMethods.#CreateFileMapping(Microsoft.Win32.SafeHandles.SafeFileHandle,System.IntPtr,System.Int32,System.Int32,System.Int32,System.String)", Justification = "Warning is bogus.")]
-[assembly: SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule", Scope = "member", Target = "WinSCP.UnsafeNativeMethods.#MapViewOfFile(Microsoft.Win32.SafeHandles.SafeFileHandle,System.Int32,System.UInt32,System.UInt32,System.UIntPtr)", Justification = "Warning is bogus.")]
-[assembly: SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule", Scope = "member", Target = "WinSCP.UnsafeNativeMethods.#UnmapViewOfFile(System.IntPtr)", Justification = "Warning is bogus.")]
-[assembly: SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule", Scope = "member", Target = "WinSCP.UnsafeNativeMethods.#CloseHandle(System.IntPtr)", Justification = "Warning is bogus.")]
-[assembly: SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule", Scope = "member", Target = "WinSCP.UnsafeNativeMethods.#CreateJobObject(System.IntPtr,System.String)", Justification = "Warning is bogus.")]
-[assembly: SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule", Scope = "member", Target = "WinSCP.UnsafeNativeMethods.#SetInformationJobObject(System.IntPtr,WinSCP.JobObjectInfoType,System.IntPtr,System.UInt32)", Justification = "Warning is bogus.")]
-[assembly: SuppressMessage("Microsoft.Interoperability", "CA1409:ComVisibleTypesShouldBeCreatable", Scope = "type", Target = "WinSCP.TransferResumeSupport")]
-[assembly: SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes", Scope = "member", Target = "WinSCP.Logger.#CreateCounters()")]
-[assembly: SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes", Scope = "member", Target = "WinSCP.Logger.#WriteCounters()")]
-[assembly: SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "WinSCP.Logger.#WriteProcesses()")]
-[assembly: SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes", Scope = "member", Target = "WinSCP.Logger.#WriteProcesses()")]
-[assembly: SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "WinSCP.Logger.#GetProcessStartTime(System.Diagnostics.Process)")]
-[assembly: SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes", Scope = "member", Target = "WinSCP.Logger.#GetProcessStartTime(System.Diagnostics.Process)")]
-[assembly: SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "WinSCP.Logger.#GetTotalProcessorTime(System.Diagnostics.Process)")]
-[assembly: SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes", Scope = "member", Target = "WinSCP.Logger.#GetTotalProcessorTime(System.Diagnostics.Process)")]
-[assembly: SuppressMessage("Microsoft.Usage", "CA2217:DoNotMarkEnumsWithFlags", Scope = "type", Target = "WinSCP.FileMapAccess")]
-[assembly: SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule", Scope = "member", Target = "WinSCP.UnsafeNativeMethods.#CreateFileMapping(Microsoft.Win32.SafeHandles.SafeFileHandle,System.IntPtr,WinSCP.FileMapProtection,System.Int32,System.Int32,System.String)")]
-[assembly: SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule", Scope = "member", Target = "WinSCP.UnsafeNativeMethods.#MapViewOfFile(Microsoft.Win32.SafeHandles.SafeFileHandle,WinSCP.FileMapAccess,System.UInt32,System.UInt32,System.UIntPtr)")]
-[assembly: SuppressMessage("Microsoft.Interoperability", "CA1404:CallGetLastErrorImmediatelyAfterPInvoke", Scope = "member", Target = "WinSCP.ExeSessionProcess.#InitializeConsole()")]
-[assembly: SuppressMessage("Microsoft.Interoperability", "CA1404:CallGetLastErrorImmediatelyAfterPInvoke", Scope = "member", Target = "WinSCP.ExeSessionProcess.#Dispose()")]
-[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "WinSCP.Job.#.ctor(WinSCP.Logger,System.String)")]
-[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "WinSCP.Logger.#LastWin32ErrorMessage()")]
-[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "WinSCP.Session.#GuardProcessWithJobInternal")]
-[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "WinSCP.Session.#TestHandlesClosedInternal")]
-[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "WinSCP.ExeSessionProcess.#TryCreateEvent(System.String,System.Threading.EventWaitHandle&)")]
-[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Reliability", "CA2001:AvoidCallingProblematicMethods", MessageId = "System.Runtime.InteropServices.SafeHandle.DangerousGetHandle", Scope = "member", Target = "WinSCP.ExeSessionProcess.#TryCreateEvent(System.String,System.Threading.EventWaitHandle&)")]
-[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "WinSCP.SessionOptions.#GetPassword()")]
-[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1054:UriParametersShouldNotBeStrings", MessageId = "0#", Scope = "member", Target = "WinSCP.SessionOptions.#ParseUrl(System.String)")]

+ 0 - 17
dotnet/OperationEventArgs.cs

@@ -1,17 +0,0 @@
-using System;
-using System.Runtime.InteropServices;
-
-namespace WinSCP
-{
-    [Guid("4D79C4F7-0FE2-428D-9908-AB2D38E96C53")]
-    [ClassInterface(Constants.ClassInterface)]
-    [ComVisible(true)]
-    public class OperationEventArgs : EventArgs
-    {
-        public SessionRemoteException Error { get; internal set; }
-
-        internal OperationEventArgs()
-        {
-        }
-    }
-}

+ 0 - 32
dotnet/OperationResultBase.cs

@@ -1,32 +0,0 @@
-using System.Runtime.InteropServices;
-
-namespace WinSCP
-{
-    [Guid("B4CC583A-B64E-4797-9967-0FCB2F07C977")]
-    [ClassInterface(Constants.ClassInterface)]
-    [ComVisible(true)]
-    public class OperationResultBase
-    {
-        public SessionRemoteExceptionCollection Failures { get; private set; }
-
-        public bool IsSuccess { get { return (Failures.Count == 0); } }
-
-        internal OperationResultBase()
-        {
-            Failures = new SessionRemoteExceptionCollection();
-        }
-
-        public void Check()
-        {
-            if (!IsSuccess)
-            {
-                throw Failures[0];
-            }
-        }
-
-        internal void AddFailure(SessionRemoteException failure)
-        {
-            Failures.InternalAdd(failure);
-        }
-    }
-}

+ 0 - 23
dotnet/OutputDataReceivedEventArgs.cs

@@ -1,23 +0,0 @@
-using System;
-using System.Runtime.InteropServices;
-
-namespace WinSCP
-{
-    [Guid("42861F26-1ECA-43BA-8A43-ADF3291D8C81")]
-    [ClassInterface(Constants.ClassInterface)]
-    [ComVisible(true)]
-    public sealed class OutputDataReceivedEventArgs : EventArgs
-    {
-        public string Data { get; private set; }
-
-        internal OutputDataReceivedEventArgs(string data)
-        {
-            Data = data;
-        }
-
-        public override string ToString()
-        {
-            return Data;
-        }
-    }
-}

+ 0 - 22
dotnet/RemoteDirectoryInfo.cs

@@ -1,22 +0,0 @@
-using System.Runtime.InteropServices;
-
-namespace WinSCP
-{
-    [Guid("FBE2FACF-F1D5-493D-9E41-4B9B7243A676")]
-    [ClassInterface(Constants.ClassInterface)]
-    [ComVisible(true)]
-    public sealed class RemoteDirectoryInfo
-    {
-        public RemoteFileInfoCollection Files { get; private set; }
-
-        internal RemoteDirectoryInfo()
-        {
-            Files = new RemoteFileInfoCollection();
-        }
-
-        internal void AddFile(RemoteFileInfo file)
-        {
-            Files.InternalAdd(file);
-        }
-    }
-}

+ 0 - 49
dotnet/RemoteFileInfo.cs

@@ -1,49 +0,0 @@
-using System;
-using System.Globalization;
-using System.Runtime.InteropServices;
-
-namespace WinSCP
-{
-    [Guid("17FF9C92-B8B6-4506-A7BA-8482D9B0AB07")]
-    [ClassInterface(Constants.ClassInterface)]
-    [ComVisible(true)]
-    public sealed class RemoteFileInfo
-    {
-        public string Name { get; internal set; }
-        public char FileType { get; internal set; }
-        public long Length { get; internal set; }
-        public int Length32 { get { return GetLength32(); } set { SetLength32(value); } }
-
-        public DateTime LastWriteTime { get; internal set; }
-        public FilePermissions FilePermissions { get; internal set; }
-
-        public string Owner { get; internal set; }
-        public string Group { get; internal set; }
-
-        public bool IsDirectory { get { return (Char.ToUpper(FileType, CultureInfo.InvariantCulture) == 'D'); } }
-
-        internal RemoteFileInfo()
-        {
-        }
-
-        public override string ToString()
-        {
-            return Name;
-        }
-    
-        private int GetLength32()
-        {
-            if ((Length < int.MinValue) || (Length > int.MaxValue))
-            {
-                throw new OverflowException(string.Format(CultureInfo.CurrentCulture, "Size {0} cannot be represented using 32-bit value", Length));
-            }
-
-            return (int) Length;
-        }
-
-        private void SetLength32(int value)
-        {
-            Length = value;
-        }
-    }
-}

+ 0 - 39
dotnet/RemovalEventArgs.cs

@@ -1,39 +0,0 @@
-using System.Runtime.InteropServices;
-
-namespace WinSCP
-{
-    [Guid("62FB0733-C24F-4DC2-8452-560148931927")]
-    [ClassInterface(Constants.ClassInterface)]
-    [ComVisible(true)]
-    public sealed class RemovalEventArgs : FileOperationEventArgs
-    {
-        internal const string Tag = "rm";
-
-        private RemovalEventArgs()
-        {
-        }
-
-        internal static RemovalEventArgs Read(CustomLogReader areader)
-        {
-            RemovalEventArgs args = new RemovalEventArgs();
-
-            using (ElementLogReader reader = new ElementLogReader(areader))
-            {
-                while (reader.Read(0))
-                {
-                    string value;
-                    if (reader.GetEmptyElementValue("filename", out value))
-                    {
-                        args.FileName = value;
-                    }
-                    else if (SessionRemoteException.IsResult(reader))
-                    {
-                        args.Error = SessionRemoteException.ReadResult(reader);
-                    }
-                }
-            }
-
-            return args;
-        }
-    }
-}

+ 0 - 22
dotnet/RemovalOperationResult.cs

@@ -1,22 +0,0 @@
-using System.Runtime.InteropServices;
-
-namespace WinSCP
-{
-    [Guid("3BCB18EC-6D98-4BFB-A9C2-893CBD13CDAB")]
-    [ClassInterface(Constants.ClassInterface)]
-    [ComVisible(true)]
-    public sealed class RemovalOperationResult : OperationResultBase
-    {
-        public RemovalEventArgsCollection Removals { get; private set; }
-
-        internal RemovalOperationResult()
-        {
-            Removals = new RemovalEventArgsCollection();
-        }
-
-        internal void AddRemoval(RemovalEventArgs operation)
-        {
-            Removals.InternalAdd(operation);
-        }
-    }
-}

+ 0 - 1734
dotnet/Session.cs

@@ -1,1734 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Reflection;
-using System.Globalization;
-using System.Runtime.InteropServices;
-using System.Threading;
-using System.Xml;
-using Microsoft.Win32;
-using System.Diagnostics;
-
-namespace WinSCP
-{
-    [Guid("38649D44-B839-4F2C-A9DC-5D45EEA4B5E9")]
-    [ComVisible(true)]
-    public enum SynchronizationMode
-    {
-        Local = 0,
-        Remote = 1,
-        Both = 2,
-    }
-
-    [Guid("3F770EC1-35F5-4A7B-A000-46A2F7A213D8")]
-    [ComVisible(true)]
-    [Flags]
-    public enum SynchronizationCriteria
-    {
-        None = 0x00,
-        Time = 0x01,
-        Size = 0x02,
-        Either = Time | Size,
-    }
-
-    public delegate void OutputDataReceivedEventHandler(object sender, OutputDataReceivedEventArgs e);
-    public delegate void FileTransferredEventHandler(object sender, TransferEventArgs e);
-    public delegate void FileTransferProgressEventHandler(object sender, FileTransferProgressEventArgs e);
-    public delegate void FailedEventHandler(object sender, FailedEventArgs e);
-
-    [Guid("56FFC5CE-3867-4EF0-A3B5-CFFBEB99EA35")]
-    [ClassInterface(Constants.ClassInterface)]
-    [ComVisible(true)]
-    [ComSourceInterfaces(typeof(ISessionEvents))]
-    public sealed class Session : IDisposable, IReflect
-    {
-        public string ExecutablePath { get { return _executablePath; } set { CheckNotOpened(); _executablePath = value; } }
-        public string AdditionalExecutableArguments { get { return _additionalExecutableArguments; } set { CheckNotOpened(); _additionalExecutableArguments = value; } }
-        public bool DefaultConfiguration { get { return _defaultConfiguration; } set { CheckNotOpened(); _defaultConfiguration = value; } }
-        public bool DisableVersionCheck { get { return _disableVersionCheck; } set { CheckNotOpened(); _disableVersionCheck = value; } }
-        public string IniFilePath { get { return _iniFilePath; } set { CheckNotOpened(); _iniFilePath = value; } }
-        public TimeSpan ReconnectTime { get { return _reconnectTime; } set { CheckNotOpened(); _reconnectTime = value; } }
-        public int ReconnectTimeInMilliseconds { get { return Tools.TimeSpanToMilliseconds(ReconnectTime); } set { ReconnectTime = Tools.MillisecondsToTimeSpan(value); } }
-        public string DebugLogPath { get { CheckNotDisposed(); return Logger.LogPath; } set { CheckNotDisposed(); Logger.LogPath = value; } }
-        public int DebugLogLevel { get { CheckNotDisposed(); return Logger.LogLevel; } set { CheckNotDisposed(); Logger.LogLevel = value; } }
-        public string SessionLogPath { get { return _sessionLogPath; } set { CheckNotOpened(); _sessionLogPath = value; } }
-        public string XmlLogPath { get { return _xmlLogPath; } set { CheckNotOpened(); _xmlLogPath = value; } }
-        #if DEBUG
-        public bool GuardProcessWithJob { get { return GuardProcessWithJobInternal; } set { GuardProcessWithJobInternal = value; } }
-        public bool TestHandlesClosed { get { return TestHandlesClosedInternal; } set { TestHandlesClosedInternal = value; } }
-        #endif
-        public string HomePath { get { CheckOpened(); return _homePath; } }
-
-        public TimeSpan Timeout { get; set; }
-
-        public StringCollection Output { get; private set; }
-        public bool Opened { get { CheckNotDisposed(); return (_process != null); } }
-
-        public event FileTransferredEventHandler FileTransferred;
-        public event FailedEventHandler Failed;
-        public event OutputDataReceivedEventHandler OutputDataReceived;
-
-        public event FileTransferProgressEventHandler FileTransferProgress
-        {
-            add
-            {
-                using (Logger.CreateCallstackAndLock())
-                {
-                    CheckNotOpened();
-                    _fileTransferProgress += value;
-                }
-            }
-
-            remove
-            {
-                using (Logger.CreateCallstackAndLock())
-                {
-                    CheckNotOpened();
-                    _fileTransferProgress -= value;
-                }
-            }
-        }
-
-        public Session()
-        {
-            Logger = new Logger();
-
-            using (Logger.CreateCallstackAndLock())
-            {
-                Timeout = new TimeSpan(0, 1, 0);
-                _reconnectTime = new TimeSpan(0, 2, 0); // keep in sync with TScript::OptionImpl
-                Output = new StringCollection();
-                _operationResults = new List<OperationResultBase>();
-                _events = new List<Action>();
-                _eventsEvent = new AutoResetEvent(false);
-                _disposed = false;
-                _defaultConfiguration = true;
-                _logUnique = 0;
-                _guardProcessWithJob = true;
-                RawConfiguration = new Dictionary<string, string>();
-            }
-        }
-
-        public void Dispose()
-        {
-            using (Logger.CreateCallstackAndLock())
-            {
-                _disposed = true;
-
-                Cleanup();
-                Logger.Dispose();
-
-                if (_eventsEvent != null)
-                {
-                    _eventsEvent.Close();
-                    _eventsEvent = null;
-                }
-
-                GC.SuppressFinalize(this);
-            }
-        }
-
-        public void Abort()
-        {
-            using (Logger.CreateCallstack())
-            {
-                CheckOpened();
-
-                _aborted = true;
-
-                // double-check
-                if (_process != null)
-                {
-                    _process.Abort();
-                }
-            }
-        }
-
-        public void Open(SessionOptions sessionOptions)
-        {
-            using (Logger.CreateCallstackAndLock())
-            {
-                CheckNotDisposed();
-
-                if (Opened)
-                {
-                    throw new InvalidOperationException("Session is already opened");
-                }
-
-                try
-                {
-                    SetupTempPath();
-
-                    _process = new ExeSessionProcess(this);
-
-                    _process.OutputDataReceived += ProcessOutputDataReceived;
-
-                    _process.Start();
-
-                    GotOutput();
-
-                    // setup batch mode
-                    WriteCommand("option batch on");
-                    WriteCommand("option confirm off");
-
-                    object reconnectTimeValue;
-                    if (ReconnectTime != TimeSpan.MaxValue)
-                    {
-                        reconnectTimeValue = (int)ReconnectTime.TotalSeconds;
-                    }
-                    else
-                    {
-                        reconnectTimeValue = "off";
-                    }
-                    string reconnectTimeCommand =
-                        string.Format(CultureInfo.InvariantCulture, "option reconnecttime {0}", reconnectTimeValue);
-                    WriteCommand(reconnectTimeCommand);
-
-                    string command;
-                    string log;
-                    SessionOptionsToOpenCommand(sessionOptions, out command, out log);
-                    WriteCommand(command, log);
-
-                    string logExplanation =
-                        string.Format(CultureInfo.CurrentCulture,
-                            "(response log file {0} was not created). This could indicate lack of write permissions to the log folder or problems starting WinSCP itself.",
-                            XmlLogPath);
-
-                    // Wait until the log file gets created or WinSCP terminates (in case of fatal error)
-                    do
-                    {
-                        if (_process.HasExited && !File.Exists(XmlLogPath))
-                        {
-                            string[] output = new string[Output.Count];
-                            Output.CopyTo(output, 0);
-                            Logger.WriteCounters();
-                            Logger.WriteProcesses();
-                            _process.WriteStatus();
-                            string exitCode = string.Format(CultureInfo.CurrentCulture, "{0}", _process.ExitCode);
-                            if (_process.ExitCode < 0)
-                            {
-                                exitCode = string.Format(CultureInfo.CurrentCulture, "{0} ({1:X})", exitCode, _process.ExitCode);
-                            }
-                            throw new SessionLocalException(this,
-                                string.Format(CultureInfo.CurrentCulture,
-                                    "WinSCP process terminated with exit code {0} and output \"{1}\", without responding {2}",
-                                    exitCode, string.Join(Environment.NewLine, output), logExplanation));
-                        }
-
-                        Thread.Sleep(50);
-
-                        CheckForTimeout(
-                            string.Format(CultureInfo.CurrentCulture,
-                                "WinSCP has not responded in time {0}",
-                                logExplanation));
-
-                    } while (!File.Exists(XmlLogPath));
-
-                    _logReader = new SessionLogReader(this);
-
-                    _logReader.WaitForNonEmptyElement("session", LogReadFlags.ThrowFailures);
-
-                    // special variant of ElementLogReader that throws when closing element (</session>) is encountered
-                    _reader = new SessionElementLogReader(_logReader);
-
-                    // Skip "open" command <group>
-                    using (ElementLogReader groupReader = _reader.WaitForGroupAndCreateLogReader())
-                    {
-                        ReadElement(groupReader, LogReadFlags.ThrowFailures);
-                    }
-
-                    WriteCommand("pwd");
-
-                    using (ElementLogReader groupReader = _reader.WaitForGroupAndCreateLogReader())
-                    using (ElementLogReader cwdReader = groupReader.WaitForNonEmptyElementAndCreateLogReader("cwd", LogReadFlags.ThrowFailures))
-                    {
-                        while (cwdReader.Read(0))
-                        {
-                            string value;
-                            if (cwdReader.GetEmptyElementValue("cwd", out value))
-                            {
-                                _homePath = value;
-                            }
-                        }
-
-                        groupReader.ReadToEnd(LogReadFlags.ThrowFailures);
-                    }
-
-                }
-                catch(Exception e)
-                {
-                    Logger.WriteLine("Exception: {0}", e);
-                    Cleanup();
-                    throw;
-                }
-            }
-        }
-
-        public void Close()
-        {
-            using (Logger.CreateCallstackAndLock())
-            {
-                CheckOpened();
-
-                Cleanup();
-            }
-        }
-
-        public RemoteDirectoryInfo ListDirectory(string path)
-        {
-            using (Logger.CreateCallstackAndLock())
-            {
-                CheckOpened();
-
-                WriteCommand(string.Format(CultureInfo.InvariantCulture, "ls -- \"{0}\"", Tools.ArgumentEscape(IncludeTrailingSlash(path))));
-
-                RemoteDirectoryInfo result = new RemoteDirectoryInfo();
-
-                using (ElementLogReader groupReader = _reader.WaitForGroupAndCreateLogReader())
-                using (ElementLogReader lsReader = groupReader.WaitForNonEmptyElementAndCreateLogReader("ls", LogReadFlags.ThrowFailures))
-                {
-                    if (lsReader.TryWaitForNonEmptyElement("files", 0))
-                    {
-                        using (ElementLogReader filesReader = lsReader.CreateLogReader())
-                        {
-                            while (filesReader.TryWaitForNonEmptyElement("file", 0))
-                            {
-                                RemoteFileInfo fileInfo = new RemoteFileInfo();
-
-                                using (ElementLogReader fileReader = filesReader.CreateLogReader())
-                                {
-                                    while (fileReader.Read(0))
-                                    {
-                                        string value;
-                                        if (fileReader.GetEmptyElementValue("filename", out value))
-                                        {
-                                            fileInfo.Name = value;
-                                        }
-                                        else
-                                        {
-                                            ReadFile(fileInfo, fileReader);
-                                        }
-                                    }
-
-                                    result.AddFile(fileInfo);
-                                }
-                            }
-                        }
-
-                        groupReader.ReadToEnd(LogReadFlags.ThrowFailures);
-                    }
-                    else
-                    {
-                        // "files" not found, keep reading, we expect "failure"
-                        groupReader.ReadToEnd(LogReadFlags.ThrowFailures);
-                        // only if not "failure", throw "files" not found
-                        throw SessionLocalException.CreateElementNotFound(this, "files");
-                    }
-                }
-
-                return result;
-            }
-        }
-
-        public TransferOperationResult PutFiles(string localPath, string remotePath, bool remove = false, TransferOptions options = null)
-        {
-            using (Logger.CreateCallstackAndLock())
-            {
-                if (options == null)
-                {
-                    options = new TransferOptions();
-                }
-
-                CheckOpened();
-
-                WriteCommand(
-                    string.Format(CultureInfo.InvariantCulture,
-                        "put {0} {1} -- \"{2}\" \"{3}\"",
-                        BooleanSwitch(remove, "delete"), options.ToSwitches(),
-                        Tools.ArgumentEscape(localPath), Tools.ArgumentEscape(remotePath)));
-
-                TransferOperationResult result = new TransferOperationResult();
-
-                using (ElementLogReader groupReader = _reader.WaitForGroupAndCreateLogReader())
-                using (RegisterOperationResult(result))
-                using (CreateProgressHandler())
-                {
-                    TransferEventArgs args = null;
-                    bool mkdir = false;
-
-                    while (groupReader.Read(0))
-                    {
-                        if (groupReader.IsNonEmptyElement(TransferEventArgs.UploadTag))
-                        {
-                            AddTransfer(result, args);
-                            args = TransferEventArgs.Read(groupReader);
-                            mkdir = false;
-                        }
-                        else if (groupReader.IsNonEmptyElement(TransferEventArgs.MkDirTag))
-                        {
-                            AddTransfer(result, args);
-                            args = null;
-                            mkdir = true;
-                            // For now, silently ignoring results (even errors)
-                            // of mkdir operation, including future chmod/touch
-                        }
-                        else if (groupReader.IsNonEmptyElement(ChmodEventArgs.Tag))
-                        {
-                            if (!mkdir)
-                            {
-                                if (args == null)
-                                {
-                                    throw new InvalidOperationException("Tag chmod before tag upload");
-                                }
-                                args.Chmod = ChmodEventArgs.Read(groupReader);
-                            }
-                        }
-                        else if (groupReader.IsNonEmptyElement(TouchEventArgs.Tag))
-                        {
-                            if (!mkdir)
-                            {
-                                if (args == null)
-                                {
-                                    throw new InvalidOperationException("Tag touch before tag upload");
-                                }
-                                args.Touch = TouchEventArgs.Read(groupReader);
-                            }
-                        }
-                    }
-
-                    AddTransfer(result, args);
-                }
-
-                return result;
-            }
-        }
-
-        private void AddTransfer(TransferOperationResult result, TransferEventArgs args)
-        {
-            if (args != null)
-            {
-                result.AddTransfer(args);
-                RaiseFileTransferredEvent(args);
-            }
-        }
-
-        public TransferOperationResult GetFiles(string remotePath, string localPath, bool remove = false, TransferOptions options = null)
-        {
-            using (Logger.CreateCallstackAndLock())
-            {
-                if (options == null)
-                {
-                    options = new TransferOptions();
-                }
-
-                CheckOpened();
-
-                WriteCommand(
-                    string.Format(CultureInfo.InvariantCulture, "get {0} {1} -- \"{2}\" \"{3}\"",
-                        BooleanSwitch(remove, "delete"), options.ToSwitches(),
-                        Tools.ArgumentEscape(remotePath), Tools.ArgumentEscape(localPath)));
-
-                TransferOperationResult result = new TransferOperationResult();
-
-                using (ElementLogReader groupReader = _reader.WaitForGroupAndCreateLogReader())
-                using (RegisterOperationResult(result))
-                using (CreateProgressHandler())
-                {
-                    TransferEventArgs args = null;
-
-                    while (groupReader.Read(0))
-                    {
-                        if (groupReader.IsNonEmptyElement(TransferEventArgs.DownloadTag))
-                        {
-                            AddTransfer(result, args);
-                            args = TransferEventArgs.Read(groupReader);
-                        }
-                        else if (groupReader.IsNonEmptyElement(RemovalEventArgs.Tag))
-                        {
-                            // When "downloading and deleting" a folder,
-                            // we get "rm" tag without preceeding "download" tag.
-                            // So we use only the first "rm" tag after preceeding "download" tag,
-                            // silently ignoring the others
-                            if ((args != null) && (args.Removal == null))
-                            {
-                                args.Removal = RemovalEventArgs.Read(groupReader);
-                            }
-                        }
-                    }
-
-                    AddTransfer(result, args);
-                }
-
-                return result;
-            }
-        }
-
-        public RemovalOperationResult RemoveFiles(string path)
-        {
-            using (Logger.CreateCallstackAndLock())
-            {
-                CheckOpened();
-
-                WriteCommand(string.Format(CultureInfo.InvariantCulture, "rm -- \"{0}\"", Tools.ArgumentEscape(path)));
-
-                RemovalOperationResult result = new RemovalOperationResult();
-
-                using (ElementLogReader groupReader = _reader.WaitForGroupAndCreateLogReader())
-                using (RegisterOperationResult(result))
-                {
-                    while (groupReader.Read(0))
-                    {
-                        if (groupReader.IsNonEmptyElement(RemovalEventArgs.Tag))
-                        {
-                            result.AddRemoval(RemovalEventArgs.Read(groupReader));
-                        }
-                    }
-                }
-
-                return result;
-            }
-        }
-
-        public SynchronizationResult SynchronizeDirectories(
-            SynchronizationMode mode, string localPath, string remotePath,
-            bool removeFiles, bool mirror = false, SynchronizationCriteria criteria = SynchronizationCriteria.Time,
-            TransferOptions options = null)
-        {
-            using (Logger.CreateCallstackAndLock())
-            {
-                if (options == null)
-                {
-                    options = new TransferOptions();
-                }
-
-                CheckOpened();
-
-                if (removeFiles && (mode == SynchronizationMode.Both))
-                {
-                    throw new ArgumentException("Cannot delete files in synchronization mode Both");
-                }
-
-                if (mirror && (mode == SynchronizationMode.Both))
-                {
-                    throw new ArgumentException("Cannot mirror files in synchronization mode Both");
-                }
-
-                if ((criteria != SynchronizationCriteria.Time) && (mode == SynchronizationMode.Both))
-                {
-                    throw new ArgumentException("Only Time criteria is allowed in synchronization mode Both");
-                }
-
-                string modeName;
-                switch (mode)
-                {
-                    case SynchronizationMode.Local:
-                        modeName = "local";
-                        break;
-                    case SynchronizationMode.Remote:
-                        modeName = "remote";
-                        break;
-                    case SynchronizationMode.Both:
-                        modeName = "both";
-                        break;
-                    default:
-                        throw new ArgumentOutOfRangeException("mode");
-                }
-
-                string criteriaName;
-                switch (criteria)
-                {
-                    case SynchronizationCriteria.None:
-                        criteriaName = "none";
-                        break;
-                    case SynchronizationCriteria.Time:
-                        criteriaName = "time";
-                        break;
-                    case SynchronizationCriteria.Size:
-                        criteriaName = "size";
-                        break;
-                    case SynchronizationCriteria.Either:
-                        criteriaName = "either";
-                        break;
-                    default:
-                        throw new ArgumentOutOfRangeException("criteria");
-                }
-
-                WriteCommand(
-                    string.Format(CultureInfo.InvariantCulture,
-                        "synchronize {0} {1} {2} {3} -criteria=\"{4}\" -- \"{5}\" \"{6}\"",
-                        modeName,
-                        BooleanSwitch(removeFiles, "delete"),
-                        BooleanSwitch(mirror, "mirror"),
-                        options.ToSwitches(),
-                        criteriaName,
-                        Tools.ArgumentEscape(localPath), Tools.ArgumentEscape(remotePath)));
-
-                return ReadSynchronizeDirectories();
-            }
-        }
-
-        private SynchronizationResult ReadSynchronizeDirectories()
-        {
-            using (Logger.CreateCallstack())
-            {
-                SynchronizationResult result = new SynchronizationResult();
-
-                using (ElementLogReader groupReader = _reader.WaitForGroupAndCreateLogReader())
-                using (RegisterOperationResult(result))
-                using (CreateProgressHandler())
-                {
-                    bool transferIsUpload = false;
-                    TransferEventArgs transfer = null;
-
-                    while (groupReader.Read(0))
-                    {
-                        bool transferWillBeUpload;
-                        if ((transferWillBeUpload = groupReader.IsNonEmptyElement(TransferEventArgs.UploadTag)) ||
-                            groupReader.IsNonEmptyElement(TransferEventArgs.DownloadTag))
-                        {
-                            AddSynchronizationTransfer(result, transferIsUpload, transfer);
-                            transfer = TransferEventArgs.Read(groupReader);
-                            transferIsUpload = transferWillBeUpload;
-                        }
-                        else if (groupReader.IsNonEmptyElement(RemovalEventArgs.Tag))
-                        {
-                            result.AddRemoval(RemovalEventArgs.Read(groupReader));
-                        }
-                        else if (groupReader.IsNonEmptyElement(ChmodEventArgs.Tag))
-                        {
-                            if (transfer == null)
-                            {
-                                throw new InvalidOperationException("Tag chmod before tag download");
-                            }
-                            transfer.Chmod = ChmodEventArgs.Read(groupReader);
-                        }
-                        else if (groupReader.IsNonEmptyElement(TouchEventArgs.Tag))
-                        {
-                            if (transfer == null)
-                            {
-                                throw new InvalidOperationException("Tag touch before tag download");
-                            }
-                            transfer.Touch = TouchEventArgs.Read(groupReader);
-                        }
-                    }
-
-                    AddSynchronizationTransfer(result, transferIsUpload, transfer);
-                }
-                return result;
-            }
-        }
-
-        public CommandExecutionResult ExecuteCommand(string command)
-        {
-            using (Logger.CreateCallstackAndLock())
-            {
-                CheckOpened();
-
-                WriteCommand(string.Format(CultureInfo.InvariantCulture, "call {0}", command));
-
-                CommandExecutionResult result = new CommandExecutionResult();
-
-                // registering before creating group reader, so that
-                // it is still registered, when group reader is read to the end in it's .Dispose();
-                using (RegisterOperationResult(result))
-                using (ElementLogReader groupReader = _reader.WaitForGroupAndCreateLogReader())
-                using (ElementLogReader callReader = groupReader.WaitForNonEmptyElementAndCreateLogReader("call", LogReadFlags.ThrowFailures))
-                {
-                    while (callReader.Read(0))
-                    {
-                        string value;
-                        if (callReader.GetEmptyElementValue("output", out value))
-                        {
-                            result.Output = value;
-                        }
-                        if (callReader.GetEmptyElementValue("erroroutput", out value))
-                        {
-                            result.ErrorOutput = value;
-                        }
-                        if (callReader.GetEmptyElementValue("exitcode", out value))
-                        {
-                            result.ExitCode = int.Parse(value, CultureInfo.InvariantCulture);
-                        }
-                    }
-                }
-
-                return result;
-            }
-        }
-
-        public RemoteFileInfo GetFileInfo(string path)
-        {
-            using (Logger.CreateCallstackAndLock())
-            {
-                CheckOpened();
-
-                return DoGetFileInfo(path);
-            }
-        }
-
-        public bool FileExists(string path)
-        {
-            using (Logger.CreateCallstackAndLock())
-            {
-                CheckOpened();
-
-                try
-                {
-                    DoGetFileInfo(path);
-                    return true;
-                }
-                catch (SessionRemoteException)
-                {
-                    return false;
-                }
-            }
-        }
-
-        public byte[] CalculateFileChecksum(string algorithm, string path)
-        {
-            using (Logger.CreateCallstack())
-            {
-                WriteCommand(string.Format(CultureInfo.InvariantCulture, "checksum -- \"{0}\" \"{1}\"", Tools.ArgumentEscape(algorithm), Tools.ArgumentEscape(path)));
-
-                string hex = null;
-
-                using (ElementLogReader groupReader = _reader.WaitForGroupAndCreateLogReader())
-                using (ElementLogReader checksumReader = groupReader.WaitForNonEmptyElementAndCreateLogReader("checksum", LogReadFlags.ThrowFailures))
-                {
-                    while (checksumReader.Read(0))
-                    {
-                        string value;
-                        if (checksumReader.GetEmptyElementValue("checksum", out value))
-                        {
-                            hex = value;
-                        }
-                    }
-
-                    groupReader.ReadToEnd(LogReadFlags.ThrowFailures);
-                }
-
-                int len = hex.Length;
-
-                if ((len % 2) != 0)
-                {
-                    string error = string.Format(CultureInfo.CurrentCulture, "Invalid string representation of checksum - {0}", hex);
-                    throw new SessionLocalException(this, error);
-                }
-
-                int count = len / 2;
-                byte[] bytes = new byte[count];
-                for (int i = 0; i < count; i++)
-                {
-                    bytes[i] = Convert.ToByte(hex.Substring(i * 2, 2), 16);
-                }
-                return bytes;
-            }
-        }
-
-        public void CreateDirectory(string path)
-        {
-            using (Logger.CreateCallstackAndLock())
-            {
-                CheckOpened();
-
-                WriteCommand(string.Format(CultureInfo.InvariantCulture, "mkdir \"{0}\"", Tools.ArgumentEscape(path)));
-
-                using (ElementLogReader groupReader = _reader.WaitForGroupAndCreateLogReader())
-                using (ElementLogReader mkdirReader = groupReader.WaitForNonEmptyElementAndCreateLogReader(TransferEventArgs.MkDirTag, LogReadFlags.ThrowFailures))
-                {
-                    ReadElement(mkdirReader, 0);
-                    groupReader.ReadToEnd(LogReadFlags.ThrowFailures);
-                }
-            }
-        }
-
-        public void MoveFile(string sourcePath, string targetPath)
-        {
-            using (Logger.CreateCallstackAndLock())
-            {
-                CheckOpened();
-
-                WriteCommand(string.Format(CultureInfo.InvariantCulture, "mv \"{0}\" \"{1}\"", Tools.ArgumentEscape(sourcePath), Tools.ArgumentEscape(targetPath)));
-
-                using (ElementLogReader groupReader = _reader.WaitForGroupAndCreateLogReader())
-                using (ElementLogReader mvReader = groupReader.WaitForNonEmptyElementAndCreateLogReader("mv", LogReadFlags.ThrowFailures))
-                {
-                    ReadElement(mvReader, 0);
-                    groupReader.ReadToEnd(LogReadFlags.ThrowFailures);
-                }
-            }
-        }
-
-        // This is not static method only to make it visible to COM
-        public string EscapeFileMask(string fileMask)
-        {
-            if (fileMask == null)
-            {
-                throw new ArgumentNullException("fileMask");
-            }
-            int lastSlash = fileMask.LastIndexOf('/');
-            string path = lastSlash > 0 ? fileMask.Substring(0, lastSlash + 1) : string.Empty;
-            string mask = lastSlash > 0 ? fileMask.Substring(lastSlash + 1) : fileMask;
-            mask = mask.Replace("[", "[[]").Replace("*", "[*]").Replace("?", "[?]");
-            return path + mask;
-        }
-
-        public void AddRawConfiguration(string setting, string value)
-        {
-            RawConfiguration.Add(setting, value);
-        }
-
-        [ComRegisterFunction]
-        private static void ComRegister(Type t)
-        {
-            string subKey = GetTypeLibKey(t);
-            Assembly assembly = Assembly.GetAssembly(t);
-            object[] attributes = assembly.GetCustomAttributes(typeof(GuidAttribute), false);
-            if (attributes.Length == 0)
-            {
-                throw new InvalidOperationException(string.Format(CultureInfo.CurrentCulture, "Cannot find {0} attribute for assembly {1}", typeof(GuidAttribute), assembly));
-            }
-            GuidAttribute guidAttribute = (GuidAttribute)attributes[0];
-            Registry.ClassesRoot.CreateSubKey(subKey).SetValue(null, guidAttribute.Value);
-        }
-
-        [ComUnregisterFunction]
-        private static void ComUnregister(Type t)
-        {
-            string subKey = GetTypeLibKey(t);
-            Registry.ClassesRoot.DeleteSubKey(subKey, false);
-        }
-
-        private void ReadFile(RemoteFileInfo fileInfo, CustomLogReader fileReader)
-        {
-            using (Logger.CreateCallstack())
-            {
-                string value;
-                if (fileReader.GetEmptyElementValue("type", out value))
-                {
-                    fileInfo.FileType = value[0];
-                }
-                else if (fileReader.GetEmptyElementValue("size", out value))
-                {
-                    fileInfo.Length = long.Parse(value, CultureInfo.InvariantCulture);
-                }
-                else if (fileReader.GetEmptyElementValue("modification", out value))
-                {
-                    fileInfo.LastWriteTime = XmlConvert.ToDateTime(value, XmlDateTimeSerializationMode.Local);
-                }
-                else if (fileReader.GetEmptyElementValue("permissions", out value))
-                {
-                    fileInfo.FilePermissions = FilePermissions.CreateReadOnlyFromText(value);
-                }
-                else if (fileReader.GetEmptyElementValue("owner", out value))
-                {
-                    fileInfo.Owner = value;
-                }
-                else if (fileReader.GetEmptyElementValue("group", out value))
-                {
-                    fileInfo.Group = value;
-                }
-            }
-        }
-
-        internal static string BooleanSwitch(bool flag, string name)
-        {
-            return flag ? string.Format(CultureInfo.InvariantCulture, "-{0}", name) : null;
-        }
-
-        internal static string BooleanSwitch(bool flag, string onName, string offName)
-        {
-            return flag ? string.Format(CultureInfo.InvariantCulture, "-{0}", onName) : string.Format(CultureInfo.InvariantCulture, "-{0}", offName);
-        }
-
-        private void AddSynchronizationTransfer(SynchronizationResult result, bool transferIsUpload, TransferEventArgs transfer)
-        {
-            if (transfer != null)
-            {
-                if (transferIsUpload)
-                {
-                    result.AddUpload(transfer);
-                }
-                else
-                {
-                    result.AddDownload(transfer);
-                }
-                RaiseFileTransferredEvent(transfer);
-            }
-        }
-
-        private static string IncludeTrailingSlash(string path)
-        {
-            if (!string.IsNullOrEmpty(path) && !path.EndsWith("/", StringComparison.Ordinal))
-            {
-                path += '/';
-            }
-            return path;
-        }
-
-        private void Cleanup()
-        {
-            using (Logger.CreateCallstack())
-            {
-                if (_process != null)
-                {
-                    Logger.WriteLine("Terminating process");
-                    try
-                    {
-                        try
-                        {
-                            WriteCommand("exit");
-                            _process.Close();
-                        }
-                        finally
-                        {
-                            _process.Dispose();
-                            _process = null;
-                        }
-                    }
-                    catch (Exception e)
-                    {
-                        Logger.WriteLine("Process cleanup Exception: {0}", e);
-                    }
-                }
-
-                Logger.WriteLine("Disposing log readers");
-
-                if (_reader != null)
-                {
-                    _reader.Dispose();
-                    _reader = null;
-                }
-
-                if (_logReader != null)
-                {
-                    _logReader.Dispose();
-                    _logReader = null;
-                }
-
-                // Cleanup log file
-                if ((XmlLogPath != null) && File.Exists(XmlLogPath))
-                {
-                    Logger.WriteLine("Deleting XML log file [{0}]", XmlLogPath);
-                    try
-                    {
-                        File.Delete(XmlLogPath);
-                    }
-                    catch (DirectoryNotFoundException e)
-                    {
-                        Logger.WriteLine("XML log cleanup DirectoryNotFoundException: {0}", e);
-                    }
-                    catch (IOException e)
-                    {
-                        Logger.WriteLine("XML log cleanup IOException: {0}", e);
-                    }
-                    catch (UnauthorizedAccessException e)
-                    {
-                        Logger.WriteLine("XML log cleanup UnauthorizedAccessException: {0}", e);
-                    }
-
-                    _xmlLogPath = null;
-                }
-            }
-        }
-
-        private void WriteCommand(string command)
-        {
-            WriteCommand(command, command);
-        }
-
-        private void WriteCommand(string command, string log)
-        {
-            Logger.WriteLine("Command: [{0}]", log);
-            _process.ExecuteCommand(command);
-            GotOutput();
-        }
-
-        private static void ReadElement(CustomLogReader reader, LogReadFlags flags)
-        {
-            while (reader.Read(flags))
-            {
-            }
-        }
-
-        private void SessionOptionsToOpenCommand(SessionOptions sessionOptions, out string command, out string log)
-        {
-            using (Logger.CreateCallstack())
-            {
-                if (sessionOptions.WebdavSecure)
-                {
-                    if (sessionOptions.Protocol != Protocol.Webdav)
-                    {
-                        throw new ArgumentException("SessionOptions.WebdavSecure is set, but SessionOptions.Protocol is not Protocol.Webdav.");
-                    }
-                }
-
-                string head;
-                switch (sessionOptions.Protocol)
-                {
-                    case Protocol.Sftp:
-                        head = "sftp://";
-                        break;
-
-                    case Protocol.Scp:
-                        head = "scp://";
-                        break;
-
-                    case Protocol.Ftp:
-                        head = "ftp://";
-                        break;
-
-                    case Protocol.Webdav:
-                        if (!sessionOptions.WebdavSecure)
-                        {
-                            head = "http://";
-                        }
-                        else
-                        {
-                            head = "https://";
-                        }
-                        break;
-
-                    default:
-                        throw new ArgumentException(string.Format(CultureInfo.CurrentCulture, "{0} is not supported", sessionOptions.Protocol));
-                }
-
-                bool hasUsername = !string.IsNullOrEmpty(sessionOptions.UserName);
-                if (hasUsername)
-                {
-                    head += UriEscape(sessionOptions.UserName);
-                }
-
-                string url = head;
-                string logUrl = head;
-
-                if (sessionOptions.SecurePassword != null)
-                {
-                    if (!hasUsername)
-                    {
-                        throw new ArgumentException("SessionOptions.Password is set, but SessionOptions.UserName is not.");
-                    }
-                    url += ":" + UriEscape(sessionOptions.Password);
-                    logUrl += ":***";
-                }
-
-                string tail = string.Empty;
-
-                if (hasUsername)
-                {
-                    tail += "@";
-                }
-
-                if (string.IsNullOrEmpty(sessionOptions.HostName))
-                {
-                    throw new ArgumentException("SessionOptions.HostName is not set.");
-                }
-
-                // We should wrap IPv6 literals to square brackets, instead of URL-encoding them,
-                // but it works anyway...
-                tail += UriEscape(sessionOptions.HostName);
-
-                if (sessionOptions.PortNumber != 0)
-                {
-                    tail += ":" + sessionOptions.PortNumber.ToString(CultureInfo.InvariantCulture);
-                }
-
-                if (!string.IsNullOrEmpty(sessionOptions.WebdavRoot))
-                {
-                    if (sessionOptions.Protocol != Protocol.Webdav)
-                    {
-                        throw new ArgumentException("SessionOptions.WebdavRoot is set, but SessionOptions.Protocol is not Protocol.Webdav.");
-                    }
-
-                    tail += sessionOptions.WebdavRoot;
-                }
-
-                url += tail;
-                logUrl += tail;
-
-                string arguments = SessionOptionsToOpenSwitches(sessionOptions);
-
-                Tools.AddRawParameters(ref arguments, sessionOptions.RawSettings, "-rawsettings");
-
-                if (!string.IsNullOrEmpty(arguments))
-                {
-                    arguments = " " + arguments;
-                }
-
-                // Switches should (and particularly the -rawsettings MUST) come after the URL
-                command = "open \"" + Tools.ArgumentEscape(url) + "\"" + arguments;
-                log = "open \"" + Tools.ArgumentEscape(logUrl) + "\"" + arguments;
-            }
-        }
-
-        private string SessionOptionsToOpenSwitches(SessionOptions sessionOptions)
-        {
-            using (Logger.CreateCallstack())
-            {
-                List<string> switches = new List<string>();
-
-                if (!string.IsNullOrEmpty(sessionOptions.SshHostKeyFingerprint) ||
-                    sessionOptions.GiveUpSecurityAndAcceptAnySshHostKey)
-                {
-                    if (!sessionOptions.IsSsh)
-                    {
-                        throw new ArgumentException("SessionOptions.SshHostKeyFingerprint or SessionOptions.GiveUpSecurityAndAcceptAnySshHostKey is set, but SessionOptions.Protocol is neither Protocol.Sftp nor Protocol.Scp.");
-                    }
-                    string sshHostKeyFingerprint = sessionOptions.SshHostKeyFingerprint;
-                    if (sessionOptions.GiveUpSecurityAndAcceptAnySshHostKey)
-                    {
-                        Logger.WriteLine("WARNING! Giving up security and accepting any key as configured");
-                        sshHostKeyFingerprint = AddStarToList(sshHostKeyFingerprint);
-                    }
-                    switches.Add(FormatSwitch("hostkey", sshHostKeyFingerprint));
-                }
-                else
-                {
-                    if (sessionOptions.IsSsh && DefaultConfiguration)
-                    {
-                        throw new ArgumentException("SessionOptions.Protocol is Protocol.Sftp or Protocol.Scp, but SessionOptions.SshHostKeyFingerprint is not set.");
-                    }
-                }
-
-                if (!string.IsNullOrEmpty(sessionOptions.SshPrivateKeyPath))
-                {
-                    if (!sessionOptions.IsSsh)
-                    {
-                        throw new ArgumentException("SessionOptions.SshPrivateKeyPath is set, but SessionOptions.Protocol is neither Protocol.Sftp nor Protocol.Scp.");
-                    }
-                    switches.Add(FormatSwitch("privatekey", sessionOptions.SshPrivateKeyPath));
-                }
-
-                if (!string.IsNullOrEmpty(sessionOptions.SshPrivateKeyPassphrase))
-                {
-                    if (string.IsNullOrEmpty(sessionOptions.SshPrivateKeyPath))
-                    {
-                        throw new ArgumentException("SessionOptions.SshPrivateKeyPassphrase is set, but sessionOptions.SshPrivateKeyPath is not.");
-                    }
-                    switches.Add(FormatSwitch("passphrase", sessionOptions.SshPrivateKeyPassphrase));
-                }
-
-                if (sessionOptions.FtpSecure != FtpSecure.None)
-                {
-                    if (sessionOptions.Protocol != Protocol.Ftp)
-                    {
-                        throw new ArgumentException("SessionOptions.FtpSecure is not FtpSecure.None, but SessionOptions.Protocol is not Protocol.Ftp.");
-                    }
-
-                    switch (sessionOptions.FtpSecure)
-                    {
-                        case FtpSecure.Implicit:
-                            switches.Add(FormatSwitch("implicit"));
-                            break;
-
-                        case FtpSecure.Explicit: // and ExplicitTls
-                            switches.Add(FormatSwitch("explicit"));
-                            break;
-
-#pragma warning disable 618
-                        case FtpSecure.ExplicitSsl:
-#pragma warning restore 618
-                            switches.Add(FormatSwitch("explicitssl"));
-                            break;
-
-                        default:
-                            throw new ArgumentException(string.Format(CultureInfo.CurrentCulture, "{0} is not supported", sessionOptions.FtpSecure));
-                    }
-                }
-
-                if (!string.IsNullOrEmpty(sessionOptions.TlsHostCertificateFingerprint) ||
-                    sessionOptions.GiveUpSecurityAndAcceptAnyTlsHostCertificate)
-                {
-                    if ((sessionOptions.FtpSecure == FtpSecure.None) && !sessionOptions.WebdavSecure)
-                    {
-                        throw new ArgumentException("SessionOptions.TlsHostCertificateFingerprint or SessionOptions.GiveUpSecurityAndAcceptAnyTlsHostCertificate is set, neither SessionOptions.FtpSecure nor SessionOptions.WebdavSecure is enabled.");
-                    }
-                    string tlsHostCertificateFingerprint = sessionOptions.TlsHostCertificateFingerprint;
-                    if (sessionOptions.GiveUpSecurityAndAcceptAnyTlsHostCertificate)
-                    {
-                        Logger.WriteLine("WARNING! Giving up security and accepting any certificate as configured");
-                        tlsHostCertificateFingerprint = AddStarToList(tlsHostCertificateFingerprint);
-                    }
-                    switches.Add(FormatSwitch("certificate", tlsHostCertificateFingerprint));
-                }
-
-                if (sessionOptions.Protocol == Protocol.Ftp)
-                {
-                    switches.Add(FormatSwitch("passive", (sessionOptions.FtpMode == FtpMode.Passive)));
-                }
-
-                switches.Add(FormatSwitch("timeout", (int)sessionOptions.Timeout.TotalSeconds));
-
-                return string.Join(" ", switches.ToArray());
-            }
-        }
-
-        private static string AddStarToList(string list)
-        {
-            return (string.IsNullOrEmpty(list) ? string.Empty : list + ";") + "*";
-        }
-
-        private RemoteFileInfo DoGetFileInfo(string path)
-        {
-            using (Logger.CreateCallstack())
-            {
-                WriteCommand(string.Format(CultureInfo.InvariantCulture, "stat -- \"{0}\"", Tools.ArgumentEscape(path)));
-
-                RemoteFileInfo fileInfo = new RemoteFileInfo();
-
-                using (ElementLogReader groupReader = _reader.WaitForGroupAndCreateLogReader())
-                using (ElementLogReader statReader = groupReader.WaitForNonEmptyElementAndCreateLogReader("stat", LogReadFlags.ThrowFailures))
-                {
-                    while (statReader.Read(0))
-                    {
-                        string value;
-                        if (statReader.GetEmptyElementValue("filename", out value))
-                        {
-                            fileInfo.Name = value;
-                        }
-                        else if (statReader.IsNonEmptyElement("file"))
-                        {
-                            using (ElementLogReader fileReader = statReader.CreateLogReader())
-                            {
-                                while (fileReader.Read(0))
-                                {
-                                    ReadFile(fileInfo, fileReader);
-                                }
-                            }
-                        }
-                    }
-
-                    groupReader.ReadToEnd(LogReadFlags.ThrowFailures);
-                }
-
-                return fileInfo;
-            }
-        }
-
-        internal static string FormatSwitch(string key)
-        {
-            return string.Format(CultureInfo.InvariantCulture, "-{0}", key);
-        }
-
-        internal static string FormatSwitch(string key, string value)
-        {
-            return string.Format(CultureInfo.InvariantCulture, "-{0}=\"{1}\"", key, Tools.ArgumentEscape(value));
-        }
-
-        internal static string FormatSwitch(string key, int value)
-        {
-            return string.Format(CultureInfo.InvariantCulture, "-{0}={1}", key, value.ToString(CultureInfo.InvariantCulture));
-        }
-
-        internal static string FormatSwitch(string key, bool value)
-        {
-            return FormatSwitch(key, (value ? 1 : 0));
-        }
-
-        private static string UriEscape(string s)
-        {
-            return Uri.EscapeDataString(s);
-        }
-
-        internal void GotOutput()
-        {
-            _lastOutput = DateTime.Now;
-        }
-
-        private void ProcessOutputDataReceived(object sender, OutputDataReceivedEventArgs e)
-        {
-            Logger.WriteLine("Scheduling output: [{0}]", e.Data);
-            Output.InternalAdd(e.Data);
-            if (Output.Count > 1000)
-            {
-                Output.InternalRemoveFirst();
-            }
-            GotOutput();
-            ScheduleEvent(() => RaiseOutputDataReceived(e.Data));
-        }
-
-        private void ScheduleEvent(Action action)
-        {
-            lock (_events)
-            {
-                _events.Add(action);
-                _eventsEvent.Set();
-            }
-        }
-
-        internal void CheckForTimeout(string additional = null)
-        {
-            if (DateTime.Now - _lastOutput > Timeout)
-            {
-                string message = "Timeout waiting for WinSCP to respond";
-                if (additional != null)
-                {
-                    message += " - " + additional;
-                }
-                throw new TimeoutException(message);
-            }
-
-            if (_aborted)
-            {
-                throw new SessionLocalException(this, "Aborted.");
-            }
-        }
-
-        private void RaiseFileTransferredEvent(TransferEventArgs args)
-        {
-            Logger.WriteLine("FileTransferredEvent: [{0}]", args.FileName);
-
-            if (FileTransferred != null)
-            {
-                FileTransferred(this, args);
-            }
-        }
-
-        internal void RaiseFailed(SessionRemoteException e)
-        {
-            Logger.WriteLine("Failed: [{0}]", e);
-
-            if (Failed != null)
-            {
-                Failed(this, new FailedEventArgs { Error = e });
-            }
-
-            foreach (OperationResultBase operationResult in _operationResults)
-            {
-                operationResult.AddFailure(e);
-            }
-        }
-
-        private void CheckNotDisposed()
-        {
-            if (_disposed)
-            {
-                throw new InvalidOperationException("Object is disposed");
-            }
-
-            if (_aborted)
-            {
-                throw new InvalidOperationException("Session was aborted");
-            }
-        }
-
-        private void CheckOpened()
-        {
-            if (!Opened)
-            {
-                throw new InvalidOperationException("Session is not opened");
-            }
-        }
-
-        private void CheckNotOpened()
-        {
-            if (Opened)
-            {
-                throw new InvalidOperationException("Session is already opened");
-            }
-        }
-
-        private void RaiseOutputDataReceived(string data)
-        {
-            Logger.WriteLine("Output: [{0}]", data);
-
-            if (OutputDataReceived != null)
-            {
-                OutputDataReceived(this, new OutputDataReceivedEventArgs(data));
-            }
-        }
-
-        internal void DispatchEvents(int interval)
-        {
-            DateTime start = DateTime.Now;
-            while (_eventsEvent.WaitOne(interval, false))
-            {
-                lock (_events)
-                {
-                    foreach (Action action in _events)
-                    {
-                        action();
-                    }
-                    _events.Clear();
-                }
-
-                interval -= (int) (DateTime.Now - start).TotalMilliseconds;
-                if (interval < 0)
-                {
-                    break;
-                }
-                start = DateTime.Now;
-            }
-        }
-
-        private IDisposable RegisterOperationResult(OperationResultBase operationResult)
-        {
-            _operationResults.Add(operationResult);
-            return new OperationResultGuard(this, operationResult);
-        }
-
-        internal void UnregisterOperationResult(OperationResultBase operationResult)
-        {
-            _operationResults.Remove(operationResult);
-        }
-
-        internal bool WantsProgress
-        {
-            get
-            {
-                return (_fileTransferProgress != null);
-            }
-        }
-
-        private IDisposable CreateProgressHandler()
-        {
-            using (Logger.CreateCallstack())
-            {
-                _progressHandling++;
-                return new ProgressHandler(this);
-            }
-        }
-
-        internal void DisableProgressHandling()
-        {
-            using (Logger.CreateCallstack())
-            {
-                if (_progressHandling <= 0)
-                {
-                    throw new InvalidOperationException("Progress handling not enabled");
-                }
-
-                // make sure we process all pending progress events
-                DispatchEvents(0);
-
-                _progressHandling--;
-            }
-        }
-
-        internal void ProcessProgress(FileTransferProgressEventArgs args)
-        {
-            ScheduleEvent(() => Progress(args));
-        }
-
-        private void Progress(FileTransferProgressEventArgs args)
-        {
-            if ((_progressHandling >= 0) && WantsProgress)
-            {
-                _fileTransferProgress(this, args);
-            }
-        }
-
-        private void SetupTempPath()
-        {
-            using (Logger.CreateCallstack())
-            {
-                if (!string.IsNullOrEmpty(_xmlLogPath))
-                {
-                    bool exists = File.Exists(_xmlLogPath);
-                    Logger.WriteLine("Configured temporary file: {0} - Exists [{1}]", _xmlLogPath, exists);
-                    if (exists)
-                    {
-                        throw new SessionLocalException(this, string.Format(CultureInfo.CurrentCulture, "Configured temporary file {0} already exists", _xmlLogPath));
-                    }
-                }
-                else
-                {
-                    string path = Path.GetTempPath();
-                    Logger.WriteLine("Temporary folder: {0}", path);
-                    string process = Process.GetCurrentProcess().Id.ToString("X4", CultureInfo.InvariantCulture);
-                    string instance = GetHashCode().ToString("X8", CultureInfo.InvariantCulture);
-                    string filename;
-                    bool exists;
-                    do
-                    {
-                        string uniqueStr = (_logUnique > 0 ? "." + _logUnique.ToString(CultureInfo.InvariantCulture) : string.Empty);
-                        ++_logUnique;
-                        filename = Path.Combine(path, "wscp" + process + "." + instance + uniqueStr + ".tmp");
-                        exists = File.Exists(filename);
-                        Logger.WriteLine("Temporary file [{0}] - Exists [{1}]", filename, exists);
-                    }
-                    while (exists);
-
-                    _xmlLogPath = filename;
-                }
-            }
-        }
-
-        private static string GetTypeLibKey(Type t)
-        {
-            return "CLSID\\{" + t.GUID.ToString().ToUpperInvariant() + "}\\TypeLib";
-        }
-
-        FieldInfo IReflect.GetField(string name, BindingFlags bindingAttr)
-        {
-            using (Logger.CreateCallstack())
-            {
-                Logger.WriteLine("Name [{0}]", name);
-                FieldInfo result = GetType().GetField(name, bindingAttr);
-                Logger.WriteLine("Result [{0}]", result != null ? result.Name : "null");
-                return result;
-            }
-        }
-
-        FieldInfo[] IReflect.GetFields(BindingFlags bindingAttr)
-        {
-            using (Logger.CreateCallstack())
-            {
-                FieldInfo[] result = GetType().GetFields(bindingAttr);
-                Logger.WriteLine("Fields [{0}]", result.Length);
-                return result;
-            }
-        }
-
-        MemberInfo[] IReflect.GetMember(string name, BindingFlags bindingAttr)
-        {
-            using (Logger.CreateCallstack())
-            {
-                Logger.WriteLine("Name [{0}]", name);
-                MemberInfo[] result = GetType().GetMember(name, bindingAttr);
-                Logger.WriteLine("Result [{0}]", result.Length);
-                return result;
-            }
-        }
-
-        MemberInfo[] IReflect.GetMembers(BindingFlags bindingAttr)
-        {
-            using (Logger.CreateCallstack())
-            {
-                MemberInfo[] result = GetType().GetMembers(bindingAttr);
-                Logger.WriteLine("Result [{0}]", result.Length);
-                return result;
-            }
-        }
-
-        MethodInfo IReflect.GetMethod(string name, BindingFlags bindingAttr)
-        {
-            using (Logger.CreateCallstack())
-            {
-                Logger.WriteLine("Name [{0}]", name);
-                MethodInfo result = GetType().GetMethod(name, bindingAttr);
-                Logger.WriteLine("Result [{0}]", result != null ? result.Name : "null");
-                return result;
-            }
-        }
-
-        MethodInfo IReflect.GetMethod(string name, BindingFlags bindingAttr, Binder binder, Type[] types, ParameterModifier[] modifiers)
-        {
-            using (Logger.CreateCallstack())
-            {
-                Logger.WriteLine("Name [{0}]", name);
-                MethodInfo result = GetType().GetMethod(name, bindingAttr, binder, types, modifiers);
-                Logger.WriteLine("Result [{0}]", result != null ? result.Name : "null");
-                return result;
-            }
-        }
-
-        MethodInfo[] IReflect.GetMethods(BindingFlags bindingAttr)
-        {
-            using (Logger.CreateCallstack())
-            {
-                MethodInfo[] result = GetType().GetMethods(bindingAttr);
-                Logger.WriteLine("Result [{0}]", result.Length);
-                return result;
-            }
-        }
-
-        PropertyInfo[] IReflect.GetProperties(BindingFlags bindingAttr)
-        {
-            using (Logger.CreateCallstack())
-            {
-                PropertyInfo[] result = GetType().GetProperties(bindingAttr);
-                Logger.WriteLine("Result [{0}]", result.Length);
-                return result;
-            }
-        }
-
-        PropertyInfo IReflect.GetProperty(string name, BindingFlags bindingAttr, Binder binder, Type returnType, Type[] types, ParameterModifier[] modifiers)
-        {
-            using (Logger.CreateCallstack())
-            {
-                Logger.WriteLine("Name [{0}]", name);
-                PropertyInfo result = GetType().GetProperty(name, bindingAttr, binder, returnType, types, modifiers);
-                Logger.WriteLine("Result [{0}]", result != null ? result.Name : "null");
-                return result;
-            }
-        }
-
-        PropertyInfo IReflect.GetProperty(string name, BindingFlags bindingAttr)
-        {
-            using (Logger.CreateCallstack())
-            {
-                Logger.WriteLine("Name [{0}]", name);
-                PropertyInfo result = GetType().GetProperty(name, bindingAttr);
-                Logger.WriteLine("Result [{0}]", result != null ? result.Name : "null");
-                return result;
-            }
-        }
-
-        object IReflect.InvokeMember(string name, BindingFlags invokeAttr, Binder binder, object target, object[] args, ParameterModifier[] modifiers, CultureInfo culture, string[] namedParameters)
-        {
-            using (Logger.CreateCallstack())
-            {
-                object result;
-
-                try
-                {
-                    if (Logger.Logging)
-                    {
-                        Logger.WriteLine("Name [{0}]", name);
-                        Logger.WriteLine("BindingFlags [{0}]", invokeAttr);
-                        Logger.WriteLine("Binder [{0}]", binder);
-                        Logger.WriteLine("Target [{0}]", target);
-                        if (args != null)
-                        {
-                            Logger.WriteLine("Args [{0}] [{1}]", args.Length, modifiers != null ? modifiers.Length.ToString(CultureInfo.InvariantCulture) : "null");
-                            for (int i = 0; i < args.Length; ++i)
-                            {
-                                Logger.WriteLine("Arg [{0}] [{1}] [{1}] [{2}]", i, args[i], (args[i] != null ? args[i].GetType().ToString() : "null"), (modifiers != null ? modifiers[i].ToString() : "null"));
-                            }
-                        }
-                        Logger.WriteLine("Culture [{0}]", culture);
-                        if (namedParameters != null)
-                        {
-                            foreach (string namedParameter in namedParameters)
-                            {
-                                Logger.WriteLine("NamedParameter [{0}]", namedParameter);
-                            }
-                        }
-                    }
-
-                    Type type = target.GetType();
-
-                    // RuntimeType.InvokeMember below calls into Binder.BindToMethod (Binder is OleAutBinder)
-                    // that fails to match method, if integer value is provided to enum argument
-                    // (SynchronizeDirectories with its SynchronizationMode and SynchronizationCriteria).
-                    // This does not happen if we do not implement IReflect, though no idea why.
-                    // So as a workaround we check, if the method has no overloads (what is always true for Session),
-                    // and call the only instance directly.
-                    // Calling MethodInfo.Invoke with int values for enum arguments works.
-                    // Only as a fallback, we call InvokeMember (what is currently actually used only when
-                    // the method with given name does not exist at all)
-
-                    MethodInfo method = null;
-                    PropertyInfo property = null;
-
-                    // would be way too difficult to implement the below involving named arguments
-                    if (namedParameters == null)
-                    {
-                        try
-                        {
-                            BindingFlags bindingFlags = invokeAttr | BindingFlags.Instance | BindingFlags.Public;
-                            method = type.GetMethod(name, bindingFlags);
-
-                            if (method != null)
-                            {
-                                // MethodInfo.Invoke does not fill-in optional arguments (contrary to RuntimeType.InvokeMember) 
-                                ParameterInfo[] parameters = method.GetParameters();
-                                if (args.Length < parameters.Length)
-                                {
-                                    Logger.WriteLine("Provided less parameters [{0}] than defined [{1}]", args.Length, parameters.Length);
-                                    object[] args2 = new object[parameters.Length];
-
-                                    for (int i = 0; i < parameters.Length; i++)
-                                    {
-                                        if (i < args.Length)
-                                        {
-                                            args2[i] = args[i];
-                                        }
-                                        else
-                                        {
-                                            if (!parameters[i].IsOptional)
-                                            {
-                                                Logger.WriteLine("Parameter [{0}] of [{1}] is not optional", i, method);
-                                                args2 = null;
-                                                break;
-                                            }
-                                            else
-                                            {
-                                                Logger.WriteLine("Adding default value [{0}] for optional parameter [{1}]", parameters[i].DefaultValue, i);
-                                                args2[i] = parameters[i].DefaultValue;
-                                            }
-                                        }
-                                    }
-
-                                    if (args2 != null)
-                                    {
-                                        args = args2;
-                                    }
-                                }
-                            }
-                            else if (args.Length == 1) // sanity check
-                            {
-                                property = type.GetProperty(name, bindingFlags);
-                            }
-                        }
-                        catch (AmbiguousMatchException e)
-                        {
-                            Logger.WriteLine("Unexpected ambiguous match [{0}]", e.Message);
-                        }
-                    }
-
-                    if (method != null)
-                    {
-                        Logger.WriteLine("Invoking unambiguous method [{0}]", method);
-                        result = method.Invoke(target, invokeAttr, binder, args, culture);
-                    }
-                    else if (property != null)
-                    {
-                        Logger.WriteLine("Setting unambiguous property [{0}]", property);
-                        property.SetValue(target, args[0], invokeAttr, binder, null, culture);
-                        result = null;
-                    }
-                    else
-                    {
-                        Logger.WriteLine("Invoking ambiguous/non-existing method 2 [{0}]", name);
-                        result = type.InvokeMember(name, invokeAttr, binder, target, args, modifiers, culture, namedParameters);
-                    }
-
-                    Logger.WriteLine("Result [{0}] [{1}]", result, (result != null ? result.GetType().ToString() : "null"));
-                }
-                catch (Exception e)
-                {
-                    Logger.WriteLine("Error [{0}]", e);
-                    throw;
-                }
-                return result;
-            }
-        }
-
-        Type IReflect.UnderlyingSystemType
-        {
-            get { return GetType(); }
-        }
-
-        internal const string Namespace = "http://winscp.net/schema/session/1.0";
-        internal Logger Logger { get; private set; }
-        internal bool GuardProcessWithJobInternal { get { return _guardProcessWithJob; } set { CheckNotOpened(); _guardProcessWithJob = value; } }
-        internal bool TestHandlesClosedInternal { get; set; }
-        internal Dictionary<string, string> RawConfiguration { get; private set; }
-
-        private ExeSessionProcess _process;
-        private DateTime _lastOutput;
-        private ElementLogReader _reader;
-        private SessionLogReader _logReader;
-        private readonly IList<OperationResultBase> _operationResults;
-        private delegate void Action();
-        private readonly IList<Action> _events;
-        private AutoResetEvent _eventsEvent;
-        private bool _disposed;
-        private string _executablePath;
-        private string _additionalExecutableArguments;
-        private bool _defaultConfiguration;
-        private bool _disableVersionCheck;
-        private string _iniFilePath;
-        private TimeSpan _reconnectTime;
-        private string _sessionLogPath;
-        private bool _aborted;
-        private int _logUnique;
-        private string _xmlLogPath;
-        private FileTransferProgressEventHandler _fileTransferProgress;
-        private int _progressHandling;
-        private bool _guardProcessWithJob;
-        private string _homePath;
-    }
-}

+ 0 - 19
dotnet/SessionEvents.cs

@@ -1,19 +0,0 @@
-using System.Runtime.InteropServices;
-
-namespace WinSCP
-{
-    [ComVisible(true)]
-    [Guid("A1334E32-4EDF-4B51-A069-DA3FF1B19A5A")]
-    [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIDispatch)]
-    public interface ISessionEvents
-    {
-        [DispId(1)]
-        void FileTransferred(object sender, TransferEventArgs e);
-        [DispId(2)]
-        void Failed(object sender, FailedEventArgs e);
-        [DispId(3)]
-        void OutputDataReceived(object sender, OutputDataReceivedEventArgs e);
-        [DispId(4)]
-        void FileTransferProgress(object sender, FileTransferProgressEventArgs e);
-    }
-}

+ 0 - 25
dotnet/SessionException.cs

@@ -1,25 +0,0 @@
-using System;
-using System.Runtime.InteropServices;
-
-namespace WinSCP
-{
-    [Guid("91109A4F-D81A-4326-BEC5-1AB26EBF89A6")]
-    [ClassInterface(Constants.ClassInterface)]
-    [ComVisible(true)]
-    public class SessionException : Exception
-    {
-        public Session Session { get; private set; }
-
-        internal SessionException(Session session, string message) :
-            this(session, message, null)
-        {
-        }
-
-        internal SessionException(Session session, string message, Exception innerException) :
-            base(message, innerException)
-        {
-            Session = session;
-            session.Logger.WriteLine("Exception: {0}", this);
-        }
-    }
-}

+ 0 - 27
dotnet/SessionLocalException.cs

@@ -1,27 +0,0 @@
-using System;
-using System.Runtime.InteropServices;
-using System.Globalization;
-
-namespace WinSCP
-{
-    [Guid("59B362D6-7FD3-4EF0-A3B6-E3244F793778")]
-    [ClassInterface(Constants.ClassInterface)]
-    [ComVisible(true)]
-    public sealed class SessionLocalException : SessionException
-    {
-        internal SessionLocalException(Session session, string message) :
-            base(session, message)
-        {
-        }
-
-        internal SessionLocalException(Session session, string message, Exception innerException) :
-            base(session, message, innerException)
-        {
-        }
-
-        internal static SessionLocalException CreateElementNotFound(Session session, string localName)
-        {
-            return new SessionLocalException(session, string.Format(CultureInfo.CurrentCulture, "Element \"{0}\" not found in the log file", localName));
-        }
-    }
-}

+ 0 - 391
dotnet/SessionOptions.cs

@@ -1,391 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Runtime.InteropServices;
-using System.Text.RegularExpressions;
-using System.Globalization;
-using System.Security;
-
-namespace WinSCP
-{
-    [Guid("F25C49A5-74A6-4E8F-AEB4-5B4E0DDF0EF9")]
-    [ComVisible(true)]
-    public enum Protocol
-    {
-        Sftp = 0,
-        Scp = 1,
-        Ftp = 2,
-        Webdav = 3,
-    }
-
-    [Guid("D924FAB9-FCE7-47B8-9F23-5717698384D3")]
-    [ComVisible(true)]
-    public enum FtpMode
-    {
-        Passive = 0,
-        Active = 1,
-    }
-
-    [Guid("F2FC81EB-4761-4A4E-A3EC-4AFDD474C18C")]
-    [ComVisible(true)]
-    public enum FtpSecure
-    {
-        None = 0,
-        Implicit = 1,
-        Explicit = 3,
-        [Obsolete("Use FtpSecure.Explicit")]
-        ExplicitTls = Explicit,
-        [Obsolete("Use FtpSecure.Explicit")]
-        ExplicitSsl = 2,
-    }
-
-    [Guid("2D4EF368-EE80-4C15-AE77-D12AEAF4B00A")]
-    [ClassInterface(Constants.ClassInterface)]
-    [ComVisible(true)]
-    public sealed class SessionOptions
-    {
-        public SessionOptions()
-        {
-            Timeout = new TimeSpan(0, 0, 15);
-            RawSettings = new Dictionary<string,string>();
-        }
-
-        public Protocol Protocol { get; set; }
-        public string HostName { get; set; }
-        public int PortNumber { get { return _portNumber; } set { SetPortNumber(value); } }
-        public string UserName { get; set; }
-        public string Password { get { return GetPassword(); } set { SetPassword(value); } }
-        public SecureString SecurePassword { get; set; }
-        public TimeSpan Timeout { get { return _timeout; } set { SetTimeout(value); } }
-        public int TimeoutInMilliseconds { get { return Tools.TimeSpanToMilliseconds(Timeout); } set { Timeout = Tools.MillisecondsToTimeSpan(value); } }
-
-        // SSH
-        public string SshHostKeyFingerprint { get { return _sshHostKeyFingerprint; } set { SetSshHostKeyFingerprint(value); } }
-        public bool GiveUpSecurityAndAcceptAnySshHostKey { get; set; }
-        public string SshPrivateKeyPath { get; set; }
-        public string SshPrivateKeyPassphrase { get; set; }
-
-        // FTP
-        public FtpMode FtpMode { get; set; }
-        public FtpSecure FtpSecure { get; set; }
-
-        // WebDAV
-        public bool WebdavSecure { get; set; }
-        public string WebdavRoot { get { return _webdavRoot; } set { SetWebdavRoot(value); } }
-
-        // TLS
-        public string TlsHostCertificateFingerprint { get { return _tlsHostCertificateFingerprint; } set { SetHostTlsCertificateFingerprint(value); } }
-        public bool GiveUpSecurityAndAcceptAnyTlsHostCertificate { get; set; }
-
-        public void AddRawSettings(string setting, string value)
-        {
-            RawSettings.Add(setting, value);
-        }
-
-        public void ParseUrl(string url)
-        {
-            url = url.Trim();
-            const string protocolSeparator = "://";
-            int index = url.IndexOf(protocolSeparator, StringComparison.OrdinalIgnoreCase);
-            if (index < 0)
-            {
-                throw new ArgumentException("Protocol not specified", "url");
-            }
-            string protocol = url.Substring(0, index).Trim();
-
-            FtpSecure = FtpSecure.None;
-
-            if (protocol.Equals("sftp", StringComparison.OrdinalIgnoreCase))
-            {
-                Protocol = Protocol.Sftp;
-            }
-            else if (protocol.Equals("scp", StringComparison.OrdinalIgnoreCase))
-            {
-                Protocol = Protocol.Scp;
-            }
-            else if (protocol.Equals("ftp", StringComparison.OrdinalIgnoreCase))
-            {
-                Protocol = Protocol.Ftp;
-            }
-            else if (protocol.Equals("ftps", StringComparison.OrdinalIgnoreCase))
-            {
-                Protocol = Protocol.Ftp;
-                FtpSecure = FtpSecure.Implicit;
-            }
-            else if (protocol.Equals("http", StringComparison.OrdinalIgnoreCase))
-            {
-                Protocol = Protocol.Webdav;
-            }
-            else if (protocol.Equals("https", StringComparison.OrdinalIgnoreCase))
-            {
-                Protocol = Protocol.Webdav;
-                WebdavSecure = true;
-            }
-            else
-            {
-                throw new ArgumentException(string.Format(CultureInfo.CurrentCulture, "Unknown protocol {0}", protocol), "url");
-            }
-
-            url = url.Substring(index + protocolSeparator.Length).Trim();
-            index = url.IndexOf('/');
-            WebdavRoot = null;
-            if (index >= 0)
-            {
-                string path = url.Substring(index).Trim();
-                url = url.Substring(0, index).Trim();
-                string parameters = path;
-                path = CutToChar(ref parameters, ';');
-                if (!string.IsNullOrEmpty(path) && (path != "/"))
-                {
-                    if (Protocol != Protocol.Webdav)
-                    {
-                        throw new ArgumentException("Root folder can be specified for WebDAV protocol only", "url");
-                    }
-                    WebdavRoot = path;
-                }
-
-                // forward compatibility
-                if (!string.IsNullOrEmpty(parameters))
-                {
-                    throw new ArgumentException("No session parameters are supported", "url");
-                }
-            }
-
-            index = url.LastIndexOf('@');
-
-            string hostInfo;
-            string userInfo = null;
-            if (index >= 0)
-            {
-                userInfo = url.Substring(0, index).Trim();
-                hostInfo = url.Substring(index + 1).Trim();
-            }
-            else
-            {
-                hostInfo = url;
-            }
-
-            PortNumber = 0;
-            string portNumber = null;
-            if ((hostInfo.Length >= 2) && (hostInfo[0] == '[') && ((index = hostInfo.IndexOf(']')) > 0))
-            {
-                HostName = hostInfo.Substring(1, index - 1).Trim();
-                hostInfo = hostInfo.Substring(index + 1).Trim();
-                if (hostInfo.Length > 0)
-                {
-                    if (hostInfo[0] != ':')
-                    {
-                        throw new ArgumentException("Unexpected syntax after ]", "url");
-                    }
-                    else
-                    {
-                        portNumber = hostInfo.Substring(1);
-                    }
-                }
-            }
-            else
-            {
-                HostName = UriUnescape(CutToChar(ref hostInfo, ':'));
-                portNumber = hostInfo;
-            }
-
-            if (string.IsNullOrEmpty(HostName))
-            {
-                throw new ArgumentException("No host name", "url");
-            }
-
-            if (string.IsNullOrEmpty(portNumber))
-            {
-                PortNumber = 0;
-            }
-            else
-            {
-                portNumber = UriUnescape(portNumber);
-                int number;
-                if (!int.TryParse(portNumber, 0, CultureInfo.InvariantCulture, out number))
-                {
-                    throw new ArgumentException(string.Format(CultureInfo.InvariantCulture, "{0} is not a valid port number", portNumber), "url");
-                }
-                else
-                {
-                    PortNumber = number;
-                }
-            }
-
-            UserName = null;
-            Password = null;
-            SshHostKeyFingerprint = null;
-            GiveUpSecurityAndAcceptAnySshHostKey = false;
-            TlsHostCertificateFingerprint = null;
-            GiveUpSecurityAndAcceptAnyTlsHostCertificate = false;
-            if (!string.IsNullOrEmpty(userInfo))
-            {
-                string parameters = userInfo;
-                userInfo = CutToChar(ref parameters, ';');
-
-                UserName = EmptyToNull(UriUnescape(CutToChar(ref userInfo, ':')));
-                Password = EmptyToNull(UriUnescape(userInfo));
-
-                while (!string.IsNullOrEmpty(parameters))
-                {
-                    string parameter = CutToChar(ref parameters, ';');
-                    string parameterName = CutToChar(ref parameter, '=');
-                    if (parameterName.Equals("fingerprint", StringComparison.OrdinalIgnoreCase))
-                    {
-                        SshHostKeyFingerprint = parameter;
-                    }
-                    else
-                    {
-                        throw new ArgumentException(string.Format(CultureInfo.CurrentCulture, "Unsupported connection parameter {0}", parameterName), "url");
-                    }
-                }
-            }
-        }
-
-        private static string EmptyToNull(string s)
-        {
-            if (string.IsNullOrEmpty(s))
-            {
-                return null;
-            }
-            else
-            {
-                return s;
-            }
-        }
-
-        private static string UriUnescape(string s)
-        {
-            return Uri.UnescapeDataString(s);
-        }
-
-        private static string CutToChar(ref string s, char c)
-        {
-            int index = s.IndexOf(c);
-            string result;
-            if (index >= 0)
-            {
-                result = s.Substring(0, index).Trim();
-                s = s.Substring(index + 1).Trim();
-            }
-            else
-            {
-                result = s;
-                s = string.Empty;
-            }
-            return result;
-        }
-
-        internal Dictionary<string, string> RawSettings { get; private set; }
-        internal bool IsSsh { get { return (Protocol == Protocol.Sftp) || (Protocol == Protocol.Scp); } }
-
-        private void SetSshHostKeyFingerprint(string s)
-        {
-            if (s != null)
-            {
-                Match match = _sshHostKeyRegex.Match(s);
-
-                if (!match.Success || (match.Length != s.Length))
-                {
-                    throw new ArgumentException(string.Format(CultureInfo.CurrentCulture, "SSH host key fingerprint \"{0}\" does not match pattern /{1}/", s, _sshHostKeyRegex));
-                }
-            }
-
-            _sshHostKeyFingerprint = s;
-        }
-
-        private void SetHostTlsCertificateFingerprint(string s)
-        {
-            if (s != null)
-            {
-                Match match = _tlsCertificateRegex.Match(s);
-
-                if (!match.Success || (match.Length != s.Length))
-                {
-                    throw new ArgumentException(string.Format(CultureInfo.CurrentCulture, "TLS host certificate fingerprint \"{0}\" does not match pattern /{1}/", s, _tlsCertificateRegex));
-                }
-            }
-
-            _tlsHostCertificateFingerprint = s;
-        }
-
-        private void SetTimeout(TimeSpan value)
-        {
-            if (value <= TimeSpan.Zero)
-            {
-                throw new ArgumentException("Timeout has to be positive non-zero value");
-            }
-
-            _timeout = value;
-        }
-
-        private void SetPortNumber(int value)
-        {
-            if (value < 0)
-            {
-                throw new ArgumentException("Port number cannot be negative");
-            }
-
-            _portNumber = value;
-        }
-
-        private void SetWebdavRoot(string value)
-        {
-            if (!string.IsNullOrEmpty(value) && (value[0] != '/'))
-            {
-                throw new ArgumentException("WebDAV root path has to start with slash");
-            }
-            _webdavRoot = value;
-        }
-
-        private void SetPassword(string value)
-        {
-            if (value == null)
-            {
-                SecurePassword = null;
-            }
-            else
-            {
-                SecurePassword = new SecureString();
-                foreach (char c in value)
-                {
-                    SecurePassword.AppendChar(c);
-                }
-            }
-        }
-
-        private string GetPassword()
-        {
-            if (SecurePassword == null)
-            {
-                return null;
-            }
-            else
-            {
-                IntPtr ptr = IntPtr.Zero;
-                try
-                {
-                    ptr = Marshal.SecureStringToGlobalAllocUnicode(SecurePassword);
-                    return Marshal.PtrToStringUni(ptr);
-                }
-                finally
-                {
-                    Marshal.ZeroFreeGlobalAllocUnicode(ptr);
-                }
-            }
-        }
-
-        private string _sshHostKeyFingerprint;
-        private string _tlsHostCertificateFingerprint;
-        private TimeSpan _timeout;
-        private int _portNumber;
-        private string _webdavRoot;
-
-        private const string _listPattern = @"{0}(;{0})*";
-        private const string _sshHostKeyPattern = @"((ssh-rsa|ssh-dss)( |-))?(\d+ )?([0-9a-f]{2}(:|-)){15}[0-9a-f]{2}";
-        private static readonly Regex _sshHostKeyRegex =
-            new Regex(string.Format(CultureInfo.InvariantCulture, _listPattern, _sshHostKeyPattern));
-        private const string _tlsCertificatePattern = @"([0-9a-f]{2}:){19}[0-9a-f]{2}";
-        private static readonly Regex _tlsCertificateRegex =
-            new Regex(string.Format(CultureInfo.InvariantCulture, _listPattern, _tlsCertificatePattern));
-    }
-}

+ 0 - 92
dotnet/SessionRemoteException.cs

@@ -1,92 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Runtime.InteropServices;
-using System.Xml;
-
-namespace WinSCP
-{
-    [Guid("0E8BBC73-AF4D-4E7E-995C-EB89D0BFDE9A")]
-    [ClassInterface(Constants.ClassInterface)]
-    [ComVisible(true)]
-    public sealed class SessionRemoteException : SessionException
-    {
-        internal SessionRemoteException(Session session, string message) :
-            base(session, message)
-        {
-        }
-
-        internal SessionRemoteException(Session session, string message, Exception innerException) :
-            base(session, message, innerException)
-        {
-        }
-
-        internal static bool IsResult(CustomLogReader reader)
-        {
-            return reader.IsNonEmptyElement("result");
-        }
-
-        internal static SessionRemoteException ReadResult(CustomLogReader areader)
-        {
-            SessionRemoteException e = null;
-
-            if (areader.GetAttribute("success") == "false")
-            {
-                e = ReadMessages(areader);
-            }
-
-            return e;
-        }
-
-        internal static SessionRemoteException ReadFailure(CustomLogReader reader)
-        {
-            return ReadMessages(reader);
-        }
-
-        private static SessionRemoteException ReadMessages(CustomLogReader areader)
-        {
-            using (ElementLogReader reader = new ElementLogReader(areader))
-            {
-                string error = null;
-                string message = null;
-                List<string> messages = new List<string>();
-                bool inMessage = false;
-
-                while (reader.Read(0))
-                {
-                    if (reader.IsNonEmptyElement("message"))
-                    {
-                        inMessage = true;
-                        message = null;
-                    }
-                    else if (inMessage &&
-                        (reader.NodeType == XmlNodeType.Text))
-                    {
-                        message += reader.Value;
-                    }
-                    else if (inMessage &&
-                        reader.IsEndElement("message"))
-                    {
-                        if (error == null)
-                        {
-                            error = message;
-                        }
-                        else
-                        {
-                            messages.Add(message);
-                        }
-                        message = null;
-                        inMessage = false;
-                    }
-                }
-
-                Exception inner = null;
-                if (messages.Count > 0)
-                {
-                    inner = new SessionRemoteException(reader.Session, string.Join(Environment.NewLine, messages.ToArray()));
-                }
-
-                return new SessionRemoteException(reader.Session, error, inner);
-            }
-        }
-    }
-}

+ 0 - 36
dotnet/SynchronizationResult.cs

@@ -1,36 +0,0 @@
-using System.Runtime.InteropServices;
-
-namespace WinSCP
-{
-    [Guid("D0ADB4F7-47AE-43AC-AA41-9114650EA51A")]
-    [ClassInterface(Constants.ClassInterface)]
-    [ComVisible(true)]
-    public sealed class SynchronizationResult : OperationResultBase
-    {
-        public TransferEventArgsCollection Uploads { get; private set; }
-        public TransferEventArgsCollection Downloads { get; private set; }
-        public RemovalEventArgsCollection Removals { get; private set; }
-
-        internal SynchronizationResult()
-        {
-            Uploads = new TransferEventArgsCollection();
-            Downloads = new TransferEventArgsCollection();
-            Removals = new RemovalEventArgsCollection();
-        }
-
-        internal void AddUpload(TransferEventArgs upload)
-        {
-            Uploads.InternalAdd(upload);
-        }
-
-        internal void AddDownload(TransferEventArgs download)
-        {
-            Downloads.InternalAdd(download);
-        }
-
-        internal void AddRemoval(RemovalEventArgs removal)
-        {
-            Removals.InternalAdd(removal);
-        }
-    }
-}

+ 0 - 47
dotnet/TouchEventArgs.cs

@@ -1,47 +0,0 @@
-using System;
-using System.Runtime.InteropServices;
-using System.Xml;
-
-namespace WinSCP
-{
-    [Guid("802FCEF7-E1D3-4205-B171-87A3724E85FA")]
-    [ClassInterface(Constants.ClassInterface)]
-    [ComVisible(true)]
-    public sealed class TouchEventArgs : FileOperationEventArgs
-    {
-        public DateTime LastWriteTime { get; private set; }
-
-        internal const string Tag = "touch";
-
-        private TouchEventArgs()
-        {
-        }
-
-        internal static TouchEventArgs Read(CustomLogReader areader)
-        {
-            TouchEventArgs args = new TouchEventArgs();
-
-            using (ElementLogReader reader = new ElementLogReader(areader))
-            {
-                while (reader.Read(0))
-                {
-                    string value;
-                    if (reader.GetEmptyElementValue("filename", out value))
-                    {
-                        args.FileName = value;
-                    }
-                    else if (reader.GetEmptyElementValue("modification", out value))
-                    {
-                        args.LastWriteTime = XmlConvert.ToDateTime(value, XmlDateTimeSerializationMode.Local);
-                    }
-                    else if (SessionRemoteException.IsResult(reader))
-                    {
-                        args.Error = SessionRemoteException.ReadResult(reader);
-                    }
-                }
-            }
-
-            return args;
-        }
-    }
-}

+ 0 - 51
dotnet/TransferEventArgs.cs

@@ -1,51 +0,0 @@
-using System.Runtime.InteropServices;
-
-namespace WinSCP
-{
-    [Guid("772FACCC-0786-42E1-B1C8-F08D13C9CD07")]
-    [ClassInterface(Constants.ClassInterface)]
-    [ComVisible(true)]
-    public sealed class TransferEventArgs : FileOperationEventArgs
-    {
-        public string Destination { get; private set; }
-
-        public TouchEventArgs Touch { get; internal set; }
-        public ChmodEventArgs Chmod { get; internal set; }
-        public RemovalEventArgs Removal { get; internal set; }
-
-        internal const string UploadTag = "upload";
-        internal const string DownloadTag = "download";
-        internal const string MkDirTag = "mkdir";
-
-        internal TransferEventArgs()
-        {
-        }
-
-        internal static TransferEventArgs Read(CustomLogReader areader)
-        {
-            TransferEventArgs args = new TransferEventArgs();
-
-            using (ElementLogReader reader = new ElementLogReader(areader))
-            {
-                while (reader.Read(0))
-                {
-                    string value;
-                    if (reader.GetEmptyElementValue("filename", out value))
-                    {
-                        args.FileName = value;
-                    }
-                    else if (reader.GetEmptyElementValue("destination", out value))
-                    {
-                        args.Destination = value;
-                    }
-                    else if (SessionRemoteException.IsResult(reader))
-                    {
-                        args.Error = SessionRemoteException.ReadResult(reader);
-                    }
-                }
-            }
-
-            return args;
-        }
-    }
-}

+ 0 - 22
dotnet/TransferOperationResult.cs

@@ -1,22 +0,0 @@
-using System.Runtime.InteropServices;
-
-namespace WinSCP
-{
-    [Guid("74F668E6-8EF2-4D01-84D8-DA2FE619C062")]
-    [ClassInterface(Constants.ClassInterface)]
-    [ComVisible(true)]
-    public sealed class TransferOperationResult : OperationResultBase
-    {
-        public TransferEventArgsCollection Transfers { get; private set; }
-
-        internal TransferOperationResult()
-        {
-            Transfers = new TransferEventArgsCollection();
-        }
-
-        internal void AddTransfer(TransferEventArgs operation)
-        {
-            Transfers.InternalAdd(operation);
-        }
-    }
-}

+ 0 - 86
dotnet/TransferOptions.cs

@@ -1,86 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Globalization;
-using System.Runtime.InteropServices;
-
-namespace WinSCP
-{
-    [Guid("6B19CBFA-0D81-4B36-A587-E11AA6A06214")]
-    [ComVisible(true)]
-    public enum TransferMode
-    {
-        Binary = 0,
-        Ascii = 1,
-        Automatic = 2,
-    }
-
-    [Guid("155B841F-39D4-40C8-BA87-C79675E14CE3")]
-    [ClassInterface(Constants.ClassInterface)]
-    [ComVisible(true)]
-    public sealed class TransferOptions
-    {
-        public bool PreserveTimestamp { get; set; }
-        public FilePermissions FilePermissions { get; set; }
-        public TransferMode TransferMode { get; set; }
-        public string FileMask { get; set; }
-        public TransferResumeSupport ResumeSupport { get; private set; }
-        public int SpeedLimit { get; set; }
-
-        public TransferOptions()
-        {
-            PreserveTimestamp = true;
-            TransferMode = TransferMode.Binary;
-            ResumeSupport = new TransferResumeSupport();
-        }
-
-        internal string ToSwitches()
-        {
-            List<string> switches = new List<string>();
-
-            if (FilePermissions != null)
-            {
-                switches.Add(Session.FormatSwitch("permissions", FilePermissions.Octal));
-            }
-            else
-            {
-                switches.Add("-nopermissions");
-            }
-
-            switches.Add(Session.BooleanSwitch(PreserveTimestamp, "preservetime", "nopreservetime"));
-
-            string transferModeName;
-            switch (TransferMode)
-            {
-                case TransferMode.Binary:
-                    transferModeName = "binary";
-                    break;
-                case TransferMode.Ascii:
-                    transferModeName = "ascii";
-                    break;
-                case TransferMode.Automatic:
-                    transferModeName = "automatic";
-                    break;
-                default:
-                    throw new ArgumentException(string.Format(CultureInfo.CurrentCulture, "{0} is not supported", TransferMode));
-            }
-            switches.Add(Session.FormatSwitch("transfer", transferModeName));
-
-            if (!string.IsNullOrEmpty(FileMask))
-            {
-                switches.Add(Session.FormatSwitch("filemask", FileMask));
-            }
-
-            if (ResumeSupport.State != TransferResumeSupportState.Default)
-            {
-                switches.Add(Session.FormatSwitch("resumesupport", ResumeSupport.ToString()));
-            }
-
-            if (SpeedLimit > 0)
-            {
-                switches.Add(Session.FormatSwitch("speed", SpeedLimit.ToString(CultureInfo.InvariantCulture)));
-            }
-
-            return string.Join(" ", switches.ToArray());
-        }
-    }
-}

+ 0 - 81
dotnet/TransferResumeSupport.cs

@@ -1,81 +0,0 @@
-using System.Runtime.InteropServices;
-using System;
-using System.Globalization;
-
-namespace WinSCP
-{
-    [Guid("0ADAAEBC-4A15-4A9C-8ED4-D85F5630035C")]
-    [ComVisible(true)]
-    public enum TransferResumeSupportState
-    {
-        Default,
-        On,
-        Off,
-        Smart
-    }
-
-    [Guid("6CED4579-0DF2-4E46-93E9-18780546B421")]
-    [ClassInterface(Constants.ClassInterface)]
-    [ComVisible(true)]
-    public sealed class TransferResumeSupport
-    {
-        public TransferResumeSupportState State { get; set; }
-        public int Threshold { get { return GetThreshold(); } set { SetThreshold(value); } }
-
-        internal TransferResumeSupport()
-        {
-            State = TransferResumeSupportState.Default;
-            _threshold = 100; // (100 KB)
-        }
-
-        public override string ToString()
-        {
-            string result;
-            switch (State)
-            {
-                case TransferResumeSupportState.Default:
-                    result = "default";
-                    break;
-                case TransferResumeSupportState.Off:
-                    result = "off";
-                    break;
-                case TransferResumeSupportState.On:
-                    result = "on";
-                    break;
-                case TransferResumeSupportState.Smart:
-                    result = Threshold.ToString(CultureInfo.InvariantCulture);
-                    break;
-                default:
-                    result = "unknown";
-                    break;
-            }
-            return result;
-        }
-
-        private int GetThreshold()
-        {
-            CheckSmart();
-            return _threshold;
-        }
-
-        private void SetThreshold(int threshold)
-        {
-            if (threshold <= 0)
-            {
-                throw new ArgumentOutOfRangeException("threshold", "Threshold must be positive");
-            }
-            CheckSmart();
-            _threshold = threshold;
-        }
-
-        private void CheckSmart()
-        {
-            if (State != TransferResumeSupportState.Smart)
-            {
-                throw new InvalidOperationException("Threshold is undefined when state is not Smart");
-            }
-        }
-
-        private int _threshold;
-    }
-}

+ 0 - 113
dotnet/WinSCPnet.csproj

@@ -1,113 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <PropertyGroup>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProductVersion>8.0.30703</ProductVersion>
-    <SchemaVersion>2.0</SchemaVersion>
-    <ProjectGuid>{DF44CF5D-6809-4557-A343-FEC46F14B3FF}</ProjectGuid>
-    <OutputType>Library</OutputType>
-    <AppDesignerFolder>Properties</AppDesignerFolder>
-    <RootNamespace>WinSCP</RootNamespace>
-    <AssemblyName>WinSCPnet</AssemblyName>
-    <TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
-    <FileAlignment>512</FileAlignment>
-    <OutputPath>$(FINAL_PATH)\$(Configuration)</OutputPath>
-    <IntermediateOutputPath>$(INTERM_PATH)\$(Configuration)</IntermediateOutputPath>
-    <BaseIntermediateOutputPath>$(INTERM_PATH)\$(Configuration)</BaseIntermediateOutputPath>
-    <TargetFrameworkProfile />
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
-    <DebugSymbols>true</DebugSymbols>
-    <DebugType>full</DebugType>
-    <Optimize>false</Optimize>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-    <CodeAnalysisRuleSet>WinSCPnet.ruleset</CodeAnalysisRuleSet>
-    <RunCodeAnalysis>true</RunCodeAnalysis>
-    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
-    <DebugType>pdbonly</DebugType>
-    <Optimize>true</Optimize>
-    <DefineConstants>TRACE</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-    <CodeAnalysisRuleSet>WinSCPnet.ruleset</CodeAnalysisRuleSet>
-    <RunCodeAnalysis>true</RunCodeAnalysis>
-    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
-  </PropertyGroup>
-  <PropertyGroup />
-  <PropertyGroup>
-    <SignAssembly>false</SignAssembly>
-  </PropertyGroup>
-  <PropertyGroup>
-    <AssemblyOriginatorKeyFile>
-    </AssemblyOriginatorKeyFile>
-  </PropertyGroup>
-  <PropertyGroup>
-    <DelaySign>false</DelaySign>
-  </PropertyGroup>
-  <ItemGroup>
-    <Reference Include="System" />
-    <Reference Include="System.Xml" />
-  </ItemGroup>
-  <ItemGroup>
-    <Compile Include="ChmodEventArgs.cs" />
-    <Compile Include="CommandExecutionResult.cs" />
-    <Compile Include="Internal\Callstack.cs" />
-    <Compile Include="Internal\CallstackAndLock.cs" />
-    <Compile Include="Internal\ConsoleCommStruct.cs" />
-    <Compile Include="Internal\ExeSessionProcess.cs" />
-    <Compile Include="Internal\Job.cs" />
-    <Compile Include="Internal\Lock.cs" />
-    <Compile Include="Internal\Logger.cs" />
-    <Compile Include="Internal\ProgressHandler.cs" />
-    <Compile Include="Internal\SessionElementLogReader.cs" />
-    <Compile Include="Internal\Tools.cs" />
-    <Compile Include="Internal\UnsafeNativeMethods.cs" />
-    <Compile Include="OutputDataReceivedEventArgs.cs" />
-    <Compile Include="FileTransferProgressEventArgs.cs" />
-    <Compile Include="RemoteDirectoryInfo.cs" />
-    <Compile Include="FailedEventArgs.cs" />
-    <Compile Include="FileOperationEventArgs.cs" />
-    <Compile Include="GlobalSuppressions.cs" />
-    <Compile Include="FilePermissions.cs" />
-    <Compile Include="Internal\Constants.cs" />
-    <Compile Include="Internal\ReadOnlyInteropCollectionHelper.cs" />
-    <Compile Include="InteropCollections\RemoteFileInfoCollection.cs" />
-    <Compile Include="InteropCollections\RemovalEventArgsCollection.cs" />
-    <Compile Include="InteropCollections\SessionRemoteExceptionCollection.cs" />
-    <Compile Include="InteropCollections\StringCollection.cs" />
-    <Compile Include="InteropCollections\TransferEventArgsCollection.cs" />
-    <Compile Include="RemovalEventArgs.cs" />
-    <Compile Include="RemovalOperationResult.cs" />
-    <Compile Include="SessionEvents.cs" />
-    <Compile Include="SynchronizationResult.cs" />
-    <Compile Include="TransferEventArgs.cs" />
-    <Compile Include="TransferOperationResult.cs" />
-    <Compile Include="TransferOptions.cs" />
-    <Compile Include="Internal\CustomLogReader.cs" />
-    <Compile Include="Internal\ElementLogReader.cs" />
-    <Compile Include="Internal\OperationResultGuard.cs" />
-    <Compile Include="OperationEventArgs.cs" />
-    <Compile Include="OperationResultBase.cs" />
-    <Compile Include="RemoteFileInfo.cs" />
-    <Compile Include="Session.cs" />
-    <Compile Include="Properties\AssemblyInfo.cs" />
-    <Compile Include="SessionOptions.cs" />
-    <Compile Include="SessionException.cs" />
-    <Compile Include="SessionLocalException.cs" />
-    <Compile Include="SessionRemoteException.cs" />
-    <Compile Include="Internal\SessionLogReader.cs" />
-    <Compile Include="TouchEventArgs.cs" />
-    <Compile Include="TransferResumeSupport.cs" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="App.config">
-      <SubType>Designer</SubType>
-    </None>
-  </ItemGroup>
-  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
-</Project>

+ 0 - 9
dotnet/WinSCPnet.ruleset

@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<RuleSet Name="WinSCP rules (subset of Microsoft All Rules)" ToolsVersion="10.0">
-  <IncludeAll Action="Warning" />
-  <Rules AnalyzerId="Microsoft.Analyzers.ManagedCodeAnalysis" RuleNamespace="Microsoft.Rules.Managed">
-    <Rule Id="CA1026" Action="None" />
-    <Rule Id="CA1704" Action="None" />
-    <Rule Id="CA2204" Action="None" />
-  </Rules>
-</RuleSet>

+ 0 - 57
dotnet/internal/Callstack.cs

@@ -1,57 +0,0 @@
-using System;
-using System.Diagnostics;
-using System.Globalization;
-using System.Reflection;
-
-namespace WinSCP
-{
-    internal class Callstack : IDisposable
-    {
-        public Callstack(Logger logger)
-        {
-            _logger = logger;
-            if (_logger.Logging)
-            {
-                Type type = GetType();
-                StackTrace stackTrace = new StackTrace();
-                int i = 0;
-                MethodBase method;
-                do
-                {
-                    StackFrame frame = stackTrace.GetFrame(i);
-                    method = frame.GetMethod();
-                    if ((method.IsConstructor && method.DeclaringType.IsAssignableFrom(type)) ||
-                        ((method.MemberType == MemberTypes.Method) && ((MethodInfo)method).ReturnType.IsAssignableFrom(type)))
-                    {
-                        method = null;
-                    }
-                    else
-                    {
-                        break;
-                    }
-                    i++;
-                }
-                while (i < stackTrace.FrameCount);
-
-                if (method != null)
-                {
-                    _name = string.Format(CultureInfo.InvariantCulture, "{0}.{1}", method.DeclaringType.Name, method.Name);
-                    _logger.WriteLine("{0} entering", _name);
-                    _logger.Indent();
-                }
-            }
-        }
-
-        public virtual void Dispose()
-        {
-            if (_name != null)
-            {
-                _logger.Unindent();
-                _logger.WriteLine("{0} leaving", _name);
-            }
-        }
-
-        private readonly Logger _logger;
-        private readonly string _name;
-    }
-}

+ 0 - 22
dotnet/internal/CallstackAndLock.cs

@@ -1,22 +0,0 @@
-using System.Reflection;
-
-namespace WinSCP
-{
-    internal class CallstackAndLock : Callstack
-    {
-        public CallstackAndLock(Logger logger, Lock alock) :
-            base(logger)
-        {
-            _lock = alock;
-            _lock.Enter();
-        }
-
-        public override void Dispose()
-        {
-            _lock.Exit();
-            base.Dispose();
-        }
-
-        private readonly Lock _lock;
-    }
-}

+ 0 - 215
dotnet/internal/ConsoleCommStruct.cs

@@ -1,215 +0,0 @@
-using System.Runtime.InteropServices;
-using System;
-using Microsoft.Win32.SafeHandles;
-
-namespace WinSCP
-{
-    public enum ConsoleEvent { None, Print, Input, Choice, Title, Init, Progress }
-
-    [StructLayout(LayoutKind.Sequential)]
-    internal class ConsoleInitEventStruct
-    {
-        public uint InputType;
-        public uint OutputType;
-        public bool WantsProgress;
-    }
-
-    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
-    internal class ConsolePrintEventStruct
-    {
-        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 10240)]
-        public string Message; // wide since version 4
-        [MarshalAs(UnmanagedType.I1)]
-        public bool FromBeginning;
-    }
-
-    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
-    internal class ConsoleInputEventStruct
-    {
-        [MarshalAs(UnmanagedType.I1)]
-        public bool Echo;
-        [MarshalAs(UnmanagedType.I1)]
-        public bool Result;
-        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 10240)]
-        public string Str; // wide since version 4
-        public uint Timer; // since version 2
-    }
-
-    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
-    internal class ConsoleChoiceEventStruct
-    {
-        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 64)]
-        public string Options; // wide since version 4
-        public int Cancel;
-        public int Break;
-        public int Result;
-        public int Timeouted; // since version 2
-        public uint Timer; // since version 2
-        [MarshalAs(UnmanagedType.I1)]
-        public bool Timeouting; // since version 4
-    }
-
-    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
-    internal class ConsoleTitleEventStruct
-    {
-        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 10240)]
-        public string Title; // wide since version 4
-    }
-
-    // Since version 6
-    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
-    internal class ConsoleProgressEventStruct
-    {
-        public enum ProgressOperation { Copy }
-        public enum ProgressSide { Local, Remote }
-
-        public ProgressOperation Operation;
-        public ProgressSide Side; 
-
-        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 1024)]
-        public string FileName;
-
-        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 1024)]
-        public string Directory;
-
-        public uint OverallProgress;
-        public uint FileProgress;
-        public uint CPS;
-    }
-
-    [StructLayout(LayoutKind.Sequential)]
-    internal class ConsoleCommHeader
-    {
-        public uint Size;
-
-        public int Version;
-
-        public ConsoleEvent Event;
-    }
-
-    internal class ConsoleCommStruct : IDisposable
-    {
-        public const int CurrentVersion = 0x0006;
-
-        public ConsoleCommStruct(Session session, SafeFileHandle fileMapping)
-        {
-            _session = session;
-            _fileMapping = fileMapping;
-            _ptr = UnsafeNativeMethods.MapViewOfFile(_fileMapping, FileMapAccess.FileMapAllAccess, 0, 0, UIntPtr.Zero);
-            _payloadPtr = new IntPtr(_ptr.ToInt64() + 12);
-            _header = (ConsoleCommHeader)Marshal.PtrToStructure(_ptr, typeof(ConsoleCommHeader));
-        }
-
-        ~ConsoleCommStruct()
-        {
-            Dispose();
-        }
-
-        public void Dispose()
-        {
-            if (_ptr != IntPtr.Zero)
-            {
-                if (_headerInvalidated)
-                {
-                    Marshal.StructureToPtr(_header, _ptr, false);
-                }
-
-                if (_payload != null)
-                {
-                    if ((Event != ConsoleEvent.Print) && (Event != ConsoleEvent.Title))
-                    {
-                        Marshal.StructureToPtr(_payload, _payloadPtr, false);
-                    }
-                }
-
-                if (!UnsafeNativeMethods.UnmapViewOfFile(_ptr))
-                {
-                    throw new SessionLocalException(_session, "Cannot release file mapping");
-                }
-
-                _ptr = IntPtr.Zero;
-            }
-            GC.SuppressFinalize(this);
-        }
-
-        public ConsoleEvent Event
-        {
-            get
-            {
-                return _header.Event;
-            }
-        }
-
-        public ConsolePrintEventStruct PrintEvent { get { return UnmarshalPayload<ConsolePrintEventStruct>(ConsoleEvent.Print); } }
-
-        public ConsoleInitEventStruct InitEvent { get { return UnmarshalPayload<ConsoleInitEventStruct>(ConsoleEvent.Init); } }
-
-        public ConsoleInputEventStruct InputEvent { get { return UnmarshalPayload<ConsoleInputEventStruct>(ConsoleEvent.Input); } }
-
-        public ConsoleChoiceEventStruct ChoiceEvent { get { return UnmarshalPayload<ConsoleChoiceEventStruct>(ConsoleEvent.Choice); } }
-
-        public ConsoleTitleEventStruct TitleEvent { get { return UnmarshalPayload<ConsoleTitleEventStruct>(ConsoleEvent.Title); } }
-
-        public ConsoleProgressEventStruct ProgressEvent { get { return UnmarshalPayload<ConsoleProgressEventStruct>(ConsoleEvent.Progress); } }
-
-        private T UnmarshalPayload<T>(ConsoleEvent e)
-        {
-            CheckNotDisposed();
-
-            if (e != Event)
-            {
-                throw new InvalidOperationException("Payload type does not match with event");
-            }
-
-            if (_payload == null)
-            {
-                _payload = Marshal.PtrToStructure(_payloadPtr, typeof(T));
-            }
-
-            return (T)_payload;
-        }
-
-        private void CheckNotDisposed()
-        {
-            if (_ptr == IntPtr.Zero)
-            {
-                throw new InvalidOperationException("Object is disposed");
-            }
-        }
-
-        public static int Size
-        {
-            get
-            {
-                Type[] types =
-                    new[] {
-                        typeof(ConsolePrintEventStruct), typeof(ConsoleInitEventStruct), typeof(ConsoleInputEventStruct),
-                        typeof(ConsoleChoiceEventStruct), typeof(ConsoleTitleEventStruct), typeof(ConsoleProgressEventStruct) };
-
-                int maxSize = 0;
-                foreach (Type type in types)
-                {
-                    maxSize = Math.Max(maxSize, Marshal.SizeOf(type));
-                }
-
-                return (Marshal.SizeOf(typeof(ConsoleCommHeader)) + maxSize);
-            }
-        }
-
-        public void InitHeader()
-        {
-            _headerInvalidated = true;
-            _header.Size = (uint) Size;
-            _header.Version = CurrentVersion;
-            _header.Event = ConsoleEvent.None;
-        }
-
-        private IntPtr _ptr;
-        private readonly ConsoleCommHeader _header;
-        private bool _headerInvalidated;
-        private readonly IntPtr _payloadPtr;
-        private object _payload;
-        private readonly SafeFileHandle _fileMapping;
-        private readonly Session _session;
-    }
-}

+ 0 - 9
dotnet/internal/Constants.cs

@@ -1,9 +0,0 @@
-using System.Runtime.InteropServices;
-
-namespace WinSCP
-{
-    internal static class Constants
-    {
-        public const ClassInterfaceType ClassInterface = ClassInterfaceType.AutoDispatch;
-    }
-}

+ 0 - 126
dotnet/internal/CustomLogReader.cs

@@ -1,126 +0,0 @@
-using System;
-using System.Xml;
-
-namespace WinSCP
-{
-    [Flags]
-    internal enum LogReadFlags
-    {
-        ThrowFailures = 0x01
-    }
-
-    internal abstract class CustomLogReader : IDisposable
-    {
-        public Session Session { get; private set; }
-        public XmlNodeType NodeType { get { return Reader.NodeType; } }
-        public string NamespaceURI { get { return Reader.NamespaceURI; } }
-        public string LocalName { get { return Reader.LocalName; } }
-        public bool IsEmptyElement { get { return Reader.IsEmptyElement; } }
-        public int Depth { get { return Reader.Depth; } }
-        public string Value { get { return Reader.Value; } }
-
-        internal abstract XmlReader Reader { get; }
-
-        public abstract bool Read(LogReadFlags flags);
-
-        protected CustomLogReader(Session session)
-        {
-            Session = session;
-        }
-
-        public virtual void Dispose()
-        {
-        }
-
-        public bool IsElement()
-        {
-            return
-                (NodeType == XmlNodeType.Element) &&
-                (NamespaceURI == Session.Namespace);
-        }
-
-        public bool IsElement(string localName)
-        {
-            return
-                IsElement() &&
-                (LocalName == localName);
-        }
-
-        public bool IsNonEmptyElement(string localName)
-        {
-            return
-                IsElement(localName) &&
-                !IsEmptyElement;
-        }
-
-        public bool GetEmptyElementValue(string localName, out string value)
-        {
-            bool result =
-                IsElement(localName) &&
-                IsEmptyElement;
-
-            if (result)
-            {
-                value = GetAttribute("value");
-                result = (value != null);
-            }
-            else
-            {
-                value = null;
-            }
-
-            return result;
-        }
-
-        public bool IsEndElement(string localName)
-        {
-            return
-                (NodeType == XmlNodeType.EndElement) &&
-                (NamespaceURI == Session.Namespace) &&
-                (LocalName == localName);
-        }
-
-        public bool TryWaitForNonEmptyElement(string localName, LogReadFlags flags)
-        {
-            bool result = false;
-            while (!result && Read(flags))
-            {
-                if (IsNonEmptyElement(localName))
-                {
-                    result = true;
-                }
-            }
-            return result;
-        }
-
-        public void WaitForNonEmptyElement(string localName, LogReadFlags flags)
-        {
-            if (!TryWaitForNonEmptyElement(localName, flags))
-            {
-                throw SessionLocalException.CreateElementNotFound(Session, localName);
-            }
-        }
-
-        public ElementLogReader CreateLogReader()
-        {
-            return new ElementLogReader(this);
-        }
-
-        public ElementLogReader WaitForNonEmptyElementAndCreateLogReader(string localName, LogReadFlags flags)
-        {
-            WaitForNonEmptyElement(localName, flags);
-
-            return CreateLogReader();
-        }
-
-        public ElementLogReader WaitForGroupAndCreateLogReader()
-        {
-            return WaitForNonEmptyElementAndCreateLogReader("group", LogReadFlags.ThrowFailures);
-        }
-
-        public string GetAttribute(string name)
-        {
-            return Reader.GetAttribute(name);
-        }
-    }
-}

+ 0 - 85
dotnet/internal/ElementLogReader.cs

@@ -1,85 +0,0 @@
-using System;
-using System.Xml;
-
-namespace WinSCP
-{
-    internal class ElementLogReader : CustomLogReader
-    {
-        public ElementLogReader(CustomLogReader parentReader) :
-            base(parentReader.Session)
-        {
-            _parentReader = parentReader;
-
-            if ((NodeType != XmlNodeType.Element) ||
-                IsEmptyElement)
-            {
-                throw new InvalidOperationException("Cannot use ElementLogReader with non-element node or empty element");
-            }
-
-            _localName = _parentReader.Reader.LocalName;
-            _depth = _parentReader.Reader.Depth;
-            _read = false;
-        }
-
-        public override void Dispose()
-        {
-            using (Session.Logger.CreateCallstack())
-            {
-                try
-                {
-                    ReadToEnd(0);
-                }
-                catch (Exception)
-                {
-                    // swallow
-                    Session.Logger.WriteLine("Swallowing exception");
-                }
-            }
-
-            base.Dispose();
-        }
-
-        public override bool Read(LogReadFlags flags)
-        {
-            if (_read)
-            {
-                throw new InvalidOperationException("Element already read to the end");
-            }
-
-            bool result = _parentReader.Read(flags);
-
-            if (result &&
-                IsEndElement(_localName) &&
-                (Depth == _depth))
-            {
-                result = false;
-                _read = true;
-            }
-
-            return result;
-        }
-
-        public void ReadToEnd(LogReadFlags flags)
-        {
-            using (Session.Logger.CreateCallstack())
-            {
-                if (!_read)
-                {
-                    while (Read(flags))
-                    {
-                    }
-                }
-            }
-        }
-
-        internal override XmlReader Reader
-        {
-            get { return _parentReader.Reader; }
-        }
-
-        private readonly CustomLogReader _parentReader;
-        private readonly string _localName;
-        private readonly int _depth;
-        protected bool _read;
-    }
-}

+ 0 - 741
dotnet/internal/ExeSessionProcess.cs

@@ -1,741 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.Globalization;
-using System.IO;
-using System.Threading;
-using Microsoft.Win32;
-using Microsoft.Win32.SafeHandles;
-using System.Runtime.InteropServices;
-using System.Reflection;
-
-namespace WinSCP
-{
-    internal class ExeSessionProcess : IDisposable
-    {
-        public event OutputDataReceivedEventHandler OutputDataReceived;
-
-        public bool HasExited { get { return _process.HasExited; } }
-        public int ExitCode { get { return _process.ExitCode; } }
-
-        public ExeSessionProcess(Session session)
-        {
-            _session = session;
-            _logger = session.Logger;
-            _incompleteLine = string.Empty;
-
-            using (_logger.CreateCallstack())
-            {
-                string executablePath = GetExecutablePath();
-
-                _logger.WriteLine("EXE executable path resolved to {0}", executablePath);
-
-                string assemblyFilePath = _logger.GetAssemblyFilePath();
-                FileVersionInfo assemblyVersion = null;
-                if (assemblyFilePath != null)
-                {
-                    assemblyVersion = FileVersionInfo.GetVersionInfo(assemblyFilePath);
-                }
-
-                CheckVersion(executablePath, assemblyVersion);
-
-                string configSwitch;
-                if (_session.DefaultConfiguration)
-                {
-                    configSwitch = "/ini=nul ";
-                }
-                else
-                {
-                    if (!string.IsNullOrEmpty(_session.IniFilePath))
-                    {
-                        configSwitch = string.Format(CultureInfo.InvariantCulture, "/ini=\"{0}\" ", _session.IniFilePath);
-                    }
-                    else
-                    {
-                        configSwitch = "";
-                    }
-                }
-
-                string logSwitch = null;
-                if (!string.IsNullOrEmpty(_session.SessionLogPath))
-                {
-                    logSwitch = string.Format(CultureInfo.InvariantCulture, "/log=\"{0}\" ", LogPathEscape(_session.SessionLogPath));
-                }
-
-                string xmlLogSwitch = string.Format(CultureInfo.InvariantCulture, "/xmllog=\"{0}\" ", LogPathEscape(_session.XmlLogPath));
-
-                string assemblyVersionStr =
-                    (assemblyVersion == null) ? "unk" :
-                    string.Format(CultureInfo.InvariantCulture, "{0}{1}{2} ", assemblyVersion.ProductMajorPart, assemblyVersion.ProductMinorPart, assemblyVersion.ProductBuildPart);
-
-                string assemblyVersionSwitch =
-                    string.Format(CultureInfo.InvariantCulture, "/dotnet={0} ", assemblyVersionStr);
-
-                string arguments =
-                    xmlLogSwitch + "/xmlgroups /nointeractiveinput " + assemblyVersionSwitch +
-                    configSwitch + logSwitch + _session.AdditionalExecutableArguments;
-
-                Tools.AddRawParameters(ref arguments, _session.RawConfiguration, "/rawconfig");
-
-                _process = new Process();
-                _process.StartInfo.FileName = executablePath;
-                _process.StartInfo.WorkingDirectory = Path.GetDirectoryName(executablePath);
-                _process.StartInfo.Arguments = arguments;
-                _process.StartInfo.UseShellExecute = false;
-                _process.Exited += ProcessExited;
-                if (_logger.Logging)
-                {
-                    _process.OutputDataReceived += ProcessOutputDataReceived;
-                    _process.ErrorDataReceived += ProcessErrorDataReceived;
-                }
-            }
-        }
-
-        private static string LogPathEscape(string path)
-        {
-            return Tools.ArgumentEscape(path).Replace("!", "!!");
-        }
-
-        public void Abort()
-        {
-            using (_logger.CreateCallstack())
-            {
-                lock (_lock)
-                {
-                    if ((_process != null) && !_process.HasExited)
-                    {
-                        _process.Kill();
-                    }
-                }
-            }
-        }
-
-        public void Start()
-        {
-            using (_logger.CreateCallstack())
-            {
-                InitializeConsole();
-                InitializeChild();
-            }
-        }
-
-        private void InitializeChild()
-        {
-            using (_logger.CreateCallstack())
-            {
-                _process.StartInfo.Arguments += string.Format(CultureInfo.InvariantCulture, " /console /consoleinstance={0}", _instanceName);
-
-                _logger.WriteLine("Starting \"{0}\" {1}", _process.StartInfo.FileName, _process.StartInfo.Arguments);
-
-                _process.Start();
-
-                _logger.WriteLine("Started process {0}", _process.Id);
-
-                _thread = new Thread(ProcessEvents);
-                _thread.IsBackground = true;
-                _thread.Start();
-            }
-        }
-
-        private void ProcessExited(object sender, EventArgs e)
-        {
-            _logger.WriteLine("Process {0} exited with exit code {1}", _process.Id, _process.ExitCode);
-        }
-
-        private void ProcessOutputDataReceived(object sender, DataReceivedEventArgs e)
-        {
-            _logger.WriteLine("Process output: {0}", e.Data);
-        }
-
-        private void ProcessErrorDataReceived(object sender, DataReceivedEventArgs e)
-        {
-            _logger.WriteLine("Process error output: {0}", e.Data);
-        }
-
-        private bool AbortedOrExited()
-        {
-            if (_abort)
-            {
-                _logger.WriteLine("Aborted");
-                return true;
-            }
-            else if (_process.HasExited)
-            {
-                _logger.WriteLine("Exited");
-                return true;
-            }
-            else
-            {
-                return false;
-            }
-        }
-
-        private void ProcessEvents()
-        {
-            using (_logger.CreateCallstack())
-            {
-                while (!AbortedOrExited())
-                {
-                    if (_requestEvent.WaitOne(100, false))
-                    {
-                        ProcessEvent();
-                    }
-                }
-            }
-        }
-
-        private void ProcessEvent()
-        {
-            using (_logger.CreateCallstack())
-            {
-                using (ConsoleCommStruct commStruct = AcquireCommStruct())
-                {
-                    switch (commStruct.Event)
-                    {
-                        case ConsoleEvent.Print:
-                            ProcessPrintEvent(commStruct.PrintEvent);
-                            break;
-
-                        case ConsoleEvent.Input:
-                            ProcessInputEvent(commStruct.InputEvent);
-                            break;
-
-                        case ConsoleEvent.Choice:
-                            ProcessChoiceEvent(commStruct.ChoiceEvent);
-                            break;
-
-                        case ConsoleEvent.Title:
-                            ProcessTitleEvent(commStruct.TitleEvent);
-                            break;
-
-                        case ConsoleEvent.Init:
-                            ProcessInitEvent(commStruct.InitEvent);
-                            break;
-
-                        case ConsoleEvent.Progress:
-                            ProcessProgressEvent(commStruct.ProgressEvent);
-                            break;
-
-                        default:
-                            throw new NotImplementedException();
-                    }
-                }
-
-                _responseEvent.Set();
-            }
-        }
-
-        private void ProcessChoiceEvent(ConsoleChoiceEventStruct e)
-        {
-            using (_logger.CreateCallstack())
-            {
-                if (e.Timeouting)
-                {
-                    Thread.Sleep((int)e.Timer);
-                    e.Result = e.Timeouted;
-                }
-                else
-                {
-                    e.Result = e.Break;
-                }
-            }
-        }
-
-        private void ProcessTitleEvent(ConsoleTitleEventStruct e)
-        {
-            using (_logger.CreateCallstack())
-            {
-                _logger.WriteLine("Not-supported title event [{0}]", e.Title);
-            }
-        }
-
-        private void ProcessInputEvent(ConsoleInputEventStruct e)
-        {
-            using (_logger.CreateCallstack())
-            {
-                while (!AbortedOrExited())
-                {
-                    lock (_input)
-                    {
-                        if (_input.Count > 0)
-                        {
-                            e.Str = _input[0];
-                            e.Result = true;
-                            _input.RemoveAt(0);
-                            Print(false, e.Str + "\n");
-                            return;
-                        }
-                    }
-
-                    _inputEvent.WaitOne(100, false);
-                }
-            }
-        }
-
-        private void Print(bool fromBeginning, string message)
-        {
-            if (fromBeginning && ((message.Length == 0) || (message[0] != '\n')))
-            {
-                _lastFromBeginning = message;
-                _logger.WriteLine("Buffered from-beginning message [{0}]", _lastFromBeginning);
-            }
-            else
-            {
-                if (!string.IsNullOrEmpty(_lastFromBeginning))
-                {
-                    AddToOutput(_lastFromBeginning);
-                    _lastFromBeginning = null;
-                }
-
-                if (fromBeginning && (message.Length > 0) && (message[0] == '\n'))
-                {
-                    AddToOutput("\n");
-                    _lastFromBeginning = message.Substring(1);
-                    _logger.WriteLine("Buffered from-beginning message [{0}]", _lastFromBeginning);
-                }
-                else
-                {
-                    AddToOutput(message);
-                }
-            }
-        }
-
-        private void AddToOutput(string message)
-        {
-            string[] lines = (_incompleteLine + message).Split(new[] { '\n' });
-
-            _incompleteLine = lines[lines.Length - 1];
-
-            for (int i = 0; i < lines.Length - 1; ++i)
-            {
-                if (OutputDataReceived != null)
-                {
-                    OutputDataReceived(this, new OutputDataReceivedEventArgs(lines[i]));
-                }
-            }
-        }
-
-        private void ProcessPrintEvent(ConsolePrintEventStruct e)
-        {
-            Print(e.FromBeginning, e.Message);
-        }
-
-        private void ProcessInitEvent(ConsoleInitEventStruct e)
-        {
-            using (_logger.CreateCallstack())
-            {
-                e.InputType = 3; // pipe
-                e.OutputType = 3; // pipe
-                e.WantsProgress = _session.WantsProgress;
-            }
-        }
-
-        private void ProcessProgressEvent(ConsoleProgressEventStruct e)
-        {
-            using (_logger.CreateCallstack())
-            {
-                _logger.WriteLine(
-                    "File Name [{0}] - Directory [{1}] - Overall Progress [{2}] - File Progress [{3}] - CPS [{4}]",
-                    e.FileName, e.Directory, e.OverallProgress, e.FileProgress, e.CPS);
-
-                FileTransferProgressEventArgs args = new FileTransferProgressEventArgs();
-
-                switch (e.Operation)
-                {
-                    case ConsoleProgressEventStruct.ProgressOperation.Copy:
-                        args.Operation = ProgressOperation.Transfer;
-                        break;
-
-                    default:
-                        throw new ArgumentOutOfRangeException("Unknown progress operation", (Exception)null);
-                }
-
-                switch (e.Side)
-                {
-                    case ConsoleProgressEventStruct.ProgressSide.Local:
-                        args.Side = ProgressSide.Local;
-                        break;
-
-                    case ConsoleProgressEventStruct.ProgressSide.Remote:
-                        args.Side = ProgressSide.Remote;
-                        break;
-
-                    default:
-                        throw new ArgumentOutOfRangeException("Unknown progress side", (Exception)null);
-                }
-
-                args.FileName = e.FileName;
-                args.Directory = e.Directory;
-                args.OverallProgress = ((double)e.OverallProgress) / 100;
-                args.FileProgress = ((double)e.FileProgress) / 100;
-                args.CPS = (int) e.CPS;
-                _session.ProcessProgress(args);
-            }
-        }
-
-        private void InitializeConsole()
-        {
-            using (_logger.CreateCallstack())
-            {
-                int attempts = 0;
-                Random random = new Random();
-                int process = Process.GetCurrentProcess().Id;
-
-                do
-                {
-                    if (attempts > MaxAttempts)
-                    {
-                        throw new SessionLocalException(_session, "Cannot find unique name for event object.");
-                    }
-
-                    int instanceNumber = random.Next(1000);
-
-                    _instanceName = string.Format(CultureInfo.InvariantCulture, "_{0}_{1}_{2}", process, GetHashCode(), instanceNumber);
-                    _logger.WriteLine("Trying event {0}", _instanceName);
-                    if (!TryCreateEvent(ConsoleEventRequest + _instanceName, out _requestEvent))
-                    {
-                        _logger.WriteLine("Event {0} is not unique", _instanceName);
-                        _requestEvent.Close();
-                        _requestEvent = null;
-                    }
-                    else
-                    {
-                        _logger.WriteLine("Event {0} is unique", _instanceName);
-                        _responseEvent = CreateEvent(ConsoleEventResponse + _instanceName);
-                        _cancelEvent = CreateEvent(ConsoleEventCancel + _instanceName);
-                        string fileMappingName = ConsoleMapping + _instanceName;
-                        _fileMapping = CreateFileMapping(fileMappingName);
-                        if (Marshal.GetLastWin32Error() == UnsafeNativeMethods.ERROR_ALREADY_EXISTS)
-                        {
-                            throw new SessionLocalException(_session, string.Format(CultureInfo.InvariantCulture, "File mapping {0} already exists", fileMappingName));
-                        }
-                        if (_fileMapping.IsInvalid)
-                        {
-                            throw new SessionLocalException(_session, string.Format(CultureInfo.InvariantCulture, "Cannot create file mapping {0}", fileMappingName));
-                        }
-                    }
-                    ++attempts;
-                }
-                while (_requestEvent == null);
-
-                using (ConsoleCommStruct commStruct = AcquireCommStruct())
-                {
-                    commStruct.InitHeader();
-                }
-
-                if (_session.GuardProcessWithJobInternal)
-                {
-                    string jobName = ConsoleJob + _instanceName;
-                    _job = new Job(_logger, jobName);
-                }
-            }
-        }
-
-        private static SafeFileHandle CreateFileMapping(string fileMappingName)
-        {
-            return
-                UnsafeNativeMethods.CreateFileMapping(
-                    new SafeFileHandle(new IntPtr(-1), true), IntPtr.Zero, FileMapProtection.PageReadWrite, 0,
-                    ConsoleCommStruct.Size, fileMappingName);
-        }
-
-        private ConsoleCommStruct AcquireCommStruct()
-        {
-            return new ConsoleCommStruct(_session, _fileMapping);
-        }
-
-        private bool TryCreateEvent(string name, out EventWaitHandle ev)
-        {
-            bool createdNew;
-            _logger.WriteLine("Creating event {0}", name);
-            ev = new EventWaitHandle(false, EventResetMode.AutoReset, name, out createdNew);
-            _logger.WriteLine("Created event {0} with handle {1}, new {2}", name, ev.SafeWaitHandle.DangerousGetHandle(), createdNew);
-            return createdNew;
-        }
-
-        private EventWaitHandle CreateEvent(string name)
-        {
-            EventWaitHandle ev;
-            if (!TryCreateEvent(name, out ev))
-            {
-                throw new SessionLocalException(_session, string.Format(CultureInfo.InvariantCulture, "Event {0} already exists", name));
-            }
-            return ev;
-        }
-
-        private void TestEventClosed(string name)
-        {
-            if (_session.TestHandlesClosedInternal)
-            {
-                _logger.WriteLine("Testing that event {0} is closed", name);
-                EventWaitHandle ev;
-                if (TryCreateEvent(name, out ev))
-                {
-                    ev.Close();
-                }
-                else
-                {
-                    _logger.WriteLine("Exception: Event {0} was not closed yet", name);
-                }
-            }
-        }
-
-        private void AddInput(string str)
-        {
-            Type structType = typeof(ConsoleInputEventStruct);
-            FieldInfo strField = structType.GetField("Str");
-            object[] attributes = strField.GetCustomAttributes(typeof(MarshalAsAttribute), false);
-            if (attributes.Length != 1)
-            {
-                throw new InvalidOperationException("MarshalAs attribute not found for ConsoleInputEventStruct.Str");
-            }
-            MarshalAsAttribute marshalAsAttribute = (MarshalAsAttribute)attributes[0];
-
-            if (marshalAsAttribute.SizeConst <= str.Length)
-            {
-                throw new SessionLocalException(
-                    _session,
-                    string.Format(CultureInfo.CurrentCulture, "Input [{0}] is too long ({1} limit)", str, marshalAsAttribute.SizeConst));
-            }
-
-            lock (_input)
-            {
-                _input.Add(str);
-                _inputEvent.Set();
-            }
-        }
-
-        public void ExecuteCommand(string command)
-        {
-            using (_logger.CreateCallstack())
-            {
-                AddInput(command);
-            }
-        }
-
-        public void Close()
-        {
-            using (_logger.CreateCallstack())
-            {
-                int timeout;
-
-                #if DEBUG
-                // in debug build, we expect the winscp.exe to run in tracing mode, being very slow
-                timeout = 10000;
-                #else
-                timeout = 2000;
-                #endif
-
-                _logger.WriteLine("Waiting for process to exit ({0} ms)", timeout);
-
-                if (!_process.WaitForExit(timeout))
-                {
-                    _logger.WriteLine("Killing process");
-                    _process.Kill();
-                }
-            }
-        }
-
-        public void Dispose()
-        {
-            using (_logger.CreateCallstack())
-            {
-                lock (_lock)
-                {
-                    if (_session.TestHandlesClosedInternal)
-                    {
-                        _logger.WriteLine("Will test that handles are closed");
-                    }
-                    _abort = true;
-                    if (_thread != null)
-                    {
-                        _thread.Join();
-                        _thread = null;
-                    }
-                    if (_process != null)
-                    {
-                        _process.Dispose();
-                        _process = null;
-                    }
-                    if (_requestEvent != null)
-                    {
-                        _requestEvent.Close();
-                        TestEventClosed(ConsoleEventRequest + _instanceName);
-                    }
-                    if (_responseEvent != null)
-                    {
-                        _responseEvent.Close();
-                        TestEventClosed(ConsoleEventResponse + _instanceName);
-                    }
-                    if (_cancelEvent != null)
-                    {
-                        _cancelEvent.Close();
-                        TestEventClosed(ConsoleEventCancel + _instanceName);
-                    }
-                    if (_fileMapping != null)
-                    {
-                        _fileMapping.Dispose();
-                        _fileMapping = null;
-                        if (_session.TestHandlesClosedInternal)
-                        {
-                            _logger.WriteLine("Testing that file mapping is closed");
-                            string fileMappingName = ConsoleMapping + _instanceName;
-                            SafeFileHandle fileMapping = CreateFileMapping(fileMappingName);
-                            if (Marshal.GetLastWin32Error() == UnsafeNativeMethods.ERROR_ALREADY_EXISTS)
-                            {
-                                _logger.WriteLine("Exception: File mapping {0} was not closed yet", fileMappingName);
-                            }
-                            if (!fileMapping.IsInvalid)
-                            {
-                                fileMapping.Dispose();
-                            }
-                        }
-                    }
-                    if (_inputEvent != null)
-                    {
-                        _inputEvent.Close();
-                        _inputEvent = null;
-                    }
-                    if (_job != null)
-                    {
-                        _job.Dispose();
-                        _job = null;
-                    }
-                }
-            }
-        }
-
-        private string GetExecutablePath()
-        {
-            using (_logger.CreateCallstack())
-            {
-                string executablePath;
-                if (!string.IsNullOrEmpty(_session.ExecutablePath))
-                {
-                    executablePath = _session.ExecutablePath;
-                    if (!File.Exists(executablePath))
-                    {
-                        throw new SessionLocalException(_session, string.Format(CultureInfo.CurrentCulture, "{0} does not exists.", executablePath));
-                    }
-                }
-                else
-                {
-                    if (!TryFindExecutableInPath(GetAssemblyPath(), out executablePath) &&
-                        !TryFindExecutableInPath(GetInstallationPath(Registry.CurrentUser), out executablePath) &&
-                        !TryFindExecutableInPath(GetInstallationPath(Registry.LocalMachine), out executablePath) &&
-                        !TryFindExecutableInPath(GetDefaultInstallationPath(), out executablePath))
-                    {
-                        throw new SessionLocalException(_session,
-                            string.Format(CultureInfo.CurrentCulture,
-                                "The {0} executable was not found at location of the assembly ({1}), nor in an installation path. You may use Session.ExecutablePath property to explicitly set path to {0}.",
-                                ExeExecutableFileName, GetAssemblyPath()));
-                    }
-                }
-                return executablePath;
-            }
-        }
-
-        private static string GetDefaultInstallationPath()
-        {
-            return Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), "WinSCP");
-        }
-
-        private static string GetInstallationPath(RegistryKey rootKey)
-        {
-            RegistryKey key = rootKey.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Uninstall\winscp3_is1");
-            return (key != null) ? (string)key.GetValue("Inno Setup: App Path") : null;
-        }
-
-        private bool TryFindExecutableInPath(string path, out string result)
-        {
-            if (string.IsNullOrEmpty(path))
-            {
-                result = null;
-            }
-            else
-            {
-                string executablePath = Path.Combine(path, ExeExecutableFileName);
-                if (File.Exists(executablePath))
-                {
-                    result = executablePath;
-                    _logger.WriteLine("Executable found in {0}", executablePath);
-                }
-                else
-                {
-                    result = null;
-                    _logger.WriteLine("Executable not found in {0}", executablePath);
-                }
-            }
-            return (result != null);
-        }
-
-        private string GetAssemblyPath()
-        {
-            string codeBasePath = _logger.GetAssemblyFilePath();
-            string path = null;
-            if (!string.IsNullOrEmpty(codeBasePath))
-            {
-                path = Path.GetDirectoryName(codeBasePath);
-                Debug.Assert(path != null);
-            }
-            return path;
-        }
-
-        private void CheckVersion(string exePath, FileVersionInfo assemblyVersion)
-        {
-            using (_logger.CreateCallstack())
-            {
-                FileVersionInfo version = FileVersionInfo.GetVersionInfo(exePath);
-
-                _logger.WriteLine("Version of {0} is {1}, product {2} version is {3}", exePath, version.FileVersion, version.ProductName, version.ProductVersion);
-
-                if (_session.DisableVersionCheck)
-                {
-                    _logger.WriteLine("Version check disabled (not recommended)");
-                }
-                else if (assemblyVersion == null)
-                {
-                    _logger.WriteLine("Assembly version not known, cannot check version");
-                }
-                else if (assemblyVersion.ProductVersion != version.ProductVersion)
-                {
-                    throw new SessionLocalException(
-                        _session, string.Format(CultureInfo.CurrentCulture,
-                            "The version of {0} ({1}) does not match version of this assembly {2} ({3}). You can disable this check using Session.DisableVersionCheck (not recommended).",
-                            exePath, version.ProductVersion, _logger.GetAssemblyFilePath(), assemblyVersion.ProductVersion));
-                }
-            }
-        }
-
-        public void WriteStatus()
-        {
-            string executablePath = GetExecutablePath();
-            _logger.WriteLine("{0} - exists [{1}]", executablePath, File.Exists(executablePath));
-        }
-
-        private const int MaxAttempts = 10;
-        private const string ConsoleMapping = "WinSCPConsoleMapping";
-        private const string ConsoleEventRequest = "WinSCPConsoleEventRequest";
-        private const string ConsoleEventResponse = "WinSCPConsoleEventResponse";
-        private const string ConsoleEventCancel = "WinSCPConsoleEventCancel";
-        private const string ConsoleJob = "WinSCPConsoleJob";
-        private const string ExeExecutableFileName = "winscp.exe";
-
-        private Process _process;
-        private readonly object _lock = new object();
-        private readonly Logger _logger;
-        private readonly Session _session;
-        private EventWaitHandle _requestEvent;
-        private EventWaitHandle _responseEvent;
-        private EventWaitHandle _cancelEvent;
-        private SafeFileHandle _fileMapping;
-        private string _instanceName;
-        private Thread _thread;
-        private bool _abort;
-        private string _lastFromBeginning;
-        private string _incompleteLine;
-        private readonly List<string> _input = new List<string>();
-        private AutoResetEvent _inputEvent = new AutoResetEvent(false);
-        private Job _job;
-    }
-}

+ 0 - 17
dotnet/internal/ISessionProcess.cs

@@ -1,17 +0,0 @@
-using System;
-using System.Diagnostics;
-
-namespace WinSCP
-{
-    internal interface ISessionProcess : IDisposable
-    {
-        event OutputDataReceivedEventHandler OutputDataReceived;
-        bool HasExited { get; }
-        int ExitCode { get; }
-
-        void Start();
-        void ExecuteCommand(string command);
-
-        void Close();
-    }
-}

+ 0 - 69
dotnet/internal/Job.cs

@@ -1,69 +0,0 @@
-using System;
-using System.Diagnostics;
-using System.Runtime.InteropServices;
-
-namespace WinSCP
-{
-    internal class Job : IDisposable
-    {
-        public Job(Logger logger, string name)
-        {
-            _logger = logger;
-            _handle = UnsafeNativeMethods.CreateJobObject(IntPtr.Zero, name);
-
-            if (_handle == IntPtr.Zero)
-            {
-                _logger.WriteLine("Cannot create job ({0})", Logger.LastWin32ErrorMessage());
-            }
-            else
-            {
-                _logger.WriteLine("Job created");
-
-                JobObjectBasicLimitInformation info = new JobObjectBasicLimitInformation();
-                info.LimitFlags = 0x2000; // JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE
-
-                JobObjectExtendedLimitInformation extendedInfo = new JobObjectExtendedLimitInformation();
-                extendedInfo.BasicLimitInformation = info;
-
-                int length = Marshal.SizeOf(typeof(JobObjectExtendedLimitInformation));
-                IntPtr extendedInfoPtr = Marshal.AllocHGlobal(length);
-                Marshal.StructureToPtr(extendedInfo, extendedInfoPtr, false);
-
-                if (UnsafeNativeMethods.SetInformationJobObject(_handle, JobObjectInfoType.ExtendedLimitInformation, extendedInfoPtr, (uint)length))
-                {
-                    _logger.WriteLine("Job set to kill all processes");
-                }
-                else
-                {
-                    _logger.WriteLine("Cannot set job to kill all processes ({0})", Logger.LastWin32ErrorMessage());
-                }
-            }
-        }
-
-        ~Job()
-        {
-            DoDispose();
-        }
-
-        public void Dispose()
-        {
-            DoDispose();
-            GC.SuppressFinalize(this);
-        }
-
-        private void DoDispose()
-        {
-            Close();
-        }
-
-        public void Close()
-        {
-            _logger.WriteLine("Closing job");
-            UnsafeNativeMethods.CloseHandle(_handle);
-            _handle = IntPtr.Zero;
-        }
-
-        private IntPtr _handle;
-        private Logger _logger;
-    }
-}

+ 0 - 32
dotnet/internal/Lock.cs

@@ -1,32 +0,0 @@
-using System;
-using System.Threading;
-
-namespace WinSCP
-{
-    public class Lock
-    {
-        public void Enter()
-        {
-            Monitor.Enter(_lock);
-            if (_locked)
-            {
-                Monitor.Exit(_lock);
-                throw new InvalidOperationException("Recursive calls not allowed");
-            }
-            _locked = true;
-        }
-
-        public void Exit()
-        {
-            if (!_locked)
-            {
-                throw new InvalidOperationException("Not locked");
-            }
-            _locked = false;
-            Monitor.Exit(_lock);
-        }
-
-        private readonly object _lock = new object();
-        private bool _locked;
-    }
-}

+ 0 - 313
dotnet/internal/Logger.cs

@@ -1,313 +0,0 @@
-using System;
-using System.Globalization;
-using System.IO;
-using System.Threading;
-using System.Reflection;
-using System.Diagnostics;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Runtime.InteropServices;
-
-namespace WinSCP
-{
-    internal class Logger : IDisposable
-    {
-        public string LogPath { get { return _logPath; } set { SetLogPath(value); } }
-        public int LogLevel { get { return _logLevel; } set { SetLogLevel(value); } }
-        public bool Logging { get { return (_writter != null) && _writter.BaseStream.CanWrite; } }
-
-        public string GetAssemblyFilePath()
-        {
-            Assembly assembly = Assembly.GetExecutingAssembly();
-            string path = null;
-            string codeBase = assembly.CodeBase;
-            string location = assembly.Location;
-            // cannot use Uri.UnescapeDataString, because it treats some characters valid in
-            // local path (like #) specially
-            const string protocol = "file:///";
-            if (codeBase.StartsWith(protocol, StringComparison.OrdinalIgnoreCase))
-            {
-                path =
-                    codeBase.Substring(protocol.Length).Replace('/', '\\');
-            }
-
-            if ((path == null) || !File.Exists(path))
-            {
-                if (File.Exists(location))
-                {
-                    path = location;
-                }
-                else
-                {
-                    WriteLine(
-                        string.Format(
-                            CultureInfo.CurrentCulture,
-                            "Cannot locate path of assembly [{0}] neither from its code base [{1}], nor from its location [{2}]",
-                            assembly, codeBase, location));
-                    path = null;
-                }
-            }
-
-            return path;
-        }
-
-        private void CreateCounters()
-        {
-            try
-            {
-                PerformanceCounterCategory[] categories = PerformanceCounterCategory.GetCategories();
-                foreach (PerformanceCounterCategory category in categories)
-                {
-                    if (category.CategoryName == "Processor")
-                    {
-                        string[] instances = category.GetInstanceNames();
-                        foreach (string instance in instances)
-                        {
-                            AddCounter(new PerformanceCounter(category.CategoryName, "% Processor Time", instance));
-                        }
-                    }
-                }
-
-                AddCounter(new PerformanceCounter("Memory", "Available KBytes"));
-            }
-            catch (UnauthorizedAccessException)
-            {
-                WriteLine("Not authorized to get counters");
-            }
-            catch (Exception e)
-            {
-                WriteLine("Error getting counters: {0}", e);
-            }
-        }
-
-        private void AddCounter(PerformanceCounter counter)
-        {
-            counter.NextValue();
-            _performanceCounters.Add(counter);
-        }
-
-        public void WriteLine(string message)
-        {
-            lock (_logLock)
-            {
-                if (Logging)
-                {
-                    DoWriteLine(message);
-                }
-            }
-        }
-
-        public void WriteLine(string format, params object[] args)
-        {
-            lock (_logLock)
-            {
-                if (Logging)
-                {
-                    DoWriteLine(string.Format(CultureInfo.CurrentCulture, format, args));
-                }
-            }
-        }
-
-        private static int GetThread()
-        {
-            return Thread.CurrentThread.ManagedThreadId;
-        }
-
-        public void Indent()
-        {
-            lock (_logLock)
-            {
-                int threadId = GetThread();
-                int indent;
-                if (!_indents.TryGetValue(threadId, out indent))
-                {
-                    indent = 0;
-                }
-                _indents[threadId] = indent + 1;
-            }
-        }
-
-        public void Unindent()
-        {
-            lock (_logLock)
-            {
-                int threadId = GetThread();
-                _indents[threadId]--;
-            }
-        }
-
-        public void Dispose()
-        {
-            lock (_logLock)
-            {
-                if (Logging)
-                {
-                    WriteCounters();
-                    WriteProcesses();
-                    _writter.Dispose();
-                    _writter = null;
-                }
-
-                foreach (PerformanceCounter counter in _performanceCounters)
-                {
-                    counter.Dispose();
-                }
-            }
-        }
-
-        public void WriteCounters()
-        {
-            if (Logging && (_logLevel >= 1))
-            {
-                try
-                {
-                    foreach (PerformanceCounter counter in _performanceCounters)
-                    {
-                        WriteLine("{0}{1}{2} = [{3}]",
-                            counter.CounterName,
-                            (string.IsNullOrEmpty(counter.InstanceName) ? string.Empty : "/"),
-                            counter.InstanceName,
-                            counter.NextValue());
-                    }
-                }
-                catch (Exception e)
-                {
-                    WriteLine("Error reading counters: {0}", e);
-                }
-            }
-        }
-
-        public void WriteProcesses()
-        {
-            if (Logging && (_logLevel >= 1))
-            {
-                try
-                {
-                    Process[] processes = Process.GetProcesses();
-
-                    foreach (Process process in processes)
-                    {
-                        WriteLine("{0}:{1} - {2} - {3}", process.Id, process.ProcessName, GetProcessStartTime(process), GetTotalProcessorTime(process));
-                    }
-                }
-                catch (Exception e)
-                {
-                    WriteLine("Error logging processes: {0}", e);
-                }
-            }
-        }
-
-        private static object GetProcessStartTime(Process process)
-        {
-            try
-            {
-                return process.StartTime;
-            }
-            catch
-            {
-                return "???";
-            }
-        }
-
-        private static object GetTotalProcessorTime(Process process)
-        {
-            try
-            {
-                return process.TotalProcessorTime;
-            }
-            catch
-            {
-                return "???";
-            }
-        }
-
-        public Callstack CreateCallstack()
-        {
-            return new Callstack(this);
-        }
-
-        public Callstack CreateCallstackAndLock()
-        {
-            return new CallstackAndLock(this, _lock);
-        }
-
-        private int GetIndent()
-        {
-            int indent;
-            if (!_indents.TryGetValue(GetThread(), out indent))
-            {
-                indent = 0;
-            }
-            return indent;
-        }
-
-        private void DoWriteLine(string message)
-        {
-            int indent = GetIndent();
-
-            string s =
-                string.Format(CultureInfo.InvariantCulture, "[{0:yyyy-MM-dd HH:mm:ss.fffZ}] [{1:x4}] {2}{3}",
-                DateTime.Now, Thread.CurrentThread.ManagedThreadId,
-                (indent > 0 ? new string(' ', indent * 2) : string.Empty), message);
-            _writter.WriteLine(s);
-        }
-
-        private void SetLogPath(string value)
-        {
-            lock (_logLock)
-            {
-                if (_logPath != value)
-                {
-                    Dispose();
-                    _logPath = value;
-                    if (!string.IsNullOrEmpty(_logPath))
-                    {
-                        _writter = File.CreateText(_logPath);
-                        _writter.AutoFlush = true;
-                        WriteEnvironmentInfo();
-                        if (_logLevel >= 1)
-                        {
-                            CreateCounters();
-                        }
-                    }
-                }
-            }
-        }
-
-        private void WriteEnvironmentInfo()
-        {
-            string path = GetAssemblyFilePath();
-            FileVersionInfo version = string.IsNullOrEmpty(path) ? null : FileVersionInfo.GetVersionInfo(path);
-            Assembly assembly = Assembly.GetExecutingAssembly();
-            WriteLine("Executing Assembly: {0}; Path: {1}; Location: {2}; Product: {3}", assembly, path, assembly.Location, ((version != null) ? version.ProductVersion : "unknown"));
-            WriteLine("Entry Assembly: {0}", Assembly.GetEntryAssembly());
-            WriteLine("Operating system: {0}", Environment.OSVersion);
-            WriteLine("User: {0}@{1}@{2}; Interactive: {3}", Environment.UserName, Environment.UserDomainName, Environment.MachineName, Environment.UserInteractive);
-            WriteLine("Runtime: {0}", Environment.Version);
-            WriteLine("Console encoding: Input: {0} ({1}); Output: {2} ({3})", Console.InputEncoding.EncodingName, Console.InputEncoding.CodePage, Console.OutputEncoding.EncodingName, Console.OutputEncoding.CodePage);
-            WriteLine("Working directory: {0}", Environment.CurrentDirectory);
-        }
-
-        public static string LastWin32ErrorMessage()
-        {
-            return new Win32Exception(Marshal.GetLastWin32Error()).Message;
-        }
-
-        private void SetLogLevel(int value)
-        {
-            if ((value < 0) || (value > 1))
-            {
-                throw new ArgumentOutOfRangeException(string.Format(CultureInfo.CurrentCulture, "Logging level has to be in range 0-1"));
-            }
-            _logLevel = value;
-        }
-
-        private StreamWriter _writter;
-        private string _logPath;
-        private readonly Dictionary<int, int> _indents = new Dictionary<int, int>();
-        private readonly object _logLock = new object();
-        private readonly Lock _lock = new Lock();
-        private List<PerformanceCounter> _performanceCounters = new List<PerformanceCounter>();
-        private int _logLevel;
-    }
-}

+ 0 - 21
dotnet/internal/OperationResultGuard.cs

@@ -1,21 +0,0 @@
-using System;
-
-namespace WinSCP
-{
-    internal class OperationResultGuard : IDisposable
-    {
-        public OperationResultGuard(Session session, OperationResultBase operationResult)
-        {
-            _session = session;
-            _operationResult = operationResult;
-        }
-
-        public void Dispose()
-        {
-            _session.UnregisterOperationResult(_operationResult);
-        }
-        
-        private readonly Session _session;
-        private readonly OperationResultBase _operationResult;
-    }
-}

+ 0 - 22
dotnet/internal/ProgressHandler.cs

@@ -1,22 +0,0 @@
-using System;
-
-namespace WinSCP
-{
-    internal class ProgressHandler : IDisposable
-    {
-        public ProgressHandler(Session session)
-        {
-            _session = session;
-        }
-
-        public void Dispose()
-        {
-            using (_session.Logger.CreateCallstack())
-            {
-                _session.DisableProgressHandling();
-            }
-        }
-
-        private Session _session;
-    }
-}

+ 0 - 95
dotnet/internal/ReadOnlyInteropCollectionHelper.cs

@@ -1,95 +0,0 @@
-using System;
-using System.Collections;
-using System.Collections.Generic;
-
-namespace WinSCP
-{
-    internal class ReadOnlyInteropCollectionHelper<T> : ICollection<T>
-    {
-        public void InternalAdd(T item)
-        {
-            _list.Add(item);
-        }
-
-        public void InternalRemoveFirst()
-        {
-            _list.RemoveAt(0);
-        }
-
-        public T this[int index]
-        {
-            get
-            {
-                return _list[index];
-            }
-            set
-            {
-                throw CreateReadOnlyException();
-            }
-        }
-
-        #region ICollection<T> Members
-
-        public void Add(T item)
-        {
-            throw CreateReadOnlyException();
-        }
-
-        public void Clear()
-        {
-            throw CreateReadOnlyException();
-        }
-
-        public bool Contains(T item)
-        {
-            return _list.Contains(item);
-        }
-
-        public void CopyTo(T[] array, int arrayIndex)
-        {
-            _list.CopyTo(array, arrayIndex);
-        }
-
-        public int Count
-        {
-            get { return _list.Count; }
-        }
-
-        public bool IsReadOnly
-        {
-            get { return true; }
-        }
-
-        public bool Remove(T item)
-        {
-            throw CreateReadOnlyException();
-        }
-
-        #endregion
-
-        #region IEnumerable<T> Members
-
-        public IEnumerator<T> GetEnumerator()
-        {
-            return _list.GetEnumerator();
-        }
-
-        #endregion
-
-        #region IEnumerable Members
-
-        IEnumerator IEnumerable.GetEnumerator()
-        {
-            return _list.GetEnumerator();
-        }
-
-        #endregion
-
-        private static Exception CreateReadOnlyException()
-        {
-            return new InvalidOperationException("Collection is read-only.");
-        }
-
-        private readonly List<T> _list = new List<T>();
-    }
-}

+ 0 - 36
dotnet/internal/SessionElementLogReader.cs

@@ -1,36 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace WinSCP
-{
-    internal class SessionElementLogReader : ElementLogReader
-    {
-        public SessionElementLogReader(CustomLogReader parentReader) :
-            base(parentReader)
-        {
-        }
-
-        public override void Dispose()
-        {
-            // Now it's ok if we encounter </session>.
-            _disposing = true;
-
-            base.Dispose();
-        }
-
-        public override bool Read(LogReadFlags flags)
-        {
-            bool result = base.Read(flags);
-
-            if (_read && !_disposing)
-            {
-                throw new SessionLocalException(Session, "Session has unexpectedly closed");
-            }
-
-            return result;
-        }
-
-        private bool _disposing;
-    }
-}

+ 0 - 253
dotnet/internal/SessionLogReader.cs

@@ -1,253 +0,0 @@
-using System;
-using System.Diagnostics;
-using System.IO;
-using System.Xml;
-using System.Text;
-
-namespace WinSCP
-{
-    internal class SessionLogReader : CustomLogReader
-    {
-        public SessionLogReader(Session session) :
-            base(session)
-        {
-            _position = 0;
-        }
-
-        public override void Dispose()
-        {
-            using (Session.Logger.CreateCallstack())
-            {
-                Cleanup();
-            }
-            base.Dispose();
-        }
-
-        private void Cleanup()
-        {
-            if (_stream != null)
-            {
-                Session.Logger.WriteLine("Closing log");
-                _stream.Dispose();
-                _stream = null;
-            }
-
-            if (_reader != null)
-            {
-                ((IDisposable)_reader).Dispose();
-                _reader = null;
-            }
-        }
-
-        public override bool Read(LogReadFlags flags)
-        {
-            using (Session.Logger.CreateCallstack())
-            {
-                bool result;
-                bool retry;
-
-                do
-                {
-                    result = DoRead();
-
-                    retry = false;
-
-                    if (result &&
-                        IsNonEmptyElement("failure"))
-                    {
-                        SessionRemoteException e = SessionRemoteException.ReadFailure(this);
-
-                        Session.RaiseFailed(e);
-
-                        if ((flags & LogReadFlags.ThrowFailures) == 0)
-                        {
-                            retry = true;
-                        }
-                        else
-                        {
-                            throw e;
-                        }
-                    }
-                }
-                while (retry);
-
-                return result;
-            }
-        }
-
-        private bool DoRead()
-        {
-            int interval = 125;
-            bool result;
-
-            do
-            {
-                if (_reader == null)
-                {
-                    OpenLog();
-                }
-
-                Debug.Assert(_reader != null);
-
-                try
-                {
-                    result = _reader.Read();
-                    if (result)
-                    {
-                        ++_position;
-                        Session.Logger.WriteLine("Read node {0}: {1} {2}{3}{4}",
-                            _position, _reader.NodeType, _reader.Name,
-                            (_reader.HasValue && !string.IsNullOrEmpty(_reader.Name) && !string.IsNullOrEmpty(_reader.Value) ? "=" : string.Empty),
-                            _reader.Value);
-                        Session.GotOutput();
-                    }
-                    else
-                    {
-                        Session.Logger.WriteLine("Cannot read");
-
-                        if (!_closed)
-                        {
-                            // this should not happen as when the log is not closed,
-                            // we should get XmlException on reaching the end
-                            _closed = true;
-                            Cleanup();
-                        }
-
-                        Session.CheckForTimeout();
-                    }
-                }
-                catch (XmlException e)
-                {
-                    Cleanup();
-
-                    if (!_closed)
-                    {
-                        // If log was not closed, it is likely the XML is not well-formed
-                        // (at least top-level <session/> tag is not closed),
-                        // so we swallow the parsing errors here.
-                        Session.Logger.WriteLine("Error parsing session log file, but it is not closed yet, will retry");
-                        result = false;
-                    }
-                    else
-                    {
-                        // check if the the root cause was session abort
-                        Session.CheckForTimeout();
-                        LogContents();
-                        throw new SessionLocalException(Session, "Error parsing session log file", e);
-                    }
-                }
-
-                if (!result && !_closed)
-                {
-                    Session.Logger.WriteLine("Waiting for log update and dispatching events for {0}", interval);
-                    Session.DispatchEvents(interval);
-                    if (interval < 500)
-                    {
-                        interval *= 2;
-                    }
-                }
-            }
-            while (!result && !_closed);
-
-            if (result)
-            {
-                LogContents();
-            }
-
-            return result;
-        }
-
-        private void LogContents()
-        {
-            if (Session.Logger.Logging)
-            {
-                try
-                {
-                    // alterative to File.ReadAllText with write-sharing
-                    // (note that the StreamReader disposes the Stream)
-                    using (StreamReader reader = new StreamReader(OpenLogFileWithWriteSharing(), Encoding.UTF8))
-                    {
-                        string contents = reader.ReadToEnd();
-                        if ((_logged == null) || (_logged != contents))
-                        {
-                            Session.Logger.WriteLine("Log contents:\n{0}", contents);
-                            _logged = contents;
-                        }
-                        else
-                        {
-                            Session.Logger.WriteLine("Log contents has not changed");
-                        }
-                    }
-                }
-                catch (Exception e)
-                {
-                    Session.Logger.WriteLine("Error logging log contents [{0}]", e.Message);
-                }
-            }
-        }
-
-        private void OpenLog()
-        {
-            if (_closed)
-            {
-                throw new InvalidOperationException("Log was closed already");
-            }
-
-            try
-            {
-                Session.Logger.WriteLine("Opening log without write sharing");
-                // First try to open file without write sharing.
-                // This fails, if WinSCP is still writing to the log file.
-                // This is done only as a way to detect that log file is not complete yet.
-                _stream = File.Open(Session.XmlLogPath, FileMode.Open, FileAccess.Read, FileShare.Read);
-                _closed = true;
-                LogContents();
-            }
-            catch (IOException)
-            {
-                Session.Logger.WriteLine("Opening log with write sharing");
-                // If log file is still being written to, open it with write sharing
-                _stream = OpenLogFileWithWriteSharing();
-                _closed = false;
-            }
-
-            Session.Logger.WriteLine("Log opened");
-
-            _reader = XmlReader.Create(_stream);
-
-            int skip = _position;
-            Session.Logger.WriteLine("Skipping {0} nodes", skip);
-            while (skip > 0)
-            {
-                if (!_reader.Read())
-                {
-                    throw new SessionLocalException(Session, "Read less nodes than in previous log parsing");
-                }
-                --skip;
-            }
-        }
-
-        private FileStream OpenLogFileWithWriteSharing()
-        {
-            return File.Open(Session.XmlLogPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
-        }
-
-        internal override XmlReader Reader
-        {
-            get
-            {
-                if (_reader == null)
-                {
-                    throw new SessionLocalException(Session, "Reading has not commenced yet");
-                }
-                return _reader;
-            }
-        }
-
-        private int _position;
-        private XmlReader _reader;
-        private FileStream _stream;
-        private bool _closed;
-        private string _logged;
-    }
-}

+ 0 - 54
dotnet/internal/Tools.cs

@@ -1,54 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Globalization;
-
-namespace WinSCP
-{
-    internal static class Tools
-    {
-        public static int TimeSpanToMilliseconds(TimeSpan value)
-        {
-            if ((value.TotalMilliseconds > int.MaxValue) || (value.TotalMilliseconds < int.MinValue))
-            {
-                throw new InvalidCastException(string.Format(CultureInfo.CurrentCulture, "Cannot convert {0} to integer", value));
-            }
-            return (int)value.TotalMilliseconds;
-        }
-
-        public static TimeSpan MillisecondsToTimeSpan(int value)
-        {
-            return TimeSpan.FromMilliseconds(value);
-        }
-
-        public static string ArgumentEscape(string value)
-        {
-            int i = 0;
-            while (i < value.Length)
-            {
-                if (value[i] == '"')
-                {
-                    value = value.Insert(i, "\"");
-                    ++i;
-                }
-                ++i;
-            }
-            return value;
-        }
-
-        public static void AddRawParameters(ref string arguments, Dictionary<string, string> parameters, string switchName)
-        {
-            if (parameters.Count > 0)
-            {
-                if (!string.IsNullOrEmpty(arguments))
-                {
-                    arguments += " ";
-                }
-                arguments += switchName;
-                foreach (KeyValuePair<string, string> rawSetting in parameters)
-                {
-                    arguments += string.Format(CultureInfo.InvariantCulture, " {0}=\"{1}\"", rawSetting.Key, ArgumentEscape(rawSetting.Value));
-                }
-            }
-        }
-    }
-}

+ 0 - 110
dotnet/internal/UnsafeNativeMethods.cs

@@ -1,110 +0,0 @@
-using Microsoft.Win32.SafeHandles;
-using System;
-using System.Runtime.InteropServices;
-
-namespace WinSCP
-{
-    internal enum JobObjectInfoType
-    {
-        AssociateCompletionPortInformation = 7,
-        BasicLimitInformation = 2,
-        BasicUIRestrictions = 4,
-        EndOfJobTimeInformation = 6,
-        ExtendedLimitInformation = 9,
-        SecurityLimitInformation = 5,
-        GroupInformation = 11
-    }
-
-    [StructLayout(LayoutKind.Sequential)]
-    internal struct SecurityAttributes
-    {
-        public UInt32 nLength;
-        public IntPtr lpSecurityDescriptor;
-        public Int32 bInheritHandle;
-    }
-
-    [StructLayout(LayoutKind.Sequential)]
-    internal struct JobObjectBasicLimitInformation
-    {
-        public Int64 PerProcessUserTimeLimit;
-        public Int64 PerJobUserTimeLimit;
-        public UInt32 LimitFlags;
-        public UIntPtr MinimumWorkingSetSize;
-        public UIntPtr MaximumWorkingSetSize;
-        public UInt32 ActiveProcessLimit;
-        public UIntPtr Affinity;
-        public UInt32 PriorityClass;
-        public UInt32 SchedulingClass;
-    }
-
-    [StructLayout(LayoutKind.Sequential)]
-    internal struct IOCounters
-    {
-        public UInt64 ReadOperationCount;
-        public UInt64 WriteOperationCount;
-        public UInt64 OtherOperationCount;
-        public UInt64 ReadTransferCount;
-        public UInt64 WriteTransferCount;
-        public UInt64 OtherTransferCount;
-    }
-
-    [StructLayout(LayoutKind.Sequential)]
-    internal struct JobObjectExtendedLimitInformation
-    {
-        public JobObjectBasicLimitInformation BasicLimitInformation;
-        public IOCounters IoInfo;
-        public UIntPtr ProcessMemoryLimit;
-        public UIntPtr JobMemoryLimit;
-        public UIntPtr PeakProcessMemoryUsed;
-        public UIntPtr PeakJobMemoryUsed;
-    }
-
-    [Flags]
-    internal enum FileMapProtection : uint
-    {
-        PageReadonly = 0x02,
-        PageReadWrite = 0x04,
-        PageWriteCopy = 0x08,
-        PageExecuteRead = 0x20,
-        PageExecuteReadWrite = 0x40,
-        SectionCommit = 0x8000000,
-        SectionImage = 0x1000000,
-        SectionNoCache = 0x10000000,
-        SectionReserve = 0x4000000,
-    }
-
-    [Flags]
-    public enum FileMapAccess : int
-    {
-        FileMapCopy = 0x0001,
-        FileMapWrite = 0x0002,
-        FileMapRead = 0x0004,
-        FileMapAllAccess = 0x001f,
-        FileMapExecute = 0x0020,
-    }
-    
-    internal static class UnsafeNativeMethods
-    {
-        public const int ERROR_ALREADY_EXISTS = 183;
-        
-        [DllImport("kernel32", CharSet = CharSet.Unicode, SetLastError = true)]
-        public static extern SafeFileHandle CreateFileMapping(SafeFileHandle hFile, IntPtr lpAttributes, FileMapProtection fProtect, int dwMaximumSizeHigh, int dwMaximumSizeLow, string lpName);
-
-        [DllImport("kernel32", SetLastError = true, ExactSpelling = true)]
-        public static extern IntPtr MapViewOfFile(SafeFileHandle handle, FileMapAccess dwDesiredAccess, uint dwFileOffsetHigh, uint dwFileOffsetLow, UIntPtr dwNumberOfBytesToMap);
-
-        [DllImport("kernel32", ExactSpelling = true)]
-        [return: MarshalAs(UnmanagedType.Bool)]
-        public static extern bool UnmapViewOfFile(IntPtr lpBaseAddress);
-
-        [DllImport("kernel32", CharSet = CharSet.Auto, SetLastError = true, ExactSpelling = true)]
-        public static extern int CloseHandle(IntPtr hObject);
-
-        [DllImport("kernel32", CharSet = CharSet.Unicode, SetLastError = true)]
-        public static extern IntPtr CreateJobObject(IntPtr a, string lpName);
-
-        [DllImport("kernel32", SetLastError = true)]
-        [return: MarshalAs(UnmanagedType.Bool)]
-        public static extern bool SetInformationJobObject(IntPtr hJob, JobObjectInfoType infoType, IntPtr lpJobObjectInfo, uint cbJobObjectInfoLength);
-    }
-}

+ 0 - 88
dotnet/interopcollections/RemoteFileInfoCollection.cs

@@ -1,88 +0,0 @@
-using System.Collections;
-using System.Collections.Generic;
-using System.Runtime.InteropServices;
-
-namespace WinSCP
-{
-    [Guid("39AA3D00-578C-49AF-B3E4-16CE26C710C6")]
-    [ClassInterface(Constants.ClassInterface)]
-    [ComVisible(true)]
-    public class RemoteFileInfoCollection : ICollection<RemoteFileInfo>
-    {
-        public RemoteFileInfo this[int index]
-        {
-            get
-            {
-                return _helper[index];
-            }
-            set
-            {
-                _helper[index] = value;
-            }
-        }
-
-        #region ICollection<RemoteFileInfo> Members
-
-        public void Add(RemoteFileInfo item)
-        {
-            _helper.Add(item);
-        }
-
-        public void Clear()
-        {
-            _helper.Clear();
-        }
-
-        public bool Contains(RemoteFileInfo item)
-        {
-            return _helper.Contains(item);
-        }
-
-        public void CopyTo(RemoteFileInfo[] array, int arrayIndex)
-        {
-            _helper.CopyTo(array, arrayIndex);
-        }
-
-        public int Count
-        {
-            get { return _helper.Count; }
-        }
-
-        public bool IsReadOnly
-        {
-            get { return _helper.IsReadOnly; }
-        }
-
-        public bool Remove(RemoteFileInfo item)
-        {
-            return _helper.Remove(item);
-        }
-
-        #endregion
-
-        #region IEnumerable<RemoteFileInfo> Members
-
-        IEnumerator<RemoteFileInfo> IEnumerable<RemoteFileInfo>.GetEnumerator()
-        {
-            return _helper.GetEnumerator();
-        }
-
-        #endregion
-
-        #region IEnumerable Members
-
-        public IEnumerator GetEnumerator()
-        {
-            return _helper.GetEnumerator();
-        }
-
-        #endregion
-
-        internal void InternalAdd(RemoteFileInfo item)
-        {
-            _helper.InternalAdd(item);
-        }
-
-        private readonly ReadOnlyInteropCollectionHelper<RemoteFileInfo> _helper = new ReadOnlyInteropCollectionHelper<RemoteFileInfo>();
-    }
-}

+ 0 - 88
dotnet/interopcollections/RemovalEventArgsCollection.cs

@@ -1,88 +0,0 @@
-using System.Collections;
-using System.Collections.Generic;
-using System.Runtime.InteropServices;
-
-namespace WinSCP
-{
-    [Guid("574FF430-FD40-41F9-9A04-971D3CF844B7")]
-    [ClassInterface(Constants.ClassInterface)]
-    [ComVisible(true)]
-    public class RemovalEventArgsCollection : ICollection<RemovalEventArgs>
-    {
-        public RemovalEventArgs this[int index]
-        {
-            get
-            {
-                return _helper[index];
-            }
-            set
-            {
-                _helper[index] = value;
-            }
-        }
-
-        #region ICollection<RemovalEventArgs> Members
-
-        public void Add(RemovalEventArgs item)
-        {
-            _helper.Add(item);
-        }
-
-        public void Clear()
-        {
-            _helper.Clear();
-        }
-
-        public bool Contains(RemovalEventArgs item)
-        {
-            return _helper.Contains(item);
-        }
-
-        public void CopyTo(RemovalEventArgs[] array, int arrayIndex)
-        {
-            _helper.CopyTo(array, arrayIndex);
-        }
-
-        public int Count
-        {
-            get { return _helper.Count; }
-        }
-
-        public bool IsReadOnly
-        {
-            get { return _helper.IsReadOnly; }
-        }
-
-        public bool Remove(RemovalEventArgs item)
-        {
-            return _helper.Remove(item);
-        }
-
-        #endregion
-
-        #region IEnumerable<RemovalEventArgs> Members
-
-        IEnumerator<RemovalEventArgs> IEnumerable<RemovalEventArgs>.GetEnumerator()
-        {
-            return _helper.GetEnumerator();
-        }
-
-        #endregion
-
-        #region IEnumerable Members
-
-        public IEnumerator GetEnumerator()
-        {
-            return _helper.GetEnumerator();
-        }
-
-        #endregion
-
-        internal void InternalAdd(RemovalEventArgs item)
-        {
-            _helper.InternalAdd(item);
-        }
-
-        private readonly ReadOnlyInteropCollectionHelper<RemovalEventArgs> _helper = new ReadOnlyInteropCollectionHelper<RemovalEventArgs>();
-    }
-}

+ 0 - 88
dotnet/interopcollections/SessionRemoteExceptionCollection.cs

@@ -1,88 +0,0 @@
-using System.Collections;
-using System.Collections.Generic;
-using System.Runtime.InteropServices;
-
-namespace WinSCP
-{
-    [Guid("2309282F-B89B-4F6B-AEB1-D3E1629B7033")]
-    [ClassInterface(Constants.ClassInterface)]
-    [ComVisible(true)]
-    public class SessionRemoteExceptionCollection : ICollection<SessionRemoteException>
-    {
-        public SessionRemoteException this[int index]
-        {
-            get
-            {
-                return _helper[index];
-            }
-            set
-            {
-                _helper[index] = value;
-            }
-        }
-
-        #region ICollection<SessionRemoteException> Members
-
-        public void Add(SessionRemoteException item)
-        {
-            _helper.Add(item);
-        }
-
-        public void Clear()
-        {
-            _helper.Clear();
-        }
-
-        public bool Contains(SessionRemoteException item)
-        {
-            return _helper.Contains(item);
-        }
-
-        public void CopyTo(SessionRemoteException[] array, int arrayIndex)
-        {
-            _helper.CopyTo(array, arrayIndex);
-        }
-
-        public int Count
-        {
-            get { return _helper.Count; }
-        }
-
-        public bool IsReadOnly
-        {
-            get { return _helper.IsReadOnly; }
-        }
-
-        public bool Remove(SessionRemoteException item)
-        {
-            return _helper.Remove(item);
-        }
-
-        #endregion
-
-        #region IEnumerable<SessionRemoteException> Members
-
-        IEnumerator<SessionRemoteException> IEnumerable<SessionRemoteException>.GetEnumerator()
-        {
-            return _helper.GetEnumerator();
-        }
-
-        #endregion
-
-        #region IEnumerable Members
-
-        public IEnumerator GetEnumerator()
-        {
-            return _helper.GetEnumerator();
-        }
-
-        #endregion
-
-        internal void InternalAdd(SessionRemoteException item)
-        {
-            _helper.InternalAdd(item);
-        }
-
-        private readonly ReadOnlyInteropCollectionHelper<SessionRemoteException> _helper = new ReadOnlyInteropCollectionHelper<SessionRemoteException>();
-    }
-}

+ 0 - 93
dotnet/interopcollections/StringCollection.cs

@@ -1,93 +0,0 @@
-using System.Collections;
-using System.Collections.Generic;
-using System.Runtime.InteropServices;
-
-namespace WinSCP
-{
-    [Guid("E402CB1F-6219-4C79-9EDF-1914D9589909")]
-    [ClassInterface(Constants.ClassInterface)]
-    [ComVisible(true)]
-    public class StringCollection : ICollection<string>
-    {
-        public string this[int index]
-        {
-            get
-            {
-                return _helper[index];
-            }
-            set
-            {
-                _helper[index] = value;
-            }
-        }
-
-        #region ICollection<string> Members
-
-        public void Add(string item)
-        {
-            _helper.Add(item);
-        }
-
-        public void Clear()
-        {
-            _helper.Clear();
-        }
-
-        public bool Contains(string item)
-        {
-            return _helper.Contains(item);
-        }
-
-        public void CopyTo(string[] array, int arrayIndex)
-        {
-            _helper.CopyTo(array, arrayIndex);
-        }
-
-        public int Count
-        {
-            get { return _helper.Count; }
-        }
-
-        public bool IsReadOnly
-        {
-            get { return _helper.IsReadOnly; }
-        }
-
-        public bool Remove(string item)
-        {
-            return _helper.Remove(item);
-        }
-
-        #endregion
-
-        #region IEnumerable<SessionRemoteException> Members
-
-        IEnumerator<string> IEnumerable<string>.GetEnumerator()
-        {
-            return _helper.GetEnumerator();
-        }
-
-        #endregion
-
-        #region IEnumerable Members
-
-        public IEnumerator GetEnumerator()
-        {
-            return _helper.GetEnumerator();
-        }
-
-        #endregion
-
-        internal void InternalAdd(string item)
-        {
-            _helper.InternalAdd(item);
-        }
-
-        internal void InternalRemoveFirst()
-        {
-            _helper.InternalRemoveFirst();
-        }
-
-        private readonly ReadOnlyInteropCollectionHelper<string> _helper = new ReadOnlyInteropCollectionHelper<string>();
-    }
-}

+ 0 - 88
dotnet/interopcollections/TransferEventArgsCollection.cs

@@ -1,88 +0,0 @@
-using System.Collections;
-using System.Collections.Generic;
-using System.Runtime.InteropServices;
-
-namespace WinSCP
-{
-    [Guid("0285917B-581A-4F6F-9A9D-1C34ABFB4E38")]
-    [ClassInterface(Constants.ClassInterface)]
-    [ComVisible(true)]
-    public class TransferEventArgsCollection : ICollection<TransferEventArgs>
-    {
-        public TransferEventArgs this[int index]
-        {
-            get
-            {
-                return _helper[index];
-            }
-            set
-            {
-                _helper[index] = value;
-            }
-        }
-
-        #region ICollection<TransferEventArgs> Members
-
-        public void Add(TransferEventArgs item)
-        {
-            _helper.Add(item);
-        }
-
-        public void Clear()
-        {
-            _helper.Clear();
-        }
-
-        public bool Contains(TransferEventArgs item)
-        {
-            return _helper.Contains(item);
-        }
-
-        public void CopyTo(TransferEventArgs[] array, int arrayIndex)
-        {
-            _helper.CopyTo(array, arrayIndex);
-        }
-
-        public int Count
-        {
-            get { return _helper.Count; }
-        }
-
-        public bool IsReadOnly
-        {
-            get { return _helper.IsReadOnly; }
-        }
-
-        public bool Remove(TransferEventArgs item)
-        {
-            return _helper.Remove(item);
-        }
-
-        #endregion
-
-        #region IEnumerable<SessionRemoteException> Members
-
-        IEnumerator<TransferEventArgs> IEnumerable<TransferEventArgs>.GetEnumerator()
-        {
-            return _helper.GetEnumerator();
-        }
-
-        #endregion
-
-        #region IEnumerable Members
-
-        public IEnumerator GetEnumerator()
-        {
-            return _helper.GetEnumerator();
-        }
-
-        #endregion
-
-        internal void InternalAdd(TransferEventArgs item)
-        {
-            _helper.InternalAdd(item);
-        }
-
-        private readonly ReadOnlyInteropCollectionHelper<TransferEventArgs> _helper = new ReadOnlyInteropCollectionHelper<TransferEventArgs>();
-    }
-}

+ 0 - 373
dotnet/license-dotnet.txt

@@ -1,373 +0,0 @@
-Mozilla Public License Version 2.0
-==================================
-
-1. Definitions
---------------
-
-1.1. "Contributor"
-    means each individual or legal entity that creates, contributes to
-    the creation of, or owns Covered Software.
-
-1.2. "Contributor Version"
-    means the combination of the Contributions of others (if any) used
-    by a Contributor and that particular Contributor's Contribution.
-
-1.3. "Contribution"
-    means Covered Software of a particular Contributor.
-
-1.4. "Covered Software"
-    means Source Code Form to which the initial Contributor has attached
-    the notice in Exhibit A, the Executable Form of such Source Code
-    Form, and Modifications of such Source Code Form, in each case
-    including portions thereof.
-
-1.5. "Incompatible With Secondary Licenses"
-    means
-
-    (a) that the initial Contributor has attached the notice described
-        in Exhibit B to the Covered Software; or
-
-    (b) that the Covered Software was made available under the terms of
-        version 1.1 or earlier of the License, but not also under the
-        terms of a Secondary License.
-
-1.6. "Executable Form"
-    means any form of the work other than Source Code Form.
-
-1.7. "Larger Work"
-    means a work that combines Covered Software with other material, in 
-    a separate file or files, that is not Covered Software.
-
-1.8. "License"
-    means this document.
-
-1.9. "Licensable"
-    means having the right to grant, to the maximum extent possible,
-    whether at the time of the initial grant or subsequently, any and
-    all of the rights conveyed by this License.
-
-1.10. "Modifications"
-    means any of the following:
-
-    (a) any file in Source Code Form that results from an addition to,
-        deletion from, or modification of the contents of Covered
-        Software; or
-
-    (b) any new file in Source Code Form that contains any Covered
-        Software.
-
-1.11. "Patent Claims" of a Contributor
-    means any patent claim(s), including without limitation, method,
-    process, and apparatus claims, in any patent Licensable by such
-    Contributor that would be infringed, but for the grant of the
-    License, by the making, using, selling, offering for sale, having
-    made, import, or transfer of either its Contributions or its
-    Contributor Version.
-
-1.12. "Secondary License"
-    means either the GNU General Public License, Version 2.0, the GNU
-    Lesser General Public License, Version 2.1, the GNU Affero General
-    Public License, Version 3.0, or any later versions of those
-    licenses.
-
-1.13. "Source Code Form"
-    means the form of the work preferred for making modifications.
-
-1.14. "You" (or "Your")
-    means an individual or a legal entity exercising rights under this
-    License. For legal entities, "You" includes any entity that
-    controls, is controlled by, or is under common control with You. For
-    purposes of this definition, "control" means (a) the power, direct
-    or indirect, to cause the direction or management of such entity,
-    whether by contract or otherwise, or (b) ownership of more than
-    fifty percent (50%) of the outstanding shares or beneficial
-    ownership of such entity.
-
-2. License Grants and Conditions
---------------------------------
-
-2.1. Grants
-
-Each Contributor hereby grants You a world-wide, royalty-free,
-non-exclusive license:
-
-(a) under intellectual property rights (other than patent or trademark)
-    Licensable by such Contributor to use, reproduce, make available,
-    modify, display, perform, distribute, and otherwise exploit its
-    Contributions, either on an unmodified basis, with Modifications, or
-    as part of a Larger Work; and
-
-(b) under Patent Claims of such Contributor to make, use, sell, offer
-    for sale, have made, import, and otherwise transfer either its
-    Contributions or its Contributor Version.
-
-2.2. Effective Date
-
-The licenses granted in Section 2.1 with respect to any Contribution
-become effective for each Contribution on the date the Contributor first
-distributes such Contribution.
-
-2.3. Limitations on Grant Scope
-
-The licenses granted in this Section 2 are the only rights granted under
-this License. No additional rights or licenses will be implied from the
-distribution or licensing of Covered Software under this License.
-Notwithstanding Section 2.1(b) above, no patent license is granted by a
-Contributor:
-
-(a) for any code that a Contributor has removed from Covered Software;
-    or
-
-(b) for infringements caused by: (i) Your and any other third party's
-    modifications of Covered Software, or (ii) the combination of its
-    Contributions with other software (except as part of its Contributor
-    Version); or
-
-(c) under Patent Claims infringed by Covered Software in the absence of
-    its Contributions.
-
-This License does not grant any rights in the trademarks, service marks,
-or logos of any Contributor (except as may be necessary to comply with
-the notice requirements in Section 3.4).
-
-2.4. Subsequent Licenses
-
-No Contributor makes additional grants as a result of Your choice to
-distribute the Covered Software under a subsequent version of this
-License (see Section 10.2) or under the terms of a Secondary License (if
-permitted under the terms of Section 3.3).
-
-2.5. Representation
-
-Each Contributor represents that the Contributor believes its
-Contributions are its original creation(s) or it has sufficient rights
-to grant the rights to its Contributions conveyed by this License.
-
-2.6. Fair Use
-
-This License is not intended to limit any rights You have under
-applicable copyright doctrines of fair use, fair dealing, or other
-equivalents.
-
-2.7. Conditions
-
-Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
-in Section 2.1.
-
-3. Responsibilities
--------------------
-
-3.1. Distribution of Source Form
-
-All distribution of Covered Software in Source Code Form, including any
-Modifications that You create or to which You contribute, must be under
-the terms of this License. You must inform recipients that the Source
-Code Form of the Covered Software is governed by the terms of this
-License, and how they can obtain a copy of this License. You may not
-attempt to alter or restrict the recipients' rights in the Source Code
-Form.
-
-3.2. Distribution of Executable Form
-
-If You distribute Covered Software in Executable Form then:
-
-(a) such Covered Software must also be made available in Source Code
-    Form, as described in Section 3.1, and You must inform recipients of
-    the Executable Form how they can obtain a copy of such Source Code
-    Form by reasonable means in a timely manner, at a charge no more
-    than the cost of distribution to the recipient; and
-
-(b) You may distribute such Executable Form under the terms of this
-    License, or sublicense it under different terms, provided that the
-    license for the Executable Form does not attempt to limit or alter
-    the recipients' rights in the Source Code Form under this License.
-
-3.3. Distribution of a Larger Work
-
-You may create and distribute a Larger Work under terms of Your choice,
-provided that You also comply with the requirements of this License for
-the Covered Software. If the Larger Work is a combination of Covered
-Software with a work governed by one or more Secondary Licenses, and the
-Covered Software is not Incompatible With Secondary Licenses, this
-License permits You to additionally distribute such Covered Software
-under the terms of such Secondary License(s), so that the recipient of
-the Larger Work may, at their option, further distribute the Covered
-Software under the terms of either this License or such Secondary
-License(s).
-
-3.4. Notices
-
-You may not remove or alter the substance of any license notices
-(including copyright notices, patent notices, disclaimers of warranty,
-or limitations of liability) contained within the Source Code Form of
-the Covered Software, except that You may alter any license notices to
-the extent required to remedy known factual inaccuracies.
-
-3.5. Application of Additional Terms
-
-You may choose to offer, and to charge a fee for, warranty, support,
-indemnity or liability obligations to one or more recipients of Covered
-Software. However, You may do so only on Your own behalf, and not on
-behalf of any Contributor. You must make it absolutely clear that any
-such warranty, support, indemnity, or liability obligation is offered by
-You alone, and You hereby agree to indemnify every Contributor for any
-liability incurred by such Contributor as a result of warranty, support,
-indemnity or liability terms You offer. You may include additional
-disclaimers of warranty and limitations of liability specific to any
-jurisdiction.
-
-4. Inability to Comply Due to Statute or Regulation
----------------------------------------------------
-
-If it is impossible for You to comply with any of the terms of this
-License with respect to some or all of the Covered Software due to
-statute, judicial order, or regulation then You must: (a) comply with
-the terms of this License to the maximum extent possible; and (b)
-describe the limitations and the code they affect. Such description must
-be placed in a text file included with all distributions of the Covered
-Software under this License. Except to the extent prohibited by statute
-or regulation, such description must be sufficiently detailed for a
-recipient of ordinary skill to be able to understand it.
-
-5. Termination
---------------
-
-5.1. The rights granted under this License will terminate automatically
-if You fail to comply with any of its terms. However, if You become
-compliant, then the rights granted under this License from a particular
-Contributor are reinstated (a) provisionally, unless and until such
-Contributor explicitly and finally terminates Your grants, and (b) on an
-ongoing basis, if such Contributor fails to notify You of the
-non-compliance by some reasonable means prior to 60 days after You have
-come back into compliance. Moreover, Your grants from a particular
-Contributor are reinstated on an ongoing basis if such Contributor
-notifies You of the non-compliance by some reasonable means, this is the
-first time You have received notice of non-compliance with this License
-from such Contributor, and You become compliant prior to 30 days after
-Your receipt of the notice.
-
-5.2. If You initiate litigation against any entity by asserting a patent
-infringement claim (excluding declaratory judgment actions,
-counter-claims, and cross-claims) alleging that a Contributor Version
-directly or indirectly infringes any patent, then the rights granted to
-You by any and all Contributors for the Covered Software under Section
-2.1 of this License shall terminate.
-
-5.3. In the event of termination under Sections 5.1 or 5.2 above, all
-end user license agreements (excluding distributors and resellers) which
-have been validly granted by You or Your distributors under this License
-prior to termination shall survive termination.
-
-************************************************************************
-*                                                                      *
-*  6. Disclaimer of Warranty                                           *
-*  -------------------------                                           *
-*                                                                      *
-*  Covered Software is provided under this License on an "as is"       *
-*  basis, without warranty of any kind, either expressed, implied, or  *
-*  statutory, including, without limitation, warranties that the       *
-*  Covered Software is free of defects, merchantable, fit for a        *
-*  particular purpose or non-infringing. The entire risk as to the     *
-*  quality and performance of the Covered Software is with You.        *
-*  Should any Covered Software prove defective in any respect, You     *
-*  (not any Contributor) assume the cost of any necessary servicing,   *
-*  repair, or correction. This disclaimer of warranty constitutes an   *
-*  essential part of this License. No use of any Covered Software is   *
-*  authorized under this License except under this disclaimer.         *
-*                                                                      *
-************************************************************************
-
-************************************************************************
-*                                                                      *
-*  7. Limitation of Liability                                          *
-*  --------------------------                                          *
-*                                                                      *
-*  Under no circumstances and under no legal theory, whether tort      *
-*  (including negligence), contract, or otherwise, shall any           *
-*  Contributor, or anyone who distributes Covered Software as          *
-*  permitted above, be liable to You for any direct, indirect,         *
-*  special, incidental, or consequential damages of any character      *
-*  including, without limitation, damages for lost profits, loss of    *
-*  goodwill, work stoppage, computer failure or malfunction, or any    *
-*  and all other commercial damages or losses, even if such party      *
-*  shall have been informed of the possibility of such damages. This   *
-*  limitation of liability shall not apply to liability for death or   *
-*  personal injury resulting from such party's negligence to the       *
-*  extent applicable law prohibits such limitation. Some               *
-*  jurisdictions do not allow the exclusion or limitation of           *
-*  incidental or consequential damages, so this exclusion and          *
-*  limitation may not apply to You.                                    *
-*                                                                      *
-************************************************************************
-
-8. Litigation
--------------
-
-Any litigation relating to this License may be brought only in the
-courts of a jurisdiction where the defendant maintains its principal
-place of business and such litigation shall be governed by laws of that
-jurisdiction, without reference to its conflict-of-law provisions.
-Nothing in this Section shall prevent a party's ability to bring
-cross-claims or counter-claims.
-
-9. Miscellaneous
-----------------
-
-This License represents the complete agreement concerning the subject
-matter hereof. If any provision of this License is held to be
-unenforceable, such provision shall be reformed only to the extent
-necessary to make it enforceable. Any law or regulation which provides
-that the language of a contract shall be construed against the drafter
-shall not be used to construe this License against a Contributor.
-
-10. Versions of the License
----------------------------
-
-10.1. New Versions
-
-Mozilla Foundation is the license steward. Except as provided in Section
-10.3, no one other than the license steward has the right to modify or
-publish new versions of this License. Each version will be given a
-distinguishing version number.
-
-10.2. Effect of New Versions
-
-You may distribute the Covered Software under the terms of the version
-of the License under which You originally received the Covered Software,
-or under the terms of any subsequent version published by the license
-steward.
-
-10.3. Modified Versions
-
-If you create software not governed by this License, and you want to
-create a new license for such software, you may create and use a
-modified version of this License if you rename the license and remove
-any references to the name of the license steward (except to note that
-such modified license differs from this License).
-
-10.4. Distributing Source Code Form that is Incompatible With Secondary
-Licenses
-
-If You choose to distribute Source Code Form that is Incompatible With
-Secondary Licenses under the terms of this version of the License, the
-notice described in Exhibit B of this License must be attached.
-
-Exhibit A - Source Code Form License Notice
--------------------------------------------
-
-  This Source Code Form is subject to the terms of the Mozilla Public
-  License, v. 2.0. If a copy of the MPL was not distributed with this
-  file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-If it is not possible or desirable to put the notice in a particular
-file, then You may include the notice in a location (such as a LICENSE
-file in a relevant directory) where a recipient would be likely to look
-for such a notice.
-
-You may add additional accurate notices of copyright ownership.
-
-Exhibit B - "Incompatible With Secondary Licenses" Notice
----------------------------------------------------------
-
-  This Source Code Form is "Incompatible With Secondary Licenses", as
-  defined by the Mozilla Public License, v. 2.0.

+ 0 - 27
dotnet/properties/AssemblyInfo.cs

@@ -1,27 +0,0 @@
-using System;
-using System.Reflection;
-using System.Runtime.InteropServices;
-
-// General Information about an assembly is controlled through the following 
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("WinSCPnet")]
-[assembly: AssemblyDescription("WinSCP scripting interface .NET wrapper")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("Martin Prikryl")]
-[assembly: AssemblyProduct("WinSCP")]
-[assembly: AssemblyCopyright("")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-[assembly: ComVisible(false)]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("a0b93468-d98a-4845-a234-8076229ad93f")]
-
-[assembly: AssemblyVersion("1.2.10.0")]
-[assembly: AssemblyFileVersion("1.2.10.0")]
-[assembly: AssemblyInformationalVersionAttribute("5.7.8.0")]
-
-[assembly: CLSCompliant(true)]
-

+ 2 - 0
libs/.gitignore

@@ -0,0 +1,2 @@
+lib
+openssl/openssl

+ 0 - 64
libs/buildlibs.bat

@@ -1,64 +0,0 @@
-@echo off
-if not exist lib mkdir lib
-
-rem ==== OpenSSL ====
-
-if exist lib\libeay32.lib (
-echo OpenSSL already built
-goto SKIP_OPENSSL
-)
-
-echo Building OpenSSL ...
-cd openssl
-make
-cd ..
-
-if not exist lib\libeay32.lib (
-echo OpenSSL build failed
-exit
-)
-
-:SKIP_OPENSSL
-
-rem ==== Expat ====
-
-if exist lib\libexpats_mtd.lib (
-echo Expat already built
-goto SKIP_EXPAT
-)
-
-echo Building Expat ...
-cd expat\bcb5
-call setup.bat
-make -f makefile.mak expat_static
-cd ..\..
-
-if not exist expat\bcb5\release\libexpats_mtd.lib (
-echo Expat build failed
-exit
-)
-
-copy expat\bcb5\release\libexpats_mtd.lib lib
-
-:SKIP_EXPAT
-
-rem ==== neon ====
-
-if exist lib\neon.lib (
-echo neon already built
-goto SKIP_NEON
-)
-
-echo Building neon ...
-cd neon
-make -f Makefile.bcb all
-cd ..
-
-if not exist lib\neon.lib (
-echo neon build failed
-exit
-)
-
-:SKIP_NEON
-
-echo All done

+ 0 - 21
libs/cleaninterm.bat

@@ -1,21 +0,0 @@
-@echo off
-
-rem ==== OpenSSL ====
-
-echo Cleaning up OpenSSL ...
-cd openssl\crypto
-del /s *.obj
-cd ..\..
-rmdir /s /q openssl\tmp
-
-rem ==== Expat ====
-
-echo Cleaning up Expat ...
-rmdir /s /q expat\bcb5\release
-
-rem ==== neon ====
-
-echo Cleaning up neon ...
-rmdir /s /q neon\tmp
-
-echo All done

+ 2 - 2
libs/expat/bcb5/expat_static.mak

@@ -39,7 +39,7 @@ USERDEFINES = _WINDOWS;WIN32;NDEBUG;_LIB;COMPILED_FROM_DSP;XML_STATIC
 SYSDEFINES = _NO_VCL;_ASSERTE;NO_STRICT;_RTLDLL
 INCLUDEPATH = ..\lib;$(BCB)\include
 LIBPATH = ..\lib;$(BCB)\lib;$(RELEASELIBPATH)
-WARNINGS = -w-rch -w-par -w-8027 -w-8026 -w-ccc -w-8012
+WARNINGS = -w-rch -w-par -w-8027 -w-8026 -w-ccc
 LISTFILE = 
 # ---------------------------------------------------------------------------
 CFLAG1 = -O2 -X- -a8 -b -k- -vi -q -tWM -c
@@ -154,7 +154,7 @@ COMMA = ,
 !endif
 
 $(PROJECT): $(IDLGENFILES) $(OBJFILES) $(RESDEPEN) $(DEFFILE)
-    $(BCB)\BIN\$(LINKER) /a $@ @&&!
+    $(BCB)\BIN\$(LINKER) /u $@ @&&!
     $(LFLAGS) $? $(COMMA) $(LISTFILE)
 
 !

+ 2 - 2
libs/expat/bcb5/expatw_static.mak

@@ -35,7 +35,7 @@ PATHRC = .;
 LINKER = TLib
 DEBUGLIBPATH = $(BCB)\lib\debug
 RELEASELIBPATH = $(BCB)\lib\release
-USERDEFINES = _WINDOWS;WIN32;NDEBUG;_LIB;COMPILED_FROM_DSP;XML_STATIC
+USERDEFINES = _WINDOWS;WIN32;NDEBUG;_LIB;COMPILED_FROM_DSP;XML_STATIC;XML_UNICODE_WCHAR_T
 SYSDEFINES = _NO_VCL;_ASSERTE;NO_STRICT;_RTLDLL
 INCLUDEPATH = ..\lib;$(BCB)\include
 LIBPATH = ..\lib;$(BCB)\lib;$(RELEASELIBPATH)
@@ -155,7 +155,7 @@ COMMA = ,
 !endif
 
 $(PROJECT): $(IDLGENFILES) $(OBJFILES) $(RESDEPEN) $(DEFFILE)
-    $(BCB)\BIN\$(LINKER) /a $@ @&&!
+    $(BCB)\BIN\$(LINKER) /u $@ @&&!
     $(LFLAGS) $? $(COMMA) $(LISTFILE)
 
 !

+ 0 - 242
libs/expat/lib/libexpat.vcxproj

@@ -1,242 +0,0 @@
-<?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="Template|Win32">
-      <Configuration>Template</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Template|x64">
-      <Configuration>Template</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="UnityDebug|Win32">
-      <Configuration>UnityDebug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="UnityDebug|x64">
-      <Configuration>UnityDebug</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="UnityRelease|Win32">
-      <Configuration>UnityRelease</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="UnityRelease|x64">
-      <Configuration>UnityRelease</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{27250AA6-FED6-F96F-E32B-E8E9719F8FEB}</ProjectGuid>
-    <RootNamespace>libexpat</RootNamespace>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Template|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Template|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='UnityRelease|Win32'" Label="Configuration">
-    <ConfigurationType>StaticLibrary</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='UnityRelease|x64'" Label="Configuration">
-    <ConfigurationType>StaticLibrary</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='UnityDebug|Win32'" Label="Configuration">
-    <ConfigurationType>StaticLibrary</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='UnityDebug|x64'" Label="Configuration">
-    <ConfigurationType>StaticLibrary</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Template|Win32'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Template|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='UnityRelease|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)'=='UnityRelease|x64'" 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)'=='UnityDebug|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)'=='UnityDebug|x64'" 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 Condition="'$(Configuration)|$(Platform)'=='UnityDebug|Win32'">
-    <OutDir>.\..\..\..\Temp\$(SolutionName)\$(Configuration)\x86\$(ProjectName)\</OutDir>
-    <IntDir>.\..\..\..\Temp\$(SolutionName)\$(Configuration)\x86\$(ProjectName)\</IntDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='UnityDebug|x64'">
-    <OutDir>.\..\..\..\Temp\$(SolutionName)\$(Configuration)\x64\$(ProjectName)\</OutDir>
-    <IntDir>.\..\..\..\Temp\$(SolutionName)\$(Configuration)\x64\$(ProjectName)\</IntDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='UnityRelease|Win32'">
-    <OutDir>.\..\..\..\Temp\$(SolutionName)\$(Configuration)\x86\$(ProjectName)\</OutDir>
-    <IntDir>.\..\..\..\Temp\$(SolutionName)\$(Configuration)\x86\$(ProjectName)\</IntDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='UnityRelease|x64'">
-    <OutDir>.\..\..\..\Temp\$(SolutionName)\$(Configuration)\x64\$(ProjectName)\</OutDir>
-    <IntDir>.\..\..\..\Temp\$(SolutionName)\$(Configuration)\x64\$(ProjectName)\</IntDir>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='UnityDebug|Win32'">
-    <ClCompile>
-      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
-      <InlineFunctionExpansion>Default</InlineFunctionExpansion>
-      <FunctionLevelLinking>false</FunctionLevelLinking>
-      <Optimization>Disabled</Optimization>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <WarningLevel>Level3</WarningLevel>
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_LIB;COMPILED_FROM_DSP;XML_STATIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AssemblerListingLocation>.\..\..\..\Temp\$(SolutionName)\$(Configuration)\x86\$(ProjectName)\</AssemblerListingLocation>
-      <BrowseInformation>true</BrowseInformation>
-      <PrecompiledHeaderOutputFile>.\..\..\..\Temp\$(SolutionName)\$(Configuration)\x86\$(ProjectName)\libexpat.pch</PrecompiledHeaderOutputFile>
-      <ObjectFileName>.\..\..\..\Temp\$(SolutionName)\$(Configuration)\x86\$(ProjectName)\</ObjectFileName>
-      <ProgramDataBaseFileName>.\..\..\..\Temp\$(SolutionName)\$(Configuration)\x86\$(ProjectName)\</ProgramDataBaseFileName>
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
-    </ClCompile>
-    <ResourceCompile>
-      <Culture>0x0409</Culture>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ResourceCompile>
-    <Bscmake>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <OutputFile>.\..\..\..\Temp\$(SolutionName)\$(Configuration)\x86\$(ProjectName)\libexpat.bsc</OutputFile>
-    </Bscmake>
-    <Lib>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <OutputFile>.\..\..\..\Temp\$(SolutionName)\$(Configuration)\x86\$(ProjectName)\libexpat.lib</OutputFile>
-    </Lib>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='UnityDebug|x64'">
-    <ClCompile>
-      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
-      <InlineFunctionExpansion>Default</InlineFunctionExpansion>
-      <FunctionLevelLinking>false</FunctionLevelLinking>
-      <Optimization>Disabled</Optimization>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <WarningLevel>Level3</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <PreprocessorDefinitions>WIN64;_DEBUG;_WINDOWS;_LIB;COMPILED_FROM_DSP;XML_STATIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AssemblerListingLocation>.\..\..\..\Temp\$(SolutionName)\$(Configuration)\x64\$(ProjectName)\</AssemblerListingLocation>
-      <BrowseInformation>true</BrowseInformation>
-      <PrecompiledHeaderOutputFile>.\..\..\..\Temp\$(SolutionName)\$(Configuration)\x64\$(ProjectName)\libexpat.pch</PrecompiledHeaderOutputFile>
-      <ObjectFileName>.\..\..\..\Temp\$(SolutionName)\$(Configuration)\x64\$(ProjectName)\</ObjectFileName>
-      <ProgramDataBaseFileName>.\..\..\..\Temp\$(SolutionName)\$(Configuration)\x64\$(ProjectName)\</ProgramDataBaseFileName>
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
-    </ClCompile>
-    <ResourceCompile>
-      <Culture>0x0409</Culture>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ResourceCompile>
-    <Bscmake>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <OutputFile>.\..\..\..\Temp\$(SolutionName)\$(Configuration)\x64\$(ProjectName)\libexpat.bsc</OutputFile>
-    </Bscmake>
-    <Lib>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <OutputFile>.\..\..\..\Temp\$(SolutionName)\$(Configuration)\x64\$(ProjectName)\libexpat.lib</OutputFile>
-    </Lib>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='UnityRelease|Win32'">
-    <ClCompile>
-      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
-      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
-      <StringPooling>true</StringPooling>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <Optimization>MaxSpeed</Optimization>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <WarningLevel>Level3</WarningLevel>
-      <PreprocessorDefinitions>WIN32;_WINDOWS;NDEBUG;_LIB;COMPILED_FROM_DSP;XML_STATIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AssemblerListingLocation>.\..\..\..\Temp\$(SolutionName)\$(Configuration)\x86\$(ProjectName)\</AssemblerListingLocation>
-      <PrecompiledHeaderOutputFile>.\..\..\..\Temp\$(SolutionName)\$(Configuration)\x86\$(ProjectName)\libexpat.pch</PrecompiledHeaderOutputFile>
-      <ObjectFileName>.\..\..\..\Temp\$(SolutionName)\$(Configuration)\x86\$(ProjectName)\</ObjectFileName>
-      <ProgramDataBaseFileName>.\..\..\..\Temp\$(SolutionName)\$(Configuration)\x86\$(ProjectName)\</ProgramDataBaseFileName>
-    </ClCompile>
-    <ResourceCompile>
-      <Culture>0x0409</Culture>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ResourceCompile>
-    <Bscmake>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <OutputFile>.\..\..\..\Temp\$(SolutionName)\$(Configuration)\x86\$(ProjectName)\libexpat.bsc</OutputFile>
-    </Bscmake>
-    <Lib>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <OutputFile>.\..\..\..\Temp\$(SolutionName)\$(Configuration)\x86\$(ProjectName)\libexpat.lib</OutputFile>
-    </Lib>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='UnityRelease|x64'">
-    <ClCompile>
-      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
-      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
-      <StringPooling>true</StringPooling>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <Optimization>MaxSpeed</Optimization>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <WarningLevel>Level3</WarningLevel>
-      <PreprocessorDefinitions>WIN64;_WINDOWS;NDEBUG;_LIB;COMPILED_FROM_DSP;XML_STATIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AssemblerListingLocation>.\..\..\..\Temp\$(SolutionName)\$(Configuration)\x64\$(ProjectName)\</AssemblerListingLocation>
-      <PrecompiledHeaderOutputFile>.\..\..\..\Temp\$(SolutionName)\$(Configuration)\x64\$(ProjectName)\libexpat.pch</PrecompiledHeaderOutputFile>
-      <ObjectFileName>.\..\..\..\Temp\$(SolutionName)\$(Configuration)\x64\$(ProjectName)\</ObjectFileName>
-      <ProgramDataBaseFileName>.\..\..\..\Temp\$(SolutionName)\$(Configuration)\x64\$(ProjectName)\</ProgramDataBaseFileName>
-    </ClCompile>
-    <ResourceCompile>
-      <Culture>0x0409</Culture>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ResourceCompile>
-    <Bscmake>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <OutputFile>.\..\..\..\Temp\$(SolutionName)\$(Configuration)\x64\$(ProjectName)\libexpat.bsc</OutputFile>
-    </Bscmake>
-    <Lib>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <OutputFile>.\..\..\..\Temp\$(SolutionName)\$(Configuration)\x64\$(ProjectName)\libexpat.lib</OutputFile>
-    </Lib>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="xmlparse.c" />
-    <ClCompile Include="xmlrole.c" />
-    <ClCompile Include="xmltok.c" />
-    <ClCompile Include="xmltok_impl.c" />
-    <ClCompile Include="xmltok_ns.c" />
-  </ItemGroup>
-  <ItemGroup>
-    <ClInclude Include="ascii.h" />
-    <ClInclude Include="asciitab.h" />
-    <ClInclude Include="expat.h" />
-    <ClInclude Include="expat_external.h" />
-    <ClInclude Include="iasciitab.h" />
-    <ClInclude Include="internal.h" />
-    <ClInclude Include="latin1tab.h" />
-    <ClInclude Include="nametab.h" />
-    <ClInclude Include="utf8tab.h" />
-    <ClInclude Include="xmlrole.h" />
-    <ClInclude Include="xmltok.h" />
-    <ClInclude Include="xmltok_impl.h" />
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>

+ 0 - 2
libs/expat/lib/winconfig.h

@@ -10,9 +10,7 @@
 #ifndef WINCONFIG_H
 #define WINCONFIG_H
 
-#ifndef WIN32_LEAN_AND_MEAN
 #define WIN32_LEAN_AND_MEAN
-#endif
 #include <windows.h>
 #undef WIN32_LEAN_AND_MEAN
 

+ 0 - 3
libs/expat/lib/xmltok_impl.c

@@ -1748,9 +1748,6 @@ PREFIX(updatePosition)(const ENCODING *enc,
     switch (BYTE_TYPE(enc, ptr)) {
 #define LEAD_CASE(n) \
     case BT_LEAD ## n: \
-      if (end - ptr < n) { \
-        return; \
-      } \
       ptr += n; \
       break;
     LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4)

+ 0 - 284
libs/mfc/include/Chs/afxctl.rc

@@ -1,284 +0,0 @@
-// This is a part of the Microsoft Foundation Classes C++ library.
-// Copyright (C) 1992-1998 Microsoft Corporation
-// All rights reserved.
-//
-// This source code is only intended as a supplement to the
-// Microsoft Foundation Classes Reference and related
-// electronic documentation provided with the library.
-// See these sources for detailed information regarding the
-// Microsoft Foundation Classes product.
-
-#ifndef __AFXCTL_RC__
-#define __AFXCTL_RC__
-
-#ifndef __AFXRES_H__
-	#include <afxres.h>
-#endif
-
-#ifdef APSTUDIO_INVOKED
-// This will prevent the VC++ Resource Editor user from saving this file
-1 TEXTINCLUDE DISCARDABLE
-BEGIN
-"< 不能更改标准 MFC 资源! >\0"
-END
-#endif    // APSTUDIO_INVOKED
-
-#ifndef _AFXDLL
-
-/////////////////////////////////////////////////////////////////////////////
-// OLE Control Resources
-
-#ifndef _AFX_NO_STOCKPPG_RESOURCES
-/////////////////////////////////////////////////////////////////////////////
-//
-// Bitmap
-//
-
-AFX_IDB_TRUETYPE        BITMAP  DISCARDABLE     "RES\\TRUETYPE.BMP"
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Dialog
-//
-
-AFX_IDD_PROPPAGE_FONT DIALOG DISCARDABLE  13, 54, 250, 110
-STYLE WS_CHILD | 0x4
-FONT 8, "MS Shell Dlg"
-BEGIN
-	LTEXT           "特性名(&N)",IDC_STATIC,3,5,61,8
-	COMBOBOX        AFX_IDC_FONTPROP,65,3,100,71,CBS_DROPDOWNLIST | CBS_SORT |
-					WS_VSCROLL | WS_TABSTOP
-	LTEXT           "字体(&F)",IDC_STATIC,3,19,91,8
-	COMBOBOX        AFX_IDC_FONTNAMES,3,29,91,77,CBS_SIMPLE |
-					CBS_OWNERDRAWFIXED | CBS_AUTOHSCROLL | CBS_SORT |
-					CBS_HASSTRINGS | CBS_DISABLENOSCROLL | WS_VSCROLL |
-					WS_TABSTOP
-	LTEXT           "字形(&Y)",IDC_STATIC,102,19,53,8
-	COMBOBOX        AFX_IDC_FONTSTYLES,104,29,53,53,CBS_DROPDOWNLIST |
-					CBS_DISABLENOSCROLL | WS_VSCROLL | WS_TABSTOP
-	LTEXT           "大小(&S)",IDC_STATIC,167,19,40,8
-	COMBOBOX        AFX_IDC_FONTSIZES,167,29,36,53,CBS_DROPDOWN | CBS_SORT |
-					CBS_DISABLENOSCROLL | WS_VSCROLL | WS_TABSTOP
-	GROUPBOX        "效果",IDC_STATIC,104,44,142,24,WS_GROUP
-	CONTROL         "删除线(&K)",AFX_IDC_STRIKEOUT,"Button",BS_AUTOCHECKBOX |
-					WS_TABSTOP,109,55,65,10
-	CONTROL         "下划线(&U)",AFX_IDC_UNDERLINE,"Button",BS_AUTOCHECKBOX |
-					WS_TABSTOP,175,55,65,10
-	GROUPBOX        "字体范例",IDC_STATIC,104,71,142,36,WS_GROUP
-	CTEXT           "AaBbYyZz",AFX_IDC_SAMPLEBOX,110,80,130,22,SS_NOPREFIX |
-					NOT WS_VISIBLE
-END
-
-AFX_IDD_PROPPAGE_COLOR DIALOG DISCARDABLE  0, 0, 250, 62
-STYLE WS_CHILD | 0x4
-FONT 8, "MS Shell Dlg"
-BEGIN
-	LTEXT           "特性名(&N)",IDC_STATIC,3,3,100,8
-	COMBOBOX        AFX_IDC_COLORPROP,3,13,100,54,CBS_DROPDOWNLIST |
-					CBS_SORT | WS_VSCROLL | WS_TABSTOP
-	LTEXT           "系统颜色(&C)",IDC_STATIC,3,29,100,8
-	COMBOBOX        AFX_IDC_SYSTEMCOLORS,3,39,100,54,CBS_DROPDOWNLIST |
-					CBS_SORT | WS_VSCROLL | WS_TABSTOP
-	CONTROL         "",AFX_IDC_COLOR_BLACK,"Button",BS_OWNERDRAW | WS_GROUP |
-					WS_TABSTOP,118,4,15,11
-	CONTROL         "",AFX_IDC_COLOR_BLUE,"Button",BS_OWNERDRAW,138,4,15,11
-	CONTROL         "",AFX_IDC_COLOR_CYAN,"Button",BS_OWNERDRAW,158,4,15,11
-	CONTROL         "",AFX_IDC_COLOR_DARKBLUE,"Button",BS_OWNERDRAW,178,4,15,
-					11
-	CONTROL         "",AFX_IDC_COLOR_DARKCYAN,"Button",BS_OWNERDRAW,118,18,
-					15,11
-	CONTROL         "",AFX_IDC_COLOR_DARKGREEN,"Button",BS_OWNERDRAW,138,18,
-					15,11
-	CONTROL         "",AFX_IDC_COLOR_DARKMAGENTA,"Button",BS_OWNERDRAW,158,
-					18,15,11
-	CONTROL         "",AFX_IDC_COLOR_GRAY,"Button",BS_OWNERDRAW,178,18,15,11
-	CONTROL         "",AFX_IDC_COLOR_DARKRED,"Button",BS_OWNERDRAW,118,32,15,
-					11
-	CONTROL         "",AFX_IDC_COLOR_GREEN,"Button",BS_OWNERDRAW,138,32,15,
-					11
-	CONTROL         "",AFX_IDC_COLOR_LIGHTBROWN,"Button",BS_OWNERDRAW,158,32,
-					15,11
-	CONTROL         "",AFX_IDC_COLOR_LIGHTGRAY,"Button",BS_OWNERDRAW,178,32,
-					15,11
-	CONTROL         "",AFX_IDC_COLOR_MAGENTA,"Button",BS_OWNERDRAW,118,46,15,
-					11
-	CONTROL         "",AFX_IDC_COLOR_RED,"Button",BS_OWNERDRAW,138,46,15,11
-	CONTROL         "",AFX_IDC_COLOR_WHITE,"Button",BS_OWNERDRAW,158,46,15,
-					11
-	CONTROL         "",AFX_IDC_COLOR_YELLOW,"Button",BS_OWNERDRAW,178,46,15,
-					11
-END
-
-AFX_IDD_PROPPAGE_PICTURE DIALOG DISCARDABLE  0, 0, 250, 62
-STYLE WS_CHILD | 0x4
-FONT 8, "MS Shell Dlg"
-BEGIN
-	LTEXT           "特性名(&N)",IDC_STATIC,3,3,100,8
-	COMBOBOX        AFX_IDC_PROPNAME,3,13,100,30,CBS_DROPDOWNLIST | CBS_SORT |
-					WS_VSCROLL | WS_TABSTOP
-	PUSHBUTTON      "浏览(&B)...",AFX_IDC_BROWSE,3,35,54,14
-	PUSHBUTTON      "清除(&C)",AFX_IDC_CLEAR,61,35,54,14
-	RTEXT           "预阅:",IDC_STATIC,107,3,42,16
-	CONTROL         "",AFX_IDC_PICTURE,"Static",SS_BLACKFRAME,151,4,93,54
-END
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Dialog Info
-//
-
-AFX_IDD_PROPPAGE_FONT DLGINIT
-BEGIN
-	1002, 0x403, 12, 0
-0x6f42, 0x646c, 0x4920, 0x6174, 0x696c, 0x0063,
-	0
-END
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// String Table
-//
-
-STRINGTABLE DISCARDABLE
-BEGIN
-	AFX_IDS_PROPPAGE_UNKNOWN "(未知)"
-	AFX_IDS_COLOR_DESKTOP   "台式"
-	AFX_IDS_COLOR_APPWORKSPACE "应用程序工作区"
-	AFX_IDS_COLOR_WNDBACKGND "窗口背景"
-	AFX_IDS_COLOR_WNDTEXT   "窗口文本"
-	AFX_IDS_COLOR_MENUBAR   "菜单栏"
-	AFX_IDS_COLOR_MENUTEXT  "菜单文字"
-	AFX_IDS_COLOR_ACTIVEBAR "活动的标题栏"
-	AFX_IDS_COLOR_INACTIVEBAR "不活动的标题栏"
-	AFX_IDS_COLOR_ACTIVETEXT "活动的标题栏文字"
-	AFX_IDS_COLOR_INACTIVETEXT "不活动的标题栏文字"
-	AFX_IDS_COLOR_ACTIVEBORDER "活动边框"
-	AFX_IDS_COLOR_INACTIVEBORDER "不活动边框"
-END
-#endif // !_AFX_NO_STOCKPPG_RESOURCES
-
-STRINGTABLE DISCARDABLE
-BEGIN
-#ifndef _AFX_NO_STOCKPPG_RESOURCES
-	AFX_IDS_COLOR_WNDFRAME  "窗口框架"
-	AFX_IDS_COLOR_SCROLLBARS "卷动条"
-	AFX_IDS_COLOR_BTNFACE   "按钮表面"
-	AFX_IDS_COLOR_BTNSHADOW "按钮阴影"
-	AFX_IDS_COLOR_BTNTEXT   "按钮文字"
-	AFX_IDS_COLOR_BTNHIGHLIGHT "按钮突出"
-	AFX_IDS_COLOR_DISABLEDTEXT "失效文字"
-	AFX_IDS_COLOR_HIGHLIGHT "突出"
-	AFX_IDS_COLOR_HIGHLIGHTTEXT "突出的文字"
-	AFX_IDS_REGULAR         "正常体"
-	AFX_IDS_BOLD            "黑体"
-	AFX_IDS_ITALIC          "斜体"
-	AFX_IDS_BOLDITALIC      "黑斜体"
-	AFX_IDS_SAMPLETEXT      "AaBbYyZz"
-#endif // !_AFX_NO_STOCKPPG_RESOURCES
-	AFX_IDS_DISPLAYSTRING_FONT "(字体)"
-	AFX_IDS_DISPLAYSTRING_COLOR "(颜色)"
-END
-
-STRINGTABLE DISCARDABLE
-BEGIN
-	AFX_IDS_DISPLAYSTRING_PICTURE "(图片 - %s)"
-#ifndef _AFX_NO_STOCKPPG_RESOURCES
-	AFX_IDS_PICTUREFILTER   "所有图片类型|*.bmp;*.cur;*.dib;*.emf;*.ico;*.wmf|Bitmaps (*.bmp;*.dib)|*.bmp;*.dib|Icons/Cursors (*.ico;*.cur)|*.ico;*.cur|Metafiles (*.wmf;*.emf)|*.wmf;*.emf|所有文件(*.*)|*.*||"
-#endif // !_AFX_NO_STOCKPPG_RESOURCES
-	AFX_IDS_PICTYPE_UNKNOWN "未知"
-	AFX_IDS_PICTYPE_NONE    "无"
-	AFX_IDS_PICTYPE_BITMAP  "位图"
-	AFX_IDS_PICTYPE_METAFILE "元文件"
-	AFX_IDS_PICTYPE_ICON    "图标"
-#ifndef _AFX_NO_STOCKPPG_RESOURCES
-	AFX_IDS_COLOR_PPG       "颜色特性页"
-	AFX_IDS_COLOR_PPG_CAPTION "颜色"
-	AFX_IDS_FONT_PPG        "字体特性页"
-	AFX_IDS_FONT_PPG_CAPTION "字体"
-	AFX_IDS_PICTURE_PPG     "图片特性页"
-	AFX_IDS_PICTURE_PPG_CAPTION "图片"
-#endif // !_AFX_NO_STOCKPPG_RESOURCES
-	AFX_IDS_BORDERSTYLE_0   "0 - 无"
-	AFX_IDS_BORDERSTYLE_1   "1 - 固定单个"
-END
-
-STRINGTABLE DISCARDABLE
-BEGIN
-	AFX_IDS_VERB_EDIT       "编辑(&E)"
-	AFX_IDS_VERB_PROPERTIES "特性(&P)..."
-END
-
-#ifndef _AFX_NO_STOCKPPG_RESOURCES
-STRINGTABLE DISCARDABLE
-BEGIN
-	AFX_IDP_PICTURECANTOPEN "无法打开图片文件 %1。此文件可能不存在或不可读。"
-	AFX_IDP_PICTURECANTLOAD "无法装入图片文件 %1。该文件可能格式不正确。"
-	AFX_IDP_PICTURETOOLARGE "无法装入图片文件 %1。该文件太大内存无法容纳。"
-	AFX_IDP_PICTUREREADFAILED
-							"无法装入图片文件 %1。未予具体说明的读操作失败。"
-END
-
-STRINGTABLE DISCARDABLE
-BEGIN
-	AFX_IDS_PICTUREBROWSETITLE "浏览图片"
-END
-#endif // !_AFX_NO_STOCKPPG_RESOURCES
-
-#ifndef _AFX_NO_CTLERROR_RESOURCES
-STRINGTABLE DISCARDABLE
-BEGIN
-	AFX_IDP_E_ILLEGALFUNCTIONCALL "非法函数调用"
-	AFX_IDP_E_OVERFLOW      "溢出"
-	AFX_IDP_E_OUTOFMEMORY   "内存不足"
-	AFX_IDP_E_DIVISIONBYZERO "被零除"
-	AFX_IDP_E_OUTOFSTRINGSPACE "字符串空间不足"
-	AFX_IDP_E_OUTOFSTACKSPACE "堆栈空间不足"
-	AFX_IDP_E_BADFILENAMEORNUMBER "文件名或文件号错"
-	AFX_IDP_E_FILENOTFOUND  "文件未找到"
-	AFX_IDP_E_BADFILEMODE   "文件模式错"
-	AFX_IDP_E_FILEALREADYOPEN "文件已经打开"
-	AFX_IDP_E_DEVICEIOERROR "设备输入/输出出错"
-	AFX_IDP_E_FILEALREADYEXISTS "文件已经存在"
-	AFX_IDP_E_BADRECORDLENGTH "记录长度错"
-	AFX_IDP_E_DISKFULL      "磁盘已满"
-	AFX_IDP_E_BADRECORDNUMBER "记录号码错"
-	AFX_IDP_E_BADFILENAME   "文件名错"
-END
-
-STRINGTABLE DISCARDABLE
-BEGIN
-	AFX_IDP_E_TOOMANYFILES  "文件太多"
-	AFX_IDP_E_DEVICEUNAVAILABLE "设备不适合"
-	AFX_IDP_E_PERMISSIONDENIED "未获得许可"
-	AFX_IDP_E_DISKNOTREADY  "磁盘未准备好"
-	AFX_IDP_E_PATHFILEACCESSERROR "路径/文件访问错误"
-	AFX_IDP_E_PATHNOTFOUND  "没有找到路径"
-	AFX_IDP_E_INVALIDPATTERNSTRING "无效的字符串型样"
-	AFX_IDP_E_INVALIDUSEOFNULL "空值使用不当"
-	AFX_IDP_E_INVALIDFILEFORMAT "无效的文件格式"
-	AFX_IDP_E_INVALIDPROPERTYVALUE "无效的特性值"
-	AFX_IDP_E_INVALIDPROPERTYARRAYINDEX "无效的数组下标"
-	AFX_IDP_E_SETNOTSUPPORTEDATRUNTIME "该特性在运行时刻不能设置"
-	AFX_IDP_E_SETNOTSUPPORTED "该特性为只读特性"
-	AFX_IDP_E_NEEDPROPERTYARRAYINDEX
-							"使用特性数组时必须指明数组下标"
-	AFX_IDP_E_SETNOTPERMITTED "不可在这个控制上设置特性"
-	AFX_IDP_E_GETNOTSUPPORTEDATRUNTIME "该特性不可在运行时刻读取"
-END
-
-STRINGTABLE DISCARDABLE
-BEGIN
-	AFX_IDP_E_GETNOTSUPPORTED "该特性为只写特性"
-	AFX_IDP_E_PROPERTYNOTFOUND "没有找到特性"
-	AFX_IDP_E_INVALIDCLIPBOARDFORMAT "无效的剪贴板格式"
-	AFX_IDP_E_INVALIDPICTURE "无效图片"
-	AFX_IDP_E_PRINTERERROR  "打印机出错"
-	AFX_IDP_E_CANTSAVEFILETOTEMP
-							"无法创建存贮过程所需要的临时文件"
-	AFX_IDP_E_SEARCHTEXTNOTFOUND "没有找到要查找的文本"
-	AFX_IDP_E_REPLACEMENTSTOOLONG "要替换的文本太长"
-END
-#endif //!_AFX_NO_CTLERROR_RESOURCES
-
-#endif //!_AFXDLL
-#endif //__AFXOLECL_RC__

+ 0 - 105
libs/mfc/include/Chs/afxdb.rc

@@ -1,105 +0,0 @@
-// This is a part of the Microsoft Foundation Classes C++ library.
-// Copyright (C) 1992-1998 Microsoft Corporation
-// All rights reserved.
-//
-// This source code is only intended as a supplement to the
-// Microsoft Foundation Classes Reference and related
-// electronic documentation provided with the library.
-// See these sources for detailed information regarding the
-// Microsoft Foundation Classes product.
-
-#ifndef __AFXDB_RC__
-#define __AFXDB_RC__
-
-#ifndef __AFXRES_H__
-	#include <afxres.h>
-#endif
-
-#ifdef APSTUDIO_INVOKED
-// This will prevent the VC++ Resource Editor user from saving this file
-1 TEXTINCLUDE DISCARDABLE
-BEGIN
-"< 不能更改标准 MFC 资源! >\0"
-END
-#endif    // APSTUDIO_INVOKED
-
-#ifndef _AFXDLL
-
-/////////////////////////////////////////////////////////////////////////////
-// Database Resources
-
-// Database strings
-STRINGTABLE DISCARDABLE
-BEGIN
-	AFX_IDP_SQL_CONNECT_FAIL
-		"试图连接数据源失败"
-	AFX_IDP_SQL_RECORDSET_FORWARD_ONLY
-		"记录集仅支持向前移动。"
-	AFX_IDP_SQL_EMPTY_COLUMN_LIST
-		"试图打开表格失败—未指明要检索的列。"
-	AFX_IDP_SQL_FIELD_SCHEMA_MISMATCH
-		"查询返回的列数据类型与期望不符。"
-	AFX_IDP_SQL_ILLEGAL_MODE "更新或删除的企图失败了。"
-	AFX_IDP_SQL_MULTIPLE_ROWS_AFFECTED "多行数据被更新。"
-	AFX_IDP_SQL_NO_CURRENT_RECORD "操作失败,无当前记录。"
-	AFX_IDP_SQL_NO_ROWS_AFFECTED
-		"更新或删除操作未涉及任何数据行。"
-	AFX_IDP_SQL_RECORDSET_READONLY "记录集是只读"
-	AFX_IDP_SQL_SQL_NO_TOTAL
-		"ODBC 驱动程序不支持 Microsoft 基础类长二进制数据模型。"
-	AFX_IDP_SQL_ODBC_LOAD_FAILED
-		"装入所需的 ODBC32.DLL 部件的企图失败。"
-	AFX_IDP_SQL_DYNASET_NOT_SUPPORTED
-		"ODBC 驱动程序不支持动态记录集。"
-	AFX_IDP_SQL_SNAPSHOT_NOT_SUPPORTED
-		"要支持快照功能,ODBC 静态游标是必要的。"
-	AFX_IDP_SQL_API_CONFORMANCE
-		"ODBC 驱动程序与 Microsoft 基础类数据库类不匹配 (API_CONFORMANCE >= SQL_OAC_LEVEL1 必须成立)。"
-	AFX_IDP_SQL_SQL_CONFORMANCE
-		"ODBC 驱动程序与 Microsoft 基础类数据库类不匹配 (API_CONFORMANCE >= SQL_OAC_MINIMUM 必须成立)。"
-	AFX_IDP_SQL_NO_DATA_FOUND
-		"试图越过数据的有效存贮区间。"
-	AFX_IDP_SQL_ROW_UPDATE_NOT_SUPPORTED
-		"ODBC 驱动程序不支持动态记录集。"
-	AFX_IDP_SQL_ODBC_V2_REQUIRED
-		"需要符合 ODBC 的二级标准的驱动程序。"
-	AFX_IDP_SQL_NO_POSITIONED_UPDATES
-		"ODBC 驱动程序不支持定位更新。"
-	AFX_IDP_SQL_LOCK_MODE_NOT_SUPPORTED
-		"不支持所要求的锁模式。"
-	AFX_IDP_SQL_DATA_TRUNCATED
-		"数据被截断。"
-	AFX_IDP_SQL_ROW_FETCH
-		"检索记录出错。"
-	AFX_IDP_SQL_INCORRECT_ODBC
-		"没有找到所需的 ODBC 进入点。确保 ODBC 安装正确。"
-	AFX_IDP_SQL_UPDATE_DELETE_FAILED
-		"更新或删除操作失败。"
-	AFX_IDP_SQL_DYNAMIC_CURSOR_NOT_SUPPORTED
-		"“ODBC驱动程序不支持动态指针。”"
-	AFX_IDP_SQL_FIELD_NOT_FOUND
-		"无效的字段名或字段索引。"
-	AFX_IDP_SQL_BOOKMARKS_NOT_SUPPORTED
-		"书签不被 ODBC 驱动程序支持。"
-	AFX_IDP_SQL_BOOKMARKS_NOT_ENABLED
-		"书签在记录集中未激活。"
-	AFX_IDP_DAO_ENGINE_INITIALIZATION
-		"“无法对DAO/Jet db引擎进行初始化。”"
-	AFX_IDP_DAO_DFX_BIND
-		"“错的DFX值参数。”"
-	AFX_IDP_DAO_OBJECT_NOT_OPEN
-		"“DAO TableDef或QueryDef没有打开。”"
-	AFX_IDP_DAO_ROWTOOSHORT
-		"“GetRows 失败。分配给行的内存不够。”"
-	AFX_IDP_DAO_BADBINDINFO
-		"“GetRows 赋值错误。可能是数据类型不匹配造成的。”"
-	AFX_IDP_DAO_COLUMNUNAVAILABLE
-		"“GetRows 失败。所请求的列不是该记录值的一个成分。”"
-
-	AFX_IDS_DELETED "<已删除>"
-END
-
-/////////////////////////////////////////////////////////////////////////////
-
-#endif //!_AFXDLL
-#endif //__AFXDB_RC__

+ 0 - 66
libs/mfc/include/Chs/afxolecl.rc

@@ -1,66 +0,0 @@
-// This is a part of the Microsoft Foundation Classes C++ library.
-// Copyright (C) 1992-1998 Microsoft Corporation
-// All rights reserved.
-//
-// This source code is only intended as a supplement to the
-// Microsoft Foundation Classes Reference and related
-// electronic documentation provided with the library.
-// See these sources for detailed information regarding the
-// Microsoft Foundation Classes product.
-
-#ifndef __AFXOLECL_RC__
-#define __AFXOLECL_RC__
-
-#ifndef __AFXRES_H__
-	#include <afxres.h>
-#endif
-
-#ifndef _INC_DLGS
-	#include <dlgs.h>
-#endif
-
-#ifdef APSTUDIO_INVOKED
-// This will prevent the VC++ Resource Editor user from saving this file
-1 TEXTINCLUDE DISCARDABLE
-BEGIN
-"< 不能更改标准 MFC 资源! >\0"
-END
-#endif    // APSTUDIO_INVOKED
-
-#ifndef _AFXDLL
-
-/////////////////////////////////////////////////////////////////////////////
-// OLE Client Resources
-
-/////////////////////////////////////////////////////////////////////////////
-// OLE strings
-
-STRINGTABLE DISCARDABLE
-BEGIN
-	AFX_IDP_STATIC_OBJECT           "无法激活静止的 AciveX 对象。"
-	AFX_IDP_FAILED_TO_CONNECT       "连接失败。\n链接可能已经断了。"
-	AFX_IDP_SERVER_BUSY             "无法处理命令,服务器程序正忙。"
-	AFX_IDP_BAD_VERB                "执行服务器程序操作失败。"
-	AFX_IDP_FAILED_TO_LAUNCH        "启动服务器应用程序失败。"
-	AFX_IDS_UPDATING_ITEMS          "更新 ActiveX 对象"
-	AFX_IDP_FAILED_TO_CONVERT       "转换 ActiveX 对象失败。"
-	AFX_IDP_ASK_TO_DISCARD          "当正在退出 Windows 时,无法保存 ActiveX 对象!\n放弃对 %1 所做的所有的修改吗?"
-	AFX_IDP_FAILED_TO_CREATE        "创建对象失败。请确认应用程序已在系统注册表中注册。"
-
-	AFX_IDS_METAFILE_FORMAT         "图片(元文件)\n一幅图片"
-	AFX_IDS_DIB_FORMAT              "设备独立位图\n一幅设备独立位图"
-	AFX_IDS_BITMAP_FORMAT           "位图\n一幅位图"
-	AFX_IDS_LINKSOURCE_FORMAT       "%s\n%s"
-	AFX_IDS_EMBED_FORMAT            "%s\n%s"
-	AFX_IDS_RTF_FORMAT              "强化文本(RTF)\n字体和段落格式化的文本"
-	AFX_IDS_TEXT_FORMAT             "未格式化文本\n未经过任何格式化的文本"
-
-	AFX_IDS_INVALID_CURRENCY        "无效的货币。"
-	AFX_IDS_INVALID_DATETIME        "无效的日期时间。"
-	AFX_IDS_INVALID_DATETIMESPAN    "无效的日期时间跨度。"
-END
-
-/////////////////////////////////////////////////////////////////////////////
-
-#endif //!_AFXDLL
-#endif //__AFXOLECL_RC__

+ 0 - 53
libs/mfc/include/Chs/afxolesv.rc

@@ -1,53 +0,0 @@
-// This is a part of the Microsoft Foundation Classes C++ library.
-// Copyright (C) 1992-1998 Microsoft Corporation
-// All rights reserved.
-//
-// This source code is only intended as a supplement to the
-// Microsoft Foundation Classes Reference and related
-// electronic documentation provided with the library.
-// See these sources for detailed information regarding the
-// Microsoft Foundation Classes product.
-
-#ifndef __AFXOLESV_RC__
-#define __AFXOLESV_RC__
-
-#ifndef __AFXRES_H__
-	#include <afxres.h>
-#endif
-
-#ifdef APSTUDIO_INVOKED
-// This will prevent the VC++ Resource Editor user from saving this file
-1 TEXTINCLUDE DISCARDABLE
-BEGIN
-"< 不能更改标准 MFC 资源! >\0"
-END
-#endif    // APSTUDIO_INVOKED
-
-#ifndef _AFXDLL
-
-/////////////////////////////////////////////////////////////////////////////
-// OLE Server Resources
-
-// OLE strings
-STRINGTABLE DISCARDABLE
-BEGIN
-	AFX_IDP_ASK_TO_UPDATE,              "在继续运行前对 %1 进行更新?"
-	AFX_IDP_FAILED_TO_UPDATE,           "不能更新客户。"
-
-	AFX_IDP_FAILED_TO_REGISTER,         "注册失败。ActiveX 功能无法正确使用。"
-	AFX_IDP_FAILED_TO_AUTO_REGISTER,    "更新系统注册记录失败。\n请试用 REGEDIT。"
-END
-
-STRINGTABLE PRELOAD
-BEGIN
-	AFX_IDS_APP_TITLE_EMBEDDING,        "%1 在 %2 中"
-	AFX_IDS_OBJ_TITLE_INPLACE,          "%1 - %2"
-	AFX_IDS_EXIT_MENU,                  "退出并回到 %1(&X)"
-	AFX_IDS_UPDATE_MENU,                "更新 %1(&U)"
-	AFX_IDS_SAVEFILECOPY,               "保存副本为"
-END
-
-/////////////////////////////////////////////////////////////////////////////
-
-#endif //!_AFXDLL
-#endif //__AFXOLESV_RC__

+ 0 - 90
libs/mfc/include/Chs/afxprint.rc

@@ -1,90 +0,0 @@
-// This is a part of the Microsoft Foundation Classes C++ library.
-// Copyright (C) 1992-1998 Microsoft Corporation
-// All rights reserved.
-//
-// This source code is only intended as a supplement to the
-// Microsoft Foundation Classes Reference and related
-// electronic documentation provided with the library.
-// See these sources for detailed information regarding the
-// Microsoft Foundation Classes product.
-
-#ifndef __AFXPRINT_RC__
-#define __AFXPRINT_RC__
-
-#ifndef __AFXRES_H__
-	#include <afxres.h>
-#endif
-
-#ifdef APSTUDIO_INVOKED
-// This will prevent the VC++ Resource Editor user from saving this file
-1 TEXTINCLUDE DISCARDABLE
-BEGIN
-"< 不能更改标准 MFC 资源! >\0"
-END
-#endif    // APSTUDIO_INVOKED
-
-#ifndef _AFXDLL
-
-/////////////////////////////////////////////////////////////////////////////
-// Printing Resources
-
-AFX_IDC_MAGNIFY         CURSOR  DISCARDABLE     "res\\magnify.cur"
-
-AFX_IDD_PRINTDLG DIALOG DISCARDABLE  6, 18, 133, 95
-STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | 0x04
-FONT 8, "MS Shell Dlg"
-BEGIN
-	CTEXT           "打印",IDC_STATIC,0,9,133,8
-	CTEXT           "",AFX_IDC_PRINT_DOCNAME,0,19,133,8
-	CTEXT           "在...上",IDC_STATIC,0,29,133,8
-	CTEXT           "",AFX_IDC_PRINT_PRINTERNAME,0,39,133,8
-	CTEXT           "",AFX_IDC_PRINT_PORTNAME,0,49,133,8
-	CTEXT           "",AFX_IDC_PRINT_PAGENUM,0,59,133,8
-	PUSHBUTTON      "取消",IDCANCEL,46,74,40,14
-END
-
-// Preview Toolbar Dialog
-AFX_IDD_PREVIEW_TOOLBAR DIALOG PRELOAD DISCARDABLE  0, 0, 330, 16
-STYLE WS_CHILD | 0x04
-FONT 8, "MS Shell Dlg"
-BEGIN
-	PUSHBUTTON      "打印(&P)...",AFX_ID_PREVIEW_PRINT,2,2,44,12
-	PUSHBUTTON      "下一页(&N)",AFX_ID_PREVIEW_NEXT,48,2,44,12
-	PUSHBUTTON      "前一页(&V)",AFX_ID_PREVIEW_PREV,94,2,44,12
-	PUSHBUTTON      "",AFX_ID_PREVIEW_NUMPAGE,140,2,44,12
-	PUSHBUTTON      "放大(&I)",AFX_ID_PREVIEW_ZOOMIN,186,2,44,12
-	PUSHBUTTON      "缩小(&O)",AFX_ID_PREVIEW_ZOOMOUT,232,2,44,12
-	PUSHBUTTON      "关闭(&C)",AFX_ID_PREVIEW_CLOSE,278,2,44,12
-END
-
-// Printing strings
-STRINGTABLE DISCARDABLE
-BEGIN
-	// print progress dialog strings
-	AFX_IDS_PRINTONPORT,            "于 %1"         // for print output
-	AFX_IDS_ONEPAGE,                "一页(&O)"     // for preview button
-	AFX_IDS_TWOPAGE,                "两页(&T)"     // for preview button
-	AFX_IDS_PRINTPAGENUM,           "第 %u 页"       // for print output
-	AFX_IDS_PREVIEWPAGEDESC,        "第 %u 页 \n第 %u 页-第 %u 页 \n"
-
-	// print to file dialog strings
-	AFX_IDS_PRINTDEFAULTEXT,        "prn"           // default extension
-	AFX_IDS_PRINTDEFAULT,           "Output.prn"    // default file
-	AFX_IDS_PRINTFILTER,
-		"打印机文件 (*.prn)|*.prn|所有文件 (*.*)|*.*||"
-	AFX_IDS_PRINTCAPTION,           "印出到文件" // caption for browse dlg
-	AFX_IDS_PRINTTOFILE,            "到 %1"         // to file
-END
-
-// Print Preview Accelerator Table
-AFX_IDR_PREVIEW_ACCEL ACCELERATORS LOADONCALL MOVEABLE
-BEGIN
-	VK_NEXT,    AFX_ID_PREVIEW_NEXT,    VIRTKEY, NOINVERT
-	VK_PRIOR,   AFX_ID_PREVIEW_PREV,    VIRTKEY, NOINVERT
-	VK_ESCAPE,  AFX_ID_PREVIEW_CLOSE,   VIRTKEY, NOINVERT
-END
-
-/////////////////////////////////////////////////////////////////////////////
-
-#endif //!_AFXDLL
-#endif //__AFXPRINT_RC__

+ 0 - 202
libs/mfc/include/Chs/afxres.rc

@@ -1,202 +0,0 @@
-// This is a part of the Microsoft Foundation Classes C++ library.
-// Copyright (C) 1992-1998 Microsoft Corporation
-// All rights reserved.
-//
-// This source code is only intended as a supplement to the
-// Microsoft Foundation Classes Reference and related
-// electronic documentation provided with the library.
-// See these sources for detailed information regarding the
-// Microsoft Foundation Classes product.
-
-#ifndef __AFXRES_RC__
-#define __AFXRES_RC__
-
-#ifndef __AFXRES_H__
-	#include <afxres.h>
-#endif
-
-#ifdef APSTUDIO_INVOKED
-// This will prevent the VC++ Resource Editor user from saving this file
-1 TEXTINCLUDE DISCARDABLE
-BEGIN
-"< 不能更改标准 MFC 资源! >\0"
-END
-#endif //APSTUDIO_INVOKED
-
-#ifndef _AFXDLL
-
-/////////////////////////////////////////////////////////////////////////////
-// Default resource description for MFC applications
-/////////////////////////////////////////////////////////////////////////////
-
-/////////////////////////////////////////////////////////////////////////////
-// Strings
-
-STRINGTABLE DISCARDABLE
-BEGIN
-#ifndef _AFX_NO_APPMENU_RESOURCES
-	AFX_IDS_OPENFILE,               "打开"
-	AFX_IDS_SAVEFILE,               "保存为"
-	AFX_IDS_ALLFILTER,              "所有文件 (*.*)"
-	AFX_IDS_UNTITLED,               "无标题"
-	AFX_IDS_HIDE,                   "隐藏(&H)"
-#endif // !_AFX_NO_APPMENUSTRING_RESOURCES
-
-	AFX_IDS_MEMORY_EXCEPTION,       "内存不足。"
-	AFX_IDS_NOT_SUPPORTED_EXCEPTION,"试图执行系统不支持的操作。"
-	AFX_IDS_RESOURCE_EXCEPTION,     "必需的资源无法得到。"
-	AFX_IDS_USER_EXCEPTION,         "出现了未知的错误"
-
-	// General error prompts
-#ifndef _AFX_NO_FILECMD_RESOURCES
-	AFX_IDP_INVALID_FILENAME,       "无效的文件名。"
-	AFX_IDP_FAILED_TO_OPEN_DOC,     "打开文档失败。"
-	AFX_IDP_FAILED_TO_SAVE_DOC,     "保存文档失败。"
-	AFX_IDP_ASK_TO_SAVE,            "将改动保存到 %1?"
-	AFX_IDP_FAILED_TO_CREATE_DOC,   "建立空文档失败。"
-	AFX_IDP_FILE_TOO_LARGE,         "该文件太大,无法打开。"
-	AFX_IDP_FAILED_TO_START_PRINT,  "无法启动打印作业。"
-#endif // !_AFX_NO_FILECMD_RESOURCES
-	AFX_IDP_FAILED_TO_LAUNCH_HELP,  "启动帮助失败。"
-	AFX_IDP_INTERNAL_FAILURE,       "内部应用程序出错。"
-	AFX_IDP_COMMAND_FAILURE,        "命令失败。"
-	AFX_IDP_FAILED_MEMORY_ALLOC     "没有足够的内存执行操作。"
-	AFX_IDP_GET_NOT_SUPPORTED,      "无法读只写特性。"
-	AFX_IDP_SET_NOT_SUPPORTED,      "无法写只读特性。"
-	AFX_IDP_UNREG_DONE,               "系统注册项已被移除并且相应的 INI 文件(假如存在)也被删除。"
-	AFX_IDP_UNREG_FAILURE,            "不是所有的系统注册项(或 INI 文件)都被移除。"
-	AFX_IDP_DLL_LOAD_FAILED,        "在系统中没有找到此程序需要的文件%s。"
-	AFX_IDP_DLL_BAD_VERSION,        "此程序连接到文件 %s 中丢失的输出 %s 。此机器可能有一个 %s 不兼容的版本。"
-
-	// CFile/CArchive error strings for user failure
-#ifndef _AFX_NO_CFILE_RESOURCES
-	AFX_IDP_FAILED_INVALID_FORMAT   "非预期的文件格式。"
-	AFX_IDP_FAILED_INVALID_PATH     "无法找到该文件。\n请验证给出的路径和文件名是否正确。"
-	AFX_IDP_FAILED_DISK_FULL        "目的磁盘驱动器已满。"
-	AFX_IDP_FAILED_ACCESS_READ      "无法对 %1 进行读操作,它已经被其他人打开。"
-	AFX_IDP_FAILED_ACCESS_WRITE     "无法对 %1 进行写操作,因为它是只读文件或已经被其他人打开。"
-	AFX_IDP_FAILED_IO_ERROR_READ    "在对 %1 进行读操作时发生了一个非预期的错误。"
-	AFX_IDP_FAILED_IO_ERROR_WRITE   "在对 %1 进行写操作时发生了一个非预期的错误。"
-#endif // !_AFX_NO_CFILE_RESOURCES
-
-	// Parsing error prompts
-	AFX_IDP_PARSE_INT,              "请键入一个整数。"
-	AFX_IDP_PARSE_REAL,             "请键入一个数。"
-	AFX_IDP_PARSE_INT_RANGE,        "“请填入一个在%1和%2之间的整数。”"
-	AFX_IDP_PARSE_REAL_RANGE,       "“请填入一个在%1和%2之间的数字。”"
-	AFX_IDP_PARSE_STRING_SIZE,      "“请填入不多于%1个的字符。”"
-	AFX_IDP_PARSE_RADIO_BUTTON,     "请选择一个按钮。"
-	AFX_IDP_PARSE_BYTE,             "“请填入一个在0和255之间的整数。”"
-	AFX_IDP_PARSE_UINT,             "“请填入一个正整数。”"
-	AFX_IDP_PARSE_DATETIME,         "“请填入一个日期和/或时间值。”"
-	AFX_IDP_PARSE_CURRENCY,         "“请填入一个货币值。”"
-
-#ifndef _AFX_NO_OLE_RESOURCES
-	// OLE strings required for both servers and containers
-	AFX_IDS_PASTELINKEDTYPE         "链接的 %s"
-	AFX_IDS_UNKNOWNTYPE             "未知类型"
-	AFX_IDP_FAILED_TO_NOTIFY        "%1\n无法注册文档。\n此文档可能已经被打开。"
-	AFX_IDS_NOT_DOCOBJECT           "文档对象服务程序不支持这个文件。"
-#endif //!_AFX_NO_OLE_RESOURCES
-
-	AFX_IDP_NO_ERROR_AVAILABLE      "得不到出错信息。"
-
-#ifndef _AFX_NO_CFILE_RESOURCES
-	AFX_IDP_FILE_NONE                "无错误发生。"
-	AFX_IDP_FILE_GENERIC             "在对 %1 进行访问时发生了一个不明错误。"
-	AFX_IDP_FILE_NOT_FOUND           "没有找到 %1。"
-	AFX_IDP_FILE_BAD_PATH            "%1 中包含无效的路径。"
-	AFX_IDP_FILE_TOO_MANY_OPEN       "无法打开 %1 因为太多文件已被打开。"
-	AFX_IDP_FILE_ACCESS_DENIED       "对 %1 的存取被拒绝。"
-	AFX_IDP_FILE_INVALID_FILE        "一个无效的文件柄与 %1 相关联。"
-	AFX_IDP_FILE_REMOVE_CURRENT      "无法删除 %1 因为它是当前目录。"
-	AFX_IDP_FILE_DIR_FULL            "该目录已满,无法创建 %1。"
-	AFX_IDP_FILE_BAD_SEEK            "对 %1 进行查找失败。"
-	AFX_IDP_FILE_HARD_IO             "在存取 %1 时一个硬件输入/输出错误被报告。"
-	AFX_IDP_FILE_SHARING             "在存取 %1 时发生共享违例。"
-	AFX_IDP_FILE_LOCKING             "在存取 %1 时发生锁违例。"
-	AFX_IDP_FILE_DISKFULL            "在存取 %1 时磁盘已满。"
-	AFX_IDP_FILE_EOF                 "试图越过其尾端对 %1 进行读写。"
-	AFX_IDS_UNNAMED_FILE             "一未命名文件"
-#endif // !_AFX_NO_CFILE_RESOURCES
-
-	AFX_IDP_ARCH_NONE               "无错误发生。"
-	AFX_IDP_ARCH_GENERIC                "在对 %1 进行访问时发生了一个不明错误。"
-	AFX_IDP_ARCH_READONLY           "试图在对 %1 进行读操作的同时对其进行写操作。"
-	AFX_IDP_ARCH_ENDOFFILE          "试图越过其尾端对 %1 进行读写。"
-	AFX_IDP_ARCH_WRITEONLY          "试图在对 %1 进行写操作的同时对其进行读操作。"
-	AFX_IDP_ARCH_BADINDEX           "%1 格式错。"
-	AFX_IDP_ARCH_BADCLASS           "%1 含有非预期的对象。"
-	AFX_IDP_ARCH_BADSCHEMA          "%1 包含错误的模式。"
-
-#ifndef _AFX_NO_MAPI_RESOURCES
-	// MAPI strings / error messages
-	AFX_IDP_FAILED_MAPI_LOAD        "无法装入邮件系统支援。"
-	AFX_IDP_INVALID_MAPI_DLL        "邮件系统 DLL 无效。"
-	AFX_IDP_FAILED_MAPI_SEND        "传递邮件未能传递信息。"
-#endif //!_AFX_NO_MAPI_RESOURCES
-
-#ifndef _AFX_NO_OCC_RESOURCES
-	AFX_IDS_OCC_SCALEUNITS_PIXELS   "象素"
-#endif //!_AFX_NO_OCC_RESOURCES
-END
-
-/////////////////////////////////////////////////////////////////////////////
-// Cursors
-
-AFX_IDC_CONTEXTHELP     CURSOR  DISCARDABLE     "res\\help.cur"
-
-#ifndef _AFX_NO_SPLITTER_RESOURCES
-AFX_IDC_SMALLARROWS     CURSOR  DISCARDABLE     "res\\sarrows.cur"
-AFX_IDC_HSPLITBAR       CURSOR  DISCARDABLE     "res\\splith.cur"
-AFX_IDC_VSPLITBAR       CURSOR  DISCARDABLE     "res\\splitv.cur"
-AFX_IDC_NODROPCRSR      CURSOR  DISCARDABLE     "res\\nodrop.cur"
-#endif //!_AFX_NO_SPLITTER_RESOURCES
-
-#ifndef _AFX_NO_TRACKER_RESOURCES
-AFX_IDC_TRACKNWSE       CURSOR  DISCARDABLE     "res\\trcknwse.cur"
-AFX_IDC_TRACKNESW       CURSOR  DISCARDABLE     "res\\trcknesw.cur"
-AFX_IDC_TRACKNS         CURSOR  DISCARDABLE     "res\\trckns.cur"
-AFX_IDC_TRACKWE         CURSOR  DISCARDABLE     "res\\trckwe.cur"
-AFX_IDC_TRACK4WAY       CURSOR  DISCARDABLE     "res\\trck4way.cur"
-AFX_IDC_MOVE4WAY        CURSOR  DISCARDABLE     "res\\move4way.cur"
-#endif //!_AFX_NO_TRACKER_RESOURCES
-
-#ifndef _AFX_NO_CTL3D_RESOURCES
-26567 BITMAP "res\\3dcheck.bmp" // Note: 26567 comes from CTL3D.H
-#endif
-
-/////////////////////////////////////////////////////////////////////////////
-// Standard Dialogs
-
-#ifndef _AFX_NO_NEWTYPEDLG_RESOURCES
-AFX_IDD_NEWTYPEDLG DIALOG DISCARDABLE  9, 26, 183, 70
-STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | 0x04
-CAPTION "新建"
-FONT 8, "MS Shell Dlg"
-BEGIN
-	LTEXT           "新建(&N)",IDC_STATIC,6,5,123,8,NOT WS_GROUP
-	LISTBOX         AFX_IDC_LISTBOX,6,15,125,49,WS_VSCROLL | WS_TABSTOP
-	DEFPUSHBUTTON   "确定",IDOK,137,6,40,14
-	PUSHBUTTON      "取消",IDCANCEL,137,23,40,14
-	PUSHBUTTON      "帮助(&H)",ID_HELP,137,43,40,14
-END
-#endif // !_AFX_NO_NEWTYPEDLG_RESOURCES
-
-/////////////////////////////////////////////////////////////////////////////
-// CMiniFrameWnd Bitmap
-
-AFX_IDB_MINIFRAME_MENU      BITMAP  DISCARDABLE     "res\\minifwnd.bmp"
-
-/////////////////////////////////////////////////////////////////////////////
-// CCheckListBox Bitmaps
-
-AFX_IDB_CHECKLISTBOX_NT     BITMAP  DISCARDABLE     "res\\ntcheck.bmp"
-AFX_IDB_CHECKLISTBOX_95     BITMAP  DISCARDABLE     "res\\95check.bmp"
-
-/////////////////////////////////////////////////////////////////////////////
-
-#endif //!_AFXDLL
-#endif //!__AFXRES_RC__
-
-/////////////////////////////////////////////////////////////////////////////

+ 0 - 284
libs/mfc/include/Cht/afxctl.rc

@@ -1,284 +0,0 @@
-// This is a part of the Microsoft Foundation Classes C++ library.
-// Copyright (C) 1992-1998 Microsoft Corporation
-// All rights reserved.
-//
-// This source code is only intended as a supplement to the
-// Microsoft Foundation Classes Reference and related
-// electronic documentation provided with the library.
-// See these sources for detailed information regarding the
-// Microsoft Foundation Classes product.
-
-#ifndef __AFXCTL_RC__
-#define __AFXCTL_RC__
-
-#ifndef __AFXRES_H__
-	#include <afxres.h>
-#endif
-
-#ifdef APSTUDIO_INVOKED
-// This will prevent the VC++ Resource Editor user from saving this file
-1 TEXTINCLUDE DISCARDABLE
-BEGIN
-"< 無法改變標準MFC資源! >\0"
-END
-#endif    // APSTUDIO_INVOKED
-
-#ifndef _AFXDLL
-
-/////////////////////////////////////////////////////////////////////////////
-// OLE Control Resources
-
-#ifndef _AFX_NO_STOCKPPG_RESOURCES
-/////////////////////////////////////////////////////////////////////////////
-//
-// Bitmap
-//
-
-AFX_IDB_TRUETYPE        BITMAP  DISCARDABLE     "RES\\TRUETYPE.BMP"
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Dialog
-//
-
-AFX_IDD_PROPPAGE_FONT DIALOG DISCARDABLE  13, 54, 250, 110
-STYLE WS_CHILD | 0x4
-FONT 8, "MS Shell Dlg"
-BEGIN
-	LTEXT           "屬性名稱(&N):",IDC_STATIC,3,5,61,8
-	COMBOBOX        AFX_IDC_FONTPROP,65,3,100,71,CBS_DROPDOWNLIST | CBS_SORT |
-					WS_VSCROLL | WS_TABSTOP
-	LTEXT           "字型(&F):",IDC_STATIC,3,19,91,8
-	COMBOBOX        AFX_IDC_FONTNAMES,3,29,91,77,CBS_SIMPLE |
-					CBS_OWNERDRAWFIXED | CBS_AUTOHSCROLL | CBS_SORT |
-					CBS_HASSTRINGS | CBS_DISABLENOSCROLL | WS_VSCROLL |
-					WS_TABSTOP
-	LTEXT           "字型樣式(&y):",IDC_STATIC,102,19,53,8
-	COMBOBOX        AFX_IDC_FONTSTYLES,104,29,53,53,CBS_DROPDOWNLIST |
-					CBS_DISABLENOSCROLL | WS_VSCROLL | WS_TABSTOP
-	LTEXT           "大小(&S):",IDC_STATIC,167,19,40,8
-	COMBOBOX        AFX_IDC_FONTSIZES,167,29,36,53,CBS_DROPDOWN | CBS_SORT |
-					CBS_DISABLENOSCROLL | WS_VSCROLL | WS_TABSTOP
-	GROUPBOX        "效果",IDC_STATIC,104,44,142,24,WS_GROUP
-	CONTROL         "取消線(&k)",AFX_IDC_STRIKEOUT,"Button",BS_AUTOCHECKBOX |
-					WS_TABSTOP,109,55,65,10
-	CONTROL         "底線(&U)",AFX_IDC_UNDERLINE,"Button",BS_AUTOCHECKBOX |
-					WS_TABSTOP,175,55,65,10
-	GROUPBOX        "範例",IDC_STATIC,104,71,142,36,WS_GROUP
-	CTEXT           "AaBbYyZz",AFX_IDC_SAMPLEBOX,110,80,130,22,SS_NOPREFIX |
-					NOT WS_VISIBLE
-END
-
-AFX_IDD_PROPPAGE_COLOR DIALOG DISCARDABLE  0, 0, 250, 62
-STYLE WS_CHILD | 0x4
-FONT 8, "MS Shell Dlg"
-BEGIN
-	LTEXT           "屬性名稱(&N):",IDC_STATIC,3,3,100,8
-	COMBOBOX        AFX_IDC_COLORPROP,3,13,100,54,CBS_DROPDOWNLIST |
-					CBS_SORT | WS_VSCROLL | WS_TABSTOP
-	LTEXT           "系統顏色(&C):",IDC_STATIC,3,29,100,8
-	COMBOBOX        AFX_IDC_SYSTEMCOLORS,3,39,100,54,CBS_DROPDOWNLIST |
-					CBS_SORT | WS_VSCROLL | WS_TABSTOP
-	CONTROL         "",AFX_IDC_COLOR_BLACK,"Button",BS_OWNERDRAW | WS_GROUP |
-					WS_TABSTOP,118,4,15,11
-	CONTROL         "",AFX_IDC_COLOR_BLUE,"Button",BS_OWNERDRAW,138,4,15,11
-	CONTROL         "",AFX_IDC_COLOR_CYAN,"Button",BS_OWNERDRAW,158,4,15,11
-	CONTROL         "",AFX_IDC_COLOR_DARKBLUE,"Button",BS_OWNERDRAW,178,4,15,
-					11
-	CONTROL         "",AFX_IDC_COLOR_DARKCYAN,"Button",BS_OWNERDRAW,118,18,
-					15,11
-	CONTROL         "",AFX_IDC_COLOR_DARKGREEN,"Button",BS_OWNERDRAW,138,18,
-					15,11
-	CONTROL         "",AFX_IDC_COLOR_DARKMAGENTA,"Button",BS_OWNERDRAW,158,
-					18,15,11
-	CONTROL         "",AFX_IDC_COLOR_GRAY,"Button",BS_OWNERDRAW,178,18,15,11
-	CONTROL         "",AFX_IDC_COLOR_DARKRED,"Button",BS_OWNERDRAW,118,32,15,
-					11
-	CONTROL         "",AFX_IDC_COLOR_GREEN,"Button",BS_OWNERDRAW,138,32,15,
-					11
-	CONTROL         "",AFX_IDC_COLOR_LIGHTBROWN,"Button",BS_OWNERDRAW,158,32,
-					15,11
-	CONTROL         "",AFX_IDC_COLOR_LIGHTGRAY,"Button",BS_OWNERDRAW,178,32,
-					15,11
-	CONTROL         "",AFX_IDC_COLOR_MAGENTA,"Button",BS_OWNERDRAW,118,46,15,
-					11
-	CONTROL         "",AFX_IDC_COLOR_RED,"Button",BS_OWNERDRAW,138,46,15,11
-	CONTROL         "",AFX_IDC_COLOR_WHITE,"Button",BS_OWNERDRAW,158,46,15,
-					11
-	CONTROL         "",AFX_IDC_COLOR_YELLOW,"Button",BS_OWNERDRAW,178,46,15,
-					11
-END
-
-AFX_IDD_PROPPAGE_PICTURE DIALOG DISCARDABLE  0, 0, 250, 62
-STYLE WS_CHILD | 0x4
-FONT 8, "MS Shell Dlg"
-BEGIN
-	LTEXT           "屬性名稱(&N):",IDC_STATIC,3,3,100,8
-	COMBOBOX        AFX_IDC_PROPNAME,3,13,100,30,CBS_DROPDOWNLIST | CBS_SORT |
-					WS_VSCROLL | WS_TABSTOP
-	PUSHBUTTON      "瀏覽(&B)...",AFX_IDC_BROWSE,3,35,54,14
-	PUSHBUTTON      "清除(&C)",AFX_IDC_CLEAR,61,35,54,14
-	RTEXT           "預覽:",IDC_STATIC,107,3,42,16
-	CONTROL         "",AFX_IDC_PICTURE,"Static",SS_BLACKFRAME,151,4,93,54
-END
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Dialog Info
-//
-
-AFX_IDD_PROPPAGE_FONT DLGINIT
-BEGIN
-	1002, 0x403, 12, 0
-0x6f42, 0x646c, 0x4920, 0x6174, 0x696c, 0x0063,
-	0
-END
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// String Table
-//
-
-STRINGTABLE DISCARDABLE
-BEGIN
-	AFX_IDS_PROPPAGE_UNKNOWN "(未知)"
-	AFX_IDS_COLOR_DESKTOP   "桌面"
-	AFX_IDS_COLOR_APPWORKSPACE "應用程式工作區"
-	AFX_IDS_COLOR_WNDBACKGND "視窗背景"
-	AFX_IDS_COLOR_WNDTEXT   "視窗文字"
-	AFX_IDS_COLOR_MENUBAR   "功能表列"
-	AFX_IDS_COLOR_MENUTEXT  "功能表文字"
-	AFX_IDS_COLOR_ACTIVEBAR "現用標題列"
-	AFX_IDS_COLOR_INACTIVEBAR "非現用標題列"
-	AFX_IDS_COLOR_ACTIVETEXT "現用標題列文字"
-	AFX_IDS_COLOR_INACTIVETEXT "現用標題列文字"
-	AFX_IDS_COLOR_ACTIVEBORDER "現用邊界"
-	AFX_IDS_COLOR_INACTIVEBORDER "非現用邊界"
-END
-#endif // !_AFX_NO_STOCKPPG_RESOURCES
-
-STRINGTABLE DISCARDABLE
-BEGIN
-#ifndef _AFX_NO_STOCKPPG_RESOURCES
-	AFX_IDS_COLOR_WNDFRAME  "視窗邊框"
-	AFX_IDS_COLOR_SCROLLBARS "捲軸"
-	AFX_IDS_COLOR_BTNFACE   "按鈕表面"
-	AFX_IDS_COLOR_BTNSHADOW "按鈕陰影"
-	AFX_IDS_COLOR_BTNTEXT   "按鈕文字"
-	AFX_IDS_COLOR_BTNHIGHLIGHT "按鈕強調"
-	AFX_IDS_COLOR_DISABLEDTEXT "失效文字"
-	AFX_IDS_COLOR_HIGHLIGHT "強調"
-	AFX_IDS_COLOR_HIGHLIGHTTEXT "強調文字"
-	AFX_IDS_REGULAR         "一般"
-	AFX_IDS_BOLD            "粗體"
-	AFX_IDS_ITALIC          "斜體"
-	AFX_IDS_BOLDITALIC      "粗斜體"
-	AFX_IDS_SAMPLETEXT      "AaBbYyZz"
-#endif // !_AFX_NO_STOCKPPG_RESOURCES
-	AFX_IDS_DISPLAYSTRING_FONT "(字型)"
-	AFX_IDS_DISPLAYSTRING_COLOR "(顏色)"
-END
-
-STRINGTABLE DISCARDABLE
-BEGIN
-	AFX_IDS_DISPLAYSTRING_PICTURE "(圖片 - %s)"
-#ifndef _AFX_NO_STOCKPPG_RESOURCES
-	AFX_IDS_PICTUREFILTER   "所有圖片型態|*.bmp;*.cur;*.dib;*.emf;*.ico;*.wmf|點陣圖 (*.bmp;*.dib)|*.bmp;*.dib|圖示/指標 (*.ico;*.cur)|*.ico;*.cur|中繼檔 (*.wmf;*.emf)|*.wmf;*.emf|所有檔案 (*.*)|*.*||"
-#endif // !_AFX_NO_STOCKPPG_RESOURCES
-	AFX_IDS_PICTYPE_UNKNOWN "未知"
-	AFX_IDS_PICTYPE_NONE    "沒有框線"
-	AFX_IDS_PICTYPE_BITMAP  "點陣圖形"
-	AFX_IDS_PICTYPE_METAFILE "中繼檔"
-	AFX_IDS_PICTYPE_ICON    "圖示"
-#ifndef _AFX_NO_STOCKPPG_RESOURCES
-	AFX_IDS_COLOR_PPG       "彩色屬性頁"
-	AFX_IDS_COLOR_PPG_CAPTION "彩色"
-	AFX_IDS_FONT_PPG        "字型屬性頁"
-	AFX_IDS_FONT_PPG_CAPTION "字型"
-	AFX_IDS_PICTURE_PPG     "圖片屬性頁"
-	AFX_IDS_PICTURE_PPG_CAPTION "圖片"
-#endif // !_AFX_NO_STOCKPPG_RESOURCES
-	AFX_IDS_BORDERSTYLE_0   "0 - 沒有框線"
-	AFX_IDS_BORDERSTYLE_1   "1 - 固定單線"
-END
-
-STRINGTABLE DISCARDABLE
-BEGIN
-	AFX_IDS_VERB_EDIT       "編輯(&E)"
-	AFX_IDS_VERB_PROPERTIES "屬性(&P)..."
-END
-
-#ifndef _AFX_NO_STOCKPPG_RESOURCES
-STRINGTABLE DISCARDABLE
-BEGIN
-	AFX_IDP_PICTURECANTOPEN "無法載入圖片檔案 %1. 檔案也許或不存在, 或無法讀取."
-	AFX_IDP_PICTURECANTLOAD "無法載入圖片檔案 %1. 檔案格式錯誤."
-	AFX_IDP_PICTURETOOLARGE "無法載入圖片檔案 %1. 檔案太大記憶體不夠."
-	AFX_IDP_PICTUREREADFAILED
-							"無法載入圖片檔案 %1. 無法解釋的讀取失敗."
-END
-
-STRINGTABLE DISCARDABLE
-BEGIN
-	AFX_IDS_PICTUREBROWSETITLE "瀏覽圖片"
-END
-#endif // !_AFX_NO_STOCKPPG_RESOURCES
-
-#ifndef _AFX_NO_CTLERROR_RESOURCES
-STRINGTABLE DISCARDABLE
-BEGIN
-	AFX_IDP_E_ILLEGALFUNCTIONCALL "不合法之功能呼叫"
-	AFX_IDP_E_OVERFLOW      "溢出(Overflow)"
-	AFX_IDP_E_OUTOFMEMORY   "記憶體用完"
-	AFX_IDP_E_DIVISIONBYZERO "除零"
-	AFX_IDP_E_OUTOFSTRINGSPACE "字串空間已滿"
-	AFX_IDP_E_OUTOFSTACKSPACE "堆疊已滿"
-	AFX_IDP_E_BADFILENAMEORNUMBER "壞的檔案名稱或編號"
-	AFX_IDP_E_FILENOTFOUND  "找不到檔案"
-	AFX_IDP_E_BADFILEMODE   "壞的檔案模態"
-	AFX_IDP_E_FILEALREADYOPEN "檔案已開啟"
-	AFX_IDP_E_DEVICEIOERROR "設備輸出入錯誤"
-	AFX_IDP_E_FILEALREADYEXISTS "檔案已存在"
-	AFX_IDP_E_BADRECORDLENGTH "壞的紀錄長度"
-	AFX_IDP_E_DISKFULL      "磁碟空間已滿"
-	AFX_IDP_E_BADRECORDNUMBER "壞的紀錄編號"
-	AFX_IDP_E_BADFILENAME   "壞的檔案名稱"
-END
-
-STRINGTABLE DISCARDABLE
-BEGIN
-	AFX_IDP_E_TOOMANYFILES  "太多檔案"
-	AFX_IDP_E_DEVICEUNAVAILABLE "設備無法使用"
-	AFX_IDP_E_PERMISSIONDENIED "允許拒絕"
-	AFX_IDP_E_DISKNOTREADY  "磁碟機未備妥"
-	AFX_IDP_E_PATHFILEACCESSERROR "路徑/檔案存取錯誤"
-	AFX_IDP_E_PATHNOTFOUND  "找不到路徑"
-	AFX_IDP_E_INVALIDPATTERNSTRING "不合法的樣式字串"
-	AFX_IDP_E_INVALIDUSEOFNULL "不合法使用空值(null)"
-	AFX_IDP_E_INVALIDFILEFORMAT "不合法的檔案格式"
-	AFX_IDP_E_INVALIDPROPERTYVALUE "不合法的屬性值"
-	AFX_IDP_E_INVALIDPROPERTYARRAYINDEX "不合法的索引"
-	AFX_IDP_E_SETNOTSUPPORTEDATRUNTIME "無法在執行時設定屬性"
-	AFX_IDP_E_SETNOTSUPPORTED "唯讀屬性"
-	AFX_IDP_E_NEEDPROPERTYARRAYINDEX
-							"當使用屬性陣列時必須說明陣列索引"
-	AFX_IDP_E_SETNOTPERMITTED "這個控制項之屬性無法設定"
-	AFX_IDP_E_GETNOTSUPPORTEDATRUNTIME "無法在執行時讀取屬性"
-END
-
-STRINGTABLE DISCARDABLE
-BEGIN
-	AFX_IDP_E_GETNOTSUPPORTED "唯寫屬性"
-	AFX_IDP_E_PROPERTYNOTFOUND "找不到屬性"
-	AFX_IDP_E_INVALIDCLIPBOARDFORMAT "不合法之剪貼簿格式"
-	AFX_IDP_E_INVALIDPICTURE "不合法圖片"
-	AFX_IDP_E_PRINTERERROR  "印表機錯誤"
-	AFX_IDP_E_CANTSAVEFILETOTEMP
-							"無法產生必須儲存之暫時檔案"
-	AFX_IDP_E_SEARCHTEXTNOTFOUND "無法找到想搜尋之文字"
-	AFX_IDP_E_REPLACEMENTSTOOLONG "取代文字過長"
-END
-#endif //!_AFX_NO_CTLERROR_RESOURCES
-
-#endif //!_AFXDLL
-#endif //__AFXOLECL_RC__

+ 0 - 105
libs/mfc/include/Cht/afxdb.rc

@@ -1,105 +0,0 @@
-// This is a part of the Microsoft Foundation Classes C++ library.
-// Copyright (C) 1992-1998 Microsoft Corporation
-// All rights reserved.
-//
-// This source code is only intended as a supplement to the
-// Microsoft Foundation Classes Reference and related
-// electronic documentation provided with the library.
-// See these sources for detailed information regarding the
-// Microsoft Foundation Classes product.
-
-#ifndef __AFXDB_RC__
-#define __AFXDB_RC__
-
-#ifndef __AFXRES_H__
-	#include <afxres.h>
-#endif
-
-#ifdef APSTUDIO_INVOKED
-// This will prevent the VC++ Resource Editor user from saving this file
-1 TEXTINCLUDE DISCARDABLE
-BEGIN
-"< 無法改變標準MFC資源! >\0"
-END
-#endif    // APSTUDIO_INVOKED
-
-#ifndef _AFXDLL
-
-/////////////////////////////////////////////////////////////////////////////
-// Database Resources
-
-// Database strings
-STRINGTABLE DISCARDABLE
-BEGIN
-	AFX_IDP_SQL_CONNECT_FAIL
-		"嘗試連結資料來源失敗"
-	AFX_IDP_SQL_RECORDSET_FORWARD_ONLY
-		"資料集只支援向前移動."
-	AFX_IDP_SQL_EMPTY_COLUMN_LIST
-		"嘗試開啟表格失敗 - 無任何存取資料欄說明."
-	AFX_IDP_SQL_FIELD_SCHEMA_MISMATCH
-		"查詢傳回非預期資料欄型態."
-	AFX_IDP_SQL_ILLEGAL_MODE "修改或刪除嘗試失敗."
-	AFX_IDP_SQL_MULTIPLE_ROWS_AFFECTED "多個資料列被修改."
-	AFX_IDP_SQL_NO_CURRENT_RECORD "作業失敗, 無現行資料紀錄."
-	AFX_IDP_SQL_NO_ROWS_AFFECTED
-		"無任何資料列受修改或刪除作業影響."
-	AFX_IDP_SQL_RECORDSET_READONLY "資料集是唯讀"
-	AFX_IDP_SQL_SQL_NO_TOTAL
-		"ODBC驅動程式不支援MFC長二進位(LongBinary)資料模式."
-	AFX_IDP_SQL_ODBC_LOAD_FAILED
-		"嘗試載入必要元件 ODBC32.DLL 失敗."
-	AFX_IDP_SQL_DYNASET_NOT_SUPPORTED
-		"ODBC驅動程式不支援 Dynasets."
-	AFX_IDP_SQL_SNAPSHOT_NOT_SUPPORTED
-		"ODBC靜態游標需要snapshot支援."
-	AFX_IDP_SQL_API_CONFORMANCE
-		"ODBC驅動程式與MFC 資料庫類別不相容(API_CONFORMANCE >= SQL_OAC_LEVEL1 required)."
-	AFX_IDP_SQL_SQL_CONFORMANCE
-		"ODBC驅動程式與MFC資料庫類別不相容 (SQL_CONFORMANCE >= SQL_OSC_MINIMUM required)."
-	AFX_IDP_SQL_NO_DATA_FOUND
-		"嘗試使用捲軸捲動資料列超過第一筆資料."
-	AFX_IDP_SQL_ROW_UPDATE_NOT_SUPPORTED
-		"ODBC驅動程式不支援 Dynasets."
-	AFX_IDP_SQL_ODBC_V2_REQUIRED
-		"須要ODBC層次2順應驅動程式(Level 2 compliant driver)."
-	AFX_IDP_SQL_NO_POSITIONED_UPDATES
-		"ODBC驅動程式不支援定位修改(Positioned updates)."
-	AFX_IDP_SQL_LOCK_MODE_NOT_SUPPORTED
-		"不支援請求鎖定模態(Requested lock mode)."
-	AFX_IDP_SQL_DATA_TRUNCATED
-		"資料截取."
-	AFX_IDP_SQL_ROW_FETCH
-		"錯誤回復資料錄."
-	AFX_IDP_SQL_INCORRECT_ODBC
-		"一個必須的ODBC進入點沒找到.  確定ODBC被正確的安裝."
-	AFX_IDP_SQL_UPDATE_DELETE_FAILED
-		"修改或刪除失敗."
-	AFX_IDP_SQL_DYNAMIC_CURSOR_NOT_SUPPORTED
-		"ODBC驅動程式沒有支援動態游標."
-	AFX_IDP_SQL_FIELD_NOT_FOUND
-		"資料欄名稱或資料欄索引不正確。"
-	AFX_IDP_SQL_BOOKMARKS_NOT_SUPPORTED
-		"書籤不支援 ODBC 驅動器。"
-	AFX_IDP_SQL_BOOKMARKS_NOT_ENABLED
-		"在記錄集中書籤無法使用。"
-	AFX_IDP_DAO_ENGINE_INITIALIZATION
-		"無法進行DAO/Jet資料庫引擎(db engin)初始化."
-	AFX_IDP_DAO_DFX_BIND
-		"壞的DFX參數值."
-	AFX_IDP_DAO_OBJECT_NOT_OPEN
-		"DAO的TableDef物件或QueryDef物件未開啟."
-	AFX_IDP_DAO_ROWTOOSHORT
-		"GetRows失敗. 沒有足夠記憶體配置給資料列."
-	AFX_IDP_DAO_BADBINDINFO
-		"GetRows連結失敗. 也許是因資料型態不合所致."
-	AFX_IDP_DAO_COLUMNUNAVAILABLE
-		"GetRows失敗. 所要求的資料欄不在資料集(Recordset)中."
-
-	AFX_IDS_DELETED "<已刪除>"
-END
-
-/////////////////////////////////////////////////////////////////////////////
-
-#endif //!_AFXDLL
-#endif //__AFXDB_RC__

+ 0 - 66
libs/mfc/include/Cht/afxolecl.rc

@@ -1,66 +0,0 @@
-// This is a part of the Microsoft Foundation Classes C++ library.
-// Copyright (C) 1992-1998 Microsoft Corporation
-// All rights reserved.
-//
-// This source code is only intended as a supplement to the
-// Microsoft Foundation Classes Reference and related
-// electronic documentation provided with the library.
-// See these sources for detailed information regarding the
-// Microsoft Foundation Classes product.
-
-#ifndef __AFXOLECL_RC__
-#define __AFXOLECL_RC__
-
-#ifndef __AFXRES_H__
-	#include <afxres.h>
-#endif
-
-#ifndef _INC_DLGS
-	#include <dlgs.h>
-#endif
-
-#ifdef APSTUDIO_INVOKED
-// This will prevent the VC++ Resource Editor user from saving this file
-1 TEXTINCLUDE DISCARDABLE
-BEGIN
-"< 無法改變標準MFC資源! >\0"
-END
-#endif    // APSTUDIO_INVOKED
-
-#ifndef _AFXDLL
-
-/////////////////////////////////////////////////////////////////////////////
-// OLE Client Resources
-
-/////////////////////////////////////////////////////////////////////////////
-// OLE strings
-
-STRINGTABLE DISCARDABLE
-BEGIN
-	AFX_IDP_STATIC_OBJECT           "無法啟動靜態的 ActiveX 物件。"
-	AFX_IDP_FAILED_TO_CONNECT       "連結失敗.\n連結可能被破壞."
-	AFX_IDP_SERVER_BUSY             "無法處理指令, 伺服器忙碌中."
-	AFX_IDP_BAD_VERB                "伺服器作業執行失敗."
-	AFX_IDP_FAILED_TO_LAUNCH        "無法啟動伺服器應用程式."
-	AFX_IDS_UPDATING_ITEMS          "更新 ActiveX 物件"
-	AFX_IDP_FAILED_TO_CONVERT       "ActiveX 物件轉換失敗。"
-	AFX_IDP_ASK_TO_DISCARD          "離開視窗時,無法儲存 ActiveX 物件!\n放棄所有在 %1 中的變更嗎?"
-	AFX_IDP_FAILED_TO_CREATE        "產生物件失敗.  確定應用程式已登錄在系統登錄器中(system registry)."
-
-	AFX_IDS_METAFILE_FORMAT         "圖片(Metafile)\na 圖片"
-	AFX_IDS_DIB_FORMAT              "設備獨立點陣圖(Device Independent Bitmap)\na 設備獨立點陣圖(device independent bitmap)"
-	AFX_IDS_BITMAP_FORMAT           "點陣圖\na 點陣圖"
-	AFX_IDS_LINKSOURCE_FORMAT       "%s\n%s"
-	AFX_IDS_EMBED_FORMAT            "%s\n%s"
-	AFX_IDS_RTF_FORMAT              "Rich Text (RTF)\n無字型和段落格式的文字"
-	AFX_IDS_TEXT_FORMAT             "未格式化文字\n文字沒有任何格式"
-
-	AFX_IDS_INVALID_CURRENCY        "不合法的貨幣值(Currency)."
-	AFX_IDS_INVALID_DATETIME        "不合法的日期時間(DateTime)."
-	AFX_IDS_INVALID_DATETIMESPAN    "不合法的DateTimeSpan."
-END
-
-/////////////////////////////////////////////////////////////////////////////
-
-#endif //!_AFXDLL
-#endif //__AFXOLECL_RC__

+ 0 - 53
libs/mfc/include/Cht/afxolesv.rc

@@ -1,53 +0,0 @@
-// This is a part of the Microsoft Foundation Classes C++ library.
-// Copyright (C) 1992-1998 Microsoft Corporation
-// All rights reserved.
-//
-// This source code is only intended as a supplement to the
-// Microsoft Foundation Classes Reference and related
-// electronic documentation provided with the library.
-// See these sources for detailed information regarding the
-// Microsoft Foundation Classes product.
-
-#ifndef __AFXOLESV_RC__
-#define __AFXOLESV_RC__
-
-#ifndef __AFXRES_H__
-	#include <afxres.h>
-#endif
-
-#ifdef APSTUDIO_INVOKED
-// This will prevent the VC++ Resource Editor user from saving this file
-1 TEXTINCLUDE DISCARDABLE
-BEGIN
-"< 無法改變標準MFC資源! >\0"
-END
-#endif    // APSTUDIO_INVOKED
-
-#ifndef _AFXDLL
-
-/////////////////////////////////////////////////////////////////////////////
-// OLE Server Resources
-
-// OLE strings
-STRINGTABLE DISCARDABLE
-BEGIN
-	AFX_IDP_ASK_TO_UPDATE,              "在進行前修改 %1?"
-	AFX_IDP_FAILED_TO_UPDATE,           "無法修改客戶(client)."
-
-	AFX_IDP_FAILED_TO_REGISTER,         "註冊失敗。某 ActiveX 功能可能無法正確運作。"
-	AFX_IDP_FAILED_TO_AUTO_REGISTER,    "修改系統登錄器(system registry)失敗.\n請嘗試使用REGEDIT."
-END
-
-STRINGTABLE PRELOAD
-BEGIN
-	AFX_IDS_APP_TITLE_EMBEDDING,        "%1 in %2"
-	AFX_IDS_OBJ_TITLE_INPLACE,          "%1 - %2"
-	AFX_IDS_EXIT_MENU,                  "離開(&x) && 跳回到%1"
-	AFX_IDS_UPDATE_MENU,                "修改(&U)%1"
-	AFX_IDS_SAVEFILECOPY,               "另存複製"
-END
-
-/////////////////////////////////////////////////////////////////////////////
-
-#endif //!_AFXDLL
-#endif //__AFXOLESV_RC__

+ 0 - 90
libs/mfc/include/Cht/afxprint.rc

@@ -1,90 +0,0 @@
-// This is a part of the Microsoft Foundation Classes C++ library.
-// Copyright (C) 1992-1998 Microsoft Corporation
-// All rights reserved.
-//
-// This source code is only intended as a supplement to the
-// Microsoft Foundation Classes Reference and related
-// electronic documentation provided with the library.
-// See these sources for detailed information regarding the
-// Microsoft Foundation Classes product.
-
-#ifndef __AFXPRINT_RC__
-#define __AFXPRINT_RC__
-
-#ifndef __AFXRES_H__
-	#include <afxres.h>
-#endif
-
-#ifdef APSTUDIO_INVOKED
-// This will prevent the VC++ Resource Editor user from saving this file
-1 TEXTINCLUDE DISCARDABLE
-BEGIN
-"<無法改變標準MFC資源! >\0"
-END
-#endif    // APSTUDIO_INVOKED
-
-#ifndef _AFXDLL
-
-/////////////////////////////////////////////////////////////////////////////
-// Printing Resources
-
-AFX_IDC_MAGNIFY         CURSOR  DISCARDABLE     "res\\magnify.cur"
-
-AFX_IDD_PRINTDLG DIALOG DISCARDABLE  6, 18, 133, 95
-STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | 0x04
-FONT 8, "MS Shell Dlg"
-BEGIN
-	CTEXT           "列印",IDC_STATIC,0,9,133,8
-	CTEXT           "",AFX_IDC_PRINT_DOCNAME,0,19,133,8
-	CTEXT           "正在",IDC_STATIC,0,29,133,8
-	CTEXT           "",AFX_IDC_PRINT_PRINTERNAME,0,39,133,8
-	CTEXT           "",AFX_IDC_PRINT_PORTNAME,0,49,133,8
-	CTEXT           "",AFX_IDC_PRINT_PAGENUM,0,59,133,8
-	PUSHBUTTON      "取消",IDCANCEL,46,74,40,14
-END
-
-// Preview Toolbar Dialog
-AFX_IDD_PREVIEW_TOOLBAR DIALOG PRELOAD DISCARDABLE  0, 0, 330, 16
-STYLE WS_CHILD | 0x04
-FONT 8, "MS Shell Dlg"
-BEGIN
-	PUSHBUTTON      "列印(&P)...",AFX_ID_PREVIEW_PRINT,2,2,44,12
-	PUSHBUTTON      "下一頁(&N)",AFX_ID_PREVIEW_NEXT,48,2,44,12
-	PUSHBUTTON      "前一頁(&v)",AFX_ID_PREVIEW_PREV,94,2,44,12
-	PUSHBUTTON      "",AFX_ID_PREVIEW_NUMPAGE,140,2,44,12
-	PUSHBUTTON      "拉近(&I)",AFX_ID_PREVIEW_ZOOMIN,186,2,44,12
-	PUSHBUTTON      "拉遠(&O)",AFX_ID_PREVIEW_ZOOMOUT,232,2,44,12
-	PUSHBUTTON      "關閉(&C)",AFX_ID_PREVIEW_CLOSE,278,2,44,12
-END
-
-// Printing strings
-STRINGTABLE DISCARDABLE
-BEGIN
-	// print progress dialog strings
-	AFX_IDS_PRINTONPORT,            "在 %1"         // for print output
-	AFX_IDS_ONEPAGE,                "一頁(&O)"     // for preview button
-	AFX_IDS_TWOPAGE,                "兩頁(&T)"     // for preview button
-	AFX_IDS_PRINTPAGENUM,           "頁 %u"       // for print output
-	AFX_IDS_PREVIEWPAGEDESC,        "頁 %u\n頁 %u-%u\n"
-
-	// print to file dialog strings
-	AFX_IDS_PRINTDEFAULTEXT,        "prn"           // default extension
-	AFX_IDS_PRINTDEFAULT,           "Output.prn"    // default file
-	AFX_IDS_PRINTFILTER,
-		"印表機檔案(*.prn)|*.prn|All Files (*.*)|*.*||"
-	AFX_IDS_PRINTCAPTION,           "列印到檔案" // caption for browse dlg
-	AFX_IDS_PRINTTOFILE,            "到 %1"         // to file
-END
-
-// Print Preview Accelerator Table
-AFX_IDR_PREVIEW_ACCEL ACCELERATORS LOADONCALL MOVEABLE
-BEGIN
-	VK_NEXT,    AFX_ID_PREVIEW_NEXT,    VIRTKEY, NOINVERT
-	VK_PRIOR,   AFX_ID_PREVIEW_PREV,    VIRTKEY, NOINVERT
-	VK_ESCAPE,  AFX_ID_PREVIEW_CLOSE,   VIRTKEY, NOINVERT
-END
-
-/////////////////////////////////////////////////////////////////////////////
-
-#endif //!_AFXDLL
-#endif //__AFXPRINT_RC__

+ 0 - 202
libs/mfc/include/Cht/afxres.rc

@@ -1,202 +0,0 @@
-// This is a part of the Microsoft Foundation Classes C++ library.
-// Copyright (C) 1992-1998 Microsoft Corporation
-// All rights reserved.
-//
-// This source code is only intended as a supplement to the
-// Microsoft Foundation Classes Reference and related
-// electronic documentation provided with the library.
-// See these sources for detailed information regarding the
-// Microsoft Foundation Classes product.
-
-#ifndef __AFXRES_RC__
-#define __AFXRES_RC__
-
-#ifndef __AFXRES_H__
-	#include <afxres.h>
-#endif
-
-#ifdef APSTUDIO_INVOKED
-// This will prevent the VC++ Resource Editor user from saving this file
-1 TEXTINCLUDE DISCARDABLE
-BEGIN
-"< 無法改變標準MFC資源! >\0"
-END
-#endif //APSTUDIO_INVOKED
-
-#ifndef _AFXDLL
-
-/////////////////////////////////////////////////////////////////////////////
-// Default resource description for MFC applications
-/////////////////////////////////////////////////////////////////////////////
-
-/////////////////////////////////////////////////////////////////////////////
-// Strings
-
-STRINGTABLE DISCARDABLE
-BEGIN
-#ifndef _AFX_NO_APPMENU_RESOURCES
-	AFX_IDS_OPENFILE,               "開啟舊檔"
-	AFX_IDS_SAVEFILE,               "另存新檔"
-	AFX_IDS_ALLFILTER,              "所有文件 (*.*)"
-	AFX_IDS_UNTITLED,               "未命名標題"
-	AFX_IDS_HIDE,                   "隱藏(&H)"
-#endif // !_AFX_NO_APPMENUSTRING_RESOURCES
-
-	AFX_IDS_MEMORY_EXCEPTION,       "記憶體不足."
-	AFX_IDS_NOT_SUPPORTED_EXCEPTION,"試圖執行未支援的作業."
-	AFX_IDS_RESOURCE_EXCEPTION,     "有一項必要的資源無法使用."
-	AFX_IDS_USER_EXCEPTION,         "產生一未知的錯誤."
-
-	// General error prompts
-#ifndef _AFX_NO_FILECMD_RESOURCES
-	AFX_IDP_INVALID_FILENAME,       "不合法之檔案名稱."
-	AFX_IDP_FAILED_TO_OPEN_DOC,     "開啟文件失敗."
-	AFX_IDP_FAILED_TO_SAVE_DOC,     "儲存文件失敗."
-	AFX_IDP_ASK_TO_SAVE,            "儲存修改到 %1?"
-	AFX_IDP_FAILED_TO_CREATE_DOC,   "產生空白文件失敗."
-	AFX_IDP_FILE_TOO_LARGE,         "檔案太大無法開啟."
-	AFX_IDP_FAILED_TO_START_PRINT,  "列印工作無法啟始."
-#endif // !_AFX_NO_FILECMD_RESOURCES
-	AFX_IDP_FAILED_TO_LAUNCH_HELP,  "說明開啟失敗."
-	AFX_IDP_INTERNAL_FAILURE,       "內部應用程式錯誤."
-	AFX_IDP_COMMAND_FAILURE,        "命令失敗."
-	AFX_IDP_FAILED_MEMORY_ALLOC     "記憶體不夠無法執行作業."
-	AFX_IDP_GET_NOT_SUPPORTED,      "無法讀取唯寫屬性."
-	AFX_IDP_SET_NOT_SUPPORTED,      "無法寫入唯讀屬性."
-	AFX_IDP_UNREG_DONE,               "已移除系統中的註冊項目,並已刪除相關的 INI 檔案。"
-	AFX_IDP_UNREG_FAILURE,            "並無移除系統中所有的註冊項目或 INI 檔案。。"
-	AFX_IDP_DLL_LOAD_FAILED,        "此程式需要使用檔案 %s,但無法找到此檔案。"
-	AFX_IDP_DLL_BAD_VERSION,        "此程式所連結的 Export: %s,在檔案 %s 中並不存在。本電腦中的 %s,可能為不相容的版本。"
-
-	// CFile/CArchive error strings for user failure
-#ifndef _AFX_NO_CFILE_RESOURCES
-	AFX_IDP_FAILED_INVALID_FORMAT   "檔案格式錯誤."
-	AFX_IDP_FAILED_INVALID_PATH     "%1\n沒有找到這個檔案.\n請確認正確的路徑和檔案名稱."
-	AFX_IDP_FAILED_DISK_FULL        "目標磁碟機空間已滿."
-	AFX_IDP_FAILED_ACCESS_READ      "無法讀取 %1, 它已經被某人開啟."
-	AFX_IDP_FAILED_ACCESS_WRITE     "無法寫入 %1, 它是唯讀檔或被某人開啟."
-	AFX_IDP_FAILED_IO_ERROR_READ    "當讀取 %1 時產生非預期錯誤."
-	AFX_IDP_FAILED_IO_ERROR_WRITE   "當寫入 %1 產生非預期錯誤."
-#endif // !_AFX_NO_CFILE_RESOURCES
-
-	// Parsing error prompts
-	AFX_IDP_PARSE_INT,              "請輸入一整數."
-	AFX_IDP_PARSE_REAL,             "請輸入一數值."
-	AFX_IDP_PARSE_INT_RANGE,        "請輸入一個在 %1 到 %2 之間的整數."
-	AFX_IDP_PARSE_REAL_RANGE,       "請輸入一個在 %1 到 %2 之間的數值."
-	AFX_IDP_PARSE_STRING_SIZE,      "請輸入少於 %1個文字."
-	AFX_IDP_PARSE_RADIO_BUTTON,     "請選擇一按鈕."
-	AFX_IDP_PARSE_BYTE,             "請輸入一個在 0 到 225 之間的整數."
-	AFX_IDP_PARSE_UINT,             "請輸入一正整數."
-	AFX_IDP_PARSE_DATETIME,         "請輸入一日期 和/或 時間."
-	AFX_IDP_PARSE_CURRENCY,         "請輸入一貨幣值."
-
-#ifndef _AFX_NO_OLE_RESOURCES
-	// OLE strings required for both servers and containers
-	AFX_IDS_PASTELINKEDTYPE         "連結 %s"
-	AFX_IDS_UNKNOWNTYPE             "未知型態"
-	AFX_IDP_FAILED_TO_NOTIFY        "%1\n無法登錄文件.\n這個文件已被開啟."
-	AFX_IDS_NOT_DOCOBJECT           "Document Object server 不支援此檔案。"
-#endif //!_AFX_NO_OLE_RESOURCES
-
-	AFX_IDP_NO_ERROR_AVAILABLE      "無可用的錯誤訊息."
-
-#ifndef _AFX_NO_CFILE_RESOURCES
-	AFX_IDP_FILE_NONE                "無錯誤產生."
-	AFX_IDP_FILE_GENERIC             "當存取 %1 時發生不可知的錯誤."
-	AFX_IDP_FILE_NOT_FOUND           "沒有找到 %1 ."
-	AFX_IDP_FILE_BAD_PATH            "%1 包含非合法路徑."
-	AFX_IDP_FILE_TOO_MANY_OPEN       "%1 無法開啟,因為已開啟太多檔案."
-	AFX_IDP_FILE_ACCESS_DENIED       "存取 %1 遭受拒絕."
-	AFX_IDP_FILE_INVALID_FILE        "一不合法檔案代碼與 %1 有關聯."
-	AFX_IDP_FILE_REMOVE_CURRENT      "%1 無法被移除因為它是使用中目錄."
-	AFX_IDP_FILE_DIR_FULL            "%1 無法產生因為目錄空間已滿."
-	AFX_IDP_FILE_BAD_SEEK            " %1 搜尋失敗"
-	AFX_IDP_FILE_HARD_IO             "當存取 %1 時產生硬體輸出入錯誤."
-	AFX_IDP_FILE_SHARING             "當存取 %1 時發生分享違反(Sharing Violation)."
-	AFX_IDP_FILE_LOCKING             "當存取 %1 時有產生鎖定違反(Locking Violation)."
-	AFX_IDP_FILE_DISKFULL            "當存取 %1 時磁碟空間已滿."
-	AFX_IDP_FILE_EOF                 "試圖存取超過 %1 之檔尾."
-	AFX_IDS_UNNAMED_FILE             "未命名檔案"
-#endif // !_AFX_NO_CFILE_RESOURCES
-
-	AFX_IDP_ARCH_NONE               "無錯誤產生."
-	AFX_IDP_ARCH_GENERIC                "當存取 %1 時發生不可知的錯誤."
-	AFX_IDP_ARCH_READONLY           "試圖寫入正在讀取中的 %1."
-	AFX_IDP_ARCH_ENDOFFILE          "試圖存取超過 %1 之檔尾."
-	AFX_IDP_ARCH_WRITEONLY          "試圖讀取正在寫入中的 %1."
-	AFX_IDP_ARCH_BADINDEX           "%1 有一壞的格式."
-	AFX_IDP_ARCH_BADCLASS           "%1 包含一非期望物件."
-	AFX_IDP_ARCH_BADSCHEMA          "%1 包含一不正確的觀點."
-
-#ifndef _AFX_NO_MAPI_RESOURCES
-	// MAPI strings / error messages
-	AFX_IDP_FAILED_MAPI_LOAD        "無法載入電子郵件支援."
-	AFX_IDP_INVALID_MAPI_DLL        "電子郵件系統之DLL是無效的."
-	AFX_IDP_FAILED_MAPI_SEND        "電子郵件傳送無法傳送訊息."
-#endif //!_AFX_NO_MAPI_RESOURCES
-
-#ifndef _AFX_NO_OCC_RESOURCES
-	AFX_IDS_OCC_SCALEUNITS_PIXELS   "像素"
-#endif //!_AFX_NO_OCC_RESOURCES
-END
-
-/////////////////////////////////////////////////////////////////////////////
-// Cursors
-
-AFX_IDC_CONTEXTHELP     CURSOR  DISCARDABLE     "res\\help.cur"
-
-#ifndef _AFX_NO_SPLITTER_RESOURCES
-AFX_IDC_SMALLARROWS     CURSOR  DISCARDABLE     "res\\sarrows.cur"
-AFX_IDC_HSPLITBAR       CURSOR  DISCARDABLE     "res\\splith.cur"
-AFX_IDC_VSPLITBAR       CURSOR  DISCARDABLE     "res\\splitv.cur"
-AFX_IDC_NODROPCRSR      CURSOR  DISCARDABLE     "res\\nodrop.cur"
-#endif //!_AFX_NO_SPLITTER_RESOURCES
-
-#ifndef _AFX_NO_TRACKER_RESOURCES
-AFX_IDC_TRACKNWSE       CURSOR  DISCARDABLE     "res\\trcknwse.cur"
-AFX_IDC_TRACKNESW       CURSOR  DISCARDABLE     "res\\trcknesw.cur"
-AFX_IDC_TRACKNS         CURSOR  DISCARDABLE     "res\\trckns.cur"
-AFX_IDC_TRACKWE         CURSOR  DISCARDABLE     "res\\trckwe.cur"
-AFX_IDC_TRACK4WAY       CURSOR  DISCARDABLE     "res\\trck4way.cur"
-AFX_IDC_MOVE4WAY        CURSOR  DISCARDABLE     "res\\move4way.cur"
-#endif //!_AFX_NO_TRACKER_RESOURCES
-
-#ifndef _AFX_NO_CTL3D_RESOURCES
-26567 BITMAP "res\\3dcheck.bmp" // Note: 26567 comes from CTL3D.H
-#endif
-
-/////////////////////////////////////////////////////////////////////////////
-// Standard Dialogs
-
-#ifndef _AFX_NO_NEWTYPEDLG_RESOURCES
-AFX_IDD_NEWTYPEDLG DIALOG DISCARDABLE  9, 26, 183, 70
-STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | 0x04
-CAPTION "開啟新檔"
-FONT 8, "MS Shell Dlg"
-BEGIN
-	LTEXT           "開啟新檔(&N) ",IDC_STATIC,6,5,123,8,NOT WS_GROUP
-	LISTBOX         AFX_IDC_LISTBOX,6,15,125,49,WS_VSCROLL | WS_TABSTOP
-	DEFPUSHBUTTON   "確定",IDOK,137,6,40,14
-	PUSHBUTTON      "取消",IDCANCEL,137,23,40,14
-	PUSHBUTTON      "說明(&H)",ID_HELP,137,43,40,14
-END
-#endif // !_AFX_NO_NEWTYPEDLG_RESOURCES
-
-/////////////////////////////////////////////////////////////////////////////
-// CMiniFrameWnd Bitmap
-
-AFX_IDB_MINIFRAME_MENU      BITMAP  DISCARDABLE     "res\\minifwnd.bmp"
-
-/////////////////////////////////////////////////////////////////////////////
-// CCheckListBox Bitmaps
-
-AFX_IDB_CHECKLISTBOX_NT     BITMAP  DISCARDABLE     "res\\ntcheck.bmp"
-AFX_IDB_CHECKLISTBOX_95     BITMAP  DISCARDABLE     "res\\95check.bmp"
-
-/////////////////////////////////////////////////////////////////////////////
-
-#endif //!_AFXDLL
-#endif //!__AFXRES_RC__
-
-/////////////////////////////////////////////////////////////////////////////

+ 0 - 284
libs/mfc/include/Deu/afxctl.rc

@@ -1,284 +0,0 @@
-// This is a part of the Microsoft Foundation Classes C++ library.
-// Copyright (C) 1992-1998 Microsoft Corporation
-// All rights reserved.
-//
-// This source code is only intended as a supplement to the
-// Microsoft Foundation Classes Reference and related
-// electronic documentation provided with the library.
-// See these sources for detailed information regarding the
-// Microsoft Foundation Classes product.
-
-#ifndef __AFXCTL_RC__
-#define __AFXCTL_RC__
-
-#ifndef __AFXRES_H__
-	#include <afxres.h>
-#endif
-
-#ifdef APSTUDIO_INVOKED
-// This will prevent the VC++ Resource Editor user from saving this file
-1 TEXTINCLUDE DISCARDABLE
-BEGIN
-"< Cannot change standard MFC resources! >\0"
-END
-#endif    // APSTUDIO_INVOKED
-
-#ifndef _AFXDLL
-
-/////////////////////////////////////////////////////////////////////////////
-// OLE Control Resources
-
-#ifndef _AFX_NO_STOCKPPG_RESOURCES
-/////////////////////////////////////////////////////////////////////////////
-//
-// Bitmap
-//
-
-AFX_IDB_TRUETYPE        BITMAP  DISCARDABLE     "RES\\TRUETYPE.BMP"
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Dialog
-//
-
-AFX_IDD_PROPPAGE_FONT DIALOG DISCARDABLE  13, 54, 250, 110
-STYLE WS_CHILD | 0x4
-FONT 8, "MS Shell Dlg"
-BEGIN
-	LTEXT           "Eigenschafts&name:",IDC_STATIC,3,5,61,8
-	COMBOBOX        AFX_IDC_FONTPROP,65,3,100,71,CBS_DROPDOWNLIST | CBS_SORT |
-					WS_VSCROLL | WS_TABSTOP
-	LTEXT           "&Schriftart:",IDC_STATIC,3,19,91,8
-	COMBOBOX        AFX_IDC_FONTNAMES,3,29,91,77,CBS_SIMPLE |
-					CBS_OWNERDRAWFIXED | CBS_AUTOHSCROLL | CBS_SORT |
-					CBS_HASSTRINGS | CBS_DISABLENOSCROLL | WS_VSCROLL |
-					WS_TABSTOP
-	LTEXT           "Schriftst&il:",IDC_STATIC,102,19,53,8
-	COMBOBOX        AFX_IDC_FONTSTYLES,104,29,53,53,CBS_DROPDOWNLIST |
-					CBS_DISABLENOSCROLL | WS_VSCROLL | WS_TABSTOP
-	LTEXT           "&Größe:",IDC_STATIC,167,19,40,8
-	COMBOBOX        AFX_IDC_FONTSIZES,167,29,36,53,CBS_DROPDOWN | CBS_SORT |
-					CBS_DISABLENOSCROLL | WS_VSCROLL | WS_TABSTOP
-	GROUPBOX        "Effekte",IDC_STATIC,104,44,142,24,WS_GROUP
-	CONTROL         "&Durchgestrichen",AFX_IDC_STRIKEOUT,"Button",BS_AUTOCHECKBOX |
-					WS_TABSTOP,109,55,65,10
-	CONTROL         "&Unterstrichen",AFX_IDC_UNDERLINE,"Button",BS_AUTOCHECKBOX |
-					WS_TABSTOP,175,55,65,10
-	GROUPBOX        "Beispiel",IDC_STATIC,104,71,142,36,WS_GROUP
-	CTEXT           "AaBbYyZz",AFX_IDC_SAMPLEBOX,110,80,130,22,SS_NOPREFIX |
-					NOT WS_VISIBLE
-END
-
-AFX_IDD_PROPPAGE_COLOR DIALOG DISCARDABLE  0, 0, 250, 62
-STYLE WS_CHILD | 0x4
-FONT 8, "MS Shell Dlg"
-BEGIN
-	LTEXT           "Eigenschafts&name:",IDC_STATIC,3,3,100,8
-	COMBOBOX        AFX_IDC_COLORPROP,3,13,100,54,CBS_DROPDOWNLIST |
-					CBS_SORT | WS_VSCROLL | WS_TABSTOP
-	LTEXT           "System&farbe:",IDC_STATIC,3,29,100,8
-	COMBOBOX        AFX_IDC_SYSTEMCOLORS,3,39,100,54,CBS_DROPDOWNLIST |
-					CBS_SORT | WS_VSCROLL | WS_TABSTOP
-	CONTROL         "",AFX_IDC_COLOR_BLACK,"Button",BS_OWNERDRAW | WS_GROUP |
-					WS_TABSTOP,118,4,15,11
-	CONTROL         "",AFX_IDC_COLOR_BLUE,"Button",BS_OWNERDRAW,138,4,15,11
-	CONTROL         "",AFX_IDC_COLOR_CYAN,"Button",BS_OWNERDRAW,158,4,15,11
-	CONTROL         "",AFX_IDC_COLOR_DARKBLUE,"Button",BS_OWNERDRAW,178,4,15,
-					11
-	CONTROL         "",AFX_IDC_COLOR_DARKCYAN,"Button",BS_OWNERDRAW,118,18,
-					15,11
-	CONTROL         "",AFX_IDC_COLOR_DARKGREEN,"Button",BS_OWNERDRAW,138,18,
-					15,11
-	CONTROL         "",AFX_IDC_COLOR_DARKMAGENTA,"Button",BS_OWNERDRAW,158,
-					18,15,11
-	CONTROL         "",AFX_IDC_COLOR_GRAY,"Button",BS_OWNERDRAW,178,18,15,11
-	CONTROL         "",AFX_IDC_COLOR_DARKRED,"Button",BS_OWNERDRAW,118,32,15,
-					11
-	CONTROL         "",AFX_IDC_COLOR_GREEN,"Button",BS_OWNERDRAW,138,32,15,
-					11
-	CONTROL         "",AFX_IDC_COLOR_LIGHTBROWN,"Button",BS_OWNERDRAW,158,32,
-					15,11
-	CONTROL         "",AFX_IDC_COLOR_LIGHTGRAY,"Button",BS_OWNERDRAW,178,32,
-					15,11
-	CONTROL         "",AFX_IDC_COLOR_MAGENTA,"Button",BS_OWNERDRAW,118,46,15,
-					11
-	CONTROL         "",AFX_IDC_COLOR_RED,"Button",BS_OWNERDRAW,138,46,15,11
-	CONTROL         "",AFX_IDC_COLOR_WHITE,"Button",BS_OWNERDRAW,158,46,15,
-					11
-	CONTROL         "",AFX_IDC_COLOR_YELLOW,"Button",BS_OWNERDRAW,178,46,15,
-					11
-END
-
-AFX_IDD_PROPPAGE_PICTURE DIALOG DISCARDABLE  0, 0, 250, 62
-STYLE WS_CHILD | 0x4
-FONT 8, "MS Shell Dlg"
-BEGIN
-	LTEXT           "Eigenschafts&name:",IDC_STATIC,3,3,100,8
-	COMBOBOX        AFX_IDC_PROPNAME,3,13,100,30,CBS_DROPDOWNLIST | CBS_SORT |
-					WS_VSCROLL | WS_TABSTOP
-	PUSHBUTTON      "&Durchsuchen...",AFX_IDC_BROWSE,3,35,54,14
-	PUSHBUTTON      "&Löschen",AFX_IDC_CLEAR,61,35,54,14
-	RTEXT           "Vorschau:",IDC_STATIC,107,3,42,16
-	CONTROL         "",AFX_IDC_PICTURE,"Static",SS_BLACKFRAME,151,4,93,54
-END
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Dialog Info
-//
-
-AFX_IDD_PROPPAGE_FONT DLGINIT
-BEGIN
-	1002, 0x403, 12, 0
-0x6f42, 0x646c, 0x4920, 0x6174, 0x696c, 0x0063,
-	0
-END
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// String Table
-//
-
-STRINGTABLE DISCARDABLE
-BEGIN
-	AFX_IDS_PROPPAGE_UNKNOWN "(Unbekannt)"
-	AFX_IDS_COLOR_DESKTOP   "Desktop"
-	AFX_IDS_COLOR_APPWORKSPACE "Anwendungsarbeitsbereich"
-	AFX_IDS_COLOR_WNDBACKGND "Fensterhintergrund"
-	AFX_IDS_COLOR_WNDTEXT   "Fenstertext"
-	AFX_IDS_COLOR_MENUBAR   "Menüleiste"
-	AFX_IDS_COLOR_MENUTEXT  "Menütext"
-	AFX_IDS_COLOR_ACTIVEBAR "Aktive Titelleiste"
-	AFX_IDS_COLOR_INACTIVEBAR "Inaktive Titelleiste"
-	AFX_IDS_COLOR_ACTIVETEXT "Aktiver Titelleistentext"
-	AFX_IDS_COLOR_INACTIVETEXT "Inaktiver Titelleistentext"
-	AFX_IDS_COLOR_ACTIVEBORDER "Aktiver Rahmen"
-	AFX_IDS_COLOR_INACTIVEBORDER "Inaktiver Rahmen"
-END
-#endif // !_AFX_NO_STOCKPPG_RESOURCES
-
-STRINGTABLE DISCARDABLE
-BEGIN
-#ifndef _AFX_NO_STOCKPPG_RESOURCES
-	AFX_IDS_COLOR_WNDFRAME  "Fensterrahmen"
-	AFX_IDS_COLOR_SCROLLBARS "Bildlaufleisten"
-	AFX_IDS_COLOR_BTNFACE   "Schaltfläche"
-	AFX_IDS_COLOR_BTNSHADOW "Schaltflächenschatten"
-	AFX_IDS_COLOR_BTNTEXT   "Schaltflächentext"
-	AFX_IDS_COLOR_BTNHIGHLIGHT "Schaltflächenhervorhebung"
-	AFX_IDS_COLOR_DISABLEDTEXT "Deaktivierter Text"
-	AFX_IDS_COLOR_HIGHLIGHT "Markierung"
-	AFX_IDS_COLOR_HIGHLIGHTTEXT "Markierter Text"
-	AFX_IDS_REGULAR         "Normal"
-	AFX_IDS_BOLD            "Fett"
-	AFX_IDS_ITALIC          "Kursiv"
-	AFX_IDS_BOLDITALIC      "Fett-kursiv"
-	AFX_IDS_SAMPLETEXT      "AaBbYyZz"
-#endif // !_AFX_NO_STOCKPPG_RESOURCES
-	AFX_IDS_DISPLAYSTRING_FONT "(Schriftart)"
-	AFX_IDS_DISPLAYSTRING_COLOR "(Farbe)"
-END
-
-STRINGTABLE DISCARDABLE
-BEGIN
-	AFX_IDS_DISPLAYSTRING_PICTURE "(Bild - %s)"
-#ifndef _AFX_NO_STOCKPPG_RESOURCES
-	AFX_IDS_PICTUREFILTER   "Alle Bildtypen|*.bmp;*.cur;*.dib;*.emf;*.ico;*.wmf|Bitmaps (*.bmp;*.dib)|*.bmp;*.dib|Symbole/Zeiger (*.ico;*.cur)|*.ico;*.cur|Metadateien (*.wmf;*.emf)|*.wmf;*.emf|Alle Dateien (*.*)|*.*||"
-#endif // !_AFX_NO_STOCKPPG_RESOURCES
-	AFX_IDS_PICTYPE_UNKNOWN "Unbekannt"
-	AFX_IDS_PICTYPE_NONE    "Kein"
-	AFX_IDS_PICTYPE_BITMAP  "Bitmap"
-	AFX_IDS_PICTYPE_METAFILE "Metadatei"
-	AFX_IDS_PICTYPE_ICON    "Symbol"
-#ifndef _AFX_NO_STOCKPPG_RESOURCES
-	AFX_IDS_COLOR_PPG       "Farbeigenschaften"
-	AFX_IDS_COLOR_PPG_CAPTION "Farben"
-	AFX_IDS_FONT_PPG        "Schrifteigenschaften"
-	AFX_IDS_FONT_PPG_CAPTION "Schriftarten"
-	AFX_IDS_PICTURE_PPG     "Bildeigenschaften"
-	AFX_IDS_PICTURE_PPG_CAPTION "Bilder"
-#endif // !_AFX_NO_STOCKPPG_RESOURCES
-	AFX_IDS_BORDERSTYLE_0   "0 - Keiner"
-	AFX_IDS_BORDERSTYLE_1   "1 - Fester einzelner"
-END
-
-STRINGTABLE DISCARDABLE
-BEGIN
-	AFX_IDS_VERB_EDIT       "&Bearbeiten"
-	AFX_IDS_VERB_PROPERTIES "&Eigenschaften..."
-END
-
-#ifndef _AFX_NO_STOCKPPG_RESOURCES
-STRINGTABLE DISCARDABLE
-BEGIN
-	AFX_IDP_PICTURECANTOPEN "Bilddatei %1 konnte nicht geöffnet werden. Die Datei existiert möglicherweise nicht oder ist nicht lesbar."
-	AFX_IDP_PICTURECANTLOAD "Bilddatei %1 konnte nicht geladen werden. Die Datei hat möglicherweise ein ungültiges Format."
-	AFX_IDP_PICTURETOOLARGE "Bilddatei %1 konnte nicht geladen werden, da sie nicht in den Speicher paßt."
-	AFX_IDP_PICTUREREADFAILED
-							"Bilddatei %1 konnte nicht geladen werden, da ein unbekannter Lesefehler auftrat."
-END
-
-STRINGTABLE DISCARDABLE
-BEGIN
-	AFX_IDS_PICTUREBROWSETITLE "Bilder durchsuchen"
-END
-#endif // !_AFX_NO_STOCKPPG_RESOURCES
-
-#ifndef _AFX_NO_CTLERROR_RESOURCES
-STRINGTABLE DISCARDABLE
-BEGIN
-	AFX_IDP_E_ILLEGALFUNCTIONCALL "Ungültiger Funktionsaufruf"
-	AFX_IDP_E_OVERFLOW      "Überlauf"
-	AFX_IDP_E_OUTOFMEMORY   "Nicht genügend Speicher"
-	AFX_IDP_E_DIVISIONBYZERO "Division durch Null"
-	AFX_IDP_E_OUTOFSTRINGSPACE "Nicht genügend Zeichenfolgenspeicher"
-	AFX_IDP_E_OUTOFSTACKSPACE "Nicht genügend Stack-Speicher"
-	AFX_IDP_E_BADFILENAMEORNUMBER "Ungültiger Dateiname oder -nummer"
-	AFX_IDP_E_FILENOTFOUND  "Datei nicht gefunden"
-	AFX_IDP_E_BADFILEMODE   "Falscher Dateimodus"
-	AFX_IDP_E_FILEALREADYOPEN "Datei bereits geöffnet"
-	AFX_IDP_E_DEVICEIOERROR "Geräte-E/A-Fehler"
-	AFX_IDP_E_FILEALREADYEXISTS "Datei besteht bereits"
-	AFX_IDP_E_BADRECORDLENGTH "Ungültige Datensatzlänge"
-	AFX_IDP_E_DISKFULL      "Datenträger voll"
-	AFX_IDP_E_BADRECORDNUMBER "Ungültige Datensatznummer"
-	AFX_IDP_E_BADFILENAME   "Ungültiger Dateiname"
-END
-
-STRINGTABLE DISCARDABLE
-BEGIN
-	AFX_IDP_E_TOOMANYFILES  "Zu viele Dateien"
-	AFX_IDP_E_DEVICEUNAVAILABLE "Gerät nicht verfügbar"
-	AFX_IDP_E_PERMISSIONDENIED "Zugriff verweigert"
-	AFX_IDP_E_DISKNOTREADY  "Laufwerk nicht bereit"
-	AFX_IDP_E_PATHFILEACCESSERROR "Pfad-/Dateizugriffsfehler"
-	AFX_IDP_E_PATHNOTFOUND  "Pfad nicht gefunden"
-	AFX_IDP_E_INVALIDPATTERNSTRING "Ungültige Musterzeichenfolge"
-	AFX_IDP_E_INVALIDUSEOFNULL "Ungültige Verwendung von Null"
-	AFX_IDP_E_INVALIDFILEFORMAT "Ungültiges Dateiformat"
-	AFX_IDP_E_INVALIDPROPERTYVALUE "Ungültiger Eigenschaftswert"
-	AFX_IDP_E_INVALIDPROPERTYARRAYINDEX "Ungültiger Feldindex"
-	AFX_IDP_E_SETNOTSUPPORTEDATRUNTIME "Eigenschaft kann nicht zur Laufzeit gesetzt werden"
-	AFX_IDP_E_SETNOTSUPPORTED "Eigenschaft ist schreibgeschützt"
-	AFX_IDP_E_NEEDPROPERTYARRAYINDEX
-							"Ein Feldindex muß angegeben sein, wenn ein Eigenschaftsfeld verwendet wird"
-	AFX_IDP_E_SETNOTPERMITTED "Eigenschaft kann für dieses Steuerelement nicht gesetzt werden"
-	AFX_IDP_E_GETNOTSUPPORTEDATRUNTIME "Eigenschaft kann nicht zur Laufzeit gelesen werden"
-END
-
-STRINGTABLE DISCARDABLE
-BEGIN
-	AFX_IDP_E_GETNOTSUPPORTED "Eigenschaft ist lesegeschützt"
-	AFX_IDP_E_PROPERTYNOTFOUND "Eigenschaft nicht gefunden"
-	AFX_IDP_E_INVALIDCLIPBOARDFORMAT "Ungültiges Zwischenablageformat"
-	AFX_IDP_E_INVALIDPICTURE "Ungültiges Bild"
-	AFX_IDP_E_PRINTERERROR  "Druckerfehler"
-	AFX_IDP_E_CANTSAVEFILETOTEMP
-							"Zum Speichern notwendige temporäre Datei kann nicht erstellt werden"
-	AFX_IDP_E_SEARCHTEXTNOTFOUND "Suchtext nicht gefunden"
-	AFX_IDP_E_REPLACEMENTSTOOLONG "Ersetzungstext zu lang"
-END
-#endif //!_AFX_NO_CTLERROR_RESOURCES
-
-#endif //!_AFXDLL
-#endif //__AFXOLECL_RC__

+ 0 - 105
libs/mfc/include/Deu/afxdb.rc

@@ -1,105 +0,0 @@
-// This is a part of the Microsoft Foundation Classes C++ library.
-// Copyright (C) 1992-1998 Microsoft Corporation
-// All rights reserved.
-//
-// This source code is only intended as a supplement to the
-// Microsoft Foundation Classes Reference and related
-// electronic documentation provided with the library.
-// See these sources for detailed information regarding the
-// Microsoft Foundation Classes product.
-
-#ifndef __AFXDB_RC__
-#define __AFXDB_RC__
-
-#ifndef __AFXRES_H__
-	#include <afxres.h>
-#endif
-
-#ifdef APSTUDIO_INVOKED
-// This will prevent the VC++ Resource Editor user from saving this file
-1 TEXTINCLUDE DISCARDABLE
-BEGIN
-"< Cannot change standard MFC resources! >\0"
-END
-#endif    // APSTUDIO_INVOKED
-
-#ifndef _AFXDLL
-
-/////////////////////////////////////////////////////////////////////////////
-// Database Resources
-
-// Database strings
-STRINGTABLE DISCARDABLE
-BEGIN
-	AFX_IDP_SQL_CONNECT_FAIL
-		"Der Verbindungsversuch zur Datenquelle ist gescheitert."
-	AFX_IDP_SQL_RECORDSET_FORWARD_ONLY
-		"Datensatzgruppe unterstützt nur Vorwärtsbewegung."
-	AFX_IDP_SQL_EMPTY_COLUMN_LIST
-		"Der Versuch, eine Tabelle zu öffnen, ist fehlgeschlagen, da am angegebenen Ort keine Spalten abgerufen werden konnten."
-	AFX_IDP_SQL_FIELD_SCHEMA_MISMATCH
-		"Von einer Abfrage wurden unerwartete Spaltendatentypen zurückgegeben."
-	AFX_IDP_SQL_ILLEGAL_MODE "Versuch zu aktualisieren oder zu löschen ist fehlgeschlagen."
-	AFX_IDP_SQL_MULTIPLE_ROWS_AFFECTED "Es wurden mehrere Zeilen aktualisiert."
-	AFX_IDP_SQL_NO_CURRENT_RECORD "Operation ist fehlgeschlagen; es gibt keinen aktuellen Datensatz."
-	AFX_IDP_SQL_NO_ROWS_AFFECTED
-		"Es waren keine Zeilen von der Aktualisierungs- oder Löschoperation betroffen."
-	AFX_IDP_SQL_RECORDSET_READONLY "Datensatzgruppe kann nur gelesen werden."
-	AFX_IDP_SQL_SQL_NO_TOTAL
-		"Der ODBC-Treiber unterstützt das MFC-LongBinary-Datenmodell nicht."
-	AFX_IDP_SQL_ODBC_LOAD_FAILED
-		"Der Versuch, die benötigte Komponente ODBC32.DLL zu laden, ist fehlgeschlagen."
-	AFX_IDP_SQL_DYNASET_NOT_SUPPORTED
-		"Der ODBC-Treiber unterstützt keine Dynasets."
-	AFX_IDP_SQL_SNAPSHOT_NOT_SUPPORTED
-		"Statische ODBC-Cursor werden zur Unterstützung von Snapshots benötigt."
-	AFX_IDP_SQL_API_CONFORMANCE
-		"Der ODBC-Treiber ist inkompatibel zu den MFC-Datenbankklassen (API_CONFORMANCE >= SQL_OAC_LEVEL1 wird benötigt)."
-	AFX_IDP_SQL_SQL_CONFORMANCE
-		"Der ODBC-Treiber ist inkompatibel zu den MFC-Datenbankklassen (SQL_CONFORMANCE >= SQL_OSC_MINIMUM wird benötigt)."
-	AFX_IDP_SQL_NO_DATA_FOUND
-		"Es wurde versucht, hinter das Ende oder vor den Anfang der Daten zu gelangen."
-	AFX_IDP_SQL_ROW_UPDATE_NOT_SUPPORTED
-		"Dynasets werden vom ODBC-Treiber nicht unterstützt."
-	AFX_IDP_SQL_ODBC_V2_REQUIRED
-		"Treiber gemäß ODBC Level 2 wird benötigt."
-	AFX_IDP_SQL_NO_POSITIONED_UPDATES
-		"Positionierte Aktualisierungen werden vom ODBC-Treiber nicht unterstützt."
-	AFX_IDP_SQL_LOCK_MODE_NOT_SUPPORTED
-		"Der angeforderte Sperrmodus wird nicht unterstützt."
-	AFX_IDP_SQL_DATA_TRUNCATED
-		"Daten abgeschnitten."
-	AFX_IDP_SQL_ROW_FETCH
-		"Fehler beim Abruf eines Datensatzes."
-	AFX_IDP_SQL_INCORRECT_ODBC
-		"Ein benötigter ODBC-Einsprungspunkt konnte nicht gefunden werden. Überprüfen Sie, ob OBDC korrekt installiert ist."
-	AFX_IDP_SQL_UPDATE_DELETE_FAILED
-		"Fehler bei der Aktualisierungs- oder Löschoperation."
-	AFX_IDP_SQL_DYNAMIC_CURSOR_NOT_SUPPORTED
-		"Dynamische Cursor werden vom ODBC-Treiber nicht unterstützt."
-	AFX_IDP_SQL_FIELD_NOT_FOUND
-		"Ungültiger Feldname oder Feldindex."
-	AFX_IDP_SQL_BOOKMARKS_NOT_SUPPORTED
-		"Lesezeichen werden für ODBC-Treiber nicht unterstützt."
-	AFX_IDP_SQL_BOOKMARKS_NOT_ENABLED
-		"Lesezeichen bei Satzgruppe nicht aktiviert."
-	AFX_IDP_DAO_ENGINE_INITIALIZATION
-		"Initialisierung des DAO/Jet-Datenbankmoduls nicht möglich."
-	AFX_IDP_DAO_DFX_BIND
-		"Ungültiger DFX-Werteparameter."
-	AFX_IDP_DAO_OBJECT_NOT_OPEN
-		"DAO-TableDef oder DAO-QueryDef nicht offen."
-	AFX_IDP_DAO_ROWTOOSHORT
-		"Fehler bei GetRows-Operation. Für die Zeile ist nicht genügend Speicher reserviert."
-	AFX_IDP_DAO_BADBINDINFO
-		"GetRows-Bindungsfehler. Nicht übereinstimmende Datentypen sind wahrscheinlich die Ursache."
-	AFX_IDP_DAO_COLUMNUNAVAILABLE
-		"Fehler bei GetRows-Operation. Die angeforderte Spalte ist kein Element der Datensatzgruppe."
-
-	AFX_IDS_DELETED "<Gelöscht>"
-END
-
-/////////////////////////////////////////////////////////////////////////////
-
-#endif //!_AFXDLL
-#endif //__AFXDB_RC__

+ 0 - 66
libs/mfc/include/Deu/afxolecl.rc

@@ -1,66 +0,0 @@
-// This is a part of the Microsoft Foundation Classes C++ library.
-// Copyright (C) 1992-1998 Microsoft Corporation
-// All rights reserved.
-//
-// This source code is only intended as a supplement to the
-// Microsoft Foundation Classes Reference and related
-// electronic documentation provided with the library.
-// See these sources for detailed information regarding the
-// Microsoft Foundation Classes product.
-
-#ifndef __AFXOLECL_RC__
-#define __AFXOLECL_RC__
-
-#ifndef __AFXRES_H__
-	#include <afxres.h>
-#endif
-
-#ifndef _INC_DLGS
-	#include <dlgs.h>
-#endif
-
-#ifdef APSTUDIO_INVOKED
-// This will prevent the VC++ Resource Editor user from saving this file
-1 TEXTINCLUDE DISCARDABLE
-BEGIN
-"< Cannot change standard MFC resources! >\0"
-END
-#endif    // APSTUDIO_INVOKED
-
-#ifndef _AFXDLL
-
-/////////////////////////////////////////////////////////////////////////////
-// OLE Client Resources
-
-/////////////////////////////////////////////////////////////////////////////
-// OLE strings
-
-STRINGTABLE DISCARDABLE
-BEGIN
-	AFX_IDP_STATIC_OBJECT           "Ein statisches ActiveX-Objekt kann nicht aktiviert werden."
-	AFX_IDP_FAILED_TO_CONNECT       "Fehler beim Verbindungsversuch.\nDie Verbindung ist vielleicht unterbrochen."
-	AFX_IDP_SERVER_BUSY             "Der Befehl kann nicht verarbeitet werden, weil der Server beschäftigt ist."
-	AFX_IDP_BAD_VERB                "Fehler beim Ausführen der Server-Operation."
-	AFX_IDP_FAILED_TO_LAUNCH        "Die Server-Anwendung konnte nicht gestartet werden."
-	AFX_IDS_UPDATING_ITEMS          "ActiveX-Objekte werden aktualisiert"
-	AFX_IDP_FAILED_TO_CONVERT       "ActiveX-Objekt konnte nicht konvertiert werden."
-	AFX_IDP_ASK_TO_DISCARD          "ActiveX-Objekte können beim Beenden von Windows nicht gespeichert werden!\nAlle bei %1 vorgenommenen Änderungen ignorieren?"
-	AFX_IDP_FAILED_TO_CREATE        "Fehler beim Erzeugen des Objekts. Stellen Sie sicher, daß das Objekt in der Systemregistrierung eingetragen ist."
-
-	AFX_IDS_METAFILE_FORMAT         "Bild (Metadatei)\nein Bild"
-	AFX_IDS_DIB_FORMAT              "Geräteunabhängiges Bitmap\nein geräteunabhängiges Bitmap"
-	AFX_IDS_BITMAP_FORMAT           "Bitmap\nein Bitmap"
-	AFX_IDS_LINKSOURCE_FORMAT       "%s\n%s"
-	AFX_IDS_EMBED_FORMAT            "%s\n%s"
-	AFX_IDS_RTF_FORMAT              "Rich Text (RTF)\nText mit Schrift- und Absatzformatierung"
-	AFX_IDS_TEXT_FORMAT             "Unformatierter Text\nText ohne Formatierung"
-
-	AFX_IDS_INVALID_CURRENCY        "Ungültige Währung."
-	AFX_IDS_INVALID_DATETIME        "Ungültiges Datum oder ungültige Zeit."
-	AFX_IDS_INVALID_DATETIMESPAN    "Ungültige Datums- oder Zeitspanne."
-END
-
-/////////////////////////////////////////////////////////////////////////////
-
-#endif //!_AFXDLL
-#endif //__AFXOLECL_RC__

+ 0 - 53
libs/mfc/include/Deu/afxolesv.rc

@@ -1,53 +0,0 @@
-// This is a part of the Microsoft Foundation Classes C++ library.
-// Copyright (C) 1992-1998 Microsoft Corporation
-// All rights reserved.
-//
-// This source code is only intended as a supplement to the
-// Microsoft Foundation Classes Reference and related
-// electronic documentation provided with the library.
-// See these sources for detailed information regarding the
-// Microsoft Foundation Classes product.
-
-#ifndef __AFXOLESV_RC__
-#define __AFXOLESV_RC__
-
-#ifndef __AFXRES_H__
-	#include <afxres.h>
-#endif
-
-#ifdef APSTUDIO_INVOKED
-// This will prevent the VC++ Resource Editor user from saving this file
-1 TEXTINCLUDE DISCARDABLE
-BEGIN
-"< Cannot change standard MFC resources! >\0"
-END
-#endif    // APSTUDIO_INVOKED
-
-#ifndef _AFXDLL
-
-/////////////////////////////////////////////////////////////////////////////
-// OLE Server Resources
-
-// OLE strings
-STRINGTABLE DISCARDABLE
-BEGIN
-	AFX_IDP_ASK_TO_UPDATE,              "%1 vor dem Fortfahren aktualisieren?"
-	AFX_IDP_FAILED_TO_UPDATE,           "Client konnte nicht aktualisiert werden."
-
-	AFX_IDP_FAILED_TO_REGISTER,         "Registrierung nicht möglich. ActiveX-Features möglicherweise defekt."
-	AFX_IDP_FAILED_TO_AUTO_REGISTER,    "Fehler bei der Aktualisierung der Systemregistrierung.\nVersuchen Sie REGEDIT zu benutzen."
-END
-
-STRINGTABLE PRELOAD
-BEGIN
-	AFX_IDS_APP_TITLE_EMBEDDING,        "%1 in %2"
-	AFX_IDS_OBJ_TITLE_INPLACE,          "%1 - %2"
-	AFX_IDS_EXIT_MENU,                  "&Beenden und zu %1 zurückkehren"
-	AFX_IDS_UPDATE_MENU,                "&Aktualisiere %1"
-	AFX_IDS_SAVEFILECOPY,               "Kopie speichern unter"
-END
-
-/////////////////////////////////////////////////////////////////////////////
-
-#endif //!_AFXDLL
-#endif //__AFXOLESV_RC__

+ 0 - 90
libs/mfc/include/Deu/afxprint.rc

@@ -1,90 +0,0 @@
-// This is a part of the Microsoft Foundation Classes C++ library.
-// Copyright (C) 1992-1998 Microsoft Corporation
-// All rights reserved.
-//
-// This source code is only intended as a supplement to the
-// Microsoft Foundation Classes Reference and related
-// electronic documentation provided with the library.
-// See these sources for detailed information regarding the
-// Microsoft Foundation Classes product.
-
-#ifndef __AFXPRINT_RC__
-#define __AFXPRINT_RC__
-
-#ifndef __AFXRES_H__
-	#include <afxres.h>
-#endif
-
-#ifdef APSTUDIO_INVOKED
-// This will prevent the VC++ Resource Editor user from saving this file
-1 TEXTINCLUDE DISCARDABLE
-BEGIN
-"< Cannot change standard MFC resources! >\0"
-END
-#endif    // APSTUDIO_INVOKED
-
-#ifndef _AFXDLL
-
-/////////////////////////////////////////////////////////////////////////////
-// Printing Resources
-
-AFX_IDC_MAGNIFY         CURSOR  DISCARDABLE     "res\\magnify.cur"
-
-AFX_IDD_PRINTDLG DIALOG DISCARDABLE  6, 18, 133, 95
-STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | 0x04
-FONT 8, "MS Shell Dlg"
-BEGIN
-	CTEXT           "Drucke",IDC_STATIC,0,9,133,8
-	CTEXT           "",AFX_IDC_PRINT_DOCNAME,0,19,133,8
-	CTEXT           "auf",IDC_STATIC,0,29,133,8
-	CTEXT           "",AFX_IDC_PRINT_PRINTERNAME,0,39,133,8
-	CTEXT           "",AFX_IDC_PRINT_PORTNAME,0,49,133,8
-	CTEXT           "",AFX_IDC_PRINT_PAGENUM,0,59,133,8
-	PUSHBUTTON      "Abbrechen",IDCANCEL,46,74,40,14
-END
-
-// Preview Toolbar Dialog
-AFX_IDD_PREVIEW_TOOLBAR DIALOG PRELOAD DISCARDABLE  0, 0, 330, 16
-STYLE WS_CHILD | 0x04
-FONT 8, "MS Shell Dlg"
-BEGIN
-	PUSHBUTTON      "&Drucken...",AFX_ID_PREVIEW_PRINT,2,2,44,12
-	PUSHBUTTON      "&Nächste",AFX_ID_PREVIEW_NEXT,48,2,44,12
-	PUSHBUTTON      "&Vorherige",AFX_ID_PREVIEW_PREV,94,2,44,12
-	PUSHBUTTON      "",AFX_ID_PREVIEW_NUMPAGE,140,2,44,12
-	PUSHBUTTON      "Ver&größern",AFX_ID_PREVIEW_ZOOMIN,186,2,44,12
-	PUSHBUTTON      "Ver&kleinern",AFX_ID_PREVIEW_ZOOMOUT,232,2,44,12
-	PUSHBUTTON      "&Schließen",AFX_ID_PREVIEW_CLOSE,278,2,44,12
-END
-
-// Printing strings
-STRINGTABLE DISCARDABLE
-BEGIN
-	// print progress dialog strings
-	AFX_IDS_PRINTONPORT,            "auf %1"         // for print output
-	AFX_IDS_ONEPAGE,                "&Eine Seite"     // for preview button
-	AFX_IDS_TWOPAGE,                "&Zwei Seiten"     // for preview button
-	AFX_IDS_PRINTPAGENUM,           "Seite %u"       // for print output
-	AFX_IDS_PREVIEWPAGEDESC,        "Seite %u\nSeiten %u-%u\n"
-
-	// print to file dialog strings
-	AFX_IDS_PRINTDEFAULTEXT,        "prn"           // default extension
-	AFX_IDS_PRINTDEFAULT,           "Ausgabe.prn"    // default file
-	AFX_IDS_PRINTFILTER,
-		"Drucker-Dateien (*.prn)|*.prn|Alle Dateien (*.*)|*.*||"
-	AFX_IDS_PRINTCAPTION,           "In Datei drucken" // caption for browse dlg
-	AFX_IDS_PRINTTOFILE,            "in %1"         // to file
-END
-
-// Print Preview Accelerator Table
-AFX_IDR_PREVIEW_ACCEL ACCELERATORS LOADONCALL MOVEABLE
-BEGIN
-	VK_NEXT,    AFX_ID_PREVIEW_NEXT,    VIRTKEY, NOINVERT
-	VK_PRIOR,   AFX_ID_PREVIEW_PREV,    VIRTKEY, NOINVERT
-	VK_ESCAPE,  AFX_ID_PREVIEW_CLOSE,   VIRTKEY, NOINVERT
-END
-
-/////////////////////////////////////////////////////////////////////////////
-
-#endif //!_AFXDLL
-#endif //__AFXPRINT_RC__

+ 0 - 202
libs/mfc/include/Deu/afxres.rc

@@ -1,202 +0,0 @@
-// This is a part of the Microsoft Foundation Classes C++ library.
-// Copyright (C) 1992-1998 Microsoft Corporation
-// All rights reserved.
-//
-// This source code is only intended as a supplement to the
-// Microsoft Foundation Classes Reference and related
-// electronic documentation provided with the library.
-// See these sources for detailed information regarding the
-// Microsoft Foundation Classes product.
-
-#ifndef __AFXRES_RC__
-#define __AFXRES_RC__
-
-#ifndef __AFXRES_H__
-	#include <afxres.h>
-#endif
-
-#ifdef APSTUDIO_INVOKED
-// This will prevent the VC++ Resource Editor user from saving this file
-1 TEXTINCLUDE DISCARDABLE
-BEGIN
-"< Cannot change standard MFC resources! >\0"
-END
-#endif //APSTUDIO_INVOKED
-
-#ifndef _AFXDLL
-
-/////////////////////////////////////////////////////////////////////////////
-// Default resource description for MFC applications
-/////////////////////////////////////////////////////////////////////////////
-
-/////////////////////////////////////////////////////////////////////////////
-// Strings
-
-STRINGTABLE DISCARDABLE
-BEGIN
-#ifndef _AFX_NO_APPMENU_RESOURCES
-	AFX_IDS_OPENFILE,               "Öffnen"
-	AFX_IDS_SAVEFILE,               "Speichern unter"
-	AFX_IDS_ALLFILTER,              "Alle Dateien (*.*)"
-	AFX_IDS_UNTITLED,               "Unbenannt"
-	AFX_IDS_HIDE,                   "&Verbergen"
-#endif // !_AFX_NO_APPMENUSTRING_RESOURCES
-
-	AFX_IDS_MEMORY_EXCEPTION,       "Nicht genügend Speicher."
-	AFX_IDS_NOT_SUPPORTED_EXCEPTION,"Es wurde versucht, eine nicht unterstützte Operation auszuführen."
-	AFX_IDS_RESOURCE_EXCEPTION,     "Eine benötigte Ressource ist nicht verfügbar."
-	AFX_IDS_USER_EXCEPTION,         "Ein unerwarteter Fehler ist aufgetreten."
-
-	// General error prompts
-#ifndef _AFX_NO_FILECMD_RESOURCES
-	AFX_IDP_INVALID_FILENAME,       "Ungültiger Dateiname."
-	AFX_IDP_FAILED_TO_OPEN_DOC,     "Fehler beim Öffnen des Dokuments."
-	AFX_IDP_FAILED_TO_SAVE_DOC,     "Fehler beim Speichern des Dokuments."
-	AFX_IDP_ASK_TO_SAVE,            "Änderungen in %1 speichern?"
-	AFX_IDP_FAILED_TO_CREATE_DOC,   "Fehler beim Erzeugen eines leeren Dokuments."
-	AFX_IDP_FILE_TOO_LARGE,         "Die Datei ist zu groß zum Öffnen."
-	AFX_IDP_FAILED_TO_START_PRINT,  "Der Druckauftrag konnte nicht gestartet werden."
-#endif // !_AFX_NO_FILECMD_RESOURCES
-	AFX_IDP_FAILED_TO_LAUNCH_HELP,  "Die Hilfe konnte nicht aufgerufen werden."
-	AFX_IDP_INTERNAL_FAILURE,       "Interner Anwendungsfehler."
-	AFX_IDP_COMMAND_FAILURE,        "Befehl fehlgeschlagen."
-	AFX_IDP_FAILED_MEMORY_ALLOC     "Nicht genügend Speicher vorhanden, um Operation auszuführen."
-	AFX_IDP_GET_NOT_SUPPORTED,      "Lesen ist wegen der Eigenschaft Nur-Schreiben nicht möglich."
-	AFX_IDP_SET_NOT_SUPPORTED,      "Schreiben ist wegen der Eigenschaft Nur-Lesen nicht möglich."
-	AFX_IDP_UNREG_DONE,               "Einträge in der Systemregistrierung wurden entfernt, und die INI-Datai (falls vorhanden) wurde gelöscht."
-	AFX_IDP_UNREG_FAILURE,            "Es wurde nicht jeder Eintrag in der Systemregistrierung (oder die ganze INI-Datei) entfernt."
-	AFX_IDP_DLL_LOAD_FAILED,        "Dieses Programm benötigt die Datei %s, die auf diesem System nicht gefunden wurde."
-	AFX_IDP_DLL_BAD_VERSION,        "Programm verbunden mit Export-%s (fehlt) in Datei %s. Auf diesem Computer ist evtl. eine nichtkompatible Version von %s installiert."
-
-	// CFile/CArchive error strings for user failure
-#ifndef _AFX_NO_CFILE_RESOURCES
-	AFX_IDP_FAILED_INVALID_FORMAT   "Unerwartetes Dateiformat."
-	AFX_IDP_FAILED_INVALID_PATH     "%1\nDiese Datei konnte nicht gefunden werden.\nÜberprüfen Sie, ob der korrekte Pfad und Dateiname angegeben wurde."
-	AFX_IDP_FAILED_DISK_FULL        "Das Ziellaufwerk ist voll."
-	AFX_IDP_FAILED_ACCESS_READ      "Lesen von %1 ist nicht möglich, da von anderem Anwender geöffnet."
-	AFX_IDP_FAILED_ACCESS_WRITE     "Schreiben auf %1 ist nicht möglich, da schreibgeschützt oder von anderem Anwender geöffnet."
-	AFX_IDP_FAILED_IO_ERROR_READ    "Beim Lesen von %1 ist ein unerwarteter Fehler aufgetreten."
-	AFX_IDP_FAILED_IO_ERROR_WRITE   "Beim Schreiben von %1 ist ein unerwarteter Fehler aufgetreten."
-#endif // !_AFX_NO_CFILE_RESOURCES
-
-	// Parsing error prompts
-	AFX_IDP_PARSE_INT,              "Geben Sie bitte eine ganze Zahl ein."
-	AFX_IDP_PARSE_REAL,             "Geben Sie bitte eine Zahl ein."
-	AFX_IDP_PARSE_INT_RANGE,        "Geben Sie bitte eine ganze Zahl zwischen %1 und %2 ein."
-	AFX_IDP_PARSE_REAL_RANGE,       "Geben Sie bitte eine Zahl zwischen %1 und %2 ein."
-	AFX_IDP_PARSE_STRING_SIZE,      "Geben Sie bitte nicht mehr als %1 Zeichen ein."
-	AFX_IDP_PARSE_RADIO_BUTTON,     "Wählen Sie bitte eine Schaltfläche."
-	AFX_IDP_PARSE_BYTE,             "Geben Sie bitte eine ganze Zahl zwischen 0 und 255 ein."
-	AFX_IDP_PARSE_UINT,             "Geben Sie bitte eine positive ganze Zahl ein."
-	AFX_IDP_PARSE_DATETIME,         "Geben Sie bitte ein Datum und/oder eine Zeit ein."
-	AFX_IDP_PARSE_CURRENCY,         "Geben Sie bitte eine Währung ein."
-
-#ifndef _AFX_NO_OLE_RESOURCES
-	// OLE strings required for both servers and containers
-	AFX_IDS_PASTELINKEDTYPE         "Verknüpft: %s"
-	AFX_IDS_UNKNOWNTYPE             "Unbekannter Typ"
-	AFX_IDP_FAILED_TO_NOTIFY        "%1\nRegistrierung des Dokuments nicht möglich.\nDas Dokument ist vielleicht schon geöffnet."
-	AFX_IDS_NOT_DOCOBJECT           "Die Datei wird nicht von einem Dokumentobjekt-Server unterstützt."
-#endif //!_AFX_NO_OLE_RESOURCES
-
-	AFX_IDP_NO_ERROR_AVAILABLE      "Keine Fehlermeldung verfügbar."
-
-#ifndef _AFX_NO_CFILE_RESOURCES
-	AFX_IDP_FILE_NONE                "Kein Fehler aufgetreten."
-	AFX_IDP_FILE_GENERIC             "Ein unbekannter Fehler ist beim Zugriff auf %1 aufgetreten."
-	AFX_IDP_FILE_NOT_FOUND           "%1 wurde nicht gefunden."
-	AFX_IDP_FILE_BAD_PATH            "%1 enthält eine ungültige Pfadangabe."
-	AFX_IDP_FILE_TOO_MANY_OPEN       "%1 konnte nicht geöffnet werden, da zu viele Dateien geöffnet sind."
-	AFX_IDP_FILE_ACCESS_DENIED       "Zugriff auf %1 wurde verwehrt."
-	AFX_IDP_FILE_INVALID_FILE        "Eine ungültige Dateikennung war mit %1 verbunden."
-	AFX_IDP_FILE_REMOVE_CURRENT      "Das Verzeichnis %1 konnte nicht entfernt werden, da es das aktuelle Verzeichnis ist. "
-	AFX_IDP_FILE_DIR_FULL            "%1 konnte nicht erstellt werden, da das Verzeichnis voll ist."
-	AFX_IDP_FILE_BAD_SEEK            "Positionierungsfehler auf %1."
-	AFX_IDP_FILE_HARD_IO             "Ein Hardware-E/A-Fehler wurde während des Zugriffs auf %1 gemeldet."
-	AFX_IDP_FILE_SHARING             "Eine Zugriffsverletzung ist während des Zugriffs auf %1 aufgetreten."
-	AFX_IDP_FILE_LOCKING             "Eine Sperrverletzung ist während des Zugriffs auf %1 aufgetreten."
-	AFX_IDP_FILE_DISKFULL            "Beim Zugriff auf %1 wurde ein voller Datenträger gemeldet."
-	AFX_IDP_FILE_EOF                 "Es wurde versucht, auf eine Stelle hinter dem Ende von %1 zuzugreifen."
-	AFX_IDS_UNNAMED_FILE             "eine unbenannte Datei"
-#endif // !_AFX_NO_CFILE_RESOURCES
-
-	AFX_IDP_ARCH_NONE               "Kein Fehler aufgetreten."
-	AFX_IDP_ARCH_GENERIC                "Ein unbekannter Fehler ist beim Zugriff auf %1 aufgetreten."
-	AFX_IDP_ARCH_READONLY           "%1 ist nur lesbar. Es wurde versucht, darauf zu schreiben."
-	AFX_IDP_ARCH_ENDOFFILE          "Es wurde versucht, auf eine Stelle hinter dem Ende von %1 zuzugreifen."
-	AFX_IDP_ARCH_WRITEONLY          "%1 ist lesegeschützt. Es wurde versucht, davon zu lesen."
-	AFX_IDP_ARCH_BADINDEX           "%1 besitzt ein falsches Format."
-	AFX_IDP_ARCH_BADCLASS           "%1 enthielt ein unerwartetes Objekt."
-	AFX_IDP_ARCH_BADSCHEMA          "%1 enthält ein falsches Schema."
-
-#ifndef _AFX_NO_MAPI_RESOURCES
-	// MAPI strings / error messages
-	AFX_IDP_FAILED_MAPI_LOAD        "Systemunterstützung für elektronische Post kann nicht geladen werden."
-	AFX_IDP_INVALID_MAPI_DLL        "Die System-DLL für elektronische Post ist ungültig."
-	AFX_IDP_FAILED_MAPI_SEND        "\042Nachricht senden\042 scheiterte beim Senden der Nachricht."
-#endif //!_AFX_NO_MAPI_RESOURCES
-
-#ifndef _AFX_NO_OCC_RESOURCES
-	AFX_IDS_OCC_SCALEUNITS_PIXELS   "Pixel"
-#endif //!_AFX_NO_OCC_RESOURCES
-END
-
-/////////////////////////////////////////////////////////////////////////////
-// Cursors
-
-AFX_IDC_CONTEXTHELP     CURSOR  DISCARDABLE     "res\\help.cur"
-
-#ifndef _AFX_NO_SPLITTER_RESOURCES
-AFX_IDC_SMALLARROWS     CURSOR  DISCARDABLE     "res\\sarrows.cur"
-AFX_IDC_HSPLITBAR       CURSOR  DISCARDABLE     "res\\splith.cur"
-AFX_IDC_VSPLITBAR       CURSOR  DISCARDABLE     "res\\splitv.cur"
-AFX_IDC_NODROPCRSR      CURSOR  DISCARDABLE     "res\\nodrop.cur"
-#endif //!_AFX_NO_SPLITTER_RESOURCES
-
-#ifndef _AFX_NO_TRACKER_RESOURCES
-AFX_IDC_TRACKNWSE       CURSOR  DISCARDABLE     "res\\trcknwse.cur"
-AFX_IDC_TRACKNESW       CURSOR  DISCARDABLE     "res\\trcknesw.cur"
-AFX_IDC_TRACKNS         CURSOR  DISCARDABLE     "res\\trckns.cur"
-AFX_IDC_TRACKWE         CURSOR  DISCARDABLE     "res\\trckwe.cur"
-AFX_IDC_TRACK4WAY       CURSOR  DISCARDABLE     "res\\trck4way.cur"
-AFX_IDC_MOVE4WAY        CURSOR  DISCARDABLE     "res\\move4way.cur"
-#endif //!_AFX_NO_TRACKER_RESOURCES
-
-#ifndef _AFX_NO_CTL3D_RESOURCES
-26567 BITMAP "res\\3dcheck.bmp" // Note: 26567 comes from CTL3D.H
-#endif
-
-/////////////////////////////////////////////////////////////////////////////
-// Standard Dialogs
-
-#ifndef _AFX_NO_NEWTYPEDLG_RESOURCES
-AFX_IDD_NEWTYPEDLG DIALOG DISCARDABLE  9, 26, 183, 70
-STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | 0x04
-CAPTION "Neu"
-FONT 8, "MS Shell Dlg"
-BEGIN
-	LTEXT           "&Neu",IDC_STATIC,6,5,123,8,NOT WS_GROUP
-	LISTBOX         AFX_IDC_LISTBOX,6,15,125,49,WS_VSCROLL | WS_TABSTOP
-	DEFPUSHBUTTON   "OK",IDOK,137,6,40,14
-	PUSHBUTTON      "Abbrechen",IDCANCEL,137,23,40,14
-	PUSHBUTTON      "&Hilfe",ID_HELP,137,43,40,14
-END
-#endif // !_AFX_NO_NEWTYPEDLG_RESOURCES
-
-/////////////////////////////////////////////////////////////////////////////
-// CMiniFrameWnd Bitmap
-
-AFX_IDB_MINIFRAME_MENU      BITMAP  DISCARDABLE     "res\\minifwnd.bmp"
-
-/////////////////////////////////////////////////////////////////////////////
-// CCheckListBox Bitmaps
-
-AFX_IDB_CHECKLISTBOX_NT     BITMAP  DISCARDABLE     "res\\ntcheck.bmp"
-AFX_IDB_CHECKLISTBOX_95     BITMAP  DISCARDABLE     "res\\95check.bmp"
-
-/////////////////////////////////////////////////////////////////////////////
-
-#endif //!_AFXDLL
-#endif //!__AFXRES_RC__
-
-/////////////////////////////////////////////////////////////////////////////

+ 0 - 284
libs/mfc/include/Esp/afxctl.rc

@@ -1,284 +0,0 @@
-// This is a part of the Microsoft Foundation Classes C++ library.
-// Copyright (C) 1992-1998 Microsoft Corporation
-// All rights reserved.
-//
-// This source code is only intended as a supplement to the
-// Microsoft Foundation Classes Reference and related
-// electronic documentation provided with the library.
-// See these sources for detailed information regarding the
-// Microsoft Foundation Classes product.
-
-#ifndef __AFXCTL_RC__
-#define __AFXCTL_RC__
-
-#ifndef __AFXRES_H__
-	#include <afxres.h>
-#endif
-
-#ifdef APSTUDIO_INVOKED
-// This will prevent the VC++ Resource Editor user from saving this file
-1 TEXTINCLUDE DISCARDABLE
-BEGIN
-"< ¡No se pueden cambiar recursos MFC estándar! >\0"
-END
-#endif    // APSTUDIO_INVOKED
-
-#ifndef _AFXDLL
-
-/////////////////////////////////////////////////////////////////////////////
-// OLE Control Resources
-
-#ifndef _AFX_NO_STOCKPPG_RESOURCES
-/////////////////////////////////////////////////////////////////////////////
-//
-// Bitmap
-//
-
-AFX_IDB_TRUETYPE        BITMAP  DISCARDABLE     "RES\\TRUETYPE.BMP"
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Dialog
-//
-
-AFX_IDD_PROPPAGE_FONT DIALOG DISCARDABLE  13, 54, 250, 110
-STYLE WS_CHILD | 0x4
-FONT 8, "MS Shell Dlg"
-BEGIN
-	LTEXT           "&Propiedad:",IDC_STATIC,3,5,61,8
-	COMBOBOX        AFX_IDC_FONTPROP,65,3,100,71,CBS_DROPDOWNLIST | CBS_SORT |
-					WS_VSCROLL | WS_TABSTOP
-	LTEXT           "&Fuente:",IDC_STATIC,3,19,91,8
-	COMBOBOX        AFX_IDC_FONTNAMES,3,29,91,77,CBS_SIMPLE |
-					CBS_OWNERDRAWFIXED | CBS_AUTOHSCROLL | CBS_SORT |
-					CBS_HASSTRINGS | CBS_DISABLENOSCROLL | WS_VSCROLL |
-					WS_TABSTOP
-	LTEXT           "Estilo de &fuente:",IDC_STATIC,102,19,53,8
-	COMBOBOX        AFX_IDC_FONTSTYLES,104,29,53,53,CBS_DROPDOWNLIST |
-					CBS_DISABLENOSCROLL | WS_VSCROLL | WS_TABSTOP
-	LTEXT           "&Tamaño:",IDC_STATIC,167,19,40,8
-	COMBOBOX        AFX_IDC_FONTSIZES,167,29,36,53,CBS_DROPDOWN | CBS_SORT |
-					CBS_DISABLENOSCROLL | WS_VSCROLL | WS_TABSTOP
-	GROUPBOX        "Efectos",IDC_STATIC,104,44,142,24,WS_GROUP
-	CONTROL         "Ta&chado",AFX_IDC_STRIKEOUT,"Button",BS_AUTOCHECKBOX |
-					WS_TABSTOP,109,55,65,10
-	CONTROL         "S&ubrayado",AFX_IDC_UNDERLINE,"Button",BS_AUTOCHECKBOX |
-					WS_TABSTOP,175,55,65,10
-	GROUPBOX        "Ejemplo",IDC_STATIC,104,71,142,36,WS_GROUP
-	CTEXT           "AaBbYyZz",AFX_IDC_SAMPLEBOX,110,80,130,22,SS_NOPREFIX |
-					NOT WS_VISIBLE
-END
-
-AFX_IDD_PROPPAGE_COLOR DIALOG DISCARDABLE  0, 0, 250, 62
-STYLE WS_CHILD | 0x4
-FONT 8, "MS Shell Dlg"
-BEGIN
-	LTEXT           "&Propiedad:",IDC_STATIC,3,3,100,8
-	COMBOBOX        AFX_IDC_COLORPROP,3,13,100,54,CBS_DROPDOWNLIST |
-					CBS_SORT | WS_VSCROLL | WS_TABSTOP
-	LTEXT           "&Color del sistema:",IDC_STATIC,3,29,100,8
-	COMBOBOX        AFX_IDC_SYSTEMCOLORS,3,39,100,54,CBS_DROPDOWNLIST |
-					CBS_SORT | WS_VSCROLL | WS_TABSTOP
-	CONTROL         "",AFX_IDC_COLOR_BLACK,"Button",BS_OWNERDRAW | WS_GROUP |
-					WS_TABSTOP,118,4,15,11
-	CONTROL         "",AFX_IDC_COLOR_BLUE,"Button",BS_OWNERDRAW,138,4,15,11
-	CONTROL         "",AFX_IDC_COLOR_CYAN,"Button",BS_OWNERDRAW,158,4,15,11
-	CONTROL         "",AFX_IDC_COLOR_DARKBLUE,"Button",BS_OWNERDRAW,178,4,15,
-					11
-	CONTROL         "",AFX_IDC_COLOR_DARKCYAN,"Button",BS_OWNERDRAW,118,18,
-					15,11
-	CONTROL         "",AFX_IDC_COLOR_DARKGREEN,"Button",BS_OWNERDRAW,138,18,
-					15,11
-	CONTROL         "",AFX_IDC_COLOR_DARKMAGENTA,"Button",BS_OWNERDRAW,158,
-					18,15,11
-	CONTROL         "",AFX_IDC_COLOR_GRAY,"Button",BS_OWNERDRAW,178,18,15,11
-	CONTROL         "",AFX_IDC_COLOR_DARKRED,"Button",BS_OWNERDRAW,118,32,15,
-					11
-	CONTROL         "",AFX_IDC_COLOR_GREEN,"Button",BS_OWNERDRAW,138,32,15,
-					11
-	CONTROL         "",AFX_IDC_COLOR_LIGHTBROWN,"Button",BS_OWNERDRAW,158,32,
-					15,11
-	CONTROL         "",AFX_IDC_COLOR_LIGHTGRAY,"Button",BS_OWNERDRAW,178,32,
-					15,11
-	CONTROL         "",AFX_IDC_COLOR_MAGENTA,"Button",BS_OWNERDRAW,118,46,15,
-					11
-	CONTROL         "",AFX_IDC_COLOR_RED,"Button",BS_OWNERDRAW,138,46,15,11
-	CONTROL         "",AFX_IDC_COLOR_WHITE,"Button",BS_OWNERDRAW,158,46,15,
-					11
-	CONTROL         "",AFX_IDC_COLOR_YELLOW,"Button",BS_OWNERDRAW,178,46,15,
-					11
-END
-
-AFX_IDD_PROPPAGE_PICTURE DIALOG DISCARDABLE  0, 0, 250, 62
-STYLE WS_CHILD | 0x4
-FONT 8, "MS Shell Dlg"
-BEGIN
-	LTEXT           "&Propiedad:",IDC_STATIC,3,3,100,8
-	COMBOBOX        AFX_IDC_PROPNAME,3,13,100,30,CBS_DROPDOWNLIST | CBS_SORT |
-					WS_VSCROLL | WS_TABSTOP
-	PUSHBUTTON      "&Examinar...",AFX_IDC_BROWSE,3,35,54,14
-	PUSHBUTTON      "&Borrar",AFX_IDC_CLEAR,61,35,54,14
-	RTEXT           "Presentación preliminar:",IDC_STATIC,107,3,42,16
-	CONTROL         "",AFX_IDC_PICTURE,"Static",SS_BLACKFRAME,151,4,93,54
-END
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Dialog Info
-//
-
-AFX_IDD_PROPPAGE_FONT DLGINIT
-BEGIN
-	1002, 0x403, 12, 0
-0x6f42, 0x646c, 0x4920, 0x6174, 0x696c, 0x0063,
-	0
-END
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// String Table
-//
-
-STRINGTABLE DISCARDABLE
-BEGIN
-	AFX_IDS_PROPPAGE_UNKNOWN "(Desconocido)"
-	AFX_IDS_COLOR_DESKTOP   "Escritorio"
-	AFX_IDS_COLOR_APPWORKSPACE "Area de trabajo de la aplicación"
-	AFX_IDS_COLOR_WNDBACKGND "Fondo de la ventana"
-	AFX_IDS_COLOR_WNDTEXT   "Texto de la ventana"
-	AFX_IDS_COLOR_MENUBAR   "Barra del menú"
-	AFX_IDS_COLOR_MENUTEXT  "Texto del menú"
-	AFX_IDS_COLOR_ACTIVEBAR "Barra de títulos activa"
-	AFX_IDS_COLOR_INACTIVEBAR "Barra de títulos inactiva"
-	AFX_IDS_COLOR_ACTIVETEXT "Texto de barra de títulos activa"
-	AFX_IDS_COLOR_INACTIVETEXT "Texto de barra de títulos inactiva"
-	AFX_IDS_COLOR_ACTIVEBORDER "Borde activo"
-	AFX_IDS_COLOR_INACTIVEBORDER "Borde inactivo"
-END
-#endif // !_AFX_NO_STOCKPPG_RESOURCES
-
-STRINGTABLE DISCARDABLE
-BEGIN
-#ifndef _AFX_NO_STOCKPPG_RESOURCES
-	AFX_IDS_COLOR_WNDFRAME  "Marco de la ventana"
-	AFX_IDS_COLOR_SCROLLBARS "Barras de desplazamiento"
-	AFX_IDS_COLOR_BTNFACE   "Aspecto del botón"
-	AFX_IDS_COLOR_BTNSHADOW "Sombra del botón"
-	AFX_IDS_COLOR_BTNTEXT   "Texto del botón"
-	AFX_IDS_COLOR_BTNHIGHLIGHT "Resalte de botón"
-	AFX_IDS_COLOR_DISABLEDTEXT "Texto deshabilitado"
-	AFX_IDS_COLOR_HIGHLIGHT "Resaltar"
-	AFX_IDS_COLOR_HIGHLIGHTTEXT "Texto resaltado"
-	AFX_IDS_REGULAR         "Normal"
-	AFX_IDS_BOLD            "Negrita"
-	AFX_IDS_ITALIC          "Cursiva"
-	AFX_IDS_BOLDITALIC      "Negrita cursiva"
-	AFX_IDS_SAMPLETEXT      "AaBbYyZz"
-#endif // !_AFX_NO_STOCKPPG_RESOURCES
-	AFX_IDS_DISPLAYSTRING_FONT "(Fuente)"
-	AFX_IDS_DISPLAYSTRING_COLOR "(Color)"
-END
-
-STRINGTABLE DISCARDABLE
-BEGIN
-	AFX_IDS_DISPLAYSTRING_PICTURE "(Imagen - %s)"
-#ifndef _AFX_NO_STOCKPPG_RESOURCES
-	AFX_IDS_PICTUREFILTER   "Todos los tipos de imagen|*.bmp;*.cur;*.dib;*.emf;*.ico;*.wmf|Mapas de bits (*.bmp;*.dib)|*.bmp;*.dib|Iconos/cursores (*.ico;*.cur)|*.ico;*.cur|Metaarchivos (*.wmf;*.emf)|*.wmf;*.emf|Todos los archivos (*.*)|*.*||"
-#endif // !_AFX_NO_STOCKPPG_RESOURCES
-	AFX_IDS_PICTYPE_UNKNOWN "Desconocido"
-	AFX_IDS_PICTYPE_NONE    "Ninguno"
-	AFX_IDS_PICTYPE_BITMAP  "Mapa de bits"
-	AFX_IDS_PICTYPE_METAFILE "Metaarchivo"
-	AFX_IDS_PICTYPE_ICON    "Icono"
-#ifndef _AFX_NO_STOCKPPG_RESOURCES
-	AFX_IDS_COLOR_PPG       "Página de propiedades de colores"
-	AFX_IDS_COLOR_PPG_CAPTION "Colores"
-	AFX_IDS_FONT_PPG        "Página de propiedades de fuentes"
-	AFX_IDS_FONT_PPG_CAPTION "Fuentes"
-	AFX_IDS_PICTURE_PPG     "Página de propiedades de imágenes"
-	AFX_IDS_PICTURE_PPG_CAPTION "Imágenes"
-#endif // !_AFX_NO_STOCKPPG_RESOURCES
-	AFX_IDS_BORDERSTYLE_0   "0 - Ninguno"
-	AFX_IDS_BORDERSTYLE_1   "1 - Simple fijo "
-END
-
-STRINGTABLE DISCARDABLE
-BEGIN
-	AFX_IDS_VERB_EDIT       "&Editar"
-	AFX_IDS_VERB_PROPERTIES "&Propiedades..."
-END
-
-#ifndef _AFX_NO_STOCKPPG_RESOURCES
-STRINGTABLE DISCARDABLE
-BEGIN
-	AFX_IDP_PICTURECANTOPEN "Imposible abrir el archivo de imágenes %1. Puede que el archivo no exista o no se pueda leer."
-	AFX_IDP_PICTURECANTLOAD "Imposible cargar el archivo de imágenes %1. Puede que el archivo tenga un formato no válido."
-	AFX_IDP_PICTURETOOLARGE "Imposible cargar el archivo de imágenes %1. El archivo es demasiado grande para caber en la memoria."
-	AFX_IDP_PICTUREREADFAILED
-							"Imposible cargar el archivo de imágenes %1. Error de lectura desconocido."
-END
-
-STRINGTABLE DISCARDABLE
-BEGIN
-	AFX_IDS_PICTUREBROWSETITLE "Examinar imágenes"
-END
-#endif // !_AFX_NO_STOCKPPG_RESOURCES
-
-#ifndef _AFX_NO_CTLERROR_RESOURCES
-STRINGTABLE DISCARDABLE
-BEGIN
-	AFX_IDP_E_ILLEGALFUNCTIONCALL "Llamada no válida a función"
-	AFX_IDP_E_OVERFLOW      "Desbordamiento"
-	AFX_IDP_E_OUTOFMEMORY   "No hay suficiente memoria"
-	AFX_IDP_E_DIVISIONBYZERO "División por cero"
-	AFX_IDP_E_OUTOFSTRINGSPACE "No hay suficiente espacio para cadenas"
-	AFX_IDP_E_OUTOFSTACKSPACE "No hay suficiente espacio de pila"
-	AFX_IDP_E_BADFILENAMEORNUMBER "Nombre o número de archivo incorrecto"
-	AFX_IDP_E_FILENOTFOUND  "No se ha encontrado el archivo"
-	AFX_IDP_E_BADFILEMODE   "Modo de archivo incorrecto"
-	AFX_IDP_E_FILEALREADYOPEN "El archivo ya está abierto"
-	AFX_IDP_E_DEVICEIOERROR "Error de E/S de dispositivo"
-	AFX_IDP_E_FILEALREADYEXISTS "El archivo ya existe"
-	AFX_IDP_E_BADRECORDLENGTH "La longitud de registro es incorrecta"
-	AFX_IDP_E_DISKFULL      "El disco está lleno"
-	AFX_IDP_E_BADRECORDNUMBER "El número de registro es incorrecto"
-	AFX_IDP_E_BADFILENAME   "Nombre de archivo incorrecto"
-END
-
-STRINGTABLE DISCARDABLE
-BEGIN
-	AFX_IDP_E_TOOMANYFILES  "Demasiados archivos"
-	AFX_IDP_E_DEVICEUNAVAILABLE "El dispositivo no está disponible"
-	AFX_IDP_E_PERMISSIONDENIED "Permiso denegado"
-	AFX_IDP_E_DISKNOTREADY  "El disco no está listo"
-	AFX_IDP_E_PATHFILEACCESSERROR "Error de acceso a la ruta o el archivo"
-	AFX_IDP_E_PATHNOTFOUND  "No se ha encontrado la ruta de acceso"
-	AFX_IDP_E_INVALIDPATTERNSTRING "La cadena modelo no es válida"
-	AFX_IDP_E_INVALIDUSEOFNULL "Uso no válido de Null"
-	AFX_IDP_E_INVALIDFILEFORMAT "Formato de archivo no válido"
-	AFX_IDP_E_INVALIDPROPERTYVALUE "El valor de la propiedad no es válido"
-	AFX_IDP_E_INVALIDPROPERTYARRAYINDEX "Índice de matriz no válido"
-	AFX_IDP_E_SETNOTSUPPORTEDATRUNTIME "No se puede establecer la propiedad en tiempo de ejecución"
-	AFX_IDP_E_SETNOTSUPPORTED "La propiedad es de sólo lectura"
-	AFX_IDP_E_NEEDPROPERTYARRAYINDEX
-							"Se debe especificar el índice de matriz cuando se usa una matriz de propiedades"
-	AFX_IDP_E_SETNOTPERMITTED "No se puede establecer la propiedad en este control"
-	AFX_IDP_E_GETNOTSUPPORTEDATRUNTIME "No se puede leer la propiedad en tiempo de ejecución"
-END
-
-STRINGTABLE DISCARDABLE
-BEGIN
-	AFX_IDP_E_GETNOTSUPPORTED "La propiedad es de sólo escritura"
-	AFX_IDP_E_PROPERTYNOTFOUND "No se ha encontrado la propiedad"
-	AFX_IDP_E_INVALIDCLIPBOARDFORMAT "El formato del portapapeles no es válido"
-	AFX_IDP_E_INVALIDPICTURE "La imagen no es válida"
-	AFX_IDP_E_PRINTERERROR  "Error de la impresora"
-	AFX_IDP_E_CANTSAVEFILETOTEMP
-							"No se puede crear el archivo temporal necesario para guardar"
-	AFX_IDP_E_SEARCHTEXTNOTFOUND "No se encontró el texto de búsqueda"
-	AFX_IDP_E_REPLACEMENTSTOOLONG "El texto de reemplazo es demasiado largo"
-END
-#endif //!_AFX_NO_CTLERROR_RESOURCES
-
-#endif //!_AFXDLL
-#endif //__AFXOLECL_RC__

+ 0 - 105
libs/mfc/include/Esp/afxdb.rc

@@ -1,105 +0,0 @@
-// This is a part of the Microsoft Foundation Classes C++ library.
-// Copyright (C) 1992-1998 Microsoft Corporation
-// All rights reserved.
-//
-// This source code is only intended as a supplement to the
-// Microsoft Foundation Classes Reference and related
-// electronic documentation provided with the library.
-// See these sources for detailed information regarding the
-// Microsoft Foundation Classes product.
-
-#ifndef __AFXDB_RC__
-#define __AFXDB_RC__
-
-#ifndef __AFXRES_H__
-	#include <afxres.h>
-#endif
-
-#ifdef APSTUDIO_INVOKED
-// This will prevent the VC++ Resource Editor user from saving this file
-1 TEXTINCLUDE DISCARDABLE
-BEGIN
-"< No se pueden cambiar recursos MFC estándar. >\0"
-END
-#endif    // APSTUDIO_INVOKED
-
-#ifndef _AFXDLL
-
-/////////////////////////////////////////////////////////////////////////////
-// Database Resources
-
-// Database strings
-STRINGTABLE DISCARDABLE
-BEGIN
-	AFX_IDP_SQL_CONNECT_FAIL
-		"Imposible conectarse al origen de datos"
-	AFX_IDP_SQL_RECORDSET_FORWARD_ONLY
-		"Recordset sólo admite movimiento hacia adelante."
-	AFX_IDP_SQL_EMPTY_COLUMN_LIST
-		"Imposible abrir tabla, no hay columnas en la posición especificada."
-	AFX_IDP_SQL_FIELD_SCHEMA_MISMATCH
-		"Se obtuvieron tipos de datos inesperados de la consulta."
-	AFX_IDP_SQL_ILLEGAL_MODE "Imposible Actualizar o Eliminar."
-	AFX_IDP_SQL_MULTIPLE_ROWS_AFFECTED "Filas actualizadas."
-	AFX_IDP_SQL_NO_CURRENT_RECORD "La operación ha fallado, no hay registro actual."
-	AFX_IDP_SQL_NO_ROWS_AFFECTED
-		"La operación de actualización o de eliminación no afectó a ninguna fila."
-	AFX_IDP_SQL_RECORDSET_READONLY "Recordset es de sólo lectura"
-	AFX_IDP_SQL_SQL_NO_TOTAL
-		"El controlador ODBC no admite el modelo de datos MFC LongBinary."
-	AFX_IDP_SQL_ODBC_LOAD_FAILED
-		"Imposible cargar ODBC32.DLL."
-	AFX_IDP_SQL_DYNASET_NOT_SUPPORTED
-		"El controlador ODBC no admite dynasets."
-	AFX_IDP_SQL_SNAPSHOT_NOT_SUPPORTED
-		"Se requieren cursores estáticos ODBC para compatibilidad con snapshot."
-	AFX_IDP_SQL_API_CONFORMANCE
-		"Controlador ODBC incompatible con clases de bases de datos MFC (se requiere que API_CONFORMANCE >=SQL_OAC_LEVEL1)."
-	AFX_IDP_SQL_SQL_CONFORMANCE
-		"Controlador ODBC incompatible con clases de bases de datos MFC (se requiere que API_CONFORMANCE >=SQL_OAC_LEVEL1)."
-	AFX_IDP_SQL_NO_DATA_FOUND
-		"Se intentó desplazarse más allá del fin o antes del inicio de los datos."
-	AFX_IDP_SQL_ROW_UPDATE_NOT_SUPPORTED
-		"El controlador ODBC no admite dynasets."
-	AFX_IDP_SQL_ODBC_V2_REQUIRED
-		"Se requiere un controlador ODBC que cumpla con el Nivel 2."
-	AFX_IDP_SQL_NO_POSITIONED_UPDATES
-		"El controlador ODBC no admite actualizaciones posicionadas."
-	AFX_IDP_SQL_LOCK_MODE_NOT_SUPPORTED
-		"No se admite el modo de bloqueo solicitado."
-	AFX_IDP_SQL_DATA_TRUNCATED
-		"Datos truncados."
-	AFX_IDP_SQL_ROW_FETCH
-		"Error al recuperar registro."
-	AFX_IDP_SQL_INCORRECT_ODBC
-		"No se encontró un punto de entrada ODBC requerido. Compruebe que ODBC esté instalado correctamente."
-	AFX_IDP_SQL_UPDATE_DELETE_FAILED
-		"Falló actualización o eliminación."
-	AFX_IDP_SQL_DYNAMIC_CURSOR_NOT_SUPPORTED
-		"El controlador ODBC no admite cursores dinámicos."
-	AFX_IDP_SQL_FIELD_NOT_FOUND
-		"Nombre de campo o de índice no válido."
-	AFX_IDP_SQL_BOOKMARKS_NOT_SUPPORTED
-		"El controlador ODBC no admite marcadores."
-	AFX_IDP_SQL_BOOKMARKS_NOT_ENABLED
-		"Marcadores no habilitados en recordset."
-	AFX_IDP_DAO_ENGINE_INITIALIZATION
-		"Imposible inicializar motor de base de datos DAO/Jet."
-	AFX_IDP_DAO_DFX_BIND
-		"Parámetro de valor DFX incorrecto."
-	AFX_IDP_DAO_OBJECT_NOT_OPEN
-		"DAO TableDef o QueryDef no está abierto."
-	AFX_IDP_DAO_ROWTOOSHORT
-		"Falló GetRows. No hay suficiente memoria asignada a la fila."
-	AFX_IDP_DAO_BADBINDINFO
-		"Error de enlace de GetRows; es posible que algún tipo de datos no coincida."
-	AFX_IDP_DAO_COLUMNUNAVAILABLE
-		"Falló GetRows. La solicitud de columna no es miembro de este recordset." 
-
-	AFX_IDS_DELETED "<Eliminado>"
-END
-
-/////////////////////////////////////////////////////////////////////////////
-
-#endif //!_AFXDLL
-#endif //__AFXDB_RC__

+ 0 - 66
libs/mfc/include/Esp/afxolecl.rc

@@ -1,66 +0,0 @@
-// This is a part of the Microsoft Foundation Classes C++ library.
-// Copyright (C) 1992-1998 Microsoft Corporation
-// All rights reserved.
-//
-// This source code is only intended as a supplement to the
-// Microsoft Foundation Classes Reference and related
-// electronic documentation provided with the library.
-// See these sources for detailed information regarding the
-// Microsoft Foundation Classes product.
-
-#ifndef __AFXOLECL_RC__
-#define __AFXOLECL_RC__
-
-#ifndef __AFXRES_H__
-	#include <afxres.h>
-#endif
-
-#ifndef _INC_DLGS
-	#include <dlgs.h>
-#endif
-
-#ifdef APSTUDIO_INVOKED
-// This will prevent the VC++ Resource Editor user from saving this file
-1 TEXTINCLUDE DISCARDABLE
-BEGIN
-"< Imposible cambiar recursos MFC estándar. >\0"
-END
-#endif    // APSTUDIO_INVOKED
-
-#ifndef _AFXDLL
-
-/////////////////////////////////////////////////////////////////////////////
-// OLE Client Resources
-
-/////////////////////////////////////////////////////////////////////////////
-// OLE strings
-
-STRINGTABLE DISCARDABLE
-BEGIN
-	AFX_IDP_STATIC_OBJECT           "No se puede activar un objeto ActiveX estático."
-	AFX_IDP_FAILED_TO_CONNECT       "Imposible conectar.\nVínculo puede estar roto."
-	AFX_IDP_SERVER_BUSY             "Imposible procesar el comando, servidor ocupado."
-	AFX_IDP_BAD_VERB                "Imposible efectuar operación del servidor."
-	AFX_IDP_FAILED_TO_LAUNCH        "Imposible ejecutar la aplicación del servidor."
-	AFX_IDS_UPDATING_ITEMS          "Actualizando objetos ActiveX"
-	AFX_IDP_FAILED_TO_CONVERT       "No se puede convertir el objeto ActiveX."
-	AFX_IDP_ASK_TO_DISCARD          "No se pueden guardar objetos ActiveX al salir de Windows.\n¿Descartar todos los cambios de %1?"
-	AFX_IDP_FAILED_TO_CREATE        "No se puede crear objeto. Compruebe que la aplicación está registrada en el sistema."
-
-	AFX_IDS_METAFILE_FORMAT         "Imagen (Metarchivo)\nuna imagen"
-	AFX_IDS_DIB_FORMAT              "Mapa de bits independiente de dispositivos\nun mapa de bits independiente de dispositivos"
-	AFX_IDS_BITMAP_FORMAT           "Mapa de bits\nun mapa de bits"
-	AFX_IDS_LINKSOURCE_FORMAT       "%s\n%s"
-	AFX_IDS_EMBED_FORMAT            "%s\n%s"
-	AFX_IDS_RTF_FORMAT              "Formato de texto enriquecido (RTF)\ntexto con formato de fuentes y párrafos"
-	AFX_IDS_TEXT_FORMAT             "Texto sin formato\ntexto sin ningún tipo de formato"
-
-	AFX_IDS_INVALID_CURRENCY        "Moneda no válida."
-	AFX_IDS_INVALID_DATETIME        "DateTime no válido."
-	AFX_IDS_INVALID_DATETIMESPAN    "DateTimeSpan no válido."
-END
-
-/////////////////////////////////////////////////////////////////////////////
-
-#endif //!_AFXDLL
-#endif //__AFXOLECL_RC__

+ 0 - 53
libs/mfc/include/Esp/afxolesv.rc

@@ -1,53 +0,0 @@
-// This is a part of the Microsoft Foundation Classes C++ library.
-// Copyright (C) 1992-1998 Microsoft Corporation
-// All rights reserved.
-//
-// This source code is only intended as a supplement to the
-// Microsoft Foundation Classes Reference and related
-// electronic documentation provided with the library.
-// See these sources for detailed information regarding the
-// Microsoft Foundation Classes product.
-
-#ifndef __AFXOLESV_RC__
-#define __AFXOLESV_RC__
-
-#ifndef __AFXRES_H__
-	#include <afxres.h>
-#endif
-
-#ifdef APSTUDIO_INVOKED
-// This will prevent the VC++ Resource Editor user from saving this file
-1 TEXTINCLUDE DISCARDABLE
-BEGIN
-"< No se pueden cambiar recursos MFC estándar. >\0"
-END
-#endif    // APSTUDIO_INVOKED
-
-#ifndef _AFXDLL
-
-/////////////////////////////////////////////////////////////////////////////
-// OLE Server Resources
-
-// OLE strings
-STRINGTABLE DISCARDABLE
-BEGIN
-	AFX_IDP_ASK_TO_UPDATE,              "¿Actualizar %1 antes de continuar?"
-	AFX_IDP_FAILED_TO_UPDATE,           "Imposible actualizar el cliente."
-
-	AFX_IDP_FAILED_TO_REGISTER,         "No se puede registrar. Puede que algunas funciones ActiveX no funcionen."
-	AFX_IDP_FAILED_TO_AUTO_REGISTER,    "Imposible actualizar el registro del sistema.\nIntente con REGEDIT."
-END
-
-STRINGTABLE PRELOAD
-BEGIN
-	AFX_IDS_APP_TITLE_EMBEDDING,        "%1 en %2"
-	AFX_IDS_OBJ_TITLE_INPLACE,          "%1 - %2"
-	AFX_IDS_EXIT_MENU,                  "&Salir y volvera %1"
-	AFX_IDS_UPDATE_MENU,                "&Actualizar %1"
-	AFX_IDS_SAVEFILECOPY,               "Guardar copia como"
-END
-
-/////////////////////////////////////////////////////////////////////////////
-
-#endif //!_AFXDLL
-#endif //__AFXOLESV_RC__

+ 0 - 90
libs/mfc/include/Esp/afxprint.rc

@@ -1,90 +0,0 @@
-// This is a part of the Microsoft Foundation Classes C++ library.
-// Copyright (C) 1992-1998 Microsoft Corporation
-// All rights reserved.
-//
-// This source code is only intended as a supplement to the
-// Microsoft Foundation Classes Reference and related
-// electronic documentation provided with the library.
-// See these sources for detailed information regarding the
-// Microsoft Foundation Classes product.
-
-#ifndef __AFXPRINT_RC__
-#define __AFXPRINT_RC__
-
-#ifndef __AFXRES_H__
-	#include <afxres.h>
-#endif
-
-#ifdef APSTUDIO_INVOKED
-// This will prevent the VC++ Resource Editor user from saving this file
-1 TEXTINCLUDE DISCARDABLE
-BEGIN
-"< No se pueden cambiar recursos MFC estándar >\0"
-END
-#endif    // APSTUDIO_INVOKED
-
-#ifndef _AFXDLL
-
-/////////////////////////////////////////////////////////////////////////////
-// Printing Resources
-
-AFX_IDC_MAGNIFY         CURSOR  DISCARDABLE     "res\\magnify.cur"
-
-AFX_IDD_PRINTDLG DIALOG DISCARDABLE  6, 18, 133, 95
-STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | 0x04
-FONT 8, "MS Shell Dlg"
-BEGIN
-	CTEXT           "Imprimiendo",IDC_STATIC,0,9,133,8
-	CTEXT           "",AFX_IDC_PRINT_DOCNAME,0,19,133,8
-	CTEXT           "en la",IDC_STATIC,0,29,133,8
-	CTEXT           "",AFX_IDC_PRINT_PRINTERNAME,0,39,133,8
-	CTEXT           "",AFX_IDC_PRINT_PORTNAME,0,49,133,8
-	CTEXT           "",AFX_IDC_PRINT_PAGENUM,0,59,133,8
-	PUSHBUTTON      "Cancelar",IDCANCEL,46,74,40,14
-END
-
-// Preview Toolbar Dialog
-AFX_IDD_PREVIEW_TOOLBAR DIALOG PRELOAD DISCARDABLE  0, 0, 330, 16
-STYLE WS_CHILD | 0x04
-FONT 8, "MS Shell Dlg"
-BEGIN
-	PUSHBUTTON      "&Imprimir...",AFX_ID_PREVIEW_PRINT,2,2,44,12
-	PUSHBUTTON      "&Siguiente",AFX_ID_PREVIEW_NEXT,48,2,44,12
-	PUSHBUTTON      "&Anterior",AFX_ID_PREVIEW_PREV,94,2,44,12
-	PUSHBUTTON      "",AFX_ID_PREVIEW_NUMPAGE,140,2,44,12
-	PUSHBUTTON      "Ac&ercar",AFX_ID_PREVIEW_ZOOMIN,186,2,44,12
-	PUSHBUTTON      "A&lejar",AFX_ID_PREVIEW_ZOOMOUT,232,2,44,12
-	PUSHBUTTON      "&Cerrar",AFX_ID_PREVIEW_CLOSE,278,2,44,12
-END
-
-// Printing strings
-STRINGTABLE DISCARDABLE
-BEGIN
-	// print progress dialog strings
-	AFX_IDS_PRINTONPORT,            "en  %1"         // for print output
-	AFX_IDS_ONEPAGE,                "&Una página"     // for preview button
-	AFX_IDS_TWOPAGE,                "&Dos páginas"     // for preview button
-	AFX_IDS_PRINTPAGENUM,           "Página %u"       // for print output
-	AFX_IDS_PREVIEWPAGEDESC,        "Página %u\nPáginas %u-%u\n"
-
-	// print to file dialog strings
-	AFX_IDS_PRINTDEFAULTEXT,        "prn"           // default extension
-	AFX_IDS_PRINTDEFAULT,           "Output.prn"    // default file
-	AFX_IDS_PRINTFILTER,
-		"Archivos de impresora (*.prn)|*.prn|Todos los archivos (*.*)|*.*||"
-	AFX_IDS_PRINTCAPTION,           "Imprimir a archivo" // caption for browse dlg
-	AFX_IDS_PRINTTOFILE,            "a  %1"         // to file
-END
-
-// Print Preview Accelerator Table
-AFX_IDR_PREVIEW_ACCEL ACCELERATORS LOADONCALL MOVEABLE
-BEGIN
-	VK_NEXT,    AFX_ID_PREVIEW_NEXT,    VIRTKEY, NOINVERT
-	VK_PRIOR,   AFX_ID_PREVIEW_PREV,    VIRTKEY, NOINVERT
-	VK_ESCAPE,  AFX_ID_PREVIEW_CLOSE,   VIRTKEY, NOINVERT
-END
-
-/////////////////////////////////////////////////////////////////////////////
-
-#endif //!_AFXDLL
-#endif //__AFXPRINT_RC__

+ 0 - 202
libs/mfc/include/Esp/afxres.rc

@@ -1,202 +0,0 @@
-// This is a part of the Microsoft Foundation Classes C++ library.
-// Copyright (C) 1992-1998 Microsoft Corporation
-// All rights reserved.
-//
-// This source code is only intended as a supplement to the
-// Microsoft Foundation Classes Reference and related
-// electronic documentation provided with the library.
-// See these sources for detailed information regarding the
-// Microsoft Foundation Classes product.
-
-#ifndef __AFXRES_RC__
-#define __AFXRES_RC__
-
-#ifndef __AFXRES_H__
-	#include <afxres.h>
-#endif
-
-#ifdef APSTUDIO_INVOKED
-// This will prevent the VC++ Resource Editor user from saving this file
-1 TEXTINCLUDE DISCARDABLE
-BEGIN
-"< No se pueden cambiar recursos MFC estándar. >\0"
-END
-#endif //APSTUDIO_INVOKED
-
-#ifndef _AFXDLL
-
-/////////////////////////////////////////////////////////////////////////////
-// Default resource description for MFC applications
-/////////////////////////////////////////////////////////////////////////////
-
-/////////////////////////////////////////////////////////////////////////////
-// Strings
-
-STRINGTABLE DISCARDABLE
-BEGIN
-#ifndef _AFX_NO_APPMENU_RESOURCES
-	AFX_IDS_OPENFILE,               "Abrir"
-	AFX_IDS_SAVEFILE,               "Guardar como"
-	AFX_IDS_ALLFILTER,              "Todos los archivos (*.*)"
-	AFX_IDS_UNTITLED,               "Sin título"
-	AFX_IDS_HIDE,                   "&Ocultar"
-#endif // !_AFX_NO_APPMENUSTRING_RESOURCES
-
-	AFX_IDS_MEMORY_EXCEPTION,       "No hay suficiente memoria."
-	AFX_IDS_NOT_SUPPORTED_EXCEPTION,"Se intentó una operación no permitida."
-	AFX_IDS_RESOURCE_EXCEPTION,     "Rcurso necesario no disponible."
-	AFX_IDS_USER_EXCEPTION,         "Se encontr¢ un error desconocido."
-
-	// General error prompts
-#ifndef _AFX_NO_FILECMD_RESOURCES
-	AFX_IDP_INVALID_FILENAME,       "Nombre de archivo no válido."
-	AFX_IDP_FAILED_TO_OPEN_DOC,     "Imposible abrir documento."
-	AFX_IDP_FAILED_TO_SAVE_DOC,     "Imposible guardar documento."
-	AFX_IDP_ASK_TO_SAVE,            "¿Guardar cambios a %1?"
-	AFX_IDP_FAILED_TO_CREATE_DOC,   "Imposible crear el documento vacío."
-	AFX_IDP_FILE_TOO_LARGE,         "Archivo demasiado grande."
-	AFX_IDP_FAILED_TO_START_PRINT,  "Imposible iniciar impresión."
-#endif // !_AFX_NO_FILECMD_RESOURCES
-	AFX_IDP_FAILED_TO_LAUNCH_HELP,  "Imposible ejecutar la ayuda."
-	AFX_IDP_INTERNAL_FAILURE,       "Error interno de la aplicación."
-	AFX_IDP_COMMAND_FAILURE,        "Falló el comando."
-	AFX_IDP_FAILED_MEMORY_ALLOC     "No hay suficiente memoria para efectuar la operación."
-	AFX_IDP_GET_NOT_SUPPORTED,      "Imposible leer una propiedad de sólo escritura."
-	AFX_IDP_SET_NOT_SUPPORTED,      "Imposible escribir en una propiedad de sólo lectura."
-	AFX_IDP_UNREG_DONE,               "Se quitaron las entradas del Registro del sistema y eliminaron los archivos INI (si existían)."
-	AFX_IDP_UNREG_FAILURE,            "No se quitaron todas las entradas del Registro (o archivo INI)."
-	AFX_IDP_DLL_LOAD_FAILED,        "Este programa requiere el archivo %s, pero no está en este sistema."
-	AFX_IDP_DLL_BAD_VERSION,        "This program is linked to the missing export %s in the file %s. This machine may have an incompatible version of %s."
-
-	// CFile/CArchive error strings for user failure
-#ifndef _AFX_NO_CFILE_RESOURCES
-	AFX_IDP_FAILED_INVALID_FORMAT   "Formato de archivo no esperado."
-	AFX_IDP_FAILED_INVALID_PATH     "%1\nImposible encontrar este archivo.\nCompruebe que la ruta y el nombre de archivo son correctos"
-	AFX_IDP_FAILED_DISK_FULL        "La unidad de disco de destino está llena."
-	AFX_IDP_FAILED_ACCESS_READ      "Imposible leer de %1, alguien más lo ha abierto."
-	AFX_IDP_FAILED_ACCESS_WRITE     "Imposible escribir en %1, es de sólo lectura o alguien más lo ha abierto."
-	AFX_IDP_FAILED_IO_ERROR_READ    "Error inesperado al leer %1."
-	AFX_IDP_FAILED_IO_ERROR_WRITE   "Error inesperado al escribir en %1."
-#endif // !_AFX_NO_CFILE_RESOURCES
-
-	// Parsing error prompts
-	AFX_IDP_PARSE_INT,              "Introduzca un número entero."
-	AFX_IDP_PARSE_REAL,             "Introduzca un número."
-	AFX_IDP_PARSE_INT_RANGE,        "Introduzca un número entero entre %1 y %2."
-	AFX_IDP_PARSE_REAL_RANGE,       "Introduzca un número entre %1 y %2."
-	AFX_IDP_PARSE_STRING_SIZE,      "No introduzca más de %1 caracteres."
-	AFX_IDP_PARSE_RADIO_BUTTON,     "Seleccione un botón."
-	AFX_IDP_PARSE_BYTE,             "Introduzca un número entero entre 0 y 255."
-	AFX_IDP_PARSE_UINT,             "Introduzca un número entero positivo."
-	AFX_IDP_PARSE_DATETIME,         "Introduzca una fecha y/o una hora."
-	AFX_IDP_PARSE_CURRENCY,         "Introduzca una moneda."
-
-#ifndef _AFX_NO_OLE_RESOURCES
-	// OLE strings required for both servers and containers
-	AFX_IDS_PASTELINKEDTYPE         "%s vinculado"
-	AFX_IDS_UNKNOWNTYPE             "Tipo desconocido"
-	AFX_IDP_FAILED_TO_NOTIFY        "%1\nImposible registrar el documento.\nPuede que el documento ya esté abierto."
-	AFX_IDS_NOT_DOCOBJECT           "El archivo no es compatible con un servidor Document Object."
-#endif //!_AFX_NO_OLE_RESOURCES
-
-	AFX_IDP_NO_ERROR_AVAILABLE      "No hay ningún mensaje de error disponible."
-
-#ifndef _AFX_NO_CFILE_RESOURCES
-	AFX_IDP_FILE_NONE                "No ha ocurrido ningún error."
-	AFX_IDP_FILE_GENERIC             "Error desconocido al acceder a %1."
-	AFX_IDP_FILE_NOT_FOUND           "No se encontró %1."
-	AFX_IDP_FILE_BAD_PATH            "%1 contiene una ruta no válida."
-	AFX_IDP_FILE_TOO_MANY_OPEN       "Imposible abrir %1, hay demasiados archivos abiertos."
-	AFX_IDP_FILE_ACCESS_DENIED       "Acceso denegado a %1."
-	AFX_IDP_FILE_INVALID_FILE        "Controlador no válido asociado a %1."
-	AFX_IDP_FILE_REMOVE_CURRENT      "Imposible eliminar %1 porque es el directorio actual."
-	AFX_IDP_FILE_DIR_FULL            "Imposible crear %1 porque el directorio está lleno."
-	AFX_IDP_FILE_BAD_SEEK            "Fin de búsqueda en %1 "
-	AFX_IDP_FILE_HARD_IO             "Error de E/S de hardware al acceder a %1."
-	AFX_IDP_FILE_SHARING             "Violación de acceso compartido al acceder a %1."
-	AFX_IDP_FILE_LOCKING             "Violación de bloqueo al acceder %1. "
-	AFX_IDP_FILE_DISKFULL            "Disco lleno al acceder a %1."
-	AFX_IDP_FILE_EOF                 "Se intentó acceder a %1 más allá del final."
-	AFX_IDS_UNNAMED_FILE             "un archivo sin nombre"
-#endif // !_AFX_NO_CFILE_RESOURCES
-
-	AFX_IDP_ARCH_NONE               "No ha ocurrido ningún error."
-	AFX_IDP_ARCH_GENERIC                "Error desconocido al acceder a %1."
-	AFX_IDP_ARCH_READONLY           "Se intentó escribir en %1 mientras se lo estaba leyendo."
-	AFX_IDP_ARCH_ENDOFFILE          "Se intentó acceder a %1 más allá del final."
-	AFX_IDP_ARCH_WRITEONLY          "Se intentó leer de %1 mientras estaba escribiendo."
-	AFX_IDP_ARCH_BADINDEX           "%1 tiene un formato incorrecto."
-	AFX_IDP_ARCH_BADCLASS           "%1 contiene un objeto inesperado."
-	AFX_IDP_ARCH_BADSCHEMA          "%1 contiene un esquema incorrecto."
-
-#ifndef _AFX_NO_MAPI_RESOURCES
-	// MAPI strings / error messages
-	AFX_IDP_FAILED_MAPI_LOAD        "Imposible cargar el soporte del sistema de correo."
-	AFX_IDP_INVALID_MAPI_DLL        "La DLL del sistema de correo no es válida."
-	AFX_IDP_FAILED_MAPI_SEND        "Enviar correo no envió el mensaje."
-#endif //!_AFX_NO_MAPI_RESOURCES
-
-#ifndef _AFX_NO_OCC_RESOURCES
-	AFX_IDS_OCC_SCALEUNITS_PIXELS   "píxeles"
-#endif //!_AFX_NO_OCC_RESOURCES
-END
-
-/////////////////////////////////////////////////////////////////////////////
-// Cursors
-
-AFX_IDC_CONTEXTHELP     CURSOR  DISCARDABLE     "res\\help.cur"
-
-#ifndef _AFX_NO_SPLITTER_RESOURCES
-AFX_IDC_SMALLARROWS     CURSOR  DISCARDABLE     "res\\sarrows.cur"
-AFX_IDC_HSPLITBAR       CURSOR  DISCARDABLE     "res\\splith.cur"
-AFX_IDC_VSPLITBAR       CURSOR  DISCARDABLE     "res\\splitv.cur"
-AFX_IDC_NODROPCRSR      CURSOR  DISCARDABLE     "res\\nodrop.cur"
-#endif //!_AFX_NO_SPLITTER_RESOURCES
-
-#ifndef _AFX_NO_TRACKER_RESOURCES
-AFX_IDC_TRACKNWSE       CURSOR  DISCARDABLE     "res\\trcknwse.cur"
-AFX_IDC_TRACKNESW       CURSOR  DISCARDABLE     "res\\trcknesw.cur"
-AFX_IDC_TRACKNS         CURSOR  DISCARDABLE     "res\\trckns.cur"
-AFX_IDC_TRACKWE         CURSOR  DISCARDABLE     "res\\trckwe.cur"
-AFX_IDC_TRACK4WAY       CURSOR  DISCARDABLE     "res\\trck4way.cur"
-AFX_IDC_MOVE4WAY        CURSOR  DISCARDABLE     "res\\move4way.cur"
-#endif //!_AFX_NO_TRACKER_RESOURCES
-
-#ifndef _AFX_NO_CTL3D_RESOURCES
-26567 BITMAP "res\\3dcheck.bmp" // Note: 26567 comes from CTL3D.H
-#endif
-
-/////////////////////////////////////////////////////////////////////////////
-// Standard Dialogs
-
-#ifndef _AFX_NO_NEWTYPEDLG_RESOURCES
-AFX_IDD_NEWTYPEDLG DIALOG DISCARDABLE  9, 26, 183, 70
-STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | 0x04
-CAPTION "Nuevo"
-FONT 8, "MS Shell Dlg"
-BEGIN
-	LTEXT           "&Nuevo ",IDC_STATIC,6,5,123,8,NOT WS_GROUP
-	LISTBOX         AFX_IDC_LISTBOX,6,15,125,49,WS_VSCROLL | WS_TABSTOP
-	DEFPUSHBUTTON   "Aceptar",IDOK,137,6,40,14
-	PUSHBUTTON      "Cancelar",IDCANCEL,137,23,40,14
-	PUSHBUTTON      "&Ayuda",ID_HELP,137,43,40,14
-END
-#endif // !_AFX_NO_NEWTYPEDLG_RESOURCES
-
-/////////////////////////////////////////////////////////////////////////////
-// CMiniFrameWnd Bitmap
-
-AFX_IDB_MINIFRAME_MENU      BITMAP  DISCARDABLE     "res\\minifwnd.bmp"
-
-/////////////////////////////////////////////////////////////////////////////
-// CCheckListBox Bitmaps
-
-AFX_IDB_CHECKLISTBOX_NT     BITMAP  DISCARDABLE     "res\\ntcheck.bmp"
-AFX_IDB_CHECKLISTBOX_95     BITMAP  DISCARDABLE     "res\\95check.bmp"
-
-/////////////////////////////////////////////////////////////////////////////
-
-#endif //!_AFXDLL
-#endif //!__AFXRES_RC__
-
-/////////////////////////////////////////////////////////////////////////////

+ 0 - 284
libs/mfc/include/Fra/afxctl.rc

@@ -1,284 +0,0 @@
-// This is a part of the Microsoft Foundation Classes C++ library.
-// Copyright (C) 1992-1998 Microsoft Corporation
-// All rights reserved.
-//
-// This source code is only intended as a supplement to the
-// Microsoft Foundation Classes Reference and related
-// electronic documentation provided with the library.
-// See these sources for detailed information regarding the
-// Microsoft Foundation Classes product.
-
-#ifndef __AFXCTL_RC__
-#define __AFXCTL_RC__
-
-#ifndef __AFXRES_H__
-	#include <afxres.h>
-#endif
-
-#ifdef APSTUDIO_INVOKED
-// This will prevent the VC++ Resource Editor user from saving this file
-1 TEXTINCLUDE DISCARDABLE
-BEGIN
-"< Cannot change standard MFC resources! >\0"
-END
-#endif    // APSTUDIO_INVOKED
-
-#ifndef _AFXDLL
-
-/////////////////////////////////////////////////////////////////////////////
-// OLE Control Resources
-
-#ifndef _AFX_NO_STOCKPPG_RESOURCES
-/////////////////////////////////////////////////////////////////////////////
-//
-// Bitmap
-//
-
-AFX_IDB_TRUETYPE        BITMAP  DISCARDABLE     "RES\\TRUETYPE.BMP"
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Dialog
-//
-
-AFX_IDD_PROPPAGE_FONT DIALOG DISCARDABLE  13, 54, 250, 110
-STYLE WS_CHILD | 0x4
-FONT 8, "MS Shell Dlg"
-BEGIN
-	LTEXT           "&Nom de propriété:",IDC_STATIC,3,5,61,8
-	COMBOBOX        AFX_IDC_FONTPROP,65,3,100,71,CBS_DROPDOWNLIST | CBS_SORT |
-					WS_VSCROLL | WS_TABSTOP
-	LTEXT           "Po&lice:",IDC_STATIC,3,19,91,8
-	COMBOBOX        AFX_IDC_FONTNAMES,3,29,91,77,CBS_SIMPLE |
-					CBS_OWNERDRAWFIXED | CBS_AUTOHSCROLL | CBS_SORT |
-					CBS_HASSTRINGS | CBS_DISABLENOSCROLL | WS_VSCROLL |
-					WS_TABSTOP
-	LTEXT           "St&yle de police:",IDC_STATIC,102,19,53,8
-	COMBOBOX        AFX_IDC_FONTSTYLES,104,29,53,53,CBS_DROPDOWNLIST |
-					CBS_DISABLENOSCROLL | WS_VSCROLL | WS_TABSTOP
-	LTEXT           "&Taille:",IDC_STATIC,167,19,40,8
-	COMBOBOX        AFX_IDC_FONTSIZES,167,29,36,53,CBS_DROPDOWN | CBS_SORT |
-					CBS_DISABLENOSCROLL | WS_VSCROLL | WS_TABSTOP
-	GROUPBOX        "Effets",IDC_STATIC,104,44,142,24,WS_GROUP
-	CONTROL         "&Barré",AFX_IDC_STRIKEOUT,"Button",BS_AUTOCHECKBOX |
-					WS_TABSTOP,109,55,65,10
-	CONTROL         "&Souligné",AFX_IDC_UNDERLINE,"Button",BS_AUTOCHECKBOX |
-					WS_TABSTOP,175,55,65,10
-	GROUPBOX        "Exemple",IDC_STATIC,104,71,142,36,WS_GROUP
-	CTEXT           "AaBbYyZz",AFX_IDC_SAMPLEBOX,110,80,130,22,SS_NOPREFIX |
-					NOT WS_VISIBLE
-END
-
-AFX_IDD_PROPPAGE_COLOR DIALOG DISCARDABLE  0, 0, 250, 62
-STYLE WS_CHILD | 0x4
-FONT 8, "MS Shell Dlg"
-BEGIN
-	LTEXT           "&Nom de propriété:",IDC_STATIC,3,3,100,8
-	COMBOBOX        AFX_IDC_COLORPROP,3,13,100,54,CBS_DROPDOWNLIST |
-					CBS_SORT | WS_VSCROLL | WS_TABSTOP
-	LTEXT           "&Couleur système:",IDC_STATIC,3,29,100,8
-	COMBOBOX        AFX_IDC_SYSTEMCOLORS,3,39,100,54,CBS_DROPDOWNLIST |
-					CBS_SORT | WS_VSCROLL | WS_TABSTOP
-	CONTROL         "",AFX_IDC_COLOR_BLACK,"Button",BS_OWNERDRAW | WS_GROUP |
-					WS_TABSTOP,118,4,15,11
-	CONTROL         "",AFX_IDC_COLOR_BLUE,"Button",BS_OWNERDRAW,138,4,15,11
-	CONTROL         "",AFX_IDC_COLOR_CYAN,"Button",BS_OWNERDRAW,158,4,15,11
-	CONTROL         "",AFX_IDC_COLOR_DARKBLUE,"Button",BS_OWNERDRAW,178,4,15,
-					11
-	CONTROL         "",AFX_IDC_COLOR_DARKCYAN,"Button",BS_OWNERDRAW,118,18,
-					15,11
-	CONTROL         "",AFX_IDC_COLOR_DARKGREEN,"Button",BS_OWNERDRAW,138,18,
-					15,11
-	CONTROL         "",AFX_IDC_COLOR_DARKMAGENTA,"Button",BS_OWNERDRAW,158,
-					18,15,11
-	CONTROL         "",AFX_IDC_COLOR_GRAY,"Button",BS_OWNERDRAW,178,18,15,11
-	CONTROL         "",AFX_IDC_COLOR_DARKRED,"Button",BS_OWNERDRAW,118,32,15,
-					11
-	CONTROL         "",AFX_IDC_COLOR_GREEN,"Button",BS_OWNERDRAW,138,32,15,
-					11
-	CONTROL         "",AFX_IDC_COLOR_LIGHTBROWN,"Button",BS_OWNERDRAW,158,32,
-					15,11
-	CONTROL         "",AFX_IDC_COLOR_LIGHTGRAY,"Button",BS_OWNERDRAW,178,32,
-					15,11
-	CONTROL         "",AFX_IDC_COLOR_MAGENTA,"Button",BS_OWNERDRAW,118,46,15,
-					11
-	CONTROL         "",AFX_IDC_COLOR_RED,"Button",BS_OWNERDRAW,138,46,15,11
-	CONTROL         "",AFX_IDC_COLOR_WHITE,"Button",BS_OWNERDRAW,158,46,15,
-					11
-	CONTROL         "",AFX_IDC_COLOR_YELLOW,"Button",BS_OWNERDRAW,178,46,15,
-					11
-END
-
-AFX_IDD_PROPPAGE_PICTURE DIALOG DISCARDABLE  0, 0, 250, 62
-STYLE WS_CHILD | 0x4
-FONT 8, "MS Shell Dlg"
-BEGIN
-	LTEXT           "&Nom de propriété:",IDC_STATIC,3,3,100,8
-	COMBOBOX        AFX_IDC_PROPNAME,3,13,100,30,CBS_DROPDOWNLIST | CBS_SORT |
-					WS_VSCROLL | WS_TABSTOP
-	PUSHBUTTON      "Pa&rcourir...",AFX_IDC_BROWSE,3,35,54,14
-	PUSHBUTTON      "&Effacer",AFX_IDC_CLEAR,61,35,54,14
-	RTEXT           "Aperçu:",IDC_STATIC,107,3,42,16
-	CONTROL         "",AFX_IDC_PICTURE,"Static",SS_BLACKFRAME,151,4,93,54
-END
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Dialog Info
-//
-
-AFX_IDD_PROPPAGE_FONT DLGINIT
-BEGIN
-	1002, 0x403, 12, 0
-0x6f42, 0x646c, 0x4920, 0x6174, 0x696c, 0x0063,
-	0
-END
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// String Table
-//
-
-STRINGTABLE DISCARDABLE
-BEGIN
-	AFX_IDS_PROPPAGE_UNKNOWN "(Inconnu)"
-	AFX_IDS_COLOR_DESKTOP   "Bureau"
-	AFX_IDS_COLOR_APPWORKSPACE "Espace de travail de l'application"
-	AFX_IDS_COLOR_WNDBACKGND "Arrière-plan de la fenêtre"
-	AFX_IDS_COLOR_WNDTEXT   "Texte de la fenêtre"
-	AFX_IDS_COLOR_MENUBAR   "Barre de menu"
-	AFX_IDS_COLOR_MENUTEXT  "Texte de menu"
-	AFX_IDS_COLOR_ACTIVEBAR "Barre de titre active"
-	AFX_IDS_COLOR_INACTIVEBAR "Barre de titre inactive"
-	AFX_IDS_COLOR_ACTIVETEXT "Texte de la barre de titre active"
-	AFX_IDS_COLOR_INACTIVETEXT "Texte de la barre de titre inactive"
-	AFX_IDS_COLOR_ACTIVEBORDER "Bordure active"
-	AFX_IDS_COLOR_INACTIVEBORDER "Bordure inactive"
-END
-#endif // !_AFX_NO_STOCKPPG_RESOURCES
-
-STRINGTABLE DISCARDABLE
-BEGIN
-#ifndef _AFX_NO_STOCKPPG_RESOURCES
-	AFX_IDS_COLOR_WNDFRAME  "Cadre de la fenêtre"
-	AFX_IDS_COLOR_SCROLLBARS "Barres de défilement"
-	AFX_IDS_COLOR_BTNFACE   "Face du bouton"
-	AFX_IDS_COLOR_BTNSHADOW "Ombre du bouton"
-	AFX_IDS_COLOR_BTNTEXT   "Texte du bouton"
-	AFX_IDS_COLOR_BTNHIGHLIGHT "Surbrillance du bouton"
-	AFX_IDS_COLOR_DISABLEDTEXT "Texte désactivé"
-	AFX_IDS_COLOR_HIGHLIGHT "Surbrillance"
-	AFX_IDS_COLOR_HIGHLIGHTTEXT "Texte en surbrillance"
-	AFX_IDS_REGULAR         "Normal"
-	AFX_IDS_BOLD            "Gras"
-	AFX_IDS_ITALIC          "Italique"
-	AFX_IDS_BOLDITALIC      "Italique gras"
-	AFX_IDS_SAMPLETEXT      "AaBbYyZz"
-#endif // !_AFX_NO_STOCKPPG_RESOURCES
-	AFX_IDS_DISPLAYSTRING_FONT "(Police)"
-	AFX_IDS_DISPLAYSTRING_COLOR "(Couleur)"
-END
-
-STRINGTABLE DISCARDABLE
-BEGIN
-	AFX_IDS_DISPLAYSTRING_PICTURE "(Image - %s)"
-#ifndef _AFX_NO_STOCKPPG_RESOURCES
-	AFX_IDS_PICTUREFILTER   "Tous les type d'images|*.bmp;*.cur;*.dib;*.emf;*.ico;*.wmf|Images en mode point (*.bmp;*.dib)|*.bmp;*.dib|Icônes/Curseurs (*.ico;*.cur)|*.ico;*.cur|Métafichiers (*.wmf;*.emf)|*.wmf;*.emf|Tous les fichiers (*.*)|*.*||"
-#endif // !_AFX_NO_STOCKPPG_RESOURCES
-	AFX_IDS_PICTYPE_UNKNOWN "Inconnu"
-	AFX_IDS_PICTYPE_NONE    "Aucun"
-	AFX_IDS_PICTYPE_BITMAP  "Image en mode point"
-	AFX_IDS_PICTYPE_METAFILE "Métafichier"
-	AFX_IDS_PICTYPE_ICON    "Icône"
-#ifndef _AFX_NO_STOCKPPG_RESOURCES
-	AFX_IDS_COLOR_PPG       "Page de propriété de couleur"
-	AFX_IDS_COLOR_PPG_CAPTION "Couleurs"
-	AFX_IDS_FONT_PPG        "Page de propriété de police"
-	AFX_IDS_FONT_PPG_CAPTION "Polices"
-	AFX_IDS_PICTURE_PPG     "Page de propriété d'image"
-	AFX_IDS_PICTURE_PPG_CAPTION "Images"
-#endif // !_AFX_NO_STOCKPPG_RESOURCES
-	AFX_IDS_BORDERSTYLE_0   "0 - Aucun"
-	AFX_IDS_BORDERSTYLE_1   "1 - Trait simple"
-END
-
-STRINGTABLE DISCARDABLE
-BEGIN
-	AFX_IDS_VERB_EDIT       "&Modifier"
-	AFX_IDS_VERB_PROPERTIES "&Propriétés..."
-END
-
-#ifndef _AFX_NO_STOCKPPG_RESOURCES
-STRINGTABLE DISCARDABLE
-BEGIN
-	AFX_IDP_PICTURECANTOPEN "Impossible d'ouvrir le fichier image %1. Le fichier peut ne pas exister, ou peut ne pas être lisible."
-	AFX_IDP_PICTURECANTLOAD "Impossible de charger le fichier image %1. Le fichier peut avoir un format incorrect."
-	AFX_IDP_PICTURETOOLARGE "Impossible de charger le fichier image %1. Le fichier est trop grand pour tenir en mémoire."
-	AFX_IDP_PICTUREREADFAILED
-							"Impossible de charger le fichier image %1. Echec à la lecture."
-END
-
-STRINGTABLE DISCARDABLE
-BEGIN
-	AFX_IDS_PICTUREBROWSETITLE "Parcourir les images"
-END
-#endif // !_AFX_NO_STOCKPPG_RESOURCES
-
-#ifndef _AFX_NO_CTLERROR_RESOURCES
-STRINGTABLE DISCARDABLE
-BEGIN
-	AFX_IDP_E_ILLEGALFUNCTIONCALL "Appel de fonction incorrect"
-	AFX_IDP_E_OVERFLOW      "Dépassement de capacité"
-	AFX_IDP_E_OUTOFMEMORY   "Mémoire épuisée"
-	AFX_IDP_E_DIVISIONBYZERO "Division par zéro"
-	AFX_IDP_E_OUTOFSTRINGSPACE "Espace de chaîne insuffisant"
-	AFX_IDP_E_OUTOFSTACKSPACE "Espace pile insuffisant"
-	AFX_IDP_E_BADFILENAMEORNUMBER "Nom ou numéro de fichier incorrect"
-	AFX_IDP_E_FILENOTFOUND  "Fichier introuvable"
-	AFX_IDP_E_BADFILEMODE   "Mode d'accès au  fichier incorrect"
-	AFX_IDP_E_FILEALREADYOPEN "Fichier déjà ouvert"
-	AFX_IDP_E_DEVICEIOERROR "Erreur d'entrée/sortie de périphérique"
-	AFX_IDP_E_FILEALREADYEXISTS "Ce fichier existe déjà"
-	AFX_IDP_E_BADRECORDLENGTH "Longueur d'enregistrement incorrecte"
-	AFX_IDP_E_DISKFULL      "Disque plein"
-	AFX_IDP_E_BADRECORDNUMBER "Numéro d'enregistrement incorrect"
-	AFX_IDP_E_BADFILENAME   "Nom de fichier incorrect"
-END
-
-STRINGTABLE DISCARDABLE
-BEGIN
-	AFX_IDP_E_TOOMANYFILES  "Trop de fichiers"
-	AFX_IDP_E_DEVICEUNAVAILABLE "Périphérique non disponible"
-	AFX_IDP_E_PERMISSIONDENIED "Permission refusée"
-	AFX_IDP_E_DISKNOTREADY  "Disque non prêt"
-	AFX_IDP_E_PATHFILEACCESSERROR "Erreur dans le chemin d'accès"
-	AFX_IDP_E_PATHNOTFOUND  "Chemin d'accès introuvable"
-	AFX_IDP_E_INVALIDPATTERNSTRING "Chaîne de motif incorrecte"
-	AFX_IDP_E_INVALIDUSEOFNULL "Utilisation incorrecte de NULL"
-	AFX_IDP_E_INVALIDFILEFORMAT "Format de fichier incorrect"
-	AFX_IDP_E_INVALIDPROPERTYVALUE "Valeur de propriété incorrecte"
-	AFX_IDP_E_INVALIDPROPERTYARRAYINDEX "Index de tableau incorrect"
-	AFX_IDP_E_SETNOTSUPPORTEDATRUNTIME "La propriété ne peut pas être définie au moment de l'exécution"
-	AFX_IDP_E_SETNOTSUPPORTED "Propriété en lecture seule"
-	AFX_IDP_E_NEEDPROPERTYARRAYINDEX
-							"Vous devez spécifier un index de tableau lorsque vous utilisez un tableau de propriété"
-	AFX_IDP_E_SETNOTPERMITTED "Cette propriété ne peut pas être définie pour ce contrôle"
-	AFX_IDP_E_GETNOTSUPPORTEDATRUNTIME "La propriété ne peut pas être lue au moment de l'exécution"
-END
-
-STRINGTABLE DISCARDABLE
-BEGIN
-	AFX_IDP_E_GETNOTSUPPORTED "Propriété en écriture seule"
-	AFX_IDP_E_PROPERTYNOTFOUND "Propriété introuvable"
-	AFX_IDP_E_INVALIDCLIPBOARDFORMAT "Format de Presse-papiers incorrect"
-	AFX_IDP_E_INVALIDPICTURE "Image incorrecte"
-	AFX_IDP_E_PRINTERERROR  "Erreur d'imprimante"
-	AFX_IDP_E_CANTSAVEFILETOTEMP
-							"Impossible de créer le fichier temporaire nécessaire pour l'enregistrement"
-	AFX_IDP_E_SEARCHTEXTNOTFOUND "Texte recherché introuvable"
-	AFX_IDP_E_REPLACEMENTSTOOLONG "Texte de remplacement trop long"
-END
-#endif //!_AFX_NO_CTLERROR_RESOURCES
-
-#endif //!_AFXDLL
-#endif //__AFXOLECL_RC__

+ 0 - 105
libs/mfc/include/Fra/afxdb.rc

@@ -1,105 +0,0 @@
-// This is a part of the Microsoft Foundation Classes C++ library.
-// Copyright (C) 1992-1998 Microsoft Corporation
-// All rights reserved.
-//
-// This source code is only intended as a supplement to the
-// Microsoft Foundation Classes Reference and related
-// electronic documentation provided with the library.
-// See these sources for detailed information regarding the
-// Microsoft Foundation Classes product.
-
-#ifndef __AFXDB_RC__
-#define __AFXDB_RC__
-
-#ifndef __AFXRES_H__
-	#include <afxres.h>
-#endif
-
-#ifdef APSTUDIO_INVOKED
-// This will prevent the VC++ Resource Editor user from saving this file
-1 TEXTINCLUDE DISCARDABLE
-BEGIN
-"< Cannot change standard MFC resources! >\0"
-END
-#endif    // APSTUDIO_INVOKED
-
-#ifndef _AFXDLL
-
-/////////////////////////////////////////////////////////////////////////////
-// Database Resources
-
-// Database strings
-STRINGTABLE DISCARDABLE
-BEGIN
-	AFX_IDP_SQL_CONNECT_FAIL
-		"Tentative infructueuse de connexion à la source de données"
-	AFX_IDP_SQL_RECORDSET_FORWARD_ONLY
-		"Le jeu d'enregistrements n'accepte que les déplacements vers l'avant."
-	AFX_IDP_SQL_EMPTY_COLUMN_LIST
-		"Tentative infructueuse d'ouverture de table - colonnes à extraire introuvables à l'endroit spécifié."
-	AFX_IDP_SQL_FIELD_SCHEMA_MISMATCH
-		"La requête a renvoyé des types de données de colonnes inattendus."
-	AFX_IDP_SQL_ILLEGAL_MODE "Tentative infructueuse de Mise à jour ou de Suppression."
-	AFX_IDP_SQL_MULTIPLE_ROWS_AFFECTED "Plusieurs lignes ont été mises à jour."
-	AFX_IDP_SQL_NO_CURRENT_RECORD "L'opération a échoué, pas d'enregistrement en cours"
-	AFX_IDP_SQL_NO_ROWS_AFFECTED
-		"Aucune ligne n'a été affectée par l'opération de mise à jour ou de suppression."
-	AFX_IDP_SQL_RECORDSET_READONLY "Le jeu d'enregistrements est en lecture seule"
-	AFX_IDP_SQL_SQL_NO_TOTAL
-		"Le pilote ODBC ne prend pas en charge le modèle de données LongBinary MFC."
-	AFX_IDP_SQL_ODBC_LOAD_FAILED
-		"Tentative infructueuse de chargement de l'élément ODBC32.DLL."
-	AFX_IDP_SQL_DYNASET_NOT_SUPPORTED
-		"Le gestionnaire ODBC ne prend pas en charge les feuilles de réponses dynamiques."
-	AFX_IDP_SQL_SNAPSHOT_NOT_SUPPORTED
-		"Curseurs ODBC statiques requis pour la prise en charge des instantanés."
-	AFX_IDP_SQL_API_CONFORMANCE
-		"Gestionnaire ODBC incompatible avec les classes de bases de données MFC (API_CONFORMANCE >= SQL_OAC_LEVEL1 requis)."
-	AFX_IDP_SQL_SQL_CONFORMANCE
-		"Gestionnaire ODBC incompatible avec les classes de bases de données MFC (SQL_CONFORMANCE >= SQL_OSC_MINIMUM requis)."
-	AFX_IDP_SQL_NO_DATA_FOUND
-		"Tentative de défilement après la fin ou avant le début des données."
-	AFX_IDP_SQL_ROW_UPDATE_NOT_SUPPORTED
-		"Feuilles de réponses dynamiques non prises en charge par le gestionnaire ODBC."
-	AFX_IDP_SQL_ODBC_V2_REQUIRED
-		"Gestionnaire ODBC conforme Niveau 2 (Level 2) requis."
-	AFX_IDP_SQL_NO_POSITIONED_UPDATES
-		"Les mises à jour programmées ne sont pas prises en charge par le gestionnaire ODBC."
-	AFX_IDP_SQL_LOCK_MODE_NOT_SUPPORTED
-		"Le mode de verrouillage requis n'est pas accepté."
-	AFX_IDP_SQL_DATA_TRUNCATED
-		"Données tronquées."
-	AFX_IDP_SQL_ROW_FETCH
-		"Erreur de récupération de l'enregistrement."
-	AFX_IDP_SQL_INCORRECT_ODBC
-		"Un point d'entrée ODBC requis est introuvable. Vérifiez qu'ODBC est correctement installé."
-	AFX_IDP_SQL_UPDATE_DELETE_FAILED
-		"Echec de la mise à jour ou de la suppression."
-	AFX_IDP_SQL_DYNAMIC_CURSOR_NOT_SUPPORTED
-		"Curseurs dynamiques non pris en charge par le pilote ODBC."
-	AFX_IDP_SQL_FIELD_NOT_FOUND
-		"Nom ou index de champ non valide"
-	AFX_IDP_SQL_BOOKMARKS_NOT_SUPPORTED
-		"Les onglets ne sont pas compatibles avec le pilote ODBC."
-	AFX_IDP_SQL_BOOKMARKS_NOT_ENABLED
-		"Les onglets ne sont pas activés sur le recordset."
-	AFX_IDP_DAO_ENGINE_INITIALIZATION
-		"Impossible d'initialiser le moteur de base de données DAO/Jet."
-	AFX_IDP_DAO_DFX_BIND
-		"Valeur du paramètre DFX incorrecte."
-	AFX_IDP_DAO_OBJECT_NOT_OPEN
-		"DAO TableDef ou QueryDef non ouverts."
-	AFX_IDP_DAO_ROWTOOSHORT
-		"Echec de GetRows. Mémoire allouée insuffisante pour la ligne."
-	AFX_IDP_DAO_BADBINDINFO
-		"Erreur de liens GetRows. Ceci est probablement du à une mauvaise correspondance de types de données."
-	AFX_IDP_DAO_COLUMNUNAVAILABLE
-		"Echec de GetRows. La colonne demandée n'est pas un membre de ce jeu d'enregistrements."
-
-	AFX_IDS_DELETED "<Effacé>"
-END
-
-/////////////////////////////////////////////////////////////////////////////
-
-#endif //!_AFXDLL
-#endif //__AFXDB_RC__

+ 0 - 66
libs/mfc/include/Fra/afxolecl.rc

@@ -1,66 +0,0 @@
-// This is a part of the Microsoft Foundation Classes C++ library.
-// Copyright (C) 1992-1998 Microsoft Corporation
-// All rights reserved.
-//
-// This source code is only intended as a supplement to the
-// Microsoft Foundation Classes Reference and related
-// electronic documentation provided with the library.
-// See these sources for detailed information regarding the
-// Microsoft Foundation Classes product.
-
-#ifndef __AFXOLECL_RC__
-#define __AFXOLECL_RC__
-
-#ifndef __AFXRES_H__
-	#include <afxres.h>
-#endif
-
-#ifndef _INC_DLGS
-	#include <dlgs.h>
-#endif
-
-#ifdef APSTUDIO_INVOKED
-// This will prevent the VC++ Resource Editor user from saving this file
-1 TEXTINCLUDE DISCARDABLE
-BEGIN
-"< Cannot change standard MFC resources! >\0"
-END
-#endif    // APSTUDIO_INVOKED
-
-#ifndef _AFXDLL
-
-/////////////////////////////////////////////////////////////////////////////
-// OLE Client Resources
-
-/////////////////////////////////////////////////////////////////////////////
-// OLE strings
-
-STRINGTABLE DISCARDABLE
-BEGIN
-	AFX_IDP_STATIC_OBJECT           "Impossible d'activer un objet ActiveX statique."
-	AFX_IDP_FAILED_TO_CONNECT       "La connexion a échoué. \nLa liaison est peut être rompue."
-	AFX_IDP_SERVER_BUSY             "Impossible d'exécuter la commande, le serveur est occupé."
-	AFX_IDP_BAD_VERB                "Erreur lors de l'exécution de l'opération par l'application serveur."
-	AFX_IDP_FAILED_TO_LAUNCH        "Erreur lors du démarrage d'une application serveur."
-	AFX_IDS_UPDATING_ITEMS          "Mise à jour des objets ActiveX"
-	AFX_IDP_FAILED_TO_CONVERT       "Echec de conversion de l'objet ActiveX."
-	AFX_IDP_ASK_TO_DISCARD          "Impossible de sauvegarder les objets ActiveX en quittant Windows !\nRejeter tous les modifications sur %1?"
-	AFX_IDP_FAILED_TO_CREATE        "Echec de création de l'objet. Vérifiez que l'application est entrée dans le registre du système."
-
-	AFX_IDS_METAFILE_FORMAT         "Image (métafichier)\na image"
-	AFX_IDS_DIB_FORMAT              "Image en mode point indépendante du périphérique\na image en mode point indépendante du périphérique"
-	AFX_IDS_BITMAP_FORMAT           "Image en mode point\na image en mode point"
-	AFX_IDS_LINKSOURCE_FORMAT       "%s\n%s"
-	AFX_IDS_EMBED_FORMAT            "%s\n%s"
-	AFX_IDS_RTF_FORMAT              "Rich Text (RTF)\ntexte avec du formatage de police et de paragraphe"
-	AFX_IDS_TEXT_FORMAT             "Texte non formaté\ntexte sans aucun formatage"
-
-	AFX_IDS_INVALID_CURRENCY        "Monnaie non valide."
-	AFX_IDS_INVALID_DATETIME        "DateTime non valide."
-	AFX_IDS_INVALID_DATETIMESPAN    "DateTimeSpan non valide."
-END
-
-/////////////////////////////////////////////////////////////////////////////
-
-#endif //!_AFXDLL
-#endif //__AFXOLECL_RC__

部分文件因为文件数量过多而无法显示