| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- (*
- BSD 2-Clause License
- Copyright (c) 2019, Anton Krotov
- All rights reserved.
- *)
- MODULE Libdl;
- IMPORT SYSTEM, API;
- CONST
- LAZY* = 1;
- NOW* = 2;
- BINDING_MASK* = 3;
- NOLOAD* = 4;
- LOCAL* = 0;
- GLOBAL* = 256;
- NODELETE* = 4096;
- VAR
- _close: PROCEDURE [linux] (handle: INTEGER): INTEGER;
- _error: PROCEDURE [linux] (): INTEGER;
- PROCEDURE open* (file: ARRAY OF CHAR; mode: INTEGER): INTEGER;
- RETURN API.dlopen(SYSTEM.ADR(file[0]), mode)
- END open;
- PROCEDURE sym* (handle: INTEGER; name: ARRAY OF CHAR): INTEGER;
- RETURN API.dlsym(handle, SYSTEM.ADR(name[0]))
- END sym;
- PROCEDURE close* (handle: INTEGER): INTEGER;
- RETURN _close(handle)
- END close;
- PROCEDURE error* (): INTEGER;
- RETURN _error()
- END error;
- PROCEDURE init;
- VAR
- lib: INTEGER;
- BEGIN
- lib := open("libdl.so.2", LAZY);
- SYSTEM.PUT(SYSTEM.ADR(_close), sym(lib, "dlclose"));
- ASSERT(_close # NIL);
- SYSTEM.PUT(SYSTEM.ADR(_error), sym(lib, "dlerror"));
- ASSERT(_error # NIL)
- END init;
- BEGIN
- init
- END Libdl.
|