public static void Update() {
MainCanvas.DrawImage(Wallpaper, 0, 0);
MainCanvas.DrawImage(Cursor, (int)MouseManager.X, (int)MouseManager.Y);
MainCanvas.Display();
}
public static void StartGUI()
{
MainCanvas = new SVGAIICanvas(new Mode((int)(uint)ScreenSizeX, (int)(uint)ScreenSizeY, ColorDepth.ColorDepth32));
MouseManager.ScreenWidth = (uint)ScreenSizeX;
MouseManager.ScreenHeight = (uint)ScreenSizeY;
MouseManager.X = (uint)ScreenSizeX /2;
MouseManager.Y = (uint)ScreenSizeY / 2;
}
}
using IL2CPU.API.Attribs;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection.Metadata;
using System.Text;
using System.Threading.Tasks;
namespace CosmosMiniOS.Resources
{
internal class Files
{
[ManifestResourceStream(ResourceName = "CosmosMiniOS.Resources.w1.bmp")] public static byte[] CosmosMiniOSBackgroundRaw;
[ManifestResourceStream(ResourceName = "CosmosMiniOS.Resources.cursor1.bmp")] public static byte[] CosmosMiniOSCursor;
}
}
here is a resource code
namespace CosmosMiniOS
{
public sealed class Shell
{
private readonly RamFileSystem _fileSystem = new RamFileSystem();
private readonly OpRuntime _opRuntime;
public Shell()
{
_opRuntime = new OpRuntime(_fileSystem);
}
public void Execute(string input)
{
ExecuteInternal(input, 0);
}
private void ExecuteInternal(string input, int depth)
{
if (input == null)
{
return;
}
input = input.Trim();
if (input == "")
{
return;
}
string command = input;
string args = "";
int spaceIndex = input.IndexOf(' ');
if (spaceIndex >= 0)
{
command = ToLowerAscii(input.Substring(0, spaceIndex));
args = input.Substring(spaceIndex + 1).Trim();
}
else
{
command = ToLowerAscii(input);
}
if (command == "help")
{
ShowHelp();
}
else if (command == "about" || command == "ver")
{
ShowAbout();
}
else if (command == "clear" || command == "cls")
{
Console.Clear();
}
else if (command == "echo")
{
Console.WriteLine(args);
}
else if (command == "pause")
{
Console.WriteLine("Devam etmek icin Enter'a bas.");
Console.ReadLine();
}
else if (command == "mem")
{
_fileSystem.Info();
}
else if (command == "calc")
{
Calculate(args);
}
else if (command == "ls" || command == "dir")
{
_fileSystem.List();
}
else if (command == "touch")
{
_fileSystem.Touch(args);
}
else if (command == "write")
{
WriteFile(args);
}
else if (command == "append")
{
AppendFile(args);
}
else if (command == "cat" || command == "type")
{
_fileSystem.Read(args);
}
else if (command == "copy")
{
CopyFile(args);
}
else if (command == "ren" || command == "rename")
{
RenameFile(args);
}
else if (command == "del")
{
_fileSystem.Delete(args);
}
else if (command == "fsinfo")
{
_fileSystem.Info();
}
else if (command == "apps")
{
_opRuntime.ListApps();
}
else if (command == "run")
{
RunTarget(args, depth);
}
else if (command == "opengui")
{
Kernel.RunGui = true;
Gui.Gui.Wallpaper = new Bitmap(Resources.Files.CosmosMiniOSBackgroundRaw);
Gui.Gui.Cursor = new Bitmap(Resources.Files.CosmosMiniOSCursor);
Gui.Gui.StartGUI();
}
else if (command == "reboot")
{
Sys.Power.Reboot();
}
else if (command == "shutdown")
{
Sys.Power.Shutdown();
}
else
{
Console.WriteLine("Bilinmeyen komut: " + command);
}
}
private void RunTarget(string args, int depth)
{
if (EndsWithAscii(args, ".op"))
{
_opRuntime.Run(args);
return;
}
if (EndsWithAscii(args, ".ops"))
{
RunScript(args, depth);
return;
}
Console.WriteLine("Kullanim: run hello.op veya run start.ops");
}
private void RunScript(string fileName, int depth)
{
if (depth >= 4)
{
Console.WriteLine("Script ic ice calistirma siniri asildi.");
return;
}
string content;
if (!_fileSystem.TryReadText(fileName, out content))
{
Console.WriteLine("Script dosyasi bulunamadi.");
return;
}
int start = 0;
int index = 0;
while (index <= content.Length)
{
if (index == content.Length || content[index] == ';')
{
string line = content.Substring(start, index - start).Trim();
if (line != "")
{
ExecuteInternal(line, depth + 1);
}
start = index + 1;
}
index++;
}
}
private static void ShowHelp()
{
Console.WriteLine("Komutlar:");
Console.WriteLine(" help, ver, cls, echo, pause, mem");
Console.WriteLine(" dir/ls, type/cat, copy, ren, del");
Console.WriteLine(" touch, write, append, fsinfo");
Console.WriteLine(" apps, run <app.op>, run <file.ops>");
Console.WriteLine(" calc, reboot, shutdown");
}
private static void ShowAbout()
{
Console.WriteLine("Cosmos Mini OS 0.2");
Console.WriteLine("Kernel: Cosmos.System.Kernel");
Console.WriteLine("Dosya sistemi: RAM FS");
Console.WriteLine("Uygulama tipi: .op operable");
}
private void WriteFile(string args)
{
string name;
string text;
if (!ReadTwoParts(args, out name, out text))
{
Console.WriteLine("Kullanim: write not.txt merhaba");
return;
}
_fileSystem.Write(name, text);
}
private void AppendFile(string args)
{
string name;
string text;
if (!ReadTwoParts(args, out name, out text))
{
Console.WriteLine("Kullanim: append not.txt merhaba");
return;
}
_fileSystem.Append(name, text);
}
private void CopyFile(string args)
{
string source;
string target;
if (!ReadTwoParts(args, out source, out target))
{
Console.WriteLine("Kullanim: copy a.txt b.txt");
return;
}
_fileSystem.Copy(source, target);
}
private void RenameFile(string args)
{
string source;
string target;
if (!ReadTwoParts(args, out source, out target))
{
Console.WriteLine("Kullanim: ren eski.txt yeni.txt");
return;
}
_fileSystem.Rename(source, target);
}
private static bool ReadTwoParts(string args, out string first, out string rest)
{
first = "";
rest = "";
if (args == null)
{
return false;
}
args = args.Trim();
int spaceIndex = args.IndexOf(' ');
if (spaceIndex < 0)
{
return false;
}
first = args.Substring(0, spaceIndex).Trim();
rest = args.Substring(spaceIndex + 1).Trim();
return first != "" && rest != "";
}
private static void Calculate(string args)
{
string leftText;
string operation;
string rightText;
if (!ReadCalcParts(args, out leftText, out operation, out rightText))
{
Console.WriteLine("Kullanim: calc 10 + 5");
return;
}
int left;
int right;
if (!TryParseInt(leftText, out left) || !TryParseInt(rightText, out right))
{
Console.WriteLine("Sadece tam sayilar destekleniyor.");
return;
}
if (operation == "+")
{
Console.WriteLine(left + right);
}
else if (operation == "-")
{
Console.WriteLine(left - right);
}
else if (operation == "*")
{
Console.WriteLine(left * right);
}
else if (operation == "/")
{
if (right == 0)
{
Console.WriteLine("Sifira bolme yapilamaz.");
return;
}
Console.WriteLine(left / right);
}
else
{
Console.WriteLine("Desteklenen islemler: + - * /");
}
}
private static bool ReadCalcParts(string args, out string left, out string operation, out string right)
{
left = "";
operation = "";
right = "";
args = args.Trim();
int firstSpace = args.IndexOf(' ');
if (firstSpace < 0)
{
return false;
}
left = args.Substring(0, firstSpace).Trim();
string rest = args.Substring(firstSpace + 1).Trim();
int secondSpace = rest.IndexOf(' ');
if (secondSpace < 0)
{
return false;
}
operation = rest.Substring(0, secondSpace).Trim();
right = rest.Substring(secondSpace + 1).Trim();
return left != "" && operation != "" && right != "";
}
private static bool TryParseInt(string text, out int value)
{
value = 0;
if (text == null || text == "")
{
return false;
}
int sign = 1;
int index = 0;
if (text[0] == '-')
{
sign = -1;
index = 1;
}
if (index >= text.Length)
{
return false;
}
while (index < text.Length)
{
char current = text[index];
if (current < '0' || current > '9')
{
return false;
}
value = (value * 10) + (current - '0');
index++;
}
value = value * sign;
return true;
}
private static bool EndsWithAscii(string text, string suffix)
{
if (text == null || suffix == null)
{
return false;
}
if (text.Length < suffix.Length)
{
return false;
}
int offset = text.Length - suffix.Length;
int index = 0;
while (index < suffix.Length)
{
if (ToLowerChar(text[offset + index]) != suffix[index])
{
return false;
}
index++;
}
return true;
}
private static string ToLowerAscii(string text)
{
string result = "";
int index = 0;
while (index < text.Length)
{
result = result + ToLowerChar(text[index]);
index++;
}
return result;
}
private static char ToLowerChar(char current)
{
if (current >= 'A' && current <= 'Z')
{
return (char)(current + 32);
}
return current;
}
}
}
here is a shell. sorry for my bad english.
<img** width="740" height="458" alt="Image" src="https://github.com/user-attachments/assets/3936eed1-cafa-4a6d-817f-c28082a5bac6" />
using System.Drawing;
using Cosmos.System;
using Cosmos.System.Graphics;
using Cosmos.System.Graphics.Fonts;
using System.Linq;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Text;
namespace CosmosMiniOS.Gui
{
public static class Gui
{
public static int ScreenSizeX = 1920, ScreenSizeY = 1080;
public static SVGAIICanvas MainCanvas;
public static Bitmap Wallpaper, Cursor;
}
here is a code**
using Cosmos;
using Cosmos.System.Graphics;
using System;
using Sys = Cosmos.System;
here is a shell. sorry for my bad english.