You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

60 lines
1.4 KiB

using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, Pack = 0)]
public class QuakeParms
{
private const int MaxArgs = 50; // Corresponds with MAX_NUM_ARGVS in engine
[MarshalAs(UnmanagedType.LPStr)]
public string baseDir;
[MarshalAs(UnmanagedType.LPStr)]
public string cacheDir;
public int argc;
[MarshalAs(UnmanagedType.LPArray, SizeConst = MaxArgs)]
public IntPtr[] argv;
public IntPtr memBase;
public int memSize;
public void SetArguments(string[] arguments)
{
argc = arguments.Length;
argv = new IntPtr[MaxArgs];
for (int i = 0; i < arguments.Length && i < MaxArgs; ++i)
{
argv[i] = Marshal.StringToHGlobalAnsi(arguments[i]);
}
}
public void AllocateMemory(int memorySize)
{
memSize = memorySize;
memBase = Marshal.AllocHGlobal(memorySize);
}
public void Destroy()
{
if (memBase != IntPtr.Zero)
{
Marshal.FreeHGlobal(memBase);
memBase = IntPtr.Zero;
}
if (argv != null)
{
for (int i = 0; i < argv.Length; ++i)
{
if (argv[i] != IntPtr.Zero)
{
Marshal.FreeHGlobal(argv[i]);
argv[i] = IntPtr.Zero;
}
}
}
}
}