Rev 7983 | 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 | |||
8097 | maxcodehac | 15 | eol* = 0DX + 0AX; |
16 | |||
7696 | akron1 | 17 | SectionAlignment = 1000H; |
18 | |||
7983 | leency | 19 | DLL_PROCESS_ATTACH = 1; |
20 | DLL_THREAD_ATTACH = 2; |
||
21 | DLL_THREAD_DETACH = 3; |
||
22 | DLL_PROCESS_DETACH = 0; |
||
7696 | akron1 | 23 | |
8097 | maxcodehac | 24 | KERNEL = "kernel32.dll"; |
25 | USER = "user32.dll"; |
||
7983 | leency | 26 | |
8097 | maxcodehac | 27 | |
7983 | leency | 28 | TYPE |
29 | |||
30 | DLL_ENTRY* = PROCEDURE (hinstDLL, fdwReason, lpvReserved: INTEGER); |
||
31 | |||
32 | |||
6613 | leency | 33 | VAR |
34 | |||
7597 | akron1 | 35 | base*: INTEGER; |
7693 | akron1 | 36 | heap: INTEGER; |
6613 | leency | 37 | |
7983 | leency | 38 | process_detach, |
39 | thread_detach, |
||
40 | thread_attach: DLL_ENTRY; |
||
6613 | leency | 41 | |
7983 | leency | 42 | |
8097 | maxcodehac | 43 | PROCEDURE [windows-, KERNEL, ""] ExitProcess (code: INTEGER); |
44 | PROCEDURE [windows-, KERNEL, ""] ExitThread (code: INTEGER); |
||
45 | PROCEDURE [windows-, KERNEL, ""] GetProcessHeap (): INTEGER; |
||
46 | PROCEDURE [windows-, KERNEL, ""] HeapAlloc (hHeap, dwFlags, dwBytes: INTEGER): INTEGER; |
||
47 | PROCEDURE [windows-, KERNEL, ""] HeapFree (hHeap, dwFlags, lpMem: INTEGER); |
||
48 | PROCEDURE [windows-, USER, ""] MessageBoxA (hWnd, lpText, lpCaption, uType: INTEGER): INTEGER; |
||
6613 | leency | 49 | |
7597 | akron1 | 50 | |
51 | PROCEDURE DebugMsg* (lpText, lpCaption: INTEGER); |
||
6613 | leency | 52 | BEGIN |
7597 | akron1 | 53 | MessageBoxA(0, lpText, lpCaption, 16) |
6613 | leency | 54 | END DebugMsg; |
55 | |||
56 | |||
7597 | akron1 | 57 | PROCEDURE _NEW* (size: INTEGER): INTEGER; |
7693 | akron1 | 58 | RETURN HeapAlloc(heap, 8, size) |
6613 | leency | 59 | END _NEW; |
60 | |||
7597 | akron1 | 61 | |
62 | PROCEDURE _DISPOSE* (p: INTEGER): INTEGER; |
||
7693 | akron1 | 63 | BEGIN |
64 | HeapFree(heap, 0, p) |
||
65 | RETURN 0 |
||
6613 | leency | 66 | END _DISPOSE; |
67 | |||
7597 | akron1 | 68 | |
69 | PROCEDURE init* (reserved, code: INTEGER); |
||
6613 | leency | 70 | BEGIN |
7983 | leency | 71 | process_detach := NIL; |
72 | thread_detach := NIL; |
||
73 | thread_attach := NIL; |
||
7696 | akron1 | 74 | base := code - SectionAlignment; |
7693 | akron1 | 75 | heap := GetProcessHeap() |
7597 | akron1 | 76 | END init; |
6613 | leency | 77 | |
78 | |||
7597 | akron1 | 79 | PROCEDURE exit* (code: INTEGER); |
80 | BEGIN |
||
81 | ExitProcess(code) |
||
82 | END exit; |
||
6613 | leency | 83 | |
84 | |||
7597 | akron1 | 85 | PROCEDURE exit_thread* (code: INTEGER); |
86 | BEGIN |
||
87 | ExitThread(code) |
||
88 | END exit_thread; |
||
89 | |||
90 | |||
7983 | leency | 91 | PROCEDURE dllentry* (hinstDLL, fdwReason, lpvReserved: INTEGER): INTEGER; |
92 | VAR |
||
93 | res: INTEGER; |
||
94 | |||
95 | BEGIN |
||
96 | res := 0; |
||
97 | |||
98 | CASE fdwReason OF |
||
99 | |DLL_PROCESS_ATTACH: |
||
100 | res := 1 |
||
101 | |DLL_THREAD_ATTACH: |
||
102 | IF thread_attach # NIL THEN |
||
103 | thread_attach(hinstDLL, fdwReason, lpvReserved) |
||
104 | END |
||
105 | |DLL_THREAD_DETACH: |
||
106 | IF thread_detach # NIL THEN |
||
107 | thread_detach(hinstDLL, fdwReason, lpvReserved) |
||
108 | END |
||
109 | |DLL_PROCESS_DETACH: |
||
110 | IF process_detach # NIL THEN |
||
111 | process_detach(hinstDLL, fdwReason, lpvReserved) |
||
112 | END |
||
113 | ELSE |
||
114 | END |
||
115 | |||
116 | RETURN res |
||
117 | END dllentry; |
||
118 | |||
119 | |||
120 | PROCEDURE sofinit*; |
||
121 | END sofinit; |
||
122 | |||
123 | |||
124 | PROCEDURE SetDll* (_process_detach, _thread_detach, _thread_attach: DLL_ENTRY); |
||
125 | BEGIN |
||
126 | process_detach := _process_detach; |
||
127 | thread_detach := _thread_detach; |
||
128 | thread_attach := _thread_attach |
||
129 | END SetDll; |
||
130 | |||
131 | |||
132 | END API. |