private bool loadVisu() { // to get rid of the Enter-key in the console buffer while (Console.ReadLine().Length > 0) { ; } Console.Clear(); FileInfo fi = new FileInfo(@"..\..\..\PLC_PROJ\PROJ_ONE\VISU.COV"); if (!fi.Exists || fi.Length < 16) { Console.WriteLine("File not found or to small!\n" + fi.FullName); Console.ReadKey(); return(true); } FileStream fs = new FileStream(fi.FullName, FileMode.Open); BinaryReader br = new BinaryReader(fs); VisuFileHeader header = new VisuFileHeader(); header.FileTag = new char[2]; header.FileTag[0] = br.ReadChar(); header.FileTag[1] = br.ReadChar(); header.OffsetVisuData = br.ReadUInt16(); header.VisuVersion = new Version(br.ReadByte(), br.ReadByte()); header.Count = br.ReadInt16(); header.CreationDate = new DateTime(br.ReadInt16(), br.ReadByte(), br.ReadByte(), br.ReadByte(), br.ReadByte(), br.ReadByte()); br.ReadByte(); // read fill byte if (header.FileTag[0] != 'P' || header.FileTag[1] != 'V') { Console.WriteLine("File is no CKTPLC visu or is corupted!\n" + fi.Name); Console.ReadKey(); return(true); } List <char> stringList = new List <char>(); while (br.PeekChar() != 0) { stringList.Add((char)br.ReadByte()); } br.ReadChar(); header.VisuCompany = new String(stringList.ToArray()); stringList = new List <char>(); while (br.PeekChar() != 0) { stringList.Add((char)br.ReadByte()); } br.ReadChar(); header.VisuAuthor = new String(stringList.ToArray()); stringList = new List <char>(); while (br.PeekChar() != 0) { stringList.Add((char)br.ReadByte()); } br.ReadChar(); header.VisuDescription = new String(stringList.ToArray()); int size = header.Count * VISU_BLOCK_SIZE; if (size < fi.Length - header.OffsetVisuData || size > fi.Length - header.OffsetVisuData) { Console.WriteLine("File size is to small or large for the count of visu blocks!\n" + fi.Name + " size: " + fi.Length + " | header: " + header.OffsetVisuData + "\nsize all visu blocks: " + (fi.Length - header.OffsetVisuData) + " | should: " + size); Console.ReadKey(); return(true); } m_VisuBlocks = new List <VisuBlock>(header.Count); br.BaseStream.Seek(header.OffsetVisuData, SeekOrigin.Begin); int i = 0; while (br.PeekChar() != -1) { VisuBlock vb = new VisuBlock(); vb.Index = br.ReadInt16(); vb.Row = br.ReadByte(); vb.Column = br.ReadByte(); vb.MemLocation = (uint)(br.ReadByte() << 24); vb.MemLocation |= (uint)(br.ReadByte() << 16); vb.MemLocation |= (uint)(br.ReadByte() << 8); vb.MemLocation |= (uint)(br.ReadByte()); vb.Flags = br.ReadByte(); // read the fill bytes br.ReadBytes(7); char[] name = new char[16]; byte[] nameAsBytes = br.ReadBytes(16); Array.Copy(nameAsBytes, name, 16); vb.Name = new String(name); vb.Name = vb.Name.Substring(0, vb.Name.IndexOf('\0')); m_VisuBlocks.Add(vb); i++; } if (m_VisuBlocks.Count != header.Count) { Console.WriteLine("File contains wrong number of visu blocks!\n" + fi.Name + " should: " + header.Count + " | has: " + m_VisuBlocks.Count); Console.ReadKey(); return(true); } m_bVisuLoaded = true; return(false); }
private bool loadVisu() { // to get rid of the Enter-key in the console buffer while (Console.ReadLine().Length > 0) ; Console.Clear(); FileInfo fi = new FileInfo(@"..\..\..\PLC_PROJ\PROJ_ONE\VISU.COV"); if (!fi.Exists || fi.Length < 16) { Console.WriteLine("File not found or to small!\n" + fi.FullName); Console.ReadKey(); return true; } FileStream fs = new FileStream(fi.FullName, FileMode.Open); BinaryReader br = new BinaryReader(fs); VisuFileHeader header = new VisuFileHeader(); header.FileTag = new char[2]; header.FileTag[0] = br.ReadChar(); header.FileTag[1] = br.ReadChar(); header.OffsetVisuData = br.ReadUInt16(); header.VisuVersion = new Version(br.ReadByte(), br.ReadByte()); header.Count = br.ReadInt16(); header.CreationDate = new DateTime(br.ReadInt16(), br.ReadByte(), br.ReadByte(), br.ReadByte(), br.ReadByte(), br.ReadByte()); br.ReadByte(); // read fill byte if (header.FileTag[0] != 'P' || header.FileTag[1] != 'V') { Console.WriteLine("File is no CKTPLC visu or is corupted!\n" + fi.Name); Console.ReadKey(); return true; } List<char> stringList = new List<char>(); while (br.PeekChar() != 0) { stringList.Add((char)br.ReadByte()); } br.ReadChar(); header.VisuCompany = new String(stringList.ToArray()); stringList = new List<char>(); while (br.PeekChar() != 0) { stringList.Add((char)br.ReadByte()); } br.ReadChar(); header.VisuAuthor = new String(stringList.ToArray()); stringList = new List<char>(); while (br.PeekChar() != 0) { stringList.Add((char)br.ReadByte()); } br.ReadChar(); header.VisuDescription = new String(stringList.ToArray()); int size = header.Count * VISU_BLOCK_SIZE; if (size < fi.Length - header.OffsetVisuData || size > fi.Length - header.OffsetVisuData) { Console.WriteLine("File size is to small or large for the count of visu blocks!\n" + fi.Name + " size: " + fi.Length + " | header: " + header.OffsetVisuData + "\nsize all visu blocks: " + (fi.Length - header.OffsetVisuData) + " | should: " + size); Console.ReadKey(); return true; } m_VisuBlocks = new List<VisuBlock>(header.Count); br.BaseStream.Seek(header.OffsetVisuData, SeekOrigin.Begin); int i = 0; while (br.PeekChar() != -1) { VisuBlock vb = new VisuBlock(); vb.Index = br.ReadInt16(); vb.Row = br.ReadByte(); vb.Column = br.ReadByte(); vb.MemLocation = (uint)(br.ReadByte() << 24); vb.MemLocation |= (uint)(br.ReadByte() << 16); vb.MemLocation |= (uint)(br.ReadByte() << 8); vb.MemLocation |= (uint)(br.ReadByte()); vb.Flags = br.ReadByte(); // read the fill bytes br.ReadBytes(7); char[] name = new char[16]; byte[] nameAsBytes = br.ReadBytes(16); Array.Copy(nameAsBytes, name, 16); vb.Name = new String(name); vb.Name = vb.Name.Substring(0, vb.Name.IndexOf('\0')); m_VisuBlocks.Add(vb); i++; } if (m_VisuBlocks.Count != header.Count) { Console.WriteLine("File contains wrong number of visu blocks!\n" + fi.Name + " should: " + header.Count + " | has: " + m_VisuBlocks.Count); Console.ReadKey(); return true; } m_bVisuLoaded = true; return false; }