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, x: INTEGER); |
||
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("%*lld"), width, x) |
7983 | leency | 41 | END Int; |
42 | |||
43 | |||
8097 | maxcodehac | 44 | PROCEDURE intval (x: REAL): INTEGER; |
45 | VAR |
||
46 | i: INTEGER; |
||
7983 | leency | 47 | |
48 | BEGIN |
||
8097 | maxcodehac | 49 | SYSTEM.GET(SYSTEM.ADR(x), i) |
50 | RETURN i |
||
51 | END intval; |
||
7983 | leency | 52 | |
53 | |||
8097 | maxcodehac | 54 | PROCEDURE Real* (x: REAL; width: INTEGER); |
7983 | leency | 55 | BEGIN |
8097 | maxcodehac | 56 | printf3(SYSTEM.SADR("%*.*E"), width, MAX(MIN(width - 8, 15), 1), intval(x)) |
7983 | leency | 57 | END Real; |
58 | |||
8097 | maxcodehac | 59 | |
60 | PROCEDURE FixReal* (x: REAL; width, precision: INTEGER); |
||
7983 | leency | 61 | BEGIN |
8097 | maxcodehac | 62 | printf3(SYSTEM.SADR("%*.*f"), width, precision, intval(x)) |
7983 | leency | 63 | END FixReal; |
64 | |||
8097 | maxcodehac | 65 | |
7983 | leency | 66 | PROCEDURE Open*; |
67 | END Open; |
||
68 | |||
8097 | maxcodehac | 69 | |
70 | PROCEDURE init; |
||
71 | VAR |
||
72 | libc, printf: INTEGER; |
||
73 | |||
74 | BEGIN |
||
75 | libc := Libdl.open("libc.so.6", Libdl.LAZY); |
||
76 | ASSERT(libc # 0); |
||
77 | printf := Libdl.sym(libc, "printf"); |
||
78 | ASSERT(printf # 0); |
||
79 | SYSTEM.PUT(SYSTEM.ADR(printf1), printf); |
||
80 | SYSTEM.PUT(SYSTEM.ADR(printf2), printf); |
||
81 | SYSTEM.PUT(SYSTEM.ADR(printf3), printf); |
||
82 | END init; |
||
83 | |||
84 | |||
85 | BEGIN |
||
86 | init |
||
7983 | leency | 87 | END Out. |