/// <summary>
        /// Read the .toml file into _config
        /// </summary>
        /// <param name="path"></param>
        /// <param name="ret"></param>
        public void ReadFile(string path, out Ret ret)
        {
            _config = new Dictionary <string, Dictionary <string, string> >();
            // Is toml file ?
            string[] paths = FF.StringSplit(path, '/');
            string[] name  = FF.StringSplit(FF.LastOfArray(paths), '.');
            if (FF.LastOfArray(name) != "toml")
            {
                ret = new Ret(LogLevel.Error, RET_NOT_TOML, "File:" + path + " isn't .toml");
                return;
            }
            // Does file exist ?
            if (!File.Exists(path))
            {
                ret = new Ret(LogLevel.Error, RET_NO_FILE, "File:" + path + " doesn't exist");
                return;
            }
            // Push toml to config
            string curSec = "";

            string[] lines = File.ReadAllLines(path);
            foreach (string line in lines)
            {
                string lineTrim = line.Trim();
                if (FF.RegexMatch(lineTrim, @"^#.*"))
                {
                    continue;
                }
                string[] vals = FF.RegexGetValue(lineTrim, @"^\[.+\]$", "[", "]");
                if (vals != null)
                {
                    if (vals.Length == 1)
                    {
                        string section = vals[0];
                        if (!_config.ContainsKey(section))
                        {
                            _config.Add(section, new Dictionary <string, string>());
                        }
                        curSec = section;
                        continue;
                    }
                }
                if (curSec == "")
                {
                    continue;
                }
                string[] kv = lineTrim.Split('=');
                if (kv.Length != 2)
                {
                    continue;
                }
                _config[curSec].Add(kv[0].Trim(), kv[1].Trim());
            }
            ret = Ret.ok;
        }