home *** CD-ROM | disk | FTP | other *** search
/ Phoenix CD 2.0 / Phoenix_CD.cdr / 15a / murutil.zip / DUMP.PAS < prev    next >
Pascal/Delphi Source File  |  1986-12-03  |  6KB  |  197 lines

  1. PROGRAM DUMP;
  2.  
  3. {$C-}
  4.  
  5. {  Turbo Pascal Program to dump files in hexadecimal and ASCII form.
  6.  
  7.    Active Keys:
  8.  
  9.       Home:      Go to the first block of the file.
  10.       End:       Go to the last  block of the file.
  11.       Up Arrow:  Go to the previous block.
  12.       Pg Up:     Go to the previous block.
  13.       Dn Arrow:  Go to the next block.
  14.       Pg Dn:     Go to the next block.
  15.       ^C:        Quit.
  16.       Esc:       Quit.
  17.  
  18.    Program by Harry M. Murphy,  3 December 1986. }
  19.  
  20. TYPE
  21.      BLOCK   = ARRAY [0..255] OF BYTE;
  22.      TWOBYTE = ARRAY [1..2] OF CHAR;
  23.  
  24. CONST
  25.   HEX : ARRAY [0..255] OF TWOBYTE =
  26.         ('00','01','02','03','04','05','06','07','08','09','0A','0B',
  27.          '0C','0D','0E','0F','10','11','12','13','14','15','16','17',
  28.          '18','19','1A','1B','1C','1D','1E','1F','20','21','22','23',
  29.          '24','25','26','27','28','29','2A','2B','2C','2D','2E','2F',
  30.          '30','31','32','33','34','35','36','37','38','39','3A','3B',
  31.          '3C','3D','3E','3F','40','41','42','43','44','45','46','47',
  32.          '48','49','4A','4B','4C','4D','4E','4F','50','51','52','53',
  33.          '54','55','56','57','58','59','5A','5B','5C','5D','5E','5F',
  34.          '60','61','62','63','64','65','66','67','68','69','6A','6B',
  35.          '6C','6D','6E','6F','70','71','72','73','74','75','76','77',
  36.          '78','79','7A','7B','7C','7D','7E','7F','80','81','82','83',
  37.          '84','85','86','87','88','89','8A','8B','8C','8D','8E','8F',
  38.          '90','91','92','93','94','95','96','97','98','99','9A','9B',
  39.          '9C','9D','9E','9F','A0','A1','A2','A3','A4','A5','A6','A7',
  40.          'A8','A9','AA','AB','AC','AD','AE','AF','B0','B1','B2','B3',
  41.          'B4','B5','B6','B7','B8','B9','BA','BB','BC','BD','BE','BF',
  42.          'C0','C1','C2','C3','C4','C5','C6','C7','C8','C9','CA','CB',
  43.          'CC','CD','CE','CF','D0','D1','D2','D3','D4','D5','D6','D7',
  44.          'D8','D9','DA','DB','DC','DD','DE','DF','E0','E1','E2','E3',
  45.          'E4','E5','E6','E7','E8','E9','EA','EB','EC','ED','EE','EF',
  46.          'F0','F1','F2','F3','F4','F5','F6','F7','F8','F9','FA','FB',
  47.          'FC','FD','FE','FF');
  48.   SP = ' ';
  49.  
  50. VAR
  51.     BLK     : BLOCK;
  52.     CH      : CHAR;
  53.     CHORD   : 0..255;
  54.     I       : 0..255;
  55.     INP     : FILE OF BLOCK;
  56.     INPNAME : STRING[65];
  57.     J       : 0..255;
  58.     K       : 0..255;
  59.     KEYPAD  : BOOLEAN;
  60.     NBL     : INTEGER;
  61.     NBLKS   : INTEGER;
  62.     PARA    : INTEGER;
  63.  
  64.  
  65. PROCEDURE BEEP(FREQ, DUR: INTEGER);
  66.  
  67. BEGIN
  68.   SOUND(FREQ);
  69.   DELAY(DUR);
  70.   NOSOUND
  71. END { Procedure BEEP };
  72.  
  73.  
  74. PROCEDURE GETINPFIL;
  75.  
  76. {  This file gets an input file, either as the first parameter
  77.    on the command line or by requesting it from the user.
  78.  
  79.    Procedure by Harry M. Murphy,  22 February 1986.  }
  80.  
  81.   VAR
  82.       L: INTEGER;
  83.  
  84.   BEGIN
  85.     IF PARAMCOUNT = 0
  86.       THEN
  87.         BEGIN
  88.           CLRSCR;
  89.           WRITE('File to be dumped: ');
  90.           BEEP(512,50);
  91.           READLN(INPNAME)
  92.         END
  93.       ELSE
  94.         INPNAME := PARAMSTR(1);
  95.     FOR L:=1 TO LENGTH(INPNAME) DO INPNAME[L] := UPCASE(INPNAME[L]);
  96.     ASSIGN(INP,INPNAME);
  97.     {$I-} RESET(INP); {$I+}
  98.     IF IORESULT <> 0
  99.       THEN
  100.         BEGIN
  101.           CLOSE(INP);
  102.           WRITELN('ERROR!  Can''t find file ',INPNAME,'!');
  103.           HALT
  104.         END;
  105.   END {Procedure GETINPFIL};
  106.  
  107.  
  108. BEGIN {Program DUMP}
  109.   GETINPFIL;
  110.   LOWVIDEO;
  111.   NBLKS := FILESIZE(INP);
  112.   CLRSCR;
  113.   WRITELN('      Dump of ',INPNAME,':');
  114.   WRITELN;
  115.   WRITELN('Para   0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F');
  116.   GOTOXY(1,25);
  117.   TEXTCOLOR(0);
  118.   TEXTBACKGROUND(7);
  119.   WRITE('Active Keys:  Home, End,   or Pg Up,  Space,  or Pg Dn.  Esc or ^C to Quit.');
  120.   TEXTCOLOR(7);
  121.   TEXTBACKGROUND(0);
  122.   WINDOW(1,4,80,24);
  123.   NBL := 0;
  124.   REPEAT
  125.     IF NBL < NBLKS
  126.       THEN
  127.         BEGIN
  128.           SEEK(INP,NBL);
  129.           READ(INP,BLK);
  130.           NBL := NBL+1
  131.         END;
  132.     CLRSCR;
  133.     PARA := 256*(NBL-1);
  134.     FOR I := 0 TO 15 DO
  135.       BEGIN
  136.         J := HI(PARA);
  137.         K := LO(PARA);
  138.         WRITE(HEX[J],HEX[K],SP);
  139.         K := 16*I;
  140.         FOR J := 0 TO 15 DO
  141.           WRITE(SP,HEX[BLK[J+K]]);
  142.         WRITE('  ');
  143.         FOR J := 0 TO 15 DO
  144.           IF BLK[J+K] IN [32..126]
  145.             THEN
  146.               WRITE(CHR(BLK[J+K]))
  147.             ELSE
  148.               WRITE('.');
  149.         WRITELN;
  150.         PARA := PARA+16
  151.       END;
  152.     WRITELN;
  153.     WRITELN('      Block number ',NBL,' of ',NBLKS,' blocks.');
  154.     IF NBL < NBLKS
  155.       THEN
  156.         BEEP(512,50)
  157.       ELSE
  158.         BEGIN
  159.           WRITELN('      <<<<<<<  END OF FILE  >>>>>>>');
  160.           BEEP(256,100)
  161.         END;
  162.     REPEAT
  163.       WHILE NOT KEYPRESSED DO;
  164.       READ(KBD,CH);
  165.       CHORD := ORD(CH);
  166.       KEYPAD := FALSE;
  167.       IF CHORD =27
  168.         THEN
  169.           BEGIN
  170.             IF KEYPRESSED
  171.               THEN
  172.                 BEGIN
  173.                    READ(KBD,CH);
  174.                    CHORD := ORD(CH);
  175.                    KEYPAD := TRUE
  176.                 END;
  177.             IF CHORD IN [71,72,73,79]
  178.               THEN
  179.                 CASE CHORD OF
  180.                      71: NBL := 0;
  181.                   72,73: IF NBL > 1
  182.                            THEN
  183.                              NBL := NBL-2
  184.                            ELSE
  185.                              NBL := NBL-1;
  186.                      79: NBL := NBLKS-1
  187.                 END { CASE }
  188.           END
  189.     UNTIL (CHORD IN [3,27,32]) OR (KEYPAD AND (CHORD IN [71,72,73,79,80,81]))
  190.   UNTIL (CHORD = 3) OR (CHORD = 27);
  191.   WINDOW(1,1,80,25);
  192.   GOTOXY(1,25);
  193.   CLREOL;
  194.   GOTOXY(1,22);
  195.   CLOSE(INP)
  196. END.
  197.