home *** CD-ROM | disk | FTP | other *** search
- PROGRAM FileDump;
-
- {
- This program displays or prints the contents of a file. The
- hexadecimal value of each byte in the file is displayed,
- along with its corresponding ASCII character (if there is
- one).
-
- Source: "FILEDUMP: Displaying a File's Contents", TUG Lines Volume I Issue 5
- Author: Kuang-Hsing Tseng
- Date: 11/24/84
- Application: All systems
- }
-
- CONST bufnumber =32;
- buflength = 8191;
- TYPE STRING14=STRING[14];
- VAR SOURCE,DESTINATION : FILE;
- CH:CHAR;
- outfile:TEXT;
- FILENAME:STRING14;
- BUFFER : ARRAY[0..buflength] OF BYTE;
- SCRNNO,K,bufno,NOOFRECSTOREAD,REMAINING:INTEGER;
-
- FUNCTION EXIST (FILENAME:STRING14):BOOLEAN;
- VAR INFILE : FILE;
- BEGIN
- ASSIGN(INFILE,FILENAME);
- {$I-*}
- RESET (INFILE);
- {$I+*}
- EXIST := (IORESULT=0);
- END;
-
- PROCEDURE HEX(N:INTEGER);
- VAR A,B : INTEGER;
- CHS : STRING[16];
- BEGIN
- CHS := '0123456789ABCDEF';
- A := TRUNC(N/16);
- B := N - A*16;
- IF (A >= 0) AND (A <=15) THEN WRITE(outfile,CHS[A+1])
- ELSE WRITE(outfile,'?');
-
- IF (B >=0) AND (B <=15) THEN WRITE(outfile,CHS[B+1])
- ELSE WRITE(outfile,'?');
- WRITE(outfile,' ');
- END;
-
- PROCEDURE displaybuffer;
- VAR I,J,N,M,OFFSET,L:INTEGER;
- BEGIN
- CLRSCR;
- WRITELN(outfile,' ':15,'FILE NAME : ',FILENAME,
- ' PART : ',K+1+bufno*(bufnumber DIV 2),' OF ',SCRNNO);
- WRITELN(outfile);
- WRITELN(outfile,'OFFSET',' ':24,'HEXADECIMAL',' ':25,'ASCII');
- WRITELN(outfile,'------ ',
- ' -0--1--2--3--4--5--6--7--8--9--10-11-12-13-14-15 0123456789012345');
- WRITELN(outfile);
- FOR I := 0 TO 15 DO
- BEGIN
- L := K * 256 + I*16;
- OFFSET := bufno*256 + L;
- WRITE(outfile,L:5,' ');
- {HEX DUMP}
- FOR J := 0 TO 15 DO
- BEGIN
- N := OFFSET + J;
- HEX(ORD(BUFFER[N]));
- END;
-
- WRITE(outfile,' ');
- {ASCII DUMP}
- FOR J := 0 TO 15 DO
- BEGIN
- N := OFFSET + J;
- M := ORD(BUFFER[N]);
- IF M > 127 THEN M := m - 128;
- IF (M>31) AND (m <127) THEN
- WRITE(outfile,CHR(M))
- ELSE
- WRITE(outfile,' ');
- END;
- WRITELN(outfile);
- END;
- END;
-
- BEGIN
- CLRSCR;
- REPEAT
- WRITE(' FILE TO HEX DUMP -> '); READLN(FILENAME);
- UNTIL EXIST(FILENAME) OR (LENGTH(FILENAME)=0);
- IF LENGTH(FILENAME)=0 THEN HALT;
- ASSIGN(SOURCE,FILENAME);
- RESET(SOURCE);
-
- WRITE(' OUTPUT TO Printer/Console -> ');
- repeat read(TRM,ch) until upcase(ch) in ['P','C'];
- if upcase(ch) = 'C' THEN ASSIGN(outfile,'CON:')
- ELSE ASSIGN(outfile,'LST:');
- RESET(outfile);
- REMAINING := FILESIZE(SOURCE);
- if odd(remaining) then SCRNNO := (REMAINING DIV 2) + 1
- else SCRNNO := REMAINING DIV 2;
- bufno := 0;
- WHILE REMAINING > 0 DO
- BEGIN
- IF bufnumber <= REMAINING THEN NOOFRECSTOREAD := bufnumber
- ELSE NOOFRECSTOREAD := REMAINING;
-
- BLOCKREAD(SOURCE,BUFFER,NOOFRECSTOREAD);
- FOR K := 0 TO ((NOOFRECSTOREAD-1) DIV 2) DO
- BEGIN
- displaybuffer;
- WRITELN;
- WRITE(' ':6,'<< PRESS <ESC> TO EXIT OR ANY OTHER KEY TO CONTINUE >>');
- READ(KBD,CH);
- IF ORD(CH)=27 THEN HALT;
- END;
-
- bufno := bufno + 1;
- REMAINING := REMAINING - nOOFRECSTOREAD;
- END;
- WRITELN(outfile);
- WRITELN(OUTFILE,'END OF PROCESS');
- END.
-
-
-
-
-