Subversion Repositories Kolibri OS

Rev

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.