{ > I heard something in this echo about someone having Pascal source to view > .PCX Files and I would appreciate if they would re-post the source if it's > not too long or tell me where I can get it. I am also looking For some > good COMM routines For Pascal, anyone have any or no where I can get some? The routine I have will only work With 320x200x256c images. For all those Pascal Programmers who just want something simple to display a 320x200x256 colour PCX File on the screen here it is. This was a direct translation from the C source code of PCXVIEW written by Lee Hamel (Patch), Avalanche coder. I removed the Inline assembly code so that you beginners can see what was going on behind those routines. Norman Yen - Infinite Dreams BBS - August 11, 1993 } Type pcxheader_rec = Record manufacturer : Byte; version : Byte; encoding : Byte; bits_per_pixel : Byte; xmin, ymin : Word; xmax, ymax : Word; hres, vres : Word; palette : Array [0..47] of Byte; reserved : Byte; colour_planes : Byte; Bytes_per_line : Word; palette_Type : Word; filler : Array [0..57] of Byte; end; Var header : pcxheader_rec; width, depth : Word; Bytes : Word; palette : Array [0..767] of Byte; f : File; c : Byte; Procedure Read_PCX_Line(vidoffset : Word); Var c, run : Byte; n : Integer; w : Word; begin n := 0; While (n < Bytes) do begin blockread (f, c, 1); { if it's a run of Bytes field } if ((c and 192) = 192) then begin { and off the high bits } run := c and 63; { get the run Byte } blockread (f, c, 1); n := n + run; For w := 0 to run - 1 do begin mem[$a000 : vidoffset] := c; inc(vidoffset); end; end else begin n := n + 1; mem[$a000 : vidoffset] := c; inc(vidoffset); end; end; end; Procedure Unpack_PCX_File; Var i : Integer; begin For i := 0 to 767 do palette[i] := palette[i] shr 2; Asm mov ax, 13h int 10h mov ax, 1012h xor bx, bx mov cx, 256 mov dx, offset palette int 10h end; For i := 0 to depth - 1 do Read_PCX_Line(i * 320); Asm xor ax, ax int 16h mov ax, 03h int 10h end; end; begin if (paramcount > 0) then begin assign(f, paramstr(1)); reset(f, 1); blockread (f, header, sizeof(header)); if (header.manufacturer = 10) and (header.version = 5) and (header.bits_per_pixel = 8) and (header.colour_planes = 1) then begin seek(f, Filesize(f) - 769); blockread(f, c, 1); if (c = 12) then begin blockread(f, palette, 768); seek(f, 128); width := header.xmax - header.xmin + 1; depth := header.ymax - header.ymin + 1; Bytes := header.Bytes_per_line; Unpack_PCX_File; end else Writeln('Error reading palette.'); end else Writeln('Not a 256 colour PCX File.'); close(f); end else Writeln('No File name specified.'); end.