diff --git a/Branswe.md b/Branswe.md
deleted file mode 100644
index ef560bf..0000000
--- a/Branswe.md
+++ /dev/null
@@ -1,327 +0,0 @@
-# Branswe编程语言使用指南
-
-## 简介
-
-Branswe是一种简单的编程语言,用于CMLeonOS系统中进行脚本编写和自动化操作。它提供了基本的控制台操作、变量管理、条件判断、循环、文件系统操作等功能。
-
-## 基本语法
-
-### 命令格式
-```
-命令名 [参数]
-```
-
-### 注释
-```
-# 这是注释
-```
-
-## 变量操作
-
-### 定义文本变量
-```
-var(text) 变量名 = 值
-```
-
-### 变量赋值
-```
-var() 变量名 = 变量2
-```
-
-### 变量删除
-```
-var() 变量名 rm
-```
-
-### 变量运算
-```
-var() 变量名 =+ 变量2
-var() 变量名 =- 变量2
-var() 变量名 =* 变量2
-var() 变量名 =/ 变量2
-```
-
-### 获取变量值
-```
-ref getvar 变量名
-```
-
-## 控制台操作
-
-### 显示文本(不换行)
-```
-conshow 变量名
-```
-
-### 显示文本(换行)
-```
-conshowl 变量名
-```
-
-### 清屏
-```
-concls
-```
-
-### 输入
-```
-coninput 变量名
-```
-
-### 蜂鸣
-```
-conbeep
-```
-
-## 系统引用
-
-### 鼠标位置
-```
-ref mousex
-ref mousey
-```
-
-### 屏幕尺寸
-```
-ref screenx
-ref screeny
-```
-
-### 控制台颜色
-```
-ref concolour-b
-ref concolour-f
-```
-
-### 磁盘信息
-```
-ref getalldisks
-```
-
-## 条件判断
-
-### decide语句
-```
-decide 变量1 操作符 变量2
-```
-
-支持的操作符:
-- `==` 等于
-- `!=` 不等于
-- `>` 大于
-- `<` 小于
-- `>=` 大于等于
-- `<=` 小于等于
-
-### if语句
-```
-if 条件 then 真代码 else 假代码
-```
-
-### 示例
-```
-var(text) num1 = 10
-var(text) num2 = 20
-decide num1 == num2
-if [] then conshow match else conshow no match
-```
-
-## 循环
-
-### loop语句
-```
-loop << 变量名
-```
-
-执行变量中的代码,无限循环。
-
-### 示例
-```
-var(text) code = conshow hello
-loop << code
-```
-
-## 字符串操作
-
-### 读取字符串并执行
-```
-rstr 变量名
-```
-
-执行变量中存储的代码(支持\n换行)。
-
-### 示例
-```
-var(text) mycode = conshow hello\nconshow world
-rstr mycode
-```
-
-## 文件系统操作
-
-### 注册VFS
-```
-diskfile reg
-```
-
-### 创建文件
-```
-diskfile create file 路径
-```
-
-### 创建目录
-```
-diskfile create dir 路径
-```
-
-### 写入文件
-```
-diskfile write 内容 to 路径
-```
-
-### 示例
-```
-diskfile reg
-diskfile create file /test.txt
-var(text) content = Hello, World!
-diskfile write content to /test.txt
-```
-
-## 系统功能
-
-### 睡眠
-```
-sleep 变量名
-```
-
-### 电源管理
-```
-power off
-power reboot
-```
-
-### 结束程序
-```
-end
-```
-
-## 方法定义
-
-### 定义方法
-```
-method 变量部分 << 代码部分
-```
-
-### 调用方法
-```
-方法名 参数
-```
-
-### 示例
-```
-var(text) printname = print
-var(text) myname = Leon
-method printname [] << conshow []
-printname myname
-```
-
-## 完整示例
-
-### 示例1:Hello World
-```
-# 简单的Hello World程序
-var(text) hello = Hello, Branswe!
-conshow hello
-```
-
-### 示例2:变量操作
-```
-# 变量定义和运算
-var(text) num1 = 10
-var(text) num2 = 20
-var() num1 =+ num2
-conshowl num1
-```
-
-### 示例3:条件判断
-```
-# 条件判断示例
-var(text) a = 10
-var(text) b = 20
-decide a < b
-if [] then conshow a is smaller else conshow a is larger
-```
-
-### 示例4:循环
-```
-# 循环示例
-var(text) code = conshow loop\nsleep 1000
-loop << code
-```
-
-### 示例5:文件操作
-```
-# 文件操作示例
-diskfile reg
-diskfile create file /test.txt
-var(text) content = Hello, File System!
-diskfile write content to /test.txt
-```
-
-### 示例6:系统功能
-```
-# 系统功能示例
-conbeep
-var(text) wait = 1000
-sleep wait
-ref mousex
-conshowl []
-```
-
-### 示例7:自定义方法
-```
-# 自定义方法示例
-var(text) greet = greet
-var(text) name = Leon
-method greet [] << conshow Hello, []!
-greet name
-```
-
-## 注意事项
-
-1. **大小写敏感**:命令和变量名区分大小写
-2. **空格处理**:参数之间用空格分隔
-3. **变量存储**:所有变量都作为文本存储,运算时会自动转换
-4. **注释支持**:使用#号添加注释
-5. **变量作用域**:变量在整个脚本中有效
-6. **无限循环**:loop命令会无限循环,需要使用end或其他方式退出
-7. **文件系统**:使用diskfile前需要先执行diskfile reg注册VFS
-
-## 最佳实践
-
-1. **添加注释**:在复杂逻辑前添加注释说明
-2. **使用变量**:避免硬编码,使用变量提高灵活性
-3. **错误检查**:在使用变量前检查其值
-4. **代码格式**:保持代码缩进和格式一致
-5. **测试验证**:逐步测试每个功能确保正确性
-
-## 参考资料
-
-- CMLeonOS Shell命令
-- Branswe编程语言规范
-- Cosmos系统文档
-
-## 更新日志
-
-### 版本2.0
-- 更新了所有命令的实际语法
-- 添加了文件系统操作支持
-- 添加了系统引用命令
-- 添加了电源管理功能
-- 添加了自定义方法功能
-- 修正了条件判断和循环的语法
-- 完善了变量操作命令
-
-### 版本1.0
-- 初始版本
-- 添加了CMLeonOS兼容性支持
-- 完善了错误处理
diff --git a/BuildTime.txt b/BuildTime.txt
index 458997f..6eccd35 100644
--- a/BuildTime.txt
+++ b/BuildTime.txt
@@ -1 +1 @@
-2026-03-27 21:26:04
\ No newline at end of file
+2026-03-28 21:43:07
\ No newline at end of file
diff --git a/CMLeonOS.csproj b/CMLeonOS.csproj
index 7ec7fcf..248b829 100644
--- a/CMLeonOS.csproj
+++ b/CMLeonOS.csproj
@@ -135,7 +135,7 @@
-
+
diff --git a/GitCommit.txt b/GitCommit.txt
index 41717d4..61ba08a 100644
--- a/GitCommit.txt
+++ b/GitCommit.txt
@@ -1 +1 @@
-7a7d44e
\ No newline at end of file
+0988f4c
\ No newline at end of file
diff --git a/System/BootMenu.cs b/System/BootMenu.cs
index 5322618..6530d8d 100644
--- a/System/BootMenu.cs
+++ b/System/BootMenu.cs
@@ -33,46 +33,111 @@ namespace CMLeonOS
internal static class BootMenu
{
+ private const int MinPanelWidth = 58;
+ private const int MaxPanelWidth = 86;
+
private static bool UserDatExists()
{
return File.Exists(@"0:\system\user.dat");
}
- private static void PrintOption(string text, bool selected)
+
+ private static string FitText(string text, int width)
{
- Console.SetCursorPosition(1, Console.GetCursorPosition().Top);
+ if (string.IsNullOrEmpty(text))
+ {
+ return string.Empty.PadRight(width);
+ }
- Console.BackgroundColor = selected ? ConsoleColor.White : ConsoleColor.Black;
- Console.ForegroundColor = selected ? ConsoleColor.Black : ConsoleColor.White;
+ if (text.Length > width)
+ {
+ if (width <= 3)
+ {
+ return text.Substring(0, width);
+ }
+ return text.Substring(0, width - 3) + "...";
+ }
- Console.WriteLine(text);
+ return text.PadRight(width);
+ }
+
+ private static void WriteAt(int x, int y, string text, ConsoleColor fg, ConsoleColor bg)
+ {
+ if (y < 0 || y >= Console.WindowHeight)
+ {
+ return;
+ }
+
+ Console.SetCursorPosition(Math.Max(0, x), y);
+ Console.ForegroundColor = fg;
+ Console.BackgroundColor = bg;
+ Console.Write(text);
+ }
+
+ private static void DrawPanelLine(int left, int top, int width, int row, string content, ConsoleColor contentFg, ConsoleColor contentBg)
+ {
+ int innerWidth = width - 2;
+ int y = top + row;
+
+ // Keep borders in a consistent theme color.
+ WriteAt(left, y, "|", ConsoleColor.Cyan, ConsoleColor.Black);
+ WriteAt(left + 1, y, FitText(content, innerWidth), contentFg, contentBg);
+ WriteAt(left + width - 1, y, "|", ConsoleColor.Cyan, ConsoleColor.Black);
+ }
+
+ private static void DrawHorizontalBorder(int left, int y, int width, bool topBorder, ConsoleColor fg, ConsoleColor bg)
+ {
+ string mid = new string('-', width - 2);
+ string line = topBorder ? ("+" + mid + "+") : ("+" + mid + "+");
+ WriteAt(left, y, line, fg, bg);
}
private static void Render(int selIdx, int remainingTime)
{
Console.BackgroundColor = ConsoleColor.Black;
- Console.ForegroundColor = ConsoleColor.Cyan;
-
- Console.SetCursorPosition(0, 0);
-
- uint mem = Cosmos.Core.CPU.GetAmountOfRAM();
- Console.WriteLine($"{Version.DisplayVersion} [{mem} MB memory]");
- Console.WriteLine($"Build Time: {GetBuildTime()}");
- Console.WriteLine();
- Console.WriteLine($"Auto-select in {remainingTime} seconds...");
- Console.WriteLine();
- Console.WriteLine("Select an option:");
- Console.WriteLine();
+ Console.ForegroundColor = ConsoleColor.White;
bool userDatExists = UserDatExists();
- int optionIndex = 0;
+ string[] options = userDatExists
+ ? new[] { "CMLeonOS Shell", "CMLeonOS Desktop", "Reboot", "Shutdown" }
+ : new[] { "CMLeonOS Shell", "Reboot", "Shutdown" };
- PrintOption("CMLeonOS (Shell)", selIdx == optionIndex++);
- if (userDatExists)
+ int width = Console.WindowWidth;
+ int height = Console.WindowHeight;
+ int panelWidth = Math.Min(MaxPanelWidth, Math.Max(MinPanelWidth, width - 8));
+ int panelLeft = Math.Max(0, (width - panelWidth) / 2);
+ int contentLines = 9 + options.Length;
+ int panelTop = Math.Max(0, (height - contentLines) / 2);
+
+ DrawHorizontalBorder(panelLeft, panelTop, panelWidth, true, ConsoleColor.Cyan, ConsoleColor.Black);
+ DrawPanelLine(panelLeft, panelTop, panelWidth, 1, " CMLeonOS Boot Manager ", ConsoleColor.Black, ConsoleColor.Cyan);
+ DrawPanelLine(panelLeft, panelTop, panelWidth, 2, string.Empty, ConsoleColor.White, ConsoleColor.Black);
+
+ uint mem = CPU.GetAmountOfRAM();
+ DrawPanelLine(panelLeft, panelTop, panelWidth, 3, $" Version : {Version.DisplayVersion}", ConsoleColor.Gray, ConsoleColor.Black);
+ DrawPanelLine(panelLeft, panelTop, panelWidth, 4, $" Memory : {mem} MB", ConsoleColor.Gray, ConsoleColor.Black);
+ DrawPanelLine(panelLeft, panelTop, panelWidth, 5, $" Build : {GetBuildTime()}", ConsoleColor.DarkGray, ConsoleColor.Black);
+ DrawPanelLine(panelLeft, panelTop, panelWidth, 6, string.Empty, ConsoleColor.White, ConsoleColor.Black);
+ DrawPanelLine(panelLeft, panelTop, panelWidth, 7, $" Auto boot in {remainingTime}s", ConsoleColor.Yellow, ConsoleColor.Black);
+ DrawPanelLine(panelLeft, panelTop, panelWidth, 8, " Use Up/Down to select, Enter to boot", ConsoleColor.DarkGray, ConsoleColor.Black);
+
+ for (int i = 0; i < options.Length; i++)
{
- PrintOption("CMLeonOS (Desktop)", selIdx == optionIndex++);
+ bool selected = i == selIdx;
+ string prefix = selected ? " > " : " ";
+ string text = prefix + options[i];
+ DrawPanelLine(
+ panelLeft,
+ panelTop,
+ panelWidth,
+ 9 + i,
+ text,
+ selected ? ConsoleColor.Black : ConsoleColor.White,
+ selected ? ConsoleColor.White : ConsoleColor.Black
+ );
}
- PrintOption("Reboot", selIdx == optionIndex++);
- PrintOption("Shutdown", selIdx == optionIndex++);
+
+ DrawHorizontalBorder(panelLeft, panelTop + contentLines, panelWidth, false, ConsoleColor.Cyan, ConsoleColor.Black);
+ Console.ResetColor();
}
private static BootMenuAction Confirm(int selIdx)
diff --git a/System/FileSystem.cs b/System/FileSystem.cs
index ba65cb3..e6ed624 100644
--- a/System/FileSystem.cs
+++ b/System/FileSystem.cs
@@ -202,7 +202,7 @@ namespace CMLeonOS
return extension switch
{
// 这是一堆后缀名的颜色标注,但是许多后缀名还不支持,先保留
- ".exe" => ConsoleColor.Green,
+ ".bin" => ConsoleColor.Green,
".cla" => ConsoleColor.Green,
".lua" => ConsoleColor.Cyan,
".js" => ConsoleColor.Cyan,
diff --git a/sh.exe b/sh.bin
similarity index 100%
rename from sh.exe
rename to sh.bin
diff --git a/shell/Commands/ExportTestExeCommand.cs b/shell/Commands/ExportTestExeCommand.cs
index 3d6058f..f9d4df1 100644
--- a/shell/Commands/ExportTestExeCommand.cs
+++ b/shell/Commands/ExportTestExeCommand.cs
@@ -22,7 +22,7 @@ namespace CMLeonOS.Commands
{
public static class ExportTestExeCommand
{
- [ManifestResourceStream(ResourceName = "CMLeonOS.sh.exe")]
+ [ManifestResourceStream(ResourceName = "CMLeonOS.sh.bin")]
private static byte[] testExeBytes;
public static void ExportTestExe(string outputPath)
@@ -31,18 +31,18 @@ namespace CMLeonOS.Commands
{
if (testExeBytes == null || testExeBytes.Length == 0)
{
- Console.WriteLine("Error: No test.exe found in embedded resources.");
+ Console.WriteLine("Error: No test.bin found in embedded resources.");
return;
}
- string destinationPath = string.IsNullOrEmpty(outputPath) ? @"0:\test.exe" : outputPath;
+ string destinationPath = string.IsNullOrEmpty(outputPath) ? @"0:\test.bin" : outputPath;
File.WriteAllBytes(destinationPath, testExeBytes);
- Console.WriteLine($"Test.exe exported successfully to: {destinationPath}");
+ Console.WriteLine($"Test.bin exported successfully to: {destinationPath}");
}
catch (Exception ex)
{
- Console.WriteLine($"Error exporting test.exe: {ex.Message}");
+ Console.WriteLine($"Error exporting test.bin: {ex.Message}");
}
}
}