Replaced PhysFS.NET with a README pointing to more modern C# bindings.
authorRyan C. Gordon <icculus@icculus.org>
Fri, 29 Jan 2016 15:16:15 -0500
changeset 1367 50b6cb7b3f4b
parent 1366 a026cd13700d
child 1368 83e1fbf94f30
Replaced PhysFS.NET with a README pointing to more modern C# bindings.
extras/PhysFS.NET/AssemblyInfo.cs
extras/PhysFS.NET/PhysFS.NET.csproj
extras/PhysFS.NET/PhysFS.NET.sln
extras/PhysFS.NET/PhysFS.cs
extras/PhysFS.NET/PhysFSFileStream.cs
extras/PhysFS.NET/PhysFS_DLL.cs
extras/PhysFS.NET/README.txt
extras/PhysFS.NET/TestApp/App.ico
extras/PhysFS.NET/TestApp/AssemblyInfo.cs
extras/PhysFS.NET/TestApp/TestApp.csproj
extras/PhysFS.NET/TestApp/TestApp.sln
extras/PhysFS.NET/TestApp/TestAppForm.cs
extras/PhysFS.NET/TestApp/TestAppForm.resx
extras/README-CSharp.txt
--- a/extras/PhysFS.NET/AssemblyInfo.cs	Fri Jan 01 12:53:26 2016 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,58 +0,0 @@
-using System.Reflection;
-using System.Runtime.CompilerServices;
-
-//
-// 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("PhysFS.NET")]
-[assembly: AssemblyDescription("PhysFS Bindings for .NET")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("PhysFS.NET")]
-[assembly: AssemblyCopyright("(c)2003 Gregory S. Read")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]		
-
-//
-// Version information for an assembly consists of the following four values:
-//
-//      Major Version
-//      Minor Version 
-//      Build Number
-//      Revision
-//
-// You can specify all the values or you can default the Revision and Build Numbers 
-// by using the '*' as shown below:
-
-[assembly: AssemblyVersion("1.0.*")]
-
-//
-// In order to sign your assembly you must specify a key to use. Refer to the 
-// Microsoft .NET Framework documentation for more information on assembly signing.
-//
-// Use the attributes below to control which key is used for signing. 
-//
-// Notes: 
-//   (*) If no key is specified, the assembly is not signed.
-//   (*) KeyName refers to a key that has been installed in the Crypto Service
-//       Provider (CSP) on your machine. KeyFile refers to a file which contains
-//       a key.
-//   (*) If the KeyFile and the KeyName values are both specified, the 
-//       following processing occurs:
-//       (1) If the KeyName can be found in the CSP, that key is used.
-//       (2) If the KeyName does not exist and the KeyFile does exist, the key 
-//           in the KeyFile is installed into the CSP and used.
-//   (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility.
-//       When specifying the KeyFile, the location of the KeyFile should be
-//       relative to the project output directory which is
-//       %Project Directory%\obj\<configuration>. For example, if your KeyFile is
-//       located in the project directory, you would specify the AssemblyKeyFile 
-//       attribute as [assembly: AssemblyKeyFile("..\\..\\mykey.snk")]
-//   (*) Delay Signing is an advanced option - see the Microsoft .NET Framework
-//       documentation for more information on this.
-//
-[assembly: AssemblyDelaySign(false)]
-[assembly: AssemblyKeyFile("")]
-[assembly: AssemblyKeyName("")]
--- a/extras/PhysFS.NET/PhysFS.NET.csproj	Fri Jan 01 12:53:26 2016 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,113 +0,0 @@
-<VisualStudioProject>
-    <CSHARP
-        ProjectType = "Local"
-        ProductVersion = "7.0.9466"
-        SchemaVersion = "1.0"
-        ProjectGuid = "{C6205A43-3D4D-41E6-872C-96CD7BE55230}"
-    >
-        <Build>
-            <Settings
-                ApplicationIcon = ""
-                AssemblyKeyContainerName = ""
-                AssemblyName = "PhysFS.NET"
-                AssemblyOriginatorKeyFile = ""
-                DefaultClientScript = "JScript"
-                DefaultHTMLPageLayout = "Grid"
-                DefaultTargetSchema = "IE50"
-                DelaySign = "false"
-                OutputType = "Library"
-                RootNamespace = "PhysFS.NET"
-                StartupObject = ""
-            >
-                <Config
-                    Name = "Debug"
-                    AllowUnsafeBlocks = "true"
-                    BaseAddress = "285212672"
-                    CheckForOverflowUnderflow = "false"
-                    ConfigurationOverrideFile = ""
-                    DefineConstants = "DEBUG;TRACE"
-                    DocumentationFile = ""
-                    DebugSymbols = "true"
-                    FileAlignment = "4096"
-                    IncrementalBuild = "true"
-                    Optimize = "false"
-                    OutputPath = "bin\Debug\"
-                    RegisterForComInterop = "false"
-                    RemoveIntegerChecks = "false"
-                    TreatWarningsAsErrors = "false"
-                    WarningLevel = "4"
-                />
-                <Config
-                    Name = "Release"
-                    AllowUnsafeBlocks = "true"
-                    BaseAddress = "285212672"
-                    CheckForOverflowUnderflow = "false"
-                    ConfigurationOverrideFile = ""
-                    DefineConstants = "TRACE"
-                    DocumentationFile = ""
-                    DebugSymbols = "false"
-                    FileAlignment = "4096"
-                    IncrementalBuild = "false"
-                    Optimize = "true"
-                    OutputPath = "bin\Release\"
-                    RegisterForComInterop = "false"
-                    RemoveIntegerChecks = "false"
-                    TreatWarningsAsErrors = "false"
-                    WarningLevel = "4"
-                />
-            </Settings>
-            <References>
-                <Reference
-                    Name = "System"
-                    AssemblyName = "System"
-                    HintPath = "C:\WINDOWS\Microsoft.NET\Framework\v1.0.3705\System.dll"
-                />
-                <Reference
-                    Name = "System.Data"
-                    AssemblyName = "System.Data"
-                    HintPath = "C:\WINDOWS\Microsoft.NET\Framework\v1.0.3705\System.Data.dll"
-                />
-                <Reference
-                    Name = "System.XML"
-                    AssemblyName = "System.Xml"
-                    HintPath = "C:\WINDOWS\Microsoft.NET\Framework\v1.0.3705\System.XML.dll"
-                />
-                <Reference
-                    Name = "System.Drawing"
-                    AssemblyName = "System.Drawing"
-                    HintPath = "C:\WINDOWS\Microsoft.NET\Framework\v1.0.3705\System.Drawing.dll"
-                />
-                <Reference
-                    Name = "System.Windows.Forms"
-                    AssemblyName = "System.Windows.Forms"
-                    HintPath = "C:\WINDOWS\Microsoft.NET\Framework\v1.0.3705\System.Windows.Forms.dll"
-                />
-            </References>
-        </Build>
-        <Files>
-            <Include>
-                <File
-                    RelPath = "AssemblyInfo.cs"
-                    SubType = "Code"
-                    BuildAction = "Compile"
-                />
-                <File
-                    RelPath = "PhysFS.cs"
-                    SubType = "Code"
-                    BuildAction = "Compile"
-                />
-                <File
-                    RelPath = "PhysFS_DLL.cs"
-                    SubType = "Code"
-                    BuildAction = "Compile"
-                />
-                <File
-                    RelPath = "PhysFSFileStream.cs"
-                    SubType = "Code"
-                    BuildAction = "Compile"
-                />
-            </Include>
-        </Files>
-    </CSHARP>
-</VisualStudioProject>
-
--- a/extras/PhysFS.NET/PhysFS.NET.sln	Fri Jan 01 12:53:26 2016 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,21 +0,0 @@
-Microsoft Visual Studio Solution File, Format Version 7.00
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PhysFS.NET", "PhysFS.NET.csproj", "{C6205A43-3D4D-41E6-872C-96CD7BE55230}"
-EndProject
-Global
-	GlobalSection(SolutionConfiguration) = preSolution
-		ConfigName.0 = Debug
-		ConfigName.1 = Release
-	EndGlobalSection
-	GlobalSection(ProjectDependencies) = postSolution
-	EndGlobalSection
-	GlobalSection(ProjectConfiguration) = postSolution
-		{C6205A43-3D4D-41E6-872C-96CD7BE55230}.Debug.ActiveCfg = Debug|.NET
-		{C6205A43-3D4D-41E6-872C-96CD7BE55230}.Debug.Build.0 = Debug|.NET
-		{C6205A43-3D4D-41E6-872C-96CD7BE55230}.Release.ActiveCfg = Release|.NET
-		{C6205A43-3D4D-41E6-872C-96CD7BE55230}.Release.Build.0 = Release|.NET
-	EndGlobalSection
-	GlobalSection(ExtensibilityGlobals) = postSolution
-	EndGlobalSection
-	GlobalSection(ExtensibilityAddIns) = postSolution
-	EndGlobalSection
-EndGlobal
--- a/extras/PhysFS.NET/PhysFS.cs	Fri Jan 01 12:53:26 2016 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,189 +0,0 @@
-/* PhysFS.cs - (c)2003 Gregory S. Read
- * Provides access to PhysFS API calls not specific to file handle access.
- */
-using System;
-
-namespace PhysFS_NET
-{
-   public class PhysFS
-   {
-      /* Initialize
-       * Inits the PhysFS API.  This normally does not need to be called unless
-       * the API has been manually deinitialized since the PhysFS_DLL class
-       * initializes just before the first call is made into the DLL.
-       * Parameters
-       *    none
-       * Returns
-       *    none
-       * Exceptions
-       *    PhysFSException - An error occured in the PhysFS API
-       */
-      public static void Initialize()
-      {
-         // Initialize the physfs library, raise an exception if error
-         if(PhysFS_DLL.PHYSFS_init("") == 0)
-            throw new PhysFSException();
-      }
-
-      /* Deinitialize
-       * Deinits the PhysFS API.  It is recommended that this method be called
-       * by the application before exiting in order to gracefully deallocate
-       * resources and close all filehandles, etc.
-       * Parameters
-       *    none
-       * Returns
-       *    none
-       * Exceptions
-       *    PhysFSException - An error occured in the PhysFS API
-       */
-      public static void Deinitialize()
-      {
-         // Deinit, raise an exception if an error occured
-         if(PhysFS_DLL.PHYSFS_deinit() == 0)
-            throw new PhysFSException();
-      }
-
-      /* BaseDir
-       * Gets the base directory configured for PhysFS.  See the PhysFS API
-       * documentation for more information.
-       * Parameters
-       *    none
-       * Returns
-       *    A string value representing the Base Directory
-       * Exceptions
-       *    none
-       */
-      public static string BaseDir
-      {
-         get
-         {
-            // Return the current base directory
-            return PhysFS_DLL.PHYSFS_getBaseDir();
-         }
-      }
-
-      /* WriteDir
-       * Gets or sets the write directory configured for PhysFS.  See the PhysFS API
-       * documentation for more information.
-       * Parameters
-       *    set - Path to set the WriteDir property to
-       * Returns
-       *    A string value representing the Write Directory
-       * Exceptions
-       *    PhysFSException - An error occured in the PhysFS API when
-       *       settings the write directory.
-       */
-      public static string WriteDir
-      {
-         get
-         {
-            // Return the current write directory
-            return PhysFS_DLL.PHYSFS_getWriteDir();
-         }
-         set
-         {
-            // Set the write directory and raise an exception if an error occured
-            if(PhysFS_DLL.PHYSFS_setWriteDir(value) == 0)
-               throw new PhysFSException();
-         }
-      }
-
-      /* UserDir
-       * Gets or sets the write directory configured for PhysFS.  See the PhysFS API
-       * documentation for more information.
-       * Parameters
-       *    set - Path to set the WriteDir property to
-       * Returns
-       *    A string value representing the Write Directory
-       * Exceptions
-       *    PhysFSException - An error occured in the PhysFS API when
-       *       settings the write directory.
-       */
-      public static string UserDir
-      {
-         get
-         {
-            // Return the current user directory
-            return PhysFS_DLL.PHYSFS_getUserDir();
-         }
-      }
-      public static void AddToSearchPath(string NewDir, bool Append)
-      {
-         if(PhysFS_DLL.PHYSFS_addToSearchPath(NewDir, Append?1:0) == 0)
-            throw new PhysFSException();
-      }
-      public static void RemoveFromSearchPath(string OldDir)
-      {
-         if(PhysFS_DLL.PHYSFS_removeFromSearchPath(OldDir) == 0)
-            throw new PhysFSException();
-      }
-      public unsafe static string[] GetSearchPath()
-      {
-         byte** p;				// Searchpath list from PhysFS dll
-         string[] pathlist;	// List converted to an array
-
-         // Get the CDROM drive listing
-         p = PhysFS_DLL.PHYSFS_getSearchPath();
-         // Convert the C-style array to a .NET style array
-         pathlist = PhysFS_DLL.BytePPToArray(p);
-         // Free the original list since we're done with it
-         PhysFS_DLL.PHYSFS_freeList(p);
-
-         return pathlist;
-      }
-      public unsafe static string[] GetCDROMDrives()
-      {
-         byte** p;				// CDROM list from PhysFS dll
-         string[] cdromlist;	// List converted to an array
-
-         // Get the CDROM drive listing
-         p = PhysFS_DLL.PHYSFS_getCdRomDirs();
-         // Convert the C-style array to a .NET style array
-         cdromlist = PhysFS_DLL.BytePPToArray(p);
-         // Free the original list since we're done with it
-         PhysFS_DLL.PHYSFS_freeList(p);
-
-         return cdromlist;
-      }
-      public static void MkDir(string Dirname)
-      {
-         if(PhysFS_DLL.PHYSFS_mkdir(Dirname) == 0)
-            throw new PhysFSException();
-      }
-      public static void Delete(string Filename)
-      {
-         if(PhysFS_DLL.PHYSFS_delete(Filename) == 0)
-            throw new PhysFSException();
-      }
-      public static string GetRealDir(string Filename)
-      {
-         string RetValue;
-
-         RetValue = PhysFS_DLL.PHYSFS_getRealDir(Filename);
-         if(RetValue == null)
-            throw new PhysFSException("File not found in search path.");
-
-         // Return the real file path of the specified filename
-         return RetValue;
-      }
-      public unsafe static string[] EnumerateFiles(string Dirname)
-      {
-         byte** p;				// File list from PhysFS dll
-         string[] filelist;	// List converted to an array
-
-         // Get the CDROM drive listing
-         p = PhysFS_DLL.PHYSFS_enumerateFiles(Dirname);
-         // Convert the C-style array to a .NET style array
-         filelist = PhysFS_DLL.BytePPToArray(p);
-         // Free the original list since we're done with it
-         PhysFS_DLL.PHYSFS_freeList(p);
-
-         return filelist;
-      }
-      public static bool IsDirectory(string Filename)
-      {
-         // Return true if non-zero, otherwise return false
-         return (PhysFS_DLL.PHYSFS_isDirectory(Filename) == 0)?false:true;
-      }
-   }
-}
--- a/extras/PhysFS.NET/PhysFSFileStream.cs	Fri Jan 01 12:53:26 2016 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,194 +0,0 @@
-/* PhysFSFileStream.cs - (c)2003 Gregory S. Read */
-using System;
-using System.Collections;
-using System.IO;
-
-namespace PhysFS_NET
-{
-   public enum PhysFSFileMode {Read, Write, Append};
-
-   // Our exception class we'll use for throwing all PhysFS API related exception
-   public class PhysFSException : IOException
-   {
-      public PhysFSException(string Message) : base(Message) {}
-      public PhysFSException() : base(PhysFS_DLL.PHYSFS_getLastError()) {}
-   }
-
-   public unsafe class PhysFSFileStream : Stream
-   {
-      // ***Public properties***
-      public override bool CanRead
-      {
-         get
-         {
-            // Reading is supported
-            return true;
-         }
-      }
-      
-      public override bool CanSeek
-      {
-         get
-         {
-            // Seek is supported
-            return true;
-         }
-      }
-
-      public override bool CanWrite
-      {
-         get
-         {
-            // Writing is supported
-            return true;
-         }
-      }
-
-      public override long Length
-      {
-         get
-         {
-            long TempLength;
-            TempLength = PhysFS_DLL.PHYSFS_fileLength(pHandle);
-
-            // If call returned an error, throw an exception
-            if(TempLength == -1)
-               throw new PhysFSException();
-
-            return TempLength;
-         }
-      }
-
-      public override long Position
-      {
-         get
-         {
-            long TempPosition;
-            TempPosition = PhysFS_DLL.PHYSFS_tell(pHandle);
-
-            // If call returned an error, throw an exception
-            if(TempPosition == -1)
-               throw new PhysFSException();
-
-            return TempPosition;
-         }
-         set
-         {
-            // Seek from beginning of file using the position value
-            Seek(value, SeekOrigin.Begin);
-         }
-      }
-      
-      // ***Public methods***
-      public PhysFSFileStream(string FileName, PhysFSFileMode FileMode, ulong BufferSize)
-      {
-         // Open the specified file with the appropriate file access
-         switch(FileMode)
-         {
-            case PhysFSFileMode.Read:
-               pHandle = PhysFS_DLL.PHYSFS_openRead(FileName);
-               break;
-            case PhysFSFileMode.Write:
-               pHandle = PhysFS_DLL.PHYSFS_openWrite(FileName);
-               break;
-            case PhysFSFileMode.Append:
-               pHandle = PhysFS_DLL.PHYSFS_openAppend(FileName);
-               break;
-            default:
-               throw new PhysFSException("Invalid FileMode specified");
-         }
-
-         // If handle is null, an error occured, so raise an exception
-         //!!! Does object get created if exception is thrown?
-         if(pHandle == null)
-            throw new PhysFSException();
-
-         // Set buffer size, raise an exception if an error occured
-         if(PhysFS_DLL.PHYSFS_setBuffer(pHandle, BufferSize) == 0)
-            throw new PhysFSException();
-      }
-
-      // This constructor sets the buffer size to 0 if not specified
-      public PhysFSFileStream(string FileName, PhysFSFileMode FileMode) : this(FileName, FileMode, 0) {}
-		
-      ~PhysFSFileStream()
-      {
-         // Don't close the handle if they've specifically closed it already
-         if(!Closed)
-            Close();
-      }
-
-      public override void Flush()
-      {
-         if(PhysFS_DLL.PHYSFS_flush(pHandle) == 0)
-            throw new PhysFSException();
-      }
-
-      public override int Read(byte[] buffer, int offset, int count)
-      {
-         long RetValue;
-   
-         fixed(byte *pbytes = &buffer[offset])
-         {
-            // Read into our allocated pointer
-            RetValue = PhysFS_DLL.PHYSFS_read(pHandle, pbytes, sizeof(byte), (uint)count);
-         }
-
-         if(RetValue == -1)
-            throw new PhysFSException();
-
-         // Return number of bytes read
-         // Note: This cast should be safe since we are only reading 'count' items, which
-         // is of type 'int'.
-         return (int)RetValue;
-      }
-
-      public override void Write(byte[] buffer, int offset, int count)
-      {
-         long RetValue;
-
-         fixed(byte* pbytes = &buffer[offset])
-         {
-            // Write buffer
-            RetValue = PhysFS_DLL.PHYSFS_write(pHandle, pbytes, sizeof(byte), (uint)count);
-         }
-
-         if(RetValue == -1)
-            throw new PhysFSException();
-      }
-
-      public override long Seek(long offset, SeekOrigin origin)
-      {
-         // Only seeking from beginning is supported by PhysFS API
-         if(origin != SeekOrigin.Begin)
-            throw new PhysFSException("Only seek origin of \"Begin\" is supported");
-         
-         // Seek to specified offset, raise an exception if error occured
-         if(PhysFS_DLL.PHYSFS_seek(pHandle, (ulong)offset) == 0)
-            throw new PhysFSException();
-
-         // Since we always seek from beginning, the offset is always
-         //  the absolute position.
-         return offset;
-      }
-
-      public override void SetLength(long value)
-      {
-         throw new NotSupportedException("SetLength method not supported in PhysFSFileStream objects.");
-      }
-
-      public override void Close()
-      {
-         // Close the handle
-         if(PhysFS_DLL.PHYSFS_close(pHandle) == 0)
-            throw new PhysFSException();
-
-         // File has been closed.  Rock.
-         Closed = true;
-      }
-
-      // ***Private variables***
-      private void *pHandle;
-      private bool Closed = false;
-   }
-}
\ No newline at end of file
--- a/extras/PhysFS.NET/PhysFS_DLL.cs	Fri Jan 01 12:53:26 2016 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,113 +0,0 @@
-/* PhysFS_DLL - (c)2003 Gregory S. Read
- * Internal class that provides direct access to the PhysFS DLL.  It is
- * not accessible outside of the PhysFS.NET assembly.
- */
-using System.Collections;
-using System.Runtime.InteropServices;
-
-namespace PhysFS_NET
-{
-   internal class PhysFS_DLL
-   {
-      /* Static constructor
-       * Initializes the PhysFS API before any method is called in this class.  This
-       * relieves the user from having to explicitly initialize the API.
-       * Parameters
-       *    none
-       * Returns
-       *    none
-       * Exceptions
-       *    PhysFSException - An error occured in the PhysFS API
-       */
-      static PhysFS_DLL()
-      {
-         if(PHYSFS_init("") == 0)
-            throw new PhysFSException();
-      }
-
-      /* BytePPToArray
-       * Converts a C-style string array into a .NET managed string array
-       * Parameters
-       *    C-style string array pointer returned from PhysFS
-       * Returns
-       *    .NET managed string array
-       * Exceptions
-       *    none
-       */
-      public unsafe static string[] BytePPToArray(byte **bytearray)
-      {
-         byte** ptr;
-         byte* c;
-         string tempstr;
-         ArrayList MyArrayList = new ArrayList();
-         string[] RetArray;
-
-         for(ptr = bytearray; *ptr != null; ptr++)
-         {
-            tempstr = "";
-            for(c = *ptr; *c != 0; c++)
-            {
-               tempstr += (char)*c;
-            }
-
-            // Add string to our list
-            MyArrayList.Add(tempstr);
-         }
-
-         // Return a normal array of the list
-         RetArray = new string[MyArrayList.Count];
-         MyArrayList.CopyTo(RetArray, 0);
-         return RetArray;
-      }
-
-      // Name of DLL to import
-      private const string PHYSFS_DLLNAME = "physfs.dll";
-
-      // DLL import declarations
-      [DllImport(PHYSFS_DLLNAME)] public static extern int PHYSFS_init(string argv0);
-      [DllImport(PHYSFS_DLLNAME)] public static extern int PHYSFS_deinit();
-      [DllImport(PHYSFS_DLLNAME)] public static extern unsafe void PHYSFS_freeList(void *listVar);
-      [DllImport(PHYSFS_DLLNAME)] public static extern string PHYSFS_getLastError();
-      [DllImport(PHYSFS_DLLNAME)] public static extern string PHYSFS_getDirSeparator();
-      [DllImport(PHYSFS_DLLNAME)] public static extern void PHYSFS_permitSymbolicLinks(int allow);
-      [DllImport(PHYSFS_DLLNAME)] public static extern unsafe byte** PHYSFS_getCdRomDirs();
-      [DllImport(PHYSFS_DLLNAME)] public static extern string PHYSFS_getBaseDir();
-      [DllImport(PHYSFS_DLLNAME)] public static extern string PHYSFS_getUserDir();
-      [DllImport(PHYSFS_DLLNAME)] public static extern string PHYSFS_getWriteDir();
-      [DllImport(PHYSFS_DLLNAME)] public static extern int PHYSFS_setWriteDir(string newDir);
-      [DllImport(PHYSFS_DLLNAME)] public static extern int PHYSFS_addToSearchPath(string newDir, int appendToPath);
-      [DllImport(PHYSFS_DLLNAME)] public static extern int PHYSFS_removeFromSearchPath(string oldDir);
-      [DllImport(PHYSFS_DLLNAME)] public static extern unsafe byte** PHYSFS_getSearchPath();
-      [DllImport(PHYSFS_DLLNAME)] public static extern int PHYSFS_setSaneConfig(string organization,
-         string appName,
-         string archiveExt,
-         int includeCdRoms,
-         int archivesFirst);
-      [DllImport(PHYSFS_DLLNAME)] public static extern int PHYSFS_mkdir(string dirName);
-      [DllImport(PHYSFS_DLLNAME)] public static extern int PHYSFS_delete(string filename);
-      [DllImport(PHYSFS_DLLNAME)] public static extern string PHYSFS_getRealDir(string filename);
-      [DllImport(PHYSFS_DLLNAME)] public static extern unsafe byte** PHYSFS_enumerateFiles(string dir);
-      [DllImport(PHYSFS_DLLNAME)] public static extern int PHYSFS_exists(string fname);
-      [DllImport(PHYSFS_DLLNAME)] public static extern int PHYSFS_isDirectory(string fname);
-      [DllImport(PHYSFS_DLLNAME)] public static extern int PHYSFS_isSymbolicLink(string fname);
-      [DllImport(PHYSFS_DLLNAME)] public static extern unsafe void* PHYSFS_openWrite(string filename);
-      [DllImport(PHYSFS_DLLNAME)] public static extern unsafe void* PHYSFS_openAppend(string filename);
-      [DllImport(PHYSFS_DLLNAME)] public static extern unsafe void* PHYSFS_openRead(string filename);
-      [DllImport(PHYSFS_DLLNAME)] public static extern unsafe int PHYSFS_close(void* handle);
-      [DllImport(PHYSFS_DLLNAME)] public static extern unsafe long PHYSFS_getLastModTime(string filename);
-      [DllImport(PHYSFS_DLLNAME)] public static extern unsafe long PHYSFS_read(void* handle,
-         void *buffer,
-         uint objSize,
-         uint objCount);
-      [DllImport(PHYSFS_DLLNAME)] public static extern unsafe long PHYSFS_write(void* handle,
-         void *buffer,
-         uint objSize,
-         uint objCount);
-      [DllImport(PHYSFS_DLLNAME)] public static extern unsafe int PHYSFS_eof(void* handle);
-      [DllImport(PHYSFS_DLLNAME)] public static extern unsafe long PHYSFS_tell(void* handle);
-      [DllImport(PHYSFS_DLLNAME)] public static extern unsafe int PHYSFS_seek(void* handle, ulong pos);
-      [DllImport(PHYSFS_DLLNAME)] public static extern unsafe long PHYSFS_fileLength(void* handle);
-      [DllImport(PHYSFS_DLLNAME)] public static extern unsafe int PHYSFS_setBuffer(void* handle, ulong bufsize);
-      [DllImport(PHYSFS_DLLNAME)] public static extern unsafe int PHYSFS_flush(void* handle);
-   }
-}
--- a/extras/PhysFS.NET/README.txt	Fri Jan 01 12:53:26 2016 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,10 +0,0 @@
-PhysFS.NET is a library that encapsulates the PhysFS API into a .NET assembly.
-
-There are two class objects that are exposed in the assembly:
-   PhysFS.cs
-      This class exposes any non-filehandle specific functionality contained in
-      the PhysFS library.
-   PhysFSFileStream.cs
-      A System.IO.Stream derived class which provides file access via the
-      PhysFS API.  Usage of this object is identical to a standard stream
-      object.    
\ No newline at end of file
Binary file extras/PhysFS.NET/TestApp/App.ico has changed
--- a/extras/PhysFS.NET/TestApp/AssemblyInfo.cs	Fri Jan 01 12:53:26 2016 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,58 +0,0 @@
-using System.Reflection;
-using System.Runtime.CompilerServices;
-
-//
-// 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("")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("")]
-[assembly: AssemblyCopyright("")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]		
-
-//
-// Version information for an assembly consists of the following four values:
-//
-//      Major Version
-//      Minor Version 
-//      Build Number
-//      Revision
-//
-// You can specify all the values or you can default the Revision and Build Numbers 
-// by using the '*' as shown below:
-
-[assembly: AssemblyVersion("1.0.*")]
-
-//
-// In order to sign your assembly you must specify a key to use. Refer to the 
-// Microsoft .NET Framework documentation for more information on assembly signing.
-//
-// Use the attributes below to control which key is used for signing. 
-//
-// Notes: 
-//   (*) If no key is specified, the assembly is not signed.
-//   (*) KeyName refers to a key that has been installed in the Crypto Service
-//       Provider (CSP) on your machine. KeyFile refers to a file which contains
-//       a key.
-//   (*) If the KeyFile and the KeyName values are both specified, the 
-//       following processing occurs:
-//       (1) If the KeyName can be found in the CSP, that key is used.
-//       (2) If the KeyName does not exist and the KeyFile does exist, the key 
-//           in the KeyFile is installed into the CSP and used.
-//   (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility.
-//       When specifying the KeyFile, the location of the KeyFile should be
-//       relative to the project output directory which is
-//       %Project Directory%\obj\<configuration>. For example, if your KeyFile is
-//       located in the project directory, you would specify the AssemblyKeyFile 
-//       attribute as [assembly: AssemblyKeyFile("..\\..\\mykey.snk")]
-//   (*) Delay Signing is an advanced option - see the Microsoft .NET Framework
-//       documentation for more information on this.
-//
-[assembly: AssemblyDelaySign(false)]
-[assembly: AssemblyKeyFile("")]
-[assembly: AssemblyKeyName("")]
--- a/extras/PhysFS.NET/TestApp/TestApp.csproj	Fri Jan 01 12:53:26 2016 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,116 +0,0 @@
-<VisualStudioProject>
-    <CSHARP
-        ProjectType = "Local"
-        ProductVersion = "7.0.9466"
-        SchemaVersion = "1.0"
-        ProjectGuid = "{9C1ECC6B-16C7-42B3-BF7C-8BA8D81BA980}"
-    >
-        <Build>
-            <Settings
-                ApplicationIcon = "App.ico"
-                AssemblyKeyContainerName = ""
-                AssemblyName = "TestApp"
-                AssemblyOriginatorKeyFile = ""
-                DefaultClientScript = "JScript"
-                DefaultHTMLPageLayout = "Grid"
-                DefaultTargetSchema = "IE50"
-                DelaySign = "false"
-                OutputType = "WinExe"
-                RootNamespace = "TestApp"
-                StartupObject = ""
-            >
-                <Config
-                    Name = "Debug"
-                    AllowUnsafeBlocks = "false"
-                    BaseAddress = "285212672"
-                    CheckForOverflowUnderflow = "false"
-                    ConfigurationOverrideFile = ""
-                    DefineConstants = "DEBUG;TRACE"
-                    DocumentationFile = ""
-                    DebugSymbols = "true"
-                    FileAlignment = "4096"
-                    IncrementalBuild = "true"
-                    Optimize = "false"
-                    OutputPath = "bin\Debug\"
-                    RegisterForComInterop = "false"
-                    RemoveIntegerChecks = "false"
-                    TreatWarningsAsErrors = "false"
-                    WarningLevel = "4"
-                />
-                <Config
-                    Name = "Release"
-                    AllowUnsafeBlocks = "false"
-                    BaseAddress = "285212672"
-                    CheckForOverflowUnderflow = "false"
-                    ConfigurationOverrideFile = ""
-                    DefineConstants = "TRACE"
-                    DocumentationFile = ""
-                    DebugSymbols = "false"
-                    FileAlignment = "4096"
-                    IncrementalBuild = "false"
-                    Optimize = "true"
-                    OutputPath = "bin\Release\"
-                    RegisterForComInterop = "false"
-                    RemoveIntegerChecks = "false"
-                    TreatWarningsAsErrors = "false"
-                    WarningLevel = "4"
-                />
-            </Settings>
-            <References>
-                <Reference
-                    Name = "System"
-                    AssemblyName = "System"
-                    HintPath = "C:\WINDOWS\Microsoft.NET\Framework\v1.0.3705\System.dll"
-                />
-                <Reference
-                    Name = "System.Data"
-                    AssemblyName = "System.Data"
-                    HintPath = "C:\WINDOWS\Microsoft.NET\Framework\v1.0.3705\System.Data.dll"
-                />
-                <Reference
-                    Name = "System.Drawing"
-                    AssemblyName = "System.Drawing"
-                    HintPath = "C:\WINDOWS\Microsoft.NET\Framework\v1.0.3705\System.Drawing.dll"
-                />
-                <Reference
-                    Name = "System.Windows.Forms"
-                    AssemblyName = "System.Windows.Forms"
-                    HintPath = "C:\WINDOWS\Microsoft.NET\Framework\v1.0.3705\System.Windows.Forms.dll"
-                />
-                <Reference
-                    Name = "System.XML"
-                    AssemblyName = "System.Xml"
-                    HintPath = "C:\WINDOWS\Microsoft.NET\Framework\v1.0.3705\System.XML.dll"
-                />
-                <Reference
-                    Name = "PhysFS.NET"
-                    Project = "{C6205A43-3D4D-41E6-872C-96CD7BE55230}"
-                    Package = "{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}"
-                />
-            </References>
-        </Build>
-        <Files>
-            <Include>
-                <File
-                    RelPath = "App.ico"
-                    BuildAction = "Content"
-                />
-                <File
-                    RelPath = "AssemblyInfo.cs"
-                    BuildAction = "Compile"
-                />
-                <File
-                    RelPath = "TestAppForm.cs"
-                    SubType = "Form"
-                    BuildAction = "Compile"
-                />
-                <File
-                    RelPath = "TestAppForm.resx"
-                    DependentUpon = "TestAppForm.cs"
-                    BuildAction = "EmbeddedResource"
-                />
-            </Include>
-        </Files>
-    </CSHARP>
-</VisualStudioProject>
-
--- a/extras/PhysFS.NET/TestApp/TestApp.sln	Fri Jan 01 12:53:26 2016 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,27 +0,0 @@
-Microsoft Visual Studio Solution File, Format Version 7.00
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestApp", "TestApp.csproj", "{9C1ECC6B-16C7-42B3-BF7C-8BA8D81BA980}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PhysFS.NET", "..\PhysFS.NET.csproj", "{C6205A43-3D4D-41E6-872C-96CD7BE55230}"
-EndProject
-Global
-	GlobalSection(SolutionConfiguration) = preSolution
-		ConfigName.0 = Debug
-		ConfigName.1 = Release
-	EndGlobalSection
-	GlobalSection(ProjectDependencies) = postSolution
-	EndGlobalSection
-	GlobalSection(ProjectConfiguration) = postSolution
-		{9C1ECC6B-16C7-42B3-BF7C-8BA8D81BA980}.Debug.ActiveCfg = Debug|.NET
-		{9C1ECC6B-16C7-42B3-BF7C-8BA8D81BA980}.Debug.Build.0 = Debug|.NET
-		{9C1ECC6B-16C7-42B3-BF7C-8BA8D81BA980}.Release.ActiveCfg = Release|.NET
-		{9C1ECC6B-16C7-42B3-BF7C-8BA8D81BA980}.Release.Build.0 = Release|.NET
-		{C6205A43-3D4D-41E6-872C-96CD7BE55230}.Debug.ActiveCfg = Debug|.NET
-		{C6205A43-3D4D-41E6-872C-96CD7BE55230}.Debug.Build.0 = Debug|.NET
-		{C6205A43-3D4D-41E6-872C-96CD7BE55230}.Release.ActiveCfg = Release|.NET
-		{C6205A43-3D4D-41E6-872C-96CD7BE55230}.Release.Build.0 = Release|.NET
-	EndGlobalSection
-	GlobalSection(ExtensibilityGlobals) = postSolution
-	EndGlobalSection
-	GlobalSection(ExtensibilityAddIns) = postSolution
-	EndGlobalSection
-EndGlobal
--- a/extras/PhysFS.NET/TestApp/TestAppForm.cs	Fri Jan 01 12:53:26 2016 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,274 +0,0 @@
-using System;
-using System.Drawing;
-using System.Collections;
-using System.ComponentModel;
-using System.Windows.Forms;
-using System.Data;
-using System.IO;
-using PhysFS_NET;
-
-namespace TestApp
-{
-	/// <summary>
-	/// Summary description for Form1.
-	/// </summary>
-	public class TestAppForm : System.Windows.Forms.Form
-	{
-      private System.Windows.Forms.Label label2;
-      private System.Windows.Forms.Button RefreshCDsButton;
-      private System.Windows.Forms.ListBox CDDrivesList;
-      private System.Windows.Forms.ListBox SearchPathList;
-      private System.Windows.Forms.Label label1;
-      private System.Windows.Forms.TextBox EnumFilesPath;
-      private System.Windows.Forms.ListBox EnumList;
-      private System.Windows.Forms.Label label3;
-      private System.Windows.Forms.TextBox NewSearchPathText;
-      private System.Windows.Forms.Button AddSearchPathButton;
-      private System.Windows.Forms.Button RemovePathButton;
-      private System.Windows.Forms.Button RefreshEnumList;
-      private System.Windows.Forms.Button RefreshSearchPathButton;
-		/// <summary>
-		/// Required designer variable.
-		/// </summary>
-		private System.ComponentModel.Container components = null;
-
-		public TestAppForm()
-		{
-			//
-			// Required for Windows Form Designer support
-			//
-			InitializeComponent();
-
-			//
-			// TODO: Add any constructor code after InitializeComponent call
-			//
-		}
-
-		/// <summary>
-		/// Clean up any resources being used.
-		/// </summary>
-		protected override void Dispose( bool disposing )
-		{
-			if( disposing )
-			{
-				if (components != null) 
-				{
-					components.Dispose();
-				}
-			}
-			base.Dispose( disposing );
-		}
-
-		#region Windows Form Designer generated code
-		/// <summary>
-		/// Required method for Designer support - do not modify
-		/// the contents of this method with the code editor.
-		/// </summary>
-		private void InitializeComponent()
-		{
-         this.label2 = new System.Windows.Forms.Label();
-         this.RefreshCDsButton = new System.Windows.Forms.Button();
-         this.CDDrivesList = new System.Windows.Forms.ListBox();
-         this.SearchPathList = new System.Windows.Forms.ListBox();
-         this.label1 = new System.Windows.Forms.Label();
-         this.EnumFilesPath = new System.Windows.Forms.TextBox();
-         this.EnumList = new System.Windows.Forms.ListBox();
-         this.label3 = new System.Windows.Forms.Label();
-         this.RefreshEnumList = new System.Windows.Forms.Button();
-         this.NewSearchPathText = new System.Windows.Forms.TextBox();
-         this.AddSearchPathButton = new System.Windows.Forms.Button();
-         this.RemovePathButton = new System.Windows.Forms.Button();
-         this.RefreshSearchPathButton = new System.Windows.Forms.Button();
-         this.SuspendLayout();
-         // 
-         // label2
-         // 
-         this.label2.Location = new System.Drawing.Point(8, 8);
-         this.label2.Name = "label2";
-         this.label2.Size = new System.Drawing.Size(136, 16);
-         this.label2.TabIndex = 2;
-         this.label2.Text = "Available CD-ROM Drives";
-         // 
-         // RefreshCDsButton
-         // 
-         this.RefreshCDsButton.Location = new System.Drawing.Point(8, 152);
-         this.RefreshCDsButton.Name = "RefreshCDsButton";
-         this.RefreshCDsButton.Size = new System.Drawing.Size(72, 24);
-         this.RefreshCDsButton.TabIndex = 4;
-         this.RefreshCDsButton.Text = "Refresh";
-         this.RefreshCDsButton.Click += new System.EventHandler(this.RefreshCDsButton_Click);
-         // 
-         // CDDrivesList
-         // 
-         this.CDDrivesList.Location = new System.Drawing.Point(8, 24);
-         this.CDDrivesList.Name = "CDDrivesList";
-         this.CDDrivesList.Size = new System.Drawing.Size(136, 121);
-         this.CDDrivesList.TabIndex = 7;
-         // 
-         // SearchPathList
-         // 
-         this.SearchPathList.Location = new System.Drawing.Point(152, 24);
-         this.SearchPathList.Name = "SearchPathList";
-         this.SearchPathList.Size = new System.Drawing.Size(248, 95);
-         this.SearchPathList.TabIndex = 8;
-         // 
-         // label1
-         // 
-         this.label1.Location = new System.Drawing.Point(152, 8);
-         this.label1.Name = "label1";
-         this.label1.Size = new System.Drawing.Size(136, 16);
-         this.label1.TabIndex = 10;
-         this.label1.Text = "Search Path";
-         // 
-         // EnumFilesPath
-         // 
-         this.EnumFilesPath.Location = new System.Drawing.Point(408, 128);
-         this.EnumFilesPath.Name = "EnumFilesPath";
-         this.EnumFilesPath.Size = new System.Drawing.Size(208, 20);
-         this.EnumFilesPath.TabIndex = 11;
-         this.EnumFilesPath.Text = "";
-         // 
-         // EnumList
-         // 
-         this.EnumList.Location = new System.Drawing.Point(408, 24);
-         this.EnumList.Name = "EnumList";
-         this.EnumList.Size = new System.Drawing.Size(208, 95);
-         this.EnumList.TabIndex = 12;
-         // 
-         // label3
-         // 
-         this.label3.Location = new System.Drawing.Point(408, 8);
-         this.label3.Name = "label3";
-         this.label3.Size = new System.Drawing.Size(136, 16);
-         this.label3.TabIndex = 13;
-         this.label3.Text = "Enumerate Files";
-         // 
-         // RefreshEnumList
-         // 
-         this.RefreshEnumList.Location = new System.Drawing.Point(544, 152);
-         this.RefreshEnumList.Name = "RefreshEnumList";
-         this.RefreshEnumList.Size = new System.Drawing.Size(72, 24);
-         this.RefreshEnumList.TabIndex = 14;
-         this.RefreshEnumList.Text = "Refresh";
-         this.RefreshEnumList.Click += new System.EventHandler(this.RefreshEnumList_Click);
-         // 
-         // NewSearchPathText
-         // 
-         this.NewSearchPathText.Location = new System.Drawing.Point(152, 128);
-         this.NewSearchPathText.Name = "NewSearchPathText";
-         this.NewSearchPathText.Size = new System.Drawing.Size(248, 20);
-         this.NewSearchPathText.TabIndex = 15;
-         this.NewSearchPathText.Text = "";
-         // 
-         // AddSearchPathButton
-         // 
-         this.AddSearchPathButton.Location = new System.Drawing.Point(152, 152);
-         this.AddSearchPathButton.Name = "AddSearchPathButton";
-         this.AddSearchPathButton.Size = new System.Drawing.Size(72, 24);
-         this.AddSearchPathButton.TabIndex = 9;
-         this.AddSearchPathButton.Text = "Add Path";
-         this.AddSearchPathButton.Click += new System.EventHandler(this.AddSearchPathButton_Click);
-         // 
-         // RemovePathButton
-         // 
-         this.RemovePathButton.Location = new System.Drawing.Point(232, 152);
-         this.RemovePathButton.Name = "RemovePathButton";
-         this.RemovePathButton.Size = new System.Drawing.Size(88, 24);
-         this.RemovePathButton.TabIndex = 16;
-         this.RemovePathButton.Text = "Remove Path";
-         this.RemovePathButton.Click += new System.EventHandler(this.RemovePathButton_Click);
-         // 
-         // RefreshSearchPathButton
-         // 
-         this.RefreshSearchPathButton.Location = new System.Drawing.Point(328, 152);
-         this.RefreshSearchPathButton.Name = "RefreshSearchPathButton";
-         this.RefreshSearchPathButton.Size = new System.Drawing.Size(72, 24);
-         this.RefreshSearchPathButton.TabIndex = 17;
-         this.RefreshSearchPathButton.Text = "Refresh";
-         this.RefreshSearchPathButton.Click += new System.EventHandler(this.RefreshSearchPathButton_Click);
-         // 
-         // TestAppForm
-         // 
-         this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
-         this.ClientSize = new System.Drawing.Size(624, 309);
-         this.Controls.AddRange(new System.Windows.Forms.Control[] {
-                                                                      this.RefreshSearchPathButton,
-                                                                      this.RemovePathButton,
-                                                                      this.NewSearchPathText,
-                                                                      this.RefreshEnumList,
-                                                                      this.label3,
-                                                                      this.EnumList,
-                                                                      this.EnumFilesPath,
-                                                                      this.label1,
-                                                                      this.SearchPathList,
-                                                                      this.CDDrivesList,
-                                                                      this.RefreshCDsButton,
-                                                                      this.label2,
-                                                                      this.AddSearchPathButton});
-         this.Name = "TestAppForm";
-         this.Text = "PhysFS Test Application";
-         this.Load += new System.EventHandler(this.TestAppForm_Load);
-         this.ResumeLayout(false);
-
-      }
-		#endregion
-
-		/// <summary>
-		/// The main entry point for the application.
-		/// </summary>
-		[STAThread]
-		static void Main() 
-		{
-         Application.Run(new TestAppForm());
-		}
-
-      private void TestAppForm_Load(object sender, System.EventArgs e)
-      {
-      
-      }
-
-      private void RefreshCDsButton_Click(object sender, System.EventArgs e)
-      {
-         // Clear ths listbox if it contains any items
-         CDDrivesList.Items.Clear();
-         // Add the items to the list
-         CDDrivesList.Items.AddRange(PhysFS.GetCDROMDrives());
-      }
-
-      private void RefreshSearchPathButton_Click(object sender, System.EventArgs e)
-      {
-         // Clear ths listbox if it contains any items
-         SearchPathList.Items.Clear();
-         // Add the items to the list
-         SearchPathList.Items.AddRange(PhysFS.GetSearchPath());
-      }
-
-      private void AddSearchPathButton_Click(object sender, System.EventArgs e)
-      {
-         // Add search path
-         PhysFS.AddToSearchPath(NewSearchPathText.Text, false);
-         // Clear ths listbox if it contains any items
-         SearchPathList.Items.Clear();
-         // Add the items to the list
-         SearchPathList.Items.AddRange(PhysFS.GetSearchPath());
-      }
-
-      private void RemovePathButton_Click(object sender, System.EventArgs e)
-      {
-         if(SearchPathList.SelectedItem != null)
-         {
-            PhysFS.RemoveFromSearchPath(SearchPathList.SelectedItem.ToString());
-            // Clear ths listbox if it contains any items
-            SearchPathList.Items.Clear();
-            // Add the items to the list
-            SearchPathList.Items.AddRange(PhysFS.GetSearchPath());
-         }
-      }
-
-      private void RefreshEnumList_Click(object sender, System.EventArgs e)
-      {
-         EnumList.Items.Clear();
-         EnumList.Items.AddRange(PhysFS.EnumerateFiles(EnumFilesPath.Text));
-      }
-	}
-}
--- a/extras/PhysFS.NET/TestApp/TestAppForm.resx	Fri Jan 01 12:53:26 2016 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,102 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!-- 
-            Microsoft ResX Schema 
-        
-            Version 1.3
-                
-            The primary goals of this format is to allow a simple XML format 
-            that is mostly human readable. The generation and parsing of the 
-            various data types are done through the TypeConverter classes 
-            associated with the data types.
-        
-            Example:
-        
-                ... ado.net/XML headers & schema ...
-                <resheader name="resmimetype">text/microsoft-resx</resheader>
-                <resheader name="version">1.3</resheader>
-                <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-                <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-                <data name="Name1">this is my long string</data>
-                <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-                <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-                    [base64 mime encoded serialized .NET Framework object]
-                </data>
-                <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-                    [base64 mime encoded string representing a byte array form of the .NET Framework object]
-                </data>
-        
-            There are any number of "resheader" rows that contain simple 
-            name/value pairs.
-            
-            Each data row contains a name, and value. The row also contains a 
-            type or mimetype. Type corresponds to a .NET class that support 
-            text/value conversion through the TypeConverter architecture. 
-            Classes that don't support this are serialized and stored with the 
-            mimetype set.
-                     
-            The mimetype is used for serialized objects, and tells the 
-            ResXResourceReader how to depersist the object. This is currently not 
-            extensible. For a given mimetype the value must be set accordingly:
-        
-            Note - application/x-microsoft.net.object.binary.base64 is the format 
-                   that the ResXResourceWriter will generate, however the reader can 
-                   read any of the formats listed below.
-        
-            mimetype: application/x-microsoft.net.object.binary.base64
-            value   : The object must be serialized with 
-                    : System.Serialization.Formatters.Binary.BinaryFormatter
-                    : and then encoded with base64 encoding.
-        
-            mimetype: application/x-microsoft.net.object.soap.base64
-            value   : The object must be serialized with 
-                    : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-                    : and then encoded with base64 encoding.
-            mimetype: application/x-microsoft.net.object.bytearray.base64
-            value   : The object must be serialized into a byte array 
-                    : using a System.ComponentModel.TypeConverter
-                    : and then encoded with base64 encoding.
-        -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>1.3</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <data name="$this.Name">
-    <value>TestAppForm</value>
-  </data>
-</root>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/extras/README-CSharp.txt	Fri Jan 29 15:16:15 2016 -0500
@@ -0,0 +1,11 @@
+There used to be C# bindings in this directory, but they have been
+unmaintained for many years.
+
+Instead, there is a more modern PhysicsFS wrapper for .NET available.
+
+You can find it at https://github.com/frabert/SharpPhysFS
+
+Thanks to Francesco Bertolaccini for his efforts on that project!
+
+--ryan.
+