Go to most recent revision | Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
8097 | maxcodehac | 1 | (* |
2 | BSD 2-Clause License |
||
3 | |||
4 | Copyright (c) 2020, Anton Krotov |
||
5 | All rights reserved. |
||
6 | *) |
||
7 | |||
8 | MODULE In; |
||
9 | |||
10 | IMPORT SYSTEM, Libdl; |
||
11 | |||
12 | |||
13 | CONST |
||
14 | |||
15 | MAX_LEN = 10240; |
||
16 | |||
17 | |||
18 | VAR |
||
19 | |||
20 | Done*: BOOLEAN; |
||
21 | s: ARRAY MAX_LEN + 4 OF CHAR; |
||
22 | |||
23 | sscanf: PROCEDURE [linux] (buf: INTEGER; fmt: INTEGER; adr: INTEGER): INTEGER; |
||
24 | gets: PROCEDURE [linux] (buf: INTEGER); |
||
25 | |||
26 | |||
27 | PROCEDURE String* (VAR str: ARRAY OF CHAR); |
||
28 | BEGIN |
||
29 | gets(SYSTEM.ADR(s[0])); |
||
30 | COPY(s, str); |
||
31 | str[LEN(str) - 1] := 0X; |
||
32 | Done := TRUE |
||
33 | END String; |
||
34 | |||
35 | |||
36 | PROCEDURE Int* (VAR x: INTEGER); |
||
37 | BEGIN |
||
38 | String(s); |
||
39 | Done := sscanf(SYSTEM.ADR(s[0]), SYSTEM.SADR("%lld"), SYSTEM.ADR(x)) = 1 |
||
40 | END Int; |
||
41 | |||
42 | |||
43 | PROCEDURE Real* (VAR x: REAL); |
||
44 | BEGIN |
||
45 | String(s); |
||
46 | Done := sscanf(SYSTEM.ADR(s[0]), SYSTEM.SADR("%lf"), SYSTEM.ADR(x)) = 1 |
||
47 | END Real; |
||
48 | |||
49 | |||
50 | PROCEDURE Char* (VAR x: CHAR); |
||
51 | BEGIN |
||
52 | String(s); |
||
53 | x := s[0] |
||
54 | END Char; |
||
55 | |||
56 | |||
57 | PROCEDURE Ln*; |
||
58 | BEGIN |
||
59 | String(s) |
||
60 | END Ln; |
||
61 | |||
62 | |||
63 | PROCEDURE Open*; |
||
64 | BEGIN |
||
65 | Done := TRUE |
||
66 | END Open; |
||
67 | |||
68 | |||
69 | PROCEDURE init; |
||
70 | VAR |
||
71 | libc: INTEGER; |
||
72 | |||
73 | BEGIN |
||
74 | libc := Libdl.open("libc.so.6", Libdl.LAZY); |
||
75 | ASSERT(libc # 0); |
||
76 | SYSTEM.PUT(SYSTEM.ADR(sscanf), Libdl.sym(libc, "sscanf")); |
||
77 | ASSERT(sscanf # NIL); |
||
78 | SYSTEM.PUT(SYSTEM.ADR(gets), Libdl.sym(libc, "gets")); |
||
79 | ASSERT(gets # NIL); |
||
80 | END init; |
||
81 | |||
82 | |||
83 | BEGIN |
||
84 | init |
||
85 | END In. |