public void TestGetLiteralStringPointer() { var String = "Hello World"; Assert.AreEqual( String, CLibUtils.GetStringFromPointer(CLibUtils.GetLiteralStringPointer(String)) ); }
static public int fwrite(sbyte *ptr, int size, int count, FILE *File) { var Stream = File->GetStream(); var DataToWrite = CLibUtils.GetBytesFromPointer(ptr, size * count); Stream.Write(DataToWrite, 0, DataToWrite.Length); return(DataToWrite.Length); }
static public int fread(sbyte *ptr, int size, int count, FILE *stream) { var Stream = stream->GetStream(); var DataToRead = new byte[size * count]; int ReadedCount = Stream.Read(DataToRead, 0, DataToRead.Length); CLibUtils.PutBytesToPointer(ptr, ReadedCount, DataToRead); return(ReadedCount); }
static public int sprintf(__arglist) { var Arguments = CLibUtils.GetObjectsFromArgsIterator(new ArgIterator(__arglist)); var Buffer = (sbyte *)((UIntPtr)Arguments[0]).ToPointer(); var Format = CLibUtils.GetStringFromPointer((UIntPtr)Arguments[1]); var Str = CLibUtils.sprintf_hl(Format, Arguments.Skip(2).ToArray()); var Bytes = CLibUtils.DefaultEncoding.GetBytes(Str); Marshal.Copy(Bytes, 0, new IntPtr(Buffer), Bytes.Length); Buffer[Bytes.Length] = 0; return(Bytes.Length); }
static public int fprintf(__arglist) { var Arguments = CLibUtils.GetObjectsFromArgsIterator(new ArgIterator(__arglist)); var File = (FILE *)((UIntPtr)Arguments[0]).ToPointer(); var Format = CLibUtils.GetStringFromPointer((UIntPtr)Arguments[1]); var Str = CLibUtils.sprintf_hl(Format, Arguments.Skip(2).ToArray()); var DataToWrite = CLibUtils.DefaultEncoding.GetBytes(Str); fixed(byte *DataToWritePtr = DataToWrite) { return(fwrite((sbyte *)DataToWritePtr, 1, DataToWrite.Length, File)); } }
static public int printf(__arglist) { var Arguments = CLibUtils.GetObjectsFromArgsIterator(new ArgIterator(__arglist)); var Format = CLibUtils.GetStringFromPointer((UIntPtr)Arguments[0]); var Str = CLibUtils.sprintf_hl(Format, Arguments.Skip(1).ToArray()); #if true var StrBytes = CLibUtils.DefaultEncoding.GetBytes(Str); stdout->GetStream().Write(StrBytes, 0, StrBytes.Length); #else Console.Write(Str); #endif return(Str.Length); }
public void TestSimpleIf() { var TestMethod = CompileProgram(@" char *test(int a) { if (a > 5) return ""greater than 5""; return ""not greater than 5""; } " ).GetMethod("test"); { var Result = (Pointer)TestMethod.Invoke(null, new object[] { 6 }); var Pointer2 = new IntPtr(Pointer.Unbox(Result)); Assert.AreEqual("greater than 5", CLibUtils.GetStringFromPointer(Pointer2)); } { var Result = (Pointer)TestMethod.Invoke(null, new object[] { 5 }); var Pointer2 = new IntPtr(Pointer.Unbox(Result)); //Console.WriteLine(Marshal.PtrToStringAnsi(Pointer2)); Assert.AreEqual("not greater than 5", CLibUtils.GetStringFromPointer(Pointer2)); } }
public void TestRunMain() { var Program = CompileProgram(@" int main(int argc, char **argv) { int n; printf(""%d\n"", argc - 1); for (n = 1; n < argc; n++) printf(""%s\n"", argv[n]); return 7; } " ); var Output = CaptureOutput(() => { #if false var Result = (int)Program.GetMethod("__startup").Invoke(null, new object[] { new string[] { "hello world!", "this is a test!" } }); #else var Result = CLibUtils.RunTypeMain(Program, new string[] { "hello world!", "this is a test!" }); #endif Assert.AreEqual(7, Result); }); Assert.AreEqual("2\nhello world!\nthis is a test!\n", Output); }
static public void _wassert(char *Message, char *File, uint Line) { throw (new Exception(String.Format("Assert failed! {0} at {1}:{2}", CLibUtils.GetStringFromPointerWide(Message), CLibUtils.GetStringFromPointerWide(File), Line))); }
public void TestTrinaryOperator3() { var Program = CompileProgram(@" int test2(char *arg) { int cnt; cnt = (strlen(arg) >= 3) ? atoi(arg + 2) : 3; return cnt; } " ); Assert.AreEqual(7, Program.GetMethod("test2").Invoke(null, new object[] { new IntPtr(CLibUtils.GetLiteralStringPointer("--7")) })); }
static public int TestCallRunTypeMain(string[] Args) { return(CLibUtils.RunTypeMain(typeof(CLibTest), Args)); }