--- /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);
+ }
+}