home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------- *)
- (* TEST.PAS *)
- (* *)
- (* »Test1« ist ein Test- und Demoprogramm für die *)
- (* Unit »CompressU«. *)
- (* Das Programm komprimiert drei Dateien um sie an- *)
- (* schließend gleich wieder zu dekomprimieren. Die *)
- (* dekomprimierte Datei wird daraufhin mit dem *)
- (* Original verglichen. Zu jeder Datei wird ein *)
- (* Testergebnis ausgegeben, das auch den Kompres- *)
- (* sionsgrad angibt. *)
- (* »Test1« bildet einen Nachfahren von dem Objekt *)
- (* »compressOBJ« und definiert die Methoden *)
- (* »Read_bytes« und »Write_bytes«. *)
- (* *)
- (* (c) 1991 Uwe Dirksen & DMV-Verlag *)
- (* ------------------------------------------------- *)
- PROGRAM Test;
-
- USES Crt, CompressU;
-
- CONST
- testanzahl = 3;
- start = 1;
- ende = testanzahl;
- max_feldgroesse = 24096;
- (* Größe der Vergleichsfelder *)
- puffergroesse = 64000;
- (* Größe des dynamischen Puffers *)
- filename : ARRAY [1..testanzahl] OF STRING =
- ('TEST1.DAT', 'TEST2.DAT');
- fname : ARRAY [1..testanzahl] OF STRING =
- ('TEST1', 'TEST2');
-
- TYPE
- fileptrTYP = ^FILE;
- _compressOBJ = OBJECT (compressOBJ)
-
- CONSTRUCTOR Init(VAR io_file : FILE);
- PROCEDURE Read_bytes(VAR database;
- VAR laenge : WORD); VIRTUAL;
- PROCEDURE Write_bytes(VAR database;
- VAR laenge : WORD);VIRTUAL;
- PRIVATE
- fileptr : fileptrTYP;
- END;
-
- VAR
- bytes_read, bytes_read2, bytes_write,
- durchgang, vergleich, data_seg, data_ofs : WORD;
- inputfile, inputfile2, outputfile : FILE;
- max_memory, laenge, fehler : LONGINT;
- kompressionsgrad : REAL;
- datenptr : POINTER;
-
- daten1, daten2 : ARRAY [1..max_feldgroesse] OF BYTE;
- compress : _compressOBJ;
-
- CONSTRUCTOR _compressOBJ.Init(VAR io_file : FILE);
- BEGIN
- compressOBJ.Init;
- fileptr := Ptr(Seg(io_file), Ofs(io_file));
- END;
-
- PROCEDURE _compressOBJ.Read_bytes(VAR database;
- VAR laenge : WORD);
- BEGIN
- BlockRead(fileptr^, database, laenge, laenge);
- END;
-
- PROCEDURE _compressOBJ.Write_bytes(VAR database;
- VAR laenge : WORD);
- BEGIN
- BlockWrite(fileptr^, database, laenge, laenge);
- END;
-
- BEGIN
- ClrScr;
- max_memory := MaxAvail;
- IF max_memory > puffergroesse THEN
- max_memory := puffergroesse;
- GetMem(datenptr, max_memory);
- data_seg := Seg(datenptr^);
- data_ofs := Ofs (datenptr^);
- FOR durchgang := start TO ende DO BEGIN
- Assign(inputfile, filename[durchgang]);
- Reset(inputfile, 1);
- Assign(outputfile, fname[durchgang] + '.CPR');
- Rewrite(outputfile, 1);
- compress.Init(outputfile);
- WriteLn('Datei : ', filename[durchgang]);
- WriteLn(' Kompressionsvorgang läuft');
- REPEAT
- BlockRead(inputfile, MEM[data_seg:data_ofs],
- max_memory, bytes_read);
- compress.Compress(MEM[data_seg:data_ofs],
- bytes_read);
- UNTIL bytes_read < max_memory;
- kompressionsgrad:= FileSize(outputfile)*100 /
- FileSize(inputfile);
- Close(inputfile);
- Close(outputfile);
- WriteLn(' Kompressionsvorgang beendet');
- Assign(inputfile, fname[durchgang] + '.CPR');
- Reset (inputfile, 1);
- Assign(outputfile, fname[durchgang] + '.DPR');
- Rewrite(outputfile, 1);
- compress.Init(inputfile);
- laenge := max_memory - 351;
- bytes_read := laenge;
- WriteLn(' Dekompressionsvorgang läuft');
- REPEAT
- compress.Decompress(MEM[data_seg:data_ofs],
- bytes_read);
- BlockWrite(outputfile, MEM[data_seg:data_ofs],
- bytes_read,bytes_write);
- UNTIL bytes_read < laenge;
- Close(inputfile);
- Close(outputfile);
- WriteLn(' Dekompressionsvorgang beendet');
- Assign(inputfile, filename[durchgang]);
- Reset(inputfile, 1);
- Assign(inputfile2, fname[durchgang] + '.DPR');
- Reset(inputfile2, 1);
- fehler := 0;
- WriteLn(' Der Vergleich läuft');
- REPEAT
- BlockRead(inputfile, daten1, max_feldgroesse,
- bytes_read);
- BlockRead(inputfile2, daten2, max_feldgroesse,
- bytes_read2);
- FOR vergleich:= 1 TO bytes_read DO
- IF daten1[vergleich] <> daten2[vergleich] THEN
- INC(fehler);
- UNTIL (bytes_read <> max_feldgroesse) OR
- (bytes_read <> bytes_read2);
- Close(inputfile);
- Close(inputfile2);
- WriteLn(' Fehler : ', fehler);
- IF bytes_read < bytes_read2 THEN
- WriteLn(' Die dekomprimierte Datei ist größer '+
- 'als das Original !')
- ELSE IF bytes_read2 < bytes_read THEN
- WriteLn(' Die dekomprimierte Datei ist '+
- 'kleiner als das Original !');
- WriteLn(' Die Datei wurde auf ',
- kompressionsgrad:4:1,
- ' Prozent verkleinert !');
- END;
- FreeMem(datenptr, max_memory);
- REPEAT UNTIL KeyPressed;
- END.
- (* ------------------------------------------------- *)
- (* Ende von TEST.PAS *)
-