This is the mail archive of the cygwin@sources.redhat.com mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: Clipboard from Cygwin?


Okay, here's the most recent version of my experimental /dev/clipboard
stuff. I'm gonna have to leave off for a while, but I wanted to post it
here so it'd be available if anybody wants to play with it. It compiles
(*) but be warned: the compiled kernel hangs -- this may or may not be
related to the clipboard patch itself.

(*) There are a few build problems with the CVS version of winsup --
that's why there haven't been any snapshots since June 25. DJ & Chris
are working on fixing that. I was able to --build-- by playing a few
games with stuff unrelated to /dev/clipboard. Those 'games' are not
included in the patch below.

Anyway, I'd wait a day or so until the regular CVS version of cygwin is
buildable, and the snapshots show up again, and then start playing with
this stuff.

So, FWIW, here ya go:

contains both a patch and a new file, fhandler_clipboard.cc, that should
be copied into winsup/cygwin. Both are pasted in plaintext below the uue
file.

--Chuck


begin 664 clipboard-patch.tar.gz
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
&1%@`*```
`
end

-----------------beginning of patch-------------------------
? cygwin/fhandler_clipboard.cc
Index: cygwin/Makefile.in
===================================================================
RCS file: /cvs/src/src/winsup/cygwin/Makefile.in,v
retrieving revision 1.26
diff -u -r1.26 Makefile.in
--- Makefile.in	2000/08/02 16:28:17	1.26
+++ Makefile.in	2000/08/02 18:45:15
@@ -114,18 +114,19 @@
 
 EXTRA_OFILES=$(bupdir1)/libiberty/random.o
$(bupdir1)/libiberty/strsignal.o
 
-DLL_IMPORTS:=$(w32api_lib)/libkernel32.a
+DLL_IMPORTS:=$(w32api_lib)/libkernel32.a $(w32api_lib)/libuser32.a
 
 DLL_OFILES:=assert.o dcrt0.o debug.o delqueue.o dir.o dlfcn.o
dll_init.o \
 	environ.o  errno.o exceptions.o exec.o external.o fcntl.o fhandler.o \
 	fhandler_console.o fhandler_floppy.o fhandler_random.o fhandler_raw.o
\
 	fhandler_serial.o fhandler_tape.o fhandler_termios.o fhandler_tty.o \
-	fhandler_windows.o fhandler_zero.o fork.o glob.o grp.o heap.o hinfo.o
\
-	init.o ioctl.o localtime.o malloc.o mmap.o net.o ntea.o passwd.o \
-	path.o pinfo.o pipe.o poll.o regexp.o regerror.o regsub.o registry.o \
-	resource.o scandir.o security.o select.o shared.o signal.o sigproc.o \
-	smallprint.o spawn.o strace.o strsep.o sync.o syscalls.o sysconf.o \
-	syslog.o termios.o times.o tty.o uinfo.o uname.o wait.o window.o \
+	fhandler_windows.o fhandler_zero.o fhandler_clipboard.o fork.o glob.o
\
+	grp.o heap.o hinfo.o init.o ioctl.o localtime.o malloc.o mmap.o net.o
\
+	ntea.o passwd.o path.o pinfo.o pipe.o poll.o regexp.o regerror.o \
+	regsub.o registry.o resource.o scandir.o security.o select.o shared.o
\
+	signal.o sigproc.o smallprint.o spawn.o strace.o strsep.o sync.o \
+	syscalls.o sysconf.o syslog.o termios.o times.o tty.o uinfo.o uname.o
\
+	wait.o window.o \
 	$(EXTRA_DLL_OFILES) $(EXTRA_OFILES) $(MT_SAFE_OBJECTS)
 
 GMON_OFILES:= gmon.o mcount.o profil.o
@@ -307,6 +308,7 @@
 fhandler_floppy.o: $(WINSUP_H)
 fhandler_tape.o: $(WINSUP_H)
 fhandler_zero.o: $(WINSUP_H)
+fhandler_clipboard.o: $(WINSUP_H)
 fhandler_random.o: $(WINSUP_H)
 fork.o: $(WINSUP_H) dll_init.h
 glob.o: include/glob.h
Index: cygwin/fhandler.h
===================================================================
RCS file: /cvs/src/src/winsup/cygwin/fhandler.h,v
retrieving revision 1.16
diff -u -r1.16 fhandler.h
--- fhandler.h	2000/07/29 04:19:24	1.16
+++ fhandler.h	2000/08/02 18:45:16
@@ -27,6 +27,7 @@
      fhandler_dev_raw     (fhandler_raw.cc)
      fhandler_dev_floppy  (fhandler_floppy.cc)
      fhandler_dev_tape    (fhandler_tape.cc)
+     fhandler_dev_clipboard	(fhandler_clip.cc)
 
      fhandler_pipe
      fhandler_socket      (net.cc)
@@ -94,8 +95,9 @@
   FH_NULL    = 0x00000013,	/* is the null device */
   FH_ZERO    = 0x00000014,	/* is the zero device */
   FH_RANDOM  = 0x00000015,	/* is a random device */
+  FH_CLIPBOARD = 0x00000016,  /* is the windows clipboard */
 
-  FH_NDEV    = 0x00000016,	/* Maximum number of devices */
+  FH_NDEV    = 0x00000017,	/* Maximum number of devices */
   FH_DEVMASK = 0x00000fff,	/* devices live here */
   FH_BAD     = 0xffffffff
 };
@@ -761,6 +763,21 @@
   int dup (fhandler_base *child);
 
   void dump ();
+};
+
+class fhandler_dev_clipboard: public fhandler_base
+{
+public:
+  fhandler_dev_clipboard (const char *name);
+
+  void dump ();
+
+  int is_windows (void) { return 1; }
+  int open (const char *path, int flags, mode_t mode = 0);
+  int write (const void *ptr, size_t len);
+  int read (void *ptr, size_t len);
+  off_t lseek (off_t, int);
+  int close (void);
 };
 
 class fhandler_windows: public fhandler_base
Index: cygwin/hinfo.cc
===================================================================
RCS file: /cvs/src/src/winsup/cygwin/hinfo.cc,v
retrieving revision 1.12
diff -u -r1.12 hinfo.cc
--- hinfo.cc	2000/08/02 16:28:17	1.12
+++ hinfo.cc	2000/08/02 18:45:17
@@ -282,6 +282,9 @@
       case FH_ZERO:
 	fh = new (buf) fhandler_dev_zero (name);
 	break;
+      case FH_CLIPBOARD:
+	fh = new (buf) fhandler_dev_clipboard (name);
+	break;
       case FH_RANDOM:
 	fh = new (buf) fhandler_dev_random (name, unit);
 	break;
Index: cygwin/path.cc
===================================================================
RCS file: /cvs/src/src/winsup/cygwin/path.cc,v
retrieving revision 1.41
diff -u -r1.41 path.cc
--- path.cc	2000/08/02 16:28:17	1.41
+++ path.cc	2000/08/02 18:45:21
@@ -437,6 +437,7 @@
   "\\dev\\st%d",
   "nul",
   "\\dev\\zero",
+  "\\dev\\clipboard",
   "\\dev\\%srandom",
 };
 
@@ -502,6 +503,8 @@
 	devn = FH_NULL;
       else if (deveq ("zero"))
 	devn = FH_ZERO;
+      else if (deveq ("clipboard"))
+	devn = FH_CLIPBOARD;
       else if (deveq ("random") || deveq ("urandom"))
         {
 	  devn = FH_RANDOM;
Index: cygwin/winsup.h
===================================================================
RCS file: /cvs/src/src/winsup/cygwin/winsup.h,v
retrieving revision 1.25
diff -u -r1.25 winsup.h
--- winsup.h	2000/08/02 16:28:18	1.25
+++ winsup.h	2000/08/02 18:45:24
@@ -72,8 +72,12 @@
 #undef _WINNETWK_H
 #undef _WINSVC_H
 
-/* The one function we use from winuser.h most of the time */
+/* The few functions we use from winuser.h most of the time */
 extern "C" DWORD WINAPI GetLastError (void);
+#define CF_TEXT 1
+extern "C" BOOL WINAPI OpenClipboard(HWND);
+extern "C" HANDLE WINAPI GetClipboardData(UINT);
+extern "C" BOOL WINAPI CloseClipboard(void);
 
 /* Used for runtime OS check/decisions. */
 enum os_type {winNT = 1, win95, win98, win32s, unknown};
-----------------------------end of patch------------------------


----------------------------fhandler_clipboard.cc----------------
/* fhandler_dev_clipboard: code to access /dev/clipboard

   Copyright 2000 Red Hat

   Written by Charles Wilson (cwilson@ece.gatech.edu)

This file is part of Cygwin.

This software is a copyrighted work licensed under the terms of the
Cygwin license.  Please consult the file "CYGWIN_LICENSE" for
details. */

#include <errno.h>
#include "winsup.h"
#include <windows.h>

fhandler_dev_clipboard::fhandler_dev_clipboard (const char *name)
  : fhandler_base (FH_CLIPBOARD, name)
{
  set_cb (sizeof *this);
}

int
fhandler_dev_clipboard::open (const char *, int flags, mode_t)
{
  set_flags (flags);
  return 1;
}

int
fhandler_dev_clipboard::write (const void *, size_t len)
{
  return len;
}

int
fhandler_dev_clipboard::read (void *ptr, size_t len)
{
  HGLOBAL hglb;
  LPSTR lpstr;

  OpenClipboard(0);
  hglb = GetClipboardData(CF_TEXT);
  lpstr = (LPSTR) GlobalLock(hglb);

  len = snprintf((char *) ptr, len, "%s", lpstr);
  GlobalUnlock(hglb);
  CloseClipboard();
  return len;
}

off_t
fhandler_dev_clipboard::lseek (off_t, int)
{
  return 0;
}

int
fhandler_dev_clipboard::close (void)
{
  return 0;
}

void
fhandler_dev_clipboard::dump ()
{
  paranoid_printf("here, fhandler_dev_clipboard");
}
-------------------end of fhandler_clipboard.cc---------

--
Want to unsubscribe from this list?
Send a message to cygwin-unsubscribe@sourceware.cygnus.com


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]