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. |