bool WRAPI WRCreateCursorEntries( WRInfo *info, WResLangNode *lnode, void *data, uint_32 size ) { RESCURSORHEADER *rch; CURSORHEADER *ch; uint_16 ord; uint_32 rchsize; int i; bool ok; ok = (info != NULL && lnode != NULL && data != NULL && size != 0); if( ok ) { if( lnode->data != NULL ) { MemFree( lnode->data ); lnode->data = NULL; } lnode->Info.Length = 0; ok = WRCreateCursorResHeader( &rch, &rchsize, data, size ); } if( ok ) { lnode->data = (void *)rch; lnode->Info.Length = rchsize; ord = 0; ch = (CURSORHEADER *)data; for( i = 0; ok && i < rch->cwCount; i++ ) { ord = WRFindUnusedImageId( info, ord ); ok = (ord != 0); if( ok ) { rch->cdEntries[i].wNameOrdinal = ord; ok = WRGetAndAddCursorImage( data, info->dir, &ch->cdEntries[i], ord ); } } } return( ok ); }
int WRLoadCursorFile( WRInfo *info ) { BYTE *data; uint_32 data_size; CURSORHEADER *ch; uint_32 chsize; RESCURSORHEADER *rch; uint_32 rchsize; WResFileID file; WResID *tname; WResID *rname; WResLangType lang; char fn[_MAX_FNAME]; int dup; int i; int ok; data = NULL; rch = NULL; dup = FALSE; file = -1; lang.lang = DEF_LANG; lang.sublang = DEF_SUBLANG; tname = NULL; rname = NULL; ok = ( info && info->file_name ); if( ok ) { ok = ( ( file = ResOpenFileRO( info->file_name ) ) != -1 ); } if( ok ) { ok = WRReadEntireFile( file, &data, &data_size ); } if( ok ) { ch = (CURSORHEADER *) data; chsize = sizeof(CURSORHEADER); chsize += sizeof(CURSORDIRENTRY)*(ch->cdCount-1); ok = WRCreateCursorResHeader( &rch, &rchsize, data, data_size ); } if( ok ) { ok = ( ( info->dir = WResInitDir() ) != NULL ); } if( ok ) { tname = WResIDFromNum( (uint_16)RT_GROUP_CURSOR ); ok = ( tname != NULL ); } if( ok ) { _splitpath( info->file_name, NULL, NULL, fn, NULL ); rname = WResIDFromStr( fn ); ok = ( rname != NULL ); } if ( ok ) { ok = !WResAddResource( tname, rname, DEF_MEMFLAGS, 0, rchsize, info->dir, &lang, &dup ); } if( ok ) { ok = WRFindAndSetData( info->dir, tname, rname, &lang, rch ); } if( ok ) { for( i=0; ok && i<ch->cdCount ; i++ ) { ok = WRGetAndAddCursorImage( data, info->dir, &ch->cdEntries[i], i+1 ); } } if( !ok ) { if( info->dir ) { WRFreeWResDirData( info->dir ); WResFreeDir( info->dir ); info->dir = NULL; } } if( tname != NULL ) { WRMemFree( tname ); } if( rname != NULL ) { WRMemFree( rname ); } if( file != -1 ) { ResCloseFile( file ); } return( ok ); }