Exemple #1
0
        public void TestGetLiteralStringPointer()
        {
            var String = "Hello World";

            Assert.AreEqual(
                String,
                CLibUtils.GetStringFromPointer(CLibUtils.GetLiteralStringPointer(String))
                );
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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);
        }
Exemple #4
0
        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);
        }
Exemple #5
0
        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));
            }
        }
Exemple #6
0
        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);
        }
Exemple #9
0
 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")) }));
        }
Exemple #11
0
 static public int TestCallRunTypeMain(string[] Args)
 {
     return(CLibUtils.RunTypeMain(typeof(CLibTest), Args));
 }