home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / ipo-101.zip / Samples.zip / HEX.PAS < prev    next >
Pascal/Delphi Source File  |  1999-03-09  |  2KB  |  89 lines

  1. program hex(inf, out);
  2. const
  3.    per_line = 16;
  4. var
  5.    inf : file of char;
  6.    out : text;
  7.    line : string;
  8.    address : integer;
  9.  
  10.    function printable(c : char) : boolean;
  11.    begin
  12.       if (c >= ' ') and (c <= '~') then
  13.          printable := true
  14.       else
  15.          printable := false
  16.    end;
  17.  
  18.    procedure readline;
  19.    var
  20.       i : integer;
  21.       c : char;
  22.    begin
  23.       line := "";
  24.       for i := 1 to per_line do
  25.           begin
  26.               if eof(inf) then
  27.                   exit;
  28.               read(inf, c);
  29.               line := line + c;
  30.           end
  31.    end;
  32.  
  33.    procedure writeline;
  34.    var
  35.       i : integer;
  36.       s : string;
  37.       c : char;
  38.  
  39.       function prefix(s : string; len : integer) : string;
  40.       var
  41.          i : integer;
  42.       begin
  43.          for i := 1 to len-length(s) do
  44.              s := '0' + s;
  45.          exit(s)
  46.       end;
  47.  
  48.    begin
  49.       s := prefix(hex(address), 8);
  50.       write(out, s:4, ':');
  51.       for i := 1 to per_line do
  52.          if i <= length(line) then
  53.             begin
  54.                s := hex(ord(line[i]));
  55.                s := prefix(s, 2);
  56.                write(out, s:3);
  57.                if i = 8 then
  58.                   write(out, ' ');
  59.             end
  60.          else
  61.             write(out, ' ':3);
  62.  
  63.       write(out, " : ");
  64.  
  65.       for i := 1 to length(line) do
  66.          begin
  67.             c := line[i];
  68.             if printable(c) then
  69.                write(out, c)
  70.             else
  71.                write(out, '.');
  72.             if i = 8 then
  73.                write(out, ' ')
  74.          end;
  75.       writeln(out);
  76.       inc(address, length(line))
  77.    end;
  78.  
  79. begin
  80.    reset(inf);
  81.    rewrite(out);
  82.    address := 0;
  83.    while not eof(inf) do
  84.       begin
  85.           readline;
  86.           writeline
  87.       end
  88. end.
  89.