annotate src/select-xlike-inc.c @ 5898:2aeaf9bc7175

Regenerate configure.
author Stephen J. Turnbull <stephen@xemacs.org>
date Tue, 05 May 2015 04:06:37 +0900
parents 56144c8593a8
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
1 /* Selection processing for XEmacs -- common btwn select-x.c and select-gtk.c
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
2 Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc.
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
3
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
4 This file is part of XEmacs.
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
5
5402
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 4985
diff changeset
6 XEmacs is free software: you can redistribute it and/or modify it
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
7 under the terms of the GNU General Public License as published by the
5402
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 4985
diff changeset
8 Free Software Foundation, either version 3 of the License, or (at your
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 4985
diff changeset
9 option) any later version.
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
10
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
11 XEmacs is distributed in the hope that it will be useful, but WITHOUT
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
12 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
14 for more details.
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
15
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
16 You should have received a copy of the GNU General Public License
5402
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 4985
diff changeset
17 along with XEmacs. If not, see <http://www.gnu.org/licenses/>. */
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
18
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
19 /* Synched up with: Not synched with FSF. */
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
20
4984
f23cd0184dcf xlike, doc changes
Ben Wing <ben@xemacs.org>
parents: 4953
diff changeset
21 #ifdef THIS_IS_X
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
22 #define XE_ATOM_TYPE Atom
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
23 #define XE_ATOM_TO_SYMBOL x_atom_to_symbol
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
24 #define XE_SYMBOL_TO_ATOM symbol_to_x_atom
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
25 #else
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
26 #define XE_ATOM_TYPE GdkAtom
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
27 #define XE_ATOM_TO_SYMBOL atom_to_symbol
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
28 #define XE_SYMBOL_TO_ATOM symbol_to_gtk_atom
4984
f23cd0184dcf xlike, doc changes
Ben Wing <ben@xemacs.org>
parents: 4953
diff changeset
29 #endif /* THIS_IS_X */
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
30
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
31 /* #### These are going to move into Lisp code(!) with the aid of
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
32 some new functions I'm working on - ajh */
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
33
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
34 /* These functions convert from the selection data read from the server into
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
35 something that we can use from elisp, and vice versa.
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
36
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
37 Type: Format: Size: Elisp Type:
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
38 ----- ------- ----- -----------
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
39 * 8 * String
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
40 ATOM 32 1 Symbol
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
41 ATOM 32 > 1 Vector of Symbols
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
42 * 16 1 Integer
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
43 * 16 > 1 Vector of Integers
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
44 * 32 1 if <=16 bits: Integer
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
45 if > 16 bits: Cons of top16, bot16
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
46 * 32 > 1 Vector of the above
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
47
3833
2b1e7cb9ae2c [xemacs-hg @ 2007-02-17 15:55:21 by stephent]
stephent
parents: 3025
diff changeset
48 NOTE NOTE NOTE:
2b1e7cb9ae2c [xemacs-hg @ 2007-02-17 15:55:21 by stephent]
stephent
parents: 3025
diff changeset
49 Format == 32 means that the buffer will be C longs, which need not be
2b1e7cb9ae2c [xemacs-hg @ 2007-02-17 15:55:21 by stephent]
stephent
parents: 3025
diff changeset
50 32-bit quantities. See the note in select-x.c (x_get_window_property).
2b1e7cb9ae2c [xemacs-hg @ 2007-02-17 15:55:21 by stephent]
stephent
parents: 3025
diff changeset
51
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
52 When converting a Lisp number to C, it is assumed to be of format 16 if
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
53 it is an integer, and of format 32 if it is a cons of two integers.
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
54
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
55 When converting a vector of numbers from Elisp to C, it is assumed to be
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
56 of format 16 if every element in the vector is an integer, and is assumed
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
57 to be of format 32 if any element is a cons of two integers.
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
58
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
59 When converting an object to C, it may be of the form (SYMBOL . <data>)
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
60 where SYMBOL is what we should claim that the type is. Format and
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
61 representation are as above.
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
62
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
63 NOTE: Under Mule, when someone shoves us a string without a type, we
3025
facf3239ba30 [xemacs-hg @ 2005-10-25 11:16:19 by ben]
ben
parents: 2367
diff changeset
64 set the type to `COMPOUND_TEXT' and automatically convert to Compound
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
65 Text. If the string has a type, we assume that the user wants the
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
66 data sent as-is so we just do "binary" conversion.
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
67 */
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
68
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
69
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
70 static Lisp_Object
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
71 selection_data_to_lisp_data (struct device *d,
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 867
diff changeset
72 Rawbyte *data,
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
73 Bytecount size,
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
74 XE_ATOM_TYPE type,
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
75 int format)
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
76 {
4984
f23cd0184dcf xlike, doc changes
Ben Wing <ben@xemacs.org>
parents: 4953
diff changeset
77 #ifdef THIS_IS_X
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
78 if (type == DEVICE_XATOM_NULL (d))
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
79 return QNULL;
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
80
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
81 /* Convert any 8-bit data to a string, for compactness. */
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
82 else if (format == 8)
4953
304aebb79cd3 function renamings to track names of char typedefs
Ben Wing <ben@xemacs.org>
parents: 3833
diff changeset
83 return make_extstring ((Extbyte *) data, size,
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
84 type == DEVICE_XATOM_TEXT (d) ||
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
85 type == DEVICE_XATOM_COMPOUND_TEXT (d)
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
86 ? Qctext : Qbinary);
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
87
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
88 /* Convert a single atom to a Lisp Symbol.
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
89 Convert a set of atoms to a vector of symbols. */
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
90 else if (type == XA_ATOM)
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
91 #else
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
92 if (type == gdk_atom_intern ("NULL", 0))
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
93 return QNULL;
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
94
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
95 /* Convert any 8-bit data to a string, for compactness. */
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
96 else if (format == 8)
4953
304aebb79cd3 function renamings to track names of char typedefs
Ben Wing <ben@xemacs.org>
parents: 3833
diff changeset
97 return make_extstring ((Extbyte *) data, size,
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
98 ((type == gdk_atom_intern ("TEXT", FALSE)) ||
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
99 (type == gdk_atom_intern ("COMPOUND_TEXT", FALSE)))
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
100 ? Qctext : Qbinary);
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
101
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
102 /* Convert a single atom to a Lisp Symbol.
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
103 Convert a set of atoms to a vector of symbols. */
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
104 else if (type == gdk_atom_intern ("ATOM", FALSE))
4984
f23cd0184dcf xlike, doc changes
Ben Wing <ben@xemacs.org>
parents: 4953
diff changeset
105 #endif /* THIS_IS_X */
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
106 {
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
107 if (size == sizeof (XE_ATOM_TYPE))
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
108 return XE_ATOM_TO_SYMBOL (d, *((XE_ATOM_TYPE *) data));
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
109 else
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
110 {
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
111 Elemcount i;
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
112 Elemcount len = size / sizeof (XE_ATOM_TYPE);
5581
56144c8593a8 Mechanically change INT to FIXNUM in our sources.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
113 Lisp_Object v = Fmake_vector (make_fixnum (len), Qzero);
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
114 for (i = 0; i < len; i++)
5581
56144c8593a8 Mechanically change INT to FIXNUM in our sources.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
115 Faset (v, make_fixnum (i), XE_ATOM_TO_SYMBOL (d, ((XE_ATOM_TYPE *) data) [i]));
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
116 return v;
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
117 }
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
118 }
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
119
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
120 /* Convert a single 16 or small 32 bit number to a Lisp Int.
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
121 If the number is > 16 bits, convert it to a cons of integers,
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
122 16 bits in each half.
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
123 */
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
124 else if (format == 32 && size == sizeof (long))
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
125 return word_to_lisp (((unsigned long *) data) [0]);
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
126 else if (format == 16 && size == sizeof (short))
5581
56144c8593a8 Mechanically change INT to FIXNUM in our sources.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
127 return make_fixnum ((int) (((unsigned short *) data) [0]));
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
128
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
129 /* Convert any other kind of data to a vector of numbers, represented
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
130 as above (as an integer, or a cons of two 16 bit integers).
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
131
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
132 #### Perhaps we should return the actual type to lisp as well.
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
133
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
134 (x-get-selection-internal 'PRIMARY 'LINE_NUMBER)
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
135 ==> [4 4]
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
136
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
137 and perhaps it should be
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
138
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
139 (x-get-selection-internal 'PRIMARY 'LINE_NUMBER)
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
140 ==> (SPAN . [4 4])
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
141
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
142 Right now the fact that the return type was SPAN is discarded before
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
143 lisp code gets to see it.
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
144 */
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
145 else if (format == 16)
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
146 {
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
147 Elemcount i;
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
148 Lisp_Object v = make_vector (size / 4, Qzero);
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
149 for (i = 0; i < size / 4; i++)
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
150 {
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
151 int j = (int) ((unsigned short *) data) [i];
5581
56144c8593a8 Mechanically change INT to FIXNUM in our sources.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
152 Faset (v, make_fixnum (i), make_fixnum (j));
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
153 }
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
154 return v;
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
155 }
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
156 else
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
157 {
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
158 Elemcount i;
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
159 Lisp_Object v = make_vector (size / 4, Qzero);
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
160 for (i = 0; i < size / 4; i++)
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
161 {
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
162 unsigned long j = ((unsigned long *) data) [i];
5581
56144c8593a8 Mechanically change INT to FIXNUM in our sources.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
163 Faset (v, make_fixnum (i), word_to_lisp (j));
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
164 }
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
165 return v;
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
166 }
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
167 }
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
168
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
169
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
170 static void
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
171 lisp_data_to_selection_data (struct device *d,
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
172 Lisp_Object obj,
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 867
diff changeset
173 Rawbyte **data_ret,
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
174 XE_ATOM_TYPE *type_ret,
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
175 Bytecount *size_ret,
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
176 int *format_ret)
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
177 {
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
178 Lisp_Object type = Qnil;
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
179
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
180 if (CONSP (obj) && SYMBOLP (XCAR (obj)))
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
181 {
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
182 type = XCAR (obj);
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
183 obj = XCDR (obj);
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
184 if (CONSP (obj) && NILP (XCDR (obj)))
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
185 obj = XCAR (obj);
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
186 }
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
187
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
188 if (EQ (obj, QNULL) || (EQ (type, QNULL)))
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
189 { /* This is not the same as declining */
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
190 *format_ret = 32;
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
191 *size_ret = 0;
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
192 *data_ret = 0;
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
193 type = QNULL;
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
194 }
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
195 else if (STRINGP (obj))
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
196 {
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
197 const Extbyte *extval;
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
198 Bytecount extvallen;
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
199
4981
4aebb0131297 Cleanups/renaming of EXTERNAL_TO_C_STRING and friends
Ben Wing <ben@xemacs.org>
parents: 4953
diff changeset
200 LISP_STRING_TO_SIZED_EXTERNAL (obj, extval, extvallen,
4aebb0131297 Cleanups/renaming of EXTERNAL_TO_C_STRING and friends
Ben Wing <ben@xemacs.org>
parents: 4953
diff changeset
201 (NILP (type) ? Qctext : Qbinary));
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
202 *format_ret = 8;
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
203 *size_ret = extvallen;
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 867
diff changeset
204 *data_ret = xnew_rawbytes (*size_ret);
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
205 memcpy (*data_ret, extval, *size_ret);
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
206 #ifdef MULE
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
207 if (NILP (type)) type = QCOMPOUND_TEXT;
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
208 #else
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
209 if (NILP (type)) type = QSTRING;
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
210 #endif
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
211 }
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
212 else if (CHARP (obj))
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
213 {
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 665
diff changeset
214 Ibyte buf[MAX_ICHAR_LEN];
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
215 Bytecount len;
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
216 const Extbyte *extval;
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
217 Bytecount extvallen;
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
218
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
219 *format_ret = 8;
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 665
diff changeset
220 len = set_itext_ichar (buf, XCHAR (obj));
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
221 TO_EXTERNAL_FORMAT (DATA, (buf, len),
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
222 ALLOCA, (extval, extvallen),
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
223 Qctext);
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
224 *size_ret = extvallen;
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 867
diff changeset
225 *data_ret = xnew_rawbytes (*size_ret);
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
226 memcpy (*data_ret, extval, *size_ret);
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
227 #ifdef MULE
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
228 if (NILP (type)) type = QCOMPOUND_TEXT;
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
229 #else
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
230 if (NILP (type)) type = QSTRING;
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
231 #endif
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
232 }
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
233 else if (SYMBOLP (obj))
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
234 {
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
235 *format_ret = 32;
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
236 *size_ret = 1;
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 867
diff changeset
237 *data_ret = xnew_rawbytes (sizeof (XE_ATOM_TYPE) + 1);
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
238 (*data_ret) [sizeof (XE_ATOM_TYPE)] = 0;
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
239 (*(XE_ATOM_TYPE **) data_ret) [0] = XE_SYMBOL_TO_ATOM (d, obj, 0);
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
240 if (NILP (type)) type = QATOM;
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
241 }
5581
56144c8593a8 Mechanically change INT to FIXNUM in our sources.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
242 else if (FIXNUMP (obj) &&
56144c8593a8 Mechanically change INT to FIXNUM in our sources.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
243 XFIXNUM (obj) <= 0x7FFF &&
56144c8593a8 Mechanically change INT to FIXNUM in our sources.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
244 XFIXNUM (obj) >= -0x8000)
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
245 {
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
246 *format_ret = 16;
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
247 *size_ret = 1;
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 867
diff changeset
248 *data_ret = xnew_rawbytes (sizeof (short) + 1);
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
249 (*data_ret) [sizeof (short)] = 0;
5581
56144c8593a8 Mechanically change INT to FIXNUM in our sources.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
250 (*(short **) data_ret) [0] = (short) XFIXNUM (obj);
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
251 if (NILP (type)) type = QINTEGER;
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
252 }
5581
56144c8593a8 Mechanically change INT to FIXNUM in our sources.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
253 else if (FIXNUMP (obj) || CONSP (obj))
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
254 {
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
255 *format_ret = 32;
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
256 *size_ret = 1;
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 867
diff changeset
257 *data_ret = xnew_rawbytes (sizeof (long) + 1);
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
258 (*data_ret) [sizeof (long)] = 0;
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
259 (*(unsigned long **) data_ret) [0] = lisp_to_word (obj);
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
260 if (NILP (type)) type = QINTEGER;
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
261 }
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
262 else if (VECTORP (obj))
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
263 {
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
264 /* Lisp Vectors may represent a set of ATOMs;
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
265 a set of 16 or 32 bit INTEGERs;
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
266 or a set of ATOM_PAIRs (represented as [[A1 A2] [A3 A4] ...]
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
267 */
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
268 Elemcount i;
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
269
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
270 if (SYMBOLP (XVECTOR_DATA (obj) [0]))
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
271 /* This vector is an ATOM set */
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
272 {
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
273 if (NILP (type)) type = QATOM;
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
274 *size_ret = XVECTOR_LENGTH (obj);
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
275 *format_ret = 32;
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 867
diff changeset
276 *data_ret = xnew_rawbytes ((*size_ret) * sizeof (XE_ATOM_TYPE));
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
277 for (i = 0; i < *size_ret; i++)
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
278 if (SYMBOLP (XVECTOR_DATA (obj) [i]))
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
279 (*(XE_ATOM_TYPE **) data_ret) [i] =
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
280 XE_SYMBOL_TO_ATOM (d, XVECTOR_DATA (obj) [i], 0);
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
281 else
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
282 syntax_error
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
283 ("all elements of the vector must be of the same type", obj);
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
284 }
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
285 #if 0 /* #### MULTIPLE doesn't work yet */
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
286 else if (VECTORP (XVECTOR_DATA (obj) [0]))
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
287 /* This vector is an ATOM_PAIR set */
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
288 {
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
289 if (NILP (type)) type = QATOM_PAIR;
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
290 *size_ret = XVECTOR_LENGTH (obj);
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
291 *format_ret = 32;
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 867
diff changeset
292 *data_ret =
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 867
diff changeset
293 xnew_rawbytes ((*size_ret) * sizeof (XE_ATOM_TYPE) * 2);
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
294 for (i = 0; i < *size_ret; i++)
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
295 if (VECTORP (XVECTOR_DATA (obj) [i]))
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
296 {
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
297 Lisp_Object pair = XVECTOR_DATA (obj) [i];
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
298 if (XVECTOR_LENGTH (pair) != 2)
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
299 syntax_error
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
300 ("elements of the vector must be vectors of exactly two elements", pair);
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
301
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
302 (*(XE_ATOM_TYPE **) data_ret) [i * 2] =
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
303 XE_SYMBOL_TO_ATOM (d, XVECTOR_DATA (pair) [0], 0);
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
304 (*(XE_ATOM_TYPE **) data_ret) [(i * 2) + 1] =
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
305 XE_SYMBOL_TO_ATOM (d, XVECTOR_DATA (pair) [1], 0);
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
306 }
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
307 else
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
308 syntax_error
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
309 ("all elements of the vector must be of the same type", obj);
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
310 }
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
311 #endif
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
312 else
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
313 /* This vector is an INTEGER set, or something like it */
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
314 {
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
315 *size_ret = XVECTOR_LENGTH (obj);
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
316 if (NILP (type)) type = QINTEGER;
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
317 *format_ret = 16;
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
318 for (i = 0; i < *size_ret; i++)
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
319 if (CONSP (XVECTOR_DATA (obj) [i]))
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
320 *format_ret = 32;
5581
56144c8593a8 Mechanically change INT to FIXNUM in our sources.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
321 else if (!FIXNUMP (XVECTOR_DATA (obj) [i]))
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
322 syntax_error
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
323 ("all elements of the vector must be integers or conses of integers", obj);
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
324
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 867
diff changeset
325 *data_ret = xnew_rawbytes (*size_ret * (*format_ret/8));
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
326 for (i = 0; i < *size_ret; i++)
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
327 if (*format_ret == 32)
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
328 (*((unsigned long **) data_ret)) [i] =
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
329 lisp_to_word (XVECTOR_DATA (obj) [i]);
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
330 else
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
331 (*((unsigned short **) data_ret)) [i] =
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
332 (unsigned short) lisp_to_word (XVECTOR_DATA (obj) [i]);
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
333 }
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
334 }
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
335 else
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
336 invalid_argument ("unrecognized selection data", obj);
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
337
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
338 *type_ret = XE_SYMBOL_TO_ATOM (d, type, 0);
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
339 }
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents:
diff changeset
340