home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / mbug / mbug053.arc / MONITOR.INC < prev    next >
Text File  |  1979-12-31  |  2KB  |  99 lines

  1. {file MONITOR.INC}
  2. {$U+}
  3.  
  4.  
  5. type
  6.   ascii =         set of 0..127;
  7.   allchar =       set of #0..#127;
  8. const
  9.   crlf: set of byte = [13,10];
  10.   resp:  set of char = ['Y','y','N','n'];
  11.   respy: set of char = ['Y','y'];
  12.   anykey: ascii = [1..127];
  13.   print: ascii = [32..126];
  14.   nonspace: ascii = [33..126];
  15.  
  16.  
  17. procedure seemem(memad,lines: integer;list: boolean);
  18. var
  19.   memad2,i,j,k: integer;
  20.   memhex: string[4];
  21.   big: boolean;
  22.   yn: char;
  23.  
  24. function toreal(i: integer): real;
  25. begin {toreal}
  26.   if i < 0 then
  27.     toreal := 65536.0 + i
  28.   else
  29.     toreal := i;
  30. end;
  31.  
  32. procedure printer;
  33. begin
  34.   write(lst,'>>>>> Memory dump from ');
  35.   write(lst,toreal(memad):6:0,'  ( ',memhex,' hex)');
  36.   writeln(lst,'  16 bytes per line.');
  37.   for i := 0 to lines do begin
  38.     if i mod 4 = 0 then
  39.       writeln(lst,toreal(memad+i*16):5:0,': ');
  40.     for j := 0 to 15 do begin
  41.       k := ord(mem[memad+i*16+j]);
  42.       write(lst,k:3,' ');
  43.     end;
  44.     for j := 0 to 15 do begin
  45.       k := ord(mem[memad+i*16+j]);
  46.       if not (k in print) then k := ord('.');
  47.       write(lst,chr(k));
  48.     end;
  49.   end;
  50.   writeln(lst);
  51.   writeln(lst);
  52.   writeln(lst);
  53. end;
  54. procedure screen;
  55. begin
  56.   clrscr;
  57.   write('>>>> Memory dump from ');
  58.   write(toreal(memad):6:0,'  ( ',memhex,' hex)');
  59.   writeln('  16 bytes per line');
  60.   for i := 0 to lines do begin
  61.     if i mod 4 = 0 then
  62.       writeln(toreal(memad+i*16):5:0,': ');
  63.     for j := 0 to 7 do begin
  64.       lowvideo;
  65.       k := ord(mem[memad+i*16+j*2]);
  66.       write(k:3,' ');
  67.       normvideo;
  68.       k := ord(mem[memad+i*16+j*2+1]);
  69.       write(k:3);
  70.     end;
  71.     write('   ');
  72.     for j := 0 to 15 do begin
  73.       k := ord(mem[memad+i*16+j]);
  74.       if not (k in print) then k := ord('.');
  75.       write(chr(k));
  76.     end;
  77.     writeln;
  78.   end;
  79.   writeln(toreal(memad+(i+1)*16):5:0,': ');
  80. end;
  81. procedure tohex;
  82. begin
  83.   memhex := '    ';
  84.   big := (memad < 0);
  85.   if big then memad2 := 32767 + memad +1 else memad2 := memad;
  86.   for i := 4 downto 1 do begin
  87.     j := memad2 mod 16;
  88.     memad2 := memad2 div 16;
  89.     if big and (i = 1) then j := 8+j;
  90.     memhex[i] := copy('0123456789ABCDEF',j+1,1);
  91.   end;
  92. end;
  93. begin
  94.   tohex;
  95.   if list then printer else screen;
  96.   write('Press <SPACE> bar to continue......');
  97.   read(kbd,yn);
  98. end;
  99.