diff --git a/.github/ISSUE_TEMPLATE/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE/ISSUE_TEMPLATE.md
deleted file mode 100644
index 65667de..0000000
--- a/.github/ISSUE_TEMPLATE/ISSUE_TEMPLATE.md
+++ /dev/null
@@ -1,17 +0,0 @@
-## Expected Behavior
-
-
-## Actual Behavior
-
-
-## Steps to Reproduce the Problem
-
- 1.
- 1.
- 1.
-
-## Specifications
-
- - Version:
- - Platform:
- - Operating System:
\ No newline at end of file
diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
deleted file mode 100644
index dd84ea7..0000000
--- a/.github/ISSUE_TEMPLATE/bug_report.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-name: Bug report
-about: Create a report to help us improve
-title: ''
-labels: ''
-assignees: ''
-
----
-
-**Describe the bug**
-A clear and concise description of what the bug is.
-
-**To Reproduce**
-Steps to reproduce the behavior:
-1. Go to '...'
-2. Click on '....'
-3. Scroll down to '....'
-4. See error
-
-**Expected behavior**
-A clear and concise description of what you expected to happen.
-
-**Screenshots**
-If applicable, add screenshots to help explain your problem.
-
-**Desktop (please complete the following information):**
- - OS: [e.g. iOS]
- - Browser [e.g. chrome, safari]
- - Version [e.g. 22]
-
-**Smartphone (please complete the following information):**
- - Device: [e.g. iPhone6]
- - OS: [e.g. iOS8.1]
- - Browser [e.g. stock browser, safari]
- - Version [e.g. 22]
-
-**Additional context**
-Add any other context about the problem here.
diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md
deleted file mode 100644
index bbcbbe7..0000000
--- a/.github/ISSUE_TEMPLATE/feature_request.md
+++ /dev/null
@@ -1,20 +0,0 @@
----
-name: Feature request
-about: Suggest an idea for this project
-title: ''
-labels: ''
-assignees: ''
-
----
-
-**Is your feature request related to a problem? Please describe.**
-A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
-
-**Describe the solution you'd like**
-A clear and concise description of what you want to happen.
-
-**Describe alternatives you've considered**
-A clear and concise description of any alternative solutions or features you've considered.
-
-**Additional context**
-Add any other context or screenshots about the feature request here.
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index d5e3ee4..0000000
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,7 +0,0 @@
-# Fixes
-
-## Proposed Changes
-
- -
- -
- -
\ No newline at end of file
diff --git a/.github/workflows/dotnet.yml b/.github/workflows/dotnet.yml
index aca121d..7282312 100644
--- a/.github/workflows/dotnet.yml
+++ b/.github/workflows/dotnet.yml
@@ -4,9 +4,9 @@ on:
schedule:
- cron: "0 0 * * 0"
push:
- branches: [main, develop, "feature/**", "release/**"]
+ branches: [main, develop, "feature/**"]
pull_request:
- branches: [main, develop, "feature/**", "release/**"]
+ branches: [main, develop, "feature/**"]
jobs:
build:
@@ -27,23 +27,4 @@ jobs:
- name: Install dependencies
run: dotnet restore src/Tomas.Terminal
- name: Build
- run: dotnet build src/Tomas.Terminal -c Release --no-restore --nologo
-
- test:
- timeout-minutes: 15
- continue-on-error: true
- runs-on: ubuntu-latest
- strategy:
- matrix:
- dotnet: ["6.0.x"]
-
- steps:
- - uses: actions/checkout@v2
- - name: Setup .NET
- uses: actions/setup-dotnet@v1
- with:
- dotnet-version: ${{ matrix.dotnet }}
- - name: Install test dependencies
- run: dotnet restore src/Tomas.Tests
- - name: Test
- run: dotnet test src --no-restore --nologo
\ No newline at end of file
+ run: dotnet build src/Tomas.Terminal -c Release --no-restore
diff --git a/Changelog.md b/Changelog.md
index 038027e..9453408 100644
--- a/Changelog.md
+++ b/Changelog.md
@@ -2,10 +2,10 @@
## v23.0
-- Split versioning systems between kernal and terminal
- - Calendar versioning, `YY.MINOR.MICRO`, for kernal
- - Semantic versioning for terminal
+- Calendar versioning, `YY.MINOR.MICRO`
+
- If the file system is activate, system activity will be logged
+
- Build number based on commit hash
Due to the huge time skip and architectural changes, I've (retroactively) switched to calendar versioning with ``v0.1`` now known as ``v20.1`` as well.
diff --git a/README.md b/README.md
index 0a66f0d..41a0ebc 100644
--- a/README.md
+++ b/README.md
@@ -1,20 +1,6 @@
# TOMAS
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
TOMAS (**To**ny's **Ma**naged Operating **S**ystem) is a hobby operating system based on the [COSMOS](https://github.com/CosmosOS/Cosmos) framework that comes with a respective terminal emulator.
@@ -23,11 +9,15 @@ 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
-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.
+This project is licensed under the BSD 3-Clause license - see the [LICENSE](LICENSE) file for details.
diff --git a/UNLICENSE b/UNLICENSE
deleted file mode 100644
index fdddb29..0000000
--- a/UNLICENSE
+++ /dev/null
@@ -1,24 +0,0 @@
-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/assets/logo.png b/assets/logo.png
deleted file mode 100644
index 0122538..0000000
Binary files a/assets/logo.png and /dev/null differ
diff --git a/assets/logo.svg b/assets/logo.svg
deleted file mode 100644
index 57131e1..0000000
--- a/assets/logo.svg
+++ /dev/null
@@ -1,246 +0,0 @@
-
-
diff --git a/assets/social-preview.png b/assets/social-preview.png
deleted file mode 100644
index 72e8c2e..0000000
Binary files a/assets/social-preview.png and /dev/null differ
diff --git a/assets/social-preview.xcf b/assets/social-preview.xcf
deleted file mode 100644
index 70fef93..0000000
Binary files a/assets/social-preview.xcf and /dev/null differ
diff --git a/code_of_conduct.md b/code_of_conduct.md
deleted file mode 100644
index 1b9bfcd..0000000
--- a/code_of_conduct.md
+++ /dev/null
@@ -1,132 +0,0 @@
-# Contributor Covenant Code of Conduct
-
-## Our Pledge
-
-We as members, contributors, and leaders pledge to make participation in our
-community a harassment-free experience for everyone, regardless of age, body
-size, visible or invisible disability, ethnicity, sex characteristics, gender
-identity and expression, level of experience, education, socio-economic status,
-nationality, personal appearance, race, religion, or sexual identity
-and orientation.
-
-We pledge to act and interact in ways that contribute to an open, welcoming,
-diverse, inclusive, and healthy community.
-
-## Our Standards
-
-Examples of behavior that contributes to a positive environment for our
-community include:
-
-* Demonstrating empathy and kindness toward other people
-* Being respectful of differing opinions, viewpoints, and experiences
-* Giving and gracefully accepting constructive feedback
-* Accepting responsibility and apologizing to those affected by our mistakes,
- and learning from the experience
-* Focusing on what is best not just for us as individuals, but for the
- overall community
-
-Examples of unacceptable behavior include:
-
-* The use of sexualized language or imagery, and sexual attention or
- advances of any kind
-* Trolling, insulting or derogatory comments, and personal or political attacks
-* Public or private harassment
-* Publishing others' private information, such as a physical or email
- address, without their explicit permission
-* Other conduct which could reasonably be considered inappropriate in a
- professional setting
-
-## Enforcement Responsibilities
-
-Community leaders are responsible for clarifying and enforcing our standards of
-acceptable behavior and will take appropriate and fair corrective action in
-response to any behavior that they deem inappropriate, threatening, offensive,
-or harmful.
-
-Community leaders have the right and responsibility to remove, edit, or reject
-comments, commits, code, wiki edits, issues, and other contributions that are
-not aligned to this Code of Conduct, and will communicate reasons for moderation
-decisions when appropriate.
-
-## Scope
-
-This Code of Conduct applies within all community spaces, and also applies when
-an individual is officially representing the community in public spaces.
-Examples of representing our community include using an official e-mail address,
-posting via an official social media account, or acting as an appointed
-representative at an online or offline event.
-
-## Enforcement
-
-Instances of abusive, harassing, or otherwise unacceptable behavior may be
-reported to the community leaders responsible for enforcement at
-[INSERT CONTACT METHOD].
-All complaints will be reviewed and investigated promptly and fairly.
-
-All community leaders are obligated to respect the privacy and security of the
-reporter of any incident.
-
-## Enforcement Guidelines
-
-Community leaders will follow these Community Impact Guidelines in determining
-the consequences for any action they deem in violation of this Code of Conduct:
-
-### 1. Correction
-
-**Community Impact**: Use of inappropriate language or other behavior deemed
-unprofessional or unwelcome in the community.
-
-**Consequence**: A private, written warning from community leaders, providing
-clarity around the nature of the violation and an explanation of why the
-behavior was inappropriate. A public apology may be requested.
-
-### 2. Warning
-
-**Community Impact**: A violation through a single incident or series
-of actions.
-
-**Consequence**: A warning with consequences for continued behavior. No
-interaction with the people involved, including unsolicited interaction with
-those enforcing the Code of Conduct, for a specified period of time. This
-includes avoiding interactions in community spaces as well as external channels
-like social media. Violating these terms may lead to a temporary or
-permanent ban.
-
-### 3. Temporary Ban
-
-**Community Impact**: A serious violation of community standards, including
-sustained inappropriate behavior.
-
-**Consequence**: A temporary ban from any sort of interaction or public
-communication with the community for a specified period of time. No public or
-private interaction with the people involved, including unsolicited interaction
-with those enforcing the Code of Conduct, is allowed during this period.
-Violating these terms may lead to a permanent ban.
-
-### 4. Permanent Ban
-
-**Community Impact**: Demonstrating a pattern of violation of community
-standards, including sustained inappropriate behavior, harassment of an
-individual, or aggression toward or disparagement of classes of individuals.
-
-**Consequence**: A permanent ban from any sort of public interaction within
-the community.
-
-## Attribution
-
-This Code of Conduct is adapted from the [Contributor Covenant][homepage],
-version 2.0, available at
-[https://www.contributor-covenant.org/version/2/0/code_of_conduct.html][v2.0].
-
-Community Impact Guidelines were inspired by
-[Mozilla's code of conduct enforcement ladder][Mozilla CoC].
-
-For answers to common questions about this code of conduct, see the FAQ at
-[https://www.contributor-covenant.org/faq][FAQ]. Translations are available
-at [https://www.contributor-covenant.org/translations][translations].
-
-[homepage]: https://www.contributor-covenant.org
-[v2.0]: https://www.contributor-covenant.org/version/2/0/code_of_conduct.html
-[Mozilla CoC]: https://github.com/mozilla/diversity
-[FAQ]: https://www.contributor-covenant.org/faq
-[translations]: https://www.contributor-covenant.org/translations
diff --git a/assets/screenshot.png b/screenshot.png
similarity index 100%
rename from assets/screenshot.png
rename to screenshot.png
diff --git a/src/.editorconfig b/src/.editorconfig
index ebdac3a..7868c26 100644
--- a/src/.editorconfig
+++ b/src/.editorconfig
@@ -13,8 +13,6 @@ indent_style = space
indent_size = 4
insert_final_newline = false
trim_trailing_whitespace = true
-dotnet_style_operator_placement_when_wrapping = beginning_of_line
-tab_width = 4
# C# files
[*.cs]
@@ -52,7 +50,7 @@ dotnet_style_predefined_type_for_member_access = true:suggestion
# Use camel_case for private or internal constant fields
dotnet_naming_rule.constant_fields_should_be_pascal_case.severity = suggestion
dotnet_naming_rule.constant_fields_should_be_pascal_case.symbols = constant_fields
-dotnet_naming_rule.constant_fields_should_be_pascal_case.style = pascal_case_style
+dotnet_naming_rule.constant_fields_should_be_pascal_case.style = pascal_case_style
dotnet_naming_symbols.constant_fields.applicable_kinds = field
dotnet_naming_symbols.constant_fields.required_modifiers = const
@@ -64,7 +62,7 @@ dotnet_naming_style.pascal_case_style.capitalization = pascal_case
# internal and private fields should be _camel_case
dotnet_naming_rule.camel_case_for_private_internal_fields.severity = suggestion
dotnet_naming_rule.camel_case_for_private_internal_fields.symbols = private_internal_fields
-dotnet_naming_rule.camel_case_for_private_internal_fields.style = camel_case_underscore_style
+dotnet_naming_rule.camel_case_for_private_internal_fields.style = camel_case_underscore_style
dotnet_naming_symbols.private_internal_fields.applicable_kinds = field
dotnet_naming_symbols.private_internal_fields.applicable_accessibilities = private, internal
@@ -124,9 +122,3 @@ csharp_space_between_method_declaration_name_and_open_parenthesis = false
csharp_space_between_method_declaration_parameter_list_parentheses = false
csharp_space_between_parentheses = false
csharp_space_between_square_brackets = false
-csharp_using_directive_placement = outside_namespace:silent
-csharp_prefer_simple_using_statement = true:suggestion
-csharp_prefer_braces = when_multiline:silent
-csharp_style_namespace_declarations = file_scoped:silent
-csharp_style_prefer_method_group_conversion = true:silent
-csharp_style_prefer_top_level_statements = true:silent
diff --git a/src/TOMAS.sln b/src/TOMAS.sln
index d18435f..5fff92d 100644
--- a/src/TOMAS.sln
+++ b/src/TOMAS.sln
@@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.4.33205.214
MinimumVisualStudioVersion = 10.0.40219.1
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tomas.Core", "Tomas.Core\Tomas.Core.csproj", "{C50F3A6F-CFF4-4725-A1A5-21C5A2BC3321}"
+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}"
ProjectSection(SolutionItems) = preProject
@@ -13,16 +13,13 @@ 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}"
EndProject
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.Kernel", "Tomas.Kernel\Tomas.Kernel.csproj", "{B70BDFD5-64BA-4FCE-A00F-DDD209C2C0FB}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tomas.Tests", "Tomas.Tests\Tomas.Tests.csproj", "{76AD2140-2975-43DA-89A9-0BEC70B2ECDD}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tomas.Kernel", "Tomas.Kernal\Tomas.Kernel.csproj", "{20750C95-A3C7-4958-BA9F-56E4C3BD0293}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -42,14 +39,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
- {B70BDFD5-64BA-4FCE-A00F-DDD209C2C0FB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {B70BDFD5-64BA-4FCE-A00F-DDD209C2C0FB}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {B70BDFD5-64BA-4FCE-A00F-DDD209C2C0FB}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {B70BDFD5-64BA-4FCE-A00F-DDD209C2C0FB}.Release|Any CPU.Build.0 = Release|Any CPU
- {76AD2140-2975-43DA-89A9-0BEC70B2ECDD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {76AD2140-2975-43DA-89A9-0BEC70B2ECDD}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {76AD2140-2975-43DA-89A9-0BEC70B2ECDD}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {76AD2140-2975-43DA-89A9-0BEC70B2ECDD}.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.sln.licenseheader b/src/TOMAS.sln.licenseheader
index 81ee8df..df33244 100644
--- a/src/TOMAS.sln.licenseheader
+++ b/src/TOMAS.sln.licenseheader
@@ -1,8 +1,4 @@
extensions: designer.cs generated.cs
extensions: .cs .cpp .h .fs
-/*
-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
+// 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
diff --git a/src/Tomas.Kernel/GitInfo.txt b/src/Tomas.Common/GitInfo.txt
similarity index 100%
rename from src/Tomas.Kernel/GitInfo.txt
rename to src/Tomas.Common/GitInfo.txt
diff --git a/src/Tomas.Common/GlobalUsing.cs b/src/Tomas.Common/GlobalUsing.cs
new file mode 100644
index 0000000..c66f29a
--- /dev/null
+++ b/src/Tomas.Common/GlobalUsing.cs
@@ -0,0 +1,2 @@
+global using System.Diagnostics.CodeAnalysis;
+global using Tomas.Interface;
diff --git a/src/Tomas.Common/Programs/Clear.cs b/src/Tomas.Common/Programs/Clear.cs
new file mode 100644
index 0000000..afeec90
--- /dev/null
+++ b/src/Tomas.Common/Programs/Clear.cs
@@ -0,0 +1,13 @@
+// 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;
+
+public class Clear : IProgram
+{
+ public bool Run(IShell shell)
+ {
+ Console.Clear();
+ return true;
+ }
+}
\ No newline at end of file
diff --git a/src/Tomas.Common/Programs/Commands.cs b/src/Tomas.Common/Programs/Commands.cs
new file mode 100644
index 0000000..c2590c2
--- /dev/null
+++ b/src/Tomas.Common/Programs/Commands.cs
@@ -0,0 +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;
+
+public class Commands : IProgram
+{
+ public bool Run(IShell shell)
+ {
+ Console.WriteLine($"Commands:");
+ 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.Common/Programs/FenSay.cs b/src/Tomas.Common/Programs/FenSay.cs
new file mode 100644
index 0000000..0dd73a4
--- /dev/null
+++ b/src/Tomas.Common/Programs/FenSay.cs
@@ -0,0 +1,38 @@
+// 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;
+
+public class FenSay : IProgram
+{
+
+ ///
+ /// Fennec art by Todd Vargo
+ ///
+ const string _fennec = @" \/
+ /\ /\
+ //\\_//\\ ____
+ \_ _/ / /
+ / * * \ /^^^]
+ \_\O/_/ [ ]
+ / \_ [ /
+ \ \_ / /
+ [ [ / \/ _/
+ _[ [ \ /_/";
+
+ 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;
+ }
+}
\ No newline at end of file
diff --git a/src/Tomas.Kernel/SysMeta.cs b/src/Tomas.Common/SysMeta.cs
similarity index 79%
rename from src/Tomas.Kernel/SysMeta.cs
rename to src/Tomas.Common/SysMeta.cs
index 0153a0e..79ffd67 100644
--- a/src/Tomas.Kernel/SysMeta.cs
+++ b/src/Tomas.Common/SysMeta.cs
@@ -1,14 +1,13 @@
-/*
-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.
-*/
+// I license this project under the BSD 3-Clause license.
+// See the LICENSE file in the project root for more information.
using System.Text;
-namespace Tomas.Kernel;
+namespace Tomas.Common;
-internal struct SysMeta
+///
+/// System metdata, such as name, version and build number.
+///
+public struct SysMeta
{
///
/// The name of the operating system.
@@ -27,12 +26,13 @@ internal struct SysMeta
/// 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.
///
+ [SuppressMessage("Usage", "CA2211:Non-constant fields should not be visible")]
public static string BuildNumber = $"Build {BuildNumFromCommit}";
///
- /// Let's the kernel know that the file system is activated.
+ /// Let's the system know that the file system is activated.
///
- public static bool IsFSEnabled { get; set; } = false;
+ public static bool IsFSActive { get; set; } = false;
///
/// Generates the build number from the commit hash.
diff --git a/src/Tomas.Core/Tomas.Core.csproj b/src/Tomas.Common/Tomas.Common.csproj
similarity index 51%
rename from src/Tomas.Core/Tomas.Core.csproj
rename to src/Tomas.Common/Tomas.Common.csproj
index 665370e..6a91aed 100644
--- a/src/Tomas.Core/Tomas.Core.csproj
+++ b/src/Tomas.Common/Tomas.Common.csproj
@@ -9,4 +9,11 @@
+
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
+
diff --git a/src/Tomas.Core/Programs/Clear.cs b/src/Tomas.Core/Programs/Clear.cs
deleted file mode 100644
index 080ae07..0000000
--- a/src/Tomas.Core/Programs/Clear.cs
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
-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;
- }
-}
\ No newline at end of file
diff --git a/src/Tomas.Core/Programs/Commands.cs b/src/Tomas.Core/Programs/Commands.cs
deleted file mode 100644
index 70e0348..0000000
--- a/src/Tomas.Core/Programs/Commands.cs
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
-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
-{
- public bool Run(IShell shell)
- {
- Console.WriteLine($"Commands:");
- 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.Core/Programs/FenSay.cs b/src/Tomas.Core/Programs/FenSay.cs
deleted file mode 100644
index 9b227cf..0000000
--- a/src/Tomas.Core/Programs/FenSay.cs
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
-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 = @" \/
- /\ /\
- //\\_//\\ ____
- \_ _/ / /
- / * * \ /^^^]
- \_\O/_/ [ ]
- / \_ [ /
- \ \_ / /
- [ [ / \/ _/
- _[ [ \ /_/";
-
- 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;
- }
-}
\ No newline at end of file
diff --git a/src/Tomas.Core/Usings.cs b/src/Tomas.Core/Usings.cs
deleted file mode 100644
index 511e2b8..0000000
--- a/src/Tomas.Core/Usings.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-/*
-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.Interface/IProgram.cs b/src/Tomas.Interface/IProgram.cs
index dd7cf90..ccdfb70 100644
--- a/src/Tomas.Interface/IProgram.cs
+++ b/src/Tomas.Interface/IProgram.cs
@@ -1,18 +1,14 @@
-/*
-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.
-*/
+// I license this project under the BSD 3-Clause license.
+// See the 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 398eb91..fce577d 100644
--- a/src/Tomas.Interface/IShell.cs
+++ b/src/Tomas.Interface/IShell.cs
@@ -1,14 +1,11 @@
-/*
-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.
-*/
+// I license this project under the BSD 3-Clause license.
+// See the 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.Interface/Usings.cs b/src/Tomas.Interface/Usings.cs
deleted file mode 100644
index e69de29..0000000
diff --git a/src/Tomas.Kernal/GlobalUsing.cs b/src/Tomas.Kernal/GlobalUsing.cs
new file mode 100644
index 0000000..b847d34
--- /dev/null
+++ b/src/Tomas.Kernal/GlobalUsing.cs
@@ -0,0 +1,7 @@
+global using Tomas.Common.Programs;
+global using Tomas.Interface;
+global using Tomas.Kernel.Programs;
+global using Cosmos.System.FileSystem;
+global using Cosmos.System.FileSystem.VFS;
+global using Tomas.Common;
+global using Os = Cosmos.System;
\ No newline at end of file
diff --git a/src/Tomas.Kernal/Kernel.cs b/src/Tomas.Kernal/Kernel.cs
new file mode 100644
index 0000000..e5f4150
--- /dev/null
+++ b/src/Tomas.Kernal/Kernel.cs
@@ -0,0 +1,51 @@
+// I license this project under the BSD 3-Clause license.
+// See the LICENSE file in the project root for more information.
+
+namespace Tomas.Kernel;
+
+public class Kernel : Os.Kernel
+{
+
+ protected override void BeforeRun()
+ {
+ SysFS.Initialize();
+
+ if (!SysMeta.IsFSActive)
+ Console.WriteLine($"{SysMeta.NAME} booted with errors.");
+ else
+ Console.WriteLine($"{SysMeta.NAME} booted successfully.");
+ }
+
+ protected override void Run()
+ {
+ 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);
+ }
+ }
+ }
+}
diff --git a/src/Tomas.Kernal/Programs/About.cs b/src/Tomas.Kernal/Programs/About.cs
new file mode 100644
index 0000000..365c563
--- /dev/null
+++ b/src/Tomas.Kernal/Programs/About.cs
@@ -0,0 +1,17 @@
+// I license this project under the BSD 3-Clause license.
+// See the 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);
+
+ return true;
+ }
+}
\ No newline at end of file
diff --git a/src/Tomas.Kernel/Shell.cs b/src/Tomas.Kernal/Shell.cs
similarity index 77%
rename from src/Tomas.Kernel/Shell.cs
rename to src/Tomas.Kernal/Shell.cs
index 85b109a..1b49aa5 100644
--- a/src/Tomas.Kernel/Shell.cs
+++ b/src/Tomas.Kernal/Shell.cs
@@ -1,9 +1,6 @@
-/*
-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.
-*/
+// I license this project under the BSD 3-Clause license.
+// See the LICENSE file in the project root for more information.
+
namespace Tomas.Kernel;
public class Shell : IShell
diff --git a/src/Tomas.Kernel/SysFS.cs b/src/Tomas.Kernal/SysFS.cs
similarity index 56%
rename from src/Tomas.Kernel/SysFS.cs
rename to src/Tomas.Kernal/SysFS.cs
index 6ad6324..56f4d58 100644
--- a/src/Tomas.Kernel/SysFS.cs
+++ b/src/Tomas.Kernal/SysFS.cs
@@ -1,26 +1,19 @@
-/*
-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.
-*/
+// I license this project under the BSD 3-Clause license.
+// See the 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:\\";
+ 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";
- 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 readonly CosmosVFS _fs = new();
///
/// Initializes the file system by creating the system directory and sysinfo.txt file
@@ -30,40 +23,49 @@ static class SysFS
{
try
{
- // File to store system information
- const string sysInfoFile = "sysinfo.txt";
+ var createSysFiles = "Creating system files.";
+ var setSysPref = "Writing system info.";
+ var fsSuccess = "File system succesfully initialized.";
- // Create system directory if it doesn't exist
- if (!Directory.Exists(SYSTEM_DIR))
- fileSystem.CreateDirectory(SYSTEM_DIR);
+ // Register the CosmosVFS instance as the virtual file system
+ VFSManager.RegisterVFS(_fs);
- // Create system log file if it doesn't exist
- if (!File.Exists($"{SYSTEM_DIR}{LOG_FILE}"))
- fileSystem.CreateFile($"{SYSTEM_DIR}{LOG_FILE}");
+ // Create the system directory
+ _fs.CreateDirectory(SYSTEM_DIR);
- // Create sysinfo.txt file if it doesn't exist
- if (!File.Exists($"{SYSTEM_DIR}{sysInfoFile}"))
- fileSystem.CreateFile($"{SYSTEM_DIR}{sysInfoFile}");
+ _fs.CreateFile($"{SYSTEM_DIR}{LOG_FILE}");
- // Write system name, version, and build number to sysinfo.txt file
+ Console.WriteLine(createSysFiles);
+ File.AppendAllText(LOG_FILE, createSysFiles);
+
+ // Create the sysinfo.txt file in the system directory
+ _fs.CreateFile($"{SYSTEM_DIR}sysinfo.txt");
+
+ Console.WriteLine(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})");
- // Set IsFSEnabled property of SysMeta class to true
- SysMeta.IsFSEnabled = true;
+ Console.WriteLine(fsSuccess);
+ File.AppendAllText(LOG_FILE, fsSuccess);
- // Read contents of sysinfo.txt file and print to console
+ // Set the IsFSActive property of the SysMeta class to true
+ SysMeta.IsFSActive = true;
+
+ // 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)
{
- // Print error message if an exception is caught
+ // 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
///
@@ -72,13 +74,8 @@ static class SysFS
{
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}");
+ _fs.CreateDirectory($"{ROOT_DIR}\\{directory}");
}
catch (IOException err)
{
@@ -97,13 +94,8 @@ static class SysFS
{
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}");
+ _fs.CreateFile($"{ROOT_DIR}\\{path}\\{file}");
}
catch (IOException err)
{
@@ -122,10 +114,6 @@ static class SysFS
{
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);
diff --git a/src/Tomas.Kernel/Tomas.Kernel.csproj b/src/Tomas.Kernal/Tomas.Kernel.csproj
similarity index 78%
rename from src/Tomas.Kernel/Tomas.Kernel.csproj
rename to src/Tomas.Kernal/Tomas.Kernel.csproj
index f15c019..f747da9 100644
--- a/src/Tomas.Kernel/Tomas.Kernel.csproj
+++ b/src/Tomas.Kernal/Tomas.Kernel.csproj
@@ -5,7 +5,6 @@
cosmosfalse
- enableTrueenable
@@ -25,14 +24,10 @@
-
- all
- runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
+
diff --git a/src/Tomas.Kernel/Globalization/CST.cs b/src/Tomas.Kernel/Globalization/CST.cs
deleted file mode 100644
index 1063563..0000000
--- a/src/Tomas.Kernel/Globalization/CST.cs
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
-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";
-
- ///
- /// 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);
- }
-
- ///
- /// 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(CRLF))
- content = content.Replace(CRLF, 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);
-
- // 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;
-
- // 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);
- }
-
- // 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
deleted file mode 100644
index b570366..0000000
--- a/src/Tomas.Kernel/Globalization/IUIText.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
-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; }
-
- ///
- /// 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
deleted file mode 100644
index 4c9c3fe..0000000
--- a/src/Tomas.Kernel/Globalization/UIText.cs
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
-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 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.
- /// 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;
- }
-
- ///
- /// 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 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;
-
- // Get the id of the current file.
- var ids = Path.GetFileName(file);
- var second = ids.IndexOf("_", 1, StringComparison.InvariantCultureIgnoreCase);
-
- if (second == -1)
- continue;
-
- 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;
-
- // Read the content of the current file.
- var content = File.ReadAllText(file);
-
- // Return the text for the specified key.
- return CST.Parse(content, key);
- }
-
- // 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
deleted file mode 100644
index 91048a7..0000000
--- a/src/Tomas.Kernel/Kernel.cs
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
-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
-{
- // This method is called before the Run method
- protected override void BeforeRun()
- {
- // Initialize the file system
- SysFS.Initialize();
-
- // If the file system is not enabled, print an error message indicating that the system booted with errors
- if (!SysMeta.IsFSEnabled)
- Console.WriteLine($"{SysMeta.NAME} booted with errors.");
- // If the file system is enabled, print a message indicating that the system booted successfully
- else
- Console.WriteLine($"{SysMeta.NAME} booted successfully.");
- }
-
- // This method is the main loop of the kernel, which handles input and runs programs
- protected override void Run()
- {
- // Run the loop indefinitely
- while (true)
- {
- // Create a new instance of the Shell class
- var shell = new Shell();
-
- // Read a line of input from the user
- var command = shell.ReadLine;
-
- // Get the dictionary of programs from the shell
- var programs = shell.Programs;
-
- // If the command is not a key in the dictionary of programs, print an error message
- // and continue to the next iteration of the loop
- if (!programs.TryGetValue(command, out var program))
- {
- Console.WriteLine("Command Not Found.");
- continue;
- }
-
- // Try to run the program and handle any exceptions that may be thrown
- try
- {
- // Run the program and store the returned value in the 'start' variable
- var start = program.Run(shell);
-
- // Check the value of 'start' and take the appropriate action
- switch (start)
- {
- case true:
- // If 'start' is true, continue to the next iteration of the loop
- continue;
- case false:
- // If 'start' is false, print an error message and continue to the next iteration of the loop
- Console.WriteLine("Program closed unexpectedly.");
- continue;
- }
- }
- catch (Exception err)
- {
- // If an exception is caught, print the error message and continue to the next iteration of the loop
- Console.WriteLine(err.Message);
- }
- }
- }
-}
diff --git a/src/Tomas.Kernel/Programs/About.cs b/src/Tomas.Kernel/Programs/About.cs
deleted file mode 100644
index 83fcb68..0000000
--- a/src/Tomas.Kernel/Programs/About.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
-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);
-
- return true;
- }
-}
\ No newline at end of file
diff --git a/src/Tomas.Kernel/Usings.cs b/src/Tomas.Kernel/Usings.cs
deleted file mode 100644
index b1bfac8..0000000
--- a/src/Tomas.Kernel/Usings.cs
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
-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.Core.Programs;
-global using Tomas.Interface;
-global using Tomas.Kernel.Programs;
-global using Cosmos.System.FileSystem;
-global using Cosmos.System.FileSystem.VFS;
-global using Tomas.Core;
-global using Os = Cosmos.System;
\ No newline at end of file
diff --git a/src/Tomas.Terminal/GitInfo.txt b/src/Tomas.Terminal/GitInfo.txt
deleted file mode 100644
index ceab6e1..0000000
--- a/src/Tomas.Terminal/GitInfo.txt
+++ /dev/null
@@ -1 +0,0 @@
-0.1
\ No newline at end of file
diff --git a/src/Tomas.Terminal/GlobalUsing.cs b/src/Tomas.Terminal/GlobalUsing.cs
new file mode 100644
index 0000000..6169845
--- /dev/null
+++ b/src/Tomas.Terminal/GlobalUsing.cs
@@ -0,0 +1,2 @@
+global using Tomas.Common.Programs;
+global using Tomas.Interface;
\ No newline at end of file
diff --git a/src/Tomas.Terminal/Program.cs b/src/Tomas.Terminal/Program.cs
index f95cf7d..80f945a 100644
--- a/src/Tomas.Terminal/Program.cs
+++ b/src/Tomas.Terminal/Program.cs
@@ -1,43 +1,40 @@
-/*
-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.
-*/
+// I license this project under the BSD 3-Clause license.
+// See the LICENSE file in the project root for more information.
+
namespace Tomas.Terminal;
class Program
{
- 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)
+ static void Main()
{
- case true:
- continue;
- case false:
- Console.WriteLine("Program closed unexpectedly.");
- continue;
+ 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);
+ }
+ }
}
- }
- 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 b6cb3b7..bf3e15f 100644
--- a/src/Tomas.Terminal/Programs/About.cs
+++ b/src/Tomas.Terminal/Programs/About.cs
@@ -1,16 +1,15 @@
-/*
-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.
-*/
+// I license this project under the BSD 3-Clause license.
+// See the LICENSE file in the project root for more information.
+using Tomas.Common;
+
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($"{SysMeta.NAME} Terminal Emulator v{SysMeta.BuildNumber}{Environment.NewLine}"
+ + "TOMAS (Tony's Managed Operating System) is a operating system written in C# using the COSMOS framework.");
+return true;
+}
}
\ No newline at end of file
diff --git a/src/Tomas.Terminal/Shell.cs b/src/Tomas.Terminal/Shell.cs
index f9a3989..097c79f 100644
--- a/src/Tomas.Terminal/Shell.cs
+++ b/src/Tomas.Terminal/Shell.cs
@@ -1,18 +1,14 @@
-/*
-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.
-*/
+// I license this project under the BSD 3-Clause license.
+// See the 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()},
@@ -20,13 +16,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
deleted file mode 100644
index 8451cdb..0000000
--- a/src/Tomas.Terminal/TermMeta.cs
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
-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.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 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}";
-
- ///
- /// 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;
- }
- }
-}
diff --git a/src/Tomas.Terminal/Tomas.Terminal.csproj b/src/Tomas.Terminal/Tomas.Terminal.csproj
index 91627f1..f466519 100644
--- a/src/Tomas.Terminal/Tomas.Terminal.csproj
+++ b/src/Tomas.Terminal/Tomas.Terminal.csproj
@@ -8,15 +8,7 @@
-
- all
- runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
-
-
-
-
+
diff --git a/src/Tomas.Terminal/Usings.cs b/src/Tomas.Terminal/Usings.cs
deleted file mode 100644
index bbcdb99..0000000
--- a/src/Tomas.Terminal/Usings.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-/*
-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.Core.Programs;
-global using Tomas.Interface;
\ No newline at end of file
diff --git a/src/Tomas.Tests/Shell/MockProgram.cs b/src/Tomas.Tests/Shell/MockProgram.cs
deleted file mode 100644
index 3077976..0000000
--- a/src/Tomas.Tests/Shell/MockProgram.cs
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
-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.Tests.Shell;
-
-internal class MockProgram : IProgram
-{
- public bool Run(IShell shell)
- {
- Debug.WriteLine("Test Program.");
- return true;
- }
-}
diff --git a/src/Tomas.Tests/Shell/MockShell.cs b/src/Tomas.Tests/Shell/MockShell.cs
deleted file mode 100644
index 0ea450a..0000000
--- a/src/Tomas.Tests/Shell/MockShell.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
-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.Tests.Shell;
-
-internal class MockShell : IShell
-{
- public string? ReadLine { get; }
-
- public Dictionary Programs => new()
- {
- { "test", new MockProgram() },
- };
-}
diff --git a/src/Tomas.Tests/ShellTests.cs b/src/Tomas.Tests/ShellTests.cs
deleted file mode 100644
index 0f7c04f..0000000
--- a/src/Tomas.Tests/ShellTests.cs
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
-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.Tests.Shell;
-
-namespace Tomas.Tests;
-
-public class ShellTests
-{
- // Create a new instance of the mock shell
- readonly MockShell _mockShell = new();
-
- [Fact]
- public void ProgramTest()
- {
- // Create a mock program instance
- var program = new MockProgram();
-
- // Assert that the Run method of the program and returns true when passed the shell object.
- Assert.True(program.Run(_mockShell));
- }
-
-}
\ No newline at end of file
diff --git a/src/Tomas.Tests/Tomas.Tests.csproj b/src/Tomas.Tests/Tomas.Tests.csproj
deleted file mode 100644
index 5c6309a..0000000
--- a/src/Tomas.Tests/Tomas.Tests.csproj
+++ /dev/null
@@ -1,29 +0,0 @@
-
-
-
- net6.0
- enable
- enable
- enable
- false
-
-
-
-
-
-
- runtime; build; native; contentfiles; analyzers; buildtransitive
- all
-
-
- runtime; build; native; contentfiles; analyzers; buildtransitive
- all
-
-
-
-
-
-
-
-
-
diff --git a/src/Tomas.Tests/Usings.cs b/src/Tomas.Tests/Usings.cs
deleted file mode 100644
index d97cace..0000000
--- a/src/Tomas.Tests/Usings.cs
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
-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 Xunit;
-global using System.Diagnostics.CodeAnalysis;
-global using System.Diagnostics;
-global using Tomas.Core;
-global using Tomas.Interface;
\ No newline at end of file