Skip to content

Commit 9c7127d

Browse files
authored
Merge branch 'master' into output-copy-to-clipboard
2 parents 1ac906f + 7a1e408 commit 9c7127d

39 files changed

Lines changed: 1820 additions & 344 deletions

ZXBStudio/App.axaml

Lines changed: 14 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -168,55 +168,50 @@
168168
<Setter Property="Margin" Value="0"></Setter>
169169
<Setter Property="CornerRadius" Value="5"></Setter>
170170
<Setter Property="Height" Value="24"></Setter>
171-
<Setter Property="Padding" Value="2"></Setter>
171+
<Setter Property="Padding" Value="5"></Setter>
172172
</Style>
173173
<Style Selector="TextBlock.dialog">
174174
<Setter Property="Foreground" Value="#ffffffff"></Setter>
175-
<Setter Property="Margin" Value="2"></Setter>
175+
<Setter Property="Margin" Value="5"></Setter>
176176
</Style>
177177
<Style Selector="TextBox.dialog">
178-
<Setter Property="Margin" Value="2"></Setter>
178+
<Setter Property="Margin" Value="5"></Setter>
179179
<Setter Property="CornerRadius" Value="5"></Setter>
180-
<Setter Property="Height" Value="24"></Setter>
180+
<Setter Property="Height" Value="32"></Setter>
181181
<Setter Property="MaxWidth" Value="140"></Setter>
182182
</Style>
183183
<Style Selector="Button.dialog">
184-
<Setter Property="Margin" Value="2"></Setter>
184+
<Setter Property="Margin" Value="5"></Setter>
185185
<Setter Property="CornerRadius" Value="5"></Setter>
186186
</Style>
187-
<Style Selector="ToggleButton.dialog">
188-
<Setter Property="Margin" Value="2"></Setter>
189-
<Setter Property="CornerRadius" Value="5"></Setter>
190-
<Setter Property="Height" Value="32"></Setter>
191-
</Style>
192187
<Style Selector="ComboBox.dialog">
193188
<Setter Property="Margin" Value="0"></Setter>
194189
<Setter Property="CornerRadius" Value="5"></Setter>
195-
<Setter Property="Height" Value="24"></Setter>
196-
<Setter Property="Padding" Value="2"></Setter>
190+
<Setter Property="Height" Value="32"></Setter>
191+
<Setter Property="Padding" Value="5"></Setter>
197192
</Style>
198193

199194
<Style Selector="NumericUpDown.dialog">
200195
<Setter Property="Margin" Value="0"></Setter>
201196
<Setter Property="CornerRadius" Value="5"></Setter>
202-
<Setter Property="Padding" Value="5,2,0,0"></Setter>
197+
<Setter Property="Padding" Value="5,7,0,0"></Setter>
203198
<Setter Property="VerticalAlignment" Value="Center"></Setter>
204199
<Setter Property="BorderThickness" Value="0"></Setter>
205200
<Setter Property="HorizontalContentAlignment" Value="Stretch"></Setter>
206201
</Style>
207202
<Style Selector="NumericUpDown.dialog TextBox">
208-
<Setter Property="Margin" Value="0"></Setter>
203+
<Setter Property="Margin" Value="5"></Setter>
209204
<Setter Property="CornerRadius" Value="5"></Setter>
210-
<Setter Property="Height" Value="24"></Setter>
205+
<Setter Property="Height" Value="32"></Setter>
211206
<Setter Property="MaxWidth" Value="140"></Setter>
212-
<Setter Property="HorizontalAlignment" Value="Right"></Setter>
207+
<Setter Property="HorizontalAlignment" Value="Left"></Setter>
213208
</Style>
214-
<Style Selector="Border.numericBorder">
209+
<Style Selector="Border.numericborder">
215210
<Setter Property="BorderBrush" Value="#ff909090" ></Setter>
216-
<Setter Property="BorderThickness" Value="1" ></Setter>
211+
<Setter Property="BorderThickness" Value="2" ></Setter>
217212
<Setter Property="CornerRadius" Value="5" ></Setter>
218213
<Setter Property="Padding" Value="-1" ></Setter>
219-
<Setter Property="Margin" Value="2,0,2,0"></Setter>
214+
<Setter Property="Margin" Value="5,0,5,0"></Setter>
220215
<Setter Property="Height" Value="32"></Setter>
221216
</Style>
222217
</Application.Styles>

ZXBStudio/BuildSystem/ZXCodeFile.cs

Lines changed: 73 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using System;
1+
using Avalonia.Svg.Skia;
2+
using System;
23
using System.Collections.Generic;
34
using System.IO;
45
using System.Linq;
@@ -116,7 +117,14 @@ public void CreateBuildFile(IEnumerable<ZXCodeFile> AllFiles)
116117
string line = lines[lineNum];
117118
string trim = line.Trim().ToLower();
118119

119-
if (trim.StartsWith("#line") || string.IsNullOrWhiteSpace(trim))
120+
if (string.IsNullOrWhiteSpace(trim))
121+
{
122+
sbSource.AppendLine(line);
123+
sb.AppendLine(line);
124+
continue;
125+
}
126+
127+
if (trim.StartsWith("#line"))
120128
continue;
121129

122130
if (regInclude.IsMatch(line))
@@ -156,8 +164,48 @@ public void CreateBuildFile(IEnumerable<ZXCodeFile> AllFiles)
156164

157165
BuildContent = sb.ToString();
158166

167+
bool doTrim = true;
168+
169+
while (doTrim)
170+
{
171+
BuildContent.TrimEnd();
172+
173+
if (BuildContent.EndsWith("\r") || BuildContent.EndsWith("\n"))
174+
{
175+
176+
if (BuildContent.EndsWith("\r\n"))
177+
BuildContent = BuildContent.Substring(0, BuildContent.Length - 2);
178+
else
179+
BuildContent = BuildContent.Substring(0, BuildContent.Length - 1);
180+
181+
}
182+
else
183+
doTrim = false;
184+
}
185+
159186
File.WriteAllText(Path.Combine(Directory, TempFileName), BuildContent);
187+
160188
Content = sbSource.ToString();
189+
190+
doTrim = true;
191+
192+
while (doTrim)
193+
{
194+
195+
Content.TrimEnd();
196+
197+
if (Content.EndsWith("\r") || Content.EndsWith("\n"))
198+
{
199+
200+
if (Content.EndsWith("\r\n"))
201+
Content = Content.Substring(0, Content.Length - 2);
202+
else
203+
Content = Content.Substring(0, Content.Length - 1);
204+
205+
}
206+
else
207+
doTrim = false;
208+
}
161209
}
162210
else
163211
{
@@ -171,7 +219,10 @@ public void CreateBuildFile(IEnumerable<ZXCodeFile> AllFiles)
171219
string trim = line.Trim().ToLower();
172220

173221
if (string.IsNullOrWhiteSpace(trim))
222+
{
223+
sb.AppendLine(line);
174224
continue;
225+
}
175226

176227
if (!inAsm)
177228
inAsm = line.Trim().ToLower().StartsWith("asm");
@@ -209,6 +260,26 @@ public void CreateBuildFile(IEnumerable<ZXCodeFile> AllFiles)
209260

210261
BuildContent = sb.ToString();
211262

263+
bool dotrim = true;
264+
265+
while (dotrim)
266+
{
267+
268+
BuildContent.TrimEnd();
269+
270+
if (BuildContent.EndsWith("\r") || BuildContent.EndsWith("\n"))
271+
{
272+
273+
if (BuildContent.EndsWith("\r\n"))
274+
BuildContent = BuildContent.Substring(0, BuildContent.Length - 2);
275+
else
276+
BuildContent = BuildContent.Substring(0, BuildContent.Length - 1);
277+
278+
}
279+
else
280+
dotrim = false;
281+
}
282+
212283
File.WriteAllText(Path.Combine(Directory, TempFileName), sb.ToString());
213284
}
214285
}

ZXBStudio/BuildSystem/ZXProjectBuilder.cs

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public class ZXProjectBuilder
2525

2626
if (ZXProjectManager.Current == null)
2727
{
28-
OutputLogWritter.WriteLine("No open projcet, aborting...");
28+
OutputLogWritter.WriteLine("No open project, aborting...");
2929
return null;
3030
}
3131

@@ -62,8 +62,11 @@ public class ZXProjectBuilder
6262

6363
var args = settings.GetSettings();
6464

65-
OutputLogWritter.WriteLine("Building program...");
66-
65+
var startTime = DateTime.Now;
66+
OutputLogWritter.WriteLine("Project path: " + project.ProjectPath);
67+
OutputLogWritter.WriteLine("Building program " + mainFile);
68+
OutputLogWritter.WriteLine("Building starts at " + startTime);
69+
6770
var proc = Process.Start(new ProcessStartInfo(Path.GetFullPath(ZXOptions.Current.ZxbcPath), $"\"{mainFile}\" " + args) { WorkingDirectory = project.ProjectPath, RedirectStandardError = true, CreateNoWindow = true });
6871

6972
string logOutput;
@@ -98,7 +101,7 @@ public class ZXProjectBuilder
98101

99102
OutputLogWritter.WriteLine($"Program size: {binary.Length} bytes");
100103

101-
OutputLogWritter.WriteLine("Program built successfully.");
104+
OutputLogWritter.WriteLine("Program built successfully (Elapsed time: " + (startTime - DateTime.Now).Duration().ToString(@"hh\:mm\:ss") + " seconds)");
102105

103106
if (settings.NextMode)
104107
{
@@ -259,7 +262,7 @@ private static bool BuildNexFile(byte[] binary, ZXBuildSettings settings, ZXProj
259262
{
260263
if (ZXProjectManager.Current == null)
261264
{
262-
OutputLogWritter.WriteLine("No open projcet, aborting...");
265+
OutputLogWritter.WriteLine("No open project, aborting...");
263266
return null;
264267
}
265268

@@ -451,14 +454,14 @@ public static bool Export(ZXExportOptions Export, TextWriter OutputLogWritter)
451454
{
452455
if (ZXProjectManager.Current == null)
453456
{
454-
OutputLogWritter.WriteLine("No open projcet, aborting...");
457+
OutputLogWritter.WriteLine("No open project, aborting...");
455458
return false;
456459
}
457460

458461
var project = ZXProjectManager.Current;
459462

460463
Cleanup(project.ProjectPath);
461-
ZXBuildSettings? settings = null;
464+
ZXBuildSettings? settings;
462465
string? mainFile = null;
463466

464467
if (string.IsNullOrWhiteSpace(ZXOptions.Current.ZxbcPath) || string.IsNullOrWhiteSpace(ZXOptions.Current.ZxbasmPath))

ZXBStudio/Classes/ZXOptions.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,5 +43,6 @@ public static void SaveCurrentSettings()
4343
public string LastProjectPath { get; set; }
4444
public ZXBuildSettings? DefaultBuildSettings { get; set; }
4545
public string? NextEmulatorPath { get; set; }
46+
public bool DisableAuto { get; set; }
4647
}
4748
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
<UserControl xmlns="https://github.com/avaloniaui"
2+
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
3+
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
4+
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
5+
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
6+
x:Class="ZXBasicStudio.DebuggingTools.Flags.Controls.ZXFlagsView">
7+
<UserControl.Styles>
8+
</UserControl.Styles>
9+
<Grid Grid.Row="1" RowDefinitions="50" VerticalAlignment="Stretch">
10+
<Panel Background="#FF606060">
11+
<Grid ColumnDefinitions="*,*,*,*,*,*,*,*" RowDefinitions="25,25" Name="gridFlags">
12+
<TextBlock Grid.Row="0" Grid.Column="0" HorizontalAlignment="Center" VerticalAlignment="Center" ToolTip.Tip="S - Sign flag: Set if the 2-complement value is negative (copy of MSB)">S</TextBlock>
13+
<TextBlock Grid.Row="0" Grid.Column="1" HorizontalAlignment="Center" VerticalAlignment="Center" ToolTip.Tip="Z - Zero flag: Set if the value is zero">Z</TextBlock>
14+
<TextBlock Grid.Row="0" Grid.Column="2" HorizontalAlignment="Center" VerticalAlignment="Center" ToolTip.Tip="F5 - undocumented: Copy of bit 5">-</TextBlock>
15+
<TextBlock Grid.Row="0" Grid.Column="3" HorizontalAlignment="Center" VerticalAlignment="Center" ToolTip.Tip="H - Half Carry: Carry from bit 3 to bit 4">H</TextBlock>
16+
<TextBlock Grid.Row="0" Grid.Column="4" HorizontalAlignment="Center" VerticalAlignment="Center" ToolTip.Tip="F3 - undocumented: Copy of bit 3">-</TextBlock>
17+
<TextBlock Grid.Row="0" Grid.Column="5"
18+
HorizontalAlignment="Center" VerticalAlignment="Center" ToolTip.Tip="P/V - Parity or Overflow: Parity set if even number of bits set. Overflow set if the 2-complement result does not fit in the register">
19+
V
20+
</TextBlock>
21+
<TextBlock Grid.Row="0" Grid.Column="6"
22+
HorizontalAlignment="Center" VerticalAlignment="Center" ToolTip.Tip="N - Subtract: Set if the last operation was a subtraction">
23+
N
24+
</TextBlock>
25+
<TextBlock Grid.Row="0" Grid.Column="7"
26+
HorizontalAlignment="Center" VerticalAlignment="Center" ToolTip.Tip="C - Carry: Set if the result did not fit in the register">
27+
C
28+
</TextBlock>
29+
<Border Grid.Column="0" Grid.Row="1" BorderBrush="Black" BorderThickness="0,1,0,0">
30+
<TextBlock Name="Bit7" HorizontalAlignment="Center" VerticalAlignment="Center"/>
31+
</Border>
32+
<Border Grid.Column="1" Grid.Row="1" BorderBrush="Black" BorderThickness="1,1,0,0">
33+
<TextBlock Name="Bit6" HorizontalAlignment="Center" VerticalAlignment="Center"/>
34+
</Border>
35+
<Border Grid.Column="2" Grid.Row="1" BorderBrush="Black" BorderThickness="1,1,0,0">
36+
<TextBlock Name="Bit5" HorizontalAlignment="Center" VerticalAlignment="Center"/>
37+
</Border>
38+
<Border Grid.Column="3" Grid.Row="1" BorderBrush="Black" BorderThickness="1,1,0,0">
39+
<TextBlock Name="Bit4" HorizontalAlignment="Center" VerticalAlignment="Center"/>
40+
</Border>
41+
<Border Grid.Column="4" Grid.Row="1" BorderBrush="Black" BorderThickness="1,1,0,0">
42+
<TextBlock Name="Bit3" HorizontalAlignment="Center" VerticalAlignment="Center"/>
43+
</Border>
44+
<Border Grid.Column="5" Grid.Row="1" BorderBrush="Black" BorderThickness="1,1,0,0">
45+
<TextBlock Name="Bit2" HorizontalAlignment="Center" VerticalAlignment="Center"/>
46+
</Border>
47+
<Border Grid.Column="6" Grid.Row="1" BorderBrush="Black" BorderThickness="1,1,0,0">
48+
<TextBlock Name="Bit1" HorizontalAlignment="Center" VerticalAlignment="Center"/>
49+
</Border>
50+
<Border Grid.Column="7" Grid.Row="1" BorderBrush="Black" BorderThickness="1,1,0,0">
51+
<TextBlock Name="Bit0" HorizontalAlignment="Center" VerticalAlignment="Center"/>
52+
</Border>
53+
</Grid>
54+
</Panel>
55+
</Grid>
56+
</UserControl>
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
using System;
2+
using System.Linq;
3+
using Avalonia.Controls;
4+
5+
namespace ZXBasicStudio.DebuggingTools.Flags.Controls
6+
{
7+
public partial class ZXFlagsView : UserControl
8+
{
9+
10+
public ZXFlagsView()
11+
{
12+
InitializeComponent();
13+
}
14+
15+
public void Update(byte value)
16+
{
17+
var bits = GetBinaryFromByte(value);
18+
Bit7.Text = bits[7].ToString();
19+
Bit6.Text = bits[6].ToString();
20+
Bit5.Text = bits[5].ToString();
21+
Bit4.Text = bits[4].ToString();
22+
Bit3.Text = bits[3].ToString();
23+
Bit2.Text = bits[2].ToString();
24+
Bit1.Text = bits[1].ToString();
25+
Bit0.Text = bits[0].ToString();
26+
}
27+
28+
private static int[] GetBinaryFromByte(byte value)
29+
{
30+
string s = Convert.ToString(value, 2);
31+
int[] bits = s.PadLeft(8, '0')
32+
.Select(c => int.Parse(c.ToString()))
33+
.ToArray();
34+
35+
Array.Reverse(bits);
36+
return bits;
37+
}
38+
39+
public void Clear()
40+
{
41+
Bit7.Text = "-";
42+
Bit6.Text = "-";
43+
Bit5.Text = "-";
44+
Bit4.Text = "-";
45+
Bit3.Text = "-";
46+
Bit2.Text = "-";
47+
Bit1.Text = "-";
48+
Bit0.Text = "-";
49+
50+
}
51+
}
52+
}

ZXBStudio/Dialogs/ZXOptionsDialog.axaml

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,16 @@
55
xmlns:wnd="using:ZXBasicStudio.Classes"
66
mc:Ignorable="d" d:DesignWidth="300" d:DesignHeight="300"
77
MinWidth="330" MaxWidth="330"
8-
MinHeight="420" MaxHeight="420"
8+
MinHeight="460" MaxHeight="460"
99
x:Class="ZXBasicStudio.Dialogs.ZXOptionsDialog"
1010
CanResize="False"
1111
Icon="/Assets/zxbs.ico"
1212
Title="General options" WindowStartupLocation="CenterOwner">
1313
<Grid ColumnDefinitions="*,7*,8*,2*,*" RowDefinitions="*,*,*,*,*,*,*,*,*,1.5*,1.5*,1.5*">
14-
<TextBlock Classes="dialog" Grid.Row="0" Grid.Column="1" VerticalAlignment="Center" HorizontalAlignment="Right">ZXBC path:</TextBlock>
14+
<TextBlock Classes="dialog" Grid.Row="0" Grid.Column="1" VerticalAlignment="Center" >ZXBC path:</TextBlock>
1515
<TextBox Classes="dialog" Grid.Row="0" Grid.Column="2" Name="txtZxbc" IsReadOnly="True"></TextBox>
1616
<Button Classes="dialog" Grid.Row="0" Grid.Column="3" VerticalAlignment="Center" Name="btnSelectZxbc">...</Button>
17-
<TextBlock Classes="dialog" Grid.Row="1" Grid.Column="1" VerticalAlignment="Center" HorizontalAlignment="Right">ZXBASM path:</TextBlock>
17+
<TextBlock Classes="dialog" Grid.Row="1" Grid.Column="1" VerticalAlignment="Center" >ZXBASM path:</TextBlock>
1818
<TextBox Classes="dialog" Grid.Row="1" Grid.Column="2" Name="txtZxbasm" IsReadOnly="True"></TextBox>
1919
<Button Classes="dialog" Grid.Row="1" Grid.Column="3" VerticalAlignment="Center" Name="btnSelectZxbasm">...</Button>
2020
<TextBlock Classes="dialog" Grid.Row="2" Grid.Column="1" VerticalAlignment="Center">Editor font size:</TextBlock>
@@ -34,12 +34,18 @@
3434
<TextBlock Classes="dialog" Grid.Row="7" Grid.Column="1" VerticalAlignment="Center">Antialias rendering:</TextBlock>
3535
<CheckBox Classes="dialog" Name="ckAntiAlias" Grid.Column="2" Grid.Row="7"></CheckBox>
3636

37-
<TextBlock Classes="dialog" Grid.Row="8" Grid.Column="1" VerticalAlignment="Center" HorizontalAlignment="Right">Next emulator path:</TextBlock>
37+
<TextBlock Classes="dialog" Grid.Row="8" Grid.Column="1" VerticalAlignment="Center">Next emulator path:</TextBlock>
3838
<TextBox Classes="dialog" Grid.Row="8" Grid.Column="2" Name="txtNextEmulator" IsReadOnly="True"></TextBox>
3939
<Button Classes="dialog" Grid.Row="8" Grid.Column="3" VerticalAlignment="Center" Name="btnSelectNextEmulator">...</Button>
4040

41-
<Button Classes="dialog" Grid.Row="9" Grid.Column="2" Padding="6" VerticalAlignment="Center" Name="btnKeybMap">Keyboard mappings</Button>
42-
<Button Classes="dialog" Grid.Row="10" Grid.Column="2" Padding="6" VerticalAlignment="Center" Name="btnDefaultBuildConfig">Default build options</Button>
41+
<TextBlock Classes="dialog" Grid.Row="9" Grid.Column="1" VerticalAlignment="Center">Disable autocomplete:</TextBlock>
42+
<CheckBox Classes="dialog" Name="ckDisableAuto" Grid.Column="2" Grid.Row="9"></CheckBox>
43+
44+
<StackPanel Spacing="10" Margin="0,0,0,0" Grid.Row="10" Grid.ColumnSpan="5" Grid.RowSpan="1" Orientation="Horizontal" HorizontalAlignment="Center">
45+
<Button Classes="dialog" Margin="0" Padding="6" VerticalAlignment="Center" Name="btnDefaultBuildConfig">Default build options</Button>
46+
<Button Classes="dialog" Margin="0" Padding="6" VerticalAlignment="Center" Name="btnKeybMap">Keyboard mappings</Button>
47+
</StackPanel>
48+
4349
<StackPanel Margin="0,0,0,10" Grid.Row="11" Grid.ColumnSpan="4" Orientation="Horizontal" HorizontalAlignment="Right">
4450
<Button Classes="dialog" VerticalAlignment="Bottom" Padding="7" Name="btnCancel">Cancel</Button>
4551
<Button Classes="dialog" VerticalAlignment="Bottom" Padding="7" Name="btnAccept">Accept</Button>

0 commit comments

Comments
 (0)