annotate src/w16select.c @ 17846:c427501449a1

(display_text_line): Move the code to fill out the line with the newline's face to the end of the newline code. Add changes (commented out) to record ellipsis positions in charstarts.
author Richard M. Stallman <rms@gnu.org>
date Fri, 16 May 1997 07:32:59 +0000
parents 0902196df62a
children 5c31b98be973
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
17451
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1 /* Win16 Selection processing for emacs on MS-Windows
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2 Copyright (C) 1996, 1997 Free Software Foundation.
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4 This file is part of GNU Emacs.
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
5
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
6 GNU Emacs is free software; you can redistribute it and/or modify
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
7 it under the terms of the GNU General Public License as published by
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
8 the Free Software Foundation; either version 2, or (at your option)
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
9 any later version.
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
10
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
11 GNU Emacs is distributed in the hope that it will be useful,
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
14 GNU General Public License for more details.
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
15
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
16 You should have received a copy of the GNU General Public License
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
17 along with GNU Emacs; see the file COPYING. If not, write to
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
19 Boston, MA 02111-1307, USA. */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
20
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
21 /* These functions work by using WinOldAp interface. WinOldAp
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
22 (WINOLDAP.MOD) is a Microsoft Windows extension supporting
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
23 "old" (character-mode) application access to Dynamic Data Exchange,
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
24 menus, and the Windows clipboard. */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
25
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
26 /* Written by Dale P. Smith <dpsm@en.com> */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
27 /* Adapted to DJGPP v1 by Eli Zaretskii <eliz@is.elta.co.il> */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
28
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
29 #ifdef MSDOS
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
30
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
31 #include <config.h>
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
32 #include <string.h>
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
33 #include <dpmi.h>
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
34 #include <go32.h>
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
35 #include <sys/farptr.h>
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
36 #include "lisp.h"
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
37 #include "dispextern.h" /* frame.h seems to want this */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
38 #include "frame.h" /* Need this to get the X window of selected_frame */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
39 #include "blockinput.h"
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
40
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
41 /* If ever some function outside this file will need to call any
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
42 clipboard-related function, the following prototypes and constants
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
43 should be put on a header file. Right now, nobody else uses them. */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
44
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
45 #define CF_TEXT 0x01
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
46 #define CF_BITMAP 0x02
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
47 #define CF_METAFILE 0x03
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
48 #define CF_SYLK 0x04
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
49 #define CF_DIF 0x05
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
50 #define CF_TIFF 0x06
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
51 #define CF_OEMTEXT 0x07
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
52 #define CF_DIBBITMAP 0x08
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
53 #define CF_WINWRITE 0x80
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
54 #define CF_DSPTEXT 0x81
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
55 #define CF_DSPBITMAP 0x82
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
56
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
57 unsigned identify_winoldap_version (void);
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
58 unsigned open_clipboard (void);
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
59 unsigned empty_clipboard (void);
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
60 unsigned set_clipboard_data (unsigned, void *, unsigned);
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
61 unsigned get_clipboard_data_size (unsigned);
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
62 unsigned get_clipboard_data (unsigned, void *, unsigned);
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
63 unsigned close_clipboard (void);
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
64 unsigned clipboard_compact (unsigned);
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
65
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
66 Lisp_Object QCLIPBOARD, QPRIMARY;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
67
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
68 /* The segment address and the size of the buffer in low
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
69 memory used to move data between us and WinOldAp module. */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
70
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
71 static struct {
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
72 unsigned long size;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
73 unsigned short rm_segment;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
74 } clipboard_xfer_buf_info;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
75
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
76 /* Emulation of `__dpmi_int' and friends for DJGPP v1.x */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
77
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
78 #if __DJGPP__ < 2
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
79
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
80 typedef _go32_dpmi_registers __dpmi_regs;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
81 #define __tb _go32_info_block.linear_address_of_transfer_buffer
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
82 #define _dos_ds _go32_info_block.selector_for_linear_memory
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
83
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
84 static int
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
85 __dpmi_int (intno, regs)
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
86 int intno;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
87 __dpmi_regs *regs;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
88 {
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
89 regs->x.ss = regs->x.sp = regs->x.flags = 0;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
90 return _go32_dpmi_simulate_int (intno, regs);
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
91 }
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
92
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
93 #endif /* __DJGPP__ < 2 */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
94
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
95 /* C functions to access the Windows 3.1x clipboard from DOS apps.
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
96
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
97 The information was obtained from the Microsoft Knowledge Base,
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
98 article Q67675 and can be found at:
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
99 http://www.microsoft.com/kb/developr/win_dk/q67675.htm */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
100
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
101 /* See also Ralf Brown's Interrupt List.
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
102
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
103 I also seem to remember reading about this in Dr. Dobbs Journal a
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
104 while ago, but if you knew my memory... :-)
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
105
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
106 Dale P. Smith <dpsm@en.com> */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
107
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
108 /* Return the WinOldAp support version, or 0x1700 if not supported. */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
109 unsigned
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
110 identify_winoldap_version ()
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
111 {
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
112 __dpmi_regs regs;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
113
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
114 /* Calls Int 2Fh/AX=1700h
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
115 Return Values AX == 1700H: Clipboard functions not available
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
116 <> 1700H: AL = Major version number
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
117 AH = Minor version number */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
118 regs.x.ax = 0x1700;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
119 __dpmi_int(0x2f, &regs);
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
120 return regs.x.ax;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
121 }
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
122
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
123 /* Open the clipboard, return non-zero if successfull. */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
124 unsigned
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
125 open_clipboard ()
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
126 {
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
127 __dpmi_regs regs;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
128
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
129 /* Is WINOLDAP supported? */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
130 /* Kludge alert!! If WinOldAp is not supported, we return a 0,
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
131 which is the same as ``Clipboard already open''. Currently,
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
132 this is taken as an error by all the functions that use
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
133 `open_clipboard', but if somebody someday will use that ``open''
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
134 clipboard, they will have interesting time debugging it... */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
135 if (identify_winoldap_version () == 0x1700)
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
136 return 0;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
137
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
138 /* Calls Int 2Fh/AX=1701h
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
139 Return Values AX == 0: Clipboard already open
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
140 <> 0: Clipboard opened */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
141 regs.x.ax = 0x1701;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
142 __dpmi_int(0x2f, &regs);
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
143 return regs.x.ax;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
144 }
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
145
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
146 /* Empty clipboard, return non-zero if successfull. */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
147 unsigned
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
148 empty_clipboard ()
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
149 {
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
150 __dpmi_regs regs;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
151
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
152 /* Calls Int 2Fh/AX=1702h
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
153 Return Values AX == 0: Error occurred
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
154 <> 0: OK, Clipboard emptied */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
155 regs.x.ax = 0x1702;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
156 __dpmi_int(0x2f, &regs);
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
157 return regs.x.ax;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
158 }
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
159
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
160 /* Ensure we have a buffer in low memory with enough memory for data
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
161 of size WANT_SIZE. Return the linear address of the buffer. */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
162 static unsigned long
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
163 alloc_xfer_buf (want_size)
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
164 unsigned want_size;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
165 {
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
166 __dpmi_regs regs;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
167
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
168 /* If the usual DJGPP transfer buffer is large enough, use that. */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
169 if (want_size <= _go32_info_block.size_of_transfer_buffer)
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
170 return __tb & 0xfffff;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
171
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
172 /* Need size rounded up to the nearest paragraph, and in
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
173 paragraph units (1 paragraph = 16 bytes). */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
174 clipboard_xfer_buf_info.size = (want_size + 15) >> 4;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
175
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
176 /* The NT DPMI host crashes us if we free DOS memory via the
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
177 DPMI service. Work around by calling DOS allocate/free block. */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
178 regs.h.ah = 0x48;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
179 regs.x.bx = clipboard_xfer_buf_info.size;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
180 __dpmi_int (0x21, &regs);
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
181 if (regs.x.flags & 1)
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
182 {
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
183 clipboard_xfer_buf_info.size = 0;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
184 return 0;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
185 }
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
186
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
187 clipboard_xfer_buf_info.rm_segment = regs.x.ax;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
188 return (((int)clipboard_xfer_buf_info.rm_segment) << 4) & 0xfffff;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
189 }
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
190
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
191 /* Free our clipboard buffer. We always free it after use, because
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
192 keeping it leaves less free conventional memory for subprocesses.
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
193 The clipboard buffer tends to be large in size, because for small
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
194 clipboard data sizes we use the DJGPP transfer buffer. */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
195 static void
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
196 free_xfer_buf ()
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
197 {
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
198 /* If the size is 0, we used DJGPP transfer buffer, so don't free. */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
199 if (clipboard_xfer_buf_info.size)
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
200 {
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
201 __dpmi_regs regs;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
202
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
203 /* The NT DPMI host crashes us if we free DOS memory via
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
204 the DPMI service. Work around by calling DOS free block. */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
205 regs.h.ah = 0x49;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
206 regs.x.es = clipboard_xfer_buf_info.rm_segment;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
207 __dpmi_int (0x21, &regs);
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
208 clipboard_xfer_buf_info.size = 0;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
209 }
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
210 }
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
211
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
212 /* Copy data into the clipboard, return non-zero if successfull. */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
213 unsigned
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
214 set_clipboard_data (Format, Data, Size)
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
215 unsigned Format;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
216 void *Data;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
217 unsigned Size;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
218 {
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
219 __dpmi_regs regs;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
220 unsigned truelen;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
221 unsigned long xbuf_addr, buf_offset;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
222 unsigned char *dp = Data, *dstart = dp;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
223
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
224 if (Format != CF_TEXT)
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
225 return 0;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
226
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
227 /* need to know final size after '\r' chars are inserted (the
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
228 standard CF_TEXT clipboard format uses CRLF line endings,
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
229 while Emacs uses just LF internally). */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
230 truelen = Size;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
231 /* avoid using strchr because it recomputes the length everytime */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
232 while ((dp = memchr (dp, '\n', Size - (dp - dstart))) != 0)
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
233 {
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
234 truelen++;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
235 dp++;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
236 }
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
237
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
238 if (clipboard_compact (truelen) < truelen)
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
239 return 0;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
240
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
241 if ((xbuf_addr = alloc_xfer_buf (truelen)) == 0)
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
242 return 0;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
243
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
244 /* Move the buffer into the low memory, convert LF into CR-LF pairs. */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
245 dp = Data;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
246 buf_offset = xbuf_addr;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
247 _farsetsel (_dos_ds);
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
248 while (Size--)
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
249 {
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
250 if (*dp == '\n')
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
251 _farnspokeb (buf_offset++, '\r');
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
252 _farnspokeb (buf_offset++, *dp++);
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
253 }
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
254
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
255 /* Calls Int 2Fh/AX=1703h with:
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
256 DX = WinOldAp-Supported Clipboard format
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
257 ES:BX = Pointer to data
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
258 SI:CX = Size of data in bytes
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
259 Return Values AX == 0: Error occurred
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
260 <> 0: OK. Data copied into the Clipboard. */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
261 regs.x.ax = 0x1703;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
262 regs.x.dx = Format;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
263 regs.x.si = truelen >> 16;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
264 regs.x.cx = truelen & 0xffff;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
265 regs.x.es = xbuf_addr >> 4;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
266 regs.x.bx = xbuf_addr & 15;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
267 __dpmi_int(0x2f, &regs);
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
268
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
269 free_xfer_buf ();
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
270
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
271 return regs.x.ax;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
272 }
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
273
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
274 /* Return the size of the clipboard data of format FORMAT. */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
275 unsigned
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
276 get_clipboard_data_size (Format)
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
277 unsigned Format;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
278 {
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
279 __dpmi_regs regs;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
280
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
281 /* Calls Int 2Fh/AX=1704h with:
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
282 DX = WinOldAp-Supported Clipboard format
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
283 Return Values DX:AX == Size of the data in bytes, including any
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
284 headers.
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
285 == 0 If data in this format is not in
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
286 the clipboard. */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
287 regs.x.ax = 0x1704;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
288 regs.x.dx = Format;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
289 __dpmi_int(0x2f, &regs);
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
290 return ( (((unsigned)regs.x.dx) << 16) | regs.x.ax);
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
291 }
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
292
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
293 /* Get clipboard data, return its length.
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
294 Warning: this doesn't check whether DATA has enough space to hold
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
295 SIZE bytes. */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
296 unsigned
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
297 get_clipboard_data (Format, Data, Size)
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
298 unsigned Format;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
299 void *Data;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
300 unsigned Size;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
301 {
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
302 __dpmi_regs regs;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
303 unsigned datalen = 0;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
304 unsigned long xbuf_addr;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
305 unsigned char *dp = Data;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
306
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
307 if (Format != CF_TEXT)
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
308 return 0;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
309
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
310 if (Size == 0)
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
311 return 0;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
312
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
313 if ((xbuf_addr = alloc_xfer_buf (Size)) == 0)
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
314 return 0;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
315
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
316 /* Calls Int 2Fh/AX=1705h with:
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
317 DX = WinOldAp-Supported Clipboard format
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
318 ES:BX = Pointer to data buffer to hold data
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
319 Return Values AX == 0: Error occurred (or data in this format is not
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
320 in the clipboard)
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
321 <> 0: OK */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
322 regs.x.ax = 0x1705;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
323 regs.x.dx = Format;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
324 regs.x.es = xbuf_addr >> 4;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
325 regs.x.bx = xbuf_addr & 15;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
326 __dpmi_int(0x2f, &regs);
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
327 if (regs.x.ax != 0)
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
328 {
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
329 /* Copy data from low memory, remove CR characters if before LF. */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
330 _farsetsel (_dos_ds);
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
331 while (Size--)
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
332 {
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
333 register unsigned char c = _farnspeekb (xbuf_addr++);
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
334
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
335 if ((*dp++ = c) == '\r' && _farnspeekb (xbuf_addr) == '\n')
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
336 {
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
337 dp--;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
338 *dp++ = '\n';
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
339 xbuf_addr++;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
340 }
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
341 /* Windows reportedly rounds up the size of clipboard data
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
342 (passed in SIZE) to a multiple of 32. We therefore bail
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
343 out when we see the first null character. */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
344 else if (c == '\0')
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
345 {
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
346 datalen = dp - (unsigned char *)Data - 1;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
347 break;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
348 }
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
349 }
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
350 }
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
351
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
352 free_xfer_buf ();
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
353
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
354 return datalen;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
355 }
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
356
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
357 /* Close clipboard, return non-zero if successfull. */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
358 unsigned
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
359 close_clipboard ()
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
360 {
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
361 __dpmi_regs regs;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
362
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
363 /* Calls Int 2Fh/AX=1708h
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
364 Return Values AX == 0: Error occurred
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
365 <> 0: OK */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
366 regs.x.ax = 0x1708;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
367 __dpmi_int(0x2f, &regs);
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
368 return regs.x.ax;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
369 }
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
370
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
371 /* Compact clipboard data so that at least SIZE bytes is available. */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
372 unsigned
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
373 clipboard_compact (Size)
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
374 unsigned Size;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
375 {
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
376 __dpmi_regs regs;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
377
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
378 /* Calls Int 2Fh/AX=1709H with:
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
379 SI:CX = Desired memory size in bytes.
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
380 Return Values DX:AX == Number of bytes of largest block of free memory.
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
381 == 0 if error or no memory */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
382 regs.x.ax = 0x1709;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
383 regs.x.si = Size >> 16;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
384 regs.x.cx = Size & 0xffff;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
385 __dpmi_int(0x2f, &regs);
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
386 return ((unsigned)regs.x.dx << 16) | regs.x.ax;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
387 }
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
388
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
389 static char no_mem_msg[] =
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
390 "(Not enough DOS memory to put saved text into clipboard.)";
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
391
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
392 DEFUN ("win16-set-clipboard-data", Fwin16_set_clipboard_data, Swin16_set_clipboard_data, 1, 2, 0,
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
393 "This sets the clipboard data to the given text.")
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
394 (string, frame)
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
395 Lisp_Object string, frame;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
396 {
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
397 int ok = 1, ok1 = 1;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
398 int nbytes;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
399 unsigned char *src;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
400
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
401 CHECK_STRING (string, 0);
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
402
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
403 if (NILP (frame))
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
404 frame = Fselected_frame ();
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
405
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
406 CHECK_LIVE_FRAME (frame, 0);
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
407 if ( !FRAME_MSDOS_P (XFRAME (frame)))
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
408 goto done;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
409
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
410 BLOCK_INPUT;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
411
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
412 nbytes = XSTRING (string)->size + 1;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
413 src = XSTRING (string)->data;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
414
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
415 if (!open_clipboard ())
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
416 goto error;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
417
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
418 ok = empty_clipboard () && (ok1 = set_clipboard_data (CF_TEXT, src, nbytes));
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
419
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
420 close_clipboard ();
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
421
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
422 if (ok) goto done;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
423
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
424 error:
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
425
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
426 ok = 0;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
427
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
428 /* Notify user if the text is too large to fit into DOS memory.
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
429 (This will happen somewhere after 600K bytes (470K in DJGPP v1.x),
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
430 depending on user system configuration.) If we just silently
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
431 fail the function, people might wonder why their text sometimes
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
432 doesn't make it to the clipboard. */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
433 if (ok1 == 0)
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
434 {
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
435 message2 (no_mem_msg, sizeof (no_mem_msg) - 1);
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
436 sit_for (2, 0, 0, 1);
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
437 }
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
438
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
439 done:
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
440 UNBLOCK_INPUT;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
441
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
442 return (ok ? string : Qnil);
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
443 }
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
444
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
445 DEFUN ("win16-get-clipboard-data", Fwin16_get_clipboard_data, Swin16_get_clipboard_data, 0, 1, 0,
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
446 "This gets the clipboard data in text format.")
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
447 (frame)
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
448 Lisp_Object frame;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
449 {
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
450 unsigned data_size, truelen;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
451 unsigned char *htext;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
452 Lisp_Object ret = Qnil;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
453
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
454 if (!NILP (frame))
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
455 CHECK_LIVE_FRAME (frame, 0);
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
456
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
457 if (NILP (frame))
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
458 frame = Fselected_frame ();
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
459
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
460 CHECK_LIVE_FRAME (frame, 0);
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
461 if ( !FRAME_MSDOS_P (XFRAME (frame)))
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
462 goto done;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
463
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
464 BLOCK_INPUT;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
465
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
466 if (!open_clipboard ())
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
467 goto done;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
468
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
469 if ((data_size = get_clipboard_data_size (CF_TEXT)) == 0 ||
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
470 (htext = (unsigned char *)xmalloc (data_size)) == 0)
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
471 goto closeclip;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
472
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
473 /* need to know final size after '\r' chars are removed because
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
474 we can't change the string size manually, and doing an extra
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
475 copy is silly */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
476 if ((truelen = get_clipboard_data (CF_TEXT, htext, data_size)) == 0)
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
477 goto closeclip;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
478
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
479 ret = make_string (htext, truelen);
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
480 xfree (htext);
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
481
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
482 closeclip:
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
483 close_clipboard ();
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
484
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
485 done:
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
486 UNBLOCK_INPUT;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
487
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
488 return (ret);
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
489 }
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
490
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
491 /* Support checking for a clipboard selection. */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
492
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
493 DEFUN ("x-selection-exists-p", Fx_selection_exists_p, Sx_selection_exists_p,
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
494 0, 1, 0,
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
495 "Whether there is an owner for the given X Selection.\n\
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
496 The arg should be the name of the selection in question, typically one of\n\
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
497 the symbols `PRIMARY', `SECONDARY', or `CLIPBOARD'.\n\
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
498 \(Those are literal upper-case symbol names, since that's what X expects.)\n\
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
499 For convenience, the symbol nil is the same as `PRIMARY',\n\
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
500 and t is the same as `SECONDARY'.")
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
501 (selection)
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
502 Lisp_Object selection;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
503 {
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
504 CHECK_SYMBOL (selection, 0);
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
505
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
506 /* Return nil for SECONDARY selection. For PRIMARY (or nil)
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
507 selection, check if there is some text on the kill-ring;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
508 for CLIPBOARD, check if the clipboard currently has valid
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
509 text format contents.
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
510
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
511 The test for killed text on the kill-ring emulates the Emacs
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
512 behavior on X, where killed text is also put into X selection
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
513 by the X interface code. (On MSDOS, killed text is only put
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
514 into the clipboard if we run under Windows, so we cannot check
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
515 the clipboard alone.) */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
516 if ((EQ (selection, Qnil) || EQ (selection, QPRIMARY))
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
517 && ! NILP (XSYMBOL (Fintern_soft (build_string ("kill-ring"),
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
518 Qnil))->value))
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
519 return Qt;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
520
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
521 if (EQ (selection, QCLIPBOARD))
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
522 {
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
523 Lisp_Object val = Qnil;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
524
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
525 if (open_clipboard ())
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
526 {
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
527 if (get_clipboard_data_size (CF_TEXT))
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
528 val = Qt;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
529 close_clipboard ();
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
530 }
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
531 return val;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
532 }
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
533 return Qnil;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
534 }
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
535
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
536 void
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
537 syms_of_win16select ()
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
538 {
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
539 defsubr (&Swin16_set_clipboard_data);
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
540 defsubr (&Swin16_get_clipboard_data);
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
541 defsubr (&Sx_selection_exists_p);
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
542
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
543 QPRIMARY = intern ("PRIMARY"); staticpro (&QPRIMARY);
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
544 QCLIPBOARD = intern ("CLIPBOARD"); staticpro (&QCLIPBOARD);
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
545 }
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
546
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
547 #endif /* MSDOS */