diff options
Diffstat (limited to '3dc/win95/CHNKTEXI.CPP')
| -rw-r--r-- | 3dc/win95/CHNKTEXI.CPP | 940 |
1 files changed, 0 insertions, 940 deletions
diff --git a/3dc/win95/CHNKTEXI.CPP b/3dc/win95/CHNKTEXI.CPP deleted file mode 100644 index 640f011..0000000 --- a/3dc/win95/CHNKTEXI.CPP +++ /dev/null @@ -1,940 +0,0 @@ -#include <windows.h> -#include <string.h> -#include <string.hpp> -#ifndef DB_LEVEL - #define DB_LEVEL 4 -#endif -#include "db.h" -#include "awTexLd.h" -#include "chnkload.hpp" -#include "chunkpal.hpp" - -#ifndef CL_SUPPORT_FASTFILE - #error "Please #define CL_SUPPORT_FASTFILE to 0 or 1 in projload.hpp" -#endif -#if CL_SUPPORT_FASTFILE - #include "ffstdio.h" -#endif - -#ifndef CL_SUPPORT_ALTTAB - #error "Please #define CL_SUPPORT_ALTTAB to 0 or 1 in projload.hpp" -#endif -#if CL_SUPPORT_ALTTAB - #include "alt_tab.h" -#endif - -#include "chnktexi.h" - -#if !defined(NDEBUG) && defined(_CPPRTTI) - #include <typeinfo.h> -#else - #define dynamic_cast static_cast -#endif - -char const * cl_pszGameMode = NULL; - -// used to determine if the display is palettized -// currently assuming that if this is <= 8 then all -// surfaces et. except d3d textures have a global palette -extern "C" extern int VideoModeColourDepth; - -// useful filename handling functions - -// returns pointer into string pointing to filename without dirname -template <class C> // C can be char or char const -static C * StripPath(C * n) -{ - C * rm = strrchr(n,':'); - if (rm) n = rm+1; - rm = strrchr(n,'/'); - if (rm) n = rm+1; - rm = strrchr(n,'\\'); - if (rm) n = rm+1; - - return n; -} - -// removes any .extension from filename by inserting null character -static void StripFileExtension(char * n) -{ - char * dotpos = strrchr(n,'.'); - if (dotpos) *dotpos = 0; -} - -static char * StripFileExtension(char const * n) -{ - char * nn = new char[strlen(n)+1]; - strcpy(nn,n); - StripFileExtension(nn); - return nn; -} - -// get the directory associated with the riff - free with delete[] -static char * RiffBasename(Chunk_With_Children * pEnvDataChunk) -{ - Chunk * pChunk = pEnvDataChunk->lookup_single_child("RIFFNAME"); - - if (pChunk) - { - RIF_Name_Chunk * pRifNameChunk = dynamic_cast<RIF_Name_Chunk *>(pChunk); - - const char * pszRifName = StripPath(pRifNameChunk->rif_name); - - char * pszBaseName = new char[strlen(pszRifName)+1]; - strcpy(pszBaseName,pszRifName); - StripFileExtension(pszBaseName); - - return pszBaseName; - } - const char * pszDefault = "empty"; - char * pszBaseName = new char [strlen(pszDefault)+1]; - strcpy(pszBaseName,pszDefault); - - return pszBaseName; -} - -#if CL_SUPPORT_FASTFILE -static inline bool IsFileInFastFile(char const * pszFileName) -{ - unsigned nLen; - return ffreadbuf(pszFileName,&nLen) ? true : false; -} -#endif - -static bool DoesFileExist(char const * pszFileName) -{ - DWORD dwFileAttributes = GetFileAttributes(pszFileName); - - if (0xffffffff == dwFileAttributes || dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) - return false; - else - return true; -} - -static char * GetPath(char * pszFileNameBuf, unsigned nBufSize, ImageDescriptor const & idsc, Chunk_With_Children * pEnvDataChunk, bool bGloballyPalettized) -{ - // set the name - char const * pszRawName = StripPath(idsc.filename); - char * pszName = new char[strlen(pszRawName)+1]; - strcpy(pszName,pszRawName); - StripFileExtension(pszName); - - // load this image - char const * pg0ext = ".PG0"; - - if (!bGloballyPalettized) - { - char const * dir2 = idsc.flags & IDSCF_SPRITE ? "Sprites\\" : idsc.flags & IDSCF_SUBSHAPE ? SubShps_Directory : ""; - char * riffname = RiffBasename(pEnvDataChunk); - char const * dir3 = idsc.flags & IDSCF_INCLUDED ? idsc.rifname : riffname; - if (nBufSize < strlen(GenTex_Directory)+strlen(dir2)+strlen(dir3)+1+strlen(pszName)+5) - { - db_log1("CL_LoadImageOnce(): ERROR: buffer not big enough for filename"); - pszFileNameBuf = NULL; - } - else - { - strcpy(pszFileNameBuf,GenTex_Directory); - strcat(pszFileNameBuf,dir2); - strcat(pszFileNameBuf,dir3); - strcat(pszFileNameBuf,"\\"); - strcat(pszFileNameBuf,pszName); - strcat(pszFileNameBuf,".BM0"); - } - delete[] riffname; - } - else - { - if (idsc.flags & IDSCF_FIXEDPALETTE) - { - char const * dir2 = idsc.fixrifname ? *idsc.fixrifname ? idsc.fixrifname : 0 : 0; - char const * dir3 = idsc.flags & IDSCF_SPRITE ? "Sprites\\" : ""; - char * riffname = RiffBasename(pEnvDataChunk); - char const * dir4 = idsc.flags & IDSCF_INCLUDED ? idsc.rifname : riffname; - if (nBufSize < strlen(FixTex_Directory)+(dir2 ? strlen(dir2)+1 : 0)+strlen(dir3)+strlen(dir4)+1+strlen(pszName)+5) - { - db_log1("CL_LoadImageOnce(): ERROR: buffer not big enough for filename"); - pszFileNameBuf = NULL; - } - else - { - strcpy(pszFileNameBuf,FixTex_Directory); - if (dir2) - { - strcat(pszFileNameBuf,dir2); - strcat(pszFileNameBuf,"\\"); - } - strcat(pszFileNameBuf,dir3); - strcat(pszFileNameBuf,dir4); - strcat(pszFileNameBuf,"\\"); - strcat(pszFileNameBuf,pszName); - strcat(pszFileNameBuf,pg0ext); - } - delete[] riffname; - } - else - { - char const * dir1 = cl_pszGameMode ? GameTex_Directory : ToolsTex_Directory; - char * dir2 = RiffBasename(pEnvDataChunk); - char const * dir4 = idsc.flags & IDSCF_SPRITE ? "Sprites\\" : ""; - char const * dir5 = idsc.flags & IDSCF_INCLUDED ? idsc.rifname : 0; - if (nBufSize < strlen(dir1)+strlen(dir2)+1+(cl_pszGameMode ? strlen(cl_pszGameMode)+1 : 0)+strlen(dir4)+(dir5 ? strlen(dir5)+1 : 0)+strlen(pszName)+5) - { - db_log1("CL_LoadImageOnce(): ERROR: buffer not big enough for filename"); - pszFileNameBuf = NULL; - } - else - { - strcpy(pszFileNameBuf,dir1); - strcat(pszFileNameBuf,dir2); - strcat(pszFileNameBuf,"\\"); - if (cl_pszGameMode) - { - strcat(pszFileNameBuf,cl_pszGameMode); - strcat(pszFileNameBuf,"\\"); - } - strcat(pszFileNameBuf,dir4); - if (dir5) - { - strcat(pszFileNameBuf,dir5); - strcat(pszFileNameBuf,"\\"); - } - strcat(pszFileNameBuf,pszName); - strcat(pszFileNameBuf,pg0ext); - } - delete[] dir2; - } - } - - if (pszFileNameBuf) - db_logf4(("\tfile expected to be '%s'",pszFileNameBuf)); - - delete[] pszName; - - return pszFileNameBuf; -} - -char * CL_GetImageFileName(char * pszDestBuf, unsigned nBufSize, char const * pszFileName, unsigned fFlagsEtc) -{ - db_assert1(pszFileName); - db_assert1(pszDestBuf); - db_assert1(nBufSize>0); - db_logf4(("CL_LoadImageOnce(): Getting the full pathname for %s",pszFileName)); - switch (fFlagsEtc & _LIO_PATHTYPEMASK) - { - case LIO_ABSOLUTEPATH: - db_log4("\t(which is an absolute path)"); - if (strlen(pszFileName)<nBufSize) - { - strcpy(pszDestBuf,pszFileName); - return pszDestBuf; - } - else - { - db_log1("CL_LoadImageOnce(): ERROR: buffer not large enough to hold filename"); - return NULL; - } - case LIO_RELATIVEPATH: - db_logf4(("\t(which is a path relative to %s or %s)", - FirstTex_Directory ? FirstTex_Directory : "<not-specified>", - SecondTex_Directory ? SecondTex_Directory : "<not-specified>")); - #define _GET_RELATIVE_PATH(pszDirectory,fnDoesExist) \ - if (pszDirectory) { \ - String str = pszDirectory; \ - if (str.length()) { \ - int chLast = str.get_at(str.length()-1); \ - if (chLast != '\\' && chLast != '/') \ - str += '\\'; \ - str += pszFileName; \ - if (fnDoesExist(str)) { \ - if (str.length() < nBufSize) { \ - strcpy(pszDestBuf,str); \ - return pszDestBuf; \ - } else { \ - db_log1("CL_LoadImageOnce(): ERROR: buffer not large enough to hold filename"); \ - return NULL; /* fail because the buffer isnt big enough */ \ - } } } } - - #if CL_SUPPORT_FASTFILE - _GET_RELATIVE_PATH(FirstTex_Directory,IsFileInFastFile) - _GET_RELATIVE_PATH(SecondTex_Directory,IsFileInFastFile) - #endif - #if !defined(CL_SUPPORTONLY_FASTFILE) || !CL_SUPPORTONLY_FASTFILE - _GET_RELATIVE_PATH(FirstTex_Directory,DoesFileExist) - _GET_RELATIVE_PATH(SecondTex_Directory,DoesFileExist) - #endif - db_log1("CL_LoadImageOnce(): ERROR: file not found in relative path"); - return NULL; - case LIO_RIFFPATH: - { - int enum_id = -1; // may be supported at a later date, valid when pszFileName is NULL - - bool bGloballyPalettized = VideoModeColourDepth <= 8 && (fFlagsEtc & _LIO_SURFTYPEMASK) != LIO_D3DTEXTURE; - - db_log4("\t(whose path is determined by the current .RIF file)"); - if (!Env_Chunk) - { - db_log1("CL_LoadImageOnce(): ERROR: no RIF file"); - return NULL; - } - Chunk * pChunk = Env_Chunk->lookup_single_child("REBENVDT"); - if (!pChunk) - { - db_log1("CL_LoadImageOnce(): ERROR: no environment data chunk"); - return NULL; - } - Chunk_With_Children * pEnvDataChunk = dynamic_cast<Chunk_With_Children *>(pChunk); - db_assert1(pEnvDataChunk); - - Environment_Game_Mode_Chunk * pGameModeChunk = NULL; - if (cl_pszGameMode) - { - if (*cl_pszGameMode) - { - List<Chunk *> listGmChunks; - pEnvDataChunk->lookup_child("GAMEMODE",listGmChunks); - - for (LIF<Chunk *> itGmChunks(&listGmChunks); !itGmChunks.done(); itGmChunks.next()) - { - Environment_Game_Mode_Chunk * pGmChunk = dynamic_cast<Environment_Game_Mode_Chunk *>(itGmChunks()); - db_assert1(pGmChunk); - if (pGmChunk->id_equals(cl_pszGameMode)) - { - pGameModeChunk = pGmChunk; - break; - } - } - - if (!pGameModeChunk) - db_logf3(("CL_LoadImageOnce(): WARNING: Game Mode '%s' not found",cl_pszGameMode)); - } - } - - char * pszName = StripFileExtension(StripPath(pszFileName)); - - char * pszSubName = 0; - if (pszFileName) - { - if (strchr(pszFileName,'\\')) - { - pszSubName = new char[strlen(pszFileName)+1]; - strcpy(pszSubName,pszFileName); - *strchr(pszSubName,'\\')=0; - } - else if (strchr(pszFileName,'/')) - { - pszSubName = new char[strlen(pszFileName)+1]; - strcpy(pszSubName,pszFileName); - *strchr(pszSubName,'/')=0; - } - } - - if (pGameModeChunk) - { - bool bShapeInGm = pszSubName ? false : true; - // Get the matching image 'Processor' chunk - Chunk * pMiChunk = pGameModeChunk->lookup_single_child("MATCHIMG"); - Matching_Images_Chunk * pMatchImageChunk = NULL; - - if (pMiChunk) - { - pMatchImageChunk = dynamic_cast<Matching_Images_Chunk *>(pMiChunk); - db_assert1(pMatchImageChunk); - } - - List<Chunk *> listRifChildChunks; - pGameModeChunk->lookup_child("RIFCHILD",listRifChildChunks); - - for (LIF<Chunk *> itRifChildChunks(&listRifChildChunks); !itRifChildChunks.done(); itRifChildChunks.next()) - { - RIF_Child_Chunk * pRifChildChunk = dynamic_cast<RIF_Child_Chunk *>(itRifChildChunks()); - db_assert1(pRifChildChunk); - - if (pszSubName) - { - if (_stricmp(pszSubName,pRifChildChunk->rifname) && (*pszSubName || *pRifChildChunk->filename)) - continue; - bShapeInGm = true; - } - - for (LIF<BMP_Flags> itBmpFlags(&pRifChildChunk->bmps); !itBmpFlags.done(); itBmpFlags.next()) - { - BMP_Flags bmpfTemp(itBmpFlags()); - StripFileExtension(bmpfTemp.filename); - - if (pszFileName ? !_stricmp(pszName,StripPath(bmpfTemp.filename)) : enum_id == bmpfTemp.enum_id) - { - // select image descriptor - ImageDescriptor const idsc - ( - *pRifChildChunk->filename ? - (IDscFlags)((bmpfTemp.flags & ChunkBMPFlag_FixedPalette ? - IDSCF_FIXEDPALETTE - : - IDSCF_0) - |IDSCF_INCLUDED) - : - IDSCF_0, - itBmpFlags().filename, - *pRifChildChunk->filename ? pRifChildChunk->rifname : 0 - ); - ImageDescriptor const * pIdsc = &idsc; - - if (pMatchImageChunk) pIdsc = &pMatchImageChunk->GetLoadImage(idsc); - else db_logf3(("CL_LoadImageOnce(): WARNING! no rule to find matching images in game mode '%s'\n",pGameModeChunk->header->mode_identifier)); - - // load this image - if (GetPath(pszDestBuf,nBufSize,*pIdsc,pEnvDataChunk,bGloballyPalettized)) - { - if (pszSubName) - { - delete[] pszSubName; - } - delete[] pszName; - return pszDestBuf; - } - } - } - } - - List<Chunk *> listExtShapes; - pGameModeChunk->lookup_child("SHBMPNAM",listExtShapes); - - for (LIF<Chunk *> itExtShapes(&listExtShapes); !itExtShapes.done(); itExtShapes.next()) - { - External_Shape_BMPs_Store_Chunk * pShapeBmpsChunk = dynamic_cast<External_Shape_BMPs_Store_Chunk *>(itExtShapes()); - db_assert1(pShapeBmpsChunk); - - if (pszSubName) - if (_stricmp(pszSubName,pShapeBmpsChunk->shapename) && *pszSubName) - continue; - - for (LIF<BMP_Name> itBmpNames(&pShapeBmpsChunk->bmps); !itBmpNames.done(); itBmpNames.next()) - { - BMP_Name bmpnTemp(itBmpNames()); - StripFileExtension(bmpnTemp.filename); - - if (pszFileName ? !_stricmp(pszName,StripPath(bmpnTemp.filename)) : enum_id == bmpnTemp.enum_id) - { - - // select image descriptor - ImageDescriptor const idsc - ( - (IDscFlags)((bmpnTemp.flags & ChunkBMPFlag_FixedPalette ? - IDSCF_FIXEDPALETTE - : - IDSCF_0) - |(pShapeBmpsChunk->GetExtendedData()->flags & GBF_SPRITE ? - IDSCF_SPRITE - : - IDSCF_SUBSHAPE) - |IDSCF_INCLUDED), - itBmpNames().filename, - pShapeBmpsChunk->shapename, - bmpnTemp.flags & ChunkBMPFlag_FixedPalette ? pShapeBmpsChunk->rifname : 0 - ); - ImageDescriptor const * pIdsc = &idsc; - - if (pMatchImageChunk) pIdsc = &pMatchImageChunk->GetLoadImage(idsc); - else db_logf3(("WARNING! no rule to find matching images in game mode %s\n",pGameModeChunk->header->mode_identifier)); - - // load this image - if (GetPath(pszDestBuf,nBufSize,*pIdsc,pEnvDataChunk,bGloballyPalettized)) - { - if (pszSubName) - { - delete[] pszSubName; - } - delete[] pszName; - return pszDestBuf; - } - } - } - } - - if (pszSubName) - { - if (!bShapeInGm) - db_logf3(("CL_LoadImageOnce(): WARNING! shape/sprite %s not found in this RIF file\n",pszSubName)); - else - db_logf3(("CL_LoadImageOnce(): WARNING! shape/sprite %s does not appear to list %s\n",pszSubName,pszName)); - } - - } - - List<Chunk *> listMatchImageChunk; - pEnvDataChunk->lookup_child("MATCHIMG",listMatchImageChunk); - - Matching_Images_Chunk * pMicFix = NULL; - Matching_Images_Chunk * pMicNorm = NULL; - - for (LIF<Chunk *> itMatchImageChunk(&listMatchImageChunk); !itMatchImageChunk.done(); itMatchImageChunk.next()) - { - Matching_Images_Chunk * pMatchImageChunk = dynamic_cast<Matching_Images_Chunk *>(itMatchImageChunk()); - db_assert1(pMatchImageChunk); - if (pMatchImageChunk->flags & MICF_FIXEDPALETTE) - pMicFix = pMatchImageChunk; - else - pMicNorm = pMatchImageChunk; - } - - List<Chunk_With_Children *> listShapesSprites; - - List<Chunk *> listShapes; - Env_Chunk->lookup_child("REBSHAPE",listShapes); - for (LIF<Chunk *> itShapes(&listShapes); !itShapes.done(); itShapes.next()) - { - Shape_Chunk * pShapeChunk = dynamic_cast<Shape_Chunk *>(itShapes()); - db_assert1(pShapeChunk); - Chunk * pSxfnChunk = pShapeChunk->lookup_single_child("SHPEXTFL"); - if (pSxfnChunk) - { - Shape_External_File_Chunk * pShpExtFnameChunk = dynamic_cast<Shape_External_File_Chunk *>(pSxfnChunk); - db_assert1(pShpExtFnameChunk); - listShapesSprites.add_entry(pShpExtFnameChunk); - } - } - Chunk * pSprChunk = Env_Chunk->lookup_single_child("RSPRITES"); - if (pSprChunk) - { - Chunk_With_Children * pSpritesChunk = dynamic_cast<Chunk_With_Children *>(pSprChunk); - db_assert1(pSpritesChunk); - - List<Chunk *> listSprHeadChunks; - pSpritesChunk->lookup_child("SPRIHEAD",listSprHeadChunks); - - for (LIF<Chunk *> itSprites(&listSprHeadChunks); !itSprites.done(); itSprites.next()) - { - Chunk_With_Children * pSpriteHead = dynamic_cast<Chunk_With_Children *>(itSprites()); - db_assert1(pSpriteHead); - listShapesSprites.add_entry(pSpriteHead); - } - } - - int bShapeFound = pszSubName ? false : true; - - for (LIF<Chunk_With_Children *> itShapesSprites(&listShapesSprites); !itShapesSprites.done(); itShapesSprites.next()) - { - char * pszSubRifName = RiffBasename(itShapesSprites()); - - if (pszSubName) - { - if (_stricmp(pszSubRifName,pszSubName)) // must match shapes name exactly - { - delete[] pszSubRifName; - continue; - } - bShapeFound = true; - } - - Chunk * pBmpLstStChunk = itShapesSprites()->lookup_single_child("BMPLSTST"); - if (pBmpLstStChunk) - { - Bitmap_List_Store_Chunk * pBmpListStoreChunk = dynamic_cast<Bitmap_List_Store_Chunk *>(pBmpLstStChunk); - db_assert1(pBmpListStoreChunk); - - for (LIF<BMP_Name> itBmpName(&pBmpListStoreChunk->bmps); !itBmpName.done(); itBmpName.next()) - { - BMP_Name bmpnTemp(itBmpName()); - StripFileExtension(bmpnTemp.filename); - - if (pszFileName ? !_stricmp(pszName,StripPath(bmpnTemp.filename)) : enum_id == bmpnTemp.enum_id) - { - - // select image descriptor - char * pszRifName = RiffBasename(pEnvDataChunk); - ImageDescriptor const idsc - ( - (IDscFlags)((bmpnTemp.flags & ChunkBMPFlag_FixedPalette ? - IDSCF_FIXEDPALETTE - : - IDSCF_0) - |(pBmpListStoreChunk->GetExtendedData()->flags & GBF_SPRITE ? - IDSCF_SPRITE - : - IDSCF_SUBSHAPE) - |IDSCF_INCLUDED), - itBmpName().filename, - pszSubRifName, - bmpnTemp.flags & ChunkBMPFlag_FixedPalette ? pszRifName : 0 - ); - ImageDescriptor const * pIdsc = &idsc; - delete[] pszRifName; - - if (bmpnTemp.flags & ChunkBMPFlag_FixedPalette) - { - if (pMicFix) pIdsc = &pMicFix->GetLoadImage(idsc); - else db_log3("CL_LoadImageOnce(): WARNING! no rule to find fixed palette matching images in environment data\n"); - } - else - { - if (pMicNorm) pIdsc = &pMicNorm->GetLoadImage(idsc); - else db_log3("CL_LoadImageOnce(): WARNING! no rule to find matching images in environment data (interface engine?)\n"); - } - - // load this image - if (GetPath(pszDestBuf,nBufSize,*pIdsc,pEnvDataChunk,bGloballyPalettized)) - { - delete[] pszSubRifName; - if (pszSubName) - { - delete[] pszSubName; - } - delete[] pszName; - return pszDestBuf; - } - } - } - } - delete[] pszSubRifName; - } - - if (pszSubName) - { - if (!bShapeFound) - db_logf3(("CL_LoadImageOnce(): WARNING! shape/sprite %s not found in this RIF file\n",pszSubName)); - else - db_logf3(("CL_LoadImageOnce(): WARNING! shape/sprite %s does not appear to list %s\n",pszSubName,pszName)); - delete[] pszSubName; - } - - // not found in game textures, so look in default - - else // but only if there is no virtual shape directory - { - Chunk * pBmpNames = pEnvDataChunk->lookup_single_child("BMPNAMES"); - if (pBmpNames) - { - Global_BMP_Name_Chunk * pGbnc = dynamic_cast<Global_BMP_Name_Chunk *>(pBmpNames); - db_assert1(pGbnc); - - for (LIF<BMP_Name> itBmpName(&pGbnc->bmps); !itBmpName.done(); itBmpName.next()) - { - BMP_Name bmpnTemp(itBmpName()); - StripFileExtension(bmpnTemp.filename); - - if (pszFileName ? !_stricmp(pszName,StripPath(bmpnTemp.filename)) : enum_id == bmpnTemp.enum_id) - { - // select image descriptor - ImageDescriptor const idsc (bmpnTemp.flags & ChunkBMPFlag_FixedPalette ? IDSCF_FIXEDPALETTE : IDSCF_0, itBmpName().filename); - ImageDescriptor const * pIdsc = &idsc; - - if (bmpnTemp.flags & ChunkBMPFlag_FixedPalette) - { - if (pMicFix) pIdsc = &pMicFix->GetLoadImage(idsc); - else db_log3("CL_LoadImageOnce(): WARNING! no rule to find fixed palette matching images in environment data\n"); - } - else - { - if (pMicNorm) pIdsc = &pMicNorm->GetLoadImage(idsc); - else db_log3("CL_LoadImageOnce(): WARNING! no rule to find matching images in environment data (interface engine?)\n"); - } - - // load this image - if (GetPath(pszDestBuf,nBufSize,*pIdsc,pEnvDataChunk,bGloballyPalettized)) - { - delete[] pszName; - return pszDestBuf; - } - } - } - } - } - delete[] pszName; - return NULL; - } - default: // invalid arguments - db_log1("CL_LoadImageOnce(): ERROR: invalid parameter passed to CL_GetImageFileName()"); - return NULL; - } -} - -extern "C" extern void CheckForWindowsMessages(void); - -int CL_LoadImageOnce(char const * pszFileName, unsigned fFlagsEtc) -{ - // safe to handle windows messages at this point (I think - JCWH) - CheckForWindowsMessages(); - - // get the filename - char szBuf[MAX_PATH]; - if (!CL_GetImageFileName(szBuf,sizeof szBuf/sizeof szBuf[0],pszFileName,fFlagsEtc)) - { - db_log1("CL_LoadImageOnce(): ERROR: unable to determine path of file"); - return GEI_NOTLOADED; - } - - db_logf4(("\tLoading '%s'",szBuf)); - - // already loaded ? - int iExistingImage = GetExistingImageNum(szBuf); - if (GEI_NOTLOADED != iExistingImage) - { - db_logf4(("\tImage already loaded to image number %d",iExistingImage)); - return iExistingImage; - } - - // what flags do we want? - unsigned fAwLoad = AW_TLF_DEFAULT; - if (fFlagsEtc & LIO_VIDMEM) - fAwLoad |= AW_TLF_VIDMEM; - if (fFlagsEtc & LIO_TRANSPARENT) - fAwLoad |= AW_TLF_TRANSP; - if (fFlagsEtc & LIO_CHROMAKEY) - fAwLoad |= AW_TLF_CHROMAKEY; - if (fFlagsEtc & LIO_LOADMIPMAPS) - db_log1("CL_LoadImageOnce(): WARNING: mip maps not supported yet - will not be created/loaded"); - - // what are we loading into ? - switch (fFlagsEtc & _LIO_SURFTYPEMASK) - { - case LIO_CHIMAGE: - { - db_log1("CL_LoadImageOnce(): WARNING: having to call LoadImageCH()"); - IMAGEHEADER * pImageHdr = GetImageHeader(); - db_assert1(pImageHdr); - memset(pImageHdr,0,sizeof(IMAGEHEADER)); - if (LoadImageCH(szBuf,pImageHdr)) - return NumImages-1; - else - { - db_log1("CL_LoadImageOnce(): ERROR: LoadImageCH() failed"); - return GEI_NOTLOADED; - } - } - case LIO_DDSURFACE: - { - #if CL_SUPPORT_FASTFILE - unsigned nFastFileLen; - void const * pFastFileData = ffreadbuf(szBuf,&nFastFileLen); - if (pFastFileData) - { - db_log4("\tfile is in a fast file"); - unsigned nWidth, nHeight; - AW_BACKUPTEXTUREHANDLE hBackup = NULL; - DDSurface * pSurface = - AwCreateSurface - ( - fFlagsEtc & LIO_RESTORABLE ? "pxfXYB" : "pxfXY", - pFastFileData, - nFastFileLen, - fAwLoad, - &nWidth, - &nHeight, - &hBackup - ); - if (pSurface) - { - IMAGEHEADER * pImageHdr = GetImageHeader(); - db_assert1(pImageHdr); - memset(pImageHdr,0,sizeof(IMAGEHEADER)); - pImageHdr->ImageWidth = nWidth; - pImageHdr->ImageHeight = nHeight; - db_assert1(sizeof pImageHdr->ImageName / sizeof pImageHdr->ImageName[0] > strlen(szBuf)); - strcpy(pImageHdr->ImageName,szBuf); - pImageHdr->DDSurface = pSurface; - pImageHdr->hBackup = hBackup; - db_logf4(("\tloaded to image number %d",NumImages-1)); - #if CL_SUPPORT_ALTTAB - if (fFlagsEtc & LIO_RESTORABLE) - #ifdef NDEBUG - ATIncludeSurface(pSurface,hBackup); - #else - { - char szDbInf[512]; - sprintf(szDbInf,"Name \"%s\" Number %d",szBuf,NumImages-1); - ATIncludeSurfaceDb(pSurface,hBackup,szDbInf); - } - #endif - #endif // CL_SUPPORT_ALTTAB - return NumImages-1; - } - else - { - db_log1("CL_LoadImageOnce(): ERROR copying data to surface"); - return GEI_NOTLOADED; - } - } - else - #endif // CL_SUPPORT_FASTFILE - { - #if !defined(CL_SUPPORTONLY_FASTFILE) || !CL_SUPPORTONLY_FASTFILE - db_log4("\tloading the actual file"); - unsigned nWidth, nHeight; - AW_BACKUPTEXTUREHANDLE hBackup = NULL; - DDSurface * pSurface = - AwCreateSurface - ( - fFlagsEtc & LIO_RESTORABLE ? "sfXYB" : "sfXY", - &szBuf[0], - fAwLoad, - &nWidth, - &nHeight, - &hBackup - ); - if (pSurface) - { - IMAGEHEADER * pImageHdr = GetImageHeader(); - db_assert1(pImageHdr); - memset(pImageHdr,0,sizeof(IMAGEHEADER)); - pImageHdr->ImageWidth = nWidth; - pImageHdr->ImageHeight = nHeight; - db_assert1(sizeof pImageHdr->ImageName / sizeof pImageHdr->ImageName[0] > strlen(szBuf)); - strcpy(pImageHdr->ImageName,szBuf); - pImageHdr->DDSurface = pSurface; - pImageHdr->hBackup = hBackup; - db_logf4(("\tloaded to image number %d",NumImages-1)); - db_logf4(("\t\tsurface:%p",pSurface)); - #if CL_SUPPORT_ALTTAB - if (fFlagsEtc & LIO_RESTORABLE) - #ifdef NDEBUG - ATIncludeSurface(pSurface,hBackup); - #else - { - char szDbInf[512]; - sprintf(szDbInf,"Name \"%s\" Number %d",szBuf,NumImages-1); - ATIncludeSurfaceDb(pSurface,hBackup,szDbInf); - } - #endif - #endif // CL_SUPPORT_ALTTAB - return NumImages-1; - } - else - { - db_log1("CL_LoadImageOnce(): ERROR copying data to surface"); - return GEI_NOTLOADED; - } - #elif !CL_SUPPORT_FASTFILE - #error "CL_SUPPORTONLY_FASTFILE set but CL_SUPPORT_FASTFILE not set" - #endif // !CL_SUPPORTONLY_FASTFILE - } - //db_msg1("THIS CODE SHOULD BE UNREACHABLE"); - } - case LIO_D3DTEXTURE: - { - fAwLoad |= AW_TLF_COMPRESS; // required on some cards!! - #if CL_SUPPORT_FASTFILE - unsigned nFastFileLen; - void const * pFastFileData = ffreadbuf(szBuf,&nFastFileLen); - if (pFastFileData) - { - db_log4("\tfile is in a fast file"); - unsigned nWidth, nHeight; - AW_BACKUPTEXTUREHANDLE hBackup = NULL; - D3DTexture * pTexture = - AwCreateTexture - ( - fFlagsEtc & LIO_RESTORABLE ? "pxfWHB" : "pxfWH", - pFastFileData, - nFastFileLen, - fAwLoad, - &nWidth, - &nHeight, - &hBackup - ); - if (pTexture) - { - IMAGEHEADER * pImageHdr = GetImageHeader(); - db_assert1(pImageHdr); - memset(pImageHdr,0,sizeof(IMAGEHEADER)); - pImageHdr->ImageWidth = nWidth; - pImageHdr->ImageHeight = nHeight; - db_assert1(sizeof pImageHdr->ImageName / sizeof pImageHdr->ImageName[0] > strlen(szBuf)); - strcpy(pImageHdr->ImageName,szBuf); - pImageHdr->D3DTexture = pTexture; - pImageHdr->hBackup = hBackup; - db_logf4(("\tloaded to image number %d",NumImages-1)); - - /* KJL 16:05:50 26/02/98 - attempt to get a texture handle */ - { - int gotTextureHandle = GetTextureHandle(pImageHdr); - db_assert1(gotTextureHandle==TRUE); - } - - #if CL_SUPPORT_ALTTAB - if (fFlagsEtc & LIO_RESTORABLE) - #ifdef NDEBUG - ATIncludeTexture(pTexture,hBackup); - #else - { - char szDbInf[512]; - sprintf(szDbInf,"Name \"%s\" Number %d",szBuf,NumImages-1); - ATIncludeTextureDb(pTexture,hBackup,szDbInf); - } - #endif - #endif // CL_SUPPORT_ALTTAB - return NumImages-1; - } - else - { - db_log1("CL_LoadImageOnce(): ERROR copying data to texture"); - return GEI_NOTLOADED; - } - } - else - #endif // CL_SUPPORT_FASTFILE - { - #if !defined(CL_SUPPORTONLY_FASTFILE) || !CL_SUPPORTONLY_FASTFILE - db_log4("\tloading the actual file"); - unsigned nWidth, nHeight; - AW_BACKUPTEXTUREHANDLE hBackup = NULL; - D3DTexture * pTexture = - AwCreateTexture - ( - fFlagsEtc & LIO_RESTORABLE ? "sfWHB" : "sfWH", - &szBuf[0], - fAwLoad, - &nWidth, - &nHeight, - &hBackup - ); - if (pTexture) - { - IMAGEHEADER * pImageHdr = GetImageHeader(); - db_assert1(pImageHdr); - memset(pImageHdr,0,sizeof(IMAGEHEADER)); - pImageHdr->ImageWidth = nWidth; - pImageHdr->ImageHeight = nHeight; - db_assert1(sizeof pImageHdr->ImageName / sizeof pImageHdr->ImageName[0] > strlen(szBuf)); - strcpy(pImageHdr->ImageName,szBuf); - pImageHdr->D3DTexture = pTexture; - pImageHdr->hBackup = hBackup; - db_logf4(("\tloaded to image number %d",NumImages-1)); - - /* KJL 16:05:50 26/02/98 - attempt to get a texture handle */ - { - int gotTextureHandle = GetTextureHandle(pImageHdr); - db_assert1(gotTextureHandle==TRUE); - } - - #if CL_SUPPORT_ALTTAB - if (fFlagsEtc & LIO_RESTORABLE) - #ifdef NDEBUG - ATIncludeTexture(pTexture,hBackup); - #else - { - char szDbInf[512]; - sprintf(szDbInf,"Name \"%s\" Number %d",szBuf,NumImages-1); - ATIncludeTextureDb(pTexture,hBackup,szDbInf); - } - #endif - #endif // CL_SUPPORT_ALTTAB - return NumImages-1; - } - else - { - db_log1("CL_LoadImageOnce(): ERROR copying data to texture"); - return GEI_NOTLOADED; - } - #elif !CL_SUPPORT_FASTFILE - #error "CL_SUPPORTONLY_FASTFILE set but CL_SUPPORT_FASTFILE not set" - #endif // !CL_SUPPORTONLY_FASTFILE - } - //db_msg1("THIS CODE SHOULD BE UNREACHABLE"); - } - default: - db_log1("CL_LoadImageOnce(): ERROR: Invalid destination surface specification"); - return GEI_NOTLOADED; - } -} - |
