120 lines
2.9 KiB
ObjectPascal
120 lines
2.9 KiB
ObjectPascal
(* ***** BEGIN LICENSE BLOCK *****
|
|
* Version: MPL 1.1
|
|
*
|
|
* The contents of this file are subject to the Mozilla Public License Version
|
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
|
* the License. You may obtain a copy of the License at
|
|
* http://www.mozilla.org/MPL/
|
|
*
|
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
|
* for the specific language governing rights and limitations under the
|
|
* License.
|
|
*
|
|
* The Original Code is TurboPower Abbrevia
|
|
*
|
|
* The Initial Developer of the Original Code is
|
|
* TurboPower Software
|
|
*
|
|
* Portions created by the Initial Developer are Copyright (C) 1997-2002
|
|
* the Initial Developer. All Rights Reserved.
|
|
*
|
|
* Contributor(s):
|
|
*
|
|
* ***** END LICENSE BLOCK ***** *)
|
|
|
|
{*********************************************************}
|
|
{* Abbrevia: AbHexVw.pas *}
|
|
{*********************************************************}
|
|
{* Abbrevia: Hex View utility *}
|
|
{*********************************************************}
|
|
|
|
{$I AbDefine.inc}
|
|
|
|
{$IFNDEF UsingCLX}
|
|
unit AbHexVw;
|
|
{$ENDIF}
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes,
|
|
{$IFDEF UsingCLX}
|
|
QStdCtrls, QGraphics,
|
|
{$ELSE}
|
|
StdCtrls, Graphics,
|
|
{$ENDIF}
|
|
SysUtils;
|
|
type
|
|
THexView = class(TMemo)
|
|
protected
|
|
FBlockSize : Integer;
|
|
public
|
|
procedure SetStream(Strm : TStream);
|
|
constructor Create(AOwner : TComponent); override;
|
|
destructor Destroy; override;
|
|
property Stream : TStream write SetStream;
|
|
property BlockSize : Integer read FBlockSize write FBlockSize;
|
|
end;
|
|
|
|
implementation
|
|
|
|
{$IFDEF HasUITypes}
|
|
uses
|
|
System.UITypes;
|
|
{$ENDIF}
|
|
|
|
constructor THexView.Create(AOwner : TComponent);
|
|
begin
|
|
Inherited Create(AOwner);
|
|
Font.Style := Font.Style + [fsBold];
|
|
ReadOnly := True;
|
|
ScrollBars := ssVertical;
|
|
WordWrap := False;
|
|
WantTabs := True;
|
|
FBlockSize := 512;
|
|
end;
|
|
|
|
destructor THexView.Destroy;
|
|
begin
|
|
inherited Destroy;
|
|
end;
|
|
|
|
procedure THexView.SetStream(Strm : TStream);
|
|
var
|
|
Buff : Array[0..15] of Byte;
|
|
i, j : Integer;
|
|
Str : String;
|
|
StrList : TStringList;
|
|
begin
|
|
Strm.Seek(0, soBeginning);
|
|
StrList := TStringList.Create;
|
|
Clear;
|
|
while Strm.Position < Strm.Size do begin
|
|
if ((Strm.Position mod FBlockSize) = 0) then
|
|
StrList.Add('===========================================================');
|
|
Str := '';
|
|
|
|
for j := 0 to 15 do
|
|
Buff[j] := Byte(chr(0));
|
|
Strm.Read(Buff, 16);
|
|
Str := Str + Format('%4.4X', [strm.Position - $10]) + ':' + #9;
|
|
|
|
for i := 0 to 15 do begin
|
|
Str := Str + Format('%2.2X', [Buff[i]]) + ' ';
|
|
if i = 7 then Str := Str + #9;
|
|
end;
|
|
Str := Str + #9;
|
|
for i := 0 to 15 do begin
|
|
if (Buff[i] < $30) then
|
|
Buff[i] := byte('.');
|
|
Str := Str + Char(Buff[i]);
|
|
end;
|
|
StrList.Add(Str);
|
|
end;
|
|
SetLines(StrList);
|
|
StrList.Free;
|
|
end;
|
|
|
|
end.
|