Commit 33456e3

Nick Faro committed on
Loading and converting old format
commit 33456e3428670cfc7989181cdfcad5ced9b174b3 parent 4991761
4 changed files +60−18
Modifiedhugedatatypes.pas +1−1
@@ -59,7 +59,7 @@ type
59 PCell = ^TCell; 59 PCell = ^TCell;
60 60
61 TPatternV1 = packed array[0..63] of TCellV1; 61 TPatternV1 = packed array[0..63] of TCellV1;
62 PPaternV1 = ^TPatternV1; 62 PPatternV1 = ^TPatternV1;
63 63
64 TPatternV2 = packed array[0..63] of TCellV2; 64 TPatternV2 = packed array[0..63] of TCellV2;
65 TPattern = TPatternV2; 65 TPattern = TPatternV2;
Modifiedsong.pas +46−6
@@ -7,9 +7,11 @@ unit Song;
7 7
8 interface 8 interface
9 9
10 uses Classes, HugeDatatypes, instruments, Constants, waves, math; 10 uses Classes, HugeDatatypes, instruments, Constants, waves, math, sysutils;
11 11
12 type 12 type
13 ESongVersionException = class(Exception);
14
13 TSongV1 = packed record 15 TSongV1 = packed record
14 Version: Integer; 16 Version: Integer;
15 17
@@ -102,7 +104,7 @@ type
102 104
103 { TSong } 105 { TSong }
104 106
105 TSong = TSongV5; 107 TSong = TSongV6;
106 108
107 procedure WriteSongToStream(S: TStream; const ASong: TSong); 109 procedure WriteSongToStream(S: TStream; const ASong: TSong);
108 procedure ReadSongFromStream(S: TStream; out ASong: TSong); 110 procedure ReadSongFromStream(S: TStream; out ASong: TSong);
@@ -114,7 +116,7 @@ function UpgradeSong(S: TSongV1): TSong; overload;
114 function UpgradeSong(S: TSongV2): TSong; overload; 116 function UpgradeSong(S: TSongV2): TSong; overload;
115 function UpgradeSong(S: TSongV3): TSong; overload; 117 function UpgradeSong(S: TSongV3): TSong; overload;
116 function UpgradeSong(S: TSongV4): TSong; overload; 118 function UpgradeSong(S: TSongV4): TSong; overload;
117 function UpgradeSong(S: TSongV5): TSong; overload; 119 //function UpgradeSong(S: TSongV5): TSong; overload;
118 120
119 function OptimizeSong(const S: TSong): TSong; 121 function OptimizeSong(const S: TSong): TSong;
120 function PatternIsUsed(Idx: Integer; const Song: TSong): Boolean; 122 function PatternIsUsed(Idx: Integer; const Song: TSong): Boolean;
@@ -435,6 +437,9 @@ begin
435 6: begin 437 6: begin
436 ReadSongFromStreamV6(S, ASong); 438 ReadSongFromStreamV6(S, ASong);
437 end; 439 end;
440 else begin
441 raise ESongVersionException.Create(IntToStr(Version));
442 end;
438 end; 443 end;
439 end; 444 end;
440 445
@@ -673,7 +678,7 @@ var
673 Result := False; 678 Result := False;
674 end; 679 end;
675 680
676 procedure ConvertPattern(var Pat: TPattern); 681 procedure ConvertPattern(var Pat: TPatternV1);
677 var 682 var
678 I: Integer; 683 I: Integer;
679 Regs: TRegisters; 684 Regs: TRegisters;
@@ -722,9 +727,44 @@ begin
722 end; 727 end;
723 728
724 function UpgradeSong(S: TSongV4): TSong; 729 function UpgradeSong(S: TSongV4): TSong;
730 var
731 SV6: TSongV6;
732 I: Integer;
733
734 function ConvertPattern(Pat: PPatternV1): PPattern;
735 var
736 J: Integer;
737 begin
738 New(Result);
739 for J := Low(TPatternV1) to High(TPatternV1) do begin
740 Result^[J].Instrument := Pat^[J].Instrument;
741 Result^[J].EffectCode := Pat^[J].EffectCode;
742 Result^[J].EffectParams.Value := Pat^[J].EffectParams.Value;
743 Result^[J].Note := Pat^[J].Note;
744 Result^[J].Volume := 0;
745 end;
746 end;
725 begin 747 begin
726 S.Version := 5; 748 SV6.Version:=6;
727 Result := S; 749
750 SV6.Name:=S.Name;
751 SV6.Artist:=S.Artist;
752 SV6.Comment:=S.Comment;
753
754 SV6.Instruments:=S.Instruments;
755 SV6.Waves := S.Waves;
756
757 SV6.TicksPerRow:=S.TicksPerRow;
758 SV6.OrderMatrix:=S.OrderMatrix;
759
760 SV6.Routines:=S.Routines;
761
762 SV6.Patterns := TPatternMap.Create;
763 // Update patterns to new format
764 for I := 0 to S.Patterns.Count-1 do
765 SV6.Patterns.Add(S.Patterns.Keys[I], ConvertPattern(S.Patterns.Data[I]));
766
767 Result := SV6;
728 end; 768 end;
729 769
730 function OptimizeSong(const S: TSong): TSong; 770 function OptimizeSong(const S: TSong): TSong;
Modifiedtracker.lfm +2−2
@@ -1,7 +1,7 @@
1 object frmTracker: TfrmTracker 1 object frmTracker: TfrmTracker
2 Left = 1656 2 Left = 674
3 Height = 902 3 Height = 902
4 Top = 134 4 Top = 72
5 Width = 1458 5 Width = 1458
6 AllowDropFiles = True 6 AllowDropFiles = True
7 Caption = 'hUGETracker' 7 Caption = 'hUGETracker'
Modifiedtracker.pas +11−9
@@ -889,18 +889,20 @@ end;
889 procedure TfrmTracker.LoadSong(Filename: String); 889 procedure TfrmTracker.LoadSong(Filename: String);
890 var 890 var
891 Stream: TStream; 891 Stream: TStream;
892 TempSong: TSong;
892 begin 893 begin
893 DestroySong(Song); 894 Stream := TFileStream.Create(FileName, fmOpenRead);
894
895 stream := TFileStream.Create(FileName, fmOpenRead);
896 try 895 try
897 ReadSongFromStream(stream, Song); 896 ReadSongFromStream(stream, TempSong);
898 finally 897 DestroySong(Song);
899 stream.Free; 898 Song := TempSong;
899 FileSaveAs1.Dialog.FileName := FileName;
900 UpdateUIAfterLoad(Filename);
901 except
902 on E: ESongVersionException do
903 ShowMessage('This song was created with a newer version of hUGETracker, and cannot be loaded.');
900 end; 904 end;
901 FileSaveAs1.Dialog.FileName := FileName; 905 Stream.Free;
902
903 UpdateUIAfterLoad(Filename);
904 end; 906 end;
905 907
906 procedure TfrmTracker.ReloadPatterns; 908 procedure TfrmTracker.ReloadPatterns;