Bool WREOpenResource( char *fn ) { char *name; WREResInfo *res_info; WREGetFileStruct gf; Bool ok, got_name; res_info = NULL; name = NULL; got_name = FALSE; if( fn != NULL ) { if( WRFileExists( fn ) ) { ok = ((name = WREStrDup( fn )) != NULL); } else { ok = FALSE; } } else { gf.file_name = NULL; gf.title = WREResOpenTitle; gf.filter = WREResFilter; gf.save_ext = TRUE; ok = ((name = WREGetOpenFileName( &gf )) != NULL); } if( ok ) { got_name = TRUE; ok = ((res_info = WRELoadResource( name )) != NULL); } if( ok ) { WREFindAndLoadSymbols( res_info ); ok = WRECreateResourceWindow( res_info ); } if( ok ) { ListAddElt( &WREResList, (void *)res_info ); } else { if( res_info != NULL ) { WREFreeResInfo( res_info ); res_info = NULL; } if( got_name ) { WREDisplayErrorMsg( WRE_RESOURCESNOTLOADED ); } } if( name != NULL ) { WREMemFree( name ); } return( ok ); }
bool SaveObjectInto( WRECurrentResInfo *curr, void *rdata ) { bool ok; char *fname; WREGetFileStruct gf; WRSaveIntoData idata; bool dup; uint_32 size; fname = NULL; dup = false; ok = (curr != NULL && rdata != NULL); if( ok ) { gf.file_name = NULL; gf.title = WREResSaveIntoTitle; gf.filter = WREResFilter; gf.save_ext = TRUE; fname = WREGetOpenFileName( &gf ); ok = (fname != NULL && *fname != '\0'); } if( ok ) { size = curr->lang->Info.Length; idata.next = NULL; idata.info = curr->info->info; idata.type = &curr->type->Info.TypeName; idata.name = &curr->res->Info.ResName; idata.data = rdata; idata.lang = curr->lang->Info.lang; idata.size = size; idata.MemFlags = curr->lang->Info.MemoryFlags; ok = WRSaveObjectInto( fname, &idata, &dup ) && !dup; } if( dup ) { WREDisplayErrorMsg( WRE_DUPRESNAME ); } if( fname != NULL ) { WRMemFree( fname ); } return( ok ); }
static char *WRELoadSymbols( WRHashTable **table, char *file_name, bool prompt ) { char *name; int c; unsigned flags; char *inc_path; WREGetFileStruct gf; unsigned pp_count; unsigned busy_count; char busy_str[2]; bool ret; bool ok; name = NULL; ok = (table != NULL); if( ok ) { WRESetStatusText( NULL, "", FALSE ); WRESetStatusByID( WRE_LOADINGSYMBOLS, -1 ); } if( ok ) { if( file_name == NULL || prompt ) { gf.file_name = file_name; gf.title = WRESymLoadTitle; gf.filter = WRESymSaveFilter; gf.save_ext = FALSE; name = WREGetOpenFileName( &gf ); } else { name = WREStrDup( file_name ); } ok = (name != NULL); } WRESetWaitCursor( TRUE ); if( ok ) { flags = PPFLAG_IGNORE_INCLUDE | PPFLAG_EMIT_LINE; inc_path = NULL; ret = setjmp( SymEnv ); if( ret ) { PP_Fini(); WREDisplayErrorMsg( WRE_SYMOUTOFMEM ); ok = false; } } if( ok ) { ok = !PP_Init( name, flags, inc_path ); if( !ok ) { WREDisplayErrorMsg( WRE_NOLOADHEADERFILE ); } } if( ok ) { pp_count = 0; busy_count = 0; busy_str[1] = '\0'; do { pp_count++; c = PP_Char(); if( pp_count == MAX_PP_CHARS ) { busy_count++; busy_str[0] = WREBusyChars[busy_count % 4]; WRESetStatusText( NULL, busy_str, TRUE ); pp_count = 0; } } while( c != EOF ); if( *table == NULL ) { *table = WRInitHashTable(); } WREAddSymbols( *table ); WRMakeHashTableClean( *table ); PP_Fini(); WRESetStatusText( NULL, " ", TRUE ); } if( !ok ) { if( name != NULL ) { WRMemFree( name ); name = NULL; } } WRESetWaitCursor( FALSE ); WRESetStatusReadyText(); return( name ); }
Bool pleaseOpenFile( UINT msg ) { char *filter; char *title; char *name; WREResInfo *res_info; WREResInfo *old_info; WREGetFileStruct gf; uint_16 type; Bool ok; old_info = WREGetCurrentRes(); res_info = NULL; filter = NULL; title = NULL; name = NULL; if( msg == ACCEL_PLEASE_OPENME ) { filter = WREAccelFilter; title = WREAllocRCString( WRE_OPENACCEL ); type = (uint_16)RT_ACCELERATOR; } else if( msg == MENU_PLEASE_OPENME ) { filter = WREMenuFilter; title = WREAllocRCString( WRE_OPENMENU ); type = (uint_16)RT_MENU; } else if( msg == STRING_PLEASE_OPENME ) { filter = WREStringFilter; title = WREAllocRCString( WRE_OPENSTRING ); type = (uint_16)RT_STRING; } ok = (filter != NULL && title != NULL); if( ok ) { gf.file_name = NULL; gf.title = title; gf.filter = filter; gf.save_ext = FALSE; ok = ((name = WREGetOpenFileName( &gf )) != NULL); } if( ok ) { ok = ((res_info = WRELoadResource( name )) != NULL); } if( ok ) { WREFindAndLoadSymbols( res_info ); ok = WRECreateResourceWindow( res_info ); } if( ok ) { ListAddElt( &WREResList, (void *)res_info ); } if( ok ) { ok = (WREFindTypeNode( res_info->info->dir, type, NULL ) != NULL); } if( ok ) { ok = WRESetResNamesFromType( res_info, type, FALSE, NULL, 0 ); } if( ok ) { ok = WREHandleResEdit(); } if( ok ) { SendMessage( old_info->res_win, WM_CLOSE, 0, 0 ); } if( !ok ) { if( res_info != NULL ) { WREFreeResInfo( res_info ); res_info = NULL; } } if( name != NULL ) { WREMemFree( name ); } if( title != NULL ) { WREFreeRCString( title ); } return( ok ); }