Subversion Repositories Kolibri OS

Rev

Rev 7983 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 7983 Rev 8097
Line 5... Line 5...
5
    All rights reserved.
5
    All rights reserved.
6
*)
6
*)
Line 7... Line 7...
7
 
7
 
Line 8... Line 8...
8
MODULE LINAPI;
8
MODULE LINAPI;
Line 9... Line 9...
9
 
9
 
Line 10... Line 10...
10
IMPORT SYSTEM, API;
10
IMPORT SYSTEM, API, Libdl;
11
 
11
 
Line 12... Line 12...
12
 
12
 
Line 13... Line -...
13
TYPE
-
 
14
 
-
 
15
    TP* = API.TP;
13
TYPE
Line 16... Line 14...
16
    SOFINI* = API.SOFINI;
14
 
17
 
15
    TP* = ARRAY 2 OF INTEGER;
18
 
16
    SOFINI* = PROCEDURE;
Line 37... Line 35...
37
    time*          : PROCEDURE [linux] (ptr: INTEGER): INTEGER;
35
    time*          : PROCEDURE [linux] (ptr: INTEGER): INTEGER;
Line 38... Line 36...
38
 
36
 
Line 39... Line -...
39
    clock_gettime* : PROCEDURE [linux] (clock_id: INTEGER; VAR tp: TP): INTEGER;
-
 
40
 
-
 
41
 
-
 
42
PROCEDURE GetArg* (n: INTEGER; VAR s: ARRAY OF CHAR);
-
 
43
VAR
-
 
44
    i, len, ptr: INTEGER;
-
 
45
    c: CHAR;
-
 
46
 
-
 
47
BEGIN
-
 
48
    i := 0;
-
 
49
    len := LEN(s) - 1;
-
 
50
    IF (0 <= n) & (n <= argc + envc) & (n # argc) & (len > 0) THEN
-
 
51
        SYSTEM.GET(API.MainParam + (n + 1) * SYSTEM.SIZE(INTEGER), ptr);
-
 
52
        REPEAT
-
 
53
            SYSTEM.GET(ptr, c);
-
 
54
            s[i] := c;
-
 
55
            INC(i);
-
 
56
            INC(ptr)
-
 
57
        UNTIL (c = 0X) OR (i = len)
-
 
58
    END;
-
 
59
    s[i] := 0X
-
 
60
END GetArg;
-
 
61
 
-
 
62
 
-
 
63
PROCEDURE GetEnv* (n: INTEGER; VAR s: ARRAY OF CHAR);
-
 
64
BEGIN
-
 
65
    IF (0 <= n) & (n < envc) THEN
-
 
66
        GetArg(n + argc + 1, s)
-
 
67
    ELSE
-
 
68
        s[0] := 0X
-
 
69
    END
-
 
70
END GetEnv;
37
    clock_gettime* : PROCEDURE [linux] (clock_id: INTEGER; VAR tp: TP): INTEGER;
71
 
38
 
72
 
39
 
73
PROCEDURE SetFini* (ProcFini: SOFINI);
40
PROCEDURE SetFini* (ProcFini: SOFINI);
Line 74... Line 41...
74
BEGIN
41
BEGIN
75
    API.SetFini(ProcFini)
42
    API.SetFini(ProcFini)
76
END SetFini;
43
END SetFini;
Line 77... Line 44...
77
 
44
 
78
 
45
 
79
PROCEDURE init;
46
PROCEDURE GetSym (lib: INTEGER; name: ARRAY OF CHAR; VarAdr: INTEGER);
80
VAR
47
VAR
81
    ptr: INTEGER;
-
 
82
 
-
 
83
BEGIN
-
 
84
    IF API.MainParam # 0 THEN
-
 
85
        envc := -1;
-
 
86
        SYSTEM.GET(API.MainParam, argc);
-
 
87
        REPEAT
-
 
88
            SYSTEM.GET(API.MainParam + (envc + argc + 3) * SYSTEM.SIZE(INTEGER), ptr);
48
    sym: INTEGER;
Line -... Line 49...
-
 
49
 
-
 
50
BEGIN
-
 
51
    sym := Libdl.sym(lib, name);
89
            INC(envc)
52
    ASSERT(sym # 0);
Line 90... Line 53...
90
        UNTIL ptr = 0
53
    SYSTEM.PUT(VarAdr, sym)
91
    ELSE
54
END GetSym;
92
        envc := 0;
-
 
93
        argc := 0
-
 
94
    END;
55
 
95
 
56
 
96
    libc := API.libc;
57
PROCEDURE init;
97
 
-
 
98
    stdout := API.stdout;
58
BEGIN
99
    stdin  := API.stdin;
-
 
100
    stderr := API.stderr;
59
    libc := API.libc;
101
 
60
 
102
    malloc := API.malloc;
61
    GetSym(libc, "exit",   SYSTEM.ADR(exit));
-
 
62
    GetSym(libc, "puts",   SYSTEM.ADR(puts));
-
 
63
    GetSym(libc, "malloc", SYSTEM.ADR(malloc));
-
 
64
    GetSym(libc, "free",   SYSTEM.ADR(free));
-
 
65
    GetSym(libc, "fread",  SYSTEM.ADR(fread));
Line 103... Line 66...
103
    free   := API.free;
66
    GetSym(libc, "fwrite", SYSTEM.ADR(fwrite));
Line 104... Line 67...
104
    exit   := API._exit;
67
    GetSym(libc, "fopen",  SYSTEM.ADR(fopen));
105
    puts   := API.puts;
68
    GetSym(libc, "fclose", SYSTEM.ADR(fclose));
Line 106... Line 69...
106
    fwrite := API.fwrite;
69
    GetSym(libc, "time",   SYSTEM.ADR(time));
107
    fread  := API.fread;
70