diff --git a/README.md b/README.md index 7d4f3f5..3b380bd 100644 --- a/README.md +++ b/README.md @@ -7,10 +7,10 @@ TOMAS (**To**ny's **Ma**naged Operating **S**ystem) is a operating system based ### Prerequisites - Operating System - - Visual Studio 2019 - - COSMOS User Kit v20190508 or later + - Visual Studio 2022 + - COSMOS User Kit v2022 or later - VMWare Workstation Player -- .NET Core 3.1 or later +- .NET 6 or later diff --git a/src/TOMAS.sln b/src/TOMAS.sln index c5275a1..f5dd8dc 100644 --- a/src/TOMAS.sln +++ b/src/TOMAS.sln @@ -1,10 +1,8 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.29709.97 +# Visual Studio Version 17 +VisualStudioVersion = 17.4.33205.214 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tomas.Kernel", "Tomas.Kernel\Tomas.Kernel.csproj", "{AF6338C3-342A-4A12-A25C-2D53C5568DA8}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tomas.Common", "Tomas.Common\Tomas.Common.csproj", "{C50F3A6F-CFF4-4725-A1A5-21C5A2BC3321}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{59C9B3FC-B1EE-4C23-9BD9-D33074BF1334}" @@ -15,9 +13,11 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution TOMAS.sln.licenseheader = TOMAS.sln.licenseheader EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tomas.Interface", "Tomas.Interface\Tomas.Interface.csproj", "{DAA9EDF4-83C7-4271-9805-FD6CE29E1796}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tomas.Interface", "Tomas.Interface\Tomas.Interface.csproj", "{DAA9EDF4-83C7-4271-9805-FD6CE29E1796}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tomas.Terminal", "Tomas.Terminal\Tomas.Terminal.csproj", "{49E67E55-F9D2-419A-8097-38F39E98A95E}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tomas.Terminal", "Tomas.Terminal\Tomas.Terminal.csproj", "{49E67E55-F9D2-419A-8097-38F39E98A95E}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tomas.Kernal", "Tomas.Kernal\Tomas.Kernal.csproj", "{20750C95-A3C7-4958-BA9F-56E4C3BD0293}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -25,10 +25,6 @@ Global Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {AF6338C3-342A-4A12-A25C-2D53C5568DA8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AF6338C3-342A-4A12-A25C-2D53C5568DA8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AF6338C3-342A-4A12-A25C-2D53C5568DA8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AF6338C3-342A-4A12-A25C-2D53C5568DA8}.Release|Any CPU.Build.0 = Release|Any CPU {C50F3A6F-CFF4-4725-A1A5-21C5A2BC3321}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C50F3A6F-CFF4-4725-A1A5-21C5A2BC3321}.Debug|Any CPU.Build.0 = Debug|Any CPU {C50F3A6F-CFF4-4725-A1A5-21C5A2BC3321}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -41,6 +37,10 @@ Global {49E67E55-F9D2-419A-8097-38F39E98A95E}.Debug|Any CPU.Build.0 = Debug|Any CPU {49E67E55-F9D2-419A-8097-38F39E98A95E}.Release|Any CPU.ActiveCfg = Release|Any CPU {49E67E55-F9D2-419A-8097-38F39E98A95E}.Release|Any CPU.Build.0 = Release|Any CPU + {20750C95-A3C7-4958-BA9F-56E4C3BD0293}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {20750C95-A3C7-4958-BA9F-56E4C3BD0293}.Debug|Any CPU.Build.0 = Debug|Any CPU + {20750C95-A3C7-4958-BA9F-56E4C3BD0293}.Release|Any CPU.ActiveCfg = Release|Any CPU + {20750C95-A3C7-4958-BA9F-56E4C3BD0293}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/src/Tomas.Kernal/Kernel.cs b/src/Tomas.Kernal/Kernel.cs new file mode 100644 index 0000000..e464421 --- /dev/null +++ b/src/Tomas.Kernal/Kernel.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Text; +using Sys = Cosmos.System; + +namespace Tomas.Kernal +{ + public class Kernel : Sys.Kernel + { + + protected override void BeforeRun() + { + Console.WriteLine("Cosmos booted successfully. Type a line of text to get it echoed back."); + } + + protected override void Run() + { + Console.Write("Input: "); + var input = Console.ReadLine(); + Console.Write("Text typed: "); + Console.WriteLine(input); + } + } +} diff --git a/src/Tomas.Kernel/Programs/About.cs b/src/Tomas.Kernal/Programs/About.cs similarity index 100% rename from src/Tomas.Kernel/Programs/About.cs rename to src/Tomas.Kernal/Programs/About.cs diff --git a/src/Tomas.Kernel/Shell.cs b/src/Tomas.Kernal/Shell.cs similarity index 100% rename from src/Tomas.Kernel/Shell.cs rename to src/Tomas.Kernal/Shell.cs diff --git a/src/Tomas.Kernal/TomFS.cs b/src/Tomas.Kernal/TomFS.cs new file mode 100644 index 0000000..0d359b0 --- /dev/null +++ b/src/Tomas.Kernal/TomFS.cs @@ -0,0 +1,52 @@ +// I license this project under the GPL 3.0 license. +// See the LICENSE file in the project root for more information. +using System; +using System.IO; +using Cosmos.System.FileSystem; +using Cosmos.System.FileSystem.VFS; +using Tomas.Common; + +namespace Tomas.Kernel +{ + class TomFS + { + public const string ROOT_DIR = "0:\\"; + public static string SYSTEM_DIR = $"{ROOT_DIR}\\SYSTEM\\"; + + public static void Initialize() + { + try + { + var fs = new CosmosVFS(); + VFSManager.RegisterVFS(fs); + fs.CreateDirectory(SYSTEM_DIR); + Console.WriteLine("Creating system files."); + fs.CreateFile($"{SYSTEM_DIR}sysinfo.txt"); + Console.WriteLine("Setting system preferences."); + File.WriteAllText($"{SYSTEM_DIR}sysinfo.txt", $"{ComConsts.NAME}, {ComConsts.VersionGit}"); + Console.WriteLine("File system loaded sucesfully."); + var intro = File.ReadAllText($"{SYSTEM_DIR}sysinfo.txt"); + Console.WriteLine(intro); + + } + catch + { + Console.WriteLine("File system failed to load! Not all functions will work."); + } + } + + public static string[] ListDirectories(string path) + { + try + { + var dirs = Directory.GetDirectories(path); + return dirs; + } + catch + { + Console.WriteLine("Failed to find any directories."); + throw; + } + } + } +} diff --git a/src/Tomas.Kernal/Tomas.Kernal.csproj b/src/Tomas.Kernal/Tomas.Kernal.csproj new file mode 100644 index 0000000..0d4bb3c --- /dev/null +++ b/src/Tomas.Kernal/Tomas.Kernal.csproj @@ -0,0 +1,33 @@ + + + + net6.0 + + cosmos + false + True + + + + False + False + Pipe: Cosmos\Serial + Serial: COM1 + VMware + VMware + Use VMware Player or Workstation to deploy and debug. + 192.168.0.8 + + + + + + + + + + + + + + diff --git a/src/Tomas.Kernel/Kernel.cs b/src/Tomas.Kernel.Legacy/Kernel.cs similarity index 100% rename from src/Tomas.Kernel/Kernel.cs rename to src/Tomas.Kernel.Legacy/Kernel.cs diff --git a/src/Tomas.Kernel.Legacy/Programs/About.cs b/src/Tomas.Kernel.Legacy/Programs/About.cs new file mode 100644 index 0000000..9ce8ad4 --- /dev/null +++ b/src/Tomas.Kernel.Legacy/Programs/About.cs @@ -0,0 +1,23 @@ +// I license this project under the GPL 3.0 license. +// See the LICENSE file in the project root for more information. + +using System; +using Tomas.Common; +using Tomas.Interface; + +namespace Tomas.Kernel.Programs +{ + public class About : IProgram + { + public bool Run(IShell shell) + { + Console.WriteLine($"{ComConsts.NAME} v{ComConsts.VersionGit}{Environment.NewLine}" + + "TOMAS (Tony's Managed Operating System) is a operating system written in C# using the COSMOS framework."); + var progs = shell.Programs; + foreach (var commands in progs.Keys) + Console.WriteLine(commands); + + return true; + } + } +} \ No newline at end of file diff --git a/src/Tomas.Kernel.Legacy/Shell.cs b/src/Tomas.Kernel.Legacy/Shell.cs new file mode 100644 index 0000000..64207a5 --- /dev/null +++ b/src/Tomas.Kernel.Legacy/Shell.cs @@ -0,0 +1,34 @@ +// I license this project under the GPL 3.0 license. +// See the LICENSE file in the project root for more information. +using System; +using System.Collections.Generic; +using Tomas.Common.Programs; +using Tomas.Interface; +using Tomas.Kernel.Programs; +using Sys = Cosmos.System; + +namespace Tomas.Kernel +{ + public class Shell : IShell + { + const char SYMBOL = '$'; + + public Dictionary Programs => new Dictionary() + { + {"about", new About()}, + {"fensay", new FenSay()}, + {"clear", new Clear()}, + {"commands", new Commands()} + }; + + public string ReadLine + { + get + { + Console.Write(SYMBOL); + var readl = Console.ReadLine(); + return readl; + } + } + } +} diff --git a/src/Tomas.Kernel/TomFS.cs b/src/Tomas.Kernel.Legacy/TomFS.cs similarity index 97% rename from src/Tomas.Kernel/TomFS.cs rename to src/Tomas.Kernel.Legacy/TomFS.cs index 7d82d4c..52089ed 100644 --- a/src/Tomas.Kernel/TomFS.cs +++ b/src/Tomas.Kernel.Legacy/TomFS.cs @@ -22,7 +22,7 @@ namespace Tomas.Kernel Console.WriteLine("Creating system files."); fs.CreateFile($"{SYSTEM_DIR}sysinfo.txt"); Console.WriteLine("Setting system preferences."); - File.WriteAllText($"{SYSTEM_DIR}sysinfo.txt", $"{OSConsts.NAME}, {OSConsts.VersionGit}"); + File.WriteAllText($"{SYSTEM_DIR}sysinfo.txt", $"{ComConsts.NAME}, {ComConsts.VersionGit}"); Console.WriteLine("File system loaded sucesfully."); var intro = File.ReadAllText($"{SYSTEM_DIR}sysinfo.txt"); Console.WriteLine(intro); diff --git a/src/Tomas.Kernel/Tomas.Kernel.csproj b/src/Tomas.Kernel.Legacy/Tomas.Kernel.Legacy.csproj similarity index 96% rename from src/Tomas.Kernel/Tomas.Kernel.csproj rename to src/Tomas.Kernel.Legacy/Tomas.Kernel.Legacy.csproj index e2d0ba2..38b2011 100644 --- a/src/Tomas.Kernel/Tomas.Kernel.csproj +++ b/src/Tomas.Kernel.Legacy/Tomas.Kernel.Legacy.csproj @@ -1,7 +1,7 @@ - netcoreapp2.0 + net6.0 cosmos True ELF diff --git a/src/Tomas.Terminal/Tomas.Terminal.csproj b/src/Tomas.Terminal/Tomas.Terminal.csproj index a68cb21..31fe113 100644 --- a/src/Tomas.Terminal/Tomas.Terminal.csproj +++ b/src/Tomas.Terminal/Tomas.Terminal.csproj @@ -2,7 +2,7 @@ Exe - netcoreapp3.1 + net6.0 8 warnings