Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
7983 leency 1
(*
2
    BSD 2-Clause License
3
 
4
    Copyright (c) 2019, Anton Krotov
5
    All rights reserved.
6
*)
7
 
8
MODULE Console;
9
 
10
IMPORT SYSTEM, WINAPI, In, Out;
11
 
12
 
13
CONST
14
 
15
    Black* = 0;     Blue* = 1;          Green* = 2;       Cyan* = 3;
16
    Red* = 4;       Magenta* = 5;       Brown* = 6;       LightGray* = 7;
17
    DarkGray* = 8;  LightBlue* = 9;     LightGreen* = 10; LightCyan* = 11;
18
    LightRed* = 12; LightMagenta* = 13; Yellow* = 14;     White* = 15;
19
 
20
 
21
VAR
22
 
23
    hConsoleOutput: INTEGER;
24
 
25
 
26
PROCEDURE SetCursor* (X, Y: INTEGER);
27
BEGIN
28
    WINAPI.SetConsoleCursorPosition(hConsoleOutput, X + Y * 65536)
29
END SetCursor;
30
 
31
 
32
PROCEDURE GetCursor* (VAR X, Y: INTEGER);
33
VAR
34
    ScrBufInfo: WINAPI.TConsoleScreenBufferInfo;
35
 
36
BEGIN
37
    WINAPI.GetConsoleScreenBufferInfo(hConsoleOutput, ScrBufInfo);
38
    X := ORD(ScrBufInfo.dwCursorPosition.X);
39
    Y := ORD(ScrBufInfo.dwCursorPosition.Y)
40
END GetCursor;
41
 
42
 
43
PROCEDURE Cls*;
44
VAR
45
    fill: INTEGER;
46
    ScrBufInfo: WINAPI.TConsoleScreenBufferInfo;
47
 
48
BEGIN
49
    WINAPI.GetConsoleScreenBufferInfo(hConsoleOutput, ScrBufInfo);
50
    fill := ORD(ScrBufInfo.dwSize.X) * ORD(ScrBufInfo.dwSize.Y);
51
    WINAPI.FillConsoleOutputCharacter(hConsoleOutput, 20H, fill, 0, SYSTEM.ADR(fill));
52
    WINAPI.FillConsoleOutputAttribute(hConsoleOutput, ORD(ScrBufInfo.wAttributes), fill, 0, SYSTEM.ADR(fill));
53
    SetCursor(0, 0)
54
END Cls;
55
 
56
 
57
PROCEDURE SetColor* (FColor, BColor: INTEGER);
58
BEGIN
59
    IF (FColor IN {0..15}) & (BColor IN {0..15}) THEN
60
        WINAPI.SetConsoleTextAttribute(hConsoleOutput, LSL(BColor, 4) + FColor)
61
    END
62
END SetColor;
63
 
64
 
65
PROCEDURE GetCursorX* (): INTEGER;
66
VAR
67
    ScrBufInfo: WINAPI.TConsoleScreenBufferInfo;
68
 
69
BEGIN
70
    WINAPI.GetConsoleScreenBufferInfo(hConsoleOutput, ScrBufInfo)
71
    RETURN ORD(ScrBufInfo.dwCursorPosition.X)
72
END GetCursorX;
73
 
74
 
75
PROCEDURE GetCursorY* (): INTEGER;
76
VAR
77
    ScrBufInfo: WINAPI.TConsoleScreenBufferInfo;
78
 
79
BEGIN
80
    WINAPI.GetConsoleScreenBufferInfo(hConsoleOutput, ScrBufInfo)
81
    RETURN ORD(ScrBufInfo.dwCursorPosition.Y)
82
END GetCursorY;
83
 
84
 
85
PROCEDURE open*;
86
BEGIN
87
    WINAPI.AllocConsole;
88
    hConsoleOutput := WINAPI.GetStdHandle(-11);
89
    In.Open;
90
    Out.Open
91
END open;
92
 
93
 
94
PROCEDURE exit* (b: BOOLEAN);
95
BEGIN
96
    WINAPI.FreeConsole
97
END exit;
98
 
99
 
100
END Console.