|
|
DataMuseum.dkPresents historical artifacts from the history of: CP/M |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about CP/M Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 1920 (0x780)
Types: TextFile
Names: »HEXDUMP.PAS«
└─⟦08ea08c61⟧ Bits:30003924 PolyPascal programmer
└─⟦this⟧ »HEXDUMP.PAS«
└─⟦bffadc512⟧ Bits:30003938 SW1502 PolyPascal 3.10 (dk) til RC Partner
└─⟦bffadc512⟧ Bits:30004539 SW1402 PolyPascal v3.10 (dk) til Piccoline
└─⟦this⟧ »HEXDUMP.PAS«
PROGRAM hexdump; æ$K-,R-å
æ This program will output a hex dump af any disk file. Each å
æ line shows the address of the first byte of the line, then 16 å
æ bytes in hex, and then the same bytes in ASCII, if they are å
æ printable. On running the program, you must specify the name å
æ of the input and output files on the command line. The output å
æ file defaults to the console, i.e. the CON: device. å
TYPE
sector = ARRAYÆ0..7,0..15Å OF byte;
hexstring = STRINGÆ4Å;
VAR
address,l,p,n: integer;
ch: char;
buffer: sector;
infile: FILE;
outfile: text;
FUNCTION hex(number,digits: integer): hexstring;
CONST
hexdigit: ARRAYÆ0..15Å OF char = '0123456789ABCDEF';
VAR
d: integer;
h: hexstring;
BEGIN
hÆ0Å:=chr(digits);
FOR d:=digits DOWNTO 1 DO
BEGIN
hÆdÅ:=hexdigitÆnumber AND 15Å;
number:=number SHR 4;
END;
hex:=h;
END;
BEGIN
IF (argcnt<1) OR (argcnt>2) THEN
BEGIN
writeln('Syntax: HEXDUMP <infile> Æ<outfile>Å'); halt;
END;
assign(infile,argstr(1)); æ$I-å reset(infile) æ$I+å;
IF iores>0 THEN
BEGIN
writeln('HEXDUMP: "',argstr(1),'" does not exist'); halt;
END;
IF argcnt=2 THEN
assign(outfile,argstr(2)) ELSE
assign(outfile,'CON:');
rewrite(outfile);
address:=0;
REPEAT
blockread(infile,buffer,1,n);
IF n<>0 THEN
FOR l:=0 TO 7 DO
BEGIN
write(outfile,hex(address,4),' ');
FOR p:=0 TO 15 DO
BEGIN
IF p=8 THEN write(outfile,' ');
write(outfile,hex(bufferÆl,pÅ,2):3);
END;
write(outfile,' ');
FOR p:=0 TO 15 DO
BEGIN
ch:=chr(bufferÆl,pÅ);
IF (ch>=@32) AND (ch<=@126) THEN
write(outfile,ch) ELSE write(outfile,'.');
END;
writeln(outfile);
address:=address+16;
END;
UNTIL n=0;
close(infile); close(outfile);
END.
«eof»