Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Console Bugs #2982

Open
PratyushKing opened this issue Mar 5, 2024 · 1 comment
Open

Console Bugs #2982

PratyushKing opened this issue Mar 5, 2024 · 1 comment
Labels

Comments

@PratyushKing
Copy link
Contributor

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

@9xbt
Copy link
Contributor

9xbt commented Mar 8, 2024

just use svgaiiterminal
/j

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants