HRESULT WINAPI GameEnv::OpenEnv(const tstring whichPath) { if (NULL != pInstance) //检查是否已经初始化 { mainEnv = pInstance; return E_HANDLE; } if (_T('\\') == whichPath[whichPath.length() - 1]) //检查结尾反斜杠符 { ErrorHandler(ERROR_RES_Unknown, _T(__FUNCTION__)); return E_FAIL; } if (!IsFolderExist(whichPath)) //检查路径是否存在 { ErrorHandler(ERROR_RES_MissingPath, _T(__FUNCTION__)); return E_FAIL; } PGameRes pRes = OpenResFiles(whichPath); if (NULL != pRes) //检查资源文件完整性 { pInstance = new GameEnv(pRes); mainEnv = pInstance; return S_OK; } return E_FAIL; }
static bool OpenResFileInfo( ExeType type ) /*****************************************/ { bool error; ExtraRes *curfile; char *name; if( ( type == EXE_TYPE_NE_WIN || type == EXE_TYPE_NE_OS2 ) && CmdLineParms.ExtraResFiles != NULL ) { RcError( ERR_FR_NOT_VALID_FOR_WIN ); return( false ); } Pass2Info.AllResFilesOpen = true; if( CmdLineParms.NoResFile ) { Pass2Info.ResFile = RESALLOC( sizeof( ResFileInfo ) ); Pass2Info.ResFile->next = NULL; Pass2Info.ResFile->name = NULL; Pass2Info.ResFile->IsOpen = false; Pass2Info.ResFile->fp = NULL; Pass2Info.ResFile->Dir = NULL; return( true ); } if( CmdLineParms.Pass2Only ) { name = CmdLineParms.InFileName; } else { name = CmdLineParms.OutResFileName; } curfile = RESALLOC( sizeof( ExtraRes ) + strlen( name ) ); curfile->next = CmdLineParms.ExtraResFiles; CmdLineParms.ExtraResFiles = curfile; strcpy( curfile->name, name ); error = OpenResFiles( CmdLineParms.ExtraResFiles, &Pass2Info.ResFile, &Pass2Info.AllResFilesOpen, type, CmdLineParms.InExeFileName ); return( error ); } /* OpenResFileInfo */
static int OpenResFileInfo( ExeType type ) /****************************************/ { int rc; ExtraRes *curfile; if( (type == EXE_TYPE_NE_WIN || type == EXE_TYPE_NE_OS2) && CmdLineParms.ExtraResFiles != NULL ) { RcError( ERR_FR_NOT_VALID_FOR_WIN ); return( FALSE ); } Pass2Info.AllResFilesOpen = TRUE; if( CmdLineParms.NoResFile ) { Pass2Info.ResFiles = RcMemMalloc( sizeof( ResFileInfo ) ); Pass2Info.ResFiles->name = NULL; Pass2Info.ResFiles->IsOpen = FALSE; Pass2Info.ResFiles->Handle = NIL_HANDLE; Pass2Info.ResFiles->Dir = NULL; return( TRUE ); } curfile = RcMemMalloc( sizeof( ExtraRes ) ); curfile->next = CmdLineParms.ExtraResFiles; CmdLineParms.ExtraResFiles = curfile; if( CmdLineParms.Pass2Only ) { strcpy( curfile->name, CmdLineParms.InFileName ); } else { strcpy( curfile->name, CmdLineParms.OutResFileName ); } rc = OpenResFiles( CmdLineParms.ExtraResFiles, &Pass2Info.ResFiles, &Pass2Info.AllResFilesOpen, type, CmdLineParms.InExeFileName ); return( rc ); } /* OpenResFileInfo */