program USDXResCompiler; {$mode objfpc}{$H+} uses Classes, SysUtils, LResources; var lResourceFile : TMemoryStream; procedure AddFile( aResName, aResType, aFile : string ); var lTmpStream : TmemoryStream; begin if aFile[1] = '"' then begin aFile := copy( aFile, 2, length( aFile ) - 2 ); end; if not fileexists( aFile ) then begin writeln( 'SKIPED' + ' ( '+aFile+' ) File not found' ); exit; end; lTmpStream := TmemoryStream.create(); try lTmpStream.loadfromfile( aFile ); lTmpStream.position := 0; BinaryToLazarusResourceCode(lTmpStream, lResourceFile, aResName, aResType); writeln( 'ADDED - ' + aResType + ' : ' + aResName + ' ( '+aFile+' )' ); finally freeandnil( lTmpStream ); end; end; procedure addresourceline( aRCLine : String ); var lName : String; lType : String; lFile : String; lTmp , lTmp2 : Integer; begin if trim( aRCLine ) = '' then exit; if aRCLine[1] = '#' then exit; if ( aRCLine[1] = '/' ) AND ( aRCLine[2] = '/' ) THEN exit; // find 2nd column... and put it in lTmp lTmp := pos( ' ', aRcLine ); lTmp2 := pos( #9, aRcLine ); if lTmp2 < lTmp then lTmp := lTmp2; // Name = Start to lTmp lName := trim( copy( aRcLine, 1, lTmp ) ); // Type = lTmp to first " lTmp2 := pos( '"', aRcLine ); lType := trim( copy( aRcLine, lTmp, lTmp2-lTmp ) ); // File = " to end of line lFile := trim( copy( aRcLine, lTmp2, maxint ) ); lFile := StringReplace( lFile, '\', PathDelim ,[rfReplaceAll] ); (* writeln( aRcLine ); writeln( lName ); writeln( lType ); writeln( lFile ); writeln( '' ); *) AddFile( lName , lType , lFile ); end; var lRCFile : TStringList; iCount : Integer; begin if not fileexists( paramstr(1) ) then begin writeln( 'MUST Specify Delphi format RC File' ); exit; end; lRCFile := TStringList.create(); lResourceFile := TMemoryStream.create(); try lRCFile.loadfromfile( paramstr(1) ); if trim( lRCFile.text ) = '' then exit; for iCount := 0 to lRCFile.count -1 do begin addresourceline( lRCFile[ iCount ] ); end; (* AddFile( 'Font', 'TEX', '..\Fonts\Normal\eurostar_regular.png' ); AddFile( 'Font', 'FNT', '..\Fonts\Normal\eurostar_regular.dat' ); AddFile( 'FontB', 'TEX', '..\Fonts\Bold\eurostar_regular_bold.png' ); AddFile( 'FontB', 'FNT', '..\Fonts\Bold\eurostar_regular_bold.dat' ); AddFile( 'FontO', 'TEX', '..\Fonts\Outline 1\Outline 1.PNG' ); AddFile( 'FontO', 'FNT', '..\Fonts\Outline 1\Outline 1.dat' ); AddFile( 'FontO2', 'TEX', '..\Fonts\Outline 2\Outline 2.PNG' ); AddFile( 'FontO2', 'FNT', '..\Fonts\Outline 2\Outline 2.dat' ); AddFile( 'MAINICON', 'ICON', '..\Graphics\ustar-icon_v01.ico' ); AddFile( 'CRDTS_BG', 'TEX', '..\Graphics\credits_v5_bg.png' ); AddFile( 'CRDTS_OVL', 'TEX', '..\Graphics\credits_v5_overlay.png' ); AddFile( 'CRDTS_blindguard', 'TEX', '..\Graphics\names_blindguard.png' ); AddFile( 'CRDTS_blindy', 'TEX', '..\Graphics\names_blindy.png' ); AddFile( 'CRDTS_canni', 'TEX', '..\Graphics\names_canni.png' ); AddFile( 'CRDTS_commandio', 'TEX', '..\Graphics\names_commandio.png' ); AddFile( 'CRDTS_lazyjoker', 'TEX', '..\Graphics\names_lazyjoker.png' ); AddFile( 'CRDTS_mog', 'TEX', '..\Graphics\names_mog.png' ); AddFile( 'CRDTS_mota', 'TEX', '..\Graphics\names_mota.png' ); AddFile( 'CRDTS_skillmaste', 'TEX', '..\Graphics\names_skillmaster.png' ); AddFile( 'CRDTS_whiteshark', 'TEX', '..\Graphics\names_whiteshark.png' ); AddFile( 'INTRO_L01', 'TEX', '..\Graphics\intro-l-01.png' ); AddFile( 'INTRO_L02', 'TEX', '..\Graphics\intro-l-02.png' ); AddFile( 'INTRO_L03', 'TEX', '..\Graphics\intro-l-03.png' ); AddFile( 'INTRO_L04', 'TEX', '..\Graphics\intro-l-04.png' ); AddFile( 'INTRO_L05', 'TEX', '..\Graphics\intro-l-05.png' ); AddFile( 'INTRO_L06', 'TEX', '..\Graphics\intro-l-06.png' ); AddFile( 'INTRO_L07', 'TEX', '..\Graphics\intro-l-07.png' ); AddFile( 'INTRO_L08', 'TEX', '..\Graphics\intro-l-08.png' ); AddFile( 'INTRO_L09', 'TEX', '..\Graphics\intro-l-09.png' ); AddFile( 'OUTRO_BG', 'TEX', '..\Graphics\outro-bg.png' ); AddFile( 'OUTRO_ESC', 'TEX', '..\Graphics\outro-esc.png' ); AddFile( 'OUTRO_EXD', 'TEX', '..\Graphics\outro-exit-dark.png' ); *) finally lResourceFile.SaveToFile( 'UltraStar.lrs' ); freeandnil( lResourceFile ); freeandnil( lRCFile ); end; end.