Subversion Repositories Kolibri OS

Rev

Rev 6613 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
7107 akron1 1
(*
2
    Copyright 2016, 2017 Anton Krotov
6613 leency 3
 
4
    This program is free software: you can redistribute it and/or modify
5
    it under the terms of the GNU Lesser General Public License as published by
6
    the Free Software Foundation, either version 3 of the License, or
7
    (at your option) any later version.
8
 
9
    This program is distributed in the hope that it will be useful,
10
    but WITHOUT ANY WARRANTY; without even the implied warranty of
11
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
    GNU Lesser General Public License for more details.
13
 
14
    You should have received a copy of the GNU Lesser General Public License
15
    along with this program.  If not, see .
16
*)
17
 
18
MODULE API;
19
 
20
IMPORT sys := SYSTEM;
21
 
22
VAR
23
 
24
  Alloc*: PROCEDURE [winapi] (uFlags, dwBytes: INTEGER): INTEGER;
25
  Free*: PROCEDURE [winapi] (hMem: INTEGER): INTEGER;
26
  MessageBoxA*: PROCEDURE [winapi] (hWnd, lpText, lpCaption, uType: INTEGER): INTEGER;
27
  ExitProcess*: PROCEDURE [winapi] (code: INTEGER);
7107 akron1 28
  ExitThread*: PROCEDURE [winapi] (code: INTEGER);
29
  GetCurrentThreadId*: PROCEDURE [winapi] (): INTEGER;
6613 leency 30
  strncmp*: PROCEDURE [cdecl] (a, b, n: INTEGER): INTEGER;
31
 
32
  GetProcAddress*: PROCEDURE [winapi] (hModule, name: INTEGER): INTEGER;
33
  LoadLibraryA*: PROCEDURE [winapi] (name: INTEGER): INTEGER;
34
 
35
PROCEDURE zeromem*(size, adr: INTEGER);
36
END zeromem;
37
 
38
PROCEDURE DebugMsg*(lpText, lpCaption: INTEGER);
39
BEGIN
40
  MessageBoxA(0, lpText, lpCaption, 16)
41
END DebugMsg;
42
 
43
PROCEDURE GetProc(name: ARRAY OF CHAR; hMOD, adr: INTEGER);
44
VAR H: INTEGER;
45
BEGIN
46
  H := GetProcAddress(hMOD, sys.ADR(name[0]));
47
  ASSERT(H # 0);
48
  sys.PUT(adr, H);
49
END GetProc;
50
 
51
PROCEDURE _NEW*(size: INTEGER): INTEGER;
52
  RETURN Alloc(64, size)
53
END _NEW;
54
 
55
PROCEDURE _DISPOSE*(p: INTEGER): INTEGER;
56
  RETURN Free(p)
57
END _DISPOSE;
58
 
59
PROCEDURE init* (esp: INTEGER);
60
VAR lib: INTEGER;
61
BEGIN
62
  sys.GET(esp, GetProcAddress);
63
  sys.GET(esp + 4, LoadLibraryA);
64
 
65
  lib := LoadLibraryA(sys.ADR("kernel32.dll"));
66
  GetProc("ExitProcess", lib, sys.ADR(ExitProcess));
7107 akron1 67
  GetProc("ExitThread", lib, sys.ADR(ExitThread));
68
  GetProc("GetCurrentThreadId", lib, sys.ADR(GetCurrentThreadId));
6613 leency 69
  GetProc("GlobalAlloc", lib, sys.ADR(Alloc));
70
  GetProc("GlobalFree", lib, sys.ADR(Free));
71
 
72
  lib := LoadLibraryA(sys.ADR("msvcrt.dll"));
73
  GetProc("strncmp", lib, sys.ADR(strncmp));
74
 
75
  lib := LoadLibraryA(sys.ADR("user32.dll"));
76
  GetProc("MessageBoxA", lib, sys.ADR(MessageBoxA));
77
END init;
78
 
79
END API.