[Back to GRAPHICS SWAG index]  [Back to Main SWAG index]  [Original]

Program Display;

Uses Crt;

procedure loadpcx(fname:string);
var f             : file ;
    buf           : array[1..16] of byte;
    pcxdata,palet : pointer ;
    pcxlen        : word;

begin
   assign(f,fname);
   {$I-}
   reset(f,1);
   if ioresult<>0 then exit; { couldnt open file}
   blockread(f,buf,16);
   if ioresult<>0 then exit; { Read error }
   if buf[1]<>$0a then exit;  {no pcx file}
   if (buf[2]<>5) or (buf[4]<>8) then exit; {no 256 colors}
   if (buf[13]<>$40) or (buf[14]<>$01) or (buf[15]<>$c8) or (buf[16]<>0)
   then Exit;

   pcxlen:=filesize(f)-128-768;
   getmem(pcxdata,pcxlen);
   seek(f,128);
   blockread(f,pcxdata^,pcxlen);
   if ioresult<>0 then exit;
   {$I+}
{---- read body ----}
   asm
     push ds
     Mov DI,$A000
     Mov ES,DI
     And Di,0
     lds si,pcxdata
     mov bx,di
     add bx,64000
@nextpcxbyte:
     mov al,[si]
     inc si
     mov cl,al
     and cl,$c0
     cmp cl,$c0
     je @herhaling
     mov cl,1
@verder:
     rep stosb
     cmp di,bx
     je @end
     jmp @nextpcxbyte
@herhaling:
     mov cl,al
     and cl,$3f
     mov al,[si] ; inc si
     jmp @verder
@end: pop ds
   end;

{-------- read palette --------}
      seek(f,filesize(f)-768);
      GetMem(palet,768);
      blockread(f,palet^,768);
      if ioresult<>0 then exit;
      asm
        les di,palet
           mov ax,768
        mov cl,2
       @1:
        shr es:[di],cl
        inc di
        dec ax
           jnz @1
        mov ax,$1012
        mov bx,0
        mov cx,255;
        les dx,palet
        int $10
      end;
   close(f);
end;

Begin

  Asm Mov AX,$13; Int $10 End;

  IF Paramcount > 0 THEN
     BEGIN
     LoadPcx(ParamStr(1));
     ReadLn;
     END;

  Asm Mov AX,$3; Int $10 End;

End.


[Back to GRAPHICS SWAG index]  [Back to Main SWAG index]  [Original]