/*========================================================================= FILENAME.CPP Author: Gary Liddon @ Created: Project: Purpose: Copyright (c) 1998 G R Liddon ===========================================================================*/ /*---------------------------------------------------------------------- Includes -------- */ /* Std Lib ------- */ /* Glib ---- */ #include "pak.h" /* Local ----- */ #include "vimage.h" /*---------------------------------------------------------------------- Tyepdefs && Defines ------------------- */ using namespace std; /*---------------------------------------------------------------------- Structure defintions -------------------- */ /*---------------------------------------------------------------------- Function Prototypes ------------------- */ /*---------------------------------------------------------------------- Vars ---- */ /*---------------------------------------------------------------------- Data ---- */ /*---------------------------------------------------------------------- Function: Purpose: Params: Returns: ---------------------------------------------------------------------- */ VRAMImage::VRAMImage(int NewWidthInTpages,int NewHeightInPixels) : VRAMData(NULL) { WidthInTpages=NewWidthInTpages; HeightInPixels=NewHeightInPixels; HeightInTPages=NewHeightInPixels / 256; if (!HeightInTPages) { aTPageHeight = 128; HeightInTPages = 1; } else { aTPageHeight = HeightInTPages * 256; } TPageSizeInBytes = 128 * aTPageHeight; WidthInBytes=WidthInTpages*128; VramAreaBytes=WidthInBytes * HeightInPixels; VRAMData=new u8[VramAreaBytes]; lbmData = new u8[WidthInTpages*256*HeightInPixels]; if (!lbmData) Error(ERM_OUTOFMEM); if (!VRAMData) Error(ERM_OUTOFMEM); memset(VRAMData,0,VramAreaBytes); m_doCompress=false; } /*---------------------------------------------------------------------- Function: Purpose: Params: Returns: ---------------------------------------------------------------------- */ VRAMImage::~VRAMImage(void) { if (lbmData) delete lbmData; if (VRAMData) delete VRAMData; } /*---------------------------------------------------------------------- Function: Purpose: Params: Returns: ---------------------------------------------------------------------- */ void VRAMImage::getTpData(unsigned int tp,std::vector & dest) const { const int TPAGES_IN_ALL =WidthInTpages * HeightInTPages; if (tp >= TPAGES_IN_ALL) Error(ERR_FATAL,"illegal tpage number"); int tpX,tpY; u8 const * srcTpData; dest.resize(TPageSizeInBytes); tpX=(tp%WidthInTpages)*128; tpY=(tp/WidthInTpages)*aTPageHeight; srcTpData=&VRAMData[tpX+tpY*WidthInBytes]; for (int x=0;x<128;x++) for (int y=0;y & Body) { try { GString Com; char TmpName[100]; char CompTmpName[100]; tmpnam(TmpName); tmpnam(CompTmpName); GString ComStr(CmdLine); ComStr.Replace("%1",TmpName); ComStr.Replace("%2",CompTmpName); ofstream Out; Out.open(TmpName,ios::binary|ios::trunc); if (Out) { int CompSize; Out.write((char const *)&Body[0],Body.size()); Out.close(); cout<<(char const *)ComStr<<"from "< tpageData; tpageData.resize(TPageSizeInBytes); for (int f=0;f tpageData; vector dataToWrite; tpageData.resize(TPageSizeInBytes); dataToWrite.resize(TPageSizeInBytes); for (int f=0;f myData; myData.resize(128*64); memcpy(&myData[0],srcData,128*64); #ifdef __USE_LZNP__ CompressMem("lznp %1 %2",myData); dataWriteSize=myData.size(); memcpy(&dataToWrite[0],&myData[0],dataWriteSize); #else dataWriteSize=PAK_findPakSize(&myData[0],128*64); PAK_doPak(&dataToWrite[0],&myData[0],128*64); #endif } else { dataWriteSize=128*64; memcpy(&dataToWrite[0],srcData,128*64); } for (int a=0;a<16;a++) printf("%i, ",(int)dataToWrite[a]); printf("\n"); Str.write((char *)(&dataToWrite[0]),dataWriteSize); } } else Str.write((char *)(VRAMData),VramAreaBytes); } /*---------------------------------------------------------------------- Function: Purpose: Params: Returns: ---------------------------------------------------------------------- */ void VRAMImage::PlotPal(SprPal const & PalToPlot) { TPRect Tp=PalToPlot.GetTPRect(); int W=WidthInTpages*256; W/=2; u16 * Addr=(u16 *)&VRAMData[Tp.Y*W+Tp.X/2]; std::vector OutWords; PalToPlot.MakePSXPal(OutWords); int f; for (f=0;f> 4; else lbmData[x+y*W]=VRAMData[(y*(W/2))+(x/2)]&0x0f; } ThisFr.SetFrame(lbmData,W,H,GazPalette); ThisFr.SaveLbm(Name); cout<<"Written "<