changed TiBasicRuntime to TIBasicRuntime in namespace decl.
authorMichael Welch <michaelgwelch@gmail.com>
Fri, 14 Sep 2007 02:26:25 +0000 (02:26 +0000)
committerMichael Welch <michaelgwelch@gmail.com>
Fri, 14 Sep 2007 02:26:25 +0000 (02:26 +0000)
25 files changed:
TIBasicRuntime/AssemblyInfo.cs
TIBasicRuntime/BuiltIns.cs
TIBasicRuntime/Enums.cs [new file with mode: 0644]
TIBasicRuntime/File.cs [new file with mode: 0644]
TIBasicRuntime/InputParser.cs
TIBasicRuntime/Number.cs
TIBasicRuntime/Radix100.cs
TIBasicRuntime/TIBasicRuntime.csproj
TIBasicRuntime/TestRadix100.cs
mbasic/ArrayElement.cs
mbasic/Program.cs
mbasic/SyntaxTree/Assign.cs
mbasic/SyntaxTree/BuiltInsMethodCall.cs
mbasic/SyntaxTree/Function.cs
mbasic/SyntaxTree/Gosub.cs
mbasic/SyntaxTree/Input.cs
mbasic/SyntaxTree/OnGoto.cs
mbasic/SyntaxTree/Print.cs
mbasic/SyntaxTree/Randomize.cs
mbasic/SyntaxTree/Read.cs
mbasic/SyntaxTree/Restore.cs
mbasic/SyntaxTree/Tab.cs
mbasic/Token.cs
mbasic/Variable.cs
mbasic/mbasic.csproj

index b41f8b1..3eadf5c 100644 (file)
@@ -1,3 +1,4 @@
 using System;
 using System.Reflection;
-[assembly: AssemblyKeyFile("my.key")]
+//[assembly: AssemblyKeyFile("my.key")]
+[assembly: CLSCompliant(true)]
\ No newline at end of file
index 789e1e2..0931040 100644 (file)
@@ -24,7 +24,7 @@ using System.Collections.Generic;
 using System.Text;
 using System.Collections;
 
-namespace TiBasicRuntime
+namespace TIBasicRuntime
 {
     public static class BuiltIns
     {
diff --git a/TIBasicRuntime/Enums.cs b/TIBasicRuntime/Enums.cs
new file mode 100644 (file)
index 0000000..ad02f55
--- /dev/null
@@ -0,0 +1,37 @@
+// FileOgranization.cs created with MonoDevelop
+// User: mgwelch at 7:32 PM 8/28/2007
+//
+// To change standard headers go to Edit->Preferences->Coding->Standard Headers
+//
+
+using System;
+using System.IO;
+namespace TIBasicRuntime
+{
+       public enum FileOrganization
+       {
+               Sequential,
+               Relative
+       }
+       
+       public enum FileType
+       {
+               Display,
+               Internal
+       }
+       
+       public enum FileOpenMode
+       {
+               Input,
+               Output,
+               Update,
+               Append
+       }
+       
+       public enum FileRecordType
+       {
+               Fixed,
+               Variable
+       }
+    
+}
diff --git a/TIBasicRuntime/File.cs b/TIBasicRuntime/File.cs
new file mode 100644 (file)
index 0000000..bcc56bc
--- /dev/null
@@ -0,0 +1,373 @@
+
+// User: mgwelch at 7:40 PM 8/28/2007
+//
+// To change standard headers go to Edit->Preferences->Coding->Standard Headers
+//
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Text;
+using NativeFile = System.IO.File;
+
+namespace TIBasicRuntime
+{
+       
+       public class File : IDisposable
+       {
+
+        readonly StreamReader reader;
+        readonly StreamWriter writer;
+        readonly bool isCasette;
+        
+
+        const int sizeOfNumber = 8;
+        static readonly Encoding encoding = Encoding.ASCII;
+        
+               private File()
+               {                       
+               }
+        
+        private File(IDeviceMapping deviceMap, String fileName, FileOrganization org, FileType fileType,
+                     FileOpenMode mode, FileRecordType recordType)
+        {
+            //if (fileName != CS1 && fileName != CS2) throw new InvalidOperationException("Only fileNames of CS1 and CS2 are currently supported");
+            
+            String nativeFileName = deviceMap.GetNativeFileName(fileName);
+            //if (fileName == CS2 && mode == FileOpenMode.Input) throw new InvalidOperationException("Can't use CS2 for Input");
+            if (org != FileOrganization.Sequential) throw new InvalidOperationException("CS1 and CS2 only support sequential");
+            if (recordType != FileRecordType.Fixed) throw new InvalidOperationException("CS1 and CS2 only support Fixed");
+            if (fileType != FileType.Internal) throw new NotImplementedException("Internal is preferred for casettes, Display is not yet implemented.");
+            if (mode == FileOpenMode.Input)
+            {
+                FileStream stream = NativeFile.Open(nativeFileName, FileMode.Open, FileAccess.Read, FileShare.Read);
+                reader = new StreamReader(stream, encoding);
+            }
+            else
+            {
+                FileStream stream = NativeFile.Open(nativeFileName, FileMode.Create, FileAccess.Write, FileShare.Read);
+                 
+                writer = new StreamWriter(stream, encoding);
+                writer.AutoFlush = true;
+                
+            }
+
+            isCasette = true;
+            
+        }
+        
+        public static File Open(IDeviceMapping deviceMap, String fileName, FileOrganization org, FileType fileType, 
+                                FileOpenMode mode, FileRecordType recordType)
+        {
+            return new File(deviceMap, fileName, org, fileType, mode, recordType);
+        }
+        
+        public void Print(params object[] items)
+        {
+            PrintInternal(items);
+        }
+        
+        private void PrintInternal(params object[] items)
+        {
+            foreach(object item in items)
+            {
+                if (item is String)
+                {
+                    string s = (string) item;
+                    if (s.Length == 1)
+                    {
+                        char ch = s[0];
+                        switch (ch)
+                        {
+                        case '\0': // used for semicolons
+                        case '\t': // used for commas
+                        case '\n': // used for colons
+                            continue; // go to next item
+                        }
+                    }
+                    
+                    // if item is not one of the three chars above then print it
+                    PrintInternalString(s);
+                                
+                }
+                else
+                {
+                    PrintInternalNumber((double)item);
+                }
+            }
+        }
+        
+        private void PrintInternalString(string item)
+        {
+            if (item.Length > 255) throw new ArgumentException("print items can't be 255 chars long");
+            writer.Write(item.Length);
+            writer.Write(item);
+            
+        }
+        
+        private void PrintInternalNumber(double item)
+        {
+            writer.Write(sizeOfNumber);
+            writer.Write(item);
+        }
+        
+        public void Input(object[] inputSpecifiers, out object[] items)
+        {
+            InputInternal(inputSpecifiers, out items);
+        }
+        
+        public void InputInternal(object[] inputSpecifiers, out object[] items)
+        {
+
+            items = null;
+        }
+
+        public int Eof()
+        {
+            if (isCasette) throw new InvalidOperationException("Eof does not apply to casettes");
+            throw new NotImplementedException();
+        }
+        
+        public void Dispose()
+        {
+            if (reader != null) reader.Dispose();
+            if (writer != null) writer.Dispose();
+
+        }
+        
+
+        
+        
+       }
+        
+    public interface TIStream : IDisposable
+    {
+         void Print(object[] items);
+         void Input(params InputSlot[] inputSpecs);
+         int Eof();
+         void Restore();
+    }
+    
+    public interface IDeviceMapping
+    {
+        String GetNativeFileName(String tiFileName);
+            
+    }
+        
+       public class StubbedDeviceMapping : IDeviceMapping
+       {
+       
+        const string CS1 = "CS1";
+           const string CS2 = "CS2";
+               public String GetNativeFileName(String tiFileName)
+               {
+            if (tiFileName == CS1) return @"/Documents And Settings/Michael Welch/CS1";
+            if (tiFileName == CS2) return "/home/mgwelch/CS2";
+            throw new ArgumentOutOfRangeException();
+               }
+       }
+    
+    public class CasetteStream : TIStream, IDisposable
+    {
+        
+        // assuming only internal for now.
+        const byte sizeOfNumber = 8;     // size of a double in bytes.
+        const int defaultRecordSize = 64;
+        static readonly int[] allowableRecordSizes = new int[] { 64, 128, 192};
+        static readonly Encoding tiEncoding = Encoding.ASCII;
+        
+        readonly int recordSize;
+        readonly FileType fileType;
+        readonly FileOpenMode fileMode;
+            
+        // buffer
+        BinaryWriter writer;
+        BinaryReader reader;
+        byte[] buffer;
+        
+        // file stream
+        FileStream stream;
+        
+        public CasetteStream(IDeviceMapping deviceMap, String tiFileName, FileType fileType, 
+                             FileOpenMode fileMode, int recSize)
+        {
+            String nativeFileName = deviceMap.GetNativeFileName(tiFileName);
+            
+            if (recordSize > allowableRecordSizes[allowableRecordSizes.Length-1]) throw new ArgumentOutOfRangeException("recordSize");
+            if (fileType == FileType.Display) throw new NotImplementedException("Display mode not yet supported");
+            
+            foreach(int i in allowableRecordSizes)
+            {
+                if (i > recSize)
+                {
+                    this.recordSize = i;
+                    break;
+                }
+            }
+            this.fileType = fileType;
+            this.fileMode = fileMode;
+            
+            if (this.fileMode == FileOpenMode.Output) 
+            {
+                CreateBuffer();
+                stream = NativeFile.Open(nativeFileName, FileMode.Create, FileAccess.Write, FileShare.Read);
+            }
+            else
+            {
+                buffer = new byte[this.recordSize];
+                stream = NativeFile.Open(nativeFileName, FileMode.Open, FileAccess.Read, FileShare.Read);
+            }
+        }
+        
+        private void CreateBuffer()
+        {
+           buffer = new byte[recordSize];
+           MemoryStream stream = new MemoryStream(buffer);
+           writer = new BinaryWriter(stream);
+        }
+        
+        private void ReadBuffer()
+        {
+           
+           stream.Read(buffer, 0, recordSize);
+           MemoryStream memStream = new MemoryStream(buffer);
+           reader = new BinaryReader(memStream);            
+        }
+        
+        private void FlushBuffer()
+        {
+            Console.WriteLine("Flushing");
+
+            stream.Write(buffer, 0, recordSize);
+        }
+        
+        private void Write(String str)
+        {
+            if (fileType == FileType.Internal)
+            {
+                byte[] bytes = tiEncoding.GetBytes(str);
+                writer.Write((byte)bytes.Length);
+                writer.Write(bytes, 0, bytes.Length);
+            }
+            else 
+            {
+                // must be FileType.Display
+                
+            }
+        }
+        
+        private void Write(double d)
+        {
+            if (fileType == FileType.Internal)
+            {
+                writer.Write(sizeOfNumber);
+                writer.Write(d);
+            }
+            else
+            {
+                // must be FileType.Display
+            }
+        }
+        
+        public void Print(object[] items)
+        {
+
+            if (fileMode == FileOpenMode.Input) throw new InvalidOperationException("Can't write");
+            bool pendingPrint = false;
+            
+            foreach(object item in items)
+            {
+                pendingPrint = false;
+                if (IsPrintSeperator(item))
+                {
+                    pendingPrint = true;
+                }
+                else if (item is String)
+                {
+                    Write((string) item);
+                }
+                else
+                {
+                    Console.WriteLine(item.GetType());
+                    Write((double) item);
+                }
+            }
+            
+            if (!pendingPrint) 
+            {
+                FlushBuffer();
+                CreateBuffer();
+            }
+        }
+        
+        private String ReadString()
+        {
+            byte length = reader.ReadByte();
+            byte[] chars = new byte[length];
+            reader.Read(chars, 0, length);
+            return tiEncoding.GetString(chars);
+        }
+        
+        private double ReadDouble()
+        {
+            reader.ReadByte(); // will always be 8
+            return reader.ReadDouble();
+        }
+       
+        private static bool IsPrintSeperator(object item)
+        {
+            if (item == null) return false;
+            if (!(item is string)) return false;
+            string s = (string) item;
+            if (s.Length != 1) return false;
+            char ch = s[0];
+            return (ch == '\0' || ch == '\t' || ch == '\n');
+        }
+        
+        public int Eof() { throw new NotImplementedException(); }
+        
+        public void Dispose()
+        {
+            // If there is a print statement pending, then flush.
+            if (writer != null)
+            {
+                if (writer.BaseStream.Position != 0) FlushBuffer();
+            }
+            stream.Close();
+            
+        }
+
+        public void Input(params InputSlot[] inputSlots)
+        {
+            ReadBuffer();
+            foreach(InputSlot slot in inputSlots)
+            {
+                if (slot.Type.Equals(typeof(string)))
+                {
+                    slot.Value = ReadString();
+                }
+                else
+                {
+                    slot.Value = ReadDouble();
+                }
+            }
+        }
+        public void Restore() {}
+        
+    }
+        
+      
+    public class InputSlot
+    {
+        public readonly Type Type;
+        public Object Value;
+        private InputSlot(Type type) 
+        {
+            this.Type = type;
+        }
+
+        public static InputSlot String { get { return new InputSlot(typeof(string)); } }
+        public static InputSlot Number { get { return new InputSlot(typeof(double)); } }
+    }
+        
+}
index c4593aa..7825711 100644 (file)
@@ -3,7 +3,7 @@ using System.Collections.Generic;
 using System.Text;
 using System.IO;
 
-namespace TiBasicRuntime
+namespace TIBasicRuntime
 {
     /// <summary>
     /// Reads a line of input and breaks it into comma seperated values.
index 2ad06d7..30f3be2 100644 (file)
@@ -99,6 +99,11 @@ namespace TIBasicRuntime
         #endregion Constructors
 
         #region Conversions Operators
+        public static Number FromInt64(long val)
+        {
+            return (Number)val;
+        }
+
         [CLSCompliant(false)]
         public static explicit operator Number(ulong nval)
         {
index a46cb1c..8b4bde7 100644 (file)
@@ -23,7 +23,7 @@ using System;
 using System.Collections.Generic;
 using System.Text;
 
-namespace TiBasicRuntime
+namespace TIBasicRuntime
 {
     public struct Radix100
     {
@@ -45,7 +45,32 @@ namespace TiBasicRuntime
         private readonly ulong val;
 
         private Radix100(UInt64 val) { this.val = val; }
+        [CLSCompliant(false)]
+        public Radix100(uint d)
+        {
+            // Let's retrieve the mantissa, exponent and sign in terms of Radix 100.
+            int sign = Math.Sign(d);
+            sbyte exponent = (sbyte)Math.Floor(Math.Log(Math.Abs(d), 100));
+            double mantissa = Math.Abs(d / Math.Pow(100, exponent));
+
+
+            ulong result = 0;
+            // set exponent properly
+            byte biasedExponent = BiasedExponentValue(exponent);
+            SetByte(ref result, 7, biasedExponent);
+
+            byte digit;
 
+            // loop through digits
+            for (int i = 6; i >= 0 && mantissa > 0; i--)
+            {
+                digit = (byte)Math.Truncate(mantissa);
+                SetByte(ref result, i, digit);
+                mantissa = (mantissa * 100) - (digit * 100);
+            }
+
+            this.val = result;
+        }
         public static double ToDouble(Radix100 r)
         {
             int expValue = GetExponent(r);
@@ -214,7 +239,7 @@ namespace TiBasicRuntime
 
 
         #region Helper functions, masks, constants,
-
+        [CLSCompliant(false)]
         public static byte BiasedExponentValue(sbyte normalizedExponent)
         {
             return (byte)(normalizedExponent + 0x40);
index b404fc2..d714a38 100644 (file)
@@ -1,14 +1,20 @@
-\feff<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+\feff<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">\r
   <PropertyGroup>\r
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>\r
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>\r
-    <ProductVersion>8.0.50727</ProductVersion>\r
+    <ProductVersion>9.0.20706</ProductVersion>\r
     <SchemaVersion>2.0</SchemaVersion>\r
     <ProjectGuid>{3EF3FB61-5A24-4268-90EC-8FF9101CEF7D}</ProjectGuid>\r
     <OutputType>Library</OutputType>\r
     <AppDesignerFolder>Properties</AppDesignerFolder>\r
-    <RootNamespace>TiBasicRuntime</RootNamespace>\r
-    <AssemblyName>TiBasicRuntime</AssemblyName>\r
+    <RootNamespace>TIBasicRuntime</RootNamespace>\r
+    <AssemblyName>TIBasicRuntime</AssemblyName>\r
+    <FileUpgradeFlags>\r
+    </FileUpgradeFlags>\r
+    <UpgradeBackupLocation>\r
+    </UpgradeBackupLocation>\r
+    <OldToolsVersion>2.0</OldToolsVersion>\r
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>\r
   </PropertyGroup>\r
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
     <DebugSymbols>true</DebugSymbols>\r
@@ -28,7 +34,6 @@
     <WarningLevel>4</WarningLevel>\r
   </PropertyGroup>\r
   <ItemGroup>\r
-    <Reference Include="nunit.framework, Version=2.3.6293.0, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL" />\r
     <Reference Include="System" />\r
     <Reference Include="System.Data" />\r
     <Reference Include="System.Drawing" />\r
     <Reference Include="System.Xml" />\r
   </ItemGroup>\r
   <ItemGroup>\r
+    <Compile Include="AssemblyInfo.cs" />\r
     <Compile Include="BuiltIns.cs" />\r
+    <Compile Include="Enums.cs" />\r
+    <Compile Include="File.cs" />\r
     <Compile Include="InputParser.cs" />\r
     <Compile Include="Properties\AssemblyInfo.cs" />\r
     <Compile Include="Radix100.cs" />\r
-    <Compile Include="TestRadix100.cs" />\r
+    <Compile Include="Number.cs" />\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <Folder Include="Test\" />\r
   </ItemGroup>\r
   <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />\r
 </Project>
\ No newline at end of file
index dd232e6..c926a38 100644 (file)
@@ -3,7 +3,7 @@ using System.Collections.Generic;
 using System.Text;
 using NUnit.Framework;
 
-namespace TiBasicRuntime
+namespace TIBasicRuntime
 {
     [TestFixture]
     public class TestRadix100
index 347e5ff..af83feb 100644 (file)
@@ -4,7 +4,7 @@ using System.Text;
 using System.Reflection.Emit;
 using mbasic.SyntaxTree;
 using System.Reflection;
-using TiBasicRuntime;
+using TIBasicRuntime;
 namespace mbasic
 {
     class ArrayElement : Location
index a4400c1..3c980ce 100644 (file)
@@ -32,8 +32,8 @@ using System.Diagnostics;
 namespace mbasic
 {
     using LabelList = System.Collections.Generic.SortedList<string, Label>;
-    using TiBasicRuntime;
-
+    using TIBasicRuntime;
+    using File = System.IO.File;
     class Program
     {
         static readonly MethodInfo popMethod =
index e621628..b45c501 100644 (file)
@@ -23,7 +23,7 @@ using System.Collections.Generic;
 using System.Text;
 using System.Reflection.Emit;
 using System.Reflection;
-using TiBasicRuntime;
+using TIBasicRuntime;
 
 namespace mbasic.SyntaxTree
 {
index da6af0a..4e901af 100644 (file)
@@ -3,7 +3,7 @@ using System.Collections.Generic;
 using System.Text;
 using System.Reflection;
 using System.Reflection.Emit;
-using TiBasicRuntime;
+using TIBasicRuntime;
 namespace mbasic.SyntaxTree
 {
     class BuiltInsMethodCall : Expression
index a83f37b..cc8aeb3 100644 (file)
@@ -24,7 +24,7 @@ using System.Collections.Generic;
 using System.Text;
 using System.Reflection.Emit;
 using System.Reflection;
-using TiBasicRuntime;
+using TIBasicRuntime;
 namespace mbasic.SyntaxTree
 {
     class Function : Expression
index c5f569b..d73bf1d 100644 (file)
@@ -24,7 +24,7 @@ using System.Collections.Generic;
 using System.Text;
 using System.Reflection.Emit;
 using System.Reflection;
-using TiBasicRuntime;
+using TIBasicRuntime;
 namespace mbasic.SyntaxTree
 {
     class Gosub : Statement
index d52b405..320d05a 100644 (file)
@@ -24,7 +24,7 @@ using System.Collections.Generic;
 using System.Text;
 using System.Reflection;
 using System.Reflection.Emit;
-using TiBasicRuntime;
+using TIBasicRuntime;
 
 namespace mbasic.SyntaxTree
 {
index 34c2c2f..ccd2857 100644 (file)
@@ -23,7 +23,7 @@ namespace mbasic.SyntaxTree
     using System;
     using System.Collections.Generic;
     using System.Reflection.Emit;
-    using TiBasicRuntime;
+    using TIBasicRuntime;
 
     class OnGoto : Statement
     {
index 41b1d03..ddb17a8 100644 (file)
@@ -24,7 +24,7 @@ using System.Collections.Generic;
 using System.Text;
 using System.Reflection.Emit;
 using System.Reflection;
-using TiBasicRuntime;
+using TIBasicRuntime;
 namespace mbasic.SyntaxTree
 {
     internal class Print : Statement
index a5b022d..b78513e 100644 (file)
@@ -24,7 +24,7 @@ using System.Collections.Generic;
 using System.Text;
 using System.Reflection;
 using System.Reflection.Emit;
-using TiBasicRuntime;
+using TIBasicRuntime;
 
 namespace mbasic.SyntaxTree
 {
index 442e541..8a34e70 100644 (file)
@@ -3,7 +3,7 @@ using System.Collections.Generic;
 using System.Text;
 using System.Reflection.Emit;
 using System.Reflection;
-using TiBasicRuntime;
+using TIBasicRuntime;
 
 namespace mbasic.SyntaxTree
 {
index b6c08ee..48c5212 100644 (file)
@@ -24,7 +24,7 @@ using System.Collections.Generic;
 using System.Text;
 using System.Reflection.Emit;
 using System.Reflection;
-using TiBasicRuntime;
+using TIBasicRuntime;
 
 namespace mbasic.SyntaxTree
 {
index 1ae7dbf..d421bfd 100644 (file)
@@ -23,7 +23,7 @@ using System.Collections.Generic;
 using System.Text;
 using System.Reflection.Emit;
 using System.Reflection;
-using TiBasicRuntime;
+using TIBasicRuntime;
 
 namespace mbasic.SyntaxTree
 {
index c7f8d71..b035a05 100644 (file)
@@ -39,6 +39,7 @@ internal enum Token
     Base,
     Call,
     Data,
+    Def,
     Dim,
     Else,
     End, // used for keywords END and STOP
index 815af70..fc544d1 100644 (file)
@@ -24,7 +24,7 @@ using System.Collections.Generic;
 using System.Text;
 using mbasic.SyntaxTree;
 using System.Reflection.Emit;
-using TiBasicRuntime;
+using TIBasicRuntime;
 
 namespace mbasic
 {
index 53a3d7d..ec384b0 100644 (file)
@@ -1,4 +1,4 @@
-\feff<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+\feff<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">\r
   <PropertyGroup>\r
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>\r
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>\r
@@ -9,6 +9,12 @@
     <AppDesignerFolder>Properties</AppDesignerFolder>\r
     <RootNamespace>mbasic</RootNamespace>\r
     <AssemblyName>mbasic</AssemblyName>\r
+    <FileUpgradeFlags>\r
+    </FileUpgradeFlags>\r
+    <UpgradeBackupLocation>\r
+    </UpgradeBackupLocation>\r
+    <OldToolsVersion>2.0</OldToolsVersion>\r
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>\r
   </PropertyGroup>\r
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
     <DebugSymbols>true</DebugSymbols>\r