DataMuseum.dk

Presents historical artifacts from the history of:

CP/M

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about CP/M

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦541cff9a5⟧ TextFile

    Length: 5888 (0x1700)
    Types: TextFile
    Names: »ZDUMP.PAS«

Derivation

└─⟦dd59903ef⟧ Bits:30005887 Klub diskette for udveksling af software
    └─ ⟦this⟧ »ZDUMP.PAS« 

TextFile

PROGRAM dump;
æ
*****************************************************************
*								*
*	Hex-Ascii file dump utility				*
*								*
*	Written by:	Bob Longoria				*
*			1024 Lawrence Dr. N.E.			*
*			Albuquerque, New Mexico 87123		*
*			(505)-298-7231				*
*								*
*	Description:						*
*	     This program is a slightly improved dump utility	*
*	over the standard dump program which comes with CP/M	*
*	distribution.  When dumping, the program will dump	*
*	both in hex (as done by dump.com) and in ascii and	*
*	at a standard CP/M sector (128 bytes) at a time.  Also	*
*	each sector is numbered beginning with sector 1.	*
*	     Output of the dump can be directed to any desired  *
*	file or output device.  For example:			*
*		zdump foo.rel	- dumps to the console		*
*		zdump foo.rel con:   - also dumps to console	*
*		zdump foo.rel lst:   - dumps to listing device  *
*		zdump foo.rel dumb.dmp   - dumps to a file	*
*			called dump.dmp			 	*
*								*
***************************************************************** å

CONST
    MAXARGS = 4;	æ Maximum command line arguments å
TYPE
    byte = 0..255;
    buffer = arrayÆ1..8,1..16Å of 0..255;
    ch2 = packed arrayÆ1..2Å of char;
    args = arrayÆ1..MAXARGSÅ of string 14;
VAR
    i	     : integer;		æ General purpose index variable å
    infile   : file of buffer;	æ The input file to be dumped å
    outfile  : text;		æ The output file to receive the dump å
    inbuf    : buffer;		æ Buffer which holds a standard sector å
    reccount : integer;		æ The current sector being processed å
    argc     : integer;		æ The number of command line arguments å
    argv     : args;		æ The command line argument array å

FUNCTION tohex(x : byte) : char;
æ	Description:
 	receives a byte within the hex range (0-15) and returns
	the hex character equivalent. å
BEGIN
    case x of
	0,1,2,3,4,5,6,7,8,9 :
	    tohex := chr(x+ord('0'));
	æ If it is in this range, must be a letter character
	  of A-F å
        10,11,12,13,14,15:
	    tohex := chr(x+ord('A')-10);
    end
end;

FUNCTION cnvrthex(operand : byte) : ch2;
æ	DESCRIPTION:
	This function takes a byte and converts it into it's
	two equivalent hex characters. å
VAR
    remain : byte;

BEGIN
    remain := operand-(operand div 16)*16;
    cnvrthexÆ2Å := tohex(remain);	æ First hex character å
    operand := operand div 16;
    remain := operand-(operand div 16)*16;
    cnvrthexÆ1Å := tohex(remain)	æ Second hex character å
END;

PROCEDURE display(recno : integer; inbuf : buffer);
æ	DESCRIPTION:
	This routine takes care of displaying in both hex and
	ascii the input buffer (128 byte record). å
VAR
    i, j : integer;
    hexchar : ch2;

BEGIN
    æ Begin by labeling the record number å
    write(outfile,recno:3,':  ');
    æ This buffer is processed into 8 lines of output å
    for i := 1 to 8 do
	begin
	    æ Each line has 16 bytes to process å
	    æ Begin by writing out the hexidecimal equivalents
	      of each of the bytes å
	    for j := 1 to 16 do
	        begin
	            hexchar := cnvrthex(inbufÆi,jÅ);
		    write(outfile,hexchar,' ')
	        end;
	    æ Now convert the same 16 bytes into their ascii eqivalents å
	    write(outfile,'  ');
	    for j := 1 to 16 do
	        begin
		    æ If the byte is a non-printing character, sub-
		      stitute an ascii "." in its place å
		    if (inbufÆi,jÅ < 32) or (inbufÆi,jÅ > 126)
		        then write(outfile,'.')
		    æ Otherwise print the actual ascii equivalent å
		    else
		        write(outfile,chr(inbufÆi,jÅ))
	        end;
	    writeln(outfile);
	    write(outfile,'      ')
	end;
    writeln(outfile)
END;

PROCEDURE cmdline(var count : integer; var token : args);
æ	DESCRIPTION
	This routine performs several functions.  It reads
	the CP/M command tail if any and breaks the command 
	tail into tokens.  A token is any string of characters
	delimited by either the beginning of the command
	tail, the end of the command tail, or a space.  The
	routine returns the token count and all tokens found. å

VAR
    cmd_line : packed arrayÆ1..80Å of char;
    i, j : integer;

BEGIN æ cmdline å
    æ Make sure the command line is clean å
    for i := 1 to 80 do
	cmd_lineÆiÅ := ' ';
    count := 0;
    æ if the following is true there is a command tail, otherwise
      leave the count set to 0 and do not parse the command line å
    if not eoln(0) then
	begin
	    readln(cmd_line);
    	    i := 0;
    	    repeat
     		i := i+1;
		if cmd_lineÆiÅ <> ' ' then
	    	    begin
			count := count+1;
			j := 1;
			tokenÆcount,jÅ := cmd_lineÆiÅ;
			while cmd_lineÆi+1Å <> ' ' do
		    	    begin
				i := i+1;
				j := j+1;
				tokenÆcount,jÅ := cmd_lineÆiÅ
		    	    end æ while å
	    	end æ if å
    	    until i = 80
	end æ if not eoln å
END; æ cmdline å

BEGIN  æ MAIN CODE å
    writeln;
    æ Make sure command line arguments are clean å
    for i := 1 to MAXARGS do
	argvÆiÅ := '              ';
    reccount := 1;	æ Begin numbering records at 1 å
    cmdline(argc,argv);	æ Get and parse the command line å
    if argc = 0 then
	writeln('No INPUT file specified')
    else if argc > 2 then
	writeln('Too many command line arguments')
    else
	begin
	    æ Default output goes to the console å
	    if argc = 1 then
		argvÆ2Å := 'CON:';
	    reset(argvÆ1Å,infile);
	    rewrite(argvÆ2Å,outfile);
    	    writeln(outfile,'                Hex-Ascii file dump -- Vers. 1.1');
    	    writeln(outfile);
	    æ Process until EOF detected on input file å
            while not(eof(infile)) do
	        begin
	            read(infile,inbuf);
	            display(reccount,inbuf);
	            reccount := reccount+1
	        end
	end
END.
«eof»