Subversion Repositories Kolibri OS

Rev

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.