Subversion Repositories Kolibri OS

Rev

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

Rev 7696 Rev 7983
Line 1... Line 1...
1
(*
1
(*
2
    BSD 2-Clause License
2
    BSD 2-Clause License
Line 3... Line 3...
3
 
3
 
4
    Copyright (c) 2018-2019, Anton Krotov
4
    Copyright (c) 2018-2020, Anton Krotov
5
    All rights reserved.
5
    All rights reserved.
Line 6... Line 6...
6
*)
6
*)
Line 12... Line 12...
12
 
12
 
Line 13... Line 13...
13
CONST
13
CONST
Line -... Line 14...
-
 
14
 
-
 
15
    SectionAlignment = 1000H;
-
 
16
 
-
 
17
    DLL_PROCESS_ATTACH = 1;
-
 
18
    DLL_THREAD_ATTACH  = 2;
-
 
19
    DLL_THREAD_DETACH  = 3;
-
 
20
    DLL_PROCESS_DETACH = 0;
-
 
21
 
-
 
22
 
-
 
23
TYPE
Line 14... Line 24...
14
 
24
 
Line 15... Line 25...
15
    SectionAlignment = 1000H;
25
    DLL_ENTRY* = PROCEDURE (hinstDLL, fdwReason, lpvReserved: INTEGER);
16
 
26
 
17
 
27
 
Line -... Line 28...
-
 
28
VAR
-
 
29
 
-
 
30
    eol*:  ARRAY 3 OF CHAR;
-
 
31
    base*: INTEGER;
Line 18... Line 32...
18
VAR
32
    heap:  INTEGER;
19
 
33
 
20
    eol*:  ARRAY 3 OF CHAR;
34
    process_detach,
21
    base*: INTEGER;
35
    thread_detach,
Line 49... Line 63...
49
END _DISPOSE;
63
END _DISPOSE;
Line 50... Line 64...
50
 
64
 
51
 
65
 
-
 
66
PROCEDURE init* (reserved, code: INTEGER);
-
 
67
BEGIN
-
 
68
    process_detach := NIL;
52
PROCEDURE init* (reserved, code: INTEGER);
69
    thread_detach  := NIL;
53
BEGIN
70
    thread_attach  := NIL;
54
    eol[0] := 0DX; eol[1] := 0AX; eol[2] := 0X;
71
    eol[0] := 0DX; eol[1] := 0AX; eol[2] := 0X;
55
    base := code - SectionAlignment;
72
    base := code - SectionAlignment;
Line 67... Line 84...
67
BEGIN
84
BEGIN
68
    ExitThread(code)
85
    ExitThread(code)
69
END exit_thread;
86
END exit_thread;
Line -... Line 87...
-
 
87
 
-
 
88
 
-
 
89
PROCEDURE dllentry* (hinstDLL, fdwReason, lpvReserved: INTEGER): INTEGER;
-
 
90
VAR
-
 
91
    res: INTEGER;
-
 
92
 
-
 
93
BEGIN
-
 
94
    res := 0;
-
 
95
 
-
 
96
    CASE fdwReason OF
-
 
97
    |DLL_PROCESS_ATTACH:
-
 
98
        res := 1
-
 
99
    |DLL_THREAD_ATTACH:
-
 
100
        IF thread_attach # NIL THEN
-
 
101
            thread_attach(hinstDLL, fdwReason, lpvReserved)
-
 
102
        END
-
 
103
    |DLL_THREAD_DETACH:
-
 
104
        IF thread_detach # NIL THEN
-
 
105
            thread_detach(hinstDLL, fdwReason, lpvReserved)
-
 
106
        END
-
 
107
    |DLL_PROCESS_DETACH:
-
 
108
        IF process_detach # NIL THEN
-
 
109
            process_detach(hinstDLL, fdwReason, lpvReserved)
-
 
110
        END
-
 
111
    ELSE
-
 
112
    END
-
 
113
 
-
 
114
    RETURN res
-
 
115
END dllentry;
-
 
116
 
-
 
117
 
-
 
118
PROCEDURE sofinit*;
-
 
119
END sofinit;
-
 
120
 
-
 
121
 
-
 
122
PROCEDURE SetDll* (_process_detach, _thread_detach, _thread_attach: DLL_ENTRY);
-
 
123
BEGIN
-
 
124
    process_detach := _process_detach;
-
 
125
    thread_detach  := _thread_detach;
-
 
126
    thread_attach  := _thread_attach
-
 
127
END SetDll;
70
 
128