home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Phoenix CD 2.0
/
Phoenix_CD.cdr
/
15a
/
murutil.zip
/
DUMP.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1986-12-03
|
6KB
|
197 lines
PROGRAM DUMP;
{$C-}
{ Turbo Pascal Program to dump files in hexadecimal and ASCII form.
Active Keys:
Home: Go to the first block of the file.
End: Go to the last block of the file.
Up Arrow: Go to the previous block.
Pg Up: Go to the previous block.
Dn Arrow: Go to the next block.
Pg Dn: Go to the next block.
^C: Quit.
Esc: Quit.
Program by Harry M. Murphy, 3 December 1986. }
TYPE
BLOCK = ARRAY [0..255] OF BYTE;
TWOBYTE = ARRAY [1..2] OF CHAR;
CONST
HEX : ARRAY [0..255] OF TWOBYTE =
('00','01','02','03','04','05','06','07','08','09','0A','0B',
'0C','0D','0E','0F','10','11','12','13','14','15','16','17',
'18','19','1A','1B','1C','1D','1E','1F','20','21','22','23',
'24','25','26','27','28','29','2A','2B','2C','2D','2E','2F',
'30','31','32','33','34','35','36','37','38','39','3A','3B',
'3C','3D','3E','3F','40','41','42','43','44','45','46','47',
'48','49','4A','4B','4C','4D','4E','4F','50','51','52','53',
'54','55','56','57','58','59','5A','5B','5C','5D','5E','5F',
'60','61','62','63','64','65','66','67','68','69','6A','6B',
'6C','6D','6E','6F','70','71','72','73','74','75','76','77',
'78','79','7A','7B','7C','7D','7E','7F','80','81','82','83',
'84','85','86','87','88','89','8A','8B','8C','8D','8E','8F',
'90','91','92','93','94','95','96','97','98','99','9A','9B',
'9C','9D','9E','9F','A0','A1','A2','A3','A4','A5','A6','A7',
'A8','A9','AA','AB','AC','AD','AE','AF','B0','B1','B2','B3',
'B4','B5','B6','B7','B8','B9','BA','BB','BC','BD','BE','BF',
'C0','C1','C2','C3','C4','C5','C6','C7','C8','C9','CA','CB',
'CC','CD','CE','CF','D0','D1','D2','D3','D4','D5','D6','D7',
'D8','D9','DA','DB','DC','DD','DE','DF','E0','E1','E2','E3',
'E4','E5','E6','E7','E8','E9','EA','EB','EC','ED','EE','EF',
'F0','F1','F2','F3','F4','F5','F6','F7','F8','F9','FA','FB',
'FC','FD','FE','FF');
SP = ' ';
VAR
BLK : BLOCK;
CH : CHAR;
CHORD : 0..255;
I : 0..255;
INP : FILE OF BLOCK;
INPNAME : STRING[65];
J : 0..255;
K : 0..255;
KEYPAD : BOOLEAN;
NBL : INTEGER;
NBLKS : INTEGER;
PARA : INTEGER;
PROCEDURE BEEP(FREQ, DUR: INTEGER);
BEGIN
SOUND(FREQ);
DELAY(DUR);
NOSOUND
END { Procedure BEEP };
PROCEDURE GETINPFIL;
{ This file gets an input file, either as the first parameter
on the command line or by requesting it from the user.
Procedure by Harry M. Murphy, 22 February 1986. }
VAR
L: INTEGER;
BEGIN
IF PARAMCOUNT = 0
THEN
BEGIN
CLRSCR;
WRITE('File to be dumped: ');
BEEP(512,50);
READLN(INPNAME)
END
ELSE
INPNAME := PARAMSTR(1);
FOR L:=1 TO LENGTH(INPNAME) DO INPNAME[L] := UPCASE(INPNAME[L]);
ASSIGN(INP,INPNAME);
{$I-} RESET(INP); {$I+}
IF IORESULT <> 0
THEN
BEGIN
CLOSE(INP);
WRITELN('ERROR! Can''t find file ',INPNAME,'!');
HALT
END;
END {Procedure GETINPFIL};
BEGIN {Program DUMP}
GETINPFIL;
LOWVIDEO;
NBLKS := FILESIZE(INP);
CLRSCR;
WRITELN(' Dump of ',INPNAME,':');
WRITELN;
WRITELN('Para 0 1 2 3 4 5 6 7 8 9 A B C D E F');
GOTOXY(1,25);
TEXTCOLOR(0);
TEXTBACKGROUND(7);
WRITE('Active Keys: Home, End, or Pg Up, Space, or Pg Dn. Esc or ^C to Quit.');
TEXTCOLOR(7);
TEXTBACKGROUND(0);
WINDOW(1,4,80,24);
NBL := 0;
REPEAT
IF NBL < NBLKS
THEN
BEGIN
SEEK(INP,NBL);
READ(INP,BLK);
NBL := NBL+1
END;
CLRSCR;
PARA := 256*(NBL-1);
FOR I := 0 TO 15 DO
BEGIN
J := HI(PARA);
K := LO(PARA);
WRITE(HEX[J],HEX[K],SP);
K := 16*I;
FOR J := 0 TO 15 DO
WRITE(SP,HEX[BLK[J+K]]);
WRITE(' ');
FOR J := 0 TO 15 DO
IF BLK[J+K] IN [32..126]
THEN
WRITE(CHR(BLK[J+K]))
ELSE
WRITE('.');
WRITELN;
PARA := PARA+16
END;
WRITELN;
WRITELN(' Block number ',NBL,' of ',NBLKS,' blocks.');
IF NBL < NBLKS
THEN
BEEP(512,50)
ELSE
BEGIN
WRITELN(' <<<<<<< END OF FILE >>>>>>>');
BEEP(256,100)
END;
REPEAT
WHILE NOT KEYPRESSED DO;
READ(KBD,CH);
CHORD := ORD(CH);
KEYPAD := FALSE;
IF CHORD =27
THEN
BEGIN
IF KEYPRESSED
THEN
BEGIN
READ(KBD,CH);
CHORD := ORD(CH);
KEYPAD := TRUE
END;
IF CHORD IN [71,72,73,79]
THEN
CASE CHORD OF
71: NBL := 0;
72,73: IF NBL > 1
THEN
NBL := NBL-2
ELSE
NBL := NBL-1;
79: NBL := NBLKS-1
END { CASE }
END
UNTIL (CHORD IN [3,27,32]) OR (KEYPAD AND (CHORD IN [71,72,73,79,80,81]))
UNTIL (CHORD = 3) OR (CHORD = 27);
WINDOW(1,1,80,25);
GOTOXY(1,25);
CLREOL;
GOTOXY(1,22);
CLOSE(INP)
END.