Commit dbd79a4

Nick committed on
Improved codegen error reporting
commit dbd79a41b933d12d1c104d809397a0b96b5e001f parent f618a93
4 changed files +77−21
Modifiedcodegen.pas +42−12
@@ -21,6 +21,8 @@ procedure RenderSongToFile(Song: TSong; Filename: String);
21 21
22 implementation 22 implementation
23 23
24 uses process;
25
24 function RenderOrderTable(OrderMatrix: TOrderMatrix): String; 26 function RenderOrderTable(OrderMatrix: TOrderMatrix): String;
25 function ArrayHelper(Ints: array of Integer): String; 27 function ArrayHelper(Ints: array of Integer): String;
26 var 28 var
@@ -144,6 +146,8 @@ function RenderPreviewROM(Song: TSong): Boolean;
144 var 146 var
145 OutFile: Text; 147 OutFile: Text;
146 I: Integer; 148 I: Integer;
149 Proc: TProcess;
150 OutSL: TStringList;
147 label AssemblyError, Cleanup; 151 label AssemblyError, Cleanup;
148 begin 152 begin
149 AssignFile(OutFile, './hUGEDriver/wave.htt'); 153 AssignFile(OutFile, './hUGEDriver/wave.htt');
@@ -172,17 +176,33 @@ begin
172 // Assemble the ROM 176 // Assemble the ROM
173 Chdir('hUGEDriver'); 177 Chdir('hUGEDriver');
174 178
175 if ExecuteProcess(('rgbasm'), 179 OutSL := TStringList.Create;
176 '-opreview.obj driverLite.z80', []) <> 0 then 180 Proc := TProcess.Create(nil);
177 goto AssemblyError; 181 Proc.Options := Proc.Options + [poWaitOnExit, poUsePipes, poStdErrToOutput];
178 182
179 if ExecuteProcess(('rgblink'), 183 Proc.Executable := 'rgbasm';
180 '-mpreview.map -npreview.sym -opreview.gb preview.obj', []) <> 0 then 184 Proc.Parameters.Clear;
181 goto AssemblyError; 185 Proc.Parameters.add('-opreview.obj');
182 186 Proc.Parameters.add('driverLite.z80');
183 if ExecuteProcess(('rgbfix'), 187 Proc.Execute;
184 '-p0 -v preview.gb', []) <> 0 then 188 if Proc.ExitCode <> 0 then goto AssemblyError;
185 goto AssemblyError; 189
190 Proc.Executable := 'rgblink';
191 Proc.Parameters.Clear;
192 Proc.Parameters.add('-mpreview.map');
193 Proc.Parameters.add('-npreview.sym');
194 Proc.Parameters.add('-opreview.gb');
195 Proc.Parameters.add('preview.obj');
196 Proc.Execute;
197 if Proc.ExitCode <> 0 then goto AssemblyError;
198
199 Proc.Executable := 'rgbfix';
200 Proc.Parameters.Clear;
201 Proc.Parameters.add('-p0');
202 Proc.Parameters.add('-v');
203 Proc.Parameters.add('preview.gb');
204 Proc.Execute;
205 if Proc.ExitCode <> 0 then goto AssemblyError;
186 206
187 Result := True; 207 Result := True;
188 goto Cleanup; 208 goto Cleanup;
@@ -190,9 +210,19 @@ begin
190 // Eh, screw good practice. How bad can it be? 210 // Eh, screw good practice. How bad can it be?
191 AssemblyError: 211 AssemblyError:
192 Result := False; 212 Result := False;
193 MessageDlg('Error!', 'There was an error assembling the song for playback. Write the rest of this dialog.', mtError, [mbOK], 0); 213 OutSL.LoadFromStream(Proc.Output);
214 MessageDlg(
215 'Error!',
216 'There was an error assembling the song for playback.'+LineEnding+LineEnding+
217 Proc.Executable+' output:'+LineEnding+
218 OutSL.Text,
219 mtError,
220 [mbOK],
221 0);
194 222
195 Cleanup: 223 Cleanup:
224 Proc.Free;
225 OutSL.Free;
196 Chdir('..'); 226 Chdir('..');
197 end; 227 end;
198 228
Modifiedtracker.lfm +6−2
@@ -55,10 +55,10 @@ object frmTracker: TfrmTracker
55 Height = 946 55 Height = 946
56 Top = 0 56 Top = 0
57 Width = 1865 57 Width = 1865
58 ActivePage = WavesTabSheet 58 ActivePage = PatternTabSheet
59 Align = alClient 59 Align = alClient
60 ParentFont = False 60 ParentFont = False
61 TabIndex = 3 61 TabIndex = 1
62 TabOrder = 0 62 TabOrder = 0
63 object GeneralTabSheet: TTabSheet 63 object GeneralTabSheet: TTabSheet
64 Caption = 'General' 64 Caption = 'General'
@@ -4700,6 +4700,10 @@ object frmTracker: TfrmTracker
4700 Caption = 'Duplicate row' 4700 Caption = 'Duplicate row'
4701 OnClick = MenuItem21Click 4701 OnClick = MenuItem21Click
4702 end 4702 end
4703 object MenuItem22: TMenuItem
4704 Caption = 'Replicate row'
4705 OnClick = MenuItem22Click
4706 end
4703 object MenuItem20: TMenuItem 4707 object MenuItem20: TMenuItem
4704 Caption = '-' 4708 Caption = '-'
4705 end 4709 end
Modifiedtracker.pas +24−0
@@ -27,6 +27,7 @@ type
27 LEDMeter1: TLEDMeter; 27 LEDMeter1: TLEDMeter;
28 LEDMeter2: TLEDMeter; 28 LEDMeter2: TLEDMeter;
29 MenuItem21: TMenuItem; 29 MenuItem21: TMenuItem;
30 MenuItem22: TMenuItem;
30 OrderEditStringGrid: TStringGrid; 31 OrderEditStringGrid: TStringGrid;
31 EditCut1: TEditCut; 32 EditCut1: TEditCut;
32 HeaderControl1: THeaderControl; 33 HeaderControl1: THeaderControl;
@@ -205,6 +206,7 @@ type
205 procedure MenuItem18Click(Sender: TObject); 206 procedure MenuItem18Click(Sender: TObject);
206 procedure MenuItem19Click(Sender: TObject); 207 procedure MenuItem19Click(Sender: TObject);
207 procedure MenuItem21Click(Sender: TObject); 208 procedure MenuItem21Click(Sender: TObject);
209 procedure MenuItem22Click(Sender: TObject);
208 procedure MenuItem5Click(Sender: TObject); 210 procedure MenuItem5Click(Sender: TObject);
209 procedure NoiseFreqSpinnerChange(Sender: TObject); 211 procedure NoiseFreqSpinnerChange(Sender: TObject);
210 procedure NoiseVisualizerPaint(Sender: TObject); 212 procedure NoiseVisualizerPaint(Sender: TObject);
@@ -1175,6 +1177,28 @@ begin
1175 end; 1177 end;
1176 end; 1178 end;
1177 1179
1180 procedure TfrmTracker.MenuItem22Click(Sender: TObject);
1181 var
1182 X, Highest: Integer;
1183 begin
1184 Highest := Song.Patterns.MaxKey;
1185
1186 with OrderEditStringGrid do begin
1187 InsertRowWithValues(
1188 Row,
1189 ['',
1190 IntToStr(Highest),
1191 IntToStr(Highest+1),
1192 IntToStr(Highest+2),
1193 IntToStr(Highest+3)]
1194 );
1195
1196 for X := 0 to 3 do
1197 Song.Patterns.CreateNewPattern(Highest+X)^ :=
1198 Song.Patterns.KeyData[StrToInt(Rows[Row][X+1])]^;
1199 end;
1200 end;
1201
1178 procedure TfrmTracker.MenuItem5Click(Sender: TObject); 1202 procedure TfrmTracker.MenuItem5Click(Sender: TObject);
1179 var 1203 var
1180 AboutForm: TfrmAboutHugeTracker; 1204 AboutForm: TfrmAboutHugeTracker;
Modifiedutils.pas +5−7
@@ -12,7 +12,7 @@ type
12 12
13 TOrderMapHelper = class helper for TPatternMap 13 TOrderMapHelper = class helper for TPatternMap
14 function GetOrCreateNew(Key: Integer): PPattern; 14 function GetOrCreateNew(Key: Integer): PPattern;
15 procedure CreateNewPattern(Key: Integer); 15 function CreateNewPattern(Key: Integer): PPattern;
16 function MaxKey: Integer; 16 function MaxKey: Integer;
17 end; 17 end;
18 18
@@ -36,15 +36,13 @@ begin
36 end; 36 end;
37 end; 37 end;
38 38
39 procedure TOrderMapHelper.CreateNewPattern(Key: Integer); 39 function TOrderMapHelper.CreateNewPattern(Key: Integer): PPattern;
40 var
41 NewPat: PPattern;
42 begin 40 begin
43 if IndexOf(Key) <> -1 then Exit; 41 if IndexOf(Key) <> -1 then Exit;
44 42
45 New(NewPat); 43 New(Result);
46 BlankPattern(NewPat); 44 BlankPattern(Result);
47 Self.Add(Key, NewPat); 45 Self.Add(Key, Result);
48 end; 46 end;
49 47
50 function TOrderMapHelper.MaxKey: Integer; 48 function TOrderMapHelper.MaxKey: Integer;