mirror of
https://github.com/tonytins/tomas.git
synced 2025-06-25 18:14:42 -04:00
Initial source commit
This commit is contained in:
commit
414aa10aef
16 changed files with 1292 additions and 0 deletions
137
src/.editorconfig
Normal file
137
src/.editorconfig
Normal file
|
@ -0,0 +1,137 @@
|
|||
# editorconfig.org
|
||||
|
||||
# Default settings:
|
||||
# A newline ending every file
|
||||
# Use 4 spaces as indentation
|
||||
[*]
|
||||
charset = utf-8
|
||||
end_of_line = crlf
|
||||
indent_style = space
|
||||
indent_size = 4
|
||||
insert_final_newline = false
|
||||
trim_trailing_whitespace = true
|
||||
|
||||
|
||||
# https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-language-conventions?view=vs-2019
|
||||
# CA1822: Mark members as static
|
||||
dotnet_diagnostic.CA1822.severity = silent
|
||||
# CA1815: Override equals and operator equals on value types
|
||||
dotnet_diagnostic.CA1815.severity = silent
|
||||
|
||||
# VB and C# files
|
||||
[*.{vb,cs}]
|
||||
# avoid this. unless absolutely necessary
|
||||
dotnet_style_qualification_for_field = false : suggestion
|
||||
dotnet_style_qualification_for_property = false : suggestion
|
||||
dotnet_style_qualification_for_method = false : suggestion
|
||||
dotnet_style_qualification_for_event = false : suggestion
|
||||
|
||||
# use language keywords instead of BCL types
|
||||
dotnet_style_predefined_type_for_locals_parameters_members = true : suggestion
|
||||
dotnet_style_predefined_type_for_member_access = true : suggestion
|
||||
|
||||
# Use camel_case for 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_symbols.constant_fields.applicable_kinds = field
|
||||
dotnet_naming_symbols.constant_fields.required_modifiers = const
|
||||
|
||||
dotnet_naming_style.pascal_case_style.capitalization = pascal_case
|
||||
|
||||
# Comment this group and uncomment out the next group if you don't want _ prefixed fields.
|
||||
|
||||
# internal and fields should be _camelCase
|
||||
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_symbols.private_internal_fields.applicable_kinds = field
|
||||
dotnet_naming_symbols.private_internal_fields.applicable_accessibilities = private, internal
|
||||
|
||||
dotnet_naming_style.camel_case_underscore_style.required_prefix = _
|
||||
dotnet_naming_style.camel_case_underscore_style.capitalization = camel_case
|
||||
|
||||
# Public members must be capitalized
|
||||
|
||||
dotnet_naming_rule.public_members_must_be_capitalized.symbols = public_symbols
|
||||
dotnet_naming_symbols.public_symbols.applicable_kinds = property,method,field,event,delegate
|
||||
dotnet_naming_symbols.public_symbols.applicable_accessibilities = public
|
||||
|
||||
dotnet_naming_rule.public_members_must_be_capitalized.style = first_word_upper_case_style
|
||||
dotnet_naming_style.first_word_upper_case_style.capitalization = first_word_upper
|
||||
|
||||
dotnet_naming_rule.public_members_must_be_capitalized.severity = suggestion
|
||||
|
||||
# Code style defaults
|
||||
dotnet_sort_system_directives_first = true
|
||||
csharp_preserve_single_line_blocks = true
|
||||
csharp_preserve_single_line_statements = false
|
||||
|
||||
# Expression-level preferences
|
||||
dotnet_style_object_initializer = true : suggestion
|
||||
dotnet_style_collection_initializer = true : suggestion
|
||||
dotnet_style_explicit_tuple_names = true : suggestion
|
||||
dotnet_style_coalesce_expression = true : suggestion
|
||||
dotnet_style_null_propagation = true : suggestion
|
||||
|
||||
[*.cs]
|
||||
# New line preferences
|
||||
csharp_new_line_before_open_brace = all
|
||||
csharp_new_line_before_else = true
|
||||
csharp_new_line_before_catch = true
|
||||
csharp_new_line_before_finally = true
|
||||
csharp_new_line_before_members_in_object_initializers = true
|
||||
csharp_new_line_before_members_in_anonymous_types = true
|
||||
csharp_new_line_between_query_expression_clauses = true
|
||||
|
||||
# Indentation preferences
|
||||
csharp_indent_block_contents = true
|
||||
csharp_indent_braces = false
|
||||
csharp_indent_case_contents = true
|
||||
csharp_indent_switch_labels = true
|
||||
csharp_indent_labels = one_less_than_current
|
||||
|
||||
# only use var when it's obvious what the variable type is
|
||||
csharp_style_var_for_built_in_types = true : none
|
||||
csharp_style_var_when_type_is_apparent = true : none
|
||||
csharp_style_var_elsewhere = true : suggestion
|
||||
|
||||
# Code style defaults
|
||||
dotnet_sort_system_directives_first = true
|
||||
csharp_preserve_single_line_blocks = true
|
||||
csharp_preserve_single_line_statements = false
|
||||
|
||||
# Pattern matching
|
||||
csharp_style_pattern_matching_over_is_with_cast_check = true : suggestion
|
||||
csharp_style_pattern_matching_over_as_with_null_check = true : suggestion
|
||||
csharp_style_inlined_variable_declaration = true : suggestion
|
||||
|
||||
# Null checking preferences
|
||||
csharp_style_throw_expression = true : warning
|
||||
csharp_style_conditional_delegate_call = true : warning
|
||||
|
||||
# Space preferences
|
||||
csharp_space_after_cast = false
|
||||
csharp_space_after_colon_in_inheritance_clause = true
|
||||
csharp_space_after_comma = true
|
||||
csharp_space_after_dot = false
|
||||
csharp_space_after_keywords_in_control_flow_statements = true
|
||||
csharp_space_after_semicolon_in_for_statement = true
|
||||
csharp_space_around_binary_operators = before_and_after
|
||||
csharp_space_around_declaration_statements = do_not_ignore
|
||||
csharp_space_before_colon_in_inheritance_clause = true
|
||||
csharp_space_before_comma = false
|
||||
csharp_space_before_dot = false
|
||||
csharp_space_before_open_square_brackets = false
|
||||
csharp_space_before_semicolon_in_for_statement = false
|
||||
csharp_space_between_empty_square_brackets = false
|
||||
csharp_space_between_method_call_empty_parameter_list_parentheses = false
|
||||
csharp_space_between_method_call_name_and_opening_parenthesis = false
|
||||
csharp_space_between_method_call_parameter_list_parentheses = false
|
||||
csharp_space_between_method_declaration_empty_parameter_list_parentheses = false
|
||||
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
|
6
src/NuGet.Config
Normal file
6
src/NuGet.Config
Normal file
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<packageSources>
|
||||
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
|
||||
</packageSources>
|
||||
</configuration>
|
37
src/TOMAS.sln
Normal file
37
src/TOMAS.sln
Normal file
|
@ -0,0 +1,37 @@
|
|||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 16
|
||||
VisualStudioVersion = 16.0.29709.97
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tomas.Kernel", "Tomas.Kernel\Tomas.Kernel.csproj", "{AF6338C3-342A-4A12-A25C-2D53C5568DA8}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "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
|
||||
.editorconfig = .editorconfig
|
||||
TOMAS.sln.licenseheader = TOMAS.sln.licenseheader
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{AF6338C3-342A-4A12-A25C-2D53C5568DA8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AF6338C3-342A-4A12-A25C-2D53C5568DA8}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AF6338C3-342A-4A12-A25C-2D53C5568DA8}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{AF6338C3-342A-4A12-A25C-2D53C5568DA8}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{C50F3A6F-CFF4-4725-A1A5-21C5A2BC3321}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{C50F3A6F-CFF4-4725-A1A5-21C5A2BC3321}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{C50F3A6F-CFF4-4725-A1A5-21C5A2BC3321}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{C50F3A6F-CFF4-4725-A1A5-21C5A2BC3321}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {E8F84667-6E48-4F4D-88EF-1703BF17D5F9}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
4
src/TOMAS.sln.licenseheader
Normal file
4
src/TOMAS.sln.licenseheader
Normal file
|
@ -0,0 +1,4 @@
|
|||
extensions: designer.cs generated.cs
|
||||
extensions: .cs .cpp .h .fs
|
||||
// TOMAS is licensed under the MPL 2.0 license.
|
||||
// See the LICENSE file in the project root for more information.
|
35
src/Tomas.Common/EasterEggs.cs
Normal file
35
src/Tomas.Common/EasterEggs.cs
Normal file
|
@ -0,0 +1,35 @@
|
|||
// TOMAS is licensed under the MPL 2.0 license.
|
||||
// See the LICENSE file in the project root for more information.
|
||||
using System;
|
||||
|
||||
namespace Tomas.Common
|
||||
{
|
||||
internal class EasterEggs
|
||||
{
|
||||
/// <summary>
|
||||
/// Fennec art by Todd Vargo
|
||||
/// </summary>
|
||||
const string FENNEC = @" \/
|
||||
/\ /\
|
||||
//\\_//\\ ____
|
||||
\_ _/ / /
|
||||
/ * * \ /^^^]
|
||||
\_\O/_/ [ ]
|
||||
/ \_ [ /
|
||||
\ \_ / /
|
||||
[ [ / \/ _/
|
||||
_[ [ \ /_/";
|
||||
|
||||
static readonly string[] _fenPhrases = { "Screams in fennec!", "Some people call me a coffee fox." };
|
||||
|
||||
public static string FenSay
|
||||
{
|
||||
get
|
||||
{
|
||||
var rng = new Random();
|
||||
var phrases = _fenPhrases[rng.Next(0, _fenPhrases.Length)];
|
||||
return $"{phrases}{Environment.NewLine}{FENNEC}";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
12
src/Tomas.Common/OSConsts.cs
Normal file
12
src/Tomas.Common/OSConsts.cs
Normal file
|
@ -0,0 +1,12 @@
|
|||
// TOMAS is licensed under the MPL 2.0 license.
|
||||
// See the LICENSE file in the project root for more information.
|
||||
namespace Tomas.Common
|
||||
{
|
||||
public struct OSConsts
|
||||
{
|
||||
/// <summary>
|
||||
/// Name of the operating system
|
||||
/// </summary>
|
||||
public const string Name = "TOMAS";
|
||||
}
|
||||
}
|
87
src/Tomas.Common/Terminal.cs
Normal file
87
src/Tomas.Common/Terminal.cs
Normal file
|
@ -0,0 +1,87 @@
|
|||
// TOMAS is licensed under the MPL 2.0 license.
|
||||
// See the LICENSE file in the project root for more information.
|
||||
using System;
|
||||
|
||||
namespace Tomas.Common
|
||||
{
|
||||
public class Terminal
|
||||
{
|
||||
const char SYMBOL = '$';
|
||||
|
||||
public static bool IsCancelKey
|
||||
{
|
||||
get
|
||||
{
|
||||
var keys = Console.ReadKey();
|
||||
if (keys.Modifiers == ConsoleModifiers.Control &&
|
||||
keys.Key == ConsoleKey.C)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public static bool IsHelpKey
|
||||
{
|
||||
get
|
||||
{
|
||||
var keys = Console.ReadKey();
|
||||
if (keys.Modifiers == ConsoleModifiers.Control &&
|
||||
keys.Key == ConsoleKey.H)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public static bool IsEscapeKey
|
||||
{
|
||||
get
|
||||
{
|
||||
if (Console.ReadKey().Key == ConsoleKey.Escape)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
static void Commands(string command)
|
||||
{
|
||||
switch (command)
|
||||
{
|
||||
case "fensay":
|
||||
Console.WriteLine(EasterEggs.FenSay);
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Same as Console.ReadLine() but adds a shell command symbol
|
||||
/// before the input.
|
||||
/// </summary>
|
||||
/// <returns>user's input</returns>
|
||||
public static string ReadLine()
|
||||
{
|
||||
|
||||
Console.Write(SYMBOL);
|
||||
var readl = Console.ReadLine();
|
||||
Commands(readl);
|
||||
return readl;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Provides a message to the user above the shell command symbol.
|
||||
/// </summary>
|
||||
/// <param name="message"></param>
|
||||
/// <returns>user's input</returns>
|
||||
public static string ReadLine(string message)
|
||||
{
|
||||
Console.WriteLine(message);
|
||||
Console.Write(SYMBOL);
|
||||
var readl = Console.ReadLine();
|
||||
Commands(readl);
|
||||
return readl;
|
||||
}
|
||||
}
|
||||
}
|
7
src/Tomas.Common/Tomas.Common.csproj
Normal file
7
src/Tomas.Common/Tomas.Common.csproj
Normal file
|
@ -0,0 +1,7 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>netstandard2.0</TargetFramework>
|
||||
</PropertyGroup>
|
||||
|
||||
</Project>
|
40
src/Tomas.Kernel/Kernel.cs
Normal file
40
src/Tomas.Kernel/Kernel.cs
Normal file
|
@ -0,0 +1,40 @@
|
|||
// TOMAS is licensed under the MPL 2.0 license.
|
||||
// See the LICENSE file in the project root for more information.
|
||||
using System;
|
||||
using Tomas.Common;
|
||||
using Tomas.Kernel.Programs;
|
||||
using Sys = Cosmos.System;
|
||||
|
||||
namespace Tomas.Kernel
|
||||
{
|
||||
public class Kernel : Sys.Kernel
|
||||
{
|
||||
public bool InApp { get; set; }
|
||||
|
||||
protected override void BeforeRun()
|
||||
{
|
||||
Console.WriteLine($"{OSConsts.Name} booted successfully. Type a line of text to get it echoed back.");
|
||||
}
|
||||
|
||||
protected override void Run()
|
||||
{
|
||||
var input = Terminal.ReadLine("1) Basic App");
|
||||
|
||||
switch (input.ToLowerInvariant())
|
||||
{
|
||||
case "1":
|
||||
var basic = new BasicApp(this);
|
||||
basic.Start();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
protected override void AfterRun()
|
||||
{
|
||||
if (!InApp)
|
||||
Console.WriteLine($"{OSConsts.Name} is shutting down.");
|
||||
}
|
||||
}
|
||||
}
|
28
src/Tomas.Kernel/Programs/App.cs
Normal file
28
src/Tomas.Kernel/Programs/App.cs
Normal file
|
@ -0,0 +1,28 @@
|
|||
// TOMAS is licensed under the MPL 2.0 license.
|
||||
// See the LICENSE file in the project root for more information.
|
||||
|
||||
namespace Tomas.Kernel.Programs
|
||||
{
|
||||
/// <summary>
|
||||
/// Basic framework for building terminal applications.
|
||||
/// </summary>
|
||||
public abstract class App
|
||||
{
|
||||
protected App(Kernel system)
|
||||
{
|
||||
System = system;
|
||||
}
|
||||
|
||||
Kernel System { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Main entry point of the program
|
||||
/// </summary>
|
||||
public virtual void Start()
|
||||
{
|
||||
System.InApp = true;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
15
src/Tomas.Kernel/Programs/BasicApp.cs
Normal file
15
src/Tomas.Kernel/Programs/BasicApp.cs
Normal file
|
@ -0,0 +1,15 @@
|
|||
// TOMAS is licensed under the MPL 2.0 license.
|
||||
// See the LICENSE file in the project root for more information.
|
||||
|
||||
namespace Tomas.Kernel.Programs
|
||||
{
|
||||
public class BasicApp : App
|
||||
{
|
||||
public BasicApp(Kernel system) : base(system) { }
|
||||
|
||||
public override void Start()
|
||||
{
|
||||
base.Start();
|
||||
}
|
||||
}
|
||||
}
|
38
src/Tomas.Kernel/Tomas.Kernel.csproj
Normal file
38
src/Tomas.Kernel/Tomas.Kernel.csproj
Normal file
|
@ -0,0 +1,38 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>netcoreapp2.0</TargetFramework>
|
||||
<RuntimeIdentifier>cosmos</RuntimeIdentifier>
|
||||
<SelfContained>True</SelfContained>
|
||||
<BinFormat>ELF</BinFormat>
|
||||
<StackCorruptionDetectionEnabled>True</StackCorruptionDetectionEnabled>
|
||||
<StackCorruptionDetectionLevel>MethodFooters</StackCorruptionDetectionLevel>
|
||||
<Deployment>ISO</Deployment>
|
||||
<DebugEnabled>True</DebugEnabled>
|
||||
<DebugMode>Source</DebugMode>
|
||||
<IgnoreDebugStubAttribute>False</IgnoreDebugStubAttribute>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup>
|
||||
<EnableGDB>False</EnableGDB>
|
||||
<StartCosmosGDB>False</StartCosmosGDB>
|
||||
<VisualStudioDebugPort>Pipe: Cosmos\Serial</VisualStudioDebugPort>
|
||||
<CosmosDebugPort>Serial: COM1</CosmosDebugPort>
|
||||
<Launch>VMware</Launch>
|
||||
<Profile>VMware</Profile>
|
||||
<Description>Use VMware Player or Workstation to deploy and debug.</Description>
|
||||
<PxeInterface>192.168.0.8</PxeInterface>
|
||||
<AssemblyName>Tomas</AssemblyName>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Cosmos.Build" Version="0-*" NoWarn="NU1604" />
|
||||
<PackageReference Include="Cosmos.Debug.Kernel" Version="0-*" NoWarn="NU1604" />
|
||||
<PackageReference Include="Cosmos.System2" Version="0-*" NoWarn="NU1604" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Tomas.Common\Tomas.Common.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
Loading…
Add table
Add a link
Reference in a new issue