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
 
13
VAR
14
 
8097 maxcodehac 15
    hConsoleOutput: INTEGER;
7983 leency 16
 
17
 
8097 maxcodehac 18
PROCEDURE [ccall, "msvcrt.dll", "printf"] printf1 (fmt: INTEGER; x: INTEGER);
19
PROCEDURE [ccall, "msvcrt.dll", "printf"] printf2 (fmt: INTEGER; width, x: INTEGER);
20
PROCEDURE [ccall, "msvcrt.dll", "printf"] printf3 (fmt: INTEGER; width, precision: INTEGER; x: REAL);
7983 leency 21
 
8097 maxcodehac 22
PROCEDURE [windows, "kernel32.dll", ""]
23
    WriteConsoleW (hConsoleOutput, lpBuffer, nNumberOfCharsToWrite, lpNumberOfCharsWritten, lpReserved: INTEGER);
7983 leency 24
 
8097 maxcodehac 25
PROCEDURE [windows, "kernel32.dll", ""]
26
    GetStdHandle (nStdHandle: INTEGER): INTEGER;
27
 
28
 
29
PROCEDURE Char* (x: CHAR);
7983 leency 30
BEGIN
8097 maxcodehac 31
    printf1(SYSTEM.SADR("%c"), ORD(x))
7983 leency 32
END Char;
33
 
34
 
8097 maxcodehac 35
PROCEDURE StringW* (s: ARRAY OF WCHAR);
7983 leency 36
BEGIN
8097 maxcodehac 37
    WriteConsoleW(hConsoleOutput, SYSTEM.ADR(s[0]), LENGTH(s), 0, 0)
38
END StringW;
7983 leency 39
 
40
 
8097 maxcodehac 41
PROCEDURE String* (s: ARRAY OF CHAR);
7983 leency 42
BEGIN
8097 maxcodehac 43
    printf2(SYSTEM.SADR("%.*s"), LENGTH(s), SYSTEM.ADR(s[0]))
44
END String;
7983 leency 45
 
46
 
47
PROCEDURE Ln*;
48
BEGIN
8097 maxcodehac 49
    printf1(SYSTEM.SADR("%s"), SYSTEM.SADR(CHR(13) + CHR(10)))
7983 leency 50
END Ln;
51
 
8097 maxcodehac 52
 
53
PROCEDURE Int* (x, width: INTEGER);
7983 leency 54
BEGIN
8097 maxcodehac 55
    printf2(SYSTEM.SADR("%*d"), width, x)
56
END Int;
7983 leency 57
 
58
 
8097 maxcodehac 59
PROCEDURE Real* (x: REAL; width: INTEGER);
7983 leency 60
BEGIN
8097 maxcodehac 61
    printf3(SYSTEM.SADR("%*.*E"), width, MAX(MIN(width - 8, 15), 1), x)
7983 leency 62
END Real;
63
 
8097 maxcodehac 64
 
65
PROCEDURE FixReal* (x: REAL; width, precision: INTEGER);
7983 leency 66
BEGIN
8097 maxcodehac 67
    printf3(SYSTEM.SADR("%*.*f"), width, precision, x)
7983 leency 68
END FixReal;
69
 
8097 maxcodehac 70
 
7983 leency 71
PROCEDURE Open*;
72
BEGIN
8097 maxcodehac 73
    hConsoleOutput := GetStdHandle(-11)
7983 leency 74
END Open;
75
 
8097 maxcodehac 76
 
7983 leency 77
END Out.