annotate src/w16select.c @ 61403:008bb0675c5b

(readevalloop): Add args START and END as region in current buffer to read. Callers changed. When specified, narrow to this region only when reading, not during eval. Track next point to read from during eval. Also restore point to "real" buffer position before eval. (Feval_region): Don't save excursion and restriction here, and don't narrow to region. Just pass region to readevalloop. Note: Point is now preserved even when PRINTFLAG is nil.
author Kim F. Storm <storm@cua.dk>
date Fri, 08 Apr 2005 23:33:28 +0000
parents 695cf19ef79e
children a8fa7c632ee4 375f2633d815
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
21709
64adf1f4d54d (alloc_xfer_buf): If want_size is more than 1MB,
Eli Zaretskii <eliz@gnu.org>
parents: 21707
diff changeset
1 /* 16-bit Windows Selection processing for emacs on MS-Windows
39584
6145836b795c Use SYMBOL_VALUE/ SET_SYMBOL_VALUE macros instead of accessing
Gerd Moellmann <gerd@gnu.org>
parents: 30900
diff changeset
2 Copyright (C) 1996, 1997, 2001 Free Software Foundation.
45333
5d4cefa40da1 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 43475
diff changeset
3
17451
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"
22729
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
40 #include "buffer.h"
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
41 #include "charset.h"
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
42 #include "coding.h"
45988
37913830a881 Include composite.h
Juanma Barranquero <lekktu@gmail.com>
parents: 45982
diff changeset
43 #include "composite.h"
17451
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
44
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
45 /* If ever some function outside this file will need to call any
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
46 clipboard-related function, the following prototypes and constants
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
47 should be put on a header file. Right now, nobody else uses them. */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
48
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
49 #define CF_TEXT 0x01
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
50 #define CF_BITMAP 0x02
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
51 #define CF_METAFILE 0x03
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
52 #define CF_SYLK 0x04
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
53 #define CF_DIF 0x05
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
54 #define CF_TIFF 0x06
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
55 #define CF_OEMTEXT 0x07
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
56 #define CF_DIBBITMAP 0x08
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
57 #define CF_WINWRITE 0x80
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
58 #define CF_DSPTEXT 0x81
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
59 #define CF_DSPBITMAP 0x82
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
60
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
61 unsigned identify_winoldap_version (void);
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
62 unsigned open_clipboard (void);
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
63 unsigned empty_clipboard (void);
22729
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
64 unsigned set_clipboard_data (unsigned, void *, unsigned, int);
17451
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
65 unsigned get_clipboard_data_size (unsigned);
22729
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
66 unsigned get_clipboard_data (unsigned, void *, unsigned, int);
17451
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
67 unsigned close_clipboard (void);
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
68 unsigned clipboard_compact (unsigned);
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
69
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
70 Lisp_Object QCLIPBOARD, QPRIMARY;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
71
22729
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
72 /* Coding system for communicating with other Windows programs via the
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
73 clipboard. */
22904
37738fa8626a (Fw16_set_clipboard_data, Fw16_get_clipboard_data, syms_of_win16select):
Eli Zaretskii <eliz@gnu.org>
parents: 22749
diff changeset
74 static Lisp_Object Vselection_coding_system;
22729
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
75
23164
ecc4641bf00a (Vnext_selection_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 22904
diff changeset
76 /* Coding system for the next communicating with other Windows programs. */
ecc4641bf00a (Vnext_selection_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 22904
diff changeset
77 static Lisp_Object Vnext_selection_coding_system;
ecc4641bf00a (Vnext_selection_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 22904
diff changeset
78
17451
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
79 /* The segment address and the size of the buffer in low
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
80 memory used to move data between us and WinOldAp module. */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
81 static struct {
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
82 unsigned long size;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
83 unsigned short rm_segment;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
84 } clipboard_xfer_buf_info;
24260
bd3ce96bc7eb (last_clipboard_text, clipboard_storage_size): New
Eli Zaretskii <eliz@gnu.org>
parents: 24258
diff changeset
85
bd3ce96bc7eb (last_clipboard_text, clipboard_storage_size): New
Eli Zaretskii <eliz@gnu.org>
parents: 24258
diff changeset
86 /* The last text we put into the clipboard. This is used to prevent
bd3ce96bc7eb (last_clipboard_text, clipboard_storage_size): New
Eli Zaretskii <eliz@gnu.org>
parents: 24258
diff changeset
87 passing back our own text from the clipboard, instead of using the
bd3ce96bc7eb (last_clipboard_text, clipboard_storage_size): New
Eli Zaretskii <eliz@gnu.org>
parents: 24258
diff changeset
88 kill ring. The former is undesirable because the clipboard data
bd3ce96bc7eb (last_clipboard_text, clipboard_storage_size): New
Eli Zaretskii <eliz@gnu.org>
parents: 24258
diff changeset
89 could be MULEtilated by inappropriately chosen
bd3ce96bc7eb (last_clipboard_text, clipboard_storage_size): New
Eli Zaretskii <eliz@gnu.org>
parents: 24258
diff changeset
90 (next-)selection-coding-system. For this reason, we must store the
bd3ce96bc7eb (last_clipboard_text, clipboard_storage_size): New
Eli Zaretskii <eliz@gnu.org>
parents: 24258
diff changeset
91 text *after* it was encoded/Unix-to-DOS-converted. */
bd3ce96bc7eb (last_clipboard_text, clipboard_storage_size): New
Eli Zaretskii <eliz@gnu.org>
parents: 24258
diff changeset
92 static unsigned char *last_clipboard_text;
bd3ce96bc7eb (last_clipboard_text, clipboard_storage_size): New
Eli Zaretskii <eliz@gnu.org>
parents: 24258
diff changeset
93
bd3ce96bc7eb (last_clipboard_text, clipboard_storage_size): New
Eli Zaretskii <eliz@gnu.org>
parents: 24258
diff changeset
94 /* The size of allocated storage for storing the clipboard data. */
bd3ce96bc7eb (last_clipboard_text, clipboard_storage_size): New
Eli Zaretskii <eliz@gnu.org>
parents: 24258
diff changeset
95 static size_t clipboard_storage_size;
17451
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
96
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
97 /* Emulation of `__dpmi_int' and friends for DJGPP v1.x */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
98
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
99 #if __DJGPP__ < 2
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
100
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
101 typedef _go32_dpmi_registers __dpmi_regs;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
102 #define __tb _go32_info_block.linear_address_of_transfer_buffer
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
103 #define _dos_ds _go32_info_block.selector_for_linear_memory
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
104
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
105 static int
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
106 __dpmi_int (intno, regs)
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
107 int intno;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
108 __dpmi_regs *regs;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
109 {
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
110 regs->x.ss = regs->x.sp = regs->x.flags = 0;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
111 return _go32_dpmi_simulate_int (intno, regs);
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
112 }
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
113
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
114 #endif /* __DJGPP__ < 2 */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
115
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
116 /* C functions to access the Windows 3.1x clipboard from DOS apps.
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
117
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
118 The information was obtained from the Microsoft Knowledge Base,
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
119 article Q67675 and can be found at:
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
120 http://www.microsoft.com/kb/developr/win_dk/q67675.htm */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
121
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
122 /* See also Ralf Brown's Interrupt List.
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
123
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
124 I also seem to remember reading about this in Dr. Dobbs Journal a
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
125 while ago, but if you knew my memory... :-)
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
126
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
127 Dale P. Smith <dpsm@en.com> */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
128
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
129 /* Return the WinOldAp support version, or 0x1700 if not supported. */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
130 unsigned
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
131 identify_winoldap_version ()
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
132 {
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
133 __dpmi_regs regs;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
134
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
135 /* Calls Int 2Fh/AX=1700h
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
136 Return Values AX == 1700H: Clipboard functions not available
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
137 <> 1700H: AL = Major version number
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
138 AH = Minor version number */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
139 regs.x.ax = 0x1700;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
140 __dpmi_int(0x2f, &regs);
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
141 return regs.x.ax;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
142 }
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
143
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
144 /* Open the clipboard, return non-zero if successfull. */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
145 unsigned
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
146 open_clipboard ()
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
147 {
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
148 __dpmi_regs regs;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
149
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
150 /* Is WINOLDAP supported? */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
151 /* Kludge alert!! If WinOldAp is not supported, we return a 0,
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
152 which is the same as ``Clipboard already open''. Currently,
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
153 this is taken as an error by all the functions that use
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
154 `open_clipboard', but if somebody someday will use that ``open''
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
155 clipboard, they will have interesting time debugging it... */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
156 if (identify_winoldap_version () == 0x1700)
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
157 return 0;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
158
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
159 /* Calls Int 2Fh/AX=1701h
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
160 Return Values AX == 0: Clipboard already open
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
161 <> 0: Clipboard opened */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
162 regs.x.ax = 0x1701;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
163 __dpmi_int(0x2f, &regs);
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
164 return regs.x.ax;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
165 }
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
166
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
167 /* Empty clipboard, return non-zero if successfull. */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
168 unsigned
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
169 empty_clipboard ()
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
170 {
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
171 __dpmi_regs regs;
45333
5d4cefa40da1 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 43475
diff changeset
172
17451
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
173 /* Calls Int 2Fh/AX=1702h
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
174 Return Values AX == 0: Error occurred
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
175 <> 0: OK, Clipboard emptied */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
176 regs.x.ax = 0x1702;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
177 __dpmi_int(0x2f, &regs);
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
178 return regs.x.ax;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
179 }
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
180
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
181 /* Ensure we have a buffer in low memory with enough memory for data
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
182 of size WANT_SIZE. Return the linear address of the buffer. */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
183 static unsigned long
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
184 alloc_xfer_buf (want_size)
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
185 unsigned want_size;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
186 {
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
187 __dpmi_regs regs;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
188
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
189 /* If the usual DJGPP transfer buffer is large enough, use that. */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
190 if (want_size <= _go32_info_block.size_of_transfer_buffer)
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
191 return __tb & 0xfffff;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
192
21709
64adf1f4d54d (alloc_xfer_buf): If want_size is more than 1MB,
Eli Zaretskii <eliz@gnu.org>
parents: 21707
diff changeset
193 /* Don't even try to allocate more than 1MB of memory: DOS cannot
64adf1f4d54d (alloc_xfer_buf): If want_size is more than 1MB,
Eli Zaretskii <eliz@gnu.org>
parents: 21707
diff changeset
194 possibly handle that (it will overflow the BX register below). */
64adf1f4d54d (alloc_xfer_buf): If want_size is more than 1MB,
Eli Zaretskii <eliz@gnu.org>
parents: 21707
diff changeset
195 if (want_size > 0xfffff)
64adf1f4d54d (alloc_xfer_buf): If want_size is more than 1MB,
Eli Zaretskii <eliz@gnu.org>
parents: 21707
diff changeset
196 return 0;
64adf1f4d54d (alloc_xfer_buf): If want_size is more than 1MB,
Eli Zaretskii <eliz@gnu.org>
parents: 21707
diff changeset
197
17451
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
198 /* Need size rounded up to the nearest paragraph, and in
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
199 paragraph units (1 paragraph = 16 bytes). */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
200 clipboard_xfer_buf_info.size = (want_size + 15) >> 4;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
201
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
202 /* The NT DPMI host crashes us if we free DOS memory via the
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
203 DPMI service. Work around by calling DOS allocate/free block. */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
204 regs.h.ah = 0x48;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
205 regs.x.bx = clipboard_xfer_buf_info.size;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
206 __dpmi_int (0x21, &regs);
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
207 if (regs.x.flags & 1)
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
208 {
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
209 clipboard_xfer_buf_info.size = 0;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
210 return 0;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
211 }
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
212
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
213 clipboard_xfer_buf_info.rm_segment = regs.x.ax;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
214 return (((int)clipboard_xfer_buf_info.rm_segment) << 4) & 0xfffff;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
215 }
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
216
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
217 /* Free our clipboard buffer. We always free it after use, because
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
218 keeping it leaves less free conventional memory for subprocesses.
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
219 The clipboard buffer tends to be large in size, because for small
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
220 clipboard data sizes we use the DJGPP transfer buffer. */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
221 static void
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
222 free_xfer_buf ()
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 the size is 0, we used DJGPP transfer buffer, so don't free. */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
225 if (clipboard_xfer_buf_info.size)
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
226 {
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
227 __dpmi_regs regs;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
228
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
229 /* The NT DPMI host crashes us if we free DOS memory via
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
230 the DPMI service. Work around by calling DOS free block. */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
231 regs.h.ah = 0x49;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
232 regs.x.es = clipboard_xfer_buf_info.rm_segment;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
233 __dpmi_int (0x21, &regs);
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
234 clipboard_xfer_buf_info.size = 0;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
235 }
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
236 }
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
237
24003
5048f069091e (set_clipboard_data): Terminate the text with a null
Eli Zaretskii <eliz@gnu.org>
parents: 23875
diff changeset
238 /* Copy data into the clipboard, return zero if successfull. */
17451
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
239 unsigned
22729
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
240 set_clipboard_data (Format, Data, Size, Raw)
17451
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
241 unsigned Format;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
242 void *Data;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
243 unsigned Size;
22729
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
244 int Raw;
17451
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
245 {
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
246 __dpmi_regs regs;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
247 unsigned truelen;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
248 unsigned long xbuf_addr, buf_offset;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
249 unsigned char *dp = Data, *dstart = dp;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
250
22749
14bde44d261c (set_clipboard_data, get_clipboard_data, Fw16_set_clipboard_data,
Eli Zaretskii <eliz@gnu.org>
parents: 22729
diff changeset
251 if (Format != CF_OEMTEXT)
30900
2bec1c202b13 (set_clipboard_data): If there's not enough memory
Eli Zaretskii <eliz@gnu.org>
parents: 29179
diff changeset
252 return 3;
17451
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
253
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
254 /* need to know final size after '\r' chars are inserted (the
22749
14bde44d261c (set_clipboard_data, get_clipboard_data, Fw16_set_clipboard_data,
Eli Zaretskii <eliz@gnu.org>
parents: 22729
diff changeset
255 standard CF_OEMTEXT clipboard format uses CRLF line endings,
17451
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
256 while Emacs uses just LF internally). */
24003
5048f069091e (set_clipboard_data): Terminate the text with a null
Eli Zaretskii <eliz@gnu.org>
parents: 23875
diff changeset
257 truelen = Size + 1; /* +1 for the terminating null */
22729
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
258
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
259 if (!Raw)
17451
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
260 {
22729
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
261 /* avoid using strchr because it recomputes the length everytime */
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
262 while ((dp = memchr (dp, '\n', Size - (dp - dstart))) != 0)
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
263 {
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
264 truelen++;
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
265 dp++;
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
266 }
17451
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
267 }
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
268
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
269 if (clipboard_compact (truelen) < truelen)
30900
2bec1c202b13 (set_clipboard_data): If there's not enough memory
Eli Zaretskii <eliz@gnu.org>
parents: 29179
diff changeset
270 return 1;
17451
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
271
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
272 if ((xbuf_addr = alloc_xfer_buf (truelen)) == 0)
30900
2bec1c202b13 (set_clipboard_data): If there's not enough memory
Eli Zaretskii <eliz@gnu.org>
parents: 29179
diff changeset
273 return 1;
17451
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
274
22729
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
275 /* Move the buffer into the low memory, convert LF into CR-LF if needed. */
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
276 if (Raw)
24251
2394581ada26 (set_clipboard_data): Correctly null-terminate the
Eli Zaretskii <eliz@gnu.org>
parents: 24003
diff changeset
277 {
2394581ada26 (set_clipboard_data): Correctly null-terminate the
Eli Zaretskii <eliz@gnu.org>
parents: 24003
diff changeset
278 dosmemput (Data, Size, xbuf_addr);
2394581ada26 (set_clipboard_data): Correctly null-terminate the
Eli Zaretskii <eliz@gnu.org>
parents: 24003
diff changeset
279
2394581ada26 (set_clipboard_data): Correctly null-terminate the
Eli Zaretskii <eliz@gnu.org>
parents: 24003
diff changeset
280 /* Terminate with a null, otherwise Windows does strange things
2394581ada26 (set_clipboard_data): Correctly null-terminate the
Eli Zaretskii <eliz@gnu.org>
parents: 24003
diff changeset
281 when the text size is an integral multiple of 32 bytes. */
2394581ada26 (set_clipboard_data): Correctly null-terminate the
Eli Zaretskii <eliz@gnu.org>
parents: 24003
diff changeset
282 _farpokeb (_dos_ds, xbuf_addr + Size, '\0');
2394581ada26 (set_clipboard_data): Correctly null-terminate the
Eli Zaretskii <eliz@gnu.org>
parents: 24003
diff changeset
283 }
22729
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
284 else
17451
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
285 {
22729
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
286 dp = Data;
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
287 buf_offset = xbuf_addr;
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
288 _farsetsel (_dos_ds);
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
289 while (Size--)
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
290 {
24003
5048f069091e (set_clipboard_data): Terminate the text with a null
Eli Zaretskii <eliz@gnu.org>
parents: 23875
diff changeset
291 /* Don't allow them to put binary data into the clipboard, since
5048f069091e (set_clipboard_data): Terminate the text with a null
Eli Zaretskii <eliz@gnu.org>
parents: 23875
diff changeset
292 it will cause yanked data to be truncated at the first null. */
5048f069091e (set_clipboard_data): Terminate the text with a null
Eli Zaretskii <eliz@gnu.org>
parents: 23875
diff changeset
293 if (*dp == '\0')
5048f069091e (set_clipboard_data): Terminate the text with a null
Eli Zaretskii <eliz@gnu.org>
parents: 23875
diff changeset
294 return 2;
22729
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
295 if (*dp == '\n')
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
296 _farnspokeb (buf_offset++, '\r');
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
297 _farnspokeb (buf_offset++, *dp++);
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
298 }
24251
2394581ada26 (set_clipboard_data): Correctly null-terminate the
Eli Zaretskii <eliz@gnu.org>
parents: 24003
diff changeset
299
2394581ada26 (set_clipboard_data): Correctly null-terminate the
Eli Zaretskii <eliz@gnu.org>
parents: 24003
diff changeset
300 /* Terminate with a null, otherwise Windows does strange things
2394581ada26 (set_clipboard_data): Correctly null-terminate the
Eli Zaretskii <eliz@gnu.org>
parents: 24003
diff changeset
301 when the text size is an integral multiple of 32 bytes. */
2394581ada26 (set_clipboard_data): Correctly null-terminate the
Eli Zaretskii <eliz@gnu.org>
parents: 24003
diff changeset
302 _farnspokeb (buf_offset, '\0');
17451
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
303 }
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
304
24260
bd3ce96bc7eb (last_clipboard_text, clipboard_storage_size): New
Eli Zaretskii <eliz@gnu.org>
parents: 24258
diff changeset
305 /* Stash away the data we are about to put into the clipboard, so we
bd3ce96bc7eb (last_clipboard_text, clipboard_storage_size): New
Eli Zaretskii <eliz@gnu.org>
parents: 24258
diff changeset
306 could later check inside get_clipboard_data whether the clipboard
bd3ce96bc7eb (last_clipboard_text, clipboard_storage_size): New
Eli Zaretskii <eliz@gnu.org>
parents: 24258
diff changeset
307 still holds our data. */
bd3ce96bc7eb (last_clipboard_text, clipboard_storage_size): New
Eli Zaretskii <eliz@gnu.org>
parents: 24258
diff changeset
308 if (clipboard_storage_size < truelen)
bd3ce96bc7eb (last_clipboard_text, clipboard_storage_size): New
Eli Zaretskii <eliz@gnu.org>
parents: 24258
diff changeset
309 {
bd3ce96bc7eb (last_clipboard_text, clipboard_storage_size): New
Eli Zaretskii <eliz@gnu.org>
parents: 24258
diff changeset
310 clipboard_storage_size = truelen + 100;
bd3ce96bc7eb (last_clipboard_text, clipboard_storage_size): New
Eli Zaretskii <eliz@gnu.org>
parents: 24258
diff changeset
311 last_clipboard_text =
bd3ce96bc7eb (last_clipboard_text, clipboard_storage_size): New
Eli Zaretskii <eliz@gnu.org>
parents: 24258
diff changeset
312 (char *) xrealloc (last_clipboard_text, clipboard_storage_size);
bd3ce96bc7eb (last_clipboard_text, clipboard_storage_size): New
Eli Zaretskii <eliz@gnu.org>
parents: 24258
diff changeset
313 }
bd3ce96bc7eb (last_clipboard_text, clipboard_storage_size): New
Eli Zaretskii <eliz@gnu.org>
parents: 24258
diff changeset
314 if (last_clipboard_text)
bd3ce96bc7eb (last_clipboard_text, clipboard_storage_size): New
Eli Zaretskii <eliz@gnu.org>
parents: 24258
diff changeset
315 dosmemget (xbuf_addr, truelen, last_clipboard_text);
bd3ce96bc7eb (last_clipboard_text, clipboard_storage_size): New
Eli Zaretskii <eliz@gnu.org>
parents: 24258
diff changeset
316
17451
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
317 /* Calls Int 2Fh/AX=1703h with:
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
318 DX = WinOldAp-Supported Clipboard format
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
319 ES:BX = Pointer to data
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
320 SI:CX = Size of data in bytes
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
321 Return Values AX == 0: Error occurred
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
322 <> 0: OK. Data copied into the Clipboard. */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
323 regs.x.ax = 0x1703;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
324 regs.x.dx = Format;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
325 regs.x.si = truelen >> 16;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
326 regs.x.cx = truelen & 0xffff;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
327 regs.x.es = xbuf_addr >> 4;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
328 regs.x.bx = xbuf_addr & 15;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
329 __dpmi_int(0x2f, &regs);
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
330
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
331 free_xfer_buf ();
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
332
24260
bd3ce96bc7eb (last_clipboard_text, clipboard_storage_size): New
Eli Zaretskii <eliz@gnu.org>
parents: 24258
diff changeset
333 /* If the above failed, invalidate the local copy of the clipboard. */
bd3ce96bc7eb (last_clipboard_text, clipboard_storage_size): New
Eli Zaretskii <eliz@gnu.org>
parents: 24258
diff changeset
334 if (regs.x.ax == 0)
bd3ce96bc7eb (last_clipboard_text, clipboard_storage_size): New
Eli Zaretskii <eliz@gnu.org>
parents: 24258
diff changeset
335 *last_clipboard_text = '\0';
bd3ce96bc7eb (last_clipboard_text, clipboard_storage_size): New
Eli Zaretskii <eliz@gnu.org>
parents: 24258
diff changeset
336
30900
2bec1c202b13 (set_clipboard_data): If there's not enough memory
Eli Zaretskii <eliz@gnu.org>
parents: 29179
diff changeset
337 /* Zero means success, otherwise (1, 2, or 3) it's an error. */
2bec1c202b13 (set_clipboard_data): If there's not enough memory
Eli Zaretskii <eliz@gnu.org>
parents: 29179
diff changeset
338 return regs.x.ax > 0 ? 0 : 3;
17451
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
339 }
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
340
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
341 /* Return the size of the clipboard data of format FORMAT. */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
342 unsigned
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
343 get_clipboard_data_size (Format)
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
344 unsigned Format;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
345 {
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
346 __dpmi_regs regs;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
347
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
348 /* Calls Int 2Fh/AX=1704h with:
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
349 DX = WinOldAp-Supported Clipboard format
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
350 Return Values DX:AX == Size of the data in bytes, including any
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
351 headers.
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
352 == 0 If data in this format is not in
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
353 the clipboard. */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
354 regs.x.ax = 0x1704;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
355 regs.x.dx = Format;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
356 __dpmi_int(0x2f, &regs);
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
357 return ( (((unsigned)regs.x.dx) << 16) | regs.x.ax);
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
358 }
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
359
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
360 /* Get clipboard data, return its length.
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
361 Warning: this doesn't check whether DATA has enough space to hold
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
362 SIZE bytes. */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
363 unsigned
22729
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
364 get_clipboard_data (Format, Data, Size, Raw)
17451
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
365 unsigned Format;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
366 void *Data;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
367 unsigned Size;
22729
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
368 int Raw;
17451
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
369 {
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
370 __dpmi_regs regs;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
371 unsigned long xbuf_addr;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
372 unsigned char *dp = Data;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
373
22749
14bde44d261c (set_clipboard_data, get_clipboard_data, Fw16_set_clipboard_data,
Eli Zaretskii <eliz@gnu.org>
parents: 22729
diff changeset
374 if (Format != CF_OEMTEXT)
17451
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
375 return 0;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
376
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
377 if (Size == 0)
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
378 return 0;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
379
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
380 if ((xbuf_addr = alloc_xfer_buf (Size)) == 0)
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
381 return 0;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
382
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
383 /* Calls Int 2Fh/AX=1705h with:
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
384 DX = WinOldAp-Supported Clipboard format
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
385 ES:BX = Pointer to data buffer to hold data
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
386 Return Values AX == 0: Error occurred (or data in this format is not
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
387 in the clipboard)
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
388 <> 0: OK */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
389 regs.x.ax = 0x1705;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
390 regs.x.dx = Format;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
391 regs.x.es = xbuf_addr >> 4;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
392 regs.x.bx = xbuf_addr & 15;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
393 __dpmi_int(0x2f, &regs);
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
394 if (regs.x.ax != 0)
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
395 {
24260
bd3ce96bc7eb (last_clipboard_text, clipboard_storage_size): New
Eli Zaretskii <eliz@gnu.org>
parents: 24258
diff changeset
396 unsigned char null_char = '\0';
bd3ce96bc7eb (last_clipboard_text, clipboard_storage_size): New
Eli Zaretskii <eliz@gnu.org>
parents: 24258
diff changeset
397 unsigned long xbuf_beg = xbuf_addr;
bd3ce96bc7eb (last_clipboard_text, clipboard_storage_size): New
Eli Zaretskii <eliz@gnu.org>
parents: 24258
diff changeset
398
bd3ce96bc7eb (last_clipboard_text, clipboard_storage_size): New
Eli Zaretskii <eliz@gnu.org>
parents: 24258
diff changeset
399 /* If last_clipboard_text is NULL, we don't want to slow down
bd3ce96bc7eb (last_clipboard_text, clipboard_storage_size): New
Eli Zaretskii <eliz@gnu.org>
parents: 24258
diff changeset
400 the next loop by an additional test. */
bd3ce96bc7eb (last_clipboard_text, clipboard_storage_size): New
Eli Zaretskii <eliz@gnu.org>
parents: 24258
diff changeset
401 register unsigned char *lcdp =
bd3ce96bc7eb (last_clipboard_text, clipboard_storage_size): New
Eli Zaretskii <eliz@gnu.org>
parents: 24258
diff changeset
402 last_clipboard_text == NULL ? &null_char : last_clipboard_text;
45333
5d4cefa40da1 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 43475
diff changeset
403
22729
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
404 /* Copy data from low memory, remove CR
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
405 characters before LF if needed. */
17451
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
406 _farsetsel (_dos_ds);
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
407 while (Size--)
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
408 {
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
409 register unsigned char c = _farnspeekb (xbuf_addr++);
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
410
24260
bd3ce96bc7eb (last_clipboard_text, clipboard_storage_size): New
Eli Zaretskii <eliz@gnu.org>
parents: 24258
diff changeset
411 if (*lcdp == c)
bd3ce96bc7eb (last_clipboard_text, clipboard_storage_size): New
Eli Zaretskii <eliz@gnu.org>
parents: 24258
diff changeset
412 lcdp++;
bd3ce96bc7eb (last_clipboard_text, clipboard_storage_size): New
Eli Zaretskii <eliz@gnu.org>
parents: 24258
diff changeset
413
22729
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
414 if ((*dp++ = c) == '\r' && !Raw && _farnspeekb (xbuf_addr) == '\n')
17451
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
415 {
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
416 dp--;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
417 *dp++ = '\n';
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
418 xbuf_addr++;
24260
bd3ce96bc7eb (last_clipboard_text, clipboard_storage_size): New
Eli Zaretskii <eliz@gnu.org>
parents: 24258
diff changeset
419 if (*lcdp == '\n')
bd3ce96bc7eb (last_clipboard_text, clipboard_storage_size): New
Eli Zaretskii <eliz@gnu.org>
parents: 24258
diff changeset
420 lcdp++;
17451
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
421 }
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
422 /* Windows reportedly rounds up the size of clipboard data
24428
3d10131927a6 (get_clipboard_data): Always stop at the first null byte.
Eli Zaretskii <eliz@gnu.org>
parents: 24318
diff changeset
423 (passed in SIZE) to a multiple of 32, and removes trailing
3d10131927a6 (get_clipboard_data): Always stop at the first null byte.
Eli Zaretskii <eliz@gnu.org>
parents: 24318
diff changeset
424 spaces from each line without updating SIZE. We therefore
3d10131927a6 (get_clipboard_data): Always stop at the first null byte.
Eli Zaretskii <eliz@gnu.org>
parents: 24318
diff changeset
425 bail out when we see the first null character. */
3d10131927a6 (get_clipboard_data): Always stop at the first null byte.
Eli Zaretskii <eliz@gnu.org>
parents: 24318
diff changeset
426 else if (c == '\0')
24003
5048f069091e (set_clipboard_data): Terminate the text with a null
Eli Zaretskii <eliz@gnu.org>
parents: 23875
diff changeset
427 break;
17451
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
428 }
24260
bd3ce96bc7eb (last_clipboard_text, clipboard_storage_size): New
Eli Zaretskii <eliz@gnu.org>
parents: 24258
diff changeset
429
bd3ce96bc7eb (last_clipboard_text, clipboard_storage_size): New
Eli Zaretskii <eliz@gnu.org>
parents: 24258
diff changeset
430 /* If the text in clipboard is identical to what we put there
bd3ce96bc7eb (last_clipboard_text, clipboard_storage_size): New
Eli Zaretskii <eliz@gnu.org>
parents: 24258
diff changeset
431 last time set_clipboard_data was called, pretend there's no
bd3ce96bc7eb (last_clipboard_text, clipboard_storage_size): New
Eli Zaretskii <eliz@gnu.org>
parents: 24258
diff changeset
432 data in the clipboard. This is so we don't pass our own text
24428
3d10131927a6 (get_clipboard_data): Always stop at the first null byte.
Eli Zaretskii <eliz@gnu.org>
parents: 24318
diff changeset
433 from the clipboard (which might be troublesome if the killed
3d10131927a6 (get_clipboard_data): Always stop at the first null byte.
Eli Zaretskii <eliz@gnu.org>
parents: 24318
diff changeset
434 text includes null characters). */
24260
bd3ce96bc7eb (last_clipboard_text, clipboard_storage_size): New
Eli Zaretskii <eliz@gnu.org>
parents: 24258
diff changeset
435 if (last_clipboard_text &&
bd3ce96bc7eb (last_clipboard_text, clipboard_storage_size): New
Eli Zaretskii <eliz@gnu.org>
parents: 24258
diff changeset
436 xbuf_addr - xbuf_beg == (long)(lcdp - last_clipboard_text))
bd3ce96bc7eb (last_clipboard_text, clipboard_storage_size): New
Eli Zaretskii <eliz@gnu.org>
parents: 24258
diff changeset
437 dp = (unsigned char *)Data + 1;
17451
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
438 }
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
439
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
440 free_xfer_buf ();
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
441
24003
5048f069091e (set_clipboard_data): Terminate the text with a null
Eli Zaretskii <eliz@gnu.org>
parents: 23875
diff changeset
442 return (unsigned) (dp - (unsigned char *)Data - 1);
17451
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 /* Close clipboard, return non-zero if successfull. */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
446 unsigned
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
447 close_clipboard ()
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
448 {
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
449 __dpmi_regs regs;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
450
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
451 /* Calls Int 2Fh/AX=1708h
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
452 Return Values AX == 0: Error occurred
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
453 <> 0: OK */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
454 regs.x.ax = 0x1708;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
455 __dpmi_int(0x2f, &regs);
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
456 return regs.x.ax;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
457 }
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
458
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
459 /* Compact clipboard data so that at least SIZE bytes is available. */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
460 unsigned
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
461 clipboard_compact (Size)
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
462 unsigned Size;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
463 {
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
464 __dpmi_regs regs;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
465
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
466 /* Calls Int 2Fh/AX=1709H with:
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
467 SI:CX = Desired memory size in bytes.
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
468 Return Values DX:AX == Number of bytes of largest block of free memory.
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
469 == 0 if error or no memory */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
470 regs.x.ax = 0x1709;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
471 regs.x.si = Size >> 16;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
472 regs.x.cx = Size & 0xffff;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
473 __dpmi_int(0x2f, &regs);
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
474 return ((unsigned)regs.x.dx << 16) | regs.x.ax;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
475 }
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
476
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
477 static char no_mem_msg[] =
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
478 "(Not enough DOS memory to put saved text into clipboard.)";
24003
5048f069091e (set_clipboard_data): Terminate the text with a null
Eli Zaretskii <eliz@gnu.org>
parents: 23875
diff changeset
479 static char binary_msg[] =
5048f069091e (set_clipboard_data): Terminate the text with a null
Eli Zaretskii <eliz@gnu.org>
parents: 23875
diff changeset
480 "(Binary characters in saved text; clipboard data not set.)";
30900
2bec1c202b13 (set_clipboard_data): If there's not enough memory
Eli Zaretskii <eliz@gnu.org>
parents: 29179
diff changeset
481 static char system_error_msg[] =
2bec1c202b13 (set_clipboard_data): If there's not enough memory
Eli Zaretskii <eliz@gnu.org>
parents: 29179
diff changeset
482 "(Clipboard interface failure; clipboard data not set.)";
17451
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
483
21709
64adf1f4d54d (alloc_xfer_buf): If want_size is more than 1MB,
Eli Zaretskii <eliz@gnu.org>
parents: 21707
diff changeset
484 DEFUN ("w16-set-clipboard-data", Fw16_set_clipboard_data, Sw16_set_clipboard_data, 1, 2, 0,
41940
63819c5d6049 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
485 doc: /* This sets the clipboard data to the given text. */)
63819c5d6049 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
486 (string, frame)
63819c5d6049 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
487 Lisp_Object string, frame;
17451
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
488 {
24003
5048f069091e (set_clipboard_data): Terminate the text with a null
Eli Zaretskii <eliz@gnu.org>
parents: 23875
diff changeset
489 unsigned ok = 1, put_status = 0;
45333
5d4cefa40da1 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 43475
diff changeset
490 int nbytes, charset_info, no_crlf_conversion;
22729
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
491 unsigned char *src, *dst = NULL;
17451
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
492
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 39584
diff changeset
493 CHECK_STRING (string);
43460
aa52a9cea9f8 (Fw16_set_clipboard_data): Run pre-write-conversion
Eli Zaretskii <eliz@gnu.org>
parents: 41940
diff changeset
494
17451
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
495 if (NILP (frame))
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
496 frame = Fselected_frame ();
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
497
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 39584
diff changeset
498 CHECK_LIVE_FRAME (frame);
17451
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
499 if ( !FRAME_MSDOS_P (XFRAME (frame)))
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
500 goto done;
43460
aa52a9cea9f8 (Fw16_set_clipboard_data): Run pre-write-conversion
Eli Zaretskii <eliz@gnu.org>
parents: 41940
diff changeset
501
17451
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
502 BLOCK_INPUT;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
503
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 45988
diff changeset
504 nbytes = SBYTES (string);
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 45988
diff changeset
505 src = SDATA (string);
22729
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
506
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
507 /* Since we are now handling multilingual text, we must consider
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
508 encoding text for the clipboard. */
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 45988
diff changeset
509 charset_info = find_charset_in_text (src, SCHARS (string), nbytes,
29020
041255b52348 (Fw16_set_clipboard_data): Setup members
Kenichi Handa <handa@m17n.org>
parents: 24428
diff changeset
510 NULL, Qnil);
22729
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
511
29020
041255b52348 (Fw16_set_clipboard_data): Setup members
Kenichi Handa <handa@m17n.org>
parents: 24428
diff changeset
512 if (charset_info == 0)
22729
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
513 {
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
514 /* No multibyte character in OBJ. We need not encode it, but we
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
515 will have to convert it to DOS CR-LF style. */
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
516 no_crlf_conversion = 0;
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
517 }
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
518 else
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
519 {
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
520 /* We must encode contents of STRING according to what
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
521 clipboard-coding-system specifies. */
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
522 int bufsize;
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
523 struct coding_system coding;
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
524 unsigned char *htext2;
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
525
23164
ecc4641bf00a (Vnext_selection_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 22904
diff changeset
526 if (NILP (Vnext_selection_coding_system))
ecc4641bf00a (Vnext_selection_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 22904
diff changeset
527 Vnext_selection_coding_system = Vselection_coding_system;
22729
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
528 setup_coding_system
23164
ecc4641bf00a (Vnext_selection_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 22904
diff changeset
529 (Fcheck_coding_system (Vnext_selection_coding_system), &coding);
43460
aa52a9cea9f8 (Fw16_set_clipboard_data): Run pre-write-conversion
Eli Zaretskii <eliz@gnu.org>
parents: 41940
diff changeset
530 if (SYMBOLP (coding.pre_write_conversion)
aa52a9cea9f8 (Fw16_set_clipboard_data): Run pre-write-conversion
Eli Zaretskii <eliz@gnu.org>
parents: 41940
diff changeset
531 && !NILP (Ffboundp (coding.pre_write_conversion)))
aa52a9cea9f8 (Fw16_set_clipboard_data): Run pre-write-conversion
Eli Zaretskii <eliz@gnu.org>
parents: 41940
diff changeset
532 {
aa52a9cea9f8 (Fw16_set_clipboard_data): Run pre-write-conversion
Eli Zaretskii <eliz@gnu.org>
parents: 41940
diff changeset
533 string = run_pre_post_conversion_on_str (string, &coding, 1);
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 45988
diff changeset
534 src = SDATA (string);
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 45988
diff changeset
535 nbytes = SBYTES (string);
43460
aa52a9cea9f8 (Fw16_set_clipboard_data): Run pre-write-conversion
Eli Zaretskii <eliz@gnu.org>
parents: 41940
diff changeset
536 }
29179
b19b46eabcb5 (Fw16_set_clipboard_data): Fix the change from 2000-05-20.
Eli Zaretskii <eliz@gnu.org>
parents: 29020
diff changeset
537 coding.src_multibyte = 1;
b19b46eabcb5 (Fw16_set_clipboard_data): Fix the change from 2000-05-20.
Eli Zaretskii <eliz@gnu.org>
parents: 29020
diff changeset
538 coding.dst_multibyte = 0;
23164
ecc4641bf00a (Vnext_selection_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 22904
diff changeset
539 Vnext_selection_coding_system = Qnil;
22729
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
540 coding.mode |= CODING_MODE_LAST_BLOCK;
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
541 Vlast_coding_system_used = coding.symbol;
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
542 bufsize = encoding_buffer_size (&coding, nbytes);
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
543 dst = (unsigned char *) xmalloc (bufsize);
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
544 encode_coding (&coding, src, dst, nbytes, bufsize);
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
545 no_crlf_conversion = 1;
24257
7507c0552393 (Fw16_set_clipboard_data): When the text needs to be
Eli Zaretskii <eliz@gnu.org>
parents: 24251
diff changeset
546 nbytes = coding.produced;
24258
63101e55ebea Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents: 24257
diff changeset
547 src = dst;
22729
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
548 }
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
549
17451
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
550 if (!open_clipboard ())
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
551 goto error;
43460
aa52a9cea9f8 (Fw16_set_clipboard_data): Run pre-write-conversion
Eli Zaretskii <eliz@gnu.org>
parents: 41940
diff changeset
552
22729
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
553 ok = empty_clipboard ()
24003
5048f069091e (set_clipboard_data): Terminate the text with a null
Eli Zaretskii <eliz@gnu.org>
parents: 23875
diff changeset
554 && ((put_status
24258
63101e55ebea Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents: 24257
diff changeset
555 = set_clipboard_data (CF_OEMTEXT, src, nbytes, no_crlf_conversion))
24003
5048f069091e (set_clipboard_data): Terminate the text with a null
Eli Zaretskii <eliz@gnu.org>
parents: 23875
diff changeset
556 == 0);
22729
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
557
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
558 if (!no_crlf_conversion)
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
559 Vlast_coding_system_used = Qraw_text;
17451
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
560 close_clipboard ();
43460
aa52a9cea9f8 (Fw16_set_clipboard_data): Run pre-write-conversion
Eli Zaretskii <eliz@gnu.org>
parents: 41940
diff changeset
561
21707
7b76832ac019 (Fwin16_set_clipboard_data): Call UNBLOCK_INPUT before calling sit_for.
Eli Zaretskii <eliz@gnu.org>
parents: 21417
diff changeset
562 if (ok) goto unblock;
17451
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
563
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
564 error:
43460
aa52a9cea9f8 (Fw16_set_clipboard_data): Run pre-write-conversion
Eli Zaretskii <eliz@gnu.org>
parents: 41940
diff changeset
565
17451
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
566 ok = 0;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
567
21707
7b76832ac019 (Fwin16_set_clipboard_data): Call UNBLOCK_INPUT before calling sit_for.
Eli Zaretskii <eliz@gnu.org>
parents: 21417
diff changeset
568 unblock:
22729
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
569 if (dst)
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
570 xfree (dst);
21707
7b76832ac019 (Fwin16_set_clipboard_data): Call UNBLOCK_INPUT before calling sit_for.
Eli Zaretskii <eliz@gnu.org>
parents: 21417
diff changeset
571 UNBLOCK_INPUT;
7b76832ac019 (Fwin16_set_clipboard_data): Call UNBLOCK_INPUT before calling sit_for.
Eli Zaretskii <eliz@gnu.org>
parents: 21417
diff changeset
572
17451
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
573 /* Notify user if the text is too large to fit into DOS memory.
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
574 (This will happen somewhere after 600K bytes (470K in DJGPP v1.x),
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
575 depending on user system configuration.) If we just silently
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
576 fail the function, people might wonder why their text sometimes
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
577 doesn't make it to the clipboard. */
24003
5048f069091e (set_clipboard_data): Terminate the text with a null
Eli Zaretskii <eliz@gnu.org>
parents: 23875
diff changeset
578 if (put_status)
17451
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
579 {
24003
5048f069091e (set_clipboard_data): Terminate the text with a null
Eli Zaretskii <eliz@gnu.org>
parents: 23875
diff changeset
580 switch (put_status)
5048f069091e (set_clipboard_data): Terminate the text with a null
Eli Zaretskii <eliz@gnu.org>
parents: 23875
diff changeset
581 {
5048f069091e (set_clipboard_data): Terminate the text with a null
Eli Zaretskii <eliz@gnu.org>
parents: 23875
diff changeset
582 case 1:
5048f069091e (set_clipboard_data): Terminate the text with a null
Eli Zaretskii <eliz@gnu.org>
parents: 23875
diff changeset
583 message2 (no_mem_msg, sizeof (no_mem_msg) - 1, 0);
5048f069091e (set_clipboard_data): Terminate the text with a null
Eli Zaretskii <eliz@gnu.org>
parents: 23875
diff changeset
584 break;
5048f069091e (set_clipboard_data): Terminate the text with a null
Eli Zaretskii <eliz@gnu.org>
parents: 23875
diff changeset
585 case 2:
5048f069091e (set_clipboard_data): Terminate the text with a null
Eli Zaretskii <eliz@gnu.org>
parents: 23875
diff changeset
586 message2 (binary_msg, sizeof (binary_msg) - 1, 0);
5048f069091e (set_clipboard_data): Terminate the text with a null
Eli Zaretskii <eliz@gnu.org>
parents: 23875
diff changeset
587 break;
30900
2bec1c202b13 (set_clipboard_data): If there's not enough memory
Eli Zaretskii <eliz@gnu.org>
parents: 29179
diff changeset
588 case 3:
2bec1c202b13 (set_clipboard_data): If there's not enough memory
Eli Zaretskii <eliz@gnu.org>
parents: 29179
diff changeset
589 message2 (system_error_msg, sizeof (system_error_msg) - 1, 0);
2bec1c202b13 (set_clipboard_data): If there's not enough memory
Eli Zaretskii <eliz@gnu.org>
parents: 29179
diff changeset
590 break;
24003
5048f069091e (set_clipboard_data): Terminate the text with a null
Eli Zaretskii <eliz@gnu.org>
parents: 23875
diff changeset
591 }
17960
5c31b98be973 (Fwin16_set_clipboard_data): Pass new arg to sit_for.
Richard M. Stallman <rms@gnu.org>
parents: 17451
diff changeset
592 sit_for (2, 0, 0, 1, 1);
17451
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
593 }
43460
aa52a9cea9f8 (Fw16_set_clipboard_data): Run pre-write-conversion
Eli Zaretskii <eliz@gnu.org>
parents: 41940
diff changeset
594
17451
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
595 done:
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
596
24003
5048f069091e (set_clipboard_data): Terminate the text with a null
Eli Zaretskii <eliz@gnu.org>
parents: 23875
diff changeset
597 return (ok && put_status == 0 ? string : Qnil);
17451
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
598 }
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
599
21709
64adf1f4d54d (alloc_xfer_buf): If want_size is more than 1MB,
Eli Zaretskii <eliz@gnu.org>
parents: 21707
diff changeset
600 DEFUN ("w16-get-clipboard-data", Fw16_get_clipboard_data, Sw16_get_clipboard_data, 0, 1, 0,
41940
63819c5d6049 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
601 doc: /* This gets the clipboard data in text format. */)
17451
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
602 (frame)
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
603 Lisp_Object frame;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
604 {
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
605 unsigned data_size, truelen;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
606 unsigned char *htext;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
607 Lisp_Object ret = Qnil;
45333
5d4cefa40da1 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 43475
diff changeset
608 int no_crlf_conversion, require_encoding = 0;
22729
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
609
17451
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
610 if (NILP (frame))
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
611 frame = Fselected_frame ();
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
612
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 39584
diff changeset
613 CHECK_LIVE_FRAME (frame);
17451
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
614 if ( !FRAME_MSDOS_P (XFRAME (frame)))
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
615 goto done;
43460
aa52a9cea9f8 (Fw16_set_clipboard_data): Run pre-write-conversion
Eli Zaretskii <eliz@gnu.org>
parents: 41940
diff changeset
616
17451
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
617 BLOCK_INPUT;
43460
aa52a9cea9f8 (Fw16_set_clipboard_data): Run pre-write-conversion
Eli Zaretskii <eliz@gnu.org>
parents: 41940
diff changeset
618
17451
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
619 if (!open_clipboard ())
21707
7b76832ac019 (Fwin16_set_clipboard_data): Call UNBLOCK_INPUT before calling sit_for.
Eli Zaretskii <eliz@gnu.org>
parents: 21417
diff changeset
620 goto unblock;
17451
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
621
22749
14bde44d261c (set_clipboard_data, get_clipboard_data, Fw16_set_clipboard_data,
Eli Zaretskii <eliz@gnu.org>
parents: 22729
diff changeset
622 if ((data_size = get_clipboard_data_size (CF_OEMTEXT)) == 0 ||
17451
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
623 (htext = (unsigned char *)xmalloc (data_size)) == 0)
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
624 goto closeclip;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
625
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
626 /* need to know final size after '\r' chars are removed because
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
627 we can't change the string size manually, and doing an extra
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
628 copy is silly */
22749
14bde44d261c (set_clipboard_data, get_clipboard_data, Fw16_set_clipboard_data,
Eli Zaretskii <eliz@gnu.org>
parents: 22729
diff changeset
629 if ((truelen = get_clipboard_data (CF_OEMTEXT, htext, data_size, 0)) == 0)
17451
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
630 goto closeclip;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
631
22729
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
632 /* Do we need to decode it? */
43460
aa52a9cea9f8 (Fw16_set_clipboard_data): Run pre-write-conversion
Eli Zaretskii <eliz@gnu.org>
parents: 41940
diff changeset
633 {
aa52a9cea9f8 (Fw16_set_clipboard_data): Run pre-write-conversion
Eli Zaretskii <eliz@gnu.org>
parents: 41940
diff changeset
634 /* If the clipboard data contains any 8-bit Latin-1 code, we
aa52a9cea9f8 (Fw16_set_clipboard_data): Run pre-write-conversion
Eli Zaretskii <eliz@gnu.org>
parents: 41940
diff changeset
635 need to decode it. */
aa52a9cea9f8 (Fw16_set_clipboard_data): Run pre-write-conversion
Eli Zaretskii <eliz@gnu.org>
parents: 41940
diff changeset
636 int i;
22729
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
637
43460
aa52a9cea9f8 (Fw16_set_clipboard_data): Run pre-write-conversion
Eli Zaretskii <eliz@gnu.org>
parents: 41940
diff changeset
638 for (i = 0; i < truelen; i++)
aa52a9cea9f8 (Fw16_set_clipboard_data): Run pre-write-conversion
Eli Zaretskii <eliz@gnu.org>
parents: 41940
diff changeset
639 {
aa52a9cea9f8 (Fw16_set_clipboard_data): Run pre-write-conversion
Eli Zaretskii <eliz@gnu.org>
parents: 41940
diff changeset
640 if (htext[i] >= 0x80)
aa52a9cea9f8 (Fw16_set_clipboard_data): Run pre-write-conversion
Eli Zaretskii <eliz@gnu.org>
parents: 41940
diff changeset
641 {
aa52a9cea9f8 (Fw16_set_clipboard_data): Run pre-write-conversion
Eli Zaretskii <eliz@gnu.org>
parents: 41940
diff changeset
642 require_encoding = 1;
aa52a9cea9f8 (Fw16_set_clipboard_data): Run pre-write-conversion
Eli Zaretskii <eliz@gnu.org>
parents: 41940
diff changeset
643 break;
aa52a9cea9f8 (Fw16_set_clipboard_data): Run pre-write-conversion
Eli Zaretskii <eliz@gnu.org>
parents: 41940
diff changeset
644 }
aa52a9cea9f8 (Fw16_set_clipboard_data): Run pre-write-conversion
Eli Zaretskii <eliz@gnu.org>
parents: 41940
diff changeset
645 }
aa52a9cea9f8 (Fw16_set_clipboard_data): Run pre-write-conversion
Eli Zaretskii <eliz@gnu.org>
parents: 41940
diff changeset
646 }
22729
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
647 if (require_encoding)
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
648 {
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
649 int bufsize;
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
650 unsigned char *buf;
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
651 struct coding_system coding;
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
652
23164
ecc4641bf00a (Vnext_selection_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 22904
diff changeset
653 if (NILP (Vnext_selection_coding_system))
ecc4641bf00a (Vnext_selection_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 22904
diff changeset
654 Vnext_selection_coding_system = Vselection_coding_system;
22729
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
655 setup_coding_system
23164
ecc4641bf00a (Vnext_selection_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 22904
diff changeset
656 (Fcheck_coding_system (Vnext_selection_coding_system), &coding);
29020
041255b52348 (Fw16_set_clipboard_data): Setup members
Kenichi Handa <handa@m17n.org>
parents: 24428
diff changeset
657 coding.src_multibyte = 0;
041255b52348 (Fw16_set_clipboard_data): Setup members
Kenichi Handa <handa@m17n.org>
parents: 24428
diff changeset
658 coding.dst_multibyte = 1;
23164
ecc4641bf00a (Vnext_selection_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 22904
diff changeset
659 Vnext_selection_coding_system = Qnil;
22729
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
660 coding.mode |= CODING_MODE_LAST_BLOCK;
45982
864289635b41 (Fw16_get_clipboard_data): Disable composition handling.
Kenichi Handa <handa@m17n.org>
parents: 45333
diff changeset
661 /* We explicitely disable composition handling because selection
864289635b41 (Fw16_get_clipboard_data): Disable composition handling.
Kenichi Handa <handa@m17n.org>
parents: 45333
diff changeset
662 data should not contain any composition sequence. */
864289635b41 (Fw16_get_clipboard_data): Disable composition handling.
Kenichi Handa <handa@m17n.org>
parents: 45333
diff changeset
663 coding.composing = COMPOSITION_DISABLED;
22749
14bde44d261c (set_clipboard_data, get_clipboard_data, Fw16_set_clipboard_data,
Eli Zaretskii <eliz@gnu.org>
parents: 22729
diff changeset
664 truelen = get_clipboard_data (CF_OEMTEXT, htext, data_size, 1);
22729
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
665 bufsize = decoding_buffer_size (&coding, truelen);
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
666 buf = (unsigned char *) xmalloc (bufsize);
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
667 decode_coding (&coding, htext, buf, truelen, bufsize);
29020
041255b52348 (Fw16_set_clipboard_data): Setup members
Kenichi Handa <handa@m17n.org>
parents: 24428
diff changeset
668 ret = make_string_from_bytes ((char *) buf,
041255b52348 (Fw16_set_clipboard_data): Setup members
Kenichi Handa <handa@m17n.org>
parents: 24428
diff changeset
669 coding.produced_char, coding.produced);
22729
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
670 xfree (buf);
43460
aa52a9cea9f8 (Fw16_set_clipboard_data): Run pre-write-conversion
Eli Zaretskii <eliz@gnu.org>
parents: 41940
diff changeset
671 if (SYMBOLP (coding.post_read_conversion)
aa52a9cea9f8 (Fw16_set_clipboard_data): Run pre-write-conversion
Eli Zaretskii <eliz@gnu.org>
parents: 41940
diff changeset
672 && !NILP (Ffboundp (coding.post_read_conversion)))
43475
f1ba6420ce49 (Fw16_get_clipboard_data): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents: 43460
diff changeset
673 ret = run_pre_post_conversion_on_str (ret, &coding, 0);
22729
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
674 Vlast_coding_system_used = coding.symbol;
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
675 }
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
676 else
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
677 {
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
678 ret = make_unibyte_string ((char *) htext, truelen);
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
679 Vlast_coding_system_used = Qraw_text;
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
680 }
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
681
17451
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
682 xfree (htext);
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
683
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
684 closeclip:
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
685 close_clipboard ();
21707
7b76832ac019 (Fwin16_set_clipboard_data): Call UNBLOCK_INPUT before calling sit_for.
Eli Zaretskii <eliz@gnu.org>
parents: 21417
diff changeset
686
7b76832ac019 (Fwin16_set_clipboard_data): Call UNBLOCK_INPUT before calling sit_for.
Eli Zaretskii <eliz@gnu.org>
parents: 21417
diff changeset
687 unblock:
7b76832ac019 (Fwin16_set_clipboard_data): Call UNBLOCK_INPUT before calling sit_for.
Eli Zaretskii <eliz@gnu.org>
parents: 21417
diff changeset
688 UNBLOCK_INPUT;
45333
5d4cefa40da1 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 43475
diff changeset
689
17451
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
690 done:
45333
5d4cefa40da1 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 43475
diff changeset
691
17451
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
692 return (ret);
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
693 }
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
694
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
695 /* Support checking for a clipboard selection. */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
696
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
697 DEFUN ("x-selection-exists-p", Fx_selection_exists_p, Sx_selection_exists_p,
41940
63819c5d6049 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
698 0, 1, 0,
63819c5d6049 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
699 doc: /* Whether there is an owner for the given X Selection.
63819c5d6049 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
700 The arg should be the name of the selection in question, typically one of
63819c5d6049 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
701 the symbols `PRIMARY', `SECONDARY', or `CLIPBOARD'.
63819c5d6049 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
702 \(Those are literal upper-case symbol names, since that's what X expects.)
63819c5d6049 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
703 For convenience, the symbol nil is the same as `PRIMARY',
63819c5d6049 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
704 and t is the same as `SECONDARY'. */)
63819c5d6049 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
705 (selection)
17451
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
706 Lisp_Object selection;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
707 {
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 39584
diff changeset
708 CHECK_SYMBOL (selection);
17451
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
709
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
710 /* Return nil for SECONDARY selection. For PRIMARY (or nil)
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
711 selection, check if there is some text on the kill-ring;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
712 for CLIPBOARD, check if the clipboard currently has valid
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
713 text format contents.
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
714
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
715 The test for killed text on the kill-ring emulates the Emacs
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
716 behavior on X, where killed text is also put into X selection
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
717 by the X interface code. (On MSDOS, killed text is only put
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
718 into the clipboard if we run under Windows, so we cannot check
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
719 the clipboard alone.) */
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
720 if ((EQ (selection, Qnil) || EQ (selection, QPRIMARY))
39584
6145836b795c Use SYMBOL_VALUE/ SET_SYMBOL_VALUE macros instead of accessing
Gerd Moellmann <gerd@gnu.org>
parents: 30900
diff changeset
721 && ! NILP (SYMBOL_VALUE (Fintern_soft (build_string ("kill-ring"),
6145836b795c Use SYMBOL_VALUE/ SET_SYMBOL_VALUE macros instead of accessing
Gerd Moellmann <gerd@gnu.org>
parents: 30900
diff changeset
722 Qnil))))
17451
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
723 return Qt;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
724
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
725 if (EQ (selection, QCLIPBOARD))
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
726 {
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
727 Lisp_Object val = Qnil;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
728
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
729 if (open_clipboard ())
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
730 {
22749
14bde44d261c (set_clipboard_data, get_clipboard_data, Fw16_set_clipboard_data,
Eli Zaretskii <eliz@gnu.org>
parents: 22729
diff changeset
731 if (get_clipboard_data_size (CF_OEMTEXT))
17451
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
732 val = Qt;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
733 close_clipboard ();
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
734 }
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
735 return val;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
736 }
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
737 return Qnil;
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
738 }
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
739
45333
5d4cefa40da1 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 43475
diff changeset
740 void
17451
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
741 syms_of_win16select ()
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
742 {
21709
64adf1f4d54d (alloc_xfer_buf): If want_size is more than 1MB,
Eli Zaretskii <eliz@gnu.org>
parents: 21707
diff changeset
743 defsubr (&Sw16_set_clipboard_data);
64adf1f4d54d (alloc_xfer_buf): If want_size is more than 1MB,
Eli Zaretskii <eliz@gnu.org>
parents: 21707
diff changeset
744 defsubr (&Sw16_get_clipboard_data);
17451
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
745 defsubr (&Sx_selection_exists_p);
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
746
22904
37738fa8626a (Fw16_set_clipboard_data, Fw16_get_clipboard_data, syms_of_win16select):
Eli Zaretskii <eliz@gnu.org>
parents: 22749
diff changeset
747 DEFVAR_LISP ("selection-coding-system", &Vselection_coding_system,
41940
63819c5d6049 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
748 doc: /* Coding system for communicating with other X clients.
63819c5d6049 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
749 When sending or receiving text via cut_buffer, selection, and clipboard,
63819c5d6049 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
750 the text is encoded or decoded by this coding system.
47878
be195e2a4bfb (syms_of_win16select): Fix docstring for `selection-coding-system'.
Juanma Barranquero <lekktu@gmail.com>
parents: 47279
diff changeset
751 The default value is `iso-latin-1-dos'. */);
be195e2a4bfb (syms_of_win16select): Fix docstring for `selection-coding-system'.
Juanma Barranquero <lekktu@gmail.com>
parents: 47279
diff changeset
752 Vselection_coding_system = intern ("iso-latin-1-dos");
23164
ecc4641bf00a (Vnext_selection_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 22904
diff changeset
753
ecc4641bf00a (Vnext_selection_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 22904
diff changeset
754 DEFVAR_LISP ("next-selection-coding-system", &Vnext_selection_coding_system,
41940
63819c5d6049 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
755 doc: /* Coding system for the next communication with other X clients.
63819c5d6049 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
756 Usually, `selection-coding-system' is used for communicating with
47279
06197dc11581 (syms_of_win16select): Fix spacing.
Juanma Barranquero <lekktu@gmail.com>
parents: 46370
diff changeset
757 other X clients. But, if this variable is set, it is used for the
06197dc11581 (syms_of_win16select): Fix spacing.
Juanma Barranquero <lekktu@gmail.com>
parents: 46370
diff changeset
758 next communication only. After the communication, this variable is
41940
63819c5d6049 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
759 set to nil. */);
23164
ecc4641bf00a (Vnext_selection_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 22904
diff changeset
760 Vnext_selection_coding_system = Qnil;
22729
3537e1563a66 (Vclipboard_coding_system): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 21709
diff changeset
761
17451
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
762 QPRIMARY = intern ("PRIMARY"); staticpro (&QPRIMARY);
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
763 QCLIPBOARD = intern ("CLIPBOARD"); staticpro (&QCLIPBOARD);
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
764 }
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
765
0902196df62a Initial revision
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
766 #endif /* MSDOS */
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 47878
diff changeset
767
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 47878
diff changeset
768 /* arch-tag: 085a22c8-7324-436e-a6da-102464ce95d8
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 47878
diff changeset
769 (do not change this comment) */