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 |