Commit 695a203

Nick Faro committed on
Read data directories from command line params
commit 695a203093969f4296a054ad8c84d0cacf97db8a parent 8d82839
5 changed files +71−31
Modifiedsrc/codegen.pas +26−26
@@ -675,19 +675,19 @@ begin
675 // Assemble 675 // Assemble
676 if Mode = emPreview then 676 if Mode = emPreview then
677 begin 677 begin
678 if Assemble(ConcatPaths([CacheDir, Filename + '_driver.obj']), 678 if Assemble(Filename + '_driver.obj',
679 ConcatPaths([RuntimeDir, 'hUGEDriver', 'hUGEDriver.asm']), 679 ConcatPaths([RuntimeDir, 'hUGEDriver', 'hUGEDriver.asm']),
680 ['PREVIEW_MODE']) <> 0 then Die; 680 ['PREVIEW_MODE']) <> 0 then Die;
681 end 681 end
682 else if Assemble(Filename + '_driver.obj', 'hUGEDriver/hUGEDriver.asm', []) <> 0 then Die; 682 else if Assemble(Filename + '_driver.obj', 'hUGEDriver/hUGEDriver.asm', []) <> 0 then Die;
683 683
684 if Assemble(ConcatPaths([CacheDir, Filename + '_song.obj']), 684 if Assemble(Filename + '_song.obj',
685 ConcatPaths([RuntimeDir, 'hUGEDriver', 'song.asm']), 685 ConcatPaths([RuntimeDir, 'hUGEDriver', 'song.asm']),
686 ['SONG_DESCRIPTOR=song', 'TICKS='+IntToStr(Song.TicksPerRow)]) <> 0 then Die; 686 ['SONG_DESCRIPTOR=song', 'TICKS='+IntToStr(Song.TicksPerRow)]) <> 0 then Die;
687 687
688 if Mode = emGBS then 688 if Mode = emGBS then
689 begin 689 begin
690 if Assemble(ConcatPaths([CacheDir, Filename + '_gbs.obj']), 690 if Assemble(Filename + '_gbs.obj',
691 ConcatPaths([RuntimeDir, 'hUGEDriver', 'gbs.asm']), 691 ConcatPaths([RuntimeDir, 'hUGEDriver', 'gbs.asm']),
692 ['SONG_DESCRIPTOR=song', 692 ['SONG_DESCRIPTOR=song',
693 'GBS_TITLE="'+PadRight(LeftStr(Song.Name, 32), 32)+'"', 693 'GBS_TITLE="'+PadRight(LeftStr(Song.Name, 32), 32)+'"',
@@ -696,7 +696,7 @@ begin
696 'TIMER_MODULO='+IntToStr(IfThen(Song.TimerEnabled, Song.TimerDivider, 0)), 696 'TIMER_MODULO='+IntToStr(IfThen(Song.TimerEnabled, Song.TimerDivider, 0)),
697 'TIMER_CONTROL='+IntToStr(IfThen(Song.TimerEnabled, 4, 0))]) <> 0 then Die; 697 'TIMER_CONTROL='+IntToStr(IfThen(Song.TimerEnabled, 4, 0))]) <> 0 then Die;
698 end 698 end
699 else if Assemble(ConcatPaths([CacheDir, Filename + '_player.obj']), 699 else if Assemble(Filename + '_player.obj',
700 ConcatPaths([RuntimeDir, 'hUGEDriver', 'player.asm']), 700 ConcatPaths([RuntimeDir, 'hUGEDriver', 'player.asm']),
701 ['SONG_DESCRIPTOR=song', 701 ['SONG_DESCRIPTOR=song',
702 IfThen(Song.TimerEnabled, 'USE_TIMER=1', ''), 702 IfThen(Song.TimerEnabled, 'USE_TIMER=1', ''),
@@ -705,27 +705,27 @@ begin
705 // Link 705 // Link
706 if Mode = emGBS then 706 if Mode = emGBS then
707 begin 707 begin
708 if Link(ConcatPaths([CacheDir, Filename + '.gbs']), 708 if Link(Filename + '.gbs',
709 [ConcatPaths([CacheDir, Filename + '_driver.obj']), 709 [Filename + '_driver.obj',
710 ConcatPaths([CacheDir, Filename + '_song.obj']), 710 Filename + '_song.obj',
711 ConcatPaths([CacheDir, Filename + '_gbs.obj'])]) <> 0 then Die; 711 Filename + '_gbs.obj']) <> 0 then Die;
712 end 712 end
713 else 713 else
714 begin 714 begin
715 if Link(ConcatPaths([CacheDir, Filename + '.gb']), 715 if Link(Filename + '.gb',
716 [ConcatPaths([CacheDir, Filename + '_driver.obj']), 716 [Filename + '_driver.obj',
717 ConcatPaths([CacheDir, Filename + '_song.obj']), 717 Filename + '_song.obj',
718 ConcatPaths([CacheDir, Filename + '_player.obj'])], 718 Filename + '_player.obj'],
719 ConcatPaths([CacheDir, Filename + '.map']), 719 Filename + '.map',
720 ConcatPaths([CacheDir, Filename + '.sym'])) <> 0 then Die; 720 Filename + '.sym') <> 0 then Die;
721 end; 721 end;
722 722
723 // Fix 723 // Fix
724 if Mode = emGBS then 724 if Mode = emGBS then
725 RectifyGBSFile(ConcatPaths([CacheDir, Filename + '.gbs'])) 725 RectifyGBSFile(Filename + '.gbs')
726 else 726 else
727 begin 727 begin
728 if (Fix(ConcatPaths([CacheDir, Filename + '.gb'])) <> 0) then 728 if (Fix(Filename + '.gb') <> 0) then
729 Die; 729 Die;
730 end; 730 end;
731 731
@@ -736,26 +736,26 @@ begin
736 DeleteFile(FilePath); 736 DeleteFile(FilePath);
737 737
738 case Mode of 738 case Mode of
739 emGBS: RenameSucceeded := RenameFile(ConcatPaths([CacheDir, Filename + '.gbs']), FilePath); 739 emGBS: RenameSucceeded := RenameFile(Filename + '.gbs', FilePath);
740 else RenameSucceeded := RenameFile(ConcatPaths([CacheDir, Filename + '.gb']), FilePath); 740 else RenameSucceeded := RenameFile(Filename + '.gb', FilePath);
741 end; 741 end;
742 742
743 if not RenameSucceeded then 743 if not RenameSucceeded then
744 raise ECodegenRenameException.Create(FilePath); 744 raise ECodegenRenameException.Create(FilePath);
745 745
746 {$ifdef DEVELOPMENT} 746 {$ifdef DEVELOPMENT}
747 RenameFile(ConcatPaths([CacheDir, Filename + '.sym']), FilePath + '.sym'); 747 RenameFile(Filename + '.sym', FilePath + '.sym');
748 RenameFile(ConcatPaths([CacheDir, Filename + '.map']), FilePath + '.map'); 748 RenameFile(Filename + '.map', FilePath + '.map');
749 {$endif} 749 {$endif}
750 {$ifdef PRODUCTION} 750 {$ifdef PRODUCTION}
751 DeleteFile(ConcatPaths([CacheDir, Filename + '.sym'])); 751 DeleteFile(Filename + '.sym');
752 DeleteFile(ConcatPaths([CacheDir, Filename + '.map'])); 752 DeleteFile(Filename + '.map');
753 {$endif} 753 {$endif}
754 754
755 DeleteFile(ConcatPaths([CacheDir, Filename + '_driver.obj'])); 755 DeleteFile(Filename + '_driver.obj');
756 DeleteFile(ConcatPaths([CacheDir, Filename + '_song.obj'])); 756 DeleteFile(Filename + '_song.obj');
757 DeleteFile(ConcatPaths([CacheDir, Filename + '_player.obj'])); 757 DeleteFile(Filename + '_player.obj');
758 DeleteFile(ConcatPaths([CacheDir, Filename + '_gbs.obj'])); 758 DeleteFile(Filename + '_gbs.obj');
759 end; 759 end;
760 finally 760 finally
761 Proc.Free; 761 Proc.Free;
Modifiedsrc/constants.pas +1−1
@@ -145,7 +145,7 @@ var
145 Ch4FreqToNoteCodeMap: TIntToIntMap; 145 Ch4FreqToNoteCodeMap: TIntToIntMap;
146 146
147 ConfDir: String = '.'; // Directory for configuration (options.ini) 147 ConfDir: String = '.'; // Directory for configuration (options.ini)
148 CacheDir: String = '.'; // Directory for crash backups 148 CacheDir: String = '.'; // Directory for crash backups, intermediate assembled files
149 RuntimeDir: String = '.'; // Directory for runtime files (fonts, halt.gb, hUGEDriver) 149 RuntimeDir: String = '.'; // Directory for runtime files (fonts, halt.gb, hUGEDriver)
150 150
151 function NoteCodeToString(NoteCode: Integer): String; 151 function NoteCodeToString(NoteCode: Integer): String;
Modifiedsrc/hUGETracker.lpi +2−2
@@ -188,13 +188,13 @@
188 </PublishOptions> 188 </PublishOptions>
189 <RunParams> 189 <RunParams>
190 <local> 190 <local>
191 <CommandLineParams Value="&quot;C:\Projects\GB-Stuff\uge\Resources\Sample Songs\raphaelgoulart - The Murderous Funk Machine (intro).uge&quot;"/> 191 <LaunchingApplication Use="True"/>
192 </local> 192 </local>
193 <FormatVersion Value="2"/> 193 <FormatVersion Value="2"/>
194 <Modes Count="1"> 194 <Modes Count="1">
195 <Mode0 Name="default"> 195 <Mode0 Name="default">
196 <local> 196 <local>
197 <CommandLineParams Value="&quot;C:\Projects\GB-Stuff\uge\Resources\Sample Songs\raphaelgoulart - The Murderous Funk Machine (intro).uge&quot;"/> 197 <LaunchingApplication Use="True"/>
198 </local> 198 </local>
199 </Mode0> 199 </Mode0>
200 </Modes> 200 </Modes>
Modifiedsrc/hugesettings.pas +41−1
@@ -5,7 +5,7 @@ unit hUGESettings;
5 interface 5 interface
6 6
7 uses 7 uses
8 Classes, SysUtils, INIFiles, Constants; 8 Classes, SysUtils, INIFiles, Constants, Forms, Dialogs;
9 9
10 type 10 type
11 11
@@ -51,8 +51,48 @@ var
51 51
52 implementation 52 implementation
53 53
54 procedure SetupDirectoryParameter(Param: String; Default: String; out Variable: ShortString);
55 var
56 S: String;
57 begin
58 Variable := Default;
59
60 S := Application.GetOptionValue(Param);
61 if S <> '' then begin
62 if not DirectoryExists(S) then
63 ShowMessage('Specified '+Param+' does not exist. Using '+Default+' instead.')
64 else
65 Variable := S;
66 end;
67 end;
68
54 procedure InitializeTrackerSettings; 69 procedure InitializeTrackerSettings;
70 var
71 XDGConfigDir, XDGCacheDir: String;
55 begin 72 begin
73 {$ifdef MSWINDOWS}
74 SetupDirectoryParameter('conf_dir', '.', ConfDir);
75 SetupDirectoryParameter('cache_dir', '.', CacheDir);
76 SetupDirectoryParameter('runtime_dir', '.', RuntimeDir);
77 {$endif}
78
79 {$if defined(LINUX) or defined(FREEBSD) or defined(OPENBSD)}
80 XDGConfigDir := GetEnvironmentVariable('XDG_CONFIG_HOME');
81 if XDGConfigDir = '' then
82 XDGConfigDir := ConcatPaths([GetEnvironmentVariable('HOME'), '.config', 'hUGETracker']);
83
84 XDGCacheDir := GetEnvironmentVariable('XDG_CACHE_HOME');
85 if XDGCacheDir = '' then
86 XDGCacheDir := ConcatPaths([GetEnvironmentVariable('HOME'), '.cache', 'hUGETracker']);
87
88 if not DirectoryExists(XDGConfigDir) then CreateDir(XDGConfigDir);
89 if not DirectoryExists(XDGCacheDir) then CreateDir(XDGCacheDir);
90
91 SetupDirectoryParameter('conf_dir', XDGConfigDir, ConfDir);
92 SetupDirectoryParameter('cache_dir', XDGCacheDir, CacheDir);
93 SetupDirectoryParameter('runtime_dir', '.', RuntimeDir);
94 {$endif}
95
56 TrackerSettings := TTrackerSettings.Create; 96 TrackerSettings := TTrackerSettings.Create;
57 end; 97 end;
58 98
Modifiedsrc/tracker.pas +1−1
@@ -1364,7 +1364,7 @@ begin
1364 1364
1365 MessageDlg('Error', 1365 MessageDlg('Error',
1366 'An exception in hUGETracker has occured.' + LineEnding + 1366 'An exception in hUGETracker has occured.' + LineEnding +
1367 'Your song has been backed up to the hUGETracker folder, so don''t worry!' + LineEnding+LineEnding+ 1367 'Your song has been backed up to '+OutName+', so don''t worry!' + LineEnding+LineEnding+
1368 'Please report this issue on GitHub, or contact the maintainer directly via Discord or Email.'+LineEnding+LineEnding+ 1368 'Please report this issue on GitHub, or contact the maintainer directly via Discord or Email.'+LineEnding+LineEnding+
1369 'Email: '+MaintainerEmail+LineEnding+ 1369 'Email: '+MaintainerEmail+LineEnding+
1370 'Discord: '+MaintainerDiscord+LineEnding+LineEnding+ 1370 'Discord: '+MaintainerDiscord+LineEnding+LineEnding+