-First version of PhysFS.NET.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/extras/PhysFS.NET/AssemblyInfo.cs Tue Jan 07 23:35:10 2003 +0000
@@ -0,0 +1,58 @@
+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("")]
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/extras/PhysFS.NET/PhysFS.NET.csproj Tue Jan 07 23:35:10 2003 +0000
@@ -0,0 +1,113 @@
+<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>
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/extras/PhysFS.NET/PhysFS.NET.sln Tue Jan 07 23:35:10 2003 +0000
@@ -0,0 +1,21 @@
+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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/extras/PhysFS.NET/PhysFS.cs Tue Jan 07 23:35:10 2003 +0000
@@ -0,0 +1,189 @@
+/* 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;
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/extras/PhysFS.NET/PhysFSFileStream.cs Tue Jan 07 23:35:10 2003 +0000
@@ -0,0 +1,194 @@
+/* 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/extras/PhysFS.NET/PhysFS_DLL.cs Tue Jan 07 23:35:10 2003 +0000
@@ -0,0 +1,113 @@
+/* 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);
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/extras/PhysFS.NET/README.txt Tue Jan 07 23:35:10 2003 +0000
@@ -0,0 +1,10 @@
+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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/extras/PhysFS.NET/TestApp/AssemblyInfo.cs Tue Jan 07 23:35:10 2003 +0000
@@ -0,0 +1,58 @@
+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("")]
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/extras/PhysFS.NET/TestApp/TestApp.csproj Tue Jan 07 23:35:10 2003 +0000
@@ -0,0 +1,116 @@
+<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>
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/extras/PhysFS.NET/TestApp/TestApp.sln Tue Jan 07 23:35:10 2003 +0000
@@ -0,0 +1,27 @@
+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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/extras/PhysFS.NET/TestApp/TestAppForm.cs Tue Jan 07 23:35:10 2003 +0000
@@ -0,0 +1,274 @@
+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));
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/extras/PhysFS.NET/TestApp/TestAppForm.resx Tue Jan 07 23:35:10 2003 +0000
@@ -0,0 +1,102 @@
+<?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