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