home *** CD-ROM | disk | FTP | other *** search
/ Collection of Hack-Phreak Scene Programs / cleanhpvac.zip / cleanhpvac / PHRO.ZIP / PCX.PAS < prev    next >
Pascal/Delphi Source File  |  1995-07-21  |  1KB  |  68 lines

  1. {   PCX Decompression Routine Source FIle      }
  2. {   PHRO!                                      }
  3. {   Phred/OTM                                  }
  4. {   achalfin@uceng.uc.edu                      }
  5. {   DO NOT DISTRIBUTE THIS SOURCE FILE         }
  6. Unit PCX;
  7.  
  8. Interface
  9.  
  10. Var
  11.   PhirePCXPtr : Pointer;
  12.   BillClintonPtr : Pointer;
  13.  
  14. Procedure DeCompressPCX(Var Buffer, Orig);
  15.  
  16. Implementation
  17.  
  18. {$F+}
  19. {$L FirePcx.Obj}
  20. Procedure PhirePcx; External;
  21.  
  22. {$L Bill.Obj}
  23. Procedure BillClinton; External;
  24. {$F-}
  25.  
  26.  
  27. Procedure DeCompressPCX(Var Buffer, Orig);
  28.  
  29. Var
  30.   Size : Word;
  31.   TextureOffset : Word;
  32.   RunLen : Byte;
  33.   Value : Byte;
  34.   PCXOffset : Word;
  35.   PCXSeg : Word;
  36.  
  37. Begin
  38.   PCXSeg := Seg(Orig);
  39.   PCXOffset := Ofs(Orig)+128;
  40.   TextureOffset := 0;
  41.   Size := 65535;
  42.   While TextureOffset < Size do
  43.     Begin
  44.       RunLen := Mem[PcxSeg:PcxOffset];
  45.       Inc(PcxOffset);
  46.       If (RunLen and $C0) = $C0
  47.         Then Begin
  48.           RunLen := RunLen And $3f;
  49.           Value := Mem[PCXSeg:PcxOffset];
  50.           Inc(PcxOffset);
  51.         End
  52.         Else Begin
  53.           Value := RunLen;
  54.           RunLen := 1;
  55.         End;
  56.       While (RunLen >= 1) and (TextureOffset < Size) do
  57.         Begin
  58.           Mem[Seg(Buffer):Ofs(Buffer)+TextureOffset] := Value;
  59.           TextureOffset := TextureOffset + 1;
  60.           RunLen := RunLen - 1;
  61.         End;
  62.     End;
  63. End;
  64.  
  65. Begin
  66.   PhirePCXPtr := @PhirePCX;
  67.   BillClintonPtr := @BillClinton;
  68. End.