static WResDirWindow LookUpResource( WResDirWindow wind1, WResDir dir2 ) /**********************************************************************/ { WResDirWindow wind2; WResTypeInfo *type1; WResResInfo *res1; WResLangInfo *lang1; char *resname1; type1 = WResGetTypeInfo( wind1 ); res1 = WResGetResInfo( wind1 ); lang1 = WResGetLangInfo( wind1 ); wind2 = WResFindResource( &(type1->TypeName), &(res1->ResName), dir2, &(lang1->lang) ); if (WResIsEmptyWindow( wind2 ) && !CmdLineParms.Quiet) { resname1 = WResIDToStr( &(res1->ResName) ); printf( "Error: Resource %s (lang 0x%X SubLang 0x%X) not in file %s\n", resname1, (int)lang1->lang.lang, (int)lang1->lang.sublang, CmdLineParms.FileName2 ); RESFREE( resname1 ); } return( wind2 ); }
DepInfo *WResGetAutoDep( const char *fname ) { WResFileID handle; WResDir dir; bool dup_discarded; WResID *name; WResID *type; WResDirWindow window; WResLangInfo *info; DepInfo *ret; WResFileSSize numread; ret = NULL; handle = ResOpenFileRO( fname ); if( handle != WRES_NIL_HANDLE ) { if( WResIsWResFile( handle ) && (dir = WResInitDir()) != NULL ) { if( !WResReadDir( handle, dir, &dup_discarded ) ) { name = WResIDFromStr( DEP_LIST_NAME ); type = WResIDFromNum( DEP_LIST_TYPE ); if( name != NULL && type != NULL ) { window = WResFindResource( type, name, dir, NULL ); if( WResIsEmptyWindow( window ) ) { WRES_ERROR( WRS_RES_NOT_FOUND ); } else { info = WResGetLangInfo( window ); if( WRESSEEK( handle, info->Offset, SEEK_SET ) == -1 ) { WRES_ERROR( WRS_SEEK_FAILED ); } else { ret = WRESALLOC( info->Length ); if( ret == NULL ) { WRES_ERROR( WRS_MALLOC_FAILED ); } else { numread = WRESREAD( handle, ret, info->Length ); if( numread != (WResFileSSize)info->Length ) { WRES_ERROR( WRESIOERR( handle, numread ) ? WRS_READ_FAILED : WRS_READ_INCOMPLETE ); ret = NULL; } } } } } if( name != NULL ) { WResIDFree( name ); } if( type != NULL ) { WResIDFree( type ); } } WResFreeDir( dir ); } ResCloseFile( handle ); } return( ret ); }
extern int WResLoadResource2( WResDir dir, PHANDLE_INFO hInstance, UINT idType, UINT idResource, LPSTR *lpszBuffer, int *bufferSize ) /******************************************************************/ { int retcode; WResID resource_type; WResID resource_id; WResDirWindow wind; WResLangInfo *res; WResLangType lang; char *res_buffer; if( ( lpszBuffer == NULL ) || ( bufferSize == NULL ) ) { return( -1 ); } lang.lang = DEF_LANG; lang.sublang = DEF_SUBLANG; WResInitIDFromNum( idResource, &resource_id ); WResInitIDFromNum( (long)idType, &resource_type ); wind = WResFindResource( &resource_type, &resource_id, dir, &lang ); if( WResIsEmptyWindow( wind ) ) { retcode = -1; } else { res = WResGetLangInfo( wind ); // lets make sure we dont perturb malloc into apoplectic fits if( res->Length >= INT_MAX ) { return( -1 ); } res_buffer = WRESALLOC( res->Length ); *lpszBuffer = res_buffer; if( *lpszBuffer == NULL ) { return( -1 ); } *bufferSize = (int)res->Length; retcode = GetResource( res, hInstance, res_buffer ); } return( retcode ); }
int WResLoadResource2( WResDir dir, PHANDLE_INFO hinfo, WResID *resource_type, WResID *resource_id, lpstr *lpszBuffer, size_t *bufferSize ) /*********************************************************************************/ { int retcode; WResDirWindow wind; WResLangInfo *res; WResLangType lang; char *res_buffer; if( ( resource_type == NULL ) || ( resource_id == NULL ) || ( lpszBuffer == NULL ) || ( bufferSize == NULL ) ) { return( -1 ); } lang.lang = DEF_LANG; lang.sublang = DEF_SUBLANG; wind = WResFindResource( resource_type, resource_id, dir, &lang ); if( WResIsEmptyWindow( wind ) ) { retcode = -1; } else { res = WResGetLangInfo( wind ); #ifdef _M_I86 // lets make sure we dont perturb malloc into apoplectic fits if( res->Length > (size_t)(-1LL) ) { return( -1 ); } #endif res_buffer = WRESALLOC( res->Length ); *lpszBuffer = res_buffer; if( *lpszBuffer == NULL ) { return( -1 ); } *bufferSize = (size_t)res->Length; retcode = GetResource( res, hinfo, res_buffer ); } return( retcode ); }