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 |