HostClipboard.Mod 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. MODULE HostClipboard; (** AUTHOR "staubesv"; PURPOSE "Interface to host system clipboard"; *)
  2. (**
  3. * This module provides an interface for accessing the host system clipboard (e.g. Windows, Virtual Machine, ...)
  4. *)
  5. IMPORT
  6. Texts;
  7. CONST
  8. Ok* = 0;
  9. ClipboardNotAvailable* = 1;
  10. TYPE
  11. ClipboardHandler = PROCEDURE {DELEGATE} (text : Texts.Text);
  12. VAR
  13. getFromClipboard, putToClipboard : ClipboardHandler;
  14. PROCEDURE Get*(text : Texts.Text; VAR res : WORD);
  15. BEGIN {EXCLUSIVE}
  16. ASSERT((text # NIL) & (text.HasWriteLock()));
  17. IF (getFromClipboard # NIL) THEN
  18. getFromClipboard(text);
  19. res := Ok;
  20. ELSE
  21. res := ClipboardNotAvailable;
  22. END;
  23. END Get;
  24. PROCEDURE Put*(text : Texts.Text; VAR res : WORD);
  25. BEGIN {EXCLUSIVE}
  26. ASSERT((text # NIL) & (text.HasReadLock()));
  27. IF (putToClipboard # NIL) THEN
  28. putToClipboard(text);
  29. res := Ok;
  30. ELSE
  31. res := ClipboardNotAvailable;
  32. END;
  33. END Put;
  34. PROCEDURE SetHandlers*(get, put : ClipboardHandler);
  35. BEGIN {EXCLUSIVE}
  36. getFromClipboard := get; putToClipboard := put;
  37. END SetHandlers;
  38. END HostClipboard.