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 10... Line 10...
10
IMPORT SYSTEM;
10
IMPORT SYSTEM;
Line 11... Line 11...
11
 
11
 
Line 12... Line 12...
12
 
12
 
-
 
13
CONST
13
CONST
14
 
Line -... Line 15...
-
 
15
    eol* = 0AX;
-
 
16
 
Line 14... Line 17...
14
 
17
    BIT_DEPTH* = 64;
Line 15... Line -...
15
    RTLD_LAZY* = 1;
-
 
16
    BIT_DEPTH* = 64;
18
 
Line 17... Line 19...
17
 
19
    RTLD_LAZY = 1;
Line 18... Line -...
18
 
-
 
19
TYPE
20
 
20
 
-
 
21
    TP* = ARRAY 2 OF INTEGER;
-
 
Line 22... Line 21...
22
    SOFINI* = PROCEDURE;
21
 
23
 
22
TYPE
Line 24... Line -...
24
 
-
 
25
VAR
23
 
26
 
-
 
27
    eol*: ARRAY 2 OF CHAR;
-
 
28
    MainParam*: INTEGER;
-
 
29
 
-
 
30
    libc*, librt*: INTEGER;
24
    SOFINI = PROCEDURE;
31
 
25
 
32
    dlopen*        : PROCEDURE [linux] (filename, flag: INTEGER): INTEGER;
-
 
33
    dlsym*         : PROCEDURE [linux] (handle, symbol: INTEGER): INTEGER;
-
 
34
 
-
 
35
    stdout*,
26
 
36
    stdin*,
-
 
37
    stderr*        : INTEGER;
-
 
38
 
27
VAR
Line 39... Line 28...
39
    malloc*        : PROCEDURE [linux] (size: INTEGER): INTEGER;
28
 
Line 40... Line -...
40
    free*          : PROCEDURE [linux] (ptr: INTEGER);
-
 
41
    _exit*         : PROCEDURE [linux] (code: INTEGER);
-
 
42
    puts*          : PROCEDURE [linux] (pStr: INTEGER);
-
 
43
    fwrite*,
-
 
44
    fread*         : PROCEDURE [linux] (buffer, bytes, blocks, file: INTEGER): INTEGER;
-
 
45
    fopen*         : PROCEDURE [linux] (fname, fmode: INTEGER): INTEGER;
-
 
46
    fclose*        : PROCEDURE [linux] (file: INTEGER): INTEGER;
-
 
47
 
-
 
48
    clock_gettime* : PROCEDURE [linux] (clock_id: INTEGER; VAR tp: TP): INTEGER;
-
 
49
    time*          : PROCEDURE [linux] (ptr: INTEGER): INTEGER;
29
    MainParam*, libc*: INTEGER;
50
 
30
 
51
    fini: SOFINI;
31
    dlopen*       : PROCEDURE [linux] (filename, flag: INTEGER): INTEGER;
52
 
32
    dlsym*        : PROCEDURE [linux] (handle, symbol: INTEGER): INTEGER;
53
 
33
 
Line 92... Line 72...
92
    free(p)
72
    free(p)
93
    RETURN 0
73
    RETURN 0
94
END _DISPOSE;
74
END _DISPOSE;
Line 95... Line 75...
95
 
75
 
96
 
76
 
97
PROCEDURE GetProcAdr (lib: INTEGER; name: ARRAY OF CHAR; VarAdr: INTEGER);
77
PROCEDURE GetSym (lib: INTEGER; name: ARRAY OF CHAR; VarAdr: INTEGER);
Line 98... Line 78...
98
VAR
78
VAR
99
    sym: INTEGER;
79
    sym: INTEGER;
100
 
80
 
101
BEGIN
81
BEGIN
102
    sym := dlsym(lib, SYSTEM.ADR(name[0]));
82
    sym := dlsym(lib, SYSTEM.ADR(name[0]));
Line 103... Line 83...
103
    ASSERT(sym # 0);
83
    ASSERT(sym # 0);
104
    SYSTEM.PUT(VarAdr, sym)
84
    SYSTEM.PUT(VarAdr, sym)
105
END GetProcAdr;
85
END GetSym;
106
 
86
 
107
 
87
 
108
PROCEDURE init* (sp, code: INTEGER);
88
PROCEDURE init* (sp, code: INTEGER);
109
BEGIN
-
 
Line 110... Line 89...
110
    fini := NIL;
89
BEGIN
111
    SYSTEM.GET(code - 1000H - SYSTEM.SIZE(INTEGER) * 2, dlopen);
-
 
112
    SYSTEM.GET(code - 1000H - SYSTEM.SIZE(INTEGER),     dlsym);
-
 
113
    MainParam := sp;
90
    fini := NIL;
114
    eol := 0AX;
-
 
115
 
-
 
116
    libc := dlopen(SYSTEM.SADR("libc.so.6"), RTLD_LAZY);
91
    SYSTEM.GET(code - 1000H - SYSTEM.SIZE(INTEGER) * 2, dlopen);
117
    GetProcAdr(libc, "malloc", SYSTEM.ADR(malloc));
-
 
118
    GetProcAdr(libc, "free", SYSTEM.ADR(free));
-
 
119
    GetProcAdr(libc, "exit", SYSTEM.ADR(_exit));
-
 
120
    GetProcAdr(libc, "stdout", SYSTEM.ADR(stdout));
92
    SYSTEM.GET(code - 1000H - SYSTEM.SIZE(INTEGER),     dlsym);
121
    GetProcAdr(libc, "stdin", SYSTEM.ADR(stdin));
93
    MainParam := sp;
122
    GetProcAdr(libc, "stderr", SYSTEM.ADR(stderr));
94
 
123
    SYSTEM.GET(stdout - SYSTEM.SIZE(INTEGER), stdout);
-
 
124
    SYSTEM.GET(stdin  - SYSTEM.SIZE(INTEGER), stdin);
-
 
125
    SYSTEM.GET(stderr - SYSTEM.SIZE(INTEGER), stderr);
-
 
126
    GetProcAdr(libc, "puts", SYSTEM.ADR(puts));
-
 
127
    GetProcAdr(libc, "fwrite", SYSTEM.ADR(fwrite));
-
 
128
    GetProcAdr(libc, "fread", SYSTEM.ADR(fread));
-
 
129
    GetProcAdr(libc, "fopen", SYSTEM.ADR(fopen));
95
    libc := dlopen(SYSTEM.SADR("libc.so.6"), RTLD_LAZY);
Line 130... Line -...
130
    GetProcAdr(libc, "fclose", SYSTEM.ADR(fclose));
-
 
131
    GetProcAdr(libc, "time", SYSTEM.ADR(time));
-
 
132
 
-
 
133
    librt := dlopen(SYSTEM.SADR("librt.so.1"), RTLD_LAZY);
-
 
134
    GetProcAdr(librt, "clock_gettime", SYSTEM.ADR(clock_gettime))
-
 
135
END init;
-
 
136
 
-
 
137
 
-
 
138
PROCEDURE exit* (code: INTEGER);
-
 
139
BEGIN
-
 
140
    _exit(code)
-
 
141
END exit;
-
 
142
 
96
    GetSym(libc, "exit", SYSTEM.ADR(exit_thread));
143
 
97
    exit := exit_thread;
144
PROCEDURE exit_thread* (code: INTEGER);
98
    GetSym(libc, "puts", SYSTEM.ADR(puts));