home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / pascal / das_buch / dos / dump.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1993-05-13  |  5.0 KB  |  135 lines

  1. {$A+,B-,D-,E-,F-,G-,I-,L-,N-,O-,P-,Q-,R-,S-,T-,V-,X-,M $4000,0,0}
  2. (*===================================================================*)
  3. (*                            DUMP.PAS                               *)
  4. (*             Copyright (C) 1993 te-wi Verlag, München              *)
  5. (*    Das Programm erzeugt einen Hexdump einer beliebigen Datei      *)
  6. (*===================================================================*)
  7.  
  8. PROGRAM HexDump;
  9.  
  10. USES
  11.   Dos, Upper, Hex;
  12.  
  13. VAR
  14.  sr                            : SearchRec;
  15.  OrgName, HexFile              : PathStr;
  16.  HexDir                        : DirStr;
  17.  HexName                       : NameStr;
  18.  HexExt                        : ExtStr;
  19.  f                             : FILE OF BYTE;
  20.  t                             : Text;
  21.  l, len                        : Longint;
  22.  i                             : INTEGER;
  23.  b                             : BYTE;
  24.  line, ls, dump, OutLine       : STRING;
  25.  Year, Month, Day, DayofWeek,
  26.  Hour, Minute, Second, Sec100  : WORD;
  27.  dt                            : DateTime;
  28.  
  29. BEGIN
  30.   IF ParamCount = 0 THEN
  31.   BEGIN
  32.     WriteLn(^M^J'DUMP v1');
  33.     WriteLn(' Fehler beim Aufruf des Programms!');
  34.     WriteLn(' Aufruf: ''DUMP QUELLDATEI''');
  35.     WriteLn(' Die Zieldatei erhält den Namen der');
  36.     WriteLn(' Quelldatei und die Endung .DMP');
  37.   END
  38.   ELSE
  39.   BEGIN
  40.     IF (Pos('?', ParamStr(1)) > 0) OR (Pos('*', ParamStr(1)) > 0) OR
  41.       (Pos('/h', ParamStr(1)) > 0) OR (Pos('/H', ParamStr(1)) > 0) THEN
  42.     BEGIN
  43.       WriteLn(^M^J'DUMP Version 1.0'^J);
  44.       WriteLn('Beliebige Binärdateien werden als Hexdump in eine');
  45.       WriteLn('Datei geschrieben und gleichzeitig auf dem Bildschirm');
  46.       WriteLn('angezeigt.'^J);
  47.       WriteLn('Das Programm muß mit dem Namen der Quelle aufgerufen');
  48.       WriteLn('werden. Der Name der Zieldatei ist gleich dem Namen');
  49.       WriteLn('der Quelldatei. Die Zieldatei erhält die Endung .DMP.');
  50.       WriteLn('Dateien mit der Endung .DMP können nicht bearbeitet');
  51.       WriteLn('werden.');
  52.       IF (Pos('?', ParamStr(1)) > 0) OR
  53.          (Pos('*', ParamStr(1)) > 0) THEN
  54.         WriteLn(^J'Wildcards in den Dateinamen sind nicht erlaubt.');
  55.     END
  56.     ELSE
  57.     BEGIN
  58.       OrgName := UpString(ParamStr(1));
  59.       FSplit(OrgName, HexDir, HexName, HexExt);
  60.       HexFile := HexDir + HexName + '.DMP';
  61.       IF HexFile = OrgName THEN
  62.       BEGIN
  63.         WriteLn(^M^J'DUMP v1');
  64.         WriteLn(' Fehler: Eingabedatei = Ausgabedatei!');
  65.         WriteLn(' Dateien mit der Endung .DMP können');
  66.         WriteLn(' nicht bearbeitet werden!');
  67.       END
  68.       ELSE
  69.       BEGIN
  70.         FileMode := 0;
  71.         FindFirst(OrgName, AnyFile - Directory - VolumeID, sr);
  72.         IF Length(sr.Name) = 0 THEN BEGIN
  73.           WriteLn(^M^J'DUMP v1');
  74.           WriteLn(' Fehler: Eingabedatei ', OrgName,
  75.                   ' nicht vorhanden.')
  76.         END
  77.         ELSE
  78.         BEGIN
  79.           Assign(f, Orgname);
  80.           Reset(f);
  81.           Len := FileSize(f);
  82.           IF IoResult <> 0 THEN Halt;
  83.           Assign(t, HexFile); Rewrite(t);
  84.           l := 0;
  85.           line := '';
  86.           dump := '';
  87.           WriteLn;
  88.           Write(t, 'Hexdump von ', HexName, HexExt);
  89.           Write(   'Hexdump von ', HexName, HexExt);
  90.           Write(t, ' (Originaldatei erzeugt am ');
  91.           Write(   ' (Originaldatei erzeugt am ');
  92.           UnpackTime(sr.Time, dt);
  93.           WriteLn(t, dt.Day, '.', dt.Month, '.', dt.Day, ' um ', dt.Hour,
  94.                      ':', dt.Min, ')');
  95.           WriteLn(   dt.Day, '.', dt.Month, '.', dt.Day, ' um ',
  96.                      dt.Hour, ':', dt.Min, ')');
  97.           Getdate(Year, Month, Day, DayofWeek);
  98.           GetTime(Hour, Minute, Second, Sec100);
  99.           Writeln(t, HexName, '.DMP erzeugt am ', Day, '.', Month, '.',
  100.                   Year, ' um ', Hour, ':', Minute, ^M^J^M^J);
  101.           Writeln(HexName, '.DMP erzeugt am ', Day, '.', Month, '.',
  102.                   Year, ' um ', Hour, ':', Minute, ^M^J^J);
  103.           FOR l := 0 TO Len + $0F DO
  104.           BEGIN
  105.             IF l < Len THEN Read(f, b) ELSE b := 0;
  106.             line := line + Byte2Hex(b) + ' ';
  107.             IF b IN [32..126, 128..255] THEN
  108.               dump := dump + Chr(b)
  109.             ELSE
  110.               dump := dump + '.';
  111.             OutLine := line + dump;
  112.             IF Length(OutLine) > 62 THEN BEGIN
  113.               ls := Long2Hex(l - $F);
  114.               Delete(ls, 1, 4);
  115.               ls[1] := ' ';
  116.               WriteLn(t, ls, ' | ', line, ' |  ', dump);
  117.               WriteLn(   ls, ' | ', line, ' |  ', dump);
  118.               line := '';
  119.               dump := '';
  120.            END;
  121.           END;
  122.           ls := Long2Hex(Len);
  123.           WHILE ls[1] = '0' DO Delete(ls, 1, 1);
  124.           WriteLn(t, ^M^J, 'Dateilänge: ', Len, ' (', ls, 'h) Bytes');
  125.           WriteLn(   ^M^J, 'Dateilänge: ', Len, ' (', ls, 'h) Bytes');
  126.           Close(f);
  127.           Close(t);
  128.         END;
  129.       END;
  130.     END;
  131.   END;
  132. END.
  133.  
  134. (*===================================================================*)
  135.