Merge remote-tracking branch 'refs/remotes/CosmosOS/master'

This commit is contained in:
fanoI 2016-01-15 00:43:08 +01:00
commit a260690028
10 changed files with 225 additions and 169 deletions

View file

@ -6,122 +6,118 @@ At a first look, the directory structure of Cosmos is quite confusing. There are
### \Artwork
Just some Cosmos artwork. It contains Cosmos logo and YouTube channel logo.
This directory cointains it contains Cosmos logos and a YouTube channel logo.
### \Build
The build directory contains file used to build ISO images and Virtual Machines files and images. There is a folder with support files for BOCHS, for Virtual PC, for VMware, QEMU, for support for boot from ISO CD, USB, Ethernet (PXE).
This directory contains file used to build ISO images and Virtual Machines files and images, there is a folder with supporting files for BOCHS, for Virtual PC, for VMware, QEMU and for boot from ISO CD, USB, Ethernet (PXE).
### \Demos
This folder contains some Cosmos demo projects to help you.
This directory contains the Cosmos demos projects to help you in programming your operating system.
#### \Demos\Guess
This is the basic Cosmos demo project. It's a simple guess-the-number game.
This directory contains the basic Cosmos demo project, it's a simple guess-the-number game.
### \Docs
This folder contains the Cosmos documentation that you're currently reading.
This direcotry contains the Cosmos documentation that you're currently reading.
### \QA
This folder contains the old Cosmos build scripts.
It isn't used at the moment.
This directory contains the old Cosmos build scripts, it's no more used at the moment.
### \Resources
This folder contains the 3rd party libraries that Cosmos uses.
This directory contains the third party libraries that Cosmos uses.
### \Setup
Contains scripts and languages to build the Cosmos User Kit Installer. The creation (and execution) of the installer is started from \install-VS2015.bat.
This directory contains all the scripts and languages to build the Cosmos User Kit Installer. The creation (and execution) of the installer is started from '.\install-VS2015.bat'.
### \Source
Contains all the code of the Cosmos project. You will spend most of your time here.including the Compiler, Installer, Debugger and the main features of Cosmos. It also contains unused code.
It also contains the solution file of Cosmos and some support libraries.
This directory contains all the code of the Cosmos project. You will spend most of your time here, including the Compiler, Installer, Debugger and the main features of Cosmos. It's contains unused code, the solution file of Cosmos and some support libraries.
#### \Source\Cosmos.Assembler
This folder contains the Cosmos assembler, the thing that writes generated assembly code in the kernel file.
This directory contains the Cosmos assembler, the thing that writes generated assembly code in the kernel file.
#### \Source\Cosmos.Build
Any code related to the building process of Cosmos with the exception of
IL2CPU which is however executed from here. Contains code for executing ld,
This directory contains any code related to the building process of Cosmos with the exception of
IL2CPU which is however executed from here, it's contains code for executing ld,
nasm, makeiso, MSBuild, and others.
#### \Source\Cosmos.Common
Contains various helpers and files for Cosmos.
This directory contains various helpers and files for Cosmos.
#### \Source\Cosmos.Core
This is the core assembly of cosmos. It contains code for managing CPU, IO groups, interrupts, etc.
This directory contains the core assembly of cosmos. It contains code for managing CPU, IO groups, interrupts, etc..
##### \Source\Cosmos.Core.Plugs
This folder contains the low-level plugs for Cosmos.Core.
This directory contains the low-level plugs for Cosmos.Core.
#### \Source\Cosmos.Debug
Contains the Debug Engine and Connector code. Also gives the possibility to
work with GDB. For more informations about debugging see
[Debugger](debugger.htm)
This directory contains the Debug Engine and Connector code and also, it's gives the possibility to
work with GDB. For more informations about debugging see the [Debugger](debugger.htm) page
#### \Source\Cosmos.Deploy
Contains the deployment code.
This directory contains the deployment code.
#### \Source\Cosmos.HAL
Contains code for Csosmos HAL (Hardware Abstraction Layer), means the hardware drivers for graphics, networking, HDD, etc.
This directory contains the Cosmos HAL (Hardware Abstraction Layer), means the hardware drivers for graphics, networking, HDD, etc.
#### \Source\Cosmos.IL2CPU
Code for the IL2CPU program. It's the Cosmos AOT Compiler. For more
informations about AOT compilers and IL2CPU see [IL2CPU](https://github.com/CosmosOS/Cosmos/blob/master/Docs/Compiler/il2cpu.md)
This directory contains the code for the IL2CPU program, the Cosmos AOT Compiler. For more
informations about the AOT compilers and IL2CPU, see [IL2CPU](https://github.com/CosmosOS/Cosmos/blob/master/Docs/Compiler/il2cpu.md) documentation.
#### \Source\Cosmos.System
Contains the system-level code for Cosmos. It contains wrappers for Console, networking and filesystem. It also contains the base class for Kernel.
This directory contains the system-level code for Cosmos. It contains wrappers for Console, networking, filesystem and also contains the base class for Kernel.
#### \Source\Cosmos.VS
Contains the code for the integration with Visual Studio. Adds support for the Cosmos Kernel project type, and custom build steps.
This directory contains the code for the integration with Visual Studio. Adds support for the Cosmos Kernel project type, and custom build steps.
##### \Source\Cosmos.VS.Debug
Contains the code for the Visual Studio debugger integration.
This directory contains the code for the Visual Studio debugger integration.
##### \Source\Cosmos.VS.Package
Contains the code for the Visual Studio package of Cosmos.
This directory contains the code for the Visual Studio package of Cosmos.
##### \Source\Cosmos.VS.Windows
Contains the Cosmos windows in VS, like the Registers window.
This directory contains the Cosmos windows in Visual Studio, like the Registers Window.
##### \Source\Cosmos.VS.Windows.Test
Contains the tests for Cosmos.VS.Windows.
This directory contains the tests for Cosmos.VS.Windows.
##### \Source\Cosmos.VS.Wizards
Contains the project wizards of Cosmos.
This directory contains the wizards projects of Cosmos.
#### \Source\Unused
This folder contains work-in-progress or deprecated features, like FAT, VGA and Networking.
This directory contains work-in-progress or deprecated features, like FAT, VGA, Networking and more.
#### \Source\XSharp
This piece of code gives us the possibility to write Assembly in C#. In this way we can keep all in an OO-like style.
This directory contains code for the possibility to write Assembly in C#. In this way we can keep all in an OO-like style.
#### \Users
Custom code playground. You can put your examples, random code, and toughts
This directory contains the custom code playground. You can put your examples, random code, and toughts
here

View file

@ -104,7 +104,7 @@ namespace Cosmos.Compiler.Tests.Exceptions
{
TestReturnSimpleException();
}
catch (Exception ex) where (xShouldCatch == true)
catch (Exception ex) when (xShouldCatch == true)
{
Console.WriteLine("Caught filtered exception.");
mDebugger.Send("EXCEPTION: " + ex.Message);
@ -136,7 +136,7 @@ namespace Cosmos.Compiler.Tests.Exceptions
{
TestReturnSimpleException();
}
catch (Exception ex) where (xShouldCatch == true)
catch (Exception ex) when (xShouldCatch == true)
{
Console.WriteLine("Caught filtered exception.");
mDebugger.Send("EXCEPTION: " + ex.Message);

View file

@ -1,69 +1,28 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using System.IO;
using Cosmos.Common.Extensions;
using Cosmos.System.FileSystem.VFS;
using Cosmos.TestRunner;
using System.Linq;
using Sys = Cosmos.System;
namespace SentinelKernel
{
using Cosmos.System.FileSystem;
public class Kernel : Sys.Kernel
{
private VFSBase myVFS;
protected override void BeforeRun()
{
Console.WriteLine("Cosmos booted successfully.");
myVFS = new CosmosVFS();
VFSManager.RegisterVFS(myVFS);
}
protected override void Run()
{
Console.WriteLine("Run");
try
{
var xRoot = Path.GetPathRoot(@"0:\test");
bool xTest = Directory.Exists("0:\\test");
Console.WriteLine("After test");
Assert.IsTrue(xTest, "Folder does not exist!");
var xList = new List<string> { "A", "B" };
Console.WriteLine("Folder exists!");
xTest = Directory.Exists("0:\\test\\DirInTest");
Assert.IsTrue(xTest, "Subfolder doesn't exist!");
xTest = File.Exists(@"0:\KudzU.txt");
Assert.IsTrue(xTest, @"\Kudzu.txt not found!");
string[] xArray = new[] { "A", "B" };
// var xItem = xList.First(); // mkrefany
Console.WriteLine("Kudzu.txt found!");
Console.Write("File contents of Kudzu.txt: ");
Console.WriteLine(File.ReadAllText(@"0:\Kudzu.txt"));
// File.WriteAllText(@"0:\Kudzu.txt", "Test FAT write.");
// Console.WriteLine(File.ReadAllText(@"0:\Kudzu.txt"));
//xTest = File.Exists(@"0:\Test\DirInTest\Readme.txt");
//if (!xTest)
//{
// Console.WriteLine(@"\Test\DirInTest\Readme.txt not found!");
// return;
//}
//Console.WriteLine(@"Test\DirInTest\Readme.txt found!");
//Console.WriteLine(@"File contents of Test\DirInTest\Readme.txt: ");
//Console.WriteLine(File.ReadAllText(@"0:\Test\DirInTest\Readme.txt"));
Stop();
}
catch (Exception e)
{
Console.WriteLine("Exception occurred:");
Console.WriteLine(e.Message);
}
string xItem = string.Join("|", xArray);
Console.WriteLine(xItem);
}
}
}

View file

@ -43,7 +43,7 @@
<VMware_OutputPath>bin\Debug\</VMware_OutputPath>
<VMware_EnableGDB>False</VMware_EnableGDB>
<VMware_StartCosmosGDB>False</VMware_StartCosmosGDB>
<EnableBochsDebug>True</EnableBochsDebug>
<EnableBochsDebug>False</EnableBochsDebug>
<Bochs_Name>SentinelKernelBoot</Bochs_Name>
<Bochs_Description>Use Bochs emulator to deploy and debug.</Bochs_Description>
<Bochs_Deployment>ISO</Bochs_Deployment>
@ -56,9 +56,9 @@
<Bochs_OutputPath>bin\Debug\</Bochs_OutputPath>
<Bochs_EnableGDB>False</Bochs_EnableGDB>
<Bochs_StartCosmosGDB>false</Bochs_StartCosmosGDB>
<Bochs_EnableBochsDebug>True</Bochs_EnableBochsDebug>
<Bochs_EnableBochsDebug>False</Bochs_EnableBochsDebug>
<VMware_EnableBochsDebug>True</VMware_EnableBochsDebug>
<TraceAssemblies>All</TraceAssemblies>
<TraceAssemblies>User</TraceAssemblies>
<VMware_TraceAssemblies>All</VMware_TraceAssemblies>
<IntelEdison_Name>SentinelKernelBoot</IntelEdison_Name>
<IntelEdison_Description>Connect to Intel Edison device to deploy and debug.</IntelEdison_Description>
@ -102,7 +102,7 @@
<USB_EnableGDB>True</USB_EnableGDB>
<USB_StartCosmosGDB>True</USB_StartCosmosGDB>
<USB_EnableBochsDebug>True</USB_EnableBochsDebug>
<Bochs_TraceAssemblies>All</Bochs_TraceAssemblies>
<Bochs_TraceAssemblies>User</Bochs_TraceAssemblies>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\source\Cosmos.Core.Plugs\Cosmos.Core.Plugs.csproj">

View file

@ -1,42 +1,40 @@
### C# Open Source Managed Operating System
### Cosmos (C# Open Source Managed Operating System)
[![Join the chat at https://gitter.im/CosmosOS/Cosmos](https://img.shields.io/badge/GITTER-Join%20Chat-brightgreen.svg)](https://gitter.im/CosmosOS/Cosmos?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
[![GitHub release](https://img.shields.io/github/release/CosmosOS/Cosmos.svg)](https://github.com/CosmosOS/Cosmos/releases)
[We are currently migrating from codeplex](http://cosmos.codeplex.com/)
Cosmos is an operating system "construction kit", built from the ground up around the IL2CPU compiler in C# and our home-brewed language called X#.
It's current stage is only usable for academic work. Some day Cosmos will be ready for production work, but to reach that stage we need more developers. Specifically, we need a few more low level developers to help the few core developers who are currently overwhelmed with work.
It's current stage is only usable for academic work. Some day Cosmos will be ready for production work, but to reach that stage we need more developers. Specifically, we need a few more low-level developers to help the few core developers who are currently overwhelmed with work.
Download
Downloads:
---------
Cosmos is available in two forms:
* **User Kit** - User Kit allows you to develop your own custom operating system in Visual Studio.
If you are new to Cosmos, [start here](https://github.com/CosmosOS/Cosmos/wiki). [Latest Release](https://github.com/CosmosOS/Cosmos/releases/latest)
* **Dev Kit** - Dev Kit is the full Cosmos source with build tools.
If you need to modify core Cosmos functions or modify built in drivers, boot, compiler, etc then you will need to use Dev Kit.
[How to build the Dev Kit](https://github.com/CosmosOS/Cosmos/wiki/Devkit) - Building from source is easy with our automated builder.
Cosmos is available in two flavors:
* **User Kit** - The User Kit is used to develop your operating system in Visual Studio.
If you are new to Cosmos, you can learn [here](https://github.com/CosmosOS/Cosmos/wiki). [Latest Release anvailable](https://github.com/CosmosOS/Cosmos/releases/latest)
* **Development Kit** - The Development Kit is the full Cosmos source and build tools.
If you need to modify the Cosmos core functions or modify built-in drivers, boot, compiler, etc.. you will need to use Development Kit.
[Tutorial for building the Development Kit](https://github.com/CosmosOS/Cosmos/wiki/Devkit) - Building from the source is easy with our automated builder.
Getting Started
---------
* [Cosmos Documentation](https://github.com/CosmosOS/Cosmos/wiki)
* Video: [Using VS Express Editions](https://www.youtube.com/watch?v=NNl8S2xOtdo)
* [FAQ](https://github.com/CosmosOS/Cosmos/wiki/FAQ)
* [Documentation for Cosmos](https://github.com/CosmosOS/Cosmos/wiki)
* Video Tutorial for [using Visual Studio Express Editions](https://www.youtube.com/watch?v=NNl8S2xOtdo)
* [FAQ (Frequently Asked Questions)](https://github.com/CosmosOS/Cosmos/wiki/FAQ)
* [Low Hanging Fruit](https://github.com/CosmosOS/Cosmos/issues?q=is%3Aopen+is%3Aissue+label%3Acomplexity_low+sort%3Acreated-asc) - Looking for something easy to do and prove your worth in Cosmos? Here are a few easy tasks we have on our to do list that are also of importance to us.
Joining Cosmos
Joining and helping Cosmos
---------
* [Gitter.im](https://gitter.im/CosmosOS/Cosmos) - Live chat. Click the green `Join Chat` badge at the top of this file. As with the IRC and CodePlex chatroom, please be patient if we don't respond immediately (no pinging).
* [Yahoo Group](https://tech.groups.yahoo.com/group/Cosmos-Dev) - Email Discussion List. To prevent spambots from spamming our list we ask you introduce yourself to join. Please mention something specific to Cosmos. "Hey I want to join" won't get you in....
* [Gitter.im](https://gitter.im/CosmosOS/Cosmos) - The Live Chat: Click the green `Join Chat` badge at the top of this file. As with the IRC and CodePlex chat, please be patient if we don't respond immediately (no pinging).
* [Yahoo Group](https://tech.groups.yahoo.com/group/Cosmos-Dev) - Email Discussion List: To prevent spam-bots from spamming, we ask you introduce yourself to join. Please mention something specific to Cosmos. For example: "Hey, I want to join" and will won't get you in....
* [Facebook](http://www.facebook.com/pages/Cosmos-Operating-System/10235842745) - Like us to see frequent updates of what is going on with Cosmos.
* [YouTube Channel](https://www.youtube.com/channel/UCsSKtqjfpSR0B3Ov4cBIarQ/) - Follow use to see useful videos.
* [YouTube Channel](https://www.youtube.com/channel/UCsSKtqjfpSR0B3Ov4cBIarQ/) - Follow to see useful videos and help you programming your operating system.
* [Resources](https://github.com/CosmosOS/Cosmos/wiki/Resources) - More Cosmos related links.
@ -48,14 +46,14 @@ Articles and Resources
* [Intro to Plugs](https://github.com/CosmosOS/Cosmos/wiki/Intro-to-Plugs)
* [X86 Assembly Debugger Preview](https://github.com/CosmosOS/Cosmos/wiki/Visual-Studio-X86-Assembly-Debugger)
* [Making a Remote PC Slave for Debugging or Fun](http://www.codeproject.com/Articles/413942/Making-a-Remote-PC-Slave-for-Debugging-or-Fun) (old article, code deprecated)
* [Cosmos Tutorials](https://int0x10.com/forums/forum-22.html)
* [Cosmos Projects](https://github.com/CosmosOS/Cosmos/wiki/Cosmos-Projects)
* [Tutorials for Cosmos](https://int0x10.com/forums/forum-22.html)
* [Projects for Cosmos](https://github.com/CosmosOS/Cosmos/wiki/Cosmos-Projects)
Publicity
---------
* [Mary Jo Foley - Cosmos: An open-source .Net-based microkernel OS is born](http://www.zdnet.com/blog/microsoft/cosmos-an-open-source-net-based-microkernel-os-is-born/1162)
* [Mary Jo Foley - Cosmos: An open-source .Net-based micro-kernel OS is born](http://www.zdnet.com/blog/microsoft/cosmos-an-open-source-net-based-microkernel-os-is-born/1162)
* [Scott Hanselman - Tiny Managed Operating System Edition](http://www.hanselman.com/blog/TheWeeklySourceCode15TinyManagedOperatingSystemEdition.aspx)

View file

@ -1,9 +1,9 @@
using System;
using System.Globalization;
using Cosmos.Common;
using Cosmos.Debug.Kernel;
using Cosmos.IL2CPU.Plugs;
using Cosmos.Common;
using Cosmos.Debug.Kernel;
using Cosmos.IL2CPU.Plugs;
namespace Cosmos.Core.Plugs.System
{
@ -178,7 +178,6 @@ namespace Cosmos.Core.Plugs.System
bool xParamNumberDone = true;
for (int i = 0; i < xCharArray.Length; i++)
{
mDebugger.Send(aFormat[i].ToString());
if (xFoundPlaceholder)
{
if (xCharArray[i] == '{')
@ -213,9 +212,9 @@ namespace Cosmos.Core.Plugs.System
else if (xCharArray[i] == '{')
{
mDebugger.SendInternal("Found opening placeholder");
xFoundPlaceholder = true;
xParamNumberDone = false;
xParamNumber = string.Empty;
xFoundPlaceholder = true;
xParamNumberDone = false;
xParamNumber = string.Empty;
}
else
{
@ -228,7 +227,21 @@ namespace Cosmos.Core.Plugs.System
public static bool StartsWith(string aThis, string aSubstring, StringComparison aComparison)
{
throw new NotImplementedException();
Char[] di = aThis.ToCharArray();
Char[] ci = aSubstring.ToCharArray();
if (aSubstring.Length > aThis.Length)
{
return false;
}
for (int i = 0; i < ci.Length; i++)
{
if (di[i] != ci[i])
{
return false;
}
}
return true;
}
public static string PadHelper(string aThis, int totalWidth, char paddingChar, bool isRightPadded)
@ -464,11 +477,36 @@ namespace Cosmos.Core.Plugs.System
public static bool Contains(string aThis, string value)
{
if (aThis.IndexOf(value) != -1)
Char[] di = aThis.ToCharArray();
Char[] ci = value.ToCharArray();
if (value.Length == aThis.Length)
{
if (value == aThis)
{
return true;
}
else
{
return false;
}
}
else if (!(value.Length > aThis.Length) && (value.Length != aThis.Length))
{
for (int i = 0; i < aThis.Length; i++)
{
if (di[i] == ci[0])
{
for (int j = 1; j < value.Length; j++)
{
if (di[i + j] != ci[j])
{
return false;
}
}
return true;
}
}
}
return false;
}
@ -479,31 +517,32 @@ namespace Cosmos.Core.Plugs.System
public static bool EndsWith(string aThis, string aSubStr, StringComparison aComparison)
{
if (aSubStr == null)
Char[] di = aThis.ToCharArray();
Char[] ci = aSubStr.ToCharArray();
if (aThis.Length == aSubStr.Length)
{
throw new ArgumentNullException("aSubStr");
}
if (aThis == aSubStr)
{
return true;
}
if (aSubStr.Length == 0)
{
return true;
return false;
}
int xLastIdx = aThis.Length - aSubStr.Length;
for (int i = 0; i < aSubStr.Length; i++)
else if (aThis.Length > aSubStr.Length)
{
if (aThis[xLastIdx + i] != aSubStr[i])
return false;
}
else
{
for (int i = aThis.Length - aSubStr.Length; i < aThis.Length; i++)
{
if (di[aThis.Length - aSubStr.Length + i] != ci[i])
{
return false;
}
}
return true;
}
}
// System.Int32 System.String.IndexOf(System.String, System.Int32, System.Int32, System.StringComparison)
@ -604,15 +643,15 @@ namespace Cosmos.Core.Plugs.System
{
mDebugger.SendInternal("nativeCompareOrdinalEx : aStrA is null");
if (aStrB == null)
{
{
mDebugger.SendInternal($"nativeCompareOrdinalEx : aStrB is null");
mDebugger.SendInternal($"nativeCompareOrdinalEx : returning 0");
return 0;
}
return 0;
}
mDebugger.SendInternal($"nativeCompareOrdinalEx : aStrB is not null");
mDebugger.SendInternal($"nativeCompareOrdinalEx : returning -1");
return -1;
}
return -1;
}
if (aStrB == null)
{
mDebugger.SendInternal("nativeCompareOrdinalEx : aStrA is not null");
@ -652,11 +691,18 @@ namespace Cosmos.Core.Plugs.System
public static bool StartsWith(string aThis, string aSubStr, bool aIgnoreCase, CultureInfo aCulture)
{
for (int i = 0; i < aSubStr.Length; i++)
Char[] di = aThis.ToCharArray();
Char[] ci = aSubStr.ToCharArray();
if (aSubStr.Length > aThis.Length)
{
if (aThis[i] != aSubStr[i])
return false;
}
for (int i = 0; i < ci.Length; i++)
{
if (di[i] != ci[i])
{
return false;
}
}
return true;
@ -722,5 +768,29 @@ namespace Cosmos.Core.Plugs.System
{
return new string(new char[length]);
}
public static string TrimStart(string aThis, string aSubStr)
{
char[] ci = aThis.ToCharArray();
char[] di = aSubStr.ToCharArray();
if(aThis.StartsWith(aSubStr))
{
if(aThis != aSubStr)
{
char[] oi = new char[ci.Length - di.Length];
for(int i=0; i < ci.Length - di.Length; i++)
{
oi[i] = ci[i + di.Length];
}
return oi.ToString();
}
return string.Empty;
}
throw new ArgumentNullException();
}
}
}
}

View file

@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using Microsoft.Win32;
@ -19,11 +20,11 @@ namespace Cosmos.Debug.Common
/// <summary>Get a flag that tell whether Bochs is enabled on this system.</summary>
public static bool BochsEnabled
{
get
{
return (null != BochsExe);
//return false;
}
get
{
return (null != BochsExe);
//return false;
}
}
/// <summary>Get a descriptor for the Bochs emulator with debugger support program. The return value
@ -42,6 +43,44 @@ namespace Cosmos.Debug.Common
private set;
}
public static void ExtractBochsDebugSymbols(string xInputFile, string xOutputFile)
{
try
{
int i = 0;
using (var reader = new StreamReader(xInputFile))
{
using (var writer = new StreamWriter(xOutputFile))
{
Console.WriteLine($"Exporting symbols for Bochs: {xInputFile} -> {xOutputFile}");
bool startSymbolTable = false;
while (!reader.EndOfStream)
{
string line = reader.ReadLine();
if (startSymbolTable)
{
string[] items = line.Split(new[] { " " }, StringSplitOptions.RemoveEmptyEntries);
if (items.Length > 1)
{
writer.WriteLine($"{items.First()} {items.Last()}");
i++;
}
}
else if (line.Trim().ToUpper().Contains("SYMBOL TABLE"))
{
startSymbolTable = true;
}
}
Console.WriteLine($"Exported {i} symbols.");
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
/// <summary>Retrieve installation path for Bochs and initialize the <see cref="BochsExe"/> property.
/// Search is performed using the registry and rely on the shell command defined for the
/// BochsConfigFile.</summary>

View file

@ -43,16 +43,7 @@ namespace Cosmos.System.Plugs.System.IO
{
Global.mFileSystemDebugger.SendInternal("Converting " + aText + " to UFT8");
var xBuff = aText.GetUtf8Bytes(0, (uint)aText.Length);
#if COSMOSDEBUG
for (int i = 0; i < xBuff.Length; i++)
{
Global.mFileSystemDebugger.SendInternal("xBuff is", xBuff[i].ToString("0:x2"));
}
#endif
Global.mFileSystemDebugger.SendInternal("Writing bytes");
xFS.Write(xBuff, 0, xBuff.Length);
Global.mFileSystemDebugger.SendInternal("Bytes written");
}
@ -64,7 +55,7 @@ namespace Cosmos.System.Plugs.System.IO
using (var xFS = new FileStream(aFile, FileMode.Append))
{
Global.mFileSystemDebugger.SendInternal("Converting " + aText + " to UFT8");
var xBuff = aText.GetUtf8Bytes(0, (uint)aText.Length);
var xBuff = aText.GetUtf8Bytes(0, (uint) aText.Length);
Global.mFileSystemDebugger.SendInternal("Writing bytes");
xFS.Write(xBuff, 0, xBuff.Length);
Global.mFileSystemDebugger.SendInternal("Bytes written");
@ -75,12 +66,13 @@ namespace Cosmos.System.Plugs.System.IO
{
String text = ReadAllText(aFile);
Global.mFileSystemDebugger.SendInternal("Read content\n" + text);
Global.mFileSystemDebugger.SendInternal("Read contents");
Global.mFileSystemDebugger.SendInternal(text);
String []result = text.Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
#if COSMOSDEBUG
Global.mFileSystemDebugger.SendInternal("content as array of lines:");
#if COSMOSDEBUG
for (int i = 0; i < result.Length; i++)
Global.mFileSystemDebugger.SendInternal(result[i]);
#endif
@ -97,7 +89,8 @@ namespace Cosmos.System.Plugs.System.IO
text = String.Concat(text, contents[i], Environment.NewLine);
}
Global.mFileSystemDebugger.SendInternal("Writing contents\n" + text);
Global.mFileSystemDebugger.SendInternal("Writing contents");
Global.mFileSystemDebugger.SendInternal(text);
WriteAllText(aFile, text);
}
@ -114,7 +107,7 @@ namespace Cosmos.System.Plugs.System.IO
throw new Exception("Couldn't read complete file!");
}
Global.mFileSystemDebugger.SendInternal("Bytes read");
return xBuff;
}
}
@ -125,7 +118,7 @@ namespace Cosmos.System.Plugs.System.IO
{
// This variable is not needed 'aBytes' is already a Byte[]
//var xBuff = aBytes;
xFS.Write(aBytes, 0, aBytes.Length);
}
}

View file

@ -414,7 +414,6 @@ namespace Cosmos.System.FileSystem.FAT
internal void Write(ulong aFirstCluster, byte[] aData, ulong aSize = 0, ulong aOffset = 0)
{
Global.mFileSystemDebugger.SendInternal("low level Write() called");
if (aSize == 0)
{
aSize = BytesPerCluster;

View file

@ -15,7 +15,7 @@ namespace Cosmos.System.FileSystem.FAT
protected byte[] mReadBuffer;
//TODO: In future we might read this in as needed rather than
// all at once. This structure will also consume 2% of file size in RAM
// all at once. This structure will also consume 2% of file size in RAM
// (for default cluster size of 2kb, ie 4 bytes per cluster)
// so we might consider a way to flush it and only keep parts.
// Example, a 100 MB file will require 2MB for this structure. That is
@ -30,20 +30,22 @@ namespace Cosmos.System.FileSystem.FAT
public FatStream(FatDirectoryEntry aEntry)
{
Global.mFileSystemDebugger.SendInternal("FatStream with entry " + aEntry);
Global.mFileSystemDebugger.SendInternal($"FatStream with entry {aEntry}");
mDirectoryEntry = aEntry;
mFS = mDirectoryEntry.GetFileSystem();
mSize = mDirectoryEntry.mSize;
Global.mFileSystemDebugger.SendInternal("FatStream with mSize " + mSize);
Global.mFileSystemDebugger.SendInternal("FatStream with mSize {mSize}");
Global.mFileSystemDebugger.SendInternal("Getting FatTable");
// We get always the FatTable if the file is empty too
mFatTable = mDirectoryEntry.GetFatTable();
mFatTable = mDirectoryEntry.GetFatTable();
// What to do if this should happen? Throw exception?
if (mFatTable == null)
{
Global.mFileSystemDebugger.SendInternal("FatTable got but it is null!");
}
}
public override bool CanSeek
@ -197,7 +199,7 @@ namespace Cosmos.System.FileSystem.FAT
protected void Write(byte[] aBuffer, long aOffset, long aCount)
{
Global.mFileSystemDebugger.SendInternal($"FatStream.Write : aCount = {aCount}, aOffset = {aOffset}");
Global.mFileSystemDebugger.SendInternal($"Write() called aCount = {aCount}, aOffset = {aOffset}");
if (aCount < 0)
{
throw new ArgumentOutOfRangeException("aCount");
@ -255,4 +257,4 @@ namespace Cosmos.System.FileSystem.FAT
mPosition += (ulong)aOffset;
}
}
}
}