static bool WRSetWinInfo( HWND hdlg, WRSelectImageInfo *info ) { WResTypeNode *tnode; bool lbox_set; if( info == NULL || hdlg == (HWND)NULL ) { return( false ); } lbox_set = false; tnode = WRFindTypeNode( info->info->dir, (uint_16)(pointer_int)RT_BITMAP, NULL ); if( tnode != NULL ) { CheckDlgButton( hdlg, IDM_SELIMGBMP, BST_CHECKED ); info->type = (uint_16)(pointer_int)RT_BITMAP; WRSetEntries( hdlg, info ); lbox_set = true; } else { EnableWindow( GetDlgItem( hdlg, IDM_SELIMGBMP ), FALSE ); } tnode = WRFindTypeNode( info->info->dir, (uint_16)(pointer_int)RT_GROUP_CURSOR, NULL ); if( tnode != NULL ) { if( !lbox_set ) { CheckDlgButton( hdlg, IDM_SELIMGCUR, BST_CHECKED ); info->type = (uint_16)(pointer_int)RT_GROUP_CURSOR; WRSetEntries( hdlg, info ); lbox_set = true; } } else { EnableWindow( GetDlgItem( hdlg, IDM_SELIMGCUR ), FALSE ); } tnode = WRFindTypeNode( info->info->dir, (uint_16)(pointer_int)RT_GROUP_ICON, NULL ); if( tnode != NULL ) { if( !lbox_set ) { CheckDlgButton( hdlg, IDM_SELIMGICO, BST_CHECKED ); info->type = (uint_16)(pointer_int)RT_GROUP_ICON; WRSetEntries( hdlg, info ); lbox_set = true; } } else { EnableWindow( GetDlgItem( hdlg, IDM_SELIMGICO ), FALSE ); } if( !lbox_set ) { WRDisplayErrorMsg( WR_PRJNOIMAGES ); } return( lbox_set ); }
static char *WREFindDLGInclude( WRInfo *info ) { WResTypeNode *tnode; WResResNode *rnode; WResLangNode *lnode; WResLangType lang; char *include; bool ok; include = NULL; ok = (info != NULL); if( ok ) { tnode = WRFindTypeNode( info->dir, (uint_16)(pointer_int)RT_RCDATA, NULL ); ok = (tnode != NULL); } if( ok ) { rnode = WRFindResNode( tnode, 0, "DLGINCLUDE" ); ok = (rnode != NULL); } if( ok ) { lang.lang = DEF_LANG; lang.sublang = DEF_SUBLANG; lnode = WRFindLangNodeFromLangType( rnode, &lang ); ok = (lnode != NULL); } if( ok ) { include = (char *)WRCopyResData( info, lnode ); } return( include ); }
void WRSetEntries( HWND hdlg, WRSelectImageInfo *info ) { HWND lbox; WResTypeNode *tnode; char *empty_str; if( info == NULL || info->info == NULL || hdlg == (HWND)NULL ) { return; } lbox = GetDlgItem( hdlg, IDM_SELIMGLBOX ); if( lbox == (HWND)NULL ) { return; } SendMessage( lbox, LB_RESETCONTENT, 0, 0 ); tnode = WRFindTypeNode( info->info->dir, info->type, NULL ); if( tnode == NULL ) { empty_str = WRAllocRCString( WR_EMPTY ); if( empty_str != NULL ) { WRSetLBoxWithStr( lbox, empty_str, NULL ); WRFreeRCString( empty_str ); } return; } WRSetResNamesFromTypeNode( lbox, tnode ); SendMessage( lbox, LB_SETCURSEL, 0, 0 ); }
int WRSaveIconResource( WRInfo *info, int backup ) { WResTypeNode *tnode; WResResNode *rnode; WResLangNode *lnode; WResLangType lang; BYTE *data; uint_32 size; int use_rename; int ok; data = NULL; lang.lang = DEF_LANG; lang.sublang = DEF_SUBLANG; ok = ( info && info->dir ); if( ok ) { if( backup && WRFileExists ( info->save_name ) ) { use_rename = ( info->file_name && stricmp( info->file_name, info->save_name ) ); ok = WRBackupFile( info->save_name, use_rename ); } } if( ok ) { tnode = WRFindTypeNode( info->dir, (uint_16)RT_GROUP_ICON, NULL ); ok = ( tnode != NULL ); if( !ok ) { WRDisplayErrorMsg( WR_PRJNOICON ); } } if( ok ) { rnode = tnode->Head; ok = ( rnode != NULL ); } if( ok ) { lnode = WRFindLangNodeFromLangType( rnode, &lang ); ok = ( lnode != NULL ); } if( ok ) { ok = WRCreateIconData( info, lnode, &data, &size ); } if( ok ) { ok = WRSaveDataToFile( info->save_name, data, size ); } if( data ) { WRMemFree( data ); } return( ok ); }
WResTypeNode * WRAPI WRFindTypeNodeFromWResID( WResDir dir, WResID *type ) { WResTypeNode *type_node; char *type_name; type_node = NULL; if( dir != NULL && type != NULL ) { if( type->IsName ) { type_name = WResIDToStr( type ); if( type_name != NULL ) { type_node = WRFindTypeNode( dir, 0, type_name ); MemFree( type_name ); } } else { type_node = WRFindTypeNode( dir, type->ID.Num, NULL ); } } return( type_node ); }
bool WRAPI WRFindImageId( WRInfo *info, WResTypeNode **otnode, WResResNode **ornode, WResLangNode **lnode, uint_16 type, uint_16 id, WResLangType *ltype ) { WResTypeNode *tnode; WResResNode *rnode; WResLangType lang; bool ok; ok = (info != NULL && lnode != NULL && (type == RESOURCE2INT( RT_ICON ) || type == RESOURCE2INT( RT_CURSOR ))); if( ok ) { tnode = WRFindTypeNode( info->dir, type, NULL ); ok = (tnode != NULL); } if( ok ) { if( otnode != NULL ) { *otnode = tnode; } rnode = WRFindResNode( tnode, id, NULL ); ok = (rnode != NULL); } if( ok ) { if( ornode != NULL ) { *ornode = rnode; } if( ltype != NULL ) { lang = *ltype; } else { lang.lang = DEF_LANG; lang.sublang = DEF_SUBLANG; } *lnode = WRFindLangNodeFromLangType( rnode, &lang ); ok = (*lnode != NULL); } if( !ok ) { *lnode = NULL; } return( ok ); }
bool WREDeleteStringResources( WRECurrentResInfo *curr, bool removing ) { WResTypeNode *tnode; char *text; bool ok; ok = true; if( !removing ) { text = AllocRCString( WRE_ALLSTRINGS ); ok = WREQueryDeleteName( text ); if( text != NULL ) { FreeRCString( text ); } } if( ok ) { tnode = curr->type; if( tnode == NULL ) { tnode = WRFindTypeNode( curr->info->info->dir, RESOURCE2INT( RT_STRING ), NULL ); } if( tnode != NULL ) { curr->info->modified = true; ok = WRRemoveTypeNodeFromDir( curr->info->info->dir, tnode ); } } // nuke any edit sessions on these string resources if( ok ) { curr->type = NULL; if( !removing ) { WREEndResStringSessions( curr->info ); } curr->info->current_type = 0; ok = WREInitResourceWindow( curr->info, 0 ); } return( ok ); }
uint_32 WRReadNameTable( WResDir dir, WResFileID file_handle, uint_8 **name_table, uint_32 num_leftover, uint_8 *leftover ) { static WResTypeNode *type_node; static WResResNode *res_node; static uint_32 res_len; static uint_32 res_offset; static uint_32 num_read; uint_32 len; if( dir != NULL ) { type_node = WRFindTypeNode( dir, (uint_16)WR_RT_NAMETABLE, NULL ); if( type_node != NULL ) { res_node = type_node->Head; /* if there are two name tables we ignore all but the first */ res_len = res_node->Head->Info.Length; res_offset = res_node->Head->Info.Offset; if( ResSeek( file_handle, res_offset, SEEK_SET ) == -1 ) { return( FALSE ); } } else { res_len = 0; } num_read = 0; } if( num_read == res_len ) { return( 0 ); } *name_table = NULL; if( num_read + NAME_TABLE_MAX < res_len ) { len = NAME_TABLE_MAX; } else { len = res_len - num_read; } num_read += len; /* If there was data left over but we have a NULL pointer to the * leftover data then we are in a very bad situation. * What we shall do is skip the left over data. * If the seek to skip the data fails then we are totally SNAFU * and must abort the reading of the name resource!! */ if( num_leftover != 0 && leftover == NULL ) { if( ResSeek( file_handle, num_leftover, SEEK_CUR ) == -1 ) { return( 0 ); } num_read += num_leftover; num_leftover = 0; } *name_table = (uint_8 *)WRMemAlloc( len + num_leftover ); if( *name_table == NULL ) { return( FALSE ); } if( num_leftover != 0 ) { memcpy( *name_table, leftover, num_leftover ); } if( read( file_handle, *name_table + num_leftover, len ) != len ) { /* hmmmm... the read failed */ } return( len + num_leftover ); }
int WRSaveBitmapResource( WRInfo *info, int backup ) { int ok; WResTypeNode *tnode; WResLangNode *lnode; BYTE *data; uint_32 dsize; ok = ( info && info->dir ); if( ok ) { tnode = WRFindTypeNode( info->dir, (uint_16)RT_BITMAP, NULL ); ok = ( tnode != NULL ); if( !ok ) { WRDisplayErrorMsg( WR_PRJNOBMP ); } } if( ok ) { ok = ((info->dir->NumTypes == 1) && (info->dir->NumResources == 1)); if( !ok ) { WRDisplayErrorMsg( WR_PRJMORETHANONE ); } } if( ok ) { lnode = NULL; if( tnode->Head && tnode->Head->Head ) { lnode = tnode->Head->Head; } ok = ( lnode != NULL ); } if( ok ) { if( lnode->data == NULL ) { lnode->data = WRLoadResData( info->file_name, lnode->Info.Offset, lnode->Info.Length ); } ok = ( lnode->data && lnode->Info.Length ); } if( ok ) { data = lnode->data; dsize = lnode->Info.Length; ok = WRAddBitmapFileHeader( &data, &dsize ); } if( ok ) { lnode->data = data; lnode->Info.Length = dsize; ok = WRSaveImageToFile( info, tnode, backup ); } if( ok ) { data = lnode->data; dsize = lnode->Info.Length; ok = WRStripBitmapFileHeader( &data, &dsize ); } if( ok ) { lnode->data = data; lnode->Info.Length = dsize; } return( ok ); }
WResTypeNode *WdeFindTypeNode( WResDir dir, uint_16 type, char *type_name ) { return( WRFindTypeNode( dir, type, type_name ) ); }