void SemWINAddMessageTable( WResID *name, ScanString *filename ) { /****************************************************************/ ResLocation start; if( CmdLineParms.TargetOS == RC_TARGET_OS_WIN32 ) { start = SemCopyRawFile( filename->string ); RCFREE( filename->string ); RCFREE( filename ); SemAddResourceFree( name, WResIDFromNum( (long)(pointer_int)RT_MESSAGETABLE ), MEMFLAG_MOVEABLE | MEMFLAG_PURE, start ); } else { RcError( ERR_NT_KEYWORD, SemWINTokenToString( Y_MESSAGETABLE ) ); ErrorHasOccured = true; RCFREE( name ); RCFREE( filename->string ); RCFREE( filename ); } }
void SemOS2AddSingleLineResource( WResID *name, YYTOKENTYPE type, FullOptFlagsOS2 *fullflags, char *filename ) /*****************************************************************/ { ResLocation start; ResMemFlags flags, flagsMDP, flagsMP; char full_filename[_MAX_PATH]; static bool firstIcon = true; if( ErrorHasOccured ) { RCFREE( name ); RCFREE( filename ); return; } if( RcFindResource( filename, full_filename ) == -1 ) { RcError( ERR_CANT_FIND_FILE, filename ); goto HANDLE_ERROR; } if( AddDependency( full_filename ) ) goto HANDLE_ERROR; flagsMDP = MEMFLAG_MOVEABLE | MEMFLAG_DISCARDABLE | MEMFLAG_PURE; flagsMP = MEMFLAG_MOVEABLE | MEMFLAG_PURE; switch( type ) { case Y_DEFAULTICON: /* DEFAULTICON doesn't have a name, let's make our own */ name = (WResID*)RCALLOC( sizeof( WResID ) ); name->IsName = false; name->ID.Num = 999; firstIcon = true; /* Trigger a warning if we have one already */ /* Note the fallthrough! */ case Y_POINTER: case Y_ICON: if( fullflags != NULL ) { SemOS2CheckResFlags( fullflags, 0, MEMFLAG_MOVEABLE | MEMFLAG_DISCARDABLE, 0 ); flags = fullflags->flags; } else { flags = flagsMDP; } /* Duplicate the first icon encountered as the default icon IFF it has resource ID equal to 1 */ if( firstIcon && !name->IsName && (name->ID.Num == 999 || name->ID.Num == 1) ) { WResID *id; id = (WResID*)RCALLOC( sizeof( WResID ) ); if( id == NULL ) break; firstIcon = false; id->IsName = false; id->ID.Num = 22; start = SemCopyRawFile( filename ); SemAddResourceFree( name, WResIDFromNum( OS2_RT_POINTER ), flags, start ); start = SemCopyRawFile( filename ); SemAddResourceFree( id, WResIDFromNum( OS2_RT_DEFAULTICON ), flagsMDP, start ); } else { start = SemCopyRawFile( filename ); SemAddResourceFree( name, WResIDFromNum( OS2_RT_POINTER ), flags, start ); } break; case Y_BITMAP: if( fullflags != NULL ) { SemOS2CheckResFlags( fullflags, 0, MEMFLAG_MOVEABLE, MEMFLAG_PURE ); flags = fullflags->flags; } else { flags = flagsMP; } start = SemCopyRawFile( filename ); SemAddResourceFree( name, WResIDFromNum( OS2_RT_BITMAP ), flags, start ); break; case Y_FONT: if( fullflags != NULL ) { SemOS2CheckResFlags( fullflags, 0, MEMFLAG_MOVEABLE | MEMFLAG_DISCARDABLE, MEMFLAG_PURE ); flags = fullflags->flags; } else { flags = flagsMDP; } AddFontResources( name, flags, full_filename ); break; default: RCFREE( name ); break; } RCFREE( filename ); return; HANDLE_ERROR: ErrorHasOccured = true; RCFREE( name ); RCFREE( filename ); } /* SemOS2AddSingleLineResource */