ResLocation SemCopyRawFile( const char *filename ) /************************************************/ { WResFileID fid; RcStatus ret; char *buffer; char full_filename[_MAX_PATH]; ResLocation loc; int err_code; WResFileOffset pos; buffer = RESALLOC( BUFFER_SIZE ); if( RcFindResource( filename, full_filename ) == -1 ) { RcError( ERR_CANT_FIND_FILE, filename ); goto HANDLE_ERROR; } if( AddDependency( full_filename ) ) goto HANDLE_ERROR; fid = RcIoOpenInput( full_filename, false ); if( fid == WRES_NIL_HANDLE ) { RcError( ERR_CANT_OPEN_FILE, filename, strerror( errno ) ); goto HANDLE_ERROR; } loc.start = SemStartResource(); pos = RESTELL( fid ); if( pos == -1 ) { RcError( ERR_READING_DATA, full_filename, strerror( errno ) ); RESCLOSE( fid ); goto HANDLE_ERROR; } else { ret = SemCopyDataUntilEOF( pos, fid, buffer, BUFFER_SIZE, &err_code ); if( ret != RS_OK ) { ReportCopyError( ret, ERR_READING_DATA, full_filename, err_code ); RESCLOSE( fid ); goto HANDLE_ERROR; } } loc.len = SemEndResource( loc.start ); RESCLOSE( fid ); RESFREE( buffer ); return( loc ); HANDLE_ERROR: ErrorHasOccured = true; loc.start = 0; loc.len = 0; RESFREE( buffer ); return( loc ); }
static bool copyResourcesFromRes( const char *full_filename ) /***********************************************************/ { WResFileID fid; WResDir dir; bool dup_discarded; WResDirWindow wind; char *buffer; bool error; buffer = NULL; dir = WResInitDir(); fid = RcIoOpenInput( full_filename, false ); if( fid == WRES_NIL_HANDLE ) { RcError( ERR_CANT_OPEN_FILE, full_filename, strerror( errno ) ); goto HANDLE_ERROR; } error = WResReadDir( fid, dir, &dup_discarded ); if( error ) { switch( LastWresStatus() ) { case WRS_BAD_SIG: RcError( ERR_INVALID_RES, full_filename ); break; case WRS_BAD_VERSION: RcError( ERR_BAD_RES_VER, full_filename ); break; default: RcError( ERR_READING_RES, full_filename, LastWresErrStr() ); break; } goto HANDLE_ERROR; } if( WResGetTargetOS( dir ) != WResGetTargetOS( CurrResFile.dir ) ) { RcError( ERR_RES_OS_MISMATCH, full_filename ); goto HANDLE_ERROR; } buffer = RESALLOC( BUFFER_SIZE ); wind = WResFirstResource( dir ); while( !WResIsEmptyWindow( wind ) ) { copyAResource( fid, &wind, buffer, full_filename ); wind = WResNextResource( wind, dir ); } RESFREE( buffer ); WResFreeDir( dir ); RESCLOSE( fid ); return( false ); HANDLE_ERROR: ErrorHasOccured = true; WResFreeDir( dir ); if( fid != WRES_NIL_HANDLE ) RESCLOSE( fid ); return( true ); }
static void AddBitmapResource( WResID * name, ResMemFlags flags, const char * filename ) /**************************************************************/ { BitmapFileHeader head; WResFileID fid; RcStatus ret; int err_code; fid = RcIoOpenInput( filename, false ); if( fid == WRES_NIL_HANDLE) goto FILE_OPEN_ERROR; ret = readBitmapFileHeader( fid, &head, &err_code ); if( ret != RS_OK ) goto READ_HEADER_ERROR; if( head.Type != BITMAP_MAGIC ) goto NOT_BITMAP_ERROR; ret = copyBitmap( &head, fid, name, flags, &err_code ); if( ret != RS_OK ) goto COPY_BITMAP_ERROR; RESCLOSE( fid ); return; FILE_OPEN_ERROR: RcError( ERR_CANT_OPEN_FILE, filename, strerror( errno ) ); ErrorHasOccured = true; RESFREE( name ); return; READ_HEADER_ERROR: ReportCopyError( ret, ERR_READING_BITMAP, filename, err_code ); ErrorHasOccured = true; RESFREE( name ); RESCLOSE( fid ); return; NOT_BITMAP_ERROR: RcError( ERR_NOT_BITMAP_FILE, filename ); ErrorHasOccured = true; RESFREE( name ); RESCLOSE( fid ); return; COPY_BITMAP_ERROR: ReportCopyError( ret, ERR_READING_BITMAP, filename, err_code ); ErrorHasOccured = true; RESCLOSE( fid ); return; }
extern void ClosePass2FilesAndFreeMem( void ) /*******************************************/ { ExeFileInfo *tmp; ExeFileInfo *old; tmp = &(Pass2Info.TmpFile); old = &(Pass2Info.OldFile); if( old->IsOpen ) { RESCLOSE( old->fp ); old->IsOpen = false; } switch( old->Type ) { case EXE_TYPE_NE_WIN: case EXE_TYPE_NE_OS2: FreeNEFileInfoPtrs( &old->u.NEInfo ); break; case EXE_TYPE_PE: FreePEFileInfoPtrs( &old->u.PEInfo ); break; case EXE_TYPE_LX: FreeLXFileInfoPtrs( &old->u.LXInfo ); break; default: //EXE_TYPE_UNKNOWN break; } switch( tmp->Type ) { case EXE_TYPE_NE_WIN: case EXE_TYPE_NE_OS2: FreeNEFileInfoPtrs( &tmp->u.NEInfo ); break; case EXE_TYPE_PE: FreePEFileInfoPtrs( &tmp->u.PEInfo ); break; case EXE_TYPE_LX: FreeLXFileInfoPtrs( &tmp->u.LXInfo ); break; default: //EXE_TYPE_UNKNOWN break; } CloseResFiles( Pass2Info.ResFile ); } /* ClosePass2FilesAndFreeMem */
static void AddFontResources( WResID *name, ResMemFlags flags, const char *filename ) /***********************************************************************************/ { FontInfo info; char *devicename; char *facename; FILE *fp; RcStatus ret; int err_code; ReadStrErrInfo readstr_err; if( name->IsName ) { RcError( ERR_FONT_NAME ); return; } fp = RcIoOpenInput( filename, false ); if( fp == NULL) goto FILE_OPEN_ERROR; ret = readFontInfo( fp, &info, &err_code ); if( ret != RS_OK) goto READ_HEADER_ERROR; ret = copyFont( &info, fp, name, flags, &err_code ); if( ret != RS_OK ) goto COPY_FONT_ERROR; devicename = readString( fp, info.dfDevice, &readstr_err ); if( devicename == NULL ) { ret = readstr_err.status; err_code = readstr_err.err_code; goto READ_HEADER_ERROR; } facename = readString( fp, info.dfFace, &readstr_err ); if( facename == NULL ) { ret = readstr_err.status; err_code = readstr_err.err_code; RESFREE( devicename ); goto READ_HEADER_ERROR; } AddFontToDir( &info, devicename, facename, name ); RESFREE( devicename ); RESFREE( facename ); RESCLOSE( fp ); return; FILE_OPEN_ERROR: RcError( ERR_CANT_OPEN_FILE, filename, strerror( errno ) ); ErrorHasOccured = true; RESFREE( name ); return; READ_HEADER_ERROR: ReportCopyError( ret, ERR_READING_FONT, filename, err_code ); ErrorHasOccured = true; RESFREE( name ); RESCLOSE( fp ); return; COPY_FONT_ERROR: ReportCopyError( ret, ERR_READING_FONT, filename, err_code ); ErrorHasOccured = true; RESCLOSE( fp ); return; }
static void AddCursorResource( WResID * name, ResMemFlags flags, ResMemFlags group_flags, const char * filename ) /********************************************************************/ { WResFileID fid; RcStatus ret; bool error; FullCurDir dir; int err_code; fid = RcIoOpenInput( filename, false ); if( fid == WRES_NIL_HANDLE) goto FILE_OPEN_ERROR; dir.Head = NULL; dir.Tail = NULL; ret = readCurFileDir( fid, &dir, &err_code ); if( ret != RS_OK) goto READ_DIR_ERROR; ret = copyCursors( &dir, fid, flags, &err_code ); if( ret != RS_OK ) goto COPY_CURSORS_ERROR; error = writeCurDir( &dir, name, group_flags, &err_code ); if( error) goto WRITE_DIR_ERROR; FreeCurDir( &dir ); RESCLOSE( fid ); return; FILE_OPEN_ERROR: RcError( ERR_CANT_OPEN_FILE, filename, strerror( errno ) ); ErrorHasOccured = true; RESFREE( name ); return; READ_DIR_ERROR: if( ret == RS_INVALID_RESOURCE ) { RcError( ERR_NOT_CURSOR_FILE, filename ); } else { ReportCopyError( ret, ERR_READING_CURSOR, filename, err_code ); } ErrorHasOccured = true; RESFREE( name ); FreeCurDir( &dir ); RESCLOSE( fid ); return; WRITE_DIR_ERROR: RcError( ERR_WRITTING_RES_FILE, CurrResFile.filename, strerror( err_code ) ); ErrorHasOccured = true; FreeCurDir( &dir ); RESCLOSE( fid ); return; COPY_CURSORS_ERROR: ReportCopyError( ret, ERR_READING_CURSOR, filename, err_code ); ErrorHasOccured = true; RESFREE( name ); FreeCurDir( &dir ); RESCLOSE( fid ); return; } /* AddCursorResource */