home *** CD-ROM | disk | FTP | other *** search
- PROCEDURE VARDUMP(VAR DEVICE : TEXT; VAR TARGET; ITSIZE : INTEGER);
-
- CONST PRINTABLES : SET OF CHAR = [' '..'}'];
-
- VAR I,J : INTEGER;
- FULL,LEFT : INTEGER;
- DUMPIT : ARRAY[0..MAXINT] OF BYTE ABSOLUTE TARGET;
-
- PROCEDURE DUMP_LINE(OFFSET,BYTE_COUNT : INTEGER);
-
- VAR I : INTEGER;
-
- BEGIN
- FOR I := 0 TO BYTE_COUNT-1 DO { Hex dump the data }
- BEGIN
- WRITE_HEX(DEVICE,DUMPIT[(OFFSET*16)+I]);
- WRITE(DEVICE,' ')
- END;
- FOR I := 0 TO 56 - (BYTE_COUNT*3) DO WRITE(DEVICE,' '); { Space interval }
- WRITE(DEVICE,'|'); { Show first boundary bar }
- FOR I := 0 TO BYTE_COUNT-1 DO { Show printable equivalents }
- IF CHR(DUMPIT[(OFFSET*16)+I]) IN PRINTABLES THEN
- WRITE(DEVICE,CHR(DUMPIT[(OFFSET*16)+I]))
- ELSE WRITE(DEVICE,'.');
- WRITELN(DEVICE,'|') { Final boundary bar }
- END;
-
-
- BEGIN
- FULL := ITSIZE DIV 16; { Number of 16-byte chunks in TARGET }
- LEFT := ITSIZE MOD 16; { 'Leftover' bytes after last 16-byte chunk }
- FOR I := 0 TO FULL-1 DO { Not executed if less than 16 bytes in TARGET }
- DUMP_LINE(I,16);
- IF LEFT > 0 THEN { Not executed if size of TARGET divides by 16 }
- DUMP_LINE(FULL,LEFT);
- WRITELN(DEVICE) { Space down one line after dump }
- END; { VARDUMP }