mirror of
https://github.com/danbulant/Cosmos
synced 2026-05-22 22:09:12 +00:00
Added the concept of Encoding to the Console for now ASCII (default) and CP437 are supported (for others as CP858 I think it is needed to change font too)
- moved EncodingTest on Text subdir - added ConsoleTest (not enabled by default) - removed ASCIIEncodingImpl (it was not needed) - Made plugs of Console better and added plugs for formatted versions - Removed code to test Hashtable, Hashtable it will be a separate PR
This commit is contained in:
parent
c50b581d91
commit
4a990ac2af
23 changed files with 563 additions and 1254 deletions
11
Test.sln
11
Test.sln
|
|
@ -160,6 +160,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Cosmos.Compiler.Tests.TypeS
|
|||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Cosmos.Kernel.Tests.Fat2", "Tests\Cosmos.Kernel.Tests.Fat2\Cosmos.Kernel.Tests.Fat2.csproj", "{D4B1618A-3653-43CD-B617-20482B12712B}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ConsoleTest", "Tests\ConsoleTest\ConsoleTest.csproj", "{7A06CD95-A1D3-4989-A9F2-4088C27F8752}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
|
|
@ -609,6 +611,14 @@ Global
|
|||
{D4B1618A-3653-43CD-B617-20482B12712B}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{D4B1618A-3653-43CD-B617-20482B12712B}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{D4B1618A-3653-43CD-B617-20482B12712B}.Release|x86.Build.0 = Release|Any CPU
|
||||
{7A06CD95-A1D3-4989-A9F2-4088C27F8752}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{7A06CD95-A1D3-4989-A9F2-4088C27F8752}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{7A06CD95-A1D3-4989-A9F2-4088C27F8752}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{7A06CD95-A1D3-4989-A9F2-4088C27F8752}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{7A06CD95-A1D3-4989-A9F2-4088C27F8752}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{7A06CD95-A1D3-4989-A9F2-4088C27F8752}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{7A06CD95-A1D3-4989-A9F2-4088C27F8752}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{7A06CD95-A1D3-4989-A9F2-4088C27F8752}.Release|x86.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
|
|
@ -685,6 +695,7 @@ Global
|
|||
{D0EABA08-88C9-4F7C-BCA9-361B58B20D67} = {E9CD521E-C386-466D-B5F7-A5EB19A61625}
|
||||
{D21A7C6C-A696-4EC3-84EB-70700C1E3B34} = {ECEA7778-E786-4317-90B9-A2D4427CB91C}
|
||||
{D4B1618A-3653-43CD-B617-20482B12712B} = {29EEC029-6A2B-478A-B6E5-D63A91388ABA}
|
||||
{7A06CD95-A1D3-4989-A9F2-4088C27F8752} = {ECEA7778-E786-4317-90B9-A2D4427CB91C}
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {4418C803-277E-448F-A0A0-52788FA215AD}
|
||||
|
|
|
|||
60
Tests/ConsoleTest/ConsoleTest.Cosmos
Normal file
60
Tests/ConsoleTest/ConsoleTest.Cosmos
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>{9246ba1f-fbdb-4b09-806a-7968bf4d3eb9}</ProjectGuid>
|
||||
<EnableUnmanagedDebugging>false</EnableUnmanagedDebugging>
|
||||
<Name>ConsoleTestBoot</Name>
|
||||
<BinFormat>elf</BinFormat>
|
||||
<TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
|
||||
<TargetFrameworkProfile />
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
|
||||
<Profile>VMware</Profile>
|
||||
<DebugEnabled>true</DebugEnabled>
|
||||
<DebugMode>Source</DebugMode>
|
||||
<TraceMode>User</TraceMode>
|
||||
<EnableGDB>False</EnableGDB>
|
||||
<StartCosmosGDB>false</StartCosmosGDB>
|
||||
<VMWareEdition>Player</VMWareEdition>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<Name>ConsoleTestBoot</Name>
|
||||
<Description>Use VMware Player or Workstation to deploy and debug.</Description>
|
||||
<Deployment>ISO</Deployment>
|
||||
<Launch>VMware</Launch>
|
||||
<VisualStudioDebugPort>Pipe: Cosmos\Serial</VisualStudioDebugPort>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\source\Cosmos.HAL\Cosmos.HAL.csproj">
|
||||
<Name>Cosmos.HAL</Name>
|
||||
<Project>{6a991d03-1435-4005-9809-b8bacdf3b021}</Project>
|
||||
<Private>True</Private>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\..\source\Cosmos.System\Cosmos.System.csproj">
|
||||
<Name>Cosmos.System</Name>
|
||||
<Project>{3def0461-08ab-471a-8f03-a9c556652a0f}</Project>
|
||||
<Private>True</Private>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\Cosmos.TestRunner.Core\Cosmos.TestRunner.Core.csproj">
|
||||
<Name>Cosmos.TestRunner.Core</Name>
|
||||
<Project>{758faf24-9974-4db8-82ef-1b64daf2f0bc}</Project>
|
||||
<Private>True</Private>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include=".\ConsoleTest.csproj">
|
||||
<Name>ConsoleTest</Name>
|
||||
<Project>{fb23bd72-aec3-485e-b86c-8e7db0b3bb9b}</Project>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="Cosmos.Core_Plugs, Version=1.0.0.0, Culture=neutral, PublicKeyToken=5ae71220097cb983" />
|
||||
<Reference Include="Cosmos.System_Plugs, Version=1.0.0.0, Culture=neutral, PublicKeyToken=5ae71220097cb983" />
|
||||
<Reference Include="Cosmos.Debug.Kernel.Plugs, Version=1.0.0.0, Culture=neutral, PublicKeyToken=5ae71220097cb983" />
|
||||
</ItemGroup>
|
||||
<!--<ItemGroup>
|
||||
<Content Include="Cosmos.bxrc">
|
||||
<SubType>Content</SubType>
|
||||
</Content>
|
||||
</ItemGroup>-->
|
||||
<Import Project="$(MSBuildExtensionsPath)\Cosmos\Cosmos.targets" />
|
||||
</Project>
|
||||
17
Tests/ConsoleTest/ConsoleTest.csproj
Normal file
17
Tests/ConsoleTest/ConsoleTest.csproj
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>netstandard2.0</TargetFramework>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<None Remove="ConsoleTestBoot.Cosmos" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\source\Cosmos.Debug.Kernel\Cosmos.Debug.Kernel.csproj" />
|
||||
<ProjectReference Include="..\..\source\Cosmos.System2\Cosmos.System2.csproj" />
|
||||
<ProjectReference Include="..\Cosmos.TestRunner.TestController\Cosmos.TestRunner.TestController.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
131
Tests/ConsoleTest/Kernel.cs
Normal file
131
Tests/ConsoleTest/Kernel.cs
Normal file
|
|
@ -0,0 +1,131 @@
|
|||
using System;
|
||||
using Sys = Cosmos.System;
|
||||
using Cosmos.TestRunner;
|
||||
using Cosmos.System.Graphics;
|
||||
using System.Text;
|
||||
using Cosmos.System.ExtendedASCII;
|
||||
using Cosmos.System.ScanMaps;
|
||||
|
||||
/*
|
||||
* Please note this is an atypical TestRunner:
|
||||
* - no Assertion can be done
|
||||
* - it cannot be executed automatically
|
||||
*
|
||||
* it exists to make easier tests while changing low level stuff (it would be better and faster to use the Demo kernel but
|
||||
* sometimes it is a problem to make it see modifications done at low level)
|
||||
*
|
||||
* Remember to comment this test again on TestKernelSets.cs when you are ready to merge your modifications!
|
||||
*/
|
||||
namespace ConsoleTest
|
||||
{
|
||||
public class Kernel : Sys.Kernel
|
||||
{
|
||||
protected override void BeforeRun()
|
||||
{
|
||||
Console.WriteLine("Cosmos booted successfully. Let's Test Console!");
|
||||
|
||||
/* This is needed to enable the Codepage based Encodings */
|
||||
Encoding.RegisterProvider(CosmosEncodingProvider.Instance);
|
||||
}
|
||||
|
||||
protected override void Run()
|
||||
{
|
||||
try
|
||||
{
|
||||
Console.Clear();
|
||||
|
||||
Console.WriteLine("Testing Console Enconding");
|
||||
|
||||
Console.WriteLine($"ConsoleInputEncoding {Console.InputEncoding.BodyName}");
|
||||
|
||||
Console.WriteLine($"ConsoleOutputEncoding {Console.OutputEncoding.BodyName}");
|
||||
|
||||
/* Let's change it in the legacy IBM437 encoding */
|
||||
Console.InputEncoding = Encoding.GetEncoding(437);
|
||||
Console.OutputEncoding = Encoding.GetEncoding(437);
|
||||
|
||||
Console.WriteLine($"ConsoleInputEncoding in now {Console.InputEncoding.BodyName}");
|
||||
Console.WriteLine($"ConsoleOutputEncoding in now {Console.OutputEncoding.BodyName}");
|
||||
|
||||
Console.WriteLine("Let's write some accented characters: èòàùì");
|
||||
Console.WriteLine("Let's print all the CP437 codepage");
|
||||
|
||||
Sys.Global.mDebugger.SendInternal("");
|
||||
|
||||
Console.Write("Ç ü é â ä à å ç ê ë è ï î ì Ä Å\n" +
|
||||
"É æ Æ ô ö ò û ù ÿ Ö Ü ¢ £ ¥ ₧ ƒ\n" +
|
||||
"á í ó ú ñ Ñ ª º ¿ ⌐ ¬ ½ ¼ ¡ « »\n" +
|
||||
"░ ▒ ▓ │ ┤ ╡ ╢ ╖ ╕ ╣ ║ ╗ ╝ ╜ ╛ ┐\n" +
|
||||
"└ ┴ ┬ ├ ─ ┼ ╞ ╟ ╚ ╔ ╩ ╦ ╠ ═ ╬ ╧\n" +
|
||||
"╨ ╤ ╥ ╙ ╘ ╒ ╓ ╫ ╪ ┘ ┌ █ ▄ ▌ ▐ ▀\n" +
|
||||
"α ß Γ π Σ σ µ τ Φ Θ Ω δ ∞ φ ε ∩\n" +
|
||||
"≡ ± ≥ ≤ ⌠ ⌡ ÷ ≈ ° ∙ · √ ⁿ ² ■ \u00A0\n");
|
||||
//Console.WriteLine();
|
||||
|
||||
Console.WriteLine("The following line should appear as a continuos line of '─'");
|
||||
Console.WriteLine("──────────────────────────────────────────────────────────");
|
||||
|
||||
Console.ReadKey();
|
||||
Console.WriteLine("The next line should be empty");
|
||||
Console.WriteLine();
|
||||
Console.WriteLine("True follows...");
|
||||
Console.WriteLine(true);
|
||||
Console.WriteLine("The letter 'A'");
|
||||
Console.WriteLine('A');
|
||||
char[] charBuffer = new char[] { 'A', 'B', 'C' };
|
||||
Console.WriteLine("Then ABC");
|
||||
Console.WriteLine(charBuffer);
|
||||
Console.WriteLine("...42.42");
|
||||
Console.WriteLine(42.42);
|
||||
Console.WriteLine("...42.42 (float)");
|
||||
Console.WriteLine(42.42f);
|
||||
Console.WriteLine("...42");
|
||||
Console.WriteLine(42);
|
||||
Console.WriteLine("...42 (long)");
|
||||
Console.WriteLine(42L);
|
||||
Console.ReadKey();
|
||||
object test = "Test";
|
||||
Console.WriteLine("...Test (as object)");
|
||||
Console.WriteLine(test);
|
||||
Console.WriteLine("The next line should be empty (null object)");
|
||||
object s = null;
|
||||
Console.WriteLine(s);
|
||||
Console.WriteLine("...42 (uint)");
|
||||
Console.WriteLine(42U);
|
||||
Console.WriteLine("...42 (ulong)");
|
||||
Console.WriteLine(42UL);
|
||||
Console.WriteLine("...BC");
|
||||
Console.WriteLine(charBuffer, 1, 2);
|
||||
|
||||
Console.WriteLine("Test Format arg0 {0}", "test");
|
||||
Console.WriteLine("Test Format arg0 {0} arg1 {1}", "test", 42);
|
||||
Console.WriteLine("Test Format arg0 {0} arg1 {1} arg2 {2}", "test", 42, 69.69);
|
||||
Console.WriteLine("Test Format arg0 {0} arg1 {1} arg2 {2} arg3 {3}", "test", 42, 69.69, 25000L);
|
||||
/* String.Format does not support x or X and probably neither the rest of "special" formatting */
|
||||
//Console.WriteLine("Test Format (hex) {0:x}", 42);
|
||||
|
||||
Console.WriteLine("Layout switched to DE...");
|
||||
SetKeyboardScanMap(new DE_Standard());
|
||||
Console.WriteLine("Write in germanic now I'll read it with Console.ReadLine()...");
|
||||
|
||||
var str = Console.ReadLine();
|
||||
Console.WriteLine($"You have written: {str}");
|
||||
|
||||
Console.WriteLine("Write in germanic now I'll read it with Console.ReadKey()...");
|
||||
var character = Console.ReadKey();
|
||||
Console.WriteLine($"You have written: {character.KeyChar}");
|
||||
|
||||
Console.WriteLine("Press any key to terminate this test...");
|
||||
|
||||
Console.ReadKey();
|
||||
TestController.Completed();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
mDebugger.Send("Exception occurred: " + e.Message);
|
||||
mDebugger.Send(e.Message);
|
||||
TestController.Failed();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -5,7 +5,6 @@ using Cosmos.TestRunner;
|
|||
using Sys = Cosmos.System;
|
||||
using Cosmos.Compiler.Tests.Bcl.System;
|
||||
using Cosmos.Compiler.Tests.Bcl.System.Collections.Generic;
|
||||
using Cosmos.Compiler.Tests.Bcl.System.Collections.Not_Generic;
|
||||
|
||||
namespace Cosmos.Compiler.Tests.Bcl
|
||||
{
|
||||
|
|
@ -51,7 +50,6 @@ namespace Cosmos.Compiler.Tests.Bcl
|
|||
ListTest.Execute();
|
||||
QueueTest.Execute();
|
||||
//DictionaryTest.Execute();
|
||||
HashtableTest.Execute();
|
||||
|
||||
TestController.Completed();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,24 +0,0 @@
|
|||
using System;
|
||||
using System.Collections;
|
||||
using Cosmos.TestRunner;
|
||||
using Cosmos.Compiler.Tests.Bcl.Helper;
|
||||
using Cosmos.Debug.Kernel;
|
||||
|
||||
namespace Cosmos.Compiler.Tests.Bcl.System.Collections.Not_Generic
|
||||
{
|
||||
class HashtableTest
|
||||
{
|
||||
public static void Execute()
|
||||
{
|
||||
var h = new Hashtable();
|
||||
h.Add(42, "Test");
|
||||
|
||||
Assert.IsTrue(h.ContainsKey(42), "Hashtable.ContainsKey() failed: existing key not found");
|
||||
Assert.IsFalse(h.ContainsKey(24), "Hashtable.ContainsKey() failed: not existing key not found");
|
||||
|
||||
/* This really requires Thread.Sleep() to work? */
|
||||
//Assert.IsTrue((string)h[42] == "Test", "Hashtable indexer not working");
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,369 +0,0 @@
|
|||
#define COSMOSDEBUG
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using Cosmos.TestRunner;
|
||||
using Cosmos.Compiler.Tests.Bcl.Helper;
|
||||
using Cosmos.Debug.Kernel;
|
||||
using Cosmos.System.ExtendedASCII;
|
||||
|
||||
namespace Cosmos.Compiler.Tests.Bcl.System
|
||||
{
|
||||
class EncodingTest
|
||||
{
|
||||
static Debugger mDebugger = new Debugger("System", "Enconding Test");
|
||||
|
||||
static byte[] UTF8EnglishText = new byte[] { 0x43, 0x6F, 0x73, 0x6D, 0x6F, 0x73, 0x20, 0x69, 0x73, 0x20,
|
||||
0x77, 0x6F, 0x6E, 0x64, 0x65, 0x72, 0x66, 0x75, 0x6C, 0x21 };
|
||||
static byte[] UTF8ItalianText = new byte[] { 0x43, 0x6F, 0x73, 0x6D, 0x6F, 0x73, 0x20, 0xC3, 0xA8, 0x20,
|
||||
0x66, 0x61, 0x6E, 0x74, 0x61, 0x73, 0x74, 0x69, 0x63, 0x6F,
|
||||
0x21 };
|
||||
static byte[] UTF8SpanishText = new byte[] { 0x43, 0x6F, 0x73, 0x6D, 0x6F, 0x73, 0x20, 0x65, 0x73, 0x20,
|
||||
0x67, 0x65, 0x6E, 0x69, 0x61, 0x6C, 0x21 };
|
||||
static byte[] UTF8GermanicText = new byte[] { 0x43, 0x6F, 0x73, 0x6D, 0x6F, 0x73, 0x20, 0x69, 0x73, 0x74,
|
||||
0x20, 0x67, 0x72, 0x6F, 0xC3, 0x9F, 0x61, 0x72, 0x74, 0x69,
|
||||
0x67, 0x21 };
|
||||
static byte[] UTF8GreekText = new byte[] { 0x43, 0x6F, 0x73, 0x6D, 0x6F, 0x73, 0x20, 0xCE, 0xB5, 0xCE,
|
||||
0xAF, 0xCE, 0xBD, 0xCE, 0xB1, 0xCE, 0xB9, 0x20, 0xCF, 0x85,
|
||||
0xCF, 0x80, 0xCE, 0xAD, 0xCF, 0x81, 0xCE, 0xBF, 0xCF, 0x87,
|
||||
0xCE, 0xBF, 0xCF, 0x82, 0x21 };
|
||||
static byte[] UTF8JapanaseText = new byte[] { 0x43, 0x6F, 0x73, 0x6D, 0x6F, 0x73, 0x20, 0xE7, 0xB4, 0xA0,
|
||||
0xE6, 0x99, 0xB4, 0xE3, 0x82, 0x89, 0xE3, 0x81, 0x97, 0xE3,
|
||||
0x81, 0x84, 0xE3, 0x81, 0xA7, 0xE3, 0x81, 0x99, 0x21 };
|
||||
static byte[] UTF8GothicText = new byte[] { 0xF0, 0x90, 0x8D, 0x88 };
|
||||
static byte[] CP437EnglishText = new byte[] { 0x43, 0x6F, 0x73, 0x6D, 0x6F, 0x73, 0x20, 0x69, 0x73, 0x20,
|
||||
0x77, 0x6F, 0x6E, 0x64, 0x65, 0x72, 0x66, 0x75, 0x6C, 0x21 };
|
||||
static byte[] CP437ItalianText = new byte[] { 0x43, 0x6F, 0x73, 0x6D, 0x6F, 0x73, 0x20, 0x8A, 0x20, 0x66,
|
||||
0x61, 0x6E, 0x74, 0x61, 0x73, 0x74, 0x69, 0x63, 0x6F, 0x21 };
|
||||
|
||||
static byte[] CP437SpanishText = new byte[] { 0x43, 0x6F, 0x73, 0x6D, 0x6F, 0x73, 0x20, 0x65, 0x73, 0x20,
|
||||
0x67, 0x65, 0x6E, 0x69, 0x61, 0x6C, 0x21 };
|
||||
|
||||
static byte[] CP437GermanicText = new byte[] { 0x43, 0x6F, 0x73, 0x6D, 0x6F, 0x73, 0x20, 0x69, 0x73, 0x74, 0x20,
|
||||
0x67, 0x72, 0x6F, 0xE1, 0x61, 0x72, 0x74, 0x69, 0x67, 0x21 };
|
||||
static byte[] CP437GreekText = new byte[] { 0x43, 0x6F, 0x73, 0x6D, 0x6F, 0x73, 0x20, 0xEE, 0x3F, 0x3F, 0xE0,
|
||||
0x3F, 0x20, 0x3F, 0xE3, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x21 };
|
||||
static byte[] CP437JapanaseText = new byte[] { 0x43, 0x6F, 0x73, 0x6D, 0x6F, 0x73, 0x20, 0x3F, 0x3F, 0x3F, 0x3F,
|
||||
0x3F, 0x3F, 0x3F, 0x21 };
|
||||
static byte[] CP437GothicText = new byte[] { 0x3F, 0x3F };
|
||||
static byte[] CP858EnglishText = CP437EnglishText;
|
||||
static byte[] CP858ItalianText = CP437ItalianText;
|
||||
static byte[] CP858SpanishText = CP437SpanishText;
|
||||
static byte[] CP858GermanicText = CP437GermanicText;
|
||||
/* CP858 has no Greek characters they are all replaced by '?' (0x3F) */
|
||||
static byte[] CP858GreekText = new byte[] { 0x43, 0x6F, 0x73, 0x6D, 0x6F, 0x73, 0x20, 0x3F, 0x3F, 0x3F, 0x3F,
|
||||
0x3F, 0x20, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x21 };
|
||||
static byte[] CP858JapanaseText = CP437JapanaseText;
|
||||
static byte[] CP858GothicText = CP437GothicText;
|
||||
|
||||
static void TestGetBytes(Encoding xEncoding, string text, byte[] expectedResult, string desc)
|
||||
{
|
||||
byte[] result;
|
||||
|
||||
result = xEncoding.GetBytes(text);
|
||||
Assert.IsTrue(EqualityHelper.ByteArrayAreEquals(result, expectedResult), $"{xEncoding.BodyName} Encoding of {desc} text failed byte arrays different");
|
||||
}
|
||||
|
||||
|
||||
static void TestGetString(Encoding xEncoding, byte[] bytes, string expectedText, string desc)
|
||||
{
|
||||
string text;
|
||||
|
||||
text = xEncoding.GetString(bytes);
|
||||
Assert.IsTrue((text == expectedText), $"{xEncoding.BodyName} Decoding of {desc} text failed strings different");
|
||||
}
|
||||
|
||||
static void TestUTF8()
|
||||
{
|
||||
//Encoding xEncoding = new UTF8Encoding();
|
||||
Encoding xEncoding = Encoding.UTF8;
|
||||
mDebugger.SendInternal($"Starting Test {xEncoding.BodyName} Encoding / Decoding");
|
||||
|
||||
Assert.IsTrue(xEncoding.BodyName == "UTF-8", "UTF8 BodyName failed not 'UTF-8");
|
||||
Assert.IsTrue(xEncoding.IsSingleByte == false, "UTF8.IsSingleByte failed: it returns true");
|
||||
|
||||
TestGetBytes(xEncoding, "Cosmos is wonderful!", UTF8EnglishText, "English");
|
||||
TestGetBytes(xEncoding, "Cosmos è fantastico!", UTF8ItalianText, "Italian");
|
||||
TestGetBytes(xEncoding, "Cosmos es genial!", UTF8SpanishText, "Spanish");
|
||||
TestGetBytes(xEncoding, "Cosmos ist großartig!", UTF8GermanicText, "Germanic");
|
||||
TestGetBytes(xEncoding, "Cosmos είναι υπέροχος!", UTF8GreekText, "Greek");
|
||||
TestGetBytes(xEncoding, "Cosmos 素晴らしいです!", UTF8JapanaseText, "Japanese");
|
||||
TestGetBytes(xEncoding, "𐍈", UTF8GothicText, "Gothic");
|
||||
|
||||
TestGetString(xEncoding, UTF8EnglishText, "Cosmos is wonderful!", "English");
|
||||
TestGetString(xEncoding, UTF8ItalianText, "Cosmos è fantastico!", "Italian");
|
||||
TestGetString(xEncoding, UTF8SpanishText, "Cosmos es genial!", "Spanish");
|
||||
TestGetString(xEncoding, UTF8GermanicText, "Cosmos ist großartig!", "Germanic");
|
||||
/* CP437 replaces not representable characters with '?' */
|
||||
TestGetString(xEncoding, UTF8GreekText, "Cosmos είναι υπέροχος!", "Greek");
|
||||
TestGetString(xEncoding, UTF8JapanaseText, "Cosmos 素晴らしいです!", "Japanese");
|
||||
TestGetString(xEncoding, UTF8GothicText, "𐍈", "Gothic");
|
||||
|
||||
mDebugger.SendInternal($"Finished Test {xEncoding.BodyName} Encoding / Decoding");
|
||||
}
|
||||
|
||||
static void TestCP437()
|
||||
{
|
||||
Encoding xEncoding = Encoding.GetEncoding(437);
|
||||
|
||||
mDebugger.SendInternal($"Starting Test {xEncoding.BodyName} Encoding / Decoding");
|
||||
|
||||
Assert.IsTrue(xEncoding.BodyName == "IBM437", "437 BodyName failed not 'IBM437");
|
||||
Assert.IsTrue(xEncoding.IsSingleByte == true, "437.IsSingleByte failed: it returns false");
|
||||
|
||||
TestGetBytes(xEncoding, "Cosmos is wonderful!", CP437EnglishText, "English");
|
||||
TestGetBytes(xEncoding, "Cosmos è fantastico!", CP437ItalianText, "Italian");
|
||||
TestGetBytes(xEncoding, "Cosmos es genial!", CP437SpanishText, "Spanish");
|
||||
TestGetBytes(xEncoding, "Cosmos ist großartig!", CP437GermanicText, "Germanic");
|
||||
/*
|
||||
* From this point on a lot of characters will be replaced by 0x3F ('?') because
|
||||
* cannot really represented on CP437
|
||||
*/
|
||||
TestGetBytes(xEncoding, "Cosmos είναι υπέροχος!", CP437GreekText, "Greek");
|
||||
TestGetBytes(xEncoding, "Cosmos 素晴らしいです!", CP437JapanaseText, "Japanese");
|
||||
TestGetBytes(xEncoding, "𐍈", CP437GothicText, "Gothic");
|
||||
|
||||
TestGetString(xEncoding, CP437EnglishText, "Cosmos is wonderful!", "English");
|
||||
TestGetString(xEncoding, CP437ItalianText, "Cosmos è fantastico!", "Italian");
|
||||
TestGetString(xEncoding, CP437SpanishText, "Cosmos es genial!", "Spanish");
|
||||
TestGetString(xEncoding, CP437GermanicText, "Cosmos ist großartig!", "Germanic");
|
||||
/* CP437 replaces not representable characters with '?' */
|
||||
TestGetString(xEncoding, CP437GreekText, "Cosmos ε??α? ?π??????!", "Greek");
|
||||
TestGetString(xEncoding, CP437JapanaseText, "Cosmos ???????!", "Japanese");
|
||||
TestGetString(xEncoding, CP437GothicText, "??", "Gothic");
|
||||
|
||||
mDebugger.SendInternal("Finished Test {xEncoding.BodyName} Encoding / Decoding");
|
||||
}
|
||||
|
||||
static void TestCP858()
|
||||
{
|
||||
Encoding xEncoding = Encoding.GetEncoding(858);
|
||||
|
||||
mDebugger.SendInternal($"Starting Test {xEncoding.BodyName} Encoding / Decoding");
|
||||
|
||||
Assert.IsTrue(xEncoding.BodyName == "IBM00858", "858 BodyName failed not 'IBM00858");
|
||||
Assert.IsTrue(xEncoding.IsSingleByte == true, "858.IsSingleByte failed: it returns false");
|
||||
|
||||
TestGetBytes(xEncoding, "Cosmos is wonderful!", CP858EnglishText, "English");
|
||||
TestGetBytes(xEncoding, "Cosmos è fantastico!", CP858ItalianText, "Italian");
|
||||
TestGetBytes(xEncoding, "Cosmos es genial!", CP858SpanishText, "Spanish");
|
||||
TestGetBytes(xEncoding, "Cosmos ist großartig!", CP858GermanicText, "Germanic");
|
||||
/*
|
||||
* From this point on a lot of characters will be replaced by 0x3F ('?') because
|
||||
* cannot really represented on CP858
|
||||
*/
|
||||
TestGetBytes(xEncoding, "Cosmos είναι υπέροχος!", CP858GreekText, "Greek");
|
||||
TestGetBytes(xEncoding, "Cosmos 素晴らしいです!", CP858JapanaseText, "Japanese");
|
||||
TestGetBytes(xEncoding, "𐍈", CP858GothicText, "Gothic");
|
||||
|
||||
TestGetString(xEncoding, CP858EnglishText, "Cosmos is wonderful!", "English");
|
||||
TestGetString(xEncoding, CP858ItalianText, "Cosmos è fantastico!", "Italian");
|
||||
TestGetString(xEncoding, CP858SpanishText, "Cosmos es genial!", "Spanish");
|
||||
TestGetString(xEncoding, CP858GermanicText, "Cosmos ist großartig!", "Germanic");
|
||||
/* CP858 replaces not representable characters with '?' */
|
||||
TestGetString(xEncoding, CP858GreekText, "Cosmos ????? ????????!", "Greek");
|
||||
TestGetString(xEncoding, CP858JapanaseText, "Cosmos ???????!", "Japanese");
|
||||
TestGetString(xEncoding, CP858GothicText, "??", "Gothic");
|
||||
|
||||
mDebugger.SendInternal("Finished Test CP858 Encoding / Decoding");
|
||||
}
|
||||
|
||||
#if true
|
||||
public static void Execute()
|
||||
{
|
||||
/*
|
||||
* Net Core has removed all the legacy codepages from Encoding, only Unicode and ASCII are supported
|
||||
* the correct way to add them is to create an Encoding Provider.
|
||||
* Microsoft has created a CodePageEncodingProvider for this but it is too much complex to use it in
|
||||
* Cosmos now, but we should use surely this in future.
|
||||
* As a replacement for it I have created CosmosEncodingProvider that is more simple (but less efficient).
|
||||
*/
|
||||
Encoding.RegisterProvider(CosmosEncodingProvider.Instance);
|
||||
|
||||
TestUTF8();
|
||||
// TestAscii();
|
||||
|
||||
TestCP437();
|
||||
TestCP858();
|
||||
}
|
||||
#endif
|
||||
|
||||
#if false
|
||||
public static void Execute()
|
||||
{
|
||||
/*
|
||||
* Net Core has removed all the legacy codepages from Encoding, only Unicode and ASCII are supported
|
||||
* the correct way to add them is to create an Encoding Provider.
|
||||
* Microsoft has created a CodePageEncodingProvider for this but it is too much complex to use it in
|
||||
* Cosmos now, but we should use surely this in future.
|
||||
* As a replacement for it I have created CosmosEncodingProvider that is more simple (but less efficient).
|
||||
*/
|
||||
Encoding.RegisterProvider(CosmosEncodingProvider.Instance);
|
||||
|
||||
Encoding xEncoding = new UTF8Encoding();
|
||||
string text;
|
||||
byte[] result;
|
||||
byte[] expectedResult;
|
||||
|
||||
Assert.IsTrue(!xEncoding.IsSingleByte, "IsSingleByte failed return true for UTF8");
|
||||
|
||||
#if true
|
||||
mDebugger.SendInternal($"Starting Test {xEncoding.BodyName} Encoding / Decoding");
|
||||
|
||||
text = "Cosmos is wonderful!";
|
||||
result = xEncoding.GetBytes(text);
|
||||
expectedResult = UTF8EnglishText;
|
||||
Assert.IsTrue(EqualityHelper.ByteArrayAreEquals(result, expectedResult), "UTF8 Encoding of English text failed byte arrays different");
|
||||
|
||||
text = "Cosmos è fantastico!";
|
||||
result = xEncoding.GetBytes(text);
|
||||
expectedResult = UTF8ItalianText;
|
||||
Assert.IsTrue(EqualityHelper.ByteArrayAreEquals(result, expectedResult), "UTF8 Encoding of Italian text failed byte arrays different");
|
||||
|
||||
text = "Cosmos es genial!";
|
||||
result = xEncoding.GetBytes(text);
|
||||
expectedResult = UTF8SpanishText;
|
||||
Assert.IsTrue(EqualityHelper.ByteArrayAreEquals(result, expectedResult), "UTF8 Encoding of Spanish text failed byte arrays different");
|
||||
|
||||
text = "Cosmos ist großartig!";
|
||||
result = xEncoding.GetBytes(text);
|
||||
expectedResult = UTF8GermanicText;
|
||||
Assert.IsTrue(EqualityHelper.ByteArrayAreEquals(result, expectedResult), "UTF8 Encoding of Germanic text failed byte arrays different");
|
||||
|
||||
text = "Cosmos είναι υπέροχος!";
|
||||
result = xEncoding.GetBytes(text);
|
||||
expectedResult = UTF8GreekText;
|
||||
Assert.IsTrue(EqualityHelper.ByteArrayAreEquals(result, expectedResult), "UTF8 Encoding of Greek text failed byte arrays different");
|
||||
|
||||
text = "Cosmos 素晴らしいです!";
|
||||
result = xEncoding.GetBytes(text);
|
||||
expectedResult = UTF8JapanaseText;
|
||||
Assert.IsTrue(EqualityHelper.ByteArrayAreEquals(result, expectedResult), "UTF8 Encoding of Japanese text failed byte arrays different");
|
||||
|
||||
/* This the only case on which UFT-16 must use a surrugate pairs... it is a Gothic letter go figure! */
|
||||
text = "𐍈";
|
||||
result = xEncoding.GetBytes(text);
|
||||
expectedResult = UTF8GothicText;
|
||||
Assert.IsTrue(EqualityHelper.ByteArrayAreEquals(result, expectedResult), "UTF8 Encoding of Gothic text failed byte arrays different");
|
||||
|
||||
/* Now we do the other way: we have a UFT8 byte array and try to convert it in a UFT16 String */
|
||||
string expectedText;
|
||||
|
||||
text = xEncoding.GetString(UTF8EnglishText);
|
||||
expectedText = "Cosmos is wonderful!";
|
||||
Assert.IsTrue((text == expectedText), "UTF8 Decoding of English text failed strings different");
|
||||
|
||||
text = xEncoding.GetString(UTF8ItalianText);
|
||||
expectedText = "Cosmos è fantastico!";
|
||||
Assert.IsTrue((text == expectedText), "UTF8 Decoding of Italian text failed strings different");
|
||||
|
||||
text = xEncoding.GetString(UTF8SpanishText);
|
||||
expectedText = "Cosmos es genial!";
|
||||
Assert.IsTrue((text == expectedText), "UTF8 Decoding of Spanish text failed strings different");
|
||||
|
||||
text = xEncoding.GetString(UTF8GermanicText);
|
||||
expectedText = "Cosmos ist großartig!";
|
||||
Assert.IsTrue((text == expectedText), "UTF8 Decoding of Germanic text failed strings different");
|
||||
|
||||
text = xEncoding.GetString(UTF8GreekText);
|
||||
expectedText = "Cosmos είναι υπέροχος!";
|
||||
Assert.IsTrue((text == expectedText), "UTF8 Decoding of Greek text failed strings different");
|
||||
|
||||
text = xEncoding.GetString(UTF8JapanaseText);
|
||||
expectedText = "Cosmos 素晴らしいです!";
|
||||
Assert.IsTrue((text == expectedText), "UTF8 Decoding of Japanese text failed strings different");
|
||||
|
||||
text = xEncoding.GetString(UTF8GothicText);
|
||||
expectedText = "𐍈";
|
||||
Assert.IsTrue((text == expectedText), "UTF8 Decoding of Gothic text failed strings different");
|
||||
|
||||
xEncoding = Encoding.ASCII;
|
||||
|
||||
Assert.IsTrue(xEncoding.IsSingleByte, "IsSingleByte failed return false for ASCII");
|
||||
|
||||
text = "Cosmos is wonderful!";
|
||||
result = xEncoding.GetBytes(text);
|
||||
expectedResult = UTF8EnglishText;
|
||||
Assert.IsTrue(EqualityHelper.ByteArrayAreEquals(result, expectedResult), "Ascii Encoding of English text failed byte arrays different");
|
||||
#endif
|
||||
|
||||
xEncoding = Encoding.GetEncoding(437);
|
||||
var yEncoding = Encoding.GetEncoding("IBM437");
|
||||
|
||||
Assert.IsTrue(xEncoding.CodePage == yEncoding.CodePage, "437 and 'IBM437' not the same Encoding");
|
||||
|
||||
Assert.IsTrue(xEncoding.IsSingleByte, "IsSingleByte failed return false for CP437");
|
||||
|
||||
text = "Cosmos is wonderful!";
|
||||
result = xEncoding.GetBytes(text);
|
||||
expectedResult = CP437EnglishText;
|
||||
Assert.IsTrue(EqualityHelper.ByteArrayAreEquals(result, expectedResult), "CP437 Encoding of English text failed byte arrays different");
|
||||
|
||||
text = "Cosmos è fantastico!";
|
||||
result = xEncoding.GetBytes(text);
|
||||
expectedResult = CP437ItalianText;
|
||||
Assert.IsTrue(EqualityHelper.ByteArrayAreEquals(result, expectedResult), "CP437 Encoding of Italian text failed byte arrays different");
|
||||
|
||||
text = "Cosmos es genial!";
|
||||
result = xEncoding.GetBytes(text);
|
||||
expectedResult = CP437SpanishText;
|
||||
Assert.IsTrue(EqualityHelper.ByteArrayAreEquals(result, expectedResult), "CP437 Encoding of Spanish text failed byte arrays different");
|
||||
|
||||
text = "Cosmos ist großartig!";
|
||||
result = xEncoding.GetBytes(text);
|
||||
expectedResult = CP437GermanicText;
|
||||
Assert.IsTrue(EqualityHelper.ByteArrayAreEquals(result, expectedResult), "CP437 Encoding of Germanic text failed byte arrays different");
|
||||
|
||||
/*
|
||||
* From this point on a lot of characters will be replaced by 0x3F ('?') because
|
||||
* cannot be really represented on CP437
|
||||
*/
|
||||
text = "Cosmos είναι υπέροχος!";
|
||||
result = xEncoding.GetBytes(text);
|
||||
expectedResult = CP437GreekText;
|
||||
Assert.IsTrue(EqualityHelper.ByteArrayAreEquals(result, expectedResult), "CP437 Encoding of Greek text failed byte arrays different");
|
||||
|
||||
text = "Cosmos 素晴らしいです!";
|
||||
result = xEncoding.GetBytes(text);
|
||||
expectedResult = CP437JapanaseText;
|
||||
Assert.IsTrue(EqualityHelper.ByteArrayAreEquals(result, expectedResult), "CP437 Encoding of Japanese text failed byte arrays different");
|
||||
|
||||
text = "𐍈";
|
||||
result = xEncoding.GetBytes(text);
|
||||
expectedResult = CP437GothicText;
|
||||
Assert.IsTrue(EqualityHelper.ByteArrayAreEquals(result, expectedResult), "CP437 Encoding of Gothic text failed byte arrays different");
|
||||
|
||||
//string expectedText;
|
||||
/* Now we do the other way: we have a CP437 byte array and try to convert it in a UFT16 String */
|
||||
text = xEncoding.GetString(CP437EnglishText);
|
||||
expectedText = "Cosmos is wonderful!";
|
||||
Assert.IsTrue((text == expectedText), "CP437 Decoding of English text failed strings different");
|
||||
|
||||
text = xEncoding.GetString(CP437ItalianText);
|
||||
expectedText = "Cosmos è fantastico!";
|
||||
Assert.IsTrue((text == expectedText), "CP437 Decoding of Italian text failed strings different");
|
||||
|
||||
text = xEncoding.GetString(CP437SpanishText);
|
||||
expectedText = "Cosmos es genial!";
|
||||
Assert.IsTrue((text == expectedText), "CP437 Decoding of Spanish text failed strings different");
|
||||
|
||||
text = xEncoding.GetString(CP437GermanicText);
|
||||
expectedText = "Cosmos ist großartig!";
|
||||
Assert.IsTrue((text == expectedText), "CP437 Decoding of Germanic text failed strings different");
|
||||
|
||||
/* CP437 replaces not representable characters with '?' */
|
||||
text = xEncoding.GetString(CP437GreekText);
|
||||
expectedText = "Cosmos ε??α? ?π??????!";
|
||||
Assert.IsTrue((text == expectedText), "CP437 Decoding of Greek text failed strings different");
|
||||
|
||||
text = xEncoding.GetString(CP437JapanaseText);
|
||||
expectedText = "Cosmos ???????!";
|
||||
Assert.IsTrue((text == expectedText), "CP437 Decoding of Japanese text failed strings different");
|
||||
|
||||
text = xEncoding.GetString(CP437GothicText);
|
||||
expectedText = "??";
|
||||
Assert.IsTrue((text == expectedText), "CP437 Decoding of Gothic text failed strings different");
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
192
Tests/Cosmos.Compiler.Tests.Bcl/System/Text/EncodingTest.cs
Normal file
192
Tests/Cosmos.Compiler.Tests.Bcl/System/Text/EncodingTest.cs
Normal file
|
|
@ -0,0 +1,192 @@
|
|||
#define COSMOSDEBUG
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using Cosmos.TestRunner;
|
||||
using Cosmos.Compiler.Tests.Bcl.Helper;
|
||||
using Cosmos.Debug.Kernel;
|
||||
using Cosmos.System.ExtendedASCII;
|
||||
|
||||
namespace Cosmos.Compiler.Tests.Bcl.System
|
||||
{
|
||||
class EncodingTest
|
||||
{
|
||||
static Debugger mDebugger = new Debugger("System", "Enconding Test");
|
||||
|
||||
static byte[] UTF8EnglishText = new byte[] { 0x43, 0x6F, 0x73, 0x6D, 0x6F, 0x73, 0x20, 0x69, 0x73, 0x20,
|
||||
0x77, 0x6F, 0x6E, 0x64, 0x65, 0x72, 0x66, 0x75, 0x6C, 0x21 };
|
||||
static byte[] UTF8ItalianText = new byte[] { 0x43, 0x6F, 0x73, 0x6D, 0x6F, 0x73, 0x20, 0xC3, 0xA8, 0x20,
|
||||
0x66, 0x61, 0x6E, 0x74, 0x61, 0x73, 0x74, 0x69, 0x63, 0x6F,
|
||||
0x21 };
|
||||
static byte[] UTF8SpanishText = new byte[] { 0x43, 0x6F, 0x73, 0x6D, 0x6F, 0x73, 0x20, 0x65, 0x73, 0x20,
|
||||
0x67, 0x65, 0x6E, 0x69, 0x61, 0x6C, 0x21 };
|
||||
static byte[] UTF8GermanicText = new byte[] { 0x43, 0x6F, 0x73, 0x6D, 0x6F, 0x73, 0x20, 0x69, 0x73, 0x74,
|
||||
0x20, 0x67, 0x72, 0x6F, 0xC3, 0x9F, 0x61, 0x72, 0x74, 0x69,
|
||||
0x67, 0x21 };
|
||||
static byte[] UTF8GreekText = new byte[] { 0x43, 0x6F, 0x73, 0x6D, 0x6F, 0x73, 0x20, 0xCE, 0xB5, 0xCE,
|
||||
0xAF, 0xCE, 0xBD, 0xCE, 0xB1, 0xCE, 0xB9, 0x20, 0xCF, 0x85,
|
||||
0xCF, 0x80, 0xCE, 0xAD, 0xCF, 0x81, 0xCE, 0xBF, 0xCF, 0x87,
|
||||
0xCE, 0xBF, 0xCF, 0x82, 0x21 };
|
||||
static byte[] UTF8JapanaseText = new byte[] { 0x43, 0x6F, 0x73, 0x6D, 0x6F, 0x73, 0x20, 0xE7, 0xB4, 0xA0,
|
||||
0xE6, 0x99, 0xB4, 0xE3, 0x82, 0x89, 0xE3, 0x81, 0x97, 0xE3,
|
||||
0x81, 0x84, 0xE3, 0x81, 0xA7, 0xE3, 0x81, 0x99, 0x21 };
|
||||
static byte[] UTF8GothicText = new byte[] { 0xF0, 0x90, 0x8D, 0x88 };
|
||||
static byte[] CP437EnglishText = new byte[] { 0x43, 0x6F, 0x73, 0x6D, 0x6F, 0x73, 0x20, 0x69, 0x73, 0x20,
|
||||
0x77, 0x6F, 0x6E, 0x64, 0x65, 0x72, 0x66, 0x75, 0x6C, 0x21 };
|
||||
static byte[] CP437ItalianText = new byte[] { 0x43, 0x6F, 0x73, 0x6D, 0x6F, 0x73, 0x20, 0x8A, 0x20, 0x66,
|
||||
0x61, 0x6E, 0x74, 0x61, 0x73, 0x74, 0x69, 0x63, 0x6F, 0x21 };
|
||||
|
||||
static byte[] CP437SpanishText = new byte[] { 0x43, 0x6F, 0x73, 0x6D, 0x6F, 0x73, 0x20, 0x65, 0x73, 0x20,
|
||||
0x67, 0x65, 0x6E, 0x69, 0x61, 0x6C, 0x21 };
|
||||
|
||||
static byte[] CP437GermanicText = new byte[] { 0x43, 0x6F, 0x73, 0x6D, 0x6F, 0x73, 0x20, 0x69, 0x73, 0x74, 0x20,
|
||||
0x67, 0x72, 0x6F, 0xE1, 0x61, 0x72, 0x74, 0x69, 0x67, 0x21 };
|
||||
static byte[] CP437GreekText = new byte[] { 0x43, 0x6F, 0x73, 0x6D, 0x6F, 0x73, 0x20, 0xEE, 0x3F, 0x3F, 0xE0,
|
||||
0x3F, 0x20, 0x3F, 0xE3, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x21 };
|
||||
static byte[] CP437JapanaseText = new byte[] { 0x43, 0x6F, 0x73, 0x6D, 0x6F, 0x73, 0x20, 0x3F, 0x3F, 0x3F, 0x3F,
|
||||
0x3F, 0x3F, 0x3F, 0x21 };
|
||||
static byte[] CP437GothicText = new byte[] { 0x3F, 0x3F };
|
||||
static byte[] CP858EnglishText = CP437EnglishText;
|
||||
static byte[] CP858ItalianText = CP437ItalianText;
|
||||
static byte[] CP858SpanishText = CP437SpanishText;
|
||||
static byte[] CP858GermanicText = CP437GermanicText;
|
||||
/* CP858 has no Greek characters they are all replaced by '?' (0x3F) */
|
||||
static byte[] CP858GreekText = new byte[] { 0x43, 0x6F, 0x73, 0x6D, 0x6F, 0x73, 0x20, 0x3F, 0x3F, 0x3F, 0x3F,
|
||||
0x3F, 0x20, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x21 };
|
||||
static byte[] CP858JapanaseText = CP437JapanaseText;
|
||||
static byte[] CP858GothicText = CP437GothicText;
|
||||
|
||||
static void TestGetBytes(Encoding xEncoding, string xName, string text, byte[] expectedResult, string desc)
|
||||
{
|
||||
byte[] result;
|
||||
|
||||
result = xEncoding.GetBytes(text);
|
||||
Assert.IsTrue(EqualityHelper.ByteArrayAreEquals(result, expectedResult), $"{xName} Encoding of {desc} text failed byte arrays different");
|
||||
}
|
||||
|
||||
|
||||
static void TestGetString(Encoding xEncoding, string xName, byte[] bytes, string expectedText, string desc)
|
||||
{
|
||||
string text;
|
||||
|
||||
text = xEncoding.GetString(bytes);
|
||||
Assert.IsTrue((text == expectedText), $"{xName} Decoding of {desc} text failed strings different");
|
||||
}
|
||||
|
||||
static void TestUTF8()
|
||||
{
|
||||
//Encoding xEncoding = new UTF8Encoding();
|
||||
Encoding xEncoding = Encoding.UTF8;
|
||||
mDebugger.SendInternal($"Starting Test {xEncoding.BodyName} Encoding / Decoding");
|
||||
|
||||
Assert.IsTrue(xEncoding.IsSingleByte == false, "UTF8.IsSingleByte failed: it returns true");
|
||||
|
||||
string BodyName = xEncoding.BodyName;
|
||||
Assert.IsTrue(BodyName == "UTF-8", "UTF8 BodyName failed not 'UTF-8");
|
||||
|
||||
TestGetBytes(xEncoding, BodyName, "Cosmos is wonderful!", UTF8EnglishText, "English");
|
||||
TestGetBytes(xEncoding, BodyName, "Cosmos è fantastico!", UTF8ItalianText, "Italian");
|
||||
TestGetBytes(xEncoding, BodyName, "Cosmos es genial!", UTF8SpanishText, "Spanish");
|
||||
TestGetBytes(xEncoding, BodyName, "Cosmos ist großartig!", UTF8GermanicText, "Germanic");
|
||||
TestGetBytes(xEncoding, BodyName, "Cosmos είναι υπέροχος!", UTF8GreekText, "Greek");
|
||||
TestGetBytes(xEncoding, BodyName, "Cosmos 素晴らしいです!", UTF8JapanaseText, "Japanese");
|
||||
TestGetBytes(xEncoding, BodyName, "𐍈", UTF8GothicText, "Gothic");
|
||||
|
||||
TestGetString(xEncoding, BodyName, UTF8EnglishText, "Cosmos is wonderful!", "English");
|
||||
TestGetString(xEncoding, BodyName, UTF8ItalianText, "Cosmos è fantastico!", "Italian");
|
||||
TestGetString(xEncoding, BodyName, UTF8SpanishText, "Cosmos es genial!", "Spanish");
|
||||
TestGetString(xEncoding, BodyName, UTF8GermanicText, "Cosmos ist großartig!", "Germanic");
|
||||
/* CP437 replaces not representable characters with '?' */
|
||||
TestGetString(xEncoding, BodyName, UTF8GreekText, "Cosmos είναι υπέροχος!", "Greek");
|
||||
TestGetString(xEncoding, BodyName, UTF8JapanaseText, "Cosmos 素晴らしいです!", "Japanese");
|
||||
TestGetString(xEncoding, BodyName, UTF8GothicText, "𐍈", "Gothic");
|
||||
|
||||
mDebugger.SendInternal($"Finished Test {BodyName} Encoding / Decoding");
|
||||
}
|
||||
|
||||
static void TestCP437()
|
||||
{
|
||||
Encoding xEncoding = Encoding.GetEncoding(437);
|
||||
|
||||
mDebugger.SendInternal($"Starting Test {xEncoding.BodyName} Encoding / Decoding");
|
||||
|
||||
Assert.IsTrue(xEncoding.IsSingleByte == true, "437.IsSingleByte failed: it returns false");
|
||||
|
||||
string BodyName = xEncoding.BodyName;
|
||||
Assert.IsTrue(BodyName == "IBM437", "437 BodyName failed not 'IBM437");
|
||||
|
||||
TestGetBytes(xEncoding, BodyName, "Cosmos is wonderful!", CP437EnglishText, "English");
|
||||
TestGetBytes(xEncoding, BodyName, "Cosmos è fantastico!", CP437ItalianText, "Italian");
|
||||
TestGetBytes(xEncoding, BodyName, "Cosmos es genial!", CP437SpanishText, "Spanish");
|
||||
TestGetBytes(xEncoding, BodyName, "Cosmos ist großartig!", CP437GermanicText, "Germanic");
|
||||
/*
|
||||
* From this point on a lot of characters will be replaced by 0x3F ('?') because
|
||||
* cannot really represented on CP437
|
||||
*/
|
||||
TestGetBytes(xEncoding, BodyName, "Cosmos είναι υπέροχος!", CP437GreekText, "Greek");
|
||||
TestGetBytes(xEncoding, BodyName, "Cosmos 素晴らしいです!", CP437JapanaseText, "Japanese");
|
||||
TestGetBytes(xEncoding, BodyName, "𐍈", CP437GothicText, "Gothic");
|
||||
|
||||
TestGetString(xEncoding, BodyName, CP437EnglishText, "Cosmos is wonderful!", "English");
|
||||
TestGetString(xEncoding, BodyName, CP437ItalianText, "Cosmos è fantastico!", "Italian");
|
||||
TestGetString(xEncoding, BodyName, CP437SpanishText, "Cosmos es genial!", "Spanish");
|
||||
TestGetString(xEncoding, BodyName, CP437GermanicText, "Cosmos ist großartig!", "Germanic");
|
||||
/* CP437 replaces not representable characters with '?' */
|
||||
TestGetString(xEncoding, BodyName, CP437GreekText, "Cosmos ε??α? ?π??????!", "Greek");
|
||||
TestGetString(xEncoding, BodyName, CP437JapanaseText, "Cosmos ???????!", "Japanese");
|
||||
TestGetString(xEncoding, BodyName, CP437GothicText, "??", "Gothic");
|
||||
|
||||
mDebugger.SendInternal($"Finished Test {BodyName} Encoding / Decoding");
|
||||
}
|
||||
|
||||
static void TestCP858()
|
||||
{
|
||||
Encoding xEncoding = Encoding.GetEncoding(858);
|
||||
|
||||
mDebugger.SendInternal($"Starting Test {xEncoding.BodyName} Encoding / Decoding");
|
||||
|
||||
Assert.IsTrue(xEncoding.IsSingleByte == true, "858.IsSingleByte failed: it returns false");
|
||||
|
||||
string BodyName = xEncoding.BodyName;
|
||||
Assert.IsTrue(BodyName == "IBM00858", "858 BodyName failed not 'IBM00858");
|
||||
|
||||
TestGetBytes(xEncoding, BodyName, "Cosmos è fantastico!", CP858ItalianText, "Italian");
|
||||
TestGetBytes(xEncoding, BodyName, "Cosmos es genial!", CP858SpanishText, "Spanish");
|
||||
TestGetBytes(xEncoding, BodyName, "Cosmos ist großartig!", CP858GermanicText, "Germanic");
|
||||
/*
|
||||
* From this point on a lot of characters will be replaced by 0x3F ('?') because
|
||||
* cannot really represented on CP858
|
||||
*/
|
||||
TestGetBytes(xEncoding, BodyName, "Cosmos είναι υπέροχος!", CP858GreekText, "Greek");
|
||||
TestGetBytes(xEncoding, BodyName, "Cosmos 素晴らしいです!", CP858JapanaseText, "Japanese");
|
||||
TestGetBytes(xEncoding, BodyName, "𐍈", CP858GothicText, "Gothic");
|
||||
|
||||
TestGetString(xEncoding, BodyName, CP858EnglishText, "Cosmos is wonderful!", "English");
|
||||
TestGetString(xEncoding, BodyName, CP858ItalianText, "Cosmos è fantastico!", "Italian");
|
||||
TestGetString(xEncoding, BodyName, CP858SpanishText, "Cosmos es genial!", "Spanish");
|
||||
TestGetString(xEncoding, BodyName, CP858GermanicText, "Cosmos ist großartig!", "Germanic");
|
||||
/* CP858 replaces not representable characters with '?' */
|
||||
TestGetString(xEncoding, BodyName, CP858GreekText, "Cosmos ????? ????????!", "Greek");
|
||||
TestGetString(xEncoding, BodyName, CP858JapanaseText, "Cosmos ???????!", "Japanese");
|
||||
TestGetString(xEncoding, BodyName, CP858GothicText, "??", "Gothic");
|
||||
|
||||
mDebugger.SendInternal($"Finished Test {BodyName} Encoding / Decoding");
|
||||
}
|
||||
|
||||
public static void Execute()
|
||||
{
|
||||
/*
|
||||
* Net Core has removed all the legacy codepages from Encoding, only Unicode and ASCII are supported
|
||||
* the correct way to add them is to create an Encoding Provider.
|
||||
* Microsoft has created a CodePageEncodingProvider for this but it is too much complex to use it in
|
||||
* Cosmos now, but we should use surely this in future.
|
||||
* As a replacement for it I have created CosmosEncodingProvider that is more simple (but less efficient).
|
||||
*/
|
||||
Encoding.RegisterProvider(CosmosEncodingProvider.Instance);
|
||||
|
||||
TestUTF8();
|
||||
TestCP437();
|
||||
TestCP858();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -50,6 +50,7 @@
|
|||
<ProjectReference Include="..\..\source\Kernel-X86\50-Application\GuessKernelGen3.csproj" />
|
||||
<ProjectReference Include="..\..\source\Kernel-X86\91-Plugs\Cosmos.Plugs.TapRoot\Cosmos.Plugs.TapRoot.csproj" />
|
||||
<ProjectReference Include="..\BoxingTests\BoxingTests.csproj" />
|
||||
<ProjectReference Include="..\ConsoleTest\ConsoleTest.csproj" />
|
||||
<ProjectReference Include="..\Cosmos.Compiler.Tests.Bcl\Cosmos.Compiler.Tests.Bcl.csproj" />
|
||||
<ProjectReference Include="..\Cosmos.Compiler.Tests.Encryption\Cosmos.Compiler.Tests.Encryption.csproj" />
|
||||
<ProjectReference Include="..\Cosmos.Compiler.Tests.Exceptions\Cosmos.Compiler.Tests.Exceptions.csproj" />
|
||||
|
|
|
|||
|
|
@ -36,6 +36,8 @@ namespace Cosmos.TestRunner.Core
|
|||
|
||||
/* Please see the notes on the kernel itself before enabling it */
|
||||
//yield return typeof(GraphicTest.Kernel);
|
||||
/* Please see the notes on the kernel itself before enabling it */
|
||||
//yield return typeof(ConsoleTest.Kernel);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,18 +5,17 @@ using IL2CPU.API.Attribs;
|
|||
|
||||
namespace Cosmos.Core_Plugs.System
|
||||
{
|
||||
[Plug(Target = typeof(Delegate))]
|
||||
[Plug(Target = typeof(Delegate), Inheritable = true)]
|
||||
[PlugField(FieldType = typeof(int), FieldId = "$$ArgSize$$")]
|
||||
[PlugField(FieldType = typeof(int), FieldId = "$$ReturnsValue$$")]
|
||||
public static class DelegateImpl
|
||||
{
|
||||
[PlugMethod(Signature = "System_Boolean__System_Delegate_Equals_System_Object_")]
|
||||
public static bool Equals(Delegate aThis, object aThat)
|
||||
{
|
||||
// todo: implement proper Delegate.Equals(object)
|
||||
//return false;
|
||||
throw new NotImplementedException();
|
||||
return false;
|
||||
}
|
||||
|
||||
[PlugMethod(Signature = "System_Boolean__System_Delegate_InternalEqualTypes_System_Object__System_Object_")]
|
||||
public static unsafe bool InternalEqualTypes([ObjectPointerAccess] uint** a, [ObjectPointerAccess] uint** b)
|
||||
{
|
||||
var xTypeA = a[0][0];
|
||||
|
|
@ -24,13 +23,7 @@ namespace Cosmos.Core_Plugs.System
|
|||
|
||||
return xTypeA == xTypeB;
|
||||
}
|
||||
}
|
||||
|
||||
[Plug(Target = typeof(Delegate), Inheritable = true)]
|
||||
[PlugField(FieldType = typeof(int), FieldId = "$$ArgSize$$")]
|
||||
[PlugField(FieldType = typeof(int), FieldId = "$$ReturnsValue$$")]
|
||||
public static class DelegateImplInherit
|
||||
{
|
||||
[PlugMethod(Signature = "System_MulticastDelegate__System_Delegate_InternalAllocLike_System_Delegate_")]
|
||||
public static unsafe uint InternalAllocLike(uint* aDelegate)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -19,15 +19,9 @@ namespace Cosmos.Core_Plugs.System.Globalization
|
|||
|
||||
public static int GetHashCode(CultureInfo aThis)
|
||||
{
|
||||
throw new NotImplementedException("CultureInfo.GetHashCode()");
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public static bool Equals(CultureInfo aThis, object value)
|
||||
{
|
||||
throw new NotImplementedException("CultureInfo.Equals()");
|
||||
}
|
||||
|
||||
|
||||
public static void CCtor()
|
||||
{
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,25 +0,0 @@
|
|||
using System.Text;
|
||||
using IL2CPU.API.Attribs;
|
||||
|
||||
namespace Cosmos.Core_Plugs.System.Text
|
||||
{
|
||||
[Plug(Target = typeof(ASCIIEncoding))]
|
||||
public class ASCIIEncodingImpl
|
||||
{
|
||||
|
||||
// TODO: remove this function
|
||||
// old comment :Plug string.GetStringFromEncoding instead
|
||||
/*public static string GetString(byte[] aBytes, int aIndex, int aCount) {
|
||||
if (aBytes.Length == 0) {
|
||||
return string.Empty;
|
||||
} else {
|
||||
return new string(Encoding.ASCII.GetChars(aBytes, aIndex, aCount));
|
||||
/*var xChars = new char[aBytes.Length];
|
||||
for (int i = 0; i < aBytes.Length; i++) {
|
||||
xChars[i] = (char)aBytes[i];
|
||||
}
|
||||
return new string(xChars);
|
||||
}
|
||||
}*/
|
||||
}
|
||||
}
|
||||
|
|
@ -62,7 +62,7 @@ namespace Cosmos.HAL
|
|||
private int mCurrentY = 1;
|
||||
|
||||
|
||||
public override char this[int x, int y]
|
||||
public override byte this[int x, int y]
|
||||
{
|
||||
get
|
||||
{
|
||||
|
|
@ -79,7 +79,7 @@ namespace Cosmos.HAL
|
|||
});
|
||||
mCurrentY = y;
|
||||
}
|
||||
SendChar(new []{value});
|
||||
SendChar(new []{(char)value});
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -61,17 +61,17 @@ namespace Cosmos.HAL
|
|||
IO.Memory.Fill(mScrollSize, mRow2Addr, mBackgroundClearCellValue);
|
||||
}
|
||||
|
||||
public override char this[int aX, int aY]
|
||||
public override byte this[int aX, int aY]
|
||||
{
|
||||
get
|
||||
{
|
||||
var xScreenOffset = (UInt32)((aX + aY * Cols) * 2);
|
||||
return (char)mRAM[xScreenOffset];
|
||||
return (byte)mRAM[xScreenOffset];
|
||||
}
|
||||
set
|
||||
{
|
||||
var xScreenOffset = (UInt32)((aX + aY * Cols) * 2);
|
||||
mRAM[xScreenOffset] = (byte)value;
|
||||
mRAM[xScreenOffset] = value;
|
||||
mRAM[xScreenOffset + 1] = Color;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ namespace Cosmos.HAL
|
|||
|
||||
public abstract void ScrollUp();
|
||||
|
||||
public abstract char this[int x, int y]
|
||||
public abstract byte this[int x, int y]
|
||||
{
|
||||
get;
|
||||
set;
|
||||
|
|
@ -52,4 +52,4 @@ namespace Cosmos.HAL
|
|||
public abstract void SetCursorVisible(bool value);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,11 +1,17 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Text;
|
||||
using Cosmos.HAL;
|
||||
|
||||
namespace Cosmos.System {
|
||||
public class Console {
|
||||
private const byte LineFeed = (byte)'\n';
|
||||
private const byte CarriageReturn = (byte)'\r';
|
||||
private const byte Tab = (byte)'\t';
|
||||
private const byte Space = (byte)' ';
|
||||
|
||||
protected int mX = 0;
|
||||
public int X {
|
||||
get { return mX; }
|
||||
|
|
@ -58,7 +64,7 @@ namespace Cosmos.System {
|
|||
mText.SetCursorPos(mX, mY);
|
||||
}
|
||||
|
||||
public void NewLine() {
|
||||
private void DoLineFeed() {
|
||||
mY++;
|
||||
mX = 0;
|
||||
if (mY == mText.Rows) {
|
||||
|
|
@ -68,555 +74,61 @@ namespace Cosmos.System {
|
|||
UpdateCursor();
|
||||
}
|
||||
|
||||
public void WriteChar(char aChar) {
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
private void DoCarriageReturn() {
|
||||
mX = 0;
|
||||
UpdateCursor();
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
private void DoTab()
|
||||
{
|
||||
Write(Space);
|
||||
Write(Space);
|
||||
Write(Space);
|
||||
Write(Space);
|
||||
}
|
||||
|
||||
public void Write(byte aChar)
|
||||
{
|
||||
mText[mX, mY] = aChar;
|
||||
mX++;
|
||||
if (mX == mText.Cols) {
|
||||
NewLine();
|
||||
if (mX == mText.Cols)
|
||||
{
|
||||
DoLineFeed();
|
||||
}
|
||||
UpdateCursor();
|
||||
}
|
||||
|
||||
public void WriteLine(string aText) {
|
||||
Write(aText);
|
||||
NewLine();
|
||||
}
|
||||
|
||||
//TODO: Optimize this
|
||||
public void Write(string aText) {
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void Write(byte[] aText)
|
||||
{
|
||||
if (aText == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
for (int i = 0; i < aText.Length; i++) {
|
||||
if (aText[i] == '\n') {
|
||||
NewLine();
|
||||
} else if (aText[i] == '\r') {
|
||||
mX = 0;
|
||||
UpdateCursor();
|
||||
} else if (aText[i] == '\t') {
|
||||
//Write(" ");
|
||||
WriteChar(' ');
|
||||
WriteChar(' ');
|
||||
WriteChar(' ');
|
||||
WriteChar(' ');
|
||||
}
|
||||
|
||||
//Extended ASCII Support
|
||||
else if (aText[i] == 'Ç')
|
||||
{
|
||||
WriteChar((char)128);
|
||||
}
|
||||
else if (aText[i] == 'ü')
|
||||
{
|
||||
WriteChar((char)129);
|
||||
}
|
||||
else if (aText[i] == 'é')
|
||||
{
|
||||
WriteChar((char)130);
|
||||
}
|
||||
else if (aText[i] == 'â')
|
||||
{
|
||||
WriteChar((char)131);
|
||||
}
|
||||
else if (aText[i] == 'ä')
|
||||
{
|
||||
WriteChar((char)132);
|
||||
}
|
||||
else if (aText[i] == 'à')
|
||||
{
|
||||
WriteChar((char)133);
|
||||
}
|
||||
else if (aText[i] == 'å')
|
||||
{
|
||||
WriteChar((char)134);
|
||||
}
|
||||
else if (aText[i] == 'ç')
|
||||
{
|
||||
WriteChar((char)135);
|
||||
}
|
||||
else if (aText[i] == 'ê')
|
||||
{
|
||||
WriteChar((char)136);
|
||||
}
|
||||
else if (aText[i] == 'ë')
|
||||
{
|
||||
WriteChar((char)137);
|
||||
}
|
||||
else if (aText[i] == 'è')
|
||||
{
|
||||
WriteChar((char)138);
|
||||
}
|
||||
else if (aText[i] == 'ï')
|
||||
{
|
||||
WriteChar((char)139);
|
||||
}
|
||||
else if (aText[i] == 'î')
|
||||
{
|
||||
WriteChar((char)140);
|
||||
}
|
||||
else if (aText[i] == 'ì')
|
||||
{
|
||||
WriteChar((char)141);
|
||||
}
|
||||
else if (aText[i] == 'Ä')
|
||||
{
|
||||
WriteChar((char)142);
|
||||
}
|
||||
else if (aText[i] == 'Å')
|
||||
{
|
||||
WriteChar((char)143);
|
||||
}
|
||||
else if (aText[i] == 'É')
|
||||
{
|
||||
WriteChar((char)144);
|
||||
}
|
||||
else if (aText[i] == 'æ')
|
||||
{
|
||||
WriteChar((char)145);
|
||||
}
|
||||
else if (aText[i] == 'Æ')
|
||||
{
|
||||
WriteChar((char)146);
|
||||
}
|
||||
else if (aText[i] == 'ô')
|
||||
{
|
||||
WriteChar((char)147);
|
||||
}
|
||||
else if (aText[i] == 'ö')
|
||||
{
|
||||
WriteChar((char)148);
|
||||
}
|
||||
else if (aText[i] == 'ò')
|
||||
{
|
||||
WriteChar((char)149);
|
||||
}
|
||||
else if (aText[i] == 'û')
|
||||
{
|
||||
WriteChar((char)150);
|
||||
}
|
||||
else if (aText[i] == 'ù')
|
||||
{
|
||||
WriteChar((char)151);
|
||||
}
|
||||
else if (aText[i] == 'ÿ')
|
||||
{
|
||||
WriteChar((char)152);
|
||||
}
|
||||
else if (aText[i] == 'Ö')
|
||||
{
|
||||
WriteChar((char)153);
|
||||
}
|
||||
else if (aText[i] == 'Ü')
|
||||
{
|
||||
WriteChar((char)154);
|
||||
}
|
||||
else if (aText[i] == 'ø')
|
||||
{
|
||||
WriteChar((char)155);
|
||||
}
|
||||
else if (aText[i] == '£')
|
||||
{
|
||||
WriteChar((char)156);
|
||||
}
|
||||
else if (aText[i] == 'Ø')
|
||||
{
|
||||
WriteChar((char)157);
|
||||
}
|
||||
else if (aText[i] == '×')
|
||||
{
|
||||
WriteChar((char)158);
|
||||
}
|
||||
else if (aText[i] == 'ƒ')
|
||||
{
|
||||
WriteChar((char)159);
|
||||
}
|
||||
else if (aText[i] == 'á')
|
||||
{
|
||||
WriteChar((char)160);
|
||||
}
|
||||
else if (aText[i] == 'í')
|
||||
{
|
||||
WriteChar((char)161);
|
||||
}
|
||||
else if (aText[i] == 'ó')
|
||||
{
|
||||
WriteChar((char)162);
|
||||
}
|
||||
else if (aText[i] == 'ú')
|
||||
{
|
||||
WriteChar((char)163);
|
||||
}
|
||||
else if (aText[i] == 'ñ')
|
||||
{
|
||||
WriteChar((char)164);
|
||||
}
|
||||
else if (aText[i] == 'Ñ')
|
||||
{
|
||||
WriteChar((char)165);
|
||||
}
|
||||
else if (aText[i] == 'ª')
|
||||
{
|
||||
WriteChar((char)166);
|
||||
}
|
||||
else if (aText[i] == 'º')
|
||||
{
|
||||
WriteChar((char)167);
|
||||
}
|
||||
else if (aText[i] == '¿')
|
||||
{
|
||||
WriteChar((char)168);
|
||||
}
|
||||
else if (aText[i] == '®')
|
||||
{
|
||||
WriteChar((char)169);
|
||||
}
|
||||
else if (aText[i] == '¬')
|
||||
{
|
||||
WriteChar((char)170);
|
||||
}
|
||||
else if (aText[i] == '½')
|
||||
{
|
||||
WriteChar((char)171);
|
||||
}
|
||||
else if (aText[i] == '¼')
|
||||
{
|
||||
WriteChar((char)172);
|
||||
}
|
||||
else if (aText[i] == '¡')
|
||||
{
|
||||
WriteChar((char)173);
|
||||
}
|
||||
else if (aText[i] == '«')
|
||||
{
|
||||
WriteChar((char)174);
|
||||
}
|
||||
else if (aText[i] == '»')
|
||||
{
|
||||
WriteChar((char)175);
|
||||
}
|
||||
else if (aText[i] == '░')
|
||||
{
|
||||
WriteChar((char)176);
|
||||
}
|
||||
else if (aText[i] == '▒')
|
||||
{
|
||||
WriteChar((char)177);
|
||||
}
|
||||
else if (aText[i] == '▓')
|
||||
{
|
||||
WriteChar((char)178);
|
||||
}
|
||||
else if (aText[i] == '│')
|
||||
{
|
||||
WriteChar((char)179);
|
||||
}
|
||||
else if (aText[i] == '┤')
|
||||
{
|
||||
WriteChar((char)180);
|
||||
}
|
||||
else if (aText[i] == 'Á')
|
||||
{
|
||||
WriteChar((char)181);
|
||||
}
|
||||
else if (aText[i] == 'Â')
|
||||
{
|
||||
WriteChar((char)182);
|
||||
}
|
||||
else if (aText[i] == 'À')
|
||||
{
|
||||
WriteChar((char)183);
|
||||
}
|
||||
else if (aText[i] == '©')
|
||||
{
|
||||
WriteChar((char)184);
|
||||
}
|
||||
else if (aText[i] == '╣')
|
||||
{
|
||||
WriteChar((char)185);
|
||||
}
|
||||
else if (aText[i] == '║')
|
||||
{
|
||||
WriteChar((char)186);
|
||||
}
|
||||
else if (aText[i] == '╗')
|
||||
{
|
||||
WriteChar((char)187);
|
||||
}
|
||||
else if (aText[i] == '╝')
|
||||
{
|
||||
WriteChar((char)188);
|
||||
}
|
||||
else if (aText[i] == '¢')
|
||||
{
|
||||
WriteChar((char)189);
|
||||
}
|
||||
else if (aText[i] == '¥')
|
||||
{
|
||||
WriteChar((char)190);
|
||||
}
|
||||
else if (aText[i] == '┐')
|
||||
{
|
||||
WriteChar((char)191);
|
||||
}
|
||||
else if (aText[i] == '└')
|
||||
{
|
||||
WriteChar((char)192);
|
||||
}
|
||||
else if (aText[i] == '┴')
|
||||
{
|
||||
WriteChar((char)193);
|
||||
}
|
||||
else if (aText[i] == '┬')
|
||||
{
|
||||
WriteChar((char)194);
|
||||
}
|
||||
else if (aText[i] == '├')
|
||||
{
|
||||
WriteChar((char)195);
|
||||
}
|
||||
else if (aText[i] == '─')
|
||||
{
|
||||
WriteChar((char)196);
|
||||
}
|
||||
else if (aText[i] == '┼')
|
||||
{
|
||||
WriteChar((char)197);
|
||||
}
|
||||
else if (aText[i] == 'ã')
|
||||
{
|
||||
WriteChar((char)198);
|
||||
}
|
||||
else if (aText[i] == 'Ã')
|
||||
{
|
||||
WriteChar((char)199);
|
||||
}
|
||||
else if (aText[i] == '╚')
|
||||
{
|
||||
WriteChar((char)200);
|
||||
}
|
||||
else if (aText[i] == '╔')
|
||||
{
|
||||
WriteChar((char)201);
|
||||
}
|
||||
else if (aText[i] == '╩')
|
||||
{
|
||||
WriteChar((char)202);
|
||||
}
|
||||
else if (aText[i] == '╦')
|
||||
{
|
||||
WriteChar((char)203);
|
||||
}
|
||||
else if (aText[i] == '╠')
|
||||
{
|
||||
WriteChar((char)204);
|
||||
}
|
||||
else if (aText[i] == '═')
|
||||
{
|
||||
WriteChar((char)205);
|
||||
}
|
||||
else if (aText[i] == '╬')
|
||||
{
|
||||
WriteChar((char)206);
|
||||
}
|
||||
else if (aText[i] == '¤')
|
||||
{
|
||||
WriteChar((char)207);
|
||||
}
|
||||
else if (aText[i] == 'ð')
|
||||
{
|
||||
WriteChar((char)208);
|
||||
}
|
||||
else if (aText[i] == 'Ð')
|
||||
{
|
||||
WriteChar((char)209);
|
||||
}
|
||||
else if (aText[i] == 'Ê')
|
||||
{
|
||||
WriteChar((char)210);
|
||||
}
|
||||
else if (aText[i] == 'Ë')
|
||||
{
|
||||
WriteChar((char)211);
|
||||
}
|
||||
else if (aText[i] == 'È')
|
||||
{
|
||||
WriteChar((char)212);
|
||||
}
|
||||
else if (aText[i] == 'ı')
|
||||
{
|
||||
WriteChar((char)213);
|
||||
}
|
||||
else if (aText[i] == 'Í')
|
||||
{
|
||||
WriteChar((char)214);
|
||||
}
|
||||
else if (aText[i] == 'Î')
|
||||
{
|
||||
WriteChar((char)215);
|
||||
}
|
||||
else if (aText[i] == 'Ï')
|
||||
{
|
||||
WriteChar((char)216);
|
||||
}
|
||||
else if (aText[i] == '┘')
|
||||
{
|
||||
WriteChar((char)217);
|
||||
}
|
||||
else if (aText[i] == '┌')
|
||||
{
|
||||
WriteChar((char)218);
|
||||
}
|
||||
else if (aText[i] == '█')
|
||||
{
|
||||
WriteChar((char)219);
|
||||
}
|
||||
else if (aText[i] == '▄')
|
||||
{
|
||||
WriteChar((char)220);
|
||||
}
|
||||
else if (aText[i] == '¦')
|
||||
{
|
||||
WriteChar((char)221);
|
||||
}
|
||||
else if (aText[i] == 'Ì')
|
||||
{
|
||||
WriteChar((char)222);
|
||||
}
|
||||
else if (aText[i] == '▀')
|
||||
{
|
||||
WriteChar((char)223);
|
||||
}
|
||||
else if (aText[i] == 'Ó')
|
||||
{
|
||||
WriteChar((char)224);
|
||||
}
|
||||
else if (aText[i] == 'ß')
|
||||
{
|
||||
WriteChar((char)225);
|
||||
}
|
||||
else if (aText[i] == 'Ô')
|
||||
{
|
||||
WriteChar((char)226);
|
||||
}
|
||||
else if (aText[i] == 'Ò')
|
||||
{
|
||||
WriteChar((char)227);
|
||||
}
|
||||
else if (aText[i] == 'õ')
|
||||
{
|
||||
WriteChar((char)228);
|
||||
}
|
||||
else if (aText[i] == 'Õ')
|
||||
{
|
||||
WriteChar((char)229);
|
||||
}
|
||||
else if (aText[i] == 'µ')
|
||||
{
|
||||
WriteChar((char)230);
|
||||
}
|
||||
else if (aText[i] == 'þ')
|
||||
{
|
||||
WriteChar((char)231);
|
||||
}
|
||||
else if (aText[i] == 'Þ')
|
||||
{
|
||||
WriteChar((char)232);
|
||||
}
|
||||
else if (aText[i] == 'Ú')
|
||||
{
|
||||
WriteChar((char)233);
|
||||
}
|
||||
else if (aText[i] == 'Û')
|
||||
{
|
||||
WriteChar((char)234);
|
||||
}
|
||||
else if (aText[i] == 'Ù')
|
||||
{
|
||||
WriteChar((char)235);
|
||||
}
|
||||
else if (aText[i] == 'ý')
|
||||
{
|
||||
WriteChar((char)236);
|
||||
}
|
||||
else if (aText[i] == 'Ý')
|
||||
{
|
||||
WriteChar((char)237);
|
||||
}
|
||||
else if (aText[i] == '¯')
|
||||
{
|
||||
WriteChar((char)238);
|
||||
}
|
||||
else if (aText[i] == '´')
|
||||
{
|
||||
WriteChar((char)239);
|
||||
}
|
||||
else if (aText[i] == '≡')
|
||||
{
|
||||
WriteChar((char)240);
|
||||
}
|
||||
else if (aText[i] == '±')
|
||||
{
|
||||
WriteChar((char)241);
|
||||
}
|
||||
else if (aText[i] == '‗')
|
||||
{
|
||||
WriteChar((char)242);
|
||||
}
|
||||
else if (aText[i] == '¾')
|
||||
{
|
||||
WriteChar((char)243);
|
||||
}
|
||||
else if (aText[i] == '¶')
|
||||
{
|
||||
WriteChar((char)244);
|
||||
}
|
||||
else if (aText[i] == '§')
|
||||
{
|
||||
WriteChar((char)245);
|
||||
}
|
||||
else if (aText[i] == '÷')
|
||||
{
|
||||
WriteChar((char)246);
|
||||
}
|
||||
else if (aText[i] == '¸')
|
||||
{
|
||||
WriteChar((char)247);
|
||||
}
|
||||
else if (aText[i] == '°')
|
||||
{
|
||||
WriteChar((char)248);
|
||||
}
|
||||
else if (aText[i] == '¨')
|
||||
{
|
||||
WriteChar((char)249);
|
||||
}
|
||||
else if (aText[i] == '·')
|
||||
{
|
||||
WriteChar((char)250);
|
||||
}
|
||||
else if (aText[i] == '¹')
|
||||
{
|
||||
WriteChar((char)251);
|
||||
}
|
||||
else if (aText[i] == '³')
|
||||
{
|
||||
WriteChar((char)252);
|
||||
}
|
||||
else if (aText[i] == '²')
|
||||
{
|
||||
WriteChar((char)253);
|
||||
}
|
||||
else if (aText[i] == '■')
|
||||
{
|
||||
WriteChar((char)254);
|
||||
}
|
||||
else if (aText[i] == ' ')
|
||||
{
|
||||
WriteChar((char)255);
|
||||
}
|
||||
else {
|
||||
WriteChar(aText[i]);
|
||||
for (int i = 0; i < aText.Length; i++)
|
||||
{
|
||||
switch (aText[i])
|
||||
{
|
||||
case LineFeed:
|
||||
DoLineFeed();
|
||||
break;
|
||||
|
||||
case CarriageReturn:
|
||||
DoCarriageReturn();
|
||||
break;
|
||||
|
||||
case Tab:
|
||||
DoTab();
|
||||
break;
|
||||
|
||||
/* Normal characters, simply write them */
|
||||
default:
|
||||
Write(aText[i]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,6 +8,8 @@ using Cosmos.Debug.Kernel;
|
|||
using Cosmos.HAL;
|
||||
using Cosmos.System.ScanMaps;
|
||||
|
||||
using MyConsole = System.Console;
|
||||
|
||||
namespace Cosmos.System
|
||||
{
|
||||
public static class KeyboardManager
|
||||
|
|
@ -113,7 +115,8 @@ public static List<KeyboardBase> Keyboards = new List<KeyboardBase>();
|
|||
{
|
||||
if (ControlPressed && AltPressed && _scanMap.ScanCodeMatchesKey(key, ConsoleKeyEx.Delete))
|
||||
{
|
||||
Global.Console.WriteLine("Detected Ctrl-Alt-Delete! Rebooting System...");
|
||||
//Global.Console.WriteLine("Detected Ctrl-Alt-Delete! Rebooting System...");
|
||||
MyConsole.WriteLine("Detected Ctrl-Alt-Delete! Rebooting System...");
|
||||
Power.Reboot();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -12,23 +12,15 @@ namespace Cosmos.System.ExtendedASCII
|
|||
myDebugger.SendInternal("CP437Enconding Setting CodePageTable only one time...");
|
||||
|
||||
CodePageTable = new char[] {
|
||||
'Ç', 'ü', 'é', 'â', 'ä', 'à', 'å', 'ç',
|
||||
'ê', 'ë', 'è', 'ï', 'î', 'ì', 'Ä', 'Å',
|
||||
'É', 'æ', 'Æ', 'ô', 'ö', 'ò', 'û', 'ù',
|
||||
'ÿ', 'Ö', 'Ü', '¢', '£', '¥', '₧', 'ƒ',
|
||||
'á', 'í', 'ó', 'ú', 'ñ', 'Ñ', 'ª', 'º',
|
||||
'¿', '⌐', '¬', '½', '¼', '¡', '«', '»',
|
||||
'░', '▒', '▓', '│', '┤', '╡', '╢', '╖',
|
||||
'╕', '╣', '║', '╗', '╝', '╜', '╛', '┐',
|
||||
'└', '┴', '┬', '├', '─', '┼', '╞', '╟',
|
||||
'╚', '╔', '╩', '╦','╠', '═', '╬', '╧',
|
||||
'╨', '╤', '╥', '╙', '╘', '╒', '╓','╫',
|
||||
'╪', '┘', '┌', '█', '▄', '▌', '▐', '▀',
|
||||
'α', 'ß', 'Γ', 'π', 'Σ', 'σ', 'µ', 'τ',
|
||||
'Φ', 'Θ', 'Ω', 'δ', '∞', 'φ', 'ε', '∩',
|
||||
'≡', '±', '≥', '≤', '⌠', '⌡', '÷', '≈',
|
||||
'°', '∙', '·', '√', 'ⁿ', '²', '■', '\x00A0'
|
||||
};
|
||||
'Ç' , 'ü' , 'é' , 'â' , 'ä' , 'à' , 'å' , 'ç' , 'ê' , 'ë' , 'è' , 'ï' , 'î' , 'ì' , 'Ä' , 'Å' ,
|
||||
'É' , 'æ' , 'Æ' , 'ô' , 'ö' , 'ò' , 'û' , 'ù' , 'ÿ' , 'Ö' , 'Ü' , '¢' , '£' , '¥' , '₧' , 'ƒ' ,
|
||||
'á' , 'í' , 'ó' , 'ú' , 'ñ' , 'Ñ' , 'ª' , 'º' , '¿' , '⌐' , '¬' , '½' , '¼' , '¡' , '«' , '»' ,
|
||||
'░' , '▒' , '▓' , '│' , '┤' , '╡' , '╢' , '╖' , '╕' , '╣' , '║' , '╗' , '╝' , '╜' , '╛' , '┐' ,
|
||||
'└' , '┴' , '┬' , '├' , '─' , '┼' , '╞' , '╟' , '╚' , '╔' , '╩' , '╦' , '╠' , '═' , '╬' , '╧' ,
|
||||
'╨' , '╤' , '╥' , '╙' , '╘' , '╒' , '╓' , '╫' , '╪' , '┘' , '┌' , '█' , '▄' , '▌' , '▐' , '▀' ,
|
||||
'α' , 'ß' , 'Γ' , 'π' , 'Σ' , 'σ' , 'µ' , 'τ' , 'Φ' , 'Θ' , 'Ω' , 'δ' , '∞' , 'φ' , 'ε' , '∩' ,
|
||||
'≡' , '±' , '≥' , '≤' , '⌠' , '⌡' , '÷' , '≈' , '°' , '∙' , '·' , '√' , 'ⁿ' , '²' , '■' , '\x00A0'
|
||||
};
|
||||
}
|
||||
|
||||
public override string BodyName => "IBM437";
|
||||
|
|
|
|||
|
|
@ -61,8 +61,6 @@ namespace Cosmos.System.ExtendedASCII
|
|||
|
||||
private byte GetByte(char ch)
|
||||
{
|
||||
//mDebugger.SendInternal($"Converting to CodePageTable ch {ch} (codepoint) {(int)ch}");
|
||||
|
||||
/* ch is in reality an ASCII character? */
|
||||
if (ch < 127)
|
||||
{
|
||||
|
|
@ -70,7 +68,6 @@ namespace Cosmos.System.ExtendedASCII
|
|||
return (byte)ch;
|
||||
}
|
||||
|
||||
mDebugger.SendInternal($"ch {ch} could be Extended Ascii");
|
||||
int idx = GetCodePageIdxFromChr(ch);
|
||||
if (idx == -1)
|
||||
{
|
||||
|
|
@ -129,9 +126,8 @@ namespace Cosmos.System.ExtendedASCII
|
|||
private char GetChar(byte b)
|
||||
{
|
||||
mDebugger.SendInternal($"Converting to UTF16: {b}...");
|
||||
|
||||
/* Ascii? Simply cast it then... */
|
||||
if (b >= 0 && b < 127)
|
||||
if (b < 127)
|
||||
{
|
||||
mDebugger.SendInternal($"b {b} is ASCII");
|
||||
return (char)b;
|
||||
|
|
@ -171,8 +167,7 @@ namespace Cosmos.System.ExtendedASCII
|
|||
public override int GetMaxByteCount(int charCount)
|
||||
{
|
||||
if (charCount < 0)
|
||||
throw new ArgumentOutOfRangeException(nameof(charCount),
|
||||
"negative number");
|
||||
throw new ArgumentOutOfRangeException(nameof(charCount), "negative number");
|
||||
|
||||
// Characters would be # of characters + 1 in case high surrogate is ? * max fallback
|
||||
return charCount + 1;
|
||||
|
|
|
|||
|
|
@ -12,6 +12,8 @@ namespace Cosmos.System_Plugs.System
|
|||
{
|
||||
private static ConsoleColor mForeground = ConsoleColor.White;
|
||||
private static ConsoleColor mBackground = ConsoleColor.Black;
|
||||
private static Encoding ConsoleInputEncoding = Encoding.ASCII;
|
||||
private static Encoding ConsoleOutputEncoding = Encoding.ASCII;
|
||||
|
||||
private static readonly Cosmos.System.Console mFallbackConsole = new Cosmos.System.Console(null);
|
||||
|
||||
|
|
@ -188,13 +190,23 @@ namespace Cosmos.System_Plugs.System
|
|||
|
||||
public static Encoding get_InputEncoding()
|
||||
{
|
||||
WriteLine("Not implemented: get_InputEncoding");
|
||||
return null;
|
||||
return ConsoleInputEncoding;
|
||||
}
|
||||
|
||||
public static void set_InputEncoding(Encoding value)
|
||||
{
|
||||
WriteLine("Not implemented: set_InputEncoding");
|
||||
ConsoleInputEncoding = value;
|
||||
}
|
||||
|
||||
public static Encoding get_OutputEncoding()
|
||||
{
|
||||
return ConsoleOutputEncoding;
|
||||
}
|
||||
|
||||
|
||||
public static void set_OutputEncoding(Encoding value)
|
||||
{
|
||||
ConsoleOutputEncoding = value;
|
||||
}
|
||||
|
||||
public static bool get_KeyAvailable()
|
||||
|
|
@ -224,17 +236,6 @@ namespace Cosmos.System_Plugs.System
|
|||
// return null;
|
||||
//}
|
||||
|
||||
public static Encoding get_OutputEncoding()
|
||||
{
|
||||
WriteLine("Not implemented: get_OutputEncoding");
|
||||
return null;
|
||||
}
|
||||
|
||||
public static void set_OutputEncoding(Encoding value)
|
||||
{
|
||||
WriteLine("Not implemented: set_OutputEncoding");
|
||||
}
|
||||
|
||||
public static string get_Title()
|
||||
{
|
||||
WriteLine("Not implemented: get_Title");
|
||||
|
|
@ -568,53 +569,28 @@ namespace Cosmos.System_Plugs.System
|
|||
Write(aBool.ToString());
|
||||
}
|
||||
|
||||
public static void Write(char aChar)
|
||||
{
|
||||
var xConsole = GetConsole();
|
||||
if (xConsole == null)
|
||||
{
|
||||
// for now:
|
||||
return;
|
||||
}
|
||||
GetConsole().WriteChar(aChar);
|
||||
}
|
||||
/*
|
||||
* A .Net character can be effectevily more can one byte so calling the low level Console.Write() will be wrong as
|
||||
* it accepts only bytes, we need to convert it using the specified OutputEncoding but to do this we have to convert
|
||||
* it ToString first
|
||||
*/
|
||||
public static void Write(char aChar) => Write(aChar.ToString());
|
||||
|
||||
public static void Write(char[] aBuffer)
|
||||
{
|
||||
Write(aBuffer, 0, aBuffer.Length);
|
||||
}
|
||||
public static void Write(char[] aBuffer) => Write(aBuffer, 0, aBuffer.Length);
|
||||
|
||||
//public static void Write(decimal aBuffer) {
|
||||
// Write("No Decimal.ToString()");
|
||||
//}
|
||||
/* Decimal type is not working yet... */
|
||||
//public static void Write(decimal aDecimal) => Write(aDecimal.ToString());
|
||||
|
||||
public static void Write(double aDouble)
|
||||
{
|
||||
Write(aDouble.ToString());
|
||||
}
|
||||
public static void Write(double aDouble) => Write(aDouble.ToString());
|
||||
|
||||
public static void Write(float aFloat)
|
||||
{
|
||||
Write(aFloat.ToString());
|
||||
}
|
||||
public static void Write(float aFloat) => Write(aFloat.ToString());
|
||||
|
||||
public static void Write(int aInt)
|
||||
{
|
||||
Write(aInt.ToString());
|
||||
}
|
||||
public static void Write(int aInt) => Write(aInt.ToString());
|
||||
|
||||
public static void Write(long aLong)
|
||||
{
|
||||
Write(aLong.ToString());
|
||||
}
|
||||
public static void Write(long aLong) => Write(aLong.ToString());
|
||||
|
||||
public static void Write(object value)
|
||||
{
|
||||
if (value != null)
|
||||
{
|
||||
Write(value.ToString());
|
||||
}
|
||||
}
|
||||
/* Correct behaviour printing null should not throw NRE or do nothing but should print an empty string */
|
||||
public static void Write(object value) => Write((value ?? String.Empty));
|
||||
|
||||
public static void Write(string aText)
|
||||
{
|
||||
|
|
@ -624,28 +600,24 @@ namespace Cosmos.System_Plugs.System
|
|||
// for now:
|
||||
return;
|
||||
}
|
||||
GetConsole().Write(aText);
|
||||
|
||||
byte[] aTextEncoded = ConsoleOutputEncoding.GetBytes(aText);
|
||||
GetConsole().Write(aTextEncoded);
|
||||
}
|
||||
|
||||
public static void Write(uint aInt)
|
||||
{
|
||||
Write(aInt.ToString());
|
||||
}
|
||||
public static void Write(uint aInt) => Write(aInt.ToString());
|
||||
|
||||
public static void Write(ulong aLong)
|
||||
{
|
||||
Write(aLong.ToString());
|
||||
}
|
||||
public static void Write(ulong aLong) => Write(aLong.ToString());
|
||||
|
||||
public static void Write(string format, object arg0)
|
||||
{
|
||||
WriteLine("Not implemented: Write");
|
||||
}
|
||||
public static void Write(string format, object arg0) => Write(String.Format(format, arg0));
|
||||
|
||||
public static void Write(string format, params object[] arg)
|
||||
{
|
||||
WriteLine("Not implemented: Write");
|
||||
}
|
||||
public static void Write(string format, object arg0, object arg1) => Write(String.Format(format, arg0, arg1));
|
||||
|
||||
public static void Write(string format, object arg0, object arg1, object arg2) => Write(String.Format(format, arg0, arg1, arg2));
|
||||
|
||||
public static void Write(string format, object arg0, object arg1, object arg2, object arg3) => Write(String.Format(format, arg0, arg1, arg2, arg3));
|
||||
|
||||
public static void Write(string format, params object[] arg) => Write(String.Format(format, arg));
|
||||
|
||||
public static void Write(char[] aBuffer, int aIndex, int aCount)
|
||||
{
|
||||
|
|
@ -671,188 +643,60 @@ namespace Cosmos.System_Plugs.System
|
|||
}
|
||||
}
|
||||
|
||||
public static void Write(string format, object arg0, object arg1)
|
||||
{
|
||||
WriteLine("Not implemented: Write");
|
||||
}
|
||||
|
||||
public static void Write(string format, object arg0, object arg1, object arg2)
|
||||
{
|
||||
WriteLine("Not implemented: Write");
|
||||
}
|
||||
|
||||
public static void Write(string format, object arg0, object arg1, object arg2, object arg3)
|
||||
{
|
||||
WriteLine("Not implemented: Write");
|
||||
}
|
||||
|
||||
//You'd expect this to be on System.Console wouldn't you? Well, it ain't so we just rely on Write(object value)
|
||||
//public static void Write(byte aByte) {
|
||||
// Write(aByte.ToString());
|
||||
//}
|
||||
|
||||
#endregion
|
||||
#endregion
|
||||
|
||||
#region WriteLine
|
||||
#region WriteLine
|
||||
|
||||
public static void WriteLine()
|
||||
{
|
||||
var xConsole = GetConsole();
|
||||
if (xConsole == null)
|
||||
{
|
||||
// for now:
|
||||
return;
|
||||
}
|
||||
GetConsole().NewLine();
|
||||
}
|
||||
public static void WriteLine() => Write(Environment.NewLine);
|
||||
|
||||
public static void WriteLine(bool aBool)
|
||||
{
|
||||
var xConsole = GetConsole();
|
||||
if (xConsole == null)
|
||||
{
|
||||
// for now:
|
||||
return;
|
||||
}
|
||||
Write(aBool.ToString());
|
||||
GetConsole().NewLine();
|
||||
}
|
||||
public static void WriteLine(bool aBool) => WriteLine(aBool.ToString());
|
||||
|
||||
public static void WriteLine(char aChar)
|
||||
{
|
||||
var xConsole = GetConsole();
|
||||
if (xConsole == null)
|
||||
{
|
||||
// for now:
|
||||
return;
|
||||
}
|
||||
Write(aChar);
|
||||
GetConsole().NewLine();
|
||||
}
|
||||
public static void WriteLine(char aChar) => WriteLine(aChar.ToString());
|
||||
|
||||
public static void WriteLine(char[] aBuffer)
|
||||
{
|
||||
var xConsole = GetConsole();
|
||||
if (xConsole == null)
|
||||
{
|
||||
// for now:
|
||||
return;
|
||||
}
|
||||
Write(aBuffer, 0, aBuffer.Length);
|
||||
GetConsole().NewLine();
|
||||
}
|
||||
public static void WriteLine(char[] aBuffer) => WriteLine(new String(aBuffer));
|
||||
|
||||
//public static void WriteLine(decimal aDecimal) {
|
||||
// Write(aDecimal);
|
||||
// Global.Console.NewLine();
|
||||
//}
|
||||
/* Decimal type is not working yet... */
|
||||
//public static void WriteLine(decimal aDecimal) => WriteLine(aDecimal.ToString());
|
||||
|
||||
public static void WriteLine(double aDouble)
|
||||
{
|
||||
Write(aDouble.ToString());
|
||||
GetConsole().NewLine();
|
||||
}
|
||||
public static void WriteLine(double aDouble) => WriteLine(aDouble.ToString());
|
||||
|
||||
public static void WriteLine(float aFloat)
|
||||
{
|
||||
Write(aFloat.ToString());
|
||||
GetConsole().NewLine();
|
||||
}
|
||||
public static void WriteLine(float aFloat) => WriteLine(aFloat.ToString());
|
||||
|
||||
public static void WriteLine(int aInt)
|
||||
{
|
||||
Write(aInt.ToString());
|
||||
GetConsole().NewLine();
|
||||
}
|
||||
public static void WriteLine(int aInt) => WriteLine(aInt.ToString());
|
||||
|
||||
public static void WriteLine(long aLong)
|
||||
{
|
||||
Write(aLong.ToString());
|
||||
GetConsole().NewLine();
|
||||
}
|
||||
public static void WriteLine(long aLong) => WriteLine(aLong.ToString());
|
||||
|
||||
public static void WriteLine(object value)
|
||||
{
|
||||
if (value != null)
|
||||
{
|
||||
var xConsole = GetConsole();
|
||||
if (xConsole == null)
|
||||
{
|
||||
// for now:
|
||||
return;
|
||||
}
|
||||
Write(value.ToString());
|
||||
xConsole.NewLine();
|
||||
}
|
||||
}
|
||||
/* Correct behaviour printing null should not throw NRE or do nothing but should print an empty line */
|
||||
public static void WriteLine(object value) => Write((value ?? String.Empty) + Environment.NewLine);
|
||||
|
||||
public static void WriteLine(string aText)
|
||||
{
|
||||
var xConsole = GetConsole();
|
||||
if (xConsole == null)
|
||||
{
|
||||
// for now:
|
||||
return;
|
||||
}
|
||||
xConsole.Write(aText);
|
||||
xConsole.NewLine();
|
||||
}
|
||||
public static void WriteLine(string aText) => Write(aText + Environment.NewLine);
|
||||
|
||||
public static void WriteLine(uint aInt)
|
||||
{
|
||||
var xConsole = GetConsole();
|
||||
if (xConsole == null)
|
||||
{
|
||||
// for now:
|
||||
return;
|
||||
}
|
||||
Write(aInt.ToString());
|
||||
xConsole.NewLine();
|
||||
}
|
||||
public static void WriteLine(uint aInt) => WriteLine(aInt.ToString());
|
||||
|
||||
public static void WriteLine(ulong aLong)
|
||||
{
|
||||
var xConsole = GetConsole();
|
||||
if (xConsole == null)
|
||||
{
|
||||
// for now:
|
||||
return;
|
||||
}
|
||||
Write(aLong.ToString());
|
||||
xConsole.NewLine();
|
||||
}
|
||||
public static void WriteLine(ulong aLong) => WriteLine(aLong.ToString());
|
||||
|
||||
public static void WriteLine(string format, object arg0)
|
||||
{
|
||||
WriteLine("Not implemented: WriteLine");
|
||||
}
|
||||
public static void WriteLine(string format, object arg0) => WriteLine(String.Format(format, arg0));
|
||||
|
||||
public static void WriteLine(string format, params object[] arg)
|
||||
{
|
||||
WriteLine("Not implemented: WriteLine");
|
||||
}
|
||||
public static void WriteLine(string format, object arg0, object arg1) => WriteLine(String.Format(format, arg0, arg1));
|
||||
|
||||
public static void WriteLine(string format, object arg0, object arg1, object arg2) => WriteLine(String.Format(format, arg0, arg1, arg2));
|
||||
|
||||
public static void WriteLine(string format, object arg0, object arg1, object arg2, object arg3) => WriteLine(String.Format(format, arg0, arg1, arg2, arg3));
|
||||
|
||||
public static void WriteLine(string format, params object[] arg) => WriteLine(String.Format(format, arg));
|
||||
|
||||
public static void WriteLine(char[] aBuffer, int aIndex, int aCount)
|
||||
{
|
||||
Write(aBuffer, aIndex, aCount);
|
||||
GetConsole().NewLine();
|
||||
WriteLine();
|
||||
}
|
||||
|
||||
public static void WriteLine(string format, object arg0, object arg1)
|
||||
{
|
||||
WriteLine("Not implemented: WriteLine");
|
||||
}
|
||||
#endregion
|
||||
|
||||
public static void WriteLine(string format, object arg0, object arg1, object arg2)
|
||||
{
|
||||
WriteLine("Not implemented: WriteLine");
|
||||
}
|
||||
|
||||
public static void WriteLine(string format, object arg0, object arg1, object arg2, object arg3)
|
||||
{
|
||||
WriteLine("Not implemented: WriteLine");
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
#define COSMOSDEBUG
|
||||
//#define COSMOSDEBUG
|
||||
using System.Text;
|
||||
using Cosmos.Debug.Kernel;
|
||||
using Cosmos.System2_Plugs.System.Text;
|
||||
using IL2CPU.API.Attribs;
|
||||
|
||||
|
||||
/* This plug is needed only because Cosmos does not support Hashtable :-( */
|
||||
namespace Cosmos.System2_Plugs.System.Text
|
||||
{
|
||||
[Plug(Target = typeof(global::System.Text.Encoding))]
|
||||
|
|
|
|||
|
|
@ -24,24 +24,6 @@ namespace Cosmos.System_Plugs.System
|
|||
throw new NotImplementedException("ValueType.GetHashCodeOfPtr()");
|
||||
}
|
||||
|
||||
public static bool CanCompareBits(object obj)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public static bool FastEqualsCheck(object a, object b)
|
||||
{
|
||||
long aAsLong = (long) a;
|
||||
long bAsLong = (long) b;
|
||||
|
||||
return (a == b);
|
||||
}
|
||||
|
||||
public static bool Equals(ValueType aThis, object obj)
|
||||
{
|
||||
throw new NotImplementedException("ValueType.Equals()");
|
||||
}
|
||||
|
||||
//public static string ToString(ValueType aThis)
|
||||
//{
|
||||
// return "<ValueType.ToString not yet implemented!>";
|
||||
|
|
|
|||
Loading…
Reference in a new issue