Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
6613 leency 1
(*
2
    Copyright 2016 Anton Krotov
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);
28
  strncmp*: PROCEDURE [cdecl] (a, b, n: INTEGER): INTEGER;
29
 
30
  GetProcAddress*: PROCEDURE [winapi] (hModule, name: INTEGER): INTEGER;
31
  LoadLibraryA*: PROCEDURE [winapi] (name: INTEGER): INTEGER;
32
 
33
PROCEDURE zeromem*(size, adr: INTEGER);
34
END zeromem;
35
 
36
PROCEDURE DebugMsg*(lpText, lpCaption: INTEGER);
37
BEGIN
38
  MessageBoxA(0, lpText, lpCaption, 16)
39
END DebugMsg;
40
 
41
PROCEDURE GetProc(name: ARRAY OF CHAR; hMOD, adr: INTEGER);
42
VAR H: INTEGER;
43
BEGIN
44
  H := GetProcAddress(hMOD, sys.ADR(name[0]));
45
  ASSERT(H # 0);
46
  sys.PUT(adr, H);
47
END GetProc;
48
 
49
PROCEDURE _NEW*(size: INTEGER): INTEGER;
50
  RETURN Alloc(64, size)
51
END _NEW;
52
 
53
PROCEDURE _DISPOSE*(p: INTEGER): INTEGER;
54
  RETURN Free(p)
55
END _DISPOSE;
56
 
57
PROCEDURE init* (esp: INTEGER);
58
VAR lib: INTEGER;
59
BEGIN
60
  sys.GET(esp, GetProcAddress);
61
  sys.GET(esp + 4, LoadLibraryA);
62
 
63
  lib := LoadLibraryA(sys.ADR("kernel32.dll"));
64
  GetProc("ExitProcess", lib, sys.ADR(ExitProcess));
65
  GetProc("GlobalAlloc", lib, sys.ADR(Alloc));
66
  GetProc("GlobalFree", lib, sys.ADR(Free));
67
 
68
  lib := LoadLibraryA(sys.ADR("msvcrt.dll"));
69
  GetProc("strncmp", lib, sys.ADR(strncmp));
70
 
71
  lib := LoadLibraryA(sys.ADR("user32.dll"));
72
  GetProc("MessageBoxA", lib, sys.ADR(MessageBoxA));
73
END init;
74
 
75
END API.