Subversion Repositories Kolibri OS

Rev

Rev 7983 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
7983 leency 1
(*
8097 maxcodehac 2
    BSD 2-Clause License
7983 leency 3
 
8097 maxcodehac 4
    Copyright (c) 2020, Anton Krotov
5
    All rights reserved.
7983 leency 6
*)
7
 
8
MODULE Out;
9
 
8097 maxcodehac 10
IMPORT SYSTEM;
7983 leency 11
 
12
 
8097 maxcodehac 13
VAR
7983 leency 14
 
8097 maxcodehac 15
    hConsoleOutput: INTEGER;
7983 leency 16
 
8097 maxcodehac 17
PROCEDURE [windows, "msvcrt.dll", "printf"] printf1 (fmt: INTEGER; x: INTEGER);
18
PROCEDURE [windows, "msvcrt.dll", "printf"] printf2 (fmt: INTEGER; width, x: INTEGER);
19
PROCEDURE [windows, "msvcrt.dll", "printf"] printf3 (fmt: INTEGER; width, precision, x: INTEGER);
7983 leency 20
 
8097 maxcodehac 21
PROCEDURE [windows, "kernel32.dll", ""]
22
    WriteConsoleW (hConsoleOutput, lpBuffer, nNumberOfCharsToWrite, lpNumberOfCharsWritten, lpReserved: INTEGER);
7983 leency 23
 
8097 maxcodehac 24
PROCEDURE [windows, "kernel32.dll", ""]
7983 leency 25
    GetStdHandle (nStdHandle: INTEGER): INTEGER;
26
 
27
 
8097 maxcodehac 28
PROCEDURE Char* (x: CHAR);
7983 leency 29
BEGIN
8097 maxcodehac 30
    printf1(SYSTEM.SADR("%c"), ORD(x))
7983 leency 31
END Char;
32
 
8097 maxcodehac 33
 
34
PROCEDURE StringW* (s: ARRAY OF WCHAR);
7983 leency 35
BEGIN
8097 maxcodehac 36
    WriteConsoleW(hConsoleOutput, SYSTEM.ADR(s[0]), LENGTH(s), 0, 0)
7983 leency 37
END StringW;
38
 
8097 maxcodehac 39
 
40
PROCEDURE String* (s: ARRAY OF CHAR);
7983 leency 41
BEGIN
8097 maxcodehac 42
    printf2(SYSTEM.SADR("%.*s"), LENGTH(s), SYSTEM.ADR(s[0]))
7983 leency 43
END String;
44
 
45
 
8097 maxcodehac 46
PROCEDURE Ln*;
7983 leency 47
BEGIN
8097 maxcodehac 48
    printf1(SYSTEM.SADR("%s"), SYSTEM.SADR(CHR(13) + CHR(10)))
49
END Ln;
7983 leency 50
 
51
 
8097 maxcodehac 52
PROCEDURE Int* (x, width: INTEGER);
7983 leency 53
BEGIN
8097 maxcodehac 54
    printf2(SYSTEM.SADR("%*lld"), width, x)
7983 leency 55
END Int;
56
 
57
 
8097 maxcodehac 58
PROCEDURE intval (x: REAL): INTEGER;
59
VAR
60
    i: INTEGER;
7983 leency 61
 
62
BEGIN
8097 maxcodehac 63
    SYSTEM.GET(SYSTEM.ADR(x), i)
64
    RETURN i
65
END intval;
7983 leency 66
 
67
 
8097 maxcodehac 68
PROCEDURE Real* (x: REAL; width: INTEGER);
7983 leency 69
BEGIN
8097 maxcodehac 70
    printf3(SYSTEM.SADR("%*.*E"), width, MAX(MIN(width - 8, 15), 1), intval(x))
7983 leency 71
END Real;
72
 
8097 maxcodehac 73
 
74
PROCEDURE FixReal* (x: REAL; width, precision: INTEGER);
7983 leency 75
BEGIN
8097 maxcodehac 76
    printf3(SYSTEM.SADR("%*.*f"), width, precision, intval(x))
7983 leency 77
END FixReal;
78
 
8097 maxcodehac 79
 
7983 leency 80
PROCEDURE Open*;
81
BEGIN
82
    hConsoleOutput := GetStdHandle(-11)
83
END Open;
84
 
8097 maxcodehac 85
 
7983 leency 86
END Out.