Example #1
0
        /// <summary>
        /// File to dump as text data.
        /// </summary>
        /// <param name="filepath">Output filename.</param>
        /// <param name="bytesInRow">Number of bytes in a row.</param>
        /// <param name="offsetView"><see cref="OffsetView"/> to use.</param>
        /// <returns><see cref="ErrorCode"/></returns>
        public static ErrorCode Dump(string filepath,
            int bytesInRow = 16, OffsetView offsetView = OffsetView.Hex)
        {
            FileInfo f = new FileInfo(filepath);

            if (!f.Exists)
                return ErrorCode.FileNotFound;

            using (FileStream inStream = f.OpenRead())
            using (StreamWriter outStream = new StreamWriter($"{filepath}.{EXTENSION}"))
            {
                if (!outStream.BaseStream.CanWrite)
                    return ErrorCode.DumberCannotWrite;

                outStream.AutoFlush = true;

                outStream.WriteLine(f.Name);
                outStream.WriteLine();
                outStream.WriteLine($"Size: {Utils.FormatSize(f.Length)}");
                outStream.WriteLine($"Attributes: {Utils.GetEntryInfo(f)}");
                outStream.WriteLine($"File date: {f.CreationTime}");
                outStream.WriteLine($"Dump date: {DateTime.Now}");
                outStream.WriteLine();

                outStream.Write($"Offset {offsetView.GetChar()}  ");
                for (int i = 0; i < bytesInRow; i++)
                {
                    outStream.Write($"{i:X2} ");
                }
                outStream.WriteLine();

                return DumpFile(inStream, outStream, bytesInRow, offsetView);
            }
        }
Example #2
0
        /// <summary>
        /// File to dump as text data.
        /// </summary>
        /// <param name="filepath">Output filename.</param>
        /// <param name="bytesInRow">Number of bytes in a row.</param>
        /// <param name="offsetView"><see cref="OffsetView"/> to use.</param>
        /// <returns><see cref="ErrorCode"/></returns>
        public static ErrorCode Dump(string filepath,
                                     int bytesInRow = 16, OffsetView offsetView = OffsetView.Hex)
        {
            FileInfo f = new FileInfo(filepath);

            if (!f.Exists)
            {
                return(ErrorCode.FileNotFound);
            }

            using (FileStream inStream = f.OpenRead())
                using (StreamWriter outStream = new StreamWriter($"{filepath}.{EXTENSION}"))
                {
                    if (!outStream.BaseStream.CanWrite)
                    {
                        return(ErrorCode.DumberCannotWrite);
                    }

                    outStream.AutoFlush = true;

                    outStream.WriteLine(f.Name);
                    outStream.WriteLine();
                    outStream.WriteLine($"Size: {Utils.FormatSize(f.Length)}");
                    outStream.WriteLine($"Attributes: {Utils.GetEntryInfo(f)}");
                    outStream.WriteLine($"File date: {f.CreationTime}");
                    outStream.WriteLine($"Dump date: {DateTime.Now}");
                    outStream.WriteLine();

                    outStream.Write($"Offset {offsetView.GetChar()}  ");
                    for (int i = 0; i < bytesInRow; i++)
                    {
                        outStream.Write($"{i:X2} ");
                    }
                    outStream.WriteLine();

                    return(DumpFile(inStream, outStream, bytesInRow, offsetView));
                }
        }
Example #3
0
        /// <remarks>
        /// Only to be used with <see cref="Dump()"/>!
        /// </remarks>
        static ErrorCode DumpFile(FileStream inStream, StreamWriter outStream,
            int bytesInRow = 16, OffsetView offsetView = OffsetView.Hex)
        {
            if (!inStream.CanRead)
                return ErrorCode.DumberCannotRead;

            if (!outStream.BaseStream.CanWrite)
                return ErrorCode.DumberCannotWrite;

            long offset = 0;

            byte[] buffer = new byte[bytesInRow];
            long len = bytesInRow;

            bool working = true;

            StringBuilder line, ascii;
            while (working)
            {
                switch (offsetView)
                {
                    default:
                        line = new StringBuilder($"{offset:X8}  ");
                        break;

                    case OffsetView.Dec:
                        line = new StringBuilder($"{offset:D8}  ");
                        break;

                    case OffsetView.Oct:
                        line = new StringBuilder($"{Main0xddApp.ToOct(offset, 8)}  ");
                        break;
                }

                offset += bytesInRow;

                ascii = new StringBuilder(bytesInRow);

                int read = inStream.Read(buffer, 0, bytesInRow);
                if (read == buffer.Length)
                {
                    for (int i = 0; i < bytesInRow; ++i)
                    {
                        line.Append($"{buffer[i]:X2} ");
                        ascii.Append(buffer[i].ToAscii());
                    }
                }
                else
                {
                    for (int i = 0; i < read; ++i)
                    {
                        line.Append($"{buffer[i]:X2} ");
                        ascii.Append(buffer[i].ToAscii());
                    }

                    outStream.Write(line.ToString());
                    outStream.Write(new string(' ',
                        ((bytesInRow * 3) - (read * 3)) + 1
                    ));
                    outStream.WriteLine(ascii.ToString());

                    return ErrorCode.Success;
                }

                outStream.Write(line.ToString());
                outStream.Write(' ');
                outStream.WriteLine(ascii.ToString());
            }

            return ErrorCode.Success;
        }
Example #4
0
        /// <remarks>
        /// Only to be used with <see cref="Dump()"/>!
        /// </remarks>
        static ErrorCode DumpFile(FileStream inStream, StreamWriter outStream,
                                  int bytesInRow = 16, OffsetView offsetView = OffsetView.Hex)
        {
            if (!inStream.CanRead)
            {
                return(ErrorCode.DumberCannotRead);
            }

            if (!outStream.BaseStream.CanWrite)
            {
                return(ErrorCode.DumberCannotWrite);
            }

            long offset = 0;

            byte[] buffer = new byte[bytesInRow];
            long   len    = bytesInRow;

            bool working = true;

            StringBuilder line, ascii;

            while (working)
            {
                switch (offsetView)
                {
                default:
                    line = new StringBuilder($"{offset:X8}  ");
                    break;

                case OffsetView.Dec:
                    line = new StringBuilder($"{offset:D8}  ");
                    break;

                case OffsetView.Oct:
                    line = new StringBuilder($"{MainApp.ToOct(offset, 8)}  ");
                    break;
                }

                offset += bytesInRow;

                ascii = new StringBuilder(bytesInRow);

                int read = inStream.Read(buffer, 0, bytesInRow);
                if (read == buffer.Length)
                {
                    for (int i = 0; i < bytesInRow; ++i)
                    {
                        line.Append($"{buffer[i]:X2} ");
                        ascii.Append(buffer[i].ToAscii());
                    }
                }
                else
                {
                    for (int i = 0; i < read; ++i)
                    {
                        line.Append($"{buffer[i]:X2} ");
                        ascii.Append(buffer[i].ToAscii());
                    }

                    outStream.Write(line.ToString());
                    outStream.Write(new string(' ',
                                               ((bytesInRow * 3) - (read * 3)) + 1
                                               ));
                    outStream.WriteLine(ascii.ToString());

                    return(ErrorCode.Success);
                }

                outStream.Write(line.ToString());
                outStream.Write(' ');
                outStream.WriteLine(ascii.ToString());
            }

            return(ErrorCode.Success);
        }
Example #5
0
        //public static byte BytePerGroup = 1;
        #endregion
    
        public static ErrorCode Open(string path,
            OffsetView view = OffsetView.Hex, int bytesPerRow = 0)
        {
            LastError = FilePanel.Open(path);

            if (LastError != ErrorCode.Success)
                return LastError;
            
            if (BytesPerRow <= 0)
                BytesPerRow = Utils.GetBytesInRow();

            OffsetView = view;
            LastWindowHeight = Console.WindowHeight;
            LastWindowWidth = Console.WindowWidth;

            AutoAdjust = bytesPerRow <= 0;
            BytesPerRow = AutoAdjust ? Utils.GetBytesInRow() : bytesPerRow;

            try
            { // Mono can have some issues with these.
                Console.Title = $"{Program.Name} •️ {FilePanel.File.Name}";
                Console.CursorVisible = false;
            } catch { }

            Console.Clear();

            MenuBarPanel.Initialize();
            OffsetPanel.Initialize();
            FilePanel.Initialize();
            InfoPanel.Update();

            while (inApp)
                ReadUserKey();

            return LastError;
        }