From 2794aa17f49a293c39a7980500dabb6e7ae3d55d Mon Sep 17 00:00:00 2001 From: Tony Bark Date: Sat, 7 Jan 2023 11:44:50 -0500 Subject: [PATCH] Copyright waiver under the Unlicense with BSD 3-Clause fallback. --- README.md | 6 +- UNLICENSE | 24 ++ src/TOMAS.sln | 1 + src/TOMAS.sln.licenseheader | 8 +- src/Tomas.Core/GlobalUsing.cs | 6 + src/Tomas.Core/Programs/Clear.cs | 21 +- src/Tomas.Core/Programs/Commands.cs | 11 +- src/Tomas.Core/Programs/FenSay.cs | 37 ++-- src/Tomas.Interface/IProgram.cs | 22 +- src/Tomas.Interface/IShell.cs | 13 +- src/Tomas.Kernel/GlobalUsing.cs | 6 + src/Tomas.Kernel/Globalization/CST.cs | 159 +++++++------- src/Tomas.Kernel/Globalization/IUIText.cs | 31 +-- src/Tomas.Kernel/Globalization/UIText.cs | 161 +++++++------- src/Tomas.Kernel/Kernel.cs | 9 +- src/Tomas.Kernel/Programs/About.cs | 25 ++- src/Tomas.Kernel/Shell.cs | 45 ++-- src/Tomas.Kernel/SysFS.cs | 255 +++++++++++----------- src/Tomas.Kernel/SysMeta.cs | 6 + src/Tomas.Terminal/GlobalUsing.cs | 6 + src/Tomas.Terminal/Program.cs | 69 +++--- src/Tomas.Terminal/Programs/About.cs | 20 +- src/Tomas.Terminal/Shell.cs | 30 +-- src/Tomas.Terminal/TermMeta.cs | 74 ++++--- 24 files changed, 572 insertions(+), 473 deletions(-) create mode 100644 UNLICENSE diff --git a/README.md b/README.md index 41a0ebc..ef1e671 100644 --- a/README.md +++ b/README.md @@ -9,15 +9,11 @@ TOMAS (**To**ny's **Ma**naged Operating **S**ystem) is a hobby operating system ### Prerequisites - Windows 10 or later - - Visual Studio 2022 - - .NET 6 or later - - COSMOS User Kit v2022 or later - - VMWare Workstation Player ## License -This project is licensed under the BSD 3-Clause license - see the [LICENSE](LICENSE) file for details. +In jurisdictions that recognize copyright waivers, I've [waived all copyright](UNLICENSE) and related or neighboring rights for to this project. In areas where these waivers are not recognized, [BSD-3-Clause](LICENSE) is enforced. diff --git a/UNLICENSE b/UNLICENSE new file mode 100644 index 0000000..fdddb29 --- /dev/null +++ b/UNLICENSE @@ -0,0 +1,24 @@ +This is free and unencumbered software released into the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or +distribute this software, either in source code form or as a compiled +binary, for any purpose, commercial or non-commercial, and by any +means. + +In jurisdictions that recognize copyright laws, the author or authors +of this software dedicate any and all copyright interest in the +software to the public domain. We make this dedication for the benefit +of the public at large and to the detriment of our heirs and +successors. We intend this dedication to be an overt act of +relinquishment in perpetuity of all present and future rights to this +software under copyright law. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +For more information, please refer to diff --git a/src/TOMAS.sln b/src/TOMAS.sln index 1c437ae..44fc703 100644 --- a/src/TOMAS.sln +++ b/src/TOMAS.sln @@ -13,6 +13,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution ..\LICENSE = ..\LICENSE ..\README.md = ..\README.md TOMAS.sln.licenseheader = TOMAS.sln.licenseheader + ..\UNLICENSE = ..\UNLICENSE EndProjectSection EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tomas.Interface", "Tomas.Interface\Tomas.Interface.csproj", "{DAA9EDF4-83C7-4271-9805-FD6CE29E1796}" diff --git a/src/TOMAS.sln.licenseheader b/src/TOMAS.sln.licenseheader index df33244..81ee8df 100644 --- a/src/TOMAS.sln.licenseheader +++ b/src/TOMAS.sln.licenseheader @@ -1,4 +1,8 @@ extensions: designer.cs generated.cs extensions: .cs .cpp .h .fs -// I license this project under the BSD 3-Clause license. -// See the LICENSE file in the project root for more information. \ No newline at end of file +/* +In jurisdictions that recognize copyright waivers, I've waived all copyright +and related or neighboring rights for to this project. In areas where these +waivers are not recognized, BSD-3-Clause is enforced. +See the (UN)LICENSE file in the project root for more information. +*/ \ No newline at end of file diff --git a/src/Tomas.Core/GlobalUsing.cs b/src/Tomas.Core/GlobalUsing.cs index 2e2aee3..511e2b8 100644 --- a/src/Tomas.Core/GlobalUsing.cs +++ b/src/Tomas.Core/GlobalUsing.cs @@ -1,3 +1,9 @@ +/* +In jurisdictions that recognize copyright waivers, I've waived all copyright +and related or neighboring rights for to this project. In areas where these +waivers are not recognized, BSD-3-Clause is enforced. +See the (UN)LICENSE file in the project root for more information. +*/ global using System.Diagnostics.CodeAnalysis; global using System.Diagnostics; global using Tomas.Interface; diff --git a/src/Tomas.Core/Programs/Clear.cs b/src/Tomas.Core/Programs/Clear.cs index afeec90..080ae07 100644 --- a/src/Tomas.Core/Programs/Clear.cs +++ b/src/Tomas.Core/Programs/Clear.cs @@ -1,13 +1,16 @@ -// I license this project under the BSD 3-Clause license. -// See the LICENSE file in the project root for more information. - -namespace Tomas.Common.Programs; +/* +In jurisdictions that recognize copyright waivers, I've waived all copyright +and related or neighboring rights for to this project. In areas where these +waivers are not recognized, BSD-3-Clause is enforced. +See the (UN)LICENSE file in the project root for more information. +*/ +namespace Tomas.Core.Programs; public class Clear : IProgram { - public bool Run(IShell shell) - { - Console.Clear(); - return true; - } + public bool Run(IShell shell) + { + Console.Clear(); + return true; + } } \ No newline at end of file diff --git a/src/Tomas.Core/Programs/Commands.cs b/src/Tomas.Core/Programs/Commands.cs index c2590c2..70e0348 100644 --- a/src/Tomas.Core/Programs/Commands.cs +++ b/src/Tomas.Core/Programs/Commands.cs @@ -1,7 +1,10 @@ -// I license this project under the BSD 3-Clause license. -// See the LICENSE file in the project root for more information. - -namespace Tomas.Common.Programs; +/* +In jurisdictions that recognize copyright waivers, I've waived all copyright +and related or neighboring rights for to this project. In areas where these +waivers are not recognized, BSD-3-Clause is enforced. +See the (UN)LICENSE file in the project root for more information. +*/ +namespace Tomas.Core.Programs; public class Commands : IProgram { diff --git a/src/Tomas.Core/Programs/FenSay.cs b/src/Tomas.Core/Programs/FenSay.cs index 0dd73a4..9b227cf 100644 --- a/src/Tomas.Core/Programs/FenSay.cs +++ b/src/Tomas.Core/Programs/FenSay.cs @@ -1,15 +1,18 @@ -// I license this project under the BSD 3-Clause license. -// See the LICENSE file in the project root for more information. - -namespace Tomas.Common.Programs; +/* +In jurisdictions that recognize copyright waivers, I've waived all copyright +and related or neighboring rights for to this project. In areas where these +waivers are not recognized, BSD-3-Clause is enforced. +See the (UN)LICENSE file in the project root for more information. +*/ +namespace Tomas.Core.Programs; public class FenSay : IProgram { - /// - /// Fennec art by Todd Vargo - /// - const string _fennec = @" \/ + /// + /// Fennec art by Todd Vargo + /// + const string _fennec = @" \/ /\ /\ //\\_//\\ ____ \_ _/ / / @@ -20,19 +23,19 @@ public class FenSay : IProgram [ [ / \/ _/ _[ [ \ /_/"; - readonly string[] _phrases = - { + readonly string[] _phrases = + { "[SCREAMS IN FENNEC]", "Some people call me a coffee fox.", "Drink Soda. It makes you see faster.", "10/10, Wouldn't Recommend." }; - public bool Run(IShell shell) - { - var rng = new Random(); - var phrases = _phrases[rng.Next(_phrases.Length)]; - Console.WriteLine($"{phrases}{Environment.NewLine}{_fennec}"); - return true; - } + public bool Run(IShell shell) + { + var rng = new Random(); + var phrases = _phrases[rng.Next(_phrases.Length)]; + Console.WriteLine($"{phrases}{Environment.NewLine}{_fennec}"); + return true; + } } \ No newline at end of file diff --git a/src/Tomas.Interface/IProgram.cs b/src/Tomas.Interface/IProgram.cs index ccdfb70..dd7cf90 100644 --- a/src/Tomas.Interface/IProgram.cs +++ b/src/Tomas.Interface/IProgram.cs @@ -1,14 +1,18 @@ -// I license this project under the BSD 3-Clause license. -// See the LICENSE file in the project root for more information. +/* +In jurisdictions that recognize copyright waivers, I've waived all copyright +and related or neighboring rights for to this project. In areas where these +waivers are not recognized, BSD-3-Clause is enforced. +See the (UN)LICENSE file in the project root for more information. +*/ namespace Tomas.Interface; public interface IProgram { - /// - /// The program's main entry point. Boolean behaves as an exit point. - /// True and False are the equivalent to C's 0 and 1, i.e. "Success" and "Failure," respectfully. - /// - /// Allows the program to interact with the shell. - /// Exit back to shell. - bool Run(IShell shell); + /// + /// The program's main entry point. Boolean behaves as an exit point. + /// True and False are the equivalent to C's 0 and 1, i.e. "Success" and "Failure," respectfully. + /// + /// Allows the program to interact with the shell. + /// Exit back to shell. + bool Run(IShell shell); } \ No newline at end of file diff --git a/src/Tomas.Interface/IShell.cs b/src/Tomas.Interface/IShell.cs index fce577d..398eb91 100644 --- a/src/Tomas.Interface/IShell.cs +++ b/src/Tomas.Interface/IShell.cs @@ -1,11 +1,14 @@ -// I license this project under the BSD 3-Clause license. -// See the LICENSE file in the project root for more information. - +/* +In jurisdictions that recognize copyright waivers, I've waived all copyright +and related or neighboring rights for to this project. In areas where these +waivers are not recognized, BSD-3-Clause is enforced. +See the (UN)LICENSE file in the project root for more information. +*/ namespace Tomas.Interface; public interface IShell { - string ReadLine { get; } + string ReadLine { get; } - Dictionary Programs { get; } + Dictionary Programs { get; } } \ No newline at end of file diff --git a/src/Tomas.Kernel/GlobalUsing.cs b/src/Tomas.Kernel/GlobalUsing.cs index 25fcb20..6380375 100644 --- a/src/Tomas.Kernel/GlobalUsing.cs +++ b/src/Tomas.Kernel/GlobalUsing.cs @@ -1,3 +1,9 @@ +/* +In jurisdictions that recognize copyright waivers, I've waived all copyright +and related or neighboring rights for to this project. In areas where these +waivers are not recognized, BSD-3-Clause is enforced. +See the (UN)LICENSE file in the project root for more information. +*/ global using System.Diagnostics.CodeAnalysis; global using System.Diagnostics; global using Tomas.Common.Programs; diff --git a/src/Tomas.Kernel/Globalization/CST.cs b/src/Tomas.Kernel/Globalization/CST.cs index 23dc7e3..1063563 100644 --- a/src/Tomas.Kernel/Globalization/CST.cs +++ b/src/Tomas.Kernel/Globalization/CST.cs @@ -1,97 +1,100 @@ -// This project is licensed under the BSD 3-Clause license. -// See the LICENSE file in the project root for more information. - +/* +In jurisdictions that recognize copyright waivers, I've waived all copyright +and related or neighboring rights for to this project. In areas where these +waivers are not recognized, BSD-3-Clause is enforced. +See the (UN)LICENSE file in the project root for more information. +*/ namespace Tomas.Kernel.Globalization; public class CST { - const char CARET = '^'; - const string LF = "\u000A"; - const string CR = "\u000D"; - const string CRLF = "\u000D\u000A"; - const string LS = "\u2028"; + const char CARET = '^'; + const string LF = "\u000A"; + const string CR = "\u000D"; + const string CRLF = "\u000D\u000A"; + const string LS = "\u2028"; - /// - /// Gets the value from the digit-based key. - /// - /// Returns the entry - public static string Parse(string content, int key) => Parse(content, key.ToString()); + /// + /// Gets the value from the digit-based key. + /// + /// Returns the entry + public static string Parse(string content, int key) => Parse(content, key.ToString()); - /// - /// Gets the value from the string-based key. - /// - /// Returns the entry - public static string Parse(string content, string key) - { - var entries = NormalizeEntries(content); - return GetEntry(entries, key); - } + /// + /// Gets the value from the string-based key. + /// + /// Returns the entry + public static string Parse(string content, string key) + { + var entries = NormalizeEntries(content); + return GetEntry(entries, key); + } - /// - /// Replaces the document's line endings with the native system line endings. - /// - /// This stage ensures there are no crashes during parsing. - /// The content of the document. - /// The document's content with native system line endings. - static IEnumerable NormalizeEntries(string content) - { - // Check if the document already uses native system line endings. - if (!content.Contains(Environment.NewLine)) - { - // If not, check for and replace other line ending types. - if (content.Contains(LF)) - content = content.Replace(LF, Environment.NewLine); + /// + /// Replaces the document's line endings with the native system line endings. + /// + /// This stage ensures there are no crashes during parsing. + /// The content of the document. + /// The document's content with native system line endings. + static IEnumerable NormalizeEntries(string content) + { + // Check if the document already uses native system line endings. + if (!content.Contains(Environment.NewLine)) + { + // If not, check for and replace other line ending types. + if (content.Contains(LF)) + content = content.Replace(LF, Environment.NewLine); - if (content.Contains(CR)) - content = content.Replace(CR, Environment.NewLine); + if (content.Contains(CR)) + content = content.Replace(CR, Environment.NewLine); - if (content.Contains(CRLF)) - content = content.Replace(CRLF, Environment.NewLine); + if (content.Contains(CRLF)) + content = content.Replace(CRLF, Environment.NewLine); - if (content.Contains(LS)) - content = content.Replace(LS, Environment.NewLine); - } + if (content.Contains(LS)) + content = content.Replace(LS, Environment.NewLine); + } - // Split the content by the caret and newline characters. - var lines = content.Split(new[] { $"{CARET}{Environment.NewLine}" }, - StringSplitOptions.RemoveEmptyEntries); + // Split the content by the caret and newline characters. + var lines = content.Split(new[] { $"{CARET}{Environment.NewLine}" }, + StringSplitOptions.RemoveEmptyEntries); - // Filter out any lines that start with "//", "#", "/*", or end with "*/". - return lines.Where(line => - !line.StartsWith("//") && - !line.StartsWith("#") && - !line.StartsWith("/*") && - !line.EndsWith("*/")) - .AsEnumerable(); - } + // Filter out any lines that start with "//", "#", "/*", or end with "*/". + return lines.Where(line => + !line.StartsWith("//") && + !line.StartsWith("#") && + !line.StartsWith("/*") && + !line.EndsWith("*/")) + .AsEnumerable(); + } - /// - /// Retrieves the value for the specified key from the given entries. - /// - /// The entries to search through. - /// The key to search for. - /// The value for the specified key, or a default string if not found. - static string GetEntry(IEnumerable entries, string key) - { - // Iterate through the entries. - foreach (var entry in entries) - { - // If the line doesn't start with the key, keep searching. - if (!entry.StartsWith(key)) - continue; + /// + /// Retrieves the value for the specified key from the given entries. + /// + /// The entries to search through. + /// The key to search for. + /// The value for the specified key, or a default string if not found. + static string GetEntry(IEnumerable entries, string key) + { + // Iterate through the entries. + foreach (var entry in entries) + { + // If the line doesn't start with the key, keep searching. + if (!entry.StartsWith(key)) + continue; - // Locate the index of the caret character. - var startIndex = entry.IndexOf(CARET); - // Get the line from the caret character to the end of the string. - var line = entry[startIndex..]; + // Locate the index of the caret character. + var startIndex = entry.IndexOf(CARET); + // Get the line from the caret character to the end of the string. + var line = entry[startIndex..]; - // Return the line with the caret characters trimmed. - return line.TrimStart(CARET).TrimEnd(CARET); - } + // Return the line with the caret characters trimmed. + return line.TrimStart(CARET).TrimEnd(CARET); + } - // If no entry is found, return a default string. - return "***MISSING***"; - } + // If no entry is found, return a default string. + return "***MISSING***"; + } } diff --git a/src/Tomas.Kernel/Globalization/IUIText.cs b/src/Tomas.Kernel/Globalization/IUIText.cs index e4ddb37..b570366 100644 --- a/src/Tomas.Kernel/Globalization/IUIText.cs +++ b/src/Tomas.Kernel/Globalization/IUIText.cs @@ -1,20 +1,23 @@ -// This project is licensed under the BSD 3-Clause license. -// See the LICENSE file in the project root for more information. - +/* +In jurisdictions that recognize copyright waivers, I've waived all copyright +and related or neighboring rights for to this project. In areas where these +waivers are not recognized, BSD-3-Clause is enforced. +See the (UN)LICENSE file in the project root for more information. +*/ namespace Tomas.Kernel.Globalization; public interface IUIText { - /// - /// The base directory for the language files. - /// - string[] BasePath { get; set; } + /// + /// The base directory for the language files. + /// + string[] BasePath { get; set; } - /// - /// Get the text for the given id and key. - /// - /// The id of the text. - /// The key of the text. - /// The text for the given id and key. - string GetText(int id, int key); + /// + /// Get the text for the given id and key. + /// + /// The id of the text. + /// The key of the text. + /// The text for the given id and key. + string GetText(int id, int key); } diff --git a/src/Tomas.Kernel/Globalization/UIText.cs b/src/Tomas.Kernel/Globalization/UIText.cs index cf2bd26..4c9c3fe 100644 --- a/src/Tomas.Kernel/Globalization/UIText.cs +++ b/src/Tomas.Kernel/Globalization/UIText.cs @@ -1,101 +1,104 @@ -// This project is licensed under the BSD 3-Clause license. -// See the LICENSE file in the project root for more information. - +/* +In jurisdictions that recognize copyright waivers, I've waived all copyright +and related or neighboring rights for to this project. In areas where these +waivers are not recognized, BSD-3-Clause is enforced. +See the (UN)LICENSE file in the project root for more information. +*/ namespace Tomas.Kernel.Globalization; public class UIText : IUIText { - /// - /// The language of the text. - /// - string Language { get; set; } = "english"; + /// + /// The language of the text. + /// + string Language { get; set; } = "english"; - /// - /// The base directory for the language files. - /// - public string[] BasePath { get; set; } = { AppContext.BaseDirectory, "uitext" }; + /// + /// The base directory for the language files. + /// + public string[] BasePath { get; set; } = { AppContext.BaseDirectory, "uitext" }; - /// - /// Constructor for the UIText class. - /// - public UIText() { } + /// + /// Constructor for the UIText class. + /// + public UIText() { } - /// - /// Constructor for the UIText class. - /// Loads the language file for the specified language. - /// - /// Language to load - public UIText(string language) - { - Language = language; - } + /// + /// Constructor for the UIText class. + /// Loads the language file for the specified language. + /// + /// Language to load + public UIText(string language) + { + Language = language; + } - /// - /// Constructor for the UIText class. - /// Loads the language file for the specified language and base directory. - /// - /// Language to load - /// Base directory for the language files. - public UIText(string language, params string[] baseBath) - { - Language = language; - BasePath = baseBath; - } + /// + /// Constructor for the UIText class. + /// Loads the language file for the specified language and base directory. + /// + /// Language to load + /// Base directory for the language files. + public UIText(string language, params string[] baseBath) + { + Language = language; + BasePath = baseBath; + } - /// - /// Get the text for the given id and key. - /// - /// The id of the text. - /// The key of the text. - /// The text for the given id and key. - public string GetText(int id, int key) => GetText(id, key.ToString()); + /// + /// Get the text for the given id and key. + /// + /// The id of the text. + /// The key of the text. + /// The text for the given id and key. + public string GetText(int id, int key) => GetText(id, key.ToString()); - /// - /// Get the text for the given id and key. - /// - /// The id of the text. - /// The key of the text. - /// The text for the given id and key. - public string GetText(int id, string key) - { - // Combine the base path and language path to get the full path of the language file. - var basePath = Path.Combine(BasePath); - var langPath = Path.Combine(basePath, $"{Language}.dir"); + /// + /// Get the text for the given id and key. + /// + /// The id of the text. + /// The key of the text. + /// The text for the given id and key. + public string GetText(int id, string key) + { + // Combine the base path and language path to get the full path of the language file. + var basePath = Path.Combine(BasePath); + var langPath = Path.Combine(basePath, $"{Language}.dir"); - // Get all the files in the language directory. - var files = Directory.GetFiles(langPath); + // Get all the files in the language directory. + var files = Directory.GetFiles(langPath); - // Iterate through the files in the language directory. - foreach (var file in files) - { - // Skip files that do not have the ".cst" extension. - if (!file.Contains(".cst")) - continue; + // Iterate through the files in the language directory. + foreach (var file in files) + { + // Skip files that do not have the ".cst" extension. + if (!file.Contains(".cst")) + continue; - // Get the id of the current file. - var ids = Path.GetFileName(file); - var second = ids.IndexOf("_", 1, StringComparison.InvariantCultureIgnoreCase); + // Get the id of the current file. + var ids = Path.GetFileName(file); + var second = ids.IndexOf("_", 1, StringComparison.InvariantCultureIgnoreCase); - if (second == -1) - continue; + if (second == -1) + continue; - ids = ids.Substring(1, second - 1); + ids = ids.Substring(1, second - 1); - // If the id of the current file does not match the id passed to the function, - // skip to the next file. - if (ids != id.ToString()) - continue; + // If the id of the current file does not match the id passed to the function, + // skip to the next file. + if (ids != id.ToString()) + continue; - // Read the content of the current file. - var content = File.ReadAllText(file); + // Read the content of the current file. + var content = File.ReadAllText(file); - // Return the text for the specified key. - return CST.Parse(content, key); - } + // Return the text for the specified key. + return CST.Parse(content, key); + } - // If no text is found, return a default string. - return "***MISSING***"; - } + // If no text is found, return a default string. + return "***MISSING***"; + } } diff --git a/src/Tomas.Kernel/Kernel.cs b/src/Tomas.Kernel/Kernel.cs index 9ce08b6..91048a7 100644 --- a/src/Tomas.Kernel/Kernel.cs +++ b/src/Tomas.Kernel/Kernel.cs @@ -1,6 +1,9 @@ -// I license this project under the BSD 3-Clause license. -// See the LICENSE file in the project root for more information. - +/* +In jurisdictions that recognize copyright waivers, I've waived all copyright +and related or neighboring rights for to this project. In areas where these +waivers are not recognized, BSD-3-Clause is enforced. +See the (UN)LICENSE file in the project root for more information. +*/ namespace Tomas.Kernel; public class Kernel : Os.Kernel diff --git a/src/Tomas.Kernel/Programs/About.cs b/src/Tomas.Kernel/Programs/About.cs index 365c563..83fcb68 100644 --- a/src/Tomas.Kernel/Programs/About.cs +++ b/src/Tomas.Kernel/Programs/About.cs @@ -1,17 +1,20 @@ -// I license this project under the BSD 3-Clause license. -// See the LICENSE file in the project root for more information. - +/* +In jurisdictions that recognize copyright waivers, I've waived all copyright +and related or neighboring rights for to this project. In areas where these +waivers are not recognized, BSD-3-Clause is enforced. +See the (UN)LICENSE file in the project root for more information. +*/ namespace Tomas.Kernel.Programs; public class About : IProgram { - public bool Run(IShell shell) - { - Console.WriteLine($"TOMAS v{SysMeta.VERSION} ({SysMeta.BuildNumber}) is a hobby operating system written in C# using the COSMOS framework.{Environment.NewLine}Commands:"); - var progs = shell.Programs; - foreach (var commands in progs.Keys) - Console.WriteLine(commands); + public bool Run(IShell shell) + { + Console.WriteLine($"TOMAS v{SysMeta.VERSION} ({SysMeta.BuildNumber}) is a hobby operating system written in C# using the COSMOS framework.{Environment.NewLine}Commands:"); + var progs = shell.Programs; + foreach (var commands in progs.Keys) + Console.WriteLine(commands); - return true; - } + return true; + } } \ No newline at end of file diff --git a/src/Tomas.Kernel/Shell.cs b/src/Tomas.Kernel/Shell.cs index 1b49aa5..3a829a4 100644 --- a/src/Tomas.Kernel/Shell.cs +++ b/src/Tomas.Kernel/Shell.cs @@ -1,16 +1,19 @@ -// I license this project under the BSD 3-Clause license. -// See the LICENSE file in the project root for more information. - +/* +In jurisdictions that recognize copyright waivers, I've waived all copyright +and related or neighboring rights for to this project. In areas where these +waivers are not recognized, BSD-3-Clause is enforced. +See the (UN)LICENSE file in the project root for more information. +*/ namespace Tomas.Kernel; public class Shell : IShell { - // The symbol to display before the cursor when the shell is waiting for user input - const char SYMBOL = '$'; + // The symbol to display before the cursor when the shell is waiting for user input + const char SYMBOL = '$'; - // A dictionary containing the programs available to the shell, with the keys being the program names - // and the values being the program objects - public Dictionary Programs => new() + // A dictionary containing the programs available to the shell, with the keys being the program names + // and the values being the program objects + public Dictionary Programs => new() { {"about", new About() }, {"fensay", new FenSay() }, @@ -18,20 +21,20 @@ public class Shell : IShell {"commands", new Commands() } }; - // A property that allows the shell to read a line of input from the user - public string ReadLine - { - get - { - // Write the SYMBOL character to the console - Console.Write(SYMBOL); + // A property that allows the shell to read a line of input from the user + public string ReadLine + { + get + { + // Write the SYMBOL character to the console + Console.Write(SYMBOL); - // Read a line of input from the user - var readl = Console.ReadLine(); + // Read a line of input from the user + var readl = Console.ReadLine(); - // Return the line of input - return readl; - } - } + // Return the line of input + return readl; + } + } } diff --git a/src/Tomas.Kernel/SysFS.cs b/src/Tomas.Kernel/SysFS.cs index ae905f5..5b5865a 100644 --- a/src/Tomas.Kernel/SysFS.cs +++ b/src/Tomas.Kernel/SysFS.cs @@ -1,156 +1,159 @@ -// I license this project under the BSD 3-Clause license. -// See the LICENSE file in the project root for more information. - +/* +In jurisdictions that recognize copyright waivers, I've waived all copyright +and related or neighboring rights for to this project. In areas where these +waivers are not recognized, BSD-3-Clause is enforced. +See the (UN)LICENSE file in the project root for more information. +*/ namespace Tomas.Kernel; static class SysFS { - // The root directory of the file system - public const string ROOT_DIR = "0:\\"; - // The system directory, located in the root directory - static string SYSTEM_DIR = $"{ROOT_DIR}\\SYSTEM\\"; + // The root directory of the file system + public const string ROOT_DIR = "0:\\"; + // The system directory, located in the root directory + static string SYSTEM_DIR = $"{ROOT_DIR}\\SYSTEM\\"; - static string LOG_FILE = $"{SYSTEM_DIR}system.log"; + static string LOG_FILE = $"{SYSTEM_DIR}system.log"; - public const string FS_ERROR = "File system disabled."; + public const string FS_ERROR = "File system disabled."; - /// - /// An instance of the CosmosVFS class, used for accessing the virtual file system - /// - static CosmosVFS fileSystem = new(); + /// + /// An instance of the CosmosVFS class, used for accessing the virtual file system + /// + static CosmosVFS fileSystem = new(); - /// - /// Initializes the file system by creating the system directory and sysinfo.txt file - /// and setting the IsFSActive property of the SysMeta class to true - /// - public static void Initialize() - { - try - { - var createSysFiles = "Creating system files."; - var setSysPref = "Writing system info."; - var fsSuccess = "File system succesfully initialized."; - var sysInfoFile = "sysinfo.txt"; + /// + /// Initializes the file system by creating the system directory and sysinfo.txt file + /// and setting the IsFSActive property of the SysMeta class to true + /// + public static void Initialize() + { + try + { + var createSysFiles = "Creating system files."; + var setSysPref = "Writing system info."; + var fsSuccess = "File system succesfully initialized."; + var sysInfoFile = "sysinfo.txt"; - // Register the CosmosVFS instance as the virtual file system - VFSManager.RegisterVFS(fileSystem); + // Register the CosmosVFS instance as the virtual file system + VFSManager.RegisterVFS(fileSystem); - // Create the system directory - if (!Directory.Exists(SYSTEM_DIR)) - fileSystem.CreateDirectory(SYSTEM_DIR); + // Create the system directory + if (!Directory.Exists(SYSTEM_DIR)) + fileSystem.CreateDirectory(SYSTEM_DIR); - // Create the system.log file in the system directory - if (!File.Exists($"{SYSTEM_DIR}{LOG_FILE}")) - fileSystem.CreateFile($"{SYSTEM_DIR}{LOG_FILE}"); + // Create the system.log file in the system directory + if (!File.Exists($"{SYSTEM_DIR}{LOG_FILE}")) + fileSystem.CreateFile($"{SYSTEM_DIR}{LOG_FILE}"); - Console.WriteLine(createSysFiles); - File.AppendAllText(LOG_FILE, createSysFiles); + Console.WriteLine(createSysFiles); + File.AppendAllText(LOG_FILE, createSysFiles); - // Create the sysinfo.txt file in the system directory - if (!File.Exists($"{SYSTEM_DIR}{sysInfoFile}")) - fileSystem.CreateFile($"{SYSTEM_DIR}{sysInfoFile}"); + // Create the sysinfo.txt file in the system directory + if (!File.Exists($"{SYSTEM_DIR}{sysInfoFile}")) + fileSystem.CreateFile($"{SYSTEM_DIR}{sysInfoFile}"); - Console.WriteLine(setSysPref); + Console.WriteLine(setSysPref); - File.AppendAllText(LOG_FILE, setSysPref); + File.AppendAllText(LOG_FILE, setSysPref); - // Write the system name, version, and build number to the sysinfo.txt file - File.WriteAllText($"{SYSTEM_DIR}sysinfo.txt", $"{SysMeta.NAME} v{SysMeta.VERSION} ({SysMeta.BuildNumber})"); + // Write the system name, version, and build number to the sysinfo.txt file + File.WriteAllText($"{SYSTEM_DIR}sysinfo.txt", $"{SysMeta.NAME} v{SysMeta.VERSION} ({SysMeta.BuildNumber})"); - Console.WriteLine(fsSuccess); - File.AppendAllText(LOG_FILE, fsSuccess); + Console.WriteLine(fsSuccess); + File.AppendAllText(LOG_FILE, fsSuccess); - // Set the IsFSActive property of the SysMeta class to true - SysMeta.IsFSEnabled = true; + // Set the IsFSActive property of the SysMeta class to true + SysMeta.IsFSEnabled = true; - // Read the contents of the sysinfo.txt file and print it to the console - var systemInfo = File.ReadAllText($"{SYSTEM_DIR}sysinfo.txt"); + // Read the contents of the sysinfo.txt file and print it to the console + var systemInfo = File.ReadAllText($"{SYSTEM_DIR}sysinfo.txt"); - Console.WriteLine(systemInfo); - } - catch (Exception err) - { - // If an exception is caught, print an error message indicating that the file system failed to load - Console.WriteLine($"{err.Message}{Environment.NewLine}Warning: Error messages will not logged."); - } - } + Console.WriteLine(systemInfo); + } + catch (Exception err) + { + // If an exception is caught, print an error message indicating that the file system failed to load + Console.WriteLine($"{err.Message}{Environment.NewLine}Warning: Error messages will not logged."); + } + } - /// - /// Creates a new directory at the specified path - /// - /// directory - public static void CreateDirectory(string directory) - { - try - { - // If file system isn't enabeld, throw exception - if (!SysMeta.IsFSEnabled) - throw new IOException(FS_ERROR); + /// + /// Creates a new directory at the specified path + /// + /// directory + public static void CreateDirectory(string directory) + { + try + { + // If file system isn't enabeld, throw exception + if (!SysMeta.IsFSEnabled) + throw new IOException(FS_ERROR); - // Create the directory using the CosmosVFS instance - if (!Directory.Exists($"{ROOT_DIR}\\{directory}")) - fileSystem.CreateDirectory($"{ROOT_DIR}\\{directory}"); - } - catch (IOException err) - { - // If an exception is caught, print an error message indicating the error - Console.WriteLine(err.Message); - File.AppendAllText(LOG_FILE, err.Message); - } - } + // Create the directory using the CosmosVFS instance + if (!Directory.Exists($"{ROOT_DIR}\\{directory}")) + fileSystem.CreateDirectory($"{ROOT_DIR}\\{directory}"); + } + catch (IOException err) + { + // If an exception is caught, print an error message indicating the error + Console.WriteLine(err.Message); + File.AppendAllText(LOG_FILE, err.Message); + } + } - /// - /// Creates a new file at the specified path - /// - /// file path - /// file - public static void CreateFile(string path, string file) - { - try - { - // If file system isn't enabeld, throw exception - if (!SysMeta.IsFSEnabled) - throw new IOException(FS_ERROR); + /// + /// Creates a new file at the specified path + /// + /// file path + /// file + public static void CreateFile(string path, string file) + { + try + { + // If file system isn't enabeld, throw exception + if (!SysMeta.IsFSEnabled) + throw new IOException(FS_ERROR); - // Create the file using the CosmosVFS instance - if (!File.Exists($"{ROOT_DIR}\\{path}\\{file}")) - fileSystem.CreateFile($"{ROOT_DIR}\\{path}\\{file}"); - } - catch (IOException err) - { - // If an exception is caught, print an error message indicating the error - Console.WriteLine(err.Message); - File.AppendAllText(LOG_FILE, err.Message); - } - } + // Create the file using the CosmosVFS instance + if (!File.Exists($"{ROOT_DIR}\\{path}\\{file}")) + fileSystem.CreateFile($"{ROOT_DIR}\\{path}\\{file}"); + } + catch (IOException err) + { + // If an exception is caught, print an error message indicating the error + Console.WriteLine(err.Message); + File.AppendAllText(LOG_FILE, err.Message); + } + } - /// - /// Lists all directories in the specified path - /// - /// path to directory - /// returns a list of directories - public static string[] ListDirectories(string path) - { - try - { - // If file system isn't enabeld, throw exception - if (!SysMeta.IsFSEnabled) - throw new IOException(FS_ERROR); + /// + /// Lists all directories in the specified path + /// + /// path to directory + /// returns a list of directories + public static string[] ListDirectories(string path) + { + try + { + // If file system isn't enabeld, throw exception + if (!SysMeta.IsFSEnabled) + throw new IOException(FS_ERROR); - // Get the directories in the specified path using the Directory.GetDirectories method - var dirs = Directory.GetDirectories(path); + // Get the directories in the specified path using the Directory.GetDirectories method + var dirs = Directory.GetDirectories(path); - // Return the directories - return dirs; - } - catch (IOException err) - { - // If an exception is caught, print an error message indicating the error - Console.WriteLine(err.Message); - File.AppendAllText(LOG_FILE, err.Message); + // Return the directories + return dirs; + } + catch (IOException err) + { + // If an exception is caught, print an error message indicating the error + Console.WriteLine(err.Message); + File.AppendAllText(LOG_FILE, err.Message); - throw; - } - } + throw; + } + } } diff --git a/src/Tomas.Kernel/SysMeta.cs b/src/Tomas.Kernel/SysMeta.cs index 86d4b83..0153a0e 100644 --- a/src/Tomas.Kernel/SysMeta.cs +++ b/src/Tomas.Kernel/SysMeta.cs @@ -1,3 +1,9 @@ +/* +In jurisdictions that recognize copyright waivers, I've waived all copyright +and related or neighboring rights for to this project. In areas where these +waivers are not recognized, BSD-3-Clause is enforced. +See the (UN)LICENSE file in the project root for more information. +*/ using System.Text; namespace Tomas.Kernel; diff --git a/src/Tomas.Terminal/GlobalUsing.cs b/src/Tomas.Terminal/GlobalUsing.cs index a3f2539..5232722 100644 --- a/src/Tomas.Terminal/GlobalUsing.cs +++ b/src/Tomas.Terminal/GlobalUsing.cs @@ -1,3 +1,9 @@ +/* +In jurisdictions that recognize copyright waivers, I've waived all copyright +and related or neighboring rights for to this project. In areas where these +waivers are not recognized, BSD-3-Clause is enforced. +See the (UN)LICENSE file in the project root for more information. +*/ global using System.Diagnostics.CodeAnalysis; global using System.Diagnostics; global using Tomas.Common.Programs; diff --git a/src/Tomas.Terminal/Program.cs b/src/Tomas.Terminal/Program.cs index 80f945a..f95cf7d 100644 --- a/src/Tomas.Terminal/Program.cs +++ b/src/Tomas.Terminal/Program.cs @@ -1,40 +1,43 @@ -// I license this project under the BSD 3-Clause license. -// See the LICENSE file in the project root for more information. - +/* +In jurisdictions that recognize copyright waivers, I've waived all copyright +and related or neighboring rights for to this project. In areas where these +waivers are not recognized, BSD-3-Clause is enforced. +See the (UN)LICENSE file in the project root for more information. +*/ namespace Tomas.Terminal; class Program { - static void Main() + static void Main() + { + while (true) + { + var shell = new Shell(); + var command = shell.ReadLine; + var programs = shell.Programs; + + if (!programs.TryGetValue(command, out var program)) + { + Console.WriteLine("Command Not Found."); + continue; + } + + try + { + var start = program.Run(shell); + switch (start) { - while (true) - { - var shell = new Shell(); - var command = shell.ReadLine; - var programs = shell.Programs; - - if (!programs.TryGetValue(command, out var program)) - { - Console.WriteLine("Command Not Found."); - continue; - } - - try - { - var start = program.Run(shell); - switch (start) - { - case true: - continue; - case false: - Console.WriteLine("Program closed unexpectedly."); - continue; - } - } - catch (Exception err) - { - Console.WriteLine(err.Message); - } - } + case true: + continue; + case false: + Console.WriteLine("Program closed unexpectedly."); + continue; } + } + catch (Exception err) + { + Console.WriteLine(err.Message); + } + } + } } \ No newline at end of file diff --git a/src/Tomas.Terminal/Programs/About.cs b/src/Tomas.Terminal/Programs/About.cs index 6c716fa..b6cb3b7 100644 --- a/src/Tomas.Terminal/Programs/About.cs +++ b/src/Tomas.Terminal/Programs/About.cs @@ -1,14 +1,16 @@ -// I license this project under the BSD 3-Clause license. -// See the LICENSE file in the project root for more information. -using Tomas.Common; - +/* +In jurisdictions that recognize copyright waivers, I've waived all copyright +and related or neighboring rights for to this project. In areas where these +waivers are not recognized, BSD-3-Clause is enforced. +See the (UN)LICENSE file in the project root for more information. +*/ namespace Tomas.Terminal.Programs; public class About : IProgram { - public bool Run(IShell shell) - { - Console.WriteLine($"{TermMeta.NAME} Terminal Emulator v{TermMeta.VERSION}"); - return true; - } + public bool Run(IShell shell) + { + Console.WriteLine($"{TermMeta.NAME} Terminal Emulator v{TermMeta.VERSION}"); + return true; + } } \ No newline at end of file diff --git a/src/Tomas.Terminal/Shell.cs b/src/Tomas.Terminal/Shell.cs index 097c79f..f9a3989 100644 --- a/src/Tomas.Terminal/Shell.cs +++ b/src/Tomas.Terminal/Shell.cs @@ -1,14 +1,18 @@ -// I license this project under the BSD 3-Clause license. -// See the LICENSE file in the project root for more information. +/* +In jurisdictions that recognize copyright waivers, I've waived all copyright +and related or neighboring rights for to this project. In areas where these +waivers are not recognized, BSD-3-Clause is enforced. +See the (UN)LICENSE file in the project root for more information. +*/ using Tomas.Terminal.Programs; namespace Tomas.Terminal; public class Shell : IShell { - const char SYMBOL = '$'; + const char SYMBOL = '$'; - public Dictionary Programs => new() + public Dictionary Programs => new() { {"about", new About()}, {"fensay", new FenSay()}, @@ -16,13 +20,13 @@ public class Shell : IShell {"commands", new Commands()} }; - public string ReadLine - { - get - { - Console.Write(SYMBOL); - var readl = Console.ReadLine(); - return readl; - } - } + public string ReadLine + { + get + { + Console.Write(SYMBOL); + var readl = Console.ReadLine(); + return readl; + } + } } \ No newline at end of file diff --git a/src/Tomas.Terminal/TermMeta.cs b/src/Tomas.Terminal/TermMeta.cs index 7eb564e..8451cdb 100644 --- a/src/Tomas.Terminal/TermMeta.cs +++ b/src/Tomas.Terminal/TermMeta.cs @@ -1,48 +1,52 @@ -// I license this project under the BSD 3-Clause license. -// See the LICENSE file in the project root for more information. +/* +In jurisdictions that recognize copyright waivers, I've waived all copyright +and related or neighboring rights for to this project. In areas where these +waivers are not recognized, BSD-3-Clause is enforced. +See the (UN)LICENSE file in the project root for more information. +*/ using System.Text; -namespace Tomas.Common; +namespace Tomas.Terminal; /// /// System metdata, such as name, version and build number. /// public struct TermMeta { - /// - /// The name of the operating system. - /// - public const string NAME = "TOMAS Emulator"; + /// + /// The name of the operating system. + /// + public const string NAME = "TOMAS Emulator"; - /// - /// The version of the operating system, in the Calendar Versioning format: "yy.minor.patch". - /// The year, minor, and patch version numbers are automatically extracted from the Git repository - /// using the ThisAssembly.Git.SemVer object. - /// - public const string VERSION = $"{ThisAssembly.Git.SemVer.Major}.{ThisAssembly.Git.SemVer.Minor}.{ThisAssembly.Git.SemVer.Patch}"; + /// + /// The version of the operating system, in the Calendar Versioning format: "yy.minor.patch". + /// The year, minor, and patch version numbers are automatically extracted from the Git repository + /// using the ThisAssembly.Git.SemVer object. + /// + public const string VERSION = $"{ThisAssembly.Git.SemVer.Major}.{ThisAssembly.Git.SemVer.Minor}.{ThisAssembly.Git.SemVer.Patch}"; - /// - /// The build number of the operating system, generated from the commit hash. - /// The build number is a 6-digit number, with the first 3 digits being the first 3 digits of the commit hash - /// converted to a uint, and the last 3 digits being the last 3 digits of the commit hash converted to a uint. - /// - public static string BuildNumber = $"Build {BuildNumFromCommit}"; + /// + /// The build number of the operating system, generated from the commit hash. + /// The build number is a 6-digit number, with the first 3 digits being the first 3 digits of the commit hash + /// converted to a uint, and the last 3 digits being the last 3 digits of the commit hash converted to a uint. + /// + public static string BuildNumber = $"Build {BuildNumFromCommit}"; - /// - /// Generates the build number from the commit hash. - /// - /// The build number as a uint. - static uint BuildNumFromCommit - { - get - { - // Get the bytes of the commit hash as a UTF-8 encoded string - var commit = Encoding.UTF8.GetBytes(ThisAssembly.Git.Commit); + /// + /// Generates the build number from the commit hash. + /// + /// The build number as a uint. + static uint BuildNumFromCommit + { + get + { + // Get the bytes of the commit hash as a UTF-8 encoded string + var commit = Encoding.UTF8.GetBytes(ThisAssembly.Git.Commit); - // Convert the first 4 bytes of the commit hash to a uint and return it modulo 1000000 - // (this will give us a 6-digit number with the first 3 digits being the first 3 digits of the commit hash - // and the last 3 digits being the last 3 digits of the commit hash) - return BitConverter.ToUInt32(commit, 0) % 1000000; - } - } + // Convert the first 4 bytes of the commit hash to a uint and return it modulo 1000000 + // (this will give us a 6-digit number with the first 3 digits being the first 3 digits of the commit hash + // and the last 3 digits being the last 3 digits of the commit hash) + return BitConverter.ToUInt32(commit, 0) % 1000000; + } + } }