Skip to content

Console Bugs #2982

Open
Open
@PratyushKing

Description

@PratyushKing

Area of Cosmos - What area of Cosmos are we dealing with?

Cosmos Inner-code bug.

Expected Behaviour - What do you think that should happen?

Identical to .NET Console behavior must be expected just with a 80x25 size.

Actual Behaviour - What unexpectedly happens?

Proper functioning of placements of text in code

Reproduction - How did you get this error to appear?

The code is:

public const int CWidth = 80;
public const int CHeight = 25;
public const string kernelName = "Test";
public const string kernelVersion = "v1.0";
public const ConsoleColor consoleKernelAccentColor = ConsoleColor.DarkCyan;

public static int finalSelection = 0;

public static void Run()
{
    var disks = new List<string>() { "0:\\", "1:\\", "2:\\" };

    Console.BackgroundColor = consoleKernelAccentColor;
    Console.ForegroundColor = ConsoleColor.White;
    Console.Clear();
    Console.WriteLine(kernelName + " " + kernelVersion + " Installer (via Cosmares)");

    Console.CursorLeft = 0;
    Console.CursorTop = CHeight;
    Console.BackgroundColor = ConsoleColor.DarkGray;
    Console.Write(new string(' ', CWidth));
    Console.CursorLeft = 0;
    Console.CursorTop = CHeight;
    Console.ForegroundColor = ConsoleColor.Black;
    Console.Write("Use arrow keys to move, space to select and enter to next.");

    var winX = CWidth / 16;
    var winY = 3;
    var winWidth = CWidth - (CWidth / 16) - 5;
    var winHeight = CHeight - 5;
    Console.BackgroundColor = ConsoleColor.White;
    for (var i = 0; i < winHeight; i++)
    {
        Console.CursorLeft = winX;
        Console.CursorTop = winY + i;
        Console.Write(new string(' ', winWidth));
    }

    Console.CursorLeft = winX + 2;
    Console.CursorTop = winY + 1;
    Console.Write("Select a disk:");

    var boxX = winX + 4;
    var boxY = winY + 3;
    var boxWidth = winWidth - 8; // (winWidth - (4*2))
    var boxHeight = winHeight - 6; // (winHeight - (3*2))
    Console.BackgroundColor = ConsoleColor.Gray;
    for (var i = 0; i < boxHeight; i++)
    {
        Console.CursorLeft = boxX;
        Console.CursorTop = boxY + i;
        Console.Write(new string(' ', boxWidth));
    }

    var selected = 0;
    var selectedVal = disks[selected];
    var hovered = 0;
    var hoveredVal = disks[hovered];
update:
    var diskIndex = 0;
    for (var i = 0; i < disks.Count; i++)
    {
        if (i == selected)
        {
            Console.BackgroundColor = consoleKernelAccentColor;
        } else if (i == hovered)
        {
            Console.BackgroundColor = ConsoleColor.DarkGray;
        }

        Console.CursorLeft = boxX;
        Console.CursorTop = boxY + i;
        Console.Write(new string(' ', boxWidth));
        Console.CursorLeft = boxX;
        Console.CursorTop = boxY + i;
        Console.Write(disks[i]);
        Console.BackgroundColor = ConsoleColor.Gray;
    }

    var key = Console.ReadKey(true);
    while (key.Modifiers != ConsoleModifiers.Control && key.Modifiers != ConsoleModifiers.Shift && key.Key != ConsoleKey.Escape)
    {
        if (key.Key == ConsoleKey.UpArrow && hovered - 1 > -1)
        {
            hovered--;
            goto update;
        }
        else if (key.Key == ConsoleKey.DownArrow && hovered + 1 < disks.Count)
        {
            hovered++;
            goto update;
        }
        else if (key.Key == ConsoleKey.Enter)
        {
            finalSelection = selected;
            return;
        }
        else if (key.Key == ConsoleKey.Spacebar)
        {
            selected = hovered;
            goto update;
        }
        key = Console.ReadKey(true);
    }
    return;
}

Version - Were you using the User Kit or Dev Kit? And what User Kit version or Dev Kit commit (Cosmos, IL2CPU, X#)?

It is the latest DevKit and its part of the main cosmos base.

Screenshots:

Expected first, and cosmos second
image
image

The CWidth and CHeight are used in both code so the 80x25 console can be used in the .NET one

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions