Subversion Repositories Kolibri OS

Rev

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("%d"), 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.