public static bool ReadVariables(string FileName, Circuit owner)
		{
			Dictionary<string,double> CList;
			string[] words,keys;
			string line = "";
			char[] delimiterChars = { ' ', ',', '\t' };
			double val = 0;
			
			
			if(owner == null)
				CList = Program.Globals;
			else
				CList = ((composite)owner).Locals;
		
			Console.WriteLine("\n   Reading variables from {0}:", FileName);
			StreamReader reader = new StreamReader(FileName);
            if (!StringReader.FindString("<variables>", reader)){
                Console.WriteLine("WARNING! Variable list is missing.");
				reader.Dispose();
                return true;
            }
			
			while ((line = reader.ReadLine()) != null){
				line = line.Trim();
                words = StringReader.TrimWords(line.Split(delimiterChars));//read the type and the name
				
				#region "check for empty/terminator lines"
                if (line.StartsWith("<end>")) //finish at the end of group
                    break;
                if (line.StartsWith("#") || line.Length == 0 || words.Length == 0 ) //ignore empty lines/comments/timer
                    continue;
				#endregion
			
				#region "parse the line"
				for(int i=0;i<words.Length;i++){
					keys = StringReader.TrimWords(words[i].Split('=')); //divide the string,
					if(keys.Length != 2){
						Console.WriteLine("ERROR! Expected varible=value pair.");
						return false;
					}
					//now we have a pair of strings... the second must be a number!
					if(!double.TryParse(keys[1], out val)){
						Console.WriteLine("ERROR! Value of variable {0} is not a number.",keys[0]);
						return false;
					}
					//now check if the variable was already declared
					if(CList.ContainsKey(keys[0])){
						Console.WriteLine("ERROR! Variable {0} was already declared.",keys[0]);
						return false;
					}
					
					CList.Add(keys[0],val);	
				}
				#endregion
			}
				
			return true;
		}