Rev 7696 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
7983 | leency | 1 | (* |
7597 | akron1 | 2 | BSD 2-Clause License |
6613 | leency | 3 | |
7983 | leency | 4 | Copyright (c) 2018-2020, Anton Krotov |
7597 | akron1 | 5 | All rights reserved. |
6613 | leency | 6 | *) |
7 | |||
8 | MODULE API; |
||
9 | |||
7597 | akron1 | 10 | IMPORT SYSTEM; |
6613 | leency | 11 | |
7696 | akron1 | 12 | |
13 | CONST |
||
14 | |||
15 | SectionAlignment = 1000H; |
||
16 | |||
7983 | leency | 17 | DLL_PROCESS_ATTACH = 1; |
18 | DLL_THREAD_ATTACH = 2; |
||
19 | DLL_THREAD_DETACH = 3; |
||
20 | DLL_PROCESS_DETACH = 0; |
||
7696 | akron1 | 21 | |
7983 | leency | 22 | |
23 | TYPE |
||
24 | |||
25 | DLL_ENTRY* = PROCEDURE (hinstDLL, fdwReason, lpvReserved: INTEGER); |
||
26 | |||
27 | |||
6613 | leency | 28 | VAR |
29 | |||
7597 | akron1 | 30 | eol*: ARRAY 3 OF CHAR; |
31 | base*: INTEGER; |
||
7693 | akron1 | 32 | heap: INTEGER; |
6613 | leency | 33 | |
7983 | leency | 34 | process_detach, |
35 | thread_detach, |
||
36 | thread_attach: DLL_ENTRY; |
||
6613 | leency | 37 | |
7983 | leency | 38 | |
7693 | akron1 | 39 | PROCEDURE [windows-, "kernel32.dll", "ExitProcess"] ExitProcess (code: INTEGER); |
40 | PROCEDURE [windows-, "kernel32.dll", "ExitThread"] ExitThread (code: INTEGER); |
||
41 | PROCEDURE [windows-, "kernel32.dll", "GetProcessHeap"] GetProcessHeap (): INTEGER; |
||
42 | PROCEDURE [windows-, "kernel32.dll", "HeapAlloc"] HeapAlloc (hHeap, dwFlags, dwBytes: INTEGER): INTEGER; |
||
43 | PROCEDURE [windows-, "kernel32.dll", "HeapFree"] HeapFree(hHeap, dwFlags, lpMem: INTEGER); |
||
6613 | leency | 44 | |
7693 | akron1 | 45 | PROCEDURE [windows-, "user32.dll", "MessageBoxA"] MessageBoxA (hWnd, lpText, lpCaption, uType: INTEGER): INTEGER; |
7597 | akron1 | 46 | |
47 | |||
48 | PROCEDURE DebugMsg* (lpText, lpCaption: INTEGER); |
||
6613 | leency | 49 | BEGIN |
7597 | akron1 | 50 | MessageBoxA(0, lpText, lpCaption, 16) |
6613 | leency | 51 | END DebugMsg; |
52 | |||
53 | |||
7597 | akron1 | 54 | PROCEDURE _NEW* (size: INTEGER): INTEGER; |
7693 | akron1 | 55 | RETURN HeapAlloc(heap, 8, size) |
6613 | leency | 56 | END _NEW; |
57 | |||
7597 | akron1 | 58 | |
59 | PROCEDURE _DISPOSE* (p: INTEGER): INTEGER; |
||
7693 | akron1 | 60 | BEGIN |
61 | HeapFree(heap, 0, p) |
||
62 | RETURN 0 |
||
6613 | leency | 63 | END _DISPOSE; |
64 | |||
7597 | akron1 | 65 | |
66 | PROCEDURE init* (reserved, code: INTEGER); |
||
6613 | leency | 67 | BEGIN |
7983 | leency | 68 | process_detach := NIL; |
69 | thread_detach := NIL; |
||
70 | thread_attach := NIL; |
||
7597 | akron1 | 71 | eol[0] := 0DX; eol[1] := 0AX; eol[2] := 0X; |
7696 | akron1 | 72 | base := code - SectionAlignment; |
7693 | akron1 | 73 | heap := GetProcessHeap() |
7597 | akron1 | 74 | END init; |
6613 | leency | 75 | |
76 | |||
7597 | akron1 | 77 | PROCEDURE exit* (code: INTEGER); |
78 | BEGIN |
||
79 | ExitProcess(code) |
||
80 | END exit; |
||
6613 | leency | 81 | |
82 | |||
7597 | akron1 | 83 | PROCEDURE exit_thread* (code: INTEGER); |
84 | BEGIN |
||
85 | ExitThread(code) |
||
86 | END exit_thread; |
||
87 | |||
88 | |||
7983 | leency | 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; |
||
128 | |||
129 | |||
130 | END API. |