home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* SHOWPCX.PAS *)
- (* ------------------------------------------------------ *)
- {$R-,S-,I-,D-,V-,B-,N-}
- PROGRAM ShowPCX;
-
- USES Crt, Graph, PCXTools;
-
- VAR
- Header : PCX_HEADER;
- screen, col : BYTE;
- s : STRING;
-
- PROCEDURE EncodePCX(VAR Header : PCX_HEADER;
- name : STRING);
- VAR
- F : FILE;
- I, J : INTEGER;
- l : WORD;
- n, w : BYTE;
- P : POINTER;
- BEGIN
- Assign(F, name);
- Reset(F, 1);
- Seek(f, 128);
- SetEgaReg(5, 0);
- SetEgaReg(1, 0);
- FOR L := 0 TO Header.ymax-Header.ymin DO BEGIN
- FOR J := 0 TO Header.Planes-1 DO BEGIN
- FOR I:= 0 TO Header.BytePerLine-1 DO BEGIN
- z[J]^[I] := GetPCXByte(F);
- END;
- END;
- CASE screen OF
- 0 : BEGIN { alle Planes anzeigen }
- P := Ptr($A000, L*80);
- FOR J := 0 TO Header.Planes-1 DO BEGIN
- SetWritePlane(J);
- Move(Z[J]^, P^, 80);
- END;
- END;
- 1 : BEGIN { nur das erste Plane wird geschrieben }
- P := Ptr($B800, WORD((L AND 3) SHL 13 + 90 *
- (L SHR 2)));
- Move(Z[0]^, P^, 80);
- END;
- 2 : BEGIN { nur das erste Plane wird geschrieben }
- P := Ptr($B800, WORD((L AND 1) SHL 13 + 80 *
- (L SHR 1)));
- Move(Z[0]^, P^, 80);
- END;
- END;
- END;
- Close(F);
- SetWritePlane($F);
- END;
-
- VAR
- ch : CHAR;
- gm, gd : INTEGER;
- name : STRING;
-
- {$F+}
- PROCEDURE ExitProc;
- VAR
- I : INTEGER;
- BEGIN
- FOR I := 0 TO Header.planes-1 DO
- FreeMem(z[I], Header.BytePerLine);
- END;
- {$F-}
-
- BEGIN
- DetectGraph(gd, gm);
- CASE gd OF
- 3,4,5,9 : Screen := 0;
- 7 : Screen := 1;
- 1,2 : Screen := 2;
- ELSE BEGIN
- WriteLn('Ihre Grafikkarte wird nicht',
- 'unterstützt.');
- Halt(0);
- END;
- END;
- IF ParamCount >= 1 THEN name := ParamStr(1)
- ELSE Halt(0);
- IF POS('.', name) = 0 THEN name := name + '.PCX';
- gd := GetPCXHeader(Header, name);
- IF gd <> 0 THEN BEGIN
- WriteLn('Fehler beim Lesen der PCX-Datei');
- Halt(0);
- END;
- IF (Header.Bits > 1) AND (gd <>1) AND (gd<>2) THEN BEGIN
- WriteLn(name, ' ist vermutlich eine CGA-PCX-Datei,');
- WriteLn('die ich nur auf einem',
- 'CGA-Bildschirm anzeigen kann.');
- Halt(0);
- END;
- IF (Header.Bits = 1) AND ((gd =1) OR (gd=2)) THEN BEGIN
- WriteLn(name, ' ist vermutlich eine',
- 'EGA/VGA/Hercules-PCX-Datei,');
- WriteLn('die ich nur auf diesen',
- 'Bildschirmen anzeigen kann.');
- Halt(0);
- END;
- FOR gd := 0 TO Header.planes DO
- GetMem(z[gd], Header.BytePerLine);
- gd := Detect;
- InitGraph(gd, gm, '');
- IF GraphResult <> 0 THEN BEGIN
- WriteLn('Fehler beim Umschalten in die Grafik');
- Halt(0);
- END;
- EncodePCX(Header, name);
- REPEAT UNTIL KeyPressed;
- CloseGraph;
- END.
- (* ------------------------------------------------------ *)
- (* Ende von SHOWPCX.PAS *)