home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / CPM / TURBOPAS / TP-UTIL.ARK / VARDUMP1.SRC < prev    next >
Text File  |  1986-01-06  |  1KB  |  38 lines

  1. PROCEDURE VARDUMP(VAR DEVICE : TEXT; VAR TARGET; ITSIZE : INTEGER);
  2.  
  3. CONST PRINTABLES : SET OF CHAR = [' '..'}'];
  4.  
  5. VAR I,J       : INTEGER;
  6.     FULL,LEFT : INTEGER;
  7.     DUMPIT    : ARRAY[0..MAXINT] OF BYTE ABSOLUTE TARGET;
  8.  
  9. PROCEDURE DUMP_LINE(OFFSET,BYTE_COUNT : INTEGER);
  10.  
  11. VAR I : INTEGER;
  12.  
  13. BEGIN
  14.   FOR I := 0 TO BYTE_COUNT-1 DO               { Hex dump the data }
  15.     BEGIN
  16.       WRITE_HEX(DEVICE,DUMPIT[(OFFSET*16)+I]);
  17.       WRITE(DEVICE,' ')
  18.     END;
  19.   FOR I := 0 TO 56 - (BYTE_COUNT*3) DO WRITE(DEVICE,' ');  { Space interval }
  20.     WRITE(DEVICE,'|');                        { Show first boundary bar }
  21.   FOR I := 0 TO BYTE_COUNT-1 DO               { Show printable equivalents }
  22.     IF CHR(DUMPIT[(OFFSET*16)+I]) IN PRINTABLES THEN
  23.       WRITE(DEVICE,CHR(DUMPIT[(OFFSET*16)+I]))
  24.     ELSE WRITE(DEVICE,'.');
  25.   WRITELN(DEVICE,'|')                         { Final boundary bar }
  26. END;
  27.  
  28.  
  29. BEGIN
  30.   FULL := ITSIZE DIV 16;   { Number of 16-byte chunks in TARGET }
  31.   LEFT := ITSIZE MOD 16;   { 'Leftover' bytes after last 16-byte chunk }
  32.   FOR I := 0 TO FULL-1 DO  { Not executed if less than 16 bytes in TARGET }
  33.     DUMP_LINE(I,16);
  34.   IF LEFT > 0 THEN         { Not executed if size of TARGET divides by 16 }
  35.     DUMP_LINE(FULL,LEFT);
  36.   WRITELN(DEVICE)          { Space down one line after dump }
  37. END;  { VARDUMP }
  38.