!!!Dump - Print the contents of binary files in hexadecimal and ATASCII
General Information
Author: Mark Rose \\
Language: ACTION! \\
Compiler/Interpreter: ACTION! \\
Published: February, 1985 \\
{{{
; Dump - Print the contents of binary
; files in hexadecimal and ATASCII
; by Mark Rose - February, 1985
; A few useful definitions:
DEFINE ChunkSize = "8",
Escape = "$1B",
NewLine = "$9B",
File = "1"
; Print out a byte as two hexadecimal
; digits.
PROC HexByte(BYTE c)
BYTE ARRAY HexDig(16)=
['0 '1 '2 '3 '4 '5 '6 '7
'8 '9 'A 'B 'C 'D 'E 'F]
Put(HexDig(c RSH 4))
Put(HexDig(c&15))
RETURN
; Print out a two-byte value as 4
; hexadecimal digits by calling
; HexByte.
PROC HexWord(CARD i)
HexByte(i RSH 8)
HexByte(i & 255)
RETURN
; Read in the next few bytes of the
; file (the desired number is chosen
; by the value of "ChunkSize").
BYTE FUNC ReadChunk( BYTE ARRAY buf )
BYTE nBytes,
c
nBytes = 0
DO
c = GetD( File )
IF EOF( File ) THEN
EXIT
FI
buf( nBytes ) = c
nBytes ==+ 1
UNTIL nBytes = ChunkSize
OD
RETURN( nBytes )
; Put a character to screen. If char
; is an ATASCII return, put period,
; instead, so display isn't messed up.
PROC PutChar( BYTE c )
IF c # NewLine THEN
Put( Escape )
Put( c )
ELSE
Put( '. )
FI
RETURN
; Print hex and ATASCII of chars read
; by ReadChunk.
PROC DumpChunk( CARD offset, BYTE n, BYTE ARRAY buf )
BYTE i
HexWord( offset )
Print( ":" )
FOR i = 0 TO n-1
DO
HexByte( buf( i ) )
Put( ' )
OD
FOR i = i TO ChunkSize-1
DO
Print( " " )
OD
FOR i = 0 TO n-1
DO
PutChar( buf( i ) )
OD
PutE()
RETURN
; Dump a file to screen.
PROC Dump()
BYTE ARRAY fName( 50 )
CARD offset
BYTE size
BYTE ARRAY buf( ChunkSize )
; First, get file to dump.
Print( "File: " )
InputS( fName )
Close( File )
Open( File, fname ,4 ,0 )
; Until end-of-file, read a few chars
; and dump them to screen.
offset = 0
DO
size = ReadChunk( buf )
IF size = 0 THEN
EXIT
FI
DumpChunk( offset, size, buf )
offset ==+ size
OD
Close(1)
RETURN
}}}