Subversion Repositories Kolibri OS

Rev

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

  1. (*
  2.     BSD 2-Clause License
  3.  
  4.     Copyright (c) 2019, Anton Krotov
  5.     All rights reserved.
  6. *)
  7.  
  8. MODULE Libdl;
  9.  
  10. IMPORT SYSTEM, API;
  11.  
  12.  
  13. CONST
  14.  
  15.     LAZY*         = 1;
  16.     NOW*          = 2;
  17.     BINDING_MASK* = 3;
  18.     NOLOAD*       = 4;
  19.     LOCAL*        = 0;
  20.     GLOBAL*       = 256;
  21.     NODELETE*     = 4096;
  22.  
  23.  
  24. VAR
  25.  
  26.     _close: PROCEDURE [linux] (handle: INTEGER): INTEGER;
  27.     _error: PROCEDURE [linux] (): INTEGER;
  28.  
  29.  
  30. PROCEDURE open* (file: ARRAY OF CHAR; mode: INTEGER): INTEGER;
  31.     RETURN API.dlopen(SYSTEM.ADR(file[0]), mode)
  32. END open;
  33.  
  34.  
  35. PROCEDURE sym* (handle: INTEGER; name: ARRAY OF CHAR): INTEGER;
  36.     RETURN API.dlsym(handle, SYSTEM.ADR(name[0]))
  37. END sym;
  38.  
  39.  
  40. PROCEDURE close* (handle: INTEGER): INTEGER;
  41.     RETURN _close(handle)
  42. END close;
  43.  
  44.  
  45. PROCEDURE error* (): INTEGER;
  46.     RETURN _error()
  47. END error;
  48.  
  49.  
  50. PROCEDURE init;
  51. VAR
  52.     lib: INTEGER;
  53.  
  54. BEGIN
  55.     lib := open("libdl.so.2", LAZY);
  56.     SYSTEM.PUT(SYSTEM.ADR(_close), sym(lib, "dlclose"));
  57.     ASSERT(_close # NIL);
  58.     SYSTEM.PUT(SYSTEM.ADR(_error), sym(lib, "dlerror"));
  59.     ASSERT(_error # NIL)
  60. END init;
  61.  
  62.  
  63. BEGIN
  64.     init
  65. END Libdl.