[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/dsuarezv/Netduino-gcode/master/gcodeviewer/ConfigurationFile.cs [Back]  [Original]

using System;
using System.IO;
using System.Text;
using System.Collections;
using System.Collections.Specialized;


namespace gcodeparser
{
    public class ConfigurationFile
    {
        private string mFileName;
        private Hashtable mSections = new Hashtable();

        public ConfigurationFile(string name)
        {
            mFileName = name;
        }

        public void Load()
        {
            StreamReader reader = new StreamReader(mFileName);

            string line;

            ConfigurationSection section = AddSection("");

            while ((line = reader.ReadLine()) != null)
            {
                ProcessLine(ref section, line);
            }

            reader.Close();
        }

        private ConfigurationSection AddSection(string name)
        {
            ConfigurationSection result = new ConfigurationSection(name);
            mSections[name] = result;

            return result;
        }

        private void ProcessLine(ref ConfigurationSection section, string line)
        {
            if (line != null && line != "")
            {
                switch (line[0])
                {
                    case '[': ProcessSection(ref section, line); break;
                    case ';':
                    case '#':
                        break; // comment, will be overwritten, but ignore here
                    default: section.ParseEntry(line); break;
                }

            }
        }

        private void ProcessSection(ref ConfigurationSection section, string line)
        {
            line = line.TrimStart('[', ' ');
            line = line.TrimEnd(']', ' ');

            section = AddSection(line);
        }

        public void Save()
        {
            try
            {
                StreamWriter writer = new StreamWriter(mFileName, false);

                foreach (ConfigurationSection section in mSections.Values)
                {
                    section.Write(writer);
                }

                writer.Close();

            }
            catch (Exception ex)
            {
                System.Diagnostics.Trace.WriteLine("Failed to store: " + ex.Message);
            }
        }

        public string GetEntryValue(string sectionName, string key)
        {
            ConfigurationSection section = mSections[sectionName] as ConfigurationSection;

            if (section != null)
            {
                return section.Entries[key.ToLower()] as string;
            }

            return "";
        }

        public void SetEntryValue(string sectionName, string key, string val)
        {
            ConfigurationSection section = mSections[sectionName] as ConfigurationSection;

            if (section == null)
            {
                section = new ConfigurationSection(sectionName);

                mSections[sectionName] = section;
            }

            section.Entries[key.ToLower()] = val;
        }

        public ConfigurationSection GetSection(string sectionName)
        {
            ConfigurationSection result = mSections[sectionName] as ConfigurationSection;

            if (result != null) return result;

            return AddSection(sectionName);
        }
    }

    public class ConfigurationSection
    {
        //private StringDictionary mEntries = new StringDictionary();
        private SortedList mEntries = new SortedList();
        private string mSectionName;

        public SortedList Entries
        {
            get
            {
                return mEntries;
            }
        }

        public string SectionName
        {
            get
            {
                return mSectionName;
            }
        }

        public ConfigurationSection(string sectionName)
        {
            mSectionName = sectionName;
        }

        public int GetInt(string name, int defaultValue)
        {
            string res = mEntries[name] as string;

            if (res != null)
            {
                return int.Parse(res);
            }

            return defaultValue;
        }

        public float GetFloat(string name, float defaultValue)
        {
            string res = mEntries[name] as string;

            if (res != null)
            {
                return float.Parse(res);
            }

            return defaultValue;
        }

        public void SetInt(string name, int val)
        {
            mEntries[name] = val.ToString();
        }

        public void SetFloat(string name, float val)
        {
            mEntries[name] = val.ToString();
        }

        public long GetLong(string name, long defaultValue)
        {
            string res = mEntries[name] as string;

            if (res != null)
            {
                return long.Parse(res);
            }

            return defaultValue;
        }

        public void SetLong(string name, long val)
        {
            mEntries[name] = val.ToString();
        }

        public string GetString(string name)
        {
            return mEntries[name] as string;
        }

        public void SetString(string name, string val)
        {
            mEntries[name] = val;
        }

        public bool GetBool(string name, bool defaultValue)
        {
            string res = mEntries[name] as string;

            if (res != null)
            {
                res = res.ToLower();

                return (res == "true" || res == "1");
            }

            return defaultValue;
        }

        public void SetBool(string name, bool val)
        {
            mEntries[name] = val ? "true" : "false";
        }

        public int[] GetInts(string name, int[] defaultValue)
        {
            string res = mEntries[name] as string;

            if (res == null || res == string.Empty) return defaultValue;

            int[] result = DeserializeInts(res);

            return result == null ? defaultValue : result;
        }
        public void SetInts(string name, int[] values)
        {
            if (values == null) mEntries[name] = values;

            mEntries[name] = SerializeWithCommas(values);
        }

        internal void ParseEntry(string entryLine)
        {
            if (entryLine != null && entryLine != "")
            {
                int split = entryLine.IndexOf('=');

                if (split > 0)
                {
                    string key = entryLine.Substring(0, split);

                    string val = "";

                    if (split < entryLine.Length - 1)
                    {
                        val = entryLine.Substring(split + 1);
                    }

                    mEntries[key] = val;
                }
            }
        }

        internal void Write(TextWriter writer)
        {
            if (mSectionName != "")
            {
                writer.WriteLine("[{0}]", mSectionName);
            }

            foreach (DictionaryEntry entry in mEntries)
            {
                writer.WriteLine("{0}={1}", ((string)entry.Key).ToLower(), entry.Value);
            }

            writer.WriteLine();
        }

        public static string SerializeWithCommas(params object[] args)
        {
            bool isFirst = true;

            StringBuilder sb = new StringBuilder();

            foreach (object obj in args)
            {
                if (isFirst)
                {
                    sb.Append(obj.ToString());
                    isFirst = false;
                }
                else
                {
                    sb.Append("," + obj.ToString());
                }
            }

            return sb.ToString();
        }

        public static string SerializeGuidsWithCommas(params Guid[] args)
        {
            bool isFirst = true;

            StringBuilder sb = new StringBuilder();

            foreach (Guid guid in args)
            {
                long high = 0;
                long low = 0;
                GuidToLongs(guid, out high, out low);

                if (isFirst)
                {
                    sb.Append(high.ToString() + "&" + low.ToString());
                    isFirst = false;
                }
                else
                {
                    sb.Append("," + high.ToString() + "&" + low.ToString());
                }
            }

            return sb.ToString();
        }

        public static int[] DeserializeInts(string target)
        {
            string[] strings = target.Split(',');

            if (strings == null || strings.Length == 0) return null;

            int[] result = new int[strings.Length];

            for (int i = 0; i < strings.Length; ++i)
            {
                try
                {
                    result[i] = int.Parse(strings[i]);
                }
                catch
                {
                    // FIXME: localize
                    throw new Exception(string.Format("Failed to parse int value '{0}' in string '{1}'.", result[i], target));
                }
            }

            return result;
        }

        public static Guid[] DeserializeGuids(string target)
        {
            string[] strings = target.Split(',');

            if (strings == null || strings.Length == 0) return null;

            Guid[] result = new Guid[strings.Length];

            for (int i = 0; i < strings.Length; ++i)
            {
                try
                {
                    string[] longs = strings[i].Split('&');
                    result[i] = GuidFromLongs(
                        long.Parse(longs[0]),
                        long.Parse(longs[1]));
                }
                catch
                {
                    // FIXME: localize
                    throw new Exception(string.Format("Failed to parse int value '{0}' in string '{1}'.", result[i], target));
                }
            }

            return result;
        }

        private static void GuidToLongs(Guid guid, out long high, out long low)
        {
            byte[] bytes = guid.ToByteArray();
            high = BitConverter.ToInt64(bytes, 8);
            low = BitConverter.ToInt64(bytes, 0);
        }

        private static Guid GuidFromLongs(long high, long low)
        {
            byte[] guiddata = new byte[16];
            byte[] byteshigh = BitConverter.GetBytes(high);
            byte[] byteslow = BitConverter.GetBytes(low);

            Array.Copy(byteshigh, 0, guiddata, 8, byteshigh.Length);
            Array.Copy(byteslow, 0, guiddata, 0, byteshigh.Length);

            return new Guid(guiddata);
        }

    }

}

Web Proxy Viewer  |  New URL  |  Original Page