Subversion Repositories Kolibri OS

Rev

Rev 7107 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 7107 Rev 7597
Line 1... Line 1...
1
(*
1
(*
2
    Copyright 2016, 2017 Anton Krotov
2
    BSD 2-Clause License
Line 3... Line -...
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
3
 
6
    the Free Software Foundation, either version 3 of the License, or
4
    Copyright (c) 2018, 2019, Anton Krotov
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 .
5
    All rights reserved.
Line 16... Line 6...
16
*)
6
*)
Line 17... Line 7...
17
 
7
 
Line 18... Line 8...
18
MODULE API;
8
MODULE API;
Line 19... Line 9...
19
 
9
 
20
IMPORT sys := SYSTEM;
10
IMPORT SYSTEM;
-
 
11
 
-
 
12
VAR
21
 
13
 
22
VAR
-
 
23
 
14
    eol*:  ARRAY 3 OF CHAR;
24
  Alloc*: PROCEDURE [winapi] (uFlags, dwBytes: INTEGER): INTEGER;
15
    base*: INTEGER;
25
  Free*: PROCEDURE [winapi] (hMem: INTEGER): INTEGER;
16
 
Line 26... Line 17...
26
  MessageBoxA*: PROCEDURE [winapi] (hWnd, lpText, lpCaption, uType: INTEGER): INTEGER;
17
 
27
  ExitProcess*: PROCEDURE [winapi] (code: INTEGER);
-
 
Line 28... Line -...
28
  ExitThread*: PROCEDURE [winapi] (code: INTEGER);
-
 
29
  GetCurrentThreadId*: PROCEDURE [winapi] (): INTEGER;
-
 
Line 30... Line 18...
30
  strncmp*: PROCEDURE [cdecl] (a, b, n: INTEGER): INTEGER;
18
PROCEDURE [windows-, "kernel32.dll", "ExitProcess"]  ExitProcess (code: INTEGER);
31
 
19
PROCEDURE [windows-, "kernel32.dll", "ExitThread"]   ExitThread (code: INTEGER);
32
  GetProcAddress*: PROCEDURE [winapi] (hModule, name: INTEGER): INTEGER;
20
PROCEDURE [windows-, "kernel32.dll", "GlobalAlloc"]  Alloc (uFlags, dwBytes: INTEGER): INTEGER;
33
  LoadLibraryA*: PROCEDURE [winapi] (name: INTEGER): INTEGER;
21
PROCEDURE [windows-, "kernel32.dll", "GlobalFree"]   Free (hMem: INTEGER): INTEGER;
Line 34... Line -...
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)
-
 
Line 41... Line 22...
41
END DebugMsg;
22
 
42
 
23
PROCEDURE [windows-, "user32.dll", "MessageBoxA"]    MessageBoxA (hWnd, lpText, lpCaption, uType: INTEGER): INTEGER;
43
PROCEDURE GetProc(name: ARRAY OF CHAR; hMOD, adr: INTEGER);
24
 
Line -... Line 25...
-
 
25
 
44
VAR H: INTEGER;
26
PROCEDURE DebugMsg* (lpText, lpCaption: INTEGER);
45
BEGIN
27
BEGIN
46
  H := GetProcAddress(hMOD, sys.ADR(name[0]));
28
    MessageBoxA(0, lpText, lpCaption, 16)
Line -... Line 29...
-
 
29
END DebugMsg;
47
  ASSERT(H # 0);
30
 
48
  sys.PUT(adr, H);
-
 
49
END GetProc;
31
 
50
 
32
PROCEDURE _NEW* (size: INTEGER): INTEGER;
51
PROCEDURE _NEW*(size: INTEGER): INTEGER;
33
    RETURN Alloc(64, size)
-
 
34
END _NEW;
Line 52... Line -...
52
  RETURN Alloc(64, size)
-
 
53
END _NEW;
-
 
54
 
-
 
55
PROCEDURE _DISPOSE*(p: INTEGER): INTEGER;
-
 
56
  RETURN Free(p)
-
 
57
END _DISPOSE;
-
 
Line -... Line 35...
-
 
35
 
-
 
36
 
58
 
37
PROCEDURE _DISPOSE* (p: INTEGER): INTEGER;
-
 
38
    RETURN Free(p)
-
 
39
END _DISPOSE;
-
 
40
 
59
PROCEDURE init* (esp: INTEGER);
41
 
-
 
42
PROCEDURE init* (reserved, code: INTEGER);
-
 
43
BEGIN
-
 
44
    eol[0] := 0DX; eol[1] := 0AX; eol[2] := 0X;
Line 60... Line -...
60
VAR lib: INTEGER;
-
 
61
BEGIN
-
 
62
  sys.GET(esp, GetProcAddress);
-
 
Line 63... Line 45...
63
  sys.GET(esp + 4, LoadLibraryA);
45
    base := code - 4096
64
 
46
END init;