Subversion Repositories Kolibri OS

Rev

Rev 7983 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

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