Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  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 <http://www.gnu.org/licenses/>.
  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.