Unix.HostLibs.Mod 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. (**
  2. AUTHOR: Alexey Morozov
  3. PURPOSE: Dynamic library tools for Unix platforms
  4. *)
  5. MODULE HostLibs;
  6. IMPORT
  7. Unix;
  8. TYPE
  9. LibHandle* = ADDRESS; (** dynamic library handle type *)
  10. CONST
  11. NilLibHandle* = NIL; (** invalid library handle *)
  12. (*
  13. dlopen flags
  14. #define RTLD_LAZY 0x0001
  15. #define RTLD_NOW 0x0002
  16. #define RTLD_GLOBAL 0x0100
  17. #define RTLD_LOCAL 0x0000
  18. #define RTLD_NOSHARE 0x1000
  19. #define RTLD_EXE 0x2000
  20. #define RTLD_SCRIPT 0x4000
  21. *)
  22. (**
  23. Load a dynamic library
  24. fileName: library file name
  25. lib: returned loaded library handle; NilLibHandle in case of an error
  26. Return: TRUE in case of success
  27. *)
  28. PROCEDURE LoadLibrary*(CONST fileName: ARRAY OF CHAR; VAR lib: LibHandle): BOOLEAN;
  29. BEGIN
  30. lib := Unix.Dlopen(fileName, 0x0002);
  31. RETURN (lib # NilLibHandle);
  32. FINALLY
  33. RETURN FALSE;
  34. END LoadLibrary;
  35. (**
  36. Free a previously loaded dynamic library
  37. lib: library handle
  38. Return: TRUE in case of success
  39. *)
  40. PROCEDURE FreeLibrary*(CONST lib: LibHandle): BOOLEAN;
  41. BEGIN
  42. Unix.Dlclose(lib);
  43. RETURN TRUE;
  44. FINALLY
  45. RETURN FALSE;
  46. END FreeLibrary;
  47. (**
  48. Get a procedure from a loaded dynamic library
  49. lib: library handle
  50. name: name of the procedure
  51. procAddr: address of the destination procedure pointer (e.g. ADDRESSOF(procedureVariable))
  52. Return: TRUE in case of success
  53. *)
  54. PROCEDURE GetProcedure*(CONST lib: LibHandle; CONST name: ARRAY OF CHAR; CONST procAddr: ADDRESS): BOOLEAN;
  55. VAR addr: ADDRESS;
  56. BEGIN
  57. ASSERT(procAddr # NIL);
  58. Unix.Dlsym(lib,name,procAddr);
  59. SYSTEM.GET(procAddr,addr);
  60. RETURN addr # NIL;
  61. FINALLY
  62. RETURN FALSE;
  63. END GetProcedure;
  64. END HostLibs.