annotate src/energize.c @ 78:c7528f8e288d r20-0b34

Import from CVS: tag r20-0b34
author cvs
date Mon, 13 Aug 2007 09:05:42 +0200
parents 131b0175ea99
children 1ce6082ce73f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1 /****************************************************************************
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2 ***
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3 *** Copyright (c) 1990 by Sun/Lucid, All Rights Reserved.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4 *** Copyright (c) 1991-1993 by Lucid, Inc. All Rights Reserved.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5 ***
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
6 *****************************************************************************/
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
7
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
8 /* Synched up with: Not in FSF. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
9
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
10 #include <config.h>
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
11
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
12 #ifdef ENERGIZE /* whole file */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
13
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
14 #include "lisp.h"
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
15
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
16 /* Display Context for the icons */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
17 #include "console-x.h"
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
18 #include <Xm/DialogS.h>
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
19 #include "lwlib.h"
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
20 #include "objects-x.h"
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
21
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
22 #include "events.h"
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
23 #include "opaque.h"
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
24 #include "buffer.h"
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
25 #include "extents.h"
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
26 #include "process.h"
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
27 #include "insdel.h"
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
28 #include "window.h"
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
29 #include "faces.h"
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
30
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
31 /* Energize editor requests and I/O operations */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
32 #include "energize.h"
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
33
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
34 #include "systime.h"
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
35 #include "sysfile.h"
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
36 #include "syssignal.h"
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
37
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
38 #ifndef CBFileYourself
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
39 /* This means that emacs is being compiled against the connection library
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
40 and headers that go with an Energize protocol less than 0.10. We need
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
41 to do some slightly different things in this file because of that.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
42
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
43 Note that if Emacs is compiled against the 3.0 version of the connection
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
44 library and associated headers, it can still talk to 2.1- or 2.5-level
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
45 servers. But the opposite is not true.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
46 */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
47 # define ENERGIZE_V2_HEADERS
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
48 #endif
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
49
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
50 /* The Connection library
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
51 */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
52 extern void CWriteQueryChoicesRequest ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
53 extern void CWriteExecuteChoicesRequest ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
54 extern void CWriteSheetRequest ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
55 extern void CWriteSetControlRequest ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
56 extern void CWriteChoice ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
57 extern void CWriteProtocol ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
58 extern int CGetPortNumber ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
59
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
60
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
61 /************** Typedefs and Structs ***********************/
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
62
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
63 /* structure argument used by the next mapping function */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
64 typedef struct
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
65 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
66 BufferInfo *binfo;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
67 int n_extents;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
68 } binfo_and_n_extents;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
69
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
70 typedef struct
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
71 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
72 BufferInfo* binfo;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
73 int state;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
74 int tell_energize;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
75 } binfo_and_state;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
76
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
77 struct reply_wait
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
78 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
79 int serial;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
80 EId objectId;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
81 EId genericId;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
82 EId itemId;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
83 char answered_p;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
84 char status;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
85 char* message;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
86 Lisp_Object menu_result;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
87 Lisp_Object only_name;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
88 struct reply_wait* next;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
89 };
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
90
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
91 static struct reply_wait *global_reply_wait;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
92
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
93 Lisp_Object Venergize_kernel_busy;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
94 Lisp_Object Qenergize_kernel_busy;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
95 Lisp_Object Venergize_attributes_mapping;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
96 int energize_extent_gc_threshold;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
97 Lisp_Object Venergize_kernel_busy_hook;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
98 Lisp_Object Qenergize_kernel_busy_hook;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
99 Lisp_Object Venergize_menu_update_hook;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
100 Lisp_Object Qenergize_menu_update_hook;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
101 Lisp_Object Qenergize;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
102 Lisp_Object Qenergize_auto_revert_buffer;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
103
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
104
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
105 static void set_energize_extent_data (EXTENT extent, void *data);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
106
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
107 static char *kernel_buffer_type_to_elisp_type (char *kernel_type);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
108
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
109 static CONST void *get_object (EId id, BufferInfo *binfo);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
110 static void put_object (EId id, BufferInfo *binfo, void *object);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
111 static void remove_object (EId id, BufferInfo *binfo);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
112 static void free_GDataclass (GDataClass *cl, BufferInfo *binfo);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
113
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
114 static void free_GenericData (GenericData *gen, BufferInfo *binfo);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
115
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
116 static void free_Energize_Extent_Data (Energize_Extent_Data *, BufferInfo *,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
117 enum Energize_Object_Free_Type);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
118
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
119 static BufferInfo *get_buffer_info_for_emacs_buffer (Lisp_Object emacs_buf,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
120 Editor *editor);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
121 static void put_buffer_info (EId id, Lisp_Object emacs_buf,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
122 BufferInfo *binfo, Editor *editor);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
123
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
124 static void handle_sheet_control_change (Widget, EId sheet_id, void* arg);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
125 static Connection *make_energize_connection (Editor *editor,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
126 int fdin, int fdout);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
127 static void close_energize_connection (void);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
128 Lisp_Object Fclose_connection_to_energize (void);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
129 static void mark_all_extents_as_unmodified (BufferInfo *binfo);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
130 Lisp_Object Fenergize_barf_if_buffer_locked (void);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
131 Lisp_Object Fconnected_to_energize_p (void);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
132 static int get_energize_connection_and_buffer_id (Lisp_Object buffer,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
133 void **conn_ptr,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
134 long *buffer_id_ptr);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
135
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
136 void restore_energize_extent_state (EXTENT);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
137
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
138
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
139 /**************************** Variables *****************************/
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
140
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
141 /* debugging variable */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
142 int ignore_kernel;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
143
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
144 Lisp_Object Venergize_kernel_modification_hook;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
145 Lisp_Object Venergize_create_buffer_hook;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
146 Lisp_Object Qenergize_create_buffer_hook;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
147
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
148 Lisp_Object Qenergize_buffer_modified_hook;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
149 Lisp_Object Qbuffer_locked_by_energize;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
150 Lisp_Object Qenergize_user_input_buffer_mark;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
151 Lisp_Object Qenergize_make_many_buffers_visible;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
152
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
153 int inside_parse_buffer;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
154
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
155 /* List of all buffers currently managed by Energize. This is
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
156 Staticpro'ed so that they don't get GC'ed from under us. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
157 static Lisp_Object Venergize_buffers_list;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
158
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
159 static Editor *energize_connection;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
160 static protocol_edit_options *peo;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
161
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
162 static int request_serial_number;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
163
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
164 extern int current_debuggerpanel_exposed_p;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
165 extern int desired_debuggerpanel_exposed_p;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
166 extern int debuggerpanel_sheet;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
167
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
168 /**************************** Macros *****************************/
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
169
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
170 #define xnew(type) ((type*)xmalloc (sizeof (type)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
171
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
172 #define BUFFER_NOTIFY_BACKGROUND_BIT_SET_P(buffer) 1
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
173
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
174 #define get_extent_data(id,binfo) (Energize_Extent_Data*)get_object(id, binfo)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
175 #define get_class(id,binfo) (GDataClass*)get_object(id, binfo)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
176 #define get_generic(id,binfo) (GenericData*)get_object(id, binfo)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
177
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
178 #define put_extent_data(id,binfo,obj) put_object(id, binfo, obj)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
179 #define put_class(id,binfo,obj) put_object(id, binfo, obj)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
180 #define put_generic(id,binfo,obj) put_object(id, binfo, obj)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
181
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
182 #define remove_extent_data(id,binfo) remove_object(id, binfo)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
183 #define remove_class(id,binfo) remove_object(id, binfo)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
184 #define remove_generic(id,binfo) remove_object(id, binfo)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
185
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
186 #define DEBUGGER_PSHEET_NAME "DEBUGGER_P_SHEET"
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
187
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
188 /* special graphics attribute meaning "use what anyone else's attributes" */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
189 #define GA_NO_CHANGE 0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
190 /* this number should be bigger than any of the "real" GA's */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
191 #define GA_MAX 0x1000
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
192
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
193 /**************************** Utilities *****************************/
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
194
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
195 static int
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
196 emacs_CWriteRequestBuffer (Connection* conn)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
197 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
198 int result;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
199 /* don't kill emacs with SIGPIPE */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
200 SIGTYPE (*old_sigpipe)() =
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
201 (SIGTYPE (*) ()) signal (SIGPIPE, SIG_IGN);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
202
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
203 result = CWriteRequestBuffer (conn); /* the real one; macroized later */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
204 signal (SIGPIPE, old_sigpipe);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
205 return result;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
206 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
207
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
208 #define CWriteRequestBuffer emacs_CWriteRequestBuffer
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
209
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
210
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
211 static Energize_Extent_Data *
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
212 extent_to_data (Lisp_Object extent_obj)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
213 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
214 Energize_Extent_Data *ext = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
215
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
216 if (!EXTENTP (extent_obj))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
217 return 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
218 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
219 ext = energize_extent_data (XEXTENT (extent_obj));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
220
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
221 if (ext)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
222 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
223 if (EQ (ext->extent, extent_obj))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
224 return ext;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
225 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
226 abort ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
227 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
228 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
229 return 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
230 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
231
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
232
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
233 static Lisp_Object
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
234 data_to_extent (Energize_Extent_Data *ext)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
235 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
236 Lisp_Object extent = ext->extent;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
237 assert (EXTENTP (extent));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
238 return extent;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
239 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
240
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
241 /* duplicate a string */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
242 static char*
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
243 copy_string (char *s)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
244 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
245 if (!s)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
246 return 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
247 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
248 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
249 int len = strlen (s);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
250 char *res = (char *) xmalloc (len + 1);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
251 return strcpy (res, s);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
252 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
253 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
254
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
255 /* Get objects from the hashtables */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
256 static CONST void *
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
257 get_object_internal (EId id, c_hashtable table)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
258 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
259 void *res;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
260 CONST void *found = gethash ((void*)id, table, &res);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
261
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
262 if (found) CHECK_OBJECT (res);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
263
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
264 return found ? res : 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
265 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
266
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
267 static CONST void *
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
268 get_object (EId id, BufferInfo *binfo)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
269 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
270 return get_object_internal (id, binfo->id_to_object);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
271 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
272
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
273 static void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
274 put_object_internal (EId id, c_hashtable table, void *object)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
275 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
276 if (!PUT_ABLE_OBJECT (object))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
277 error ("Can't put 0x%x in table", object);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
278 CHECK_OBJECT (object);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
279 puthash ((void*)id, object, table);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
280 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
281
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
282 static void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
283 put_object (EId id, BufferInfo *binfo, void *object)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
284 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
285 put_object_internal (id, binfo->id_to_object, object);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
286 return;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
287 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
288
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
289 static void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
290 remove_object_internal (EId id, c_hashtable table)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
291 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
292 void *res;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
293
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
294 if (gethash ((void*)id, table, &res))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
295 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
296 if (OBJECT_FREE (res))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
297 error ("Free'd object 0x%x still in table!", res);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
298 remhash ((void*)id, table);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
299 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
300 else if (id)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
301 /* #### If this happens for Energize_Extent_Data as a result of extent
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
302 finalization, this aborts (because gc_in_progress). These errors are
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
303 awfully bad, so probably they should just be abort()s anyway... */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
304 error ("EId %d not in table!", id);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
305 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
306
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
307 static void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
308 remove_object (EId id, BufferInfo *binfo)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
309 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
310 remove_object_internal (id, binfo->id_to_object);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
311 return;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
312 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
313
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
314 /* maphash_function called by free_buffer_info */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
315 static void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
316 free_object (void *key, void *contents, void *arg)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
317 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
318 BufferInfo *binfo = arg;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
319
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
320 if (contents)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
321 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
322 switch (OBJECT_SEAL (contents))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
323 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
324 case BUF_INFO_SEAL:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
325 break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
326 case EXTENT_SEAL:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
327 free_Energize_Extent_Data ((Energize_Extent_Data *) contents,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
328 binfo, OFT_MAPHASH);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
329 break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
330 case GDATA_CLASS_SEAL:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
331 free_GDataclass ((GDataClass *) contents, binfo);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
332 break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
333 case GDATA_SEAL:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
334 free_GenericData ((GenericData *) contents, binfo);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
335 break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
336 default:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
337 error ("Bad argument 0x%x to free_object()", contents);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
338 return;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
339 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
340 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
341 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
342
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
343 static GDataClass *
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
344 alloc_GDataclass (EId id, BufferInfo *binfo)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
345 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
346 GDataClass *cl = xnew (GDataClass);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
347 memset (cl, 0, sizeof (GDataClass));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
348 cl->seal = GDATA_CLASS_SEAL;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
349 cl->id = id;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
350 put_class (cl->id, binfo, cl);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
351 return cl;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
352 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
353
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
354 static void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
355 free_GDataclass (GDataClass *cl, BufferInfo *binfo)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
356 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
357 if (cl)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
358 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
359 remove_class (cl->id, binfo);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
360 SET_OBJECT_FREE (cl);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
361 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
362 return;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
363 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
364
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
365
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
366 static GenericData *
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
367 alloc_GenericData (EId id, GDataClass *cl, BufferInfo *binfo)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
368 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
369 GenericData *gen = xnew (GenericData);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
370 gen->seal = GDATA_SEAL;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
371 gen->id = id;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
372 gen->cl = cl;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
373 /* gen->image = 0;*/
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
374 gen->flags = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
375 gen->modified_state = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
376 put_generic (gen->id, binfo, gen);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
377 return gen;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
378 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
379
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
380 static void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
381 free_GenericData (GenericData *gen, BufferInfo *binfo)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
382 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
383 if (gen)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
384 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
385 remove_generic (gen->id, binfo);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
386 gen->cl = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
387 SET_OBJECT_FREE (gen);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
388 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
389 return;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
390 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
391
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
392 /* Called to flush the extent from the hash table when Energize tells us to
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
393 lose the extent. This is NOT called from the extent GC finalization method,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
394 because there would be a period before the next GC when we still had an
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
395 Energize ID that the server thought was dead, and could concievably reuse.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
396
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
397 Since we protect extents from GC until Energize says they're done, if an
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
398 extent still has Energize data by the time it gets collected, something is
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
399 fucked.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
400 */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
401 static void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
402 free_Energize_Extent_Data (Energize_Extent_Data *ext, BufferInfo *binfo,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
403 enum Energize_Object_Free_Type free_type)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
404 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
405 if (ext)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
406 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
407 Lisp_Object extent_obj = data_to_extent (ext);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
408
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
409 /* Remove the extent, remove the extent's pointer to the data,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
410 and the data's pointer to the extent. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
411 Fdetach_extent (extent_obj);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
412 set_energize_extent_data (XEXTENT (extent_obj), 0);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
413 ext->extent = Qnil; /* at this point, refs will abort */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
414
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
415 /* Remove the data from the hash table, and mark it as dead. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
416 remove_extent_data (ext->id, binfo);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
417 ext->id = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
418
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
419 /* don't free this "sub-guy" via maphash, as it will get taken care
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
420 of during the course of the maphash without our doing anything */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
421 if (free_type != OFT_MAPHASH)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
422 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
423 if (ext->extentType == CEGeneric)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
424 free_GenericData (ext->u.generic.gData, binfo);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
425 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
426
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
427 SET_OBJECT_FREE (ext);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
428 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
429 return;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
430 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
431
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
432 static BufferInfo *
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
433 alloc_BufferInfo (EId id, Lisp_Object name, Lisp_Object filename,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
434 char *class_str, Editor *editor, Window win, int nobjects)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
435 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
436 BufferInfo *binfo = xnew (BufferInfo);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
437 Widget nw = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
438 Lisp_Object buffer = Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
439
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
440 if (win)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
441 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
442 char win_as_string [16];
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
443 nw = XtWindowToWidget (get_x_display (Qnil), win);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
444 if (nw)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
445 nw = XtParent (nw);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
446
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
447 if (nw)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
448 sprintf (win_as_string, "w%x", nw);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
449 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
450 sprintf (win_as_string, "0x%x", win);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
451 binfo->frame =
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
452 Fx_create_frame (Qnil, Qnil, build_string (win_as_string));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
453 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
454 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
455 binfo->frame = Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
456
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
457 /* try to re-use a buffer with the same file name if one already exists.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
458 * If a buffer already exists but is modified we should do a dialog and
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
459 * ask the user what to do. For now I'll just use a new buffer in that case.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
460 * ParseBuffer will erase the buffer.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
461 */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
462 if (!NILP (filename))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
463 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
464 int offct = find_file_compare_truenames;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
465 find_file_compare_truenames = 1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
466 buffer = Fget_file_buffer (filename);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
467 find_file_compare_truenames = offct;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
468
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
469 if (!NILP (buffer) && !NILP (Fbuffer_modified_p (buffer)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
470 buffer = Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
471 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
472
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
473 if (NILP (buffer))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
474 buffer = Fget_buffer_create (Fgenerate_new_buffer_name (name, Qnil));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
475
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
476 binfo->seal = BUF_INFO_SEAL;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
477 binfo->id = id;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
478 binfo->flags = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
479 binfo->editor = editor;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
480 binfo->id_to_object = make_hashtable (nobjects);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
481 binfo->emacs_buffer = buffer;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
482 binfo->modified_state = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
483 binfo->editable = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
484 binfo->output_mark = Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
485 binfo->buffer_type = kernel_buffer_type_to_elisp_type (class_str);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
486 binfo->p_sheet_ids = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
487 binfo->n_p_sheets = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
488 binfo->note_ids = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
489 binfo->n_notes = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
490 #ifdef I18N4
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
491 binfo->wcmap.valid = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
492 binfo->wcmap.modiff_stamp = -1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
493 binfo->wcmap.map = NULL;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
494 #endif
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
495 put_buffer_info (id, binfo->emacs_buffer, binfo, editor);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
496
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
497 Venergize_buffers_list = Fcons (buffer, Venergize_buffers_list);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
498
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
499 #if 0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
500 * if (nw){
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
501 * Lisp_Object window = Fframe_selected_window (binfo->frame);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
502 * Fset_window_buffer (window, binfo->emacs_buffer);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
503 * set_text_widget ((NoteWidget)nw,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
504 * FRAME_X_SHELL_WIDGET (XFRAME (binfo->frame)));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
505 * }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
506 #endif
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
507
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
508 return binfo;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
509 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
510
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
511 /* free a buffer_info */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
512 static void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
513 free_buffer_info (BufferInfo *binfo)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
514 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
515 maphash (free_object, binfo->id_to_object, (void *)binfo);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
516 free_hashtable (binfo->id_to_object);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
517 if (energize_connection && energize_connection->binfo_hash)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
518 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
519 if (binfo->id)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
520 remhash ((void *)binfo->id, energize_connection->binfo_hash);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
521 if (!NILP (binfo->emacs_buffer))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
522 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
523 remhash (LISP_TO_VOID (binfo->emacs_buffer),
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
524 energize_connection->binfo_hash);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
525 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
526 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
527 binfo->id = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
528 binfo->emacs_buffer = Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
529 #ifdef I18N4
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
530 if (binfo->wcmap.valid) {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
531 binfo->wcmap.valid= 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
532 xfree(binfo->wcmap.map);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
533 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
534 #endif
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
535 SET_OBJECT_FREE (binfo);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
536 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
537
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
538 /* hash for BufferInfo structures */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
539 static BufferInfo*
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
540 get_buffer_info_for_emacs_buffer (Lisp_Object emacs_buf, Editor *editor)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
541 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
542 BufferInfo *res;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
543 if (!editor || !editor->binfo_hash)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
544 return 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
545 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
546 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
547 void *vbuf;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
548 /* #### Probably should use a Lisp hash table for this; what if the last
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
549 pointer to the buffer was in the editor struct? */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
550 return (gethash (LISP_TO_VOID (emacs_buf),
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
551 editor->binfo_hash,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
552 (void *) &res)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
553 ? res : 0);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
554 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
555 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
556
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
557
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
558
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
559 /* Called by mark_buffer. It is possible for the last remaining pointer to
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
560 an extent object to be in an Energize_Extent_Data structure that is pointed
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
561 at by the binfo->id_to_object table. Since Energize may still reference
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
562 this object by its id (in fact, I think it may even "ressurect" a detached
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
563 extent) we must prevent the extent from being garbage collected. Aside
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
564 from the obvious lossage (that the extent itself would be trashed) this
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
565 would also cause us to free the Energize_Extent_Data which the server still
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
566 believes we have. The buffers all get marked because they're on the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
567 `Venergize_buffers_list'.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
568
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
569 So, an Energize extent or buffer only ever gets collected when the server
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
570 has claimed that it is done with it (or when the connection is closed).
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
571
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
572 Of course, by keeping pointers to lisp objects in C structs under non-lisp
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
573 hash tables, we again build in the assumption that GC never relocates.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
574 */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
575
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
576 /* FUCK!! It's not standard-conforming to cast pointers to functions
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
577 to or from void*. Give me a fucking break! */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
578 struct markobj_kludge_fmh
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
579 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
580 void (*markobj) (Lisp_Object);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
581 };
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
582
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
583 static void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
584 mark_energize_buffer_data_extent_mapper (void *key, void *val, void *arg)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
585 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
586 if (OBJECT_SEAL (val) == EXTENT_SEAL)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
587 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
588 struct markobj_kludge_fmh *fmh = arg;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
589 struct Energize_Extent_Data *ext = (Energize_Extent_Data *) val;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
590 /* Lisp_Object extent = data_to_extent (ext); (will abort if marked) */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
591 Lisp_Object extent = ext->extent;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
592 assert (GC_EXTENTP (extent));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
593 ((*fmh->markobj) (extent));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
594 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
595 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
596
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
597 void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
598 mark_energize_buffer_data (struct buffer *b,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
599 void (*markobj) (Lisp_Object))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
600 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
601 struct markobj_kludge_fmh fmh;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
602 Lisp_Object buffer;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
603 BufferInfo *binfo;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
604 if (!energize_connection || !energize_connection->binfo_hash)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
605 return;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
606 XSETBUFFER (buffer, b);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
607 binfo = get_buffer_info_for_emacs_buffer (buffer, energize_connection);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
608 if (! binfo)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
609 return;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
610 fmh.markobj = markobj;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
611 maphash (mark_energize_buffer_data_extent_mapper, binfo->id_to_object, &fmh);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
612 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
613
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
614
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
615
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
616 struct buffer_and_sheet_ids
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
617 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
618 EId buffer_id;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
619 EId sheet_id;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
620 };
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
621
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
622 static void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
623 find_sheet_id (void* key, void* contents, void* arg)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
624 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
625 BufferInfo* binfo = (BufferInfo*)contents;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
626 EId buffer_id = (EId)key;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
627 struct buffer_and_sheet_ids* result = (struct buffer_and_sheet_ids*)arg;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
628 int i;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
629
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
630 if (!result->buffer_id)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
631 for (i = 0; i < binfo->n_p_sheets; i++)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
632 if (binfo->p_sheet_ids [i] == result->sheet_id)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
633 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
634 result->buffer_id = buffer_id;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
635 return;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
636 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
637 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
638
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
639 static EId
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
640 buffer_id_of_sheet (EId id)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
641 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
642 Editor *editor = energize_connection;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
643 struct buffer_and_sheet_ids basi;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
644 if (!energize_connection)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
645 return 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
646
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
647 basi.buffer_id = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
648 basi.sheet_id = id;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
649 maphash (find_sheet_id, editor->binfo_hash, (void*)&basi);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
650 return basi.buffer_id;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
651 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
652
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
653 static long
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
654 get_energize_buffer_id (Lisp_Object emacs_buf)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
655 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
656 Editor *editor = energize_connection;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
657 BufferInfo *res;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
658
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
659 if (!editor || !editor->binfo_hash)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
660 return -1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
661 else if (!gethash (LISP_TO_VOID (emacs_buf), editor->binfo_hash, (void *)&res))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
662 return -1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
663 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
664 return (long) res->id;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
665 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
666
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
667 static char *
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
668 kernel_buffer_type_to_elisp_type (char *kernel_type)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
669 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
670 struct buffer_type_struct *bts =
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
671 kernel_buffer_types_to_elisp_buffer_types_vector;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
672 char *elisp_type = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
673
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
674 if (!kernel_type)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
675 return UNINITIALIZED_BUFFER_TYPE;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
676
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
677 while (bts->kernel_name)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
678 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
679 if (!strcmp (bts->kernel_name, kernel_type))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
680 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
681 elisp_type = bts->elisp_name;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
682 break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
683 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
684 bts++;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
685 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
686
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
687 if (!elisp_type)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
688 return kernel_type;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
689 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
690 return elisp_type;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
691 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
692
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
693 static Lisp_Object
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
694 get_buffer_type_for_emacs_buffer (Lisp_Object emacs_buf, Editor *editor)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
695 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
696 BufferInfo *binfo;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
697 if (!(binfo = get_buffer_info_for_emacs_buffer (emacs_buf, editor)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
698 return Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
699 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
700 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
701 if (!binfo->buffer_type) binfo->buffer_type =
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
702 UNINITIALIZED_BUFFER_TYPE;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
703
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
704 return intern (binfo->buffer_type);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
705 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
706 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
707
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
708 static Lisp_Object
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
709 set_buffer_type_for_emacs_buffer (Lisp_Object emacs_buf, Editor *editor,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
710 Lisp_Object type)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
711 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
712 BufferInfo *binfo;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
713 if (!(binfo = get_buffer_info_for_emacs_buffer (emacs_buf, editor)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
714 return Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
715 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
716 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
717 char *type_string;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
718
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
719 if (NILP (type)) return Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
720
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
721 if (SYMBOLP (type))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
722 XSETSTRING (type, XSYMBOL (type)->name);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
723
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
724 if (STRINGP (type))
70
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents: 20
diff changeset
725 type_string = (char *)XSTRING_DATA (type);
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
726
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
727 type_string = copy_string (type_string);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
728
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
729 if (!type_string) return Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
730
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
731 binfo->buffer_type = type_string;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
732
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
733 return intern (binfo->buffer_type);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
734 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
735 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
736
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
737 static BufferInfo*
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
738 get_buffer_info_for_id (EId id, Editor *editor)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
739 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
740 BufferInfo *res;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
741 return (gethash ((void *)id, editor->binfo_hash, (void *)&res))?res:0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
742 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
743
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
744 static void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
745 put_buffer_info (EId id, Lisp_Object emacs_buf, BufferInfo *binfo,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
746 Editor *editor)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
747 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
748 puthash ((void *)id, binfo, editor->binfo_hash);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
749 puthash (LISP_TO_VOID (emacs_buf), binfo, editor->binfo_hash);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
750 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
751
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
752 static void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
753 remove_buffer_info (EId id, Lisp_Object emacs_buf, Editor *editor)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
754 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
755 void *vbuf;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
756 remhash ((void *)id, editor->binfo_hash);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
757 remhash (LISP_TO_VOID (emacs_buf), editor->binfo_hash);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
758 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
759
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
760
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
761 /* Conversion between Energize and Emacs buffer positions */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
762
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
763 #if defined(I18N4)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
764
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
765 /* An emacs position is an index into the buffer... In I18N, foreign
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
766 characters take up the same amount of space as ASCII characters. Emacs
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
767 is using wide characters. The first position is 1.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
768
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
769 An energize position is a straight byte offset into the file when it's
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
770 saved onto disk. Foreign characters take up more than one byte. The
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
771 first position is 0. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
772
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
773 #define WCMAP_SETSIZE(wcmap,n) { \
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
774 (wcmap).mapsize = (n); \
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
775 (wcmap).map = (WCharMapRec *) xrealloc((wcmap).map, \
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
776 (n) * sizeof(WCharMapRec)); \
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
777 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
778 #define WCMAP_ENLARGE(wcmap) WCMAP_SETSIZE(wcmap, 2*(wcmap.mapsize))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
779
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
780 #ifndef MB_LEN_MAX
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
781 #define MB_LEN_MAX 10 /* arbitrarily large enough */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
782 #endif
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
783
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
784 static char wcsize_buf[MB_LEN_MAX];
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
785 #define WCSIZE(wc) (isascii(wc) ? 1 : wctomb(wcsize_buf,wc))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
786
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
787 #define SANITY_CHECK_NOT
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
788 #ifdef SANITY_CHECK
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
789 static int sanity=0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
790 #endif
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
791
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
792 static void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
793 sync_buffer_widechar_map (BufferInfo *binfo)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
794 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
795 /* #### - check this: */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
796 assert (XBUFFER (binfo->emacs_buffer) == current_buffer);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
797
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
798 if (!binfo->wcmap.valid)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
799 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
800 binfo->wcmap.valid= 1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
801 binfo->wcmap.modiff_stamp= -1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
802 binfo->wcmap.map= NULL;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
803 WCMAP_SETSIZE (binfo->wcmap, 1);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
804 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
805
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
806 if (binfo->wcmap.modiff_stamp == BUF_MODIFF (current_buffer))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
807 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
808 return;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
809 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
810 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
811 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
812 int nbytes, maxpos,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
813 pos = 0, /* start at zero instead of 1 */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
814 adjustment = 0,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
815 mapindex= 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
816 wchar_t *buf, t;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
817
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
818 #ifdef SANITY_CHECK
14
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents: 0
diff changeset
819 stderr_out ("rebuilding widechar map for %s\n", XSTRING_DATA (current_buffer->name));
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
820 #endif
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
821
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
822 /* #### this is not gonna compile. move_gap() is now a private function
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
823 inside of insdel.c and it should stay that way. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
824 if (BUF_BEGV (current_buffer) < GPT && BUF_ZV (current_buffer) > GPT)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
825 move_gap (current_buffer, BUF_BEGV (current_buffer));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
826 binfo->wcmap.modiff_stamp = BUF_MODIFF (current_buffer);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
827
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
828 buf = BUF_BEG_ADDR (current_buffer);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
829 maxpos= (BUF_Z (current_buffer) - 1);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
830 wctomb (NULL, 0); /* reset shift state of wctomb() */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
831 binfo->wcmap.map[mapindex].pos= pos;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
832 binfo->wcmap.map[mapindex].eucsize=
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
833 ((pos<maxpos) ? (nbytes= WCSIZE(buf[pos])) : 1);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
834 do {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
835 while ((pos < maxpos) && (nbytes == WCSIZE(t = buf[pos])))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
836 ++pos;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
837 binfo->wcmap.map[mapindex++].endpos= pos;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
838 if (mapindex == binfo->wcmap.mapsize)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
839 WCMAP_ENLARGE(binfo->wcmap);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
840 if (pos < maxpos)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
841 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
842 binfo->wcmap.map[mapindex].pos= pos;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
843 binfo->wcmap.map[mapindex].eucsize= nbytes= WCSIZE(t);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
844 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
845 } while (pos < maxpos);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
846 WCMAP_SETSIZE(binfo->wcmap, mapindex);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
847 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
848 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
849
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
850 static EnergizePos
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
851 EnergizePosForBufpos (Bufpos char_pos, BufferInfo *binfo)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
852 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
853 int mapindex;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
854 WCharMapRec map;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
855 EnergizePos byte_pos;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
856
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
857 sync_buffer_widechar_map (binfo);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
858
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
859 --char_pos; /* preadjust emacs position */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
860
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
861 mapindex=0, byte_pos=0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
862 while ((mapindex < binfo->wcmap.mapsize) &&
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
863 (char_pos > (map= binfo->wcmap.map[mapindex++]).pos)) {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
864 if (char_pos > map.endpos) {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
865 byte_pos += ((map.endpos - map.pos) * map.eucsize);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
866 } else {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
867 byte_pos += ((char_pos - map.pos) * map.eucsize);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
868 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
869 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
870 /* there should be a sanity check here */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
871 #ifdef CHECK_SANITY
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
872 if (!sanity) {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
873 Bufpos check_pos;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
874 sanity=1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
875 check_pos= BufposForEnergizePos(byte_pos, binfo);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
876 sanity=0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
877
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
878 if (check_pos != char_pos) {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
879 stderr_out ("ezpos(%d) = %d, Bufpos(%d) = %d\n",
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
880 char_pos, byte_pos, byte_pos, check_pos);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
881 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
882 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
883 #endif
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
884 return byte_pos;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
885 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
886
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
887 static Bufpos
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
888 BufposForEnergizePos (EnergizePos ez_pos, BufferInfo *binfo)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
889 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
890 int mapindex, x;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
891 WCharMapRec map;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
892 Bufpos char_pos;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
893 EnergizePos byte_pos;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
894
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
895 sync_buffer_widechar_map(binfo);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
896
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
897 mapindex=0, byte_pos=0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
898 while ((mapindex < binfo->wcmap.mapsize) &&
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
899 (byte_pos <= ez_pos)) {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
900 map= binfo->wcmap.map[mapindex++];
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
901 x= (map.eucsize*(map.endpos-map.pos));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
902 if (ez_pos > (byte_pos + x)) {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
903 byte_pos += x;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
904 char_pos = map.endpos;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
905 } else {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
906 char_pos = (map.pos + ((ez_pos - byte_pos)/map.eucsize));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
907 break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
908 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
909 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
910 char_pos= (char_pos >= (1 << VALBITS)) ? BUF_Z (current_buffer) :
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
911 (char_pos + 1);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
912 #ifdef CHECK_SANITY
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
913 if (!sanity) {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
914 EnergizePos check_pos;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
915 sanity=1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
916 check_pos= EnergizePosForBufpos(char_pos);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
917 sanity=0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
918
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
919 if (check_pos != ez_pos) {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
920 stderr_out ("Bufpos(%d) = %d, EnergizePosForBufpos(%d) = %d\n",
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
921 ez_pos, char_pos, char_pos, check_pos);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
922 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
923 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
924 #endif
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
925 return (char_pos);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
926 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
927
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
928 #else /* !I18N4 */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
929
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
930 static Bufpos
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
931 BufposForEnergizePos (EnergizePos energizePos, BufferInfo *binfo)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
932 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
933 return ((energizePos >= (1 << VALBITS)) ? BUF_Z (current_buffer) :
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
934 (energizePos + 1));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
935 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
936
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
937 static EnergizePos
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
938 EnergizePosForBufpos (Bufpos emacs_pos, BufferInfo *binfo)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
939 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
940 return (emacs_pos - 1);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
941 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
942
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
943 #endif /* !I18N4 */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
944
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
945
20
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
946 DEFUN ("energize-update-menubar", Fenergize_update_menubar, 0, 1, 0, /*
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
947 obsolete
20
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
948 */
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
949 (frame))
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
950 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
951 return Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
952 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
953
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
954
20
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
955 DEFUN ("energize-extent-menu-p", Fenergize_extent_menu_p, 1, 1, 0, /*
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
956 Whether the extent has a set of commands defined by Energize.
20
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
957 */
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
958 (extent_obj))
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
959 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
960 CHECK_EXTENT (extent_obj);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
961
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
962 if (NILP (Fconnected_to_energize_p ()))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
963 return Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
964 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
965 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
966 Energize_Extent_Data *ext = extent_to_data (extent_obj);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
967 return (ext && ext->extentType == CEGeneric) ? Qt : Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
968 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
969 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
970
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
971
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
972 /* Do what is needed so that the delayed requests will be notified by
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
973 ** the event loop */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
974
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
975 extern void mark_process_as_being_ready (struct Lisp_Process* process);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
976
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
977 static void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
978 notify_delayed_requests (void)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
979 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
980 if (energize_connection
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
981 && !NILP (energize_connection->proc)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
982 && energize_connection->conn
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
983 && CRequestDelayedP (energize_connection->conn))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
984 this function no longer exists.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
985 (Replaced by mark_what_as_being_ready, with different arguments.)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
986 Rewrite this.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
987 mark_process_as_being_ready (XPROCESS (energize_connection->proc));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
988 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
989
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
990
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
991 /******************* IMAGE storage maintenance *******************/
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
992
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
993 extern GLYPH image_instance_to_glyph (Lisp_Object);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
994
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
995 static c_hashtable image_cache;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
996
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
997 extern char *strdup ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
998 extern Lisp_Object Fbuffer_file_name (Lisp_Object);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
999
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1000
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1001 extern Lisp_Object Fmake_face (Lisp_Object name);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1002 extern Lisp_Object Fface_foreground (Lisp_Object face, Lisp_Object frame);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1003 extern Lisp_Object Fface_background (Lisp_Object face, Lisp_Object frame);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1004
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1005 /* Don't let any of these get GCed, since we hold their GLYPH ids in
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1006 a non-lisp hash table (image_cache) . */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1007 static Lisp_Object Vall_energize_pixmaps;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1008
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1009 /* Parses an image from the image language */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1010 static GLYPH
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1011 read_energize_image_data (Connection *conn, BufferInfo *binfo)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1012 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1013 ReqLen l;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1014 char *s = CGetVstring (conn, &l);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1015 char pix_name [255];
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1016 char buf [255];
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1017 int attr_number, pix_len;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1018 char *file;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1019 GLYPH result = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1020 /* It is bad news to pass the address of a short to gethash. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1021 int hashed = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1022
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1023 if (s[0] != 'f')
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1024 return 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1025
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1026 if (gethash ((void *) s, image_cache, (void *) &hashed))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1027 /* If we have already parsed this image spec (string=) then just return
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1028 the old glyph, instead of calling the lisp code, x_get_pixmap, and
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1029 XtGetSubResources again. The result may be 0 if there is no pixmap
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1030 file name in the resource database.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1031 */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1032 return (GLYPH) hashed;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1033
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1034 if (3 != sscanf (s, "f %d p %d %s", &attr_number, &pix_len, pix_name))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1035 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1036 sprintf (buf, "unparsable image: \"%s\"", s);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1037 error (buf);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1038 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1039
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1040 assert (pix_len == strlen (pix_name));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1041
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1042 /* Read the pixmap file name for this image from the resource db */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1043 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1044 XtResource resource [1];
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1045 resource[0].resource_name = pix_name;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1046 resource[0].resource_class = XtCBitmap;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1047 resource[0].resource_type = XtRString;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1048 resource[0].resource_size = sizeof (char *);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1049 resource[0].resource_offset = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1050 resource[0].default_type = XtRImmediate;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1051 resource[0].default_addr = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1052 file = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1053 XtGetSubresources (FRAME_X_SHELL_WIDGET (XFRAME (Fselected_frame (Qnil))),
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1054 (XtPointer) &file, "image", "Image", resource, 1, NULL,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1055 0);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1056 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1057
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1058 if (! file)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1059 result = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1060 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1061 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1062 Lisp_Object lfile = Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1063 Lisp_Object p = Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1064 struct gcpro gcpro1, gcpro2;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1065 sprintf (buf, "attribute%d", attr_number);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1066 GCPRO2 (lfile, p);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1067 lfile = build_string (file);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1068 p = Fmake_image_instance (lfile, Qnil); /* may gc */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1069 result = image_instance_to_glyph (p);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1070 Vall_energize_pixmaps = Fcons (Fcons (make_int (result), p),
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1071 Vall_energize_pixmaps);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1072 if (!EQ (p, glyph_to_image_instance (result)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1073 abort ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1074 UNGCPRO;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1075
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1076 if (XIMAGE_INSTANCE (p)->depth == 0)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1077 /* if depth is >0 then this is an XPM, and its colors are not
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1078 controlled by the fg/bg of a face. So don't bother making a
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1079 face for it. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1080 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1081 Lisp_Object face, fg, bg;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1082 struct face *c_face;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1083 /* #### review this */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1084 face = Fmake_face (intern (buf));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1085 fg = FACE_FOREGROUND (face, Qnil);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1086 bg = FACE_BACKGROUND (face, Qnil);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1087 Fcolorize_image_instance (p, fg, bg);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1088 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1089 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1090
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1091 /* CGetVstring returns a pointer into the connection buffer; we need to
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1092 copy it to use it as a hash key. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1093 s = strdup (s);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1094
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1095 hashed = result;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1096 puthash ((void *) s, (void *) hashed, image_cache);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1097 return result;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1098 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1099
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1100
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1101 /* Parses Classes from the connection buffer. Defines them for
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1102 * the buffer given as argument */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1103 static void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1104 read_energize_class_data (Connection *conn, unsigned int number,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1105 BufferInfo *binfo, unsigned int modify_ok)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1106 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1107 CClass *ptr; /* pointer to class data in buffer */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1108 GDataClass *cl; /* unmodified class data */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1109 GLYPH g;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1110 int i;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1111
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1112 for (i = 0; i < number; i++)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1113 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1114 ptr = CGet (conn, CClass);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1115 g = read_energize_image_data (conn, binfo);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1116 cl = get_class (ptr->classId, binfo);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1117
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1118 if (!cl)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1119 cl = alloc_GDataclass (ptr->classId, binfo);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1120 else if (!modify_ok)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1121 message("Attempt to create class with existing Id %8x", ptr->classId);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1122
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1123 if (ignore_kernel) continue;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1124
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1125 /* if it did exist, we just clobber it */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1126 if (cl->flags != ptr->flags)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1127 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1128 cl->flags = ptr->flags;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1129 BUF_FACECHANGE (XBUFFER (binfo->emacs_buffer))++;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1130 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1131 if (cl->glyph != g)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1132 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1133 cl->glyph = g;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1134 BUF_FACECHANGE (XBUFFER (binfo->emacs_buffer))++;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1135 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1136 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1137 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1138
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1139 /* Parse GenericData form the connection buffer. Defines them for the buffer
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1140 * given as argument */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1141 static void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1142 read_energize_generic_data (Connection *conn, unsigned int number,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1143 BufferInfo *binfo, unsigned int modify_ok)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1144 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1145 CGeneric *ptr;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1146 GenericData *gen;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1147 GDataClass *cl;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1148 GLYPH g;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1149 int i;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1150
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1151 for (i = 0; i < number; i++)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1152 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1153 ptr = CGet (conn, CGeneric);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1154 g = read_energize_image_data (conn, binfo);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1155 gen = get_generic (ptr->genericId, binfo);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1156 cl = get_class (ptr->classId, binfo);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1157
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1158 if (!gen)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1159 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1160 /* create generic if it didn't already exist */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1161
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1162 if (!cl)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1163 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1164 message ("Attempt to create generic %8x with undefined class %8x",
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1165 ptr->genericId, ptr->classId);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1166 continue;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1167 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1168
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1169 gen = alloc_GenericData (ptr->genericId, cl, binfo);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1170 gen->glyph = g;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1171 if (ptr->flags != 0xff) gen->flags = ptr->flags;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1172 gen->attribute = ptr->attribute;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1173 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1174 else if (!modify_ok)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1175 message("Attempt to create generic with existing id %8x",
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1176 ptr->genericId);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1177 else{
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1178 /* modify the generic */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1179 int modified = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1180 if (cl != gen->cl)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1181 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1182 modified = 1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1183 gen->cl = cl;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1184 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1185 if (gen->glyph != g)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1186 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1187 modified = 1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1188 gen->glyph = g;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1189 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1190 if (ptr->flags != 0xff)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1191 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1192 modified = 1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1193 gen->flags = ptr->flags;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1194 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1195 if (gen->attribute != ptr->attribute)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1196 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1197 modified = 1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1198 gen->attribute = ptr->attribute;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1199 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1200 if (modified)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1201 BUF_FACECHANGE (XBUFFER (binfo->emacs_buffer))++;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1202 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1203 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1204 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1205
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1206
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1207 static void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1208 insert_one_extent (CExtent* ptr, BufferInfo* binfo, int modify_ok)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1209 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1210 Energize_Extent_Data *ext;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1211 GenericData *gen;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1212 Bufpos extent_start;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1213 Bufpos extent_end;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1214 int set_endpoints_p = 1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1215 int created_ext_data = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1216 Lisp_Object buffer = binfo->emacs_buffer;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1217
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1218 ext = get_extent_data (ptr->extentId, binfo);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1219
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1220 if (!ext)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1221 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1222 ext = (Energize_Extent_Data *) xmalloc (sizeof (Energize_Extent_Data));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1223 created_ext_data = 1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1224 ext->seal = EXTENT_SEAL;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1225 ext->id = ptr->extentId;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1226 ext->extentType = -1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1227 ext->extent = Qnil; /* not a normal value: set before we return */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1228 ext->start_pixmap = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1229 ext->end_pixmap = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1230 ext->warn_modify = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1231 put_extent_data (ext->id, binfo, ext);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1232 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1233 else if (!modify_ok)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1234 message ("Creating extent with existing id %8x", ptr->extentId);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1235
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1236 ext->extentType = ptr->extentType;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1237
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1238 switch (ptr->extentType)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1239 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1240 case CEAttribute:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1241 ext->u.attr.attrValue = ptr->data;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1242 break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1243
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1244 case CEAbbreviation:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1245 ext->u.abbrev.isOpened = ptr->data;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1246 break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1247
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1248 case CEWriteProtect:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1249 break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1250
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1251 case CEGeneric:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1252 gen = get_generic (ptr->data, binfo);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1253 if (!gen)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1254 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1255 message ("NewExtents: Nonexistent generic data %8x", ptr->data);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1256 return;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1257 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1258 ext->u.generic.gData = gen;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1259 break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1260
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1261 default:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1262 message ("Unknown extent type %d", ptr->extentType);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1263 break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1264 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1265
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1266 /* instruct redisplay to recompute the frame */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1267 BUF_FACECHANGE (XBUFFER (binfo->emacs_buffer))++;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1268
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1269 /* ptr->startPosition == ptr->endPosition == ~0 means to not change
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1270 * the extent endpoints */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1271 if (ptr->startPosition == ~0 && ptr->endPosition == ~0)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1272 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1273 set_endpoints_p = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1274 extent_start = ~0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1275 extent_end = ~0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1276 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1277 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1278 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1279 struct buffer *b = XBUFFER (buffer);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1280 extent_start = BufposForEnergizePos (ptr->startPosition, binfo);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1281 extent_end = BufposForEnergizePos (ptr->endPosition, binfo);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1282
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1283 /* We have to be careful to create the extents with endpoints
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1284 which are in the buffer.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1285
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1286 Under certain obscure conditions involving changes made outside
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1287 of Emacs (bug 19983), the server and the editor can have different
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1288 ideas about where the extents are, so these numbers can be off
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1289 temporarily (during the window between read_energize_extent_data
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1290 and Qenergize_auto_revert_buffer in read_energize_buffer_data
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1291 from ModifyBufferRType).
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1292 */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1293
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1294 /* Don't allow 0-length extents, as they tend to disappear. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1295 if (extent_start >= extent_end)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1296 extent_end = extent_start + 1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1297
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1298 /* Don't let them outside the buffer (even if we grew them). */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1299 if (extent_start >= BUF_Z (b)) extent_start = BUF_Z (b) - 1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1300 if (extent_end >= BUF_Z (b)) extent_end = BUF_Z (b) - 1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1301 if (extent_start < BUF_BEG (b)) extent_start = BUF_BEG (b);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1302 if (extent_end < BUF_BEG (b)) extent_end = BUF_BEG (b);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1303
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1304 /* If they're 0-length again, then the extent must be at point-max.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1305 In that case, extent it backward (if possible) instead of forward.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1306 */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1307 if (extent_start >= extent_end
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1308 && BUF_BEG (b) != BUF_Z (b))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1309 extent_start = extent_end - 1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1310 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1311
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1312 /* no zero width extent */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1313 if (set_endpoints_p && extent_start == extent_end)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1314 extent_end += 1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1315
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1316 /* Now create the extent for the extent-data. There is a 1:1 mapping between
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1317 these, and an extent-data points at an extent (and that extent points
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1318 back) until energize tells us to delete the extent. This is the only
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1319 function in which ext->extent is ever not an extent. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1320 if (created_ext_data)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1321 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1322 ext->extent = Fmake_extent (make_int (extent_start),
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1323 make_int (extent_end), buffer);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1324 set_energize_extent_data (XEXTENT (ext->extent), ext);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1325 restore_energize_extent_state (XEXTENT (ext->extent));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1326 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1327 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1328 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1329 if (!EQ (buffer, extent_buffer (XEXTENT (ext->extent))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1330 signal_simple_error_2 ("extent not part of buffer", ext->extent,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1331 buffer);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1332
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1333 if (set_endpoints_p)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1334 Fset_extent_endpoints (ext->extent, make_int (extent_start),
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1335 make_int (extent_end), Qnil);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1336 restore_energize_extent_state (XEXTENT (ext->extent));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1337 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1338
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1339 if (energize_extent_data (XEXTENT (ext->extent)) != ext)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1340 abort ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1341
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1342 extent_duplicable_p (XEXTENT (ext->extent)) = 1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1343 extent_unique_p (XEXTENT (ext->extent)) = 1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1344 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1345
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1346
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1347 /* Parse GenericData from the connection buffer. Defines them for the buffer
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1348 * given as argument. Creates the Emacs extents while parsing.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1349 * Energize sends the extents ordered by increasing starting position.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1350 I don't think the following is true any more:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1351 * Emacs is __much__ faster at inserting them in decreasing starting position
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1352 * also for overlaps to work correctly the outmost extents have to be
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1353 * inserted first. This is what the recursive function is trying to do.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1354 */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1355 static void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1356 read_energize_extent_data (Connection *conn, unsigned int number,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1357 BufferInfo *binfo, unsigned int modify_ok,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1358 int extent_offset)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1359 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1360 CExtent* all_extents;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1361 int i;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1362
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1363 /* Gets the extents from the connection */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1364 all_extents = CGetN (conn, CExtent, number);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1365
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1366 /* adjusts the endpoints with the offset */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1367 for (i = 0; i < number; i++)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1368 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1369 if (all_extents [i].startPosition != ~0)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1370 all_extents [i].startPosition += extent_offset;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1371 if (all_extents [i].endPosition != ~0)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1372 all_extents [i].endPosition += extent_offset;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1373 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1374
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1375 /* inserts them all */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1376 for (i = number - 1; i >= 0; i--)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1377 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1378 insert_one_extent (all_extents + i, binfo, modify_ok);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1379 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1380 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1381
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1382 /* Parses a CBuffer in the connection stream. If (delete_from != delete_to)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1383 all characters in this range must be deleted.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1384 */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1385
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1386 static int
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1387 string_buffer_compare (char *string, int string_len,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1388 struct buffer *buf, Bufpos bufpos)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1389 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1390 /* !!#### needs to be rewritten for Mule */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1391 Bufpos first_section_end = BUF_CEILING_OF (buf, bufpos);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1392
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1393 /* degenerate case, which we consider to be "true" */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1394 if (string_len == 0) return 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1395
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1396 /* string won't fit in the buffer, so comparison fails */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1397 if (BUF_Z (buf) < (bufpos + string_len)) return -1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1398
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1399 /* bad starting position, so comparison fails */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1400 if (bufpos < BUF_BEG (buf)) return -1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1401
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1402 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1403 char *first_section_chars = (char *) BUF_BYTE_ADDRESS (buf, bufpos);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1404 int comp = strncmp (string, first_section_chars,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1405 first_section_end - bufpos);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1406
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1407 if (comp) return comp;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1408 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1409
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1410 if (first_section_end < BUF_ZV (buf))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1411 /* there is a second section */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1412 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1413 char *second_section_chars =
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1414 (char *) BUF_BYTE_ADDRESS (buf, first_section_end);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1415 int comp = strncmp (string + (first_section_end - bufpos),
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1416 second_section_chars,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1417 BUF_ZV (buf) - first_section_end);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1418
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1419 if (comp) return comp;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1420 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1421
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1422 return 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1423 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1424
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1425 /* called by unwind protect, from within ParseBuffer and HandleRemoveExtents */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1426 static Lisp_Object
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1427 restore_buffer_state (Lisp_Object state_cons)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1428 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1429 BufferInfo *binfo;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1430 Lisp_Object bufferId_obj = Fcar (state_cons);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1431 unsigned int bufferId = (unsigned int) get_opaque_ptr (bufferId_obj);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1432 Lisp_Object buffer_modified_state = Fcar (Fcdr (state_cons));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1433 Lisp_Object clear_undo_list = Fcdr (Fcdr (state_cons));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1434
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1435 if (bufferId != 0)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1436 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1437 if (energize_connection
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1438 && (binfo = get_buffer_info_for_id (bufferId, energize_connection))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1439 && !NILP (binfo->emacs_buffer))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1440 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1441 /* Always ignore what Energize tells us about the buffer read-only
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1442 state. For files Emacs knows better and for non-file buffers
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1443 Emacs is hacking the read-only state anyway so let it be. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1444 XBUFFER (binfo->emacs_buffer)->read_only = buffer_modified_state;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1445 if (!NILP (clear_undo_list))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1446 XBUFFER (binfo->emacs_buffer)->undo_list = Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1447 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1448 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1449 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1450 /* this is just temporary */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1451 message ("Bad bufferId cons cell!");
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1452 return Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1453 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1454
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1455 /* #### this shit should be using generate-new-buffer */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1456 static void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1457 rename_the_buffer (Lisp_Object new_name)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1458 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1459 int count = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1460 char number [8];
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1461 struct gcpro gcpro1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1462
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1463 Lisp_Object name = new_name;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1464 GCPRO1 (name);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1465 while (!NILP (Fget_buffer (name)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1466 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1467 sprintf (number, "<%d>", ++count);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1468 name = concat2 (new_name, build_string (number));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1469 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1470 Frename_buffer (name, Qnil);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1471 UNGCPRO;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1472 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1473
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1474 static int
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1475 destroy_if_energize_extent (EXTENT e, void* arg)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1476 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1477 struct Energize_Extent_Data *ext = energize_extent_data (e);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1478 if (ext)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1479 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1480 Lisp_Object extent;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1481 Lisp_Object buffer;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1482 BufferInfo *binfo = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1483 XSETEXTENT (extent, e);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1484 buffer = extent_buffer (XEXTENT (extent));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1485 Fdelete_extent (extent);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1486 if (BUFFERP (buffer))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1487 binfo = get_buffer_info_for_emacs_buffer (buffer, energize_connection);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1488 if (binfo)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1489 free_Energize_Extent_Data (ext, binfo, OFT_GC);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1490 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1491 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1492 /* #### partly duplicated in free_Energize_Extent_Data() */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1493 set_energize_extent_data (e, 0);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1494 ext->extent = Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1495 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1496 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1497 return 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1498 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1499
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1500 static void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1501 destroy_all_energize_extents (struct buffer *buf)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1502 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1503 map_extents (BUF_BEG (buf), BUF_Z (buf), destroy_if_energize_extent,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1504 NULL, make_buffer (buf), 0,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1505 ME_END_CLOSED | ME_MIGHT_MODIFY_EXTENTS);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1506 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1507
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1508 static Lisp_Object
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1509 restore_inside_parse_buffer (Lisp_Object val)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1510 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1511 inside_parse_buffer = XINT (val);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1512 return (val);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1513 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1514
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1515 static void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1516 hack_window_point (Lisp_Object window,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1517 Lisp_Object old_point,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1518 Lisp_Object old_start,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1519 int keep_start_p,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1520 BufferInfo *binfo)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1521 /* If we've reverted a buffer, sometimes we want to make sure that
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1522 the window-point doesn't move. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1523 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1524 if (NILP (window))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1525 return;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1526
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1527 Fset_marker (XWINDOW (window)->pointm, old_point, binfo->emacs_buffer);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1528 if (NILP (binfo->output_mark) && keep_start_p)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1529 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1530 Fset_marker (XWINDOW (window)->start, old_start, binfo->emacs_buffer);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1531 XWINDOW (window)->force_start = 1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1532 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1533 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1534
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1535 static void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1536 read_energize_buffer_data (Connection *conn, CBuffer *cbu, Editor *editor,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1537 EnergizePos delete_from, EnergizePos delete_to,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1538 Window win, int relative_p)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1539 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1540 char *name;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1541 ReqLen name_len;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1542 char *pathname_str;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1543 ReqLen pathname_len;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1544 char *buffer_class_str;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1545 ReqLen buffer_class_len;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1546 Lisp_Object pathname = Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1547 Lisp_Object pathname_directory = Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1548 Lisp_Object buffer_name = Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1549 Lisp_Object filename = Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1550 #if 1
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1551 Lisp_Object display_window = Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1552 #endif
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1553 BufferInfo *binfo;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1554 int modifying_p = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1555 Bufpos previous_point;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1556 Bufpos from;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1557 Bufpos to;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1558 #if 1
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1559 Bufpos display_start = 1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1560 #endif
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1561 char *text;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1562 ReqLen text_len;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1563 int get_chars_from_file = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1564 Lisp_Object modified_buffer_flag;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1565 int speccount = specpdl_depth ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1566 int extent_offset;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1567 Lisp_Object restore_buffer_state_cons;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1568 int should_keep_window_start = 1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1569 int no_text_deleted = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1570
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1571 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1572
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1573 /* For some reason calling the GC before parsing the buffer data
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1574 makes a better usage of memory and emacs leaks less when
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1575 creating/deleting LE browser buffers.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1576 However you don't want to call GC all the tiem so we only do it if the request
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1577 will create more than a given number of extents. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1578 if (cbu->nExtent > energize_extent_gc_threshold)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1579 garbage_collect_1 ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1580
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1581 record_unwind_protect (save_restriction_restore, save_restriction_save ());
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1582
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1583 Fwiden (Fcurrent_buffer ());
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1584
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1585 GCPRO4 (buffer_name, pathname, pathname_directory, filename);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1586
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1587 name = CGetVstring (conn, &name_len);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1588
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1589 /* read the pathname and buffer-class -- Editor Protocol > 0 */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1590 pathname_str = CGetVstring (conn, &pathname_len);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1591 buffer_class_str = CGetVstring (conn, &buffer_class_len);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1592
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1593 if (name_len)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1594 buffer_name = build_string (name);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1595 if (pathname_len)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1596 pathname = build_string (pathname_str);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1597
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1598 /* set up pathname_directory */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1599 if (!NILP (pathname))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1600 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1601 if (NILP (Ffile_directory_p (pathname)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1602 pathname_directory = Ffile_name_directory (pathname);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1603 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1604 pathname_directory = pathname;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1605 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1606
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1607 /* make sure that pathname_directory ends with a '/', if it exists */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1608 if (!NILP (pathname_directory))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1609 {
14
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents: 0
diff changeset
1610 Bufbyte *str = XSTRING_DATA (pathname_directory);
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents: 0
diff changeset
1611 Bytecount size = XSTRING_LENGTH (pathname_directory);
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1612 if (str[size - 1] != '/')
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1613 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1614 Lisp_Object tmp = make_string (str, size + 1);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1615 set_string_byte (XSTRING (tmp), size, '/');
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1616 pathname_directory = tmp;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1617 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1618 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1619
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1620
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1621 /* get or create the BufferInfo */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1622 if (binfo = get_buffer_info_for_id (cbu->bufferId, editor))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1623 modifying_p = 1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1624 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1625 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1626 if (NILP (buffer_name))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1627 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1628 char *dummy = "*Unnamed " IDENTITY_CRISIS " Buffer*";
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1629 buffer_name = build_string (dummy);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1630 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1631 /* create new buffer */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1632 binfo = alloc_BufferInfo (cbu->bufferId, buffer_name, pathname,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1633 buffer_class_str, editor, win,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1634 cbu->nExtent + cbu->nClass + cbu->nGeneric);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1635 XBUFFER (binfo->emacs_buffer)->read_only =
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1636 cbu->flags == CBReadOnly ? Qt : Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1637 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1638
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1639 /* remember where we were in which buffer before we change things */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1640 if (current_buffer != XBUFFER (binfo->emacs_buffer))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1641 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1642 record_unwind_protect (save_excursion_restore, save_excursion_save ());
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1643 Fset_buffer (binfo->emacs_buffer);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1644 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1645
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1646 /* set default-directory */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1647 if (!NILP (pathname_directory))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1648 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1649 if (!NILP (Ffile_directory_p (pathname_directory))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1650 && !NILP (Ffile_executable_p (pathname_directory)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1651 Fset (Qdefault_directory, pathname_directory);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1652 /* Never set this to nil, that loses badly. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1653 /* else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1654 Fset (Qdefault_directory, Qnil); */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1655 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1656
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1657 /* set file name unless it's a directory */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1658 if (!NILP (pathname) && NILP (Ffile_directory_p (pathname)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1659 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1660 filename = Fexpand_file_name (pathname, Qnil);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1661 Fset (Qbuffer_file_name, filename);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1662 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1663
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1664 /* set buffer name */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1665 if (!NILP (buffer_name))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1666 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1667 if (modifying_p
70
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents: 20
diff changeset
1668 && strcmp ((char*)XSTRING_DATA (buffer_name),
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents: 20
diff changeset
1669 (char*)
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents: 20
diff changeset
1670 string_data (XSTRING (XBUFFER (binfo->emacs_buffer)->name))))
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1671 rename_the_buffer (buffer_name);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1672 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1673
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1674 if (modifying_p)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1675 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1676 run_hook (Venergize_kernel_modification_hook);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1677 /* Make sure buffer is current after the hook */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1678 Fset_buffer (binfo->emacs_buffer);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1679 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1680
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1681 modified_buffer_flag = Fbuffer_modified_p (binfo->emacs_buffer);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1682
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1683 /* enables buffer edits */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1684 restore_buffer_state_cons =
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1685 Fcons (make_opaque_ptr ((void *) cbu->bufferId),
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1686 Fcons (XBUFFER (binfo->emacs_buffer)->read_only, Qt));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1687 record_unwind_protect (restore_buffer_state, restore_buffer_state_cons);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1688 XBUFFER (binfo->emacs_buffer)->read_only = Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1689
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1690 /* any changes here should take place "underneath" these hooks, I think */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1691 specbind (Qenergize_buffer_modified_hook, Qnil);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1692 specbind (Qfirst_change_hook, Qnil);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1693 specbind (Qbefore_change_functions, Qnil);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1694 specbind (Qbefore_change_function, Qnil); /* #### */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1695 /* As energize does not use the after-change-function it's not useful to
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1696 bind it to NIL */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1697 /* specbind (Qafter_change_functions, Qnil); */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1698 /* specbind (Qafter_change_function, Qnil); #### */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1699 specbind (Qinhibit_read_only, Qt);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1700 record_unwind_protect (restore_inside_parse_buffer,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1701 make_int (inside_parse_buffer));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1702 inside_parse_buffer = 1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1703 specbind (Qbuffer_undo_list, Qt);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1704
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1705 XBUFFER (binfo->emacs_buffer)->undo_list = Qt;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1706
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1707 /* BufposForEnergizePos uses the current-buffer */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1708 from = BufposForEnergizePos (delete_from, binfo);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1709 to = BufposForEnergizePos (delete_to, binfo);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1710
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1711 /* See if we should get the characters from the file directly.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1712 Only protocol 0.10+ will do this.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1713 */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1714 #ifdef ENERGIZE_V2_HEADERS
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1715 get_chars_from_file = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1716 #else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1717 if (cbu->flags != 0xff)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1718 get_chars_from_file = cbu->flags & CBFileYourself;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1719 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1720 get_chars_from_file = binfo->flags & CBFileYourself;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1721 #endif
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1722
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1723 /* Even when we get the chars from a file there is an empty text string */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1724 if (get_chars_from_file)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1725 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1726 text = CGetVstring (conn, &text_len);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1727 text = NULL;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1728 text_len = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1729 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1730 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1731 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1732 text = CGetVstring (conn, &text_len);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1733 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1734
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1735 /* updates the visited file modtime */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1736 if (modifying_p && (from != to || text_len)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1737 /* but only when we do not read the file ourselves */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1738 && !get_chars_from_file)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1739 Fset_buffer_modtime (binfo->emacs_buffer, Qnil);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1740
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1741 if (!modifying_p)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1742 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1743 /* clears the buffer in case we re-use a non-energize buffer */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1744 previous_point = 1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1745 Fset_buffer (binfo->emacs_buffer);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1746 buffer_delete_range (current_buffer, BUF_BEG (current_buffer),
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1747 BUF_Z (current_buffer), 0);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1748 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1749 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1750 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1751 #if 1
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1752 display_window = Fget_buffer_window (binfo->emacs_buffer, Qnil, Qnil);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1753 #endif
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1754 previous_point = BUF_PT (current_buffer);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1755
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1756 #if 1
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1757 if (!NILP (display_window))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1758 display_start =
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1759 XINT (Fmarker_position (XWINDOW (display_window)->start));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1760 #endif
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1761
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1762 if (from != to)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1763 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1764 struct buffer *buf = XBUFFER (binfo->emacs_buffer);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1765
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1766 Fset_buffer (binfo->emacs_buffer);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1767 Fwiden (Fcurrent_buffer ());
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1768 if (!NILP (binfo->output_mark)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1769 && marker_position (binfo->output_mark) >= from)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1770 Fset_marker (binfo->output_mark, make_int (from),
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1771 binfo->emacs_buffer);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1772 if (((to - from) == text_len) && !get_chars_from_file &&
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1773 !string_buffer_compare (text, text_len, buf, from))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1774 /* the new text is the same as the old text, don't clear
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1775 the undo list*/
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1776 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1777 Fsetcdr (Fcdr (restore_buffer_state_cons), Qnil);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1778 no_text_deleted = 1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1779 destroy_all_energize_extents (buf);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1780 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1781 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1782 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1783 /* Do not keep window start if we actually delete text */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1784 should_keep_window_start = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1785 Fset_buffer (binfo->emacs_buffer);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1786 destroy_all_energize_extents (buf);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1787 if (!get_chars_from_file)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1788 buffer_delete_range (current_buffer, from, to, 0);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1789 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1790
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1791 /* Do not clear the undo list if getting the chars from the file */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1792 if (get_chars_from_file)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1793 Fsetcdr (Fcdr (restore_buffer_state_cons), Qnil);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1794 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1795 else if (!text_len && !get_chars_from_file)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1796 /* if there is no text and we didn't delete anything,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1797 don't clear the undo_list slot */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1798 Fsetcdr (Fcdr (restore_buffer_state_cons), Qnil);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1799
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1800 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1801
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1802 /* buffer type */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1803 if (cbu->flags != 0xff && cbu->flags != binfo->flags)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1804 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1805 if (!modifying_p)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1806 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1807 if (cbu->flags == CBUserInput)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1808 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1809 Lisp_Object buffer_local_variable_name =
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1810 Qenergize_user_input_buffer_mark;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1811 binfo->output_mark = Fmake_marker ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1812 Fset_marker (binfo->output_mark, make_int (1),
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1813 binfo->emacs_buffer);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1814 /* make sure that this guy doesn't get GC'd out from under us */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1815 Fmake_local_variable (buffer_local_variable_name);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1816 Fput (buffer_local_variable_name, Qpermanent_local, Qt);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1817 Fset (buffer_local_variable_name, binfo->output_mark);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1818 /* Make sure buffer is current after the hook */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1819 Fset_buffer (binfo->emacs_buffer);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1820 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1821 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1822 binfo->flags = cbu->flags;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1823 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1824
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1825 if (get_chars_from_file && text_len != 0)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1826 /* I think this is always true, but let's make sure - jwz */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1827 abort ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1828
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1829 if (text_len)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1830 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1831 if (!NILP (binfo->output_mark))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1832 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1833 Fset_buffer (binfo->emacs_buffer);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1834 if (XMARKER (binfo->output_mark)->buffer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1835 Fgoto_char (binfo->output_mark, Fcurrent_buffer ());
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1836 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1837 /* This should not happen */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1838 Fgoto_char (make_int (BUF_ZV (XBUFFER (binfo->emacs_buffer))),
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1839 Fcurrent_buffer ());
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1840
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1841 if (BUF_PT (current_buffer) <= previous_point)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1842 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1843 #if 1
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1844 display_start += text_len;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1845 #endif
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1846 previous_point += text_len;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1847 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1848 buffer_insert_raw_string (current_buffer, text, text_len);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1849 Fset_marker (binfo->output_mark, make_int (BUF_PT (current_buffer)),
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1850 binfo->emacs_buffer);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1851 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1852 else if (modifying_p)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1853 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1854 Fgoto_char (make_int (from), Fcurrent_buffer ());
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1855 if (!no_text_deleted)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1856 buffer_insert_raw_string (current_buffer, text, text_len);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1857 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1858 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1859 buffer_insert_raw_string (current_buffer, text, text_len);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1860
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1861 previous_point = XINT (Fgoto_char (make_int (previous_point)),
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1862 Fcurrent_buffer ());
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1863 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1864 else if (get_chars_from_file && !modifying_p)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1865 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1866 /* !modifying_p means the buffer is being created - read the text
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1867 from the file. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1868 Finsert_file_contents_internal (Fbuffer_file_name (binfo->emacs_buffer),
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1869 /* #### coding system not correct */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1870 Qt, Qnil, Qnil, Qnil, Qnil, Qnil));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1871 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1872
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1873 if (!relative_p)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1874 extent_offset = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1875 else if (!NILP (binfo->output_mark))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1876 extent_offset = EnergizePosForBufpos (XINT (Fmarker_position
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1877 (binfo->output_mark)),
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1878 binfo);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1879 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1880 extent_offset = EnergizePosForBufpos (BUF_Z(XBUFFER(binfo->emacs_buffer)),
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1881 binfo);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1882
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1883 #if 1
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1884 if (text_len || !text)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1885 hack_window_point (display_window,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1886 make_int (previous_point),
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1887 make_int (display_start),
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1888 should_keep_window_start,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1889 binfo);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1890 #endif
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1891
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1892
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1893 /* Classes, generics and extents */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1894 /* make sure that we have enough room in the hash table */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1895 expand_hashtable (binfo->id_to_object,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1896 cbu->nClass + cbu->nGeneric + cbu->nExtent);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1897 read_energize_class_data (conn, cbu->nClass, binfo, modifying_p);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1898 read_energize_generic_data (conn, cbu->nGeneric, binfo, modifying_p);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1899 read_energize_extent_data (conn, cbu->nExtent, binfo, modifying_p, extent_offset);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1900
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1901 /* Restore the modified bit */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1902 Fset_buffer_modified_p (modified_buffer_flag, binfo->emacs_buffer);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1903
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1904 if (get_chars_from_file && modifying_p)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1905 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1906 /* modifying_p means the buffer already exists and the extents are
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1907 being re-written. It may be that the file has changed on disk,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1908 and the extents no longer correspond to the text in the buffer,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1909 which would be bad. So, check the file on disk, and if it has
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1910 changed, offer to revert.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1911
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1912 As this runs lisp code which may prompt the user, and consequently
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1913 may accept process output, be careful to do this after we have
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1914 finished reading the current request from the Energize connection.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1915 */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1916 if (NILP (Fverify_visited_file_modtime (binfo->emacs_buffer)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1917 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1918 call1 (Qenergize_auto_revert_buffer, binfo->emacs_buffer);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1919 hack_window_point (display_window,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1920 make_int (previous_point),
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1921 make_int (display_start),
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1922 1,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1923 binfo);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1924 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1925 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1926
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1927
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1928 /* restore modified hooks and globals, and return the previous buffer */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1929 UNGCPRO;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1930 unbind_to (speccount, Qnil);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1931 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1932
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1933
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1934 static void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1935 cleanly_destroy_all_widgets (int count, LWLIB_ID *ids)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1936 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1937 /* This just calls lw_destroy_all_widgets, but is careful to make sure that
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1938 this doesn't cause the frames to shrink. If one deletes psheets
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1939 (children of the "control" area of the MainWindow) without first
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1940 unmanaging the MainWindow, the frame resizes. So first unmanage all
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1941 the MainWindows of all applicable frames, then remanage them. This is
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1942 nasty, but...
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1943 */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1944 Lisp_Object frmcons, devcons, concons;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1945 int i, j;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1946
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1947 if (count == 0)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1948 return;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1949
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1950 FRAME_LOOP_NO_BREAK (frmcons, devcons, concons)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1951 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1952 Lisp_Object frame = XCAR (frmcons);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1953 struct frame *f = XFRAME (frame);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1954
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1955 if (!FRAME_X_P (f))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1956 continue;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1957 /* Optimization: only unmanage the MainWindow if this frame is
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1958 displaying one of the psheets in question. (Special casing
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1959 the debugger panel as usual...)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1960 */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1961 for (i = 0; i < count; i++)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1962 if (ids [i] == debuggerpanel_sheet)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1963 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1964 XtUnmanageChild (FRAME_X_CONTAINER_WIDGET (f));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1965 goto next_frame;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1966 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1967 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1968 for (j = 0; j < FRAME_X_CURRENT_PSHEET_COUNT (f); j++)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1969 if (ids [i] == FRAME_X_CURRENT_PSHEETS (f) [j])
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1970 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1971 XtUnmanageChild (FRAME_X_CONTAINER_WIDGET (f));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1972 goto next_frame;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1973 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1974 next_frame: ;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1975 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1976
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1977 for (i = 0; i < count; i++)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1978 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1979 lw_destroy_all_widgets (ids [i]);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1980 if (ids [i] == debuggerpanel_sheet)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1981 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1982 debuggerpanel_sheet = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1983 desired_debuggerpanel_exposed_p = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1984 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1985 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1986
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1987 FRAME_LOOP_NO_BREAK (frmcons, devcons, concons)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1988 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1989 Lisp_Object frame = XCAR (frmcons);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1990 struct frame *f = XFRAME (frame);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1991
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1992 if (!FRAME_X_P (f))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1993 continue;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1994 XtManageChild (FRAME_X_CONTAINER_WIDGET (f));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1995 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1996 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1997
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1998
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1999 /* kill an Energize buffer */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2000 static void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2001 forget_buffer (BufferInfo *binfo)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2002 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2003 int i;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2004 Lisp_Object buffer = binfo->emacs_buffer;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2005
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2006 remove_buffer_info (binfo->id, buffer, binfo->editor);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2007 Venergize_buffers_list = Fdelq (buffer, Venergize_buffers_list);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2008
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2009 /* if there was an associated frame */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2010 if (!NILP (binfo->frame))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2011 Fdelete_frame (binfo->frame, Qt);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2012
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2013 if (binfo->n_p_sheets > 0)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2014 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2015 /* Also delete the dialog boxes associated with the buffer. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2016 cleanly_destroy_all_widgets (binfo->n_p_sheets,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2017 (LWLIB_ID *) binfo->p_sheet_ids);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2018 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2019
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2020 free_buffer_info (binfo);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2021
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2022 XBUFFER (buffer)->undo_list = Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2023 /* flush the buffer SOE before flushing the extents */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2024 free_buffer_cached_stack (XBUFFER (buffer));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2025 XBUFFER (buffer)->extents = Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2026 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2027
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2028 /********************** Request-related utilities ************************/
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2029
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2030 /* outputs a single extent in the connection buffer */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2031 static void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2032 write_energize_extent_data (Connection *conn, Energize_Extent_Data *ext,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2033 unsigned int start, unsigned int end)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2034 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2035 switch (ext->extentType)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2036 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2037 case CEAttribute:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2038 CWriteExtent (conn, CEAttribute, ext->id, start, end,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2039 (EId)ext->u.attr.attrValue);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2040 break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2041
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2042 case CEAbbreviation:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2043 CWriteExtent (conn, CEAbbreviation, ext->id, start, end,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2044 (EId)ext->u.abbrev.isOpened);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2045 break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2046
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2047 case CEGeneric:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2048 CWriteExtent (conn, CEGeneric, ext->id, start, end, 0);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2049 break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2050
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2051 case CEWriteProtect:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2052 CWriteExtent (conn, CEWriteProtect, ext->id, start, end, 0);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2053 break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2054 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2055 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2056
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2057 /* Function called by map_extents in SaveBufferToEnergize. Outputs the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2058 extents for the extents corresponding to Energize objects, and
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2059 increments the n_extents count. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2060
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2061 static int
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2062 write_energize_extent_data_mapper (EXTENT extent, void *arg)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2063 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2064 binfo_and_n_extents *bane = (binfo_and_n_extents*)arg;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2065 Lisp_Object extent_obj;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2066 Energize_Extent_Data *ext;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2067
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2068 XSETEXTENT (extent_obj, extent);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2069 ext = extent_to_data (extent_obj);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2070 if (ext)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2071 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2072 Bufpos first = XINT (Fextent_start_position (extent_obj));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2073 Bufpos last = XINT (Fextent_end_position (extent_obj));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2074 write_energize_extent_data (bane->binfo->editor->conn, ext,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2075 EnergizePosForBufpos (first, bane->binfo),
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2076 EnergizePosForBufpos (last, bane->binfo));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2077 bane->n_extents += 1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2078 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2079 return 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2080 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2081
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2082 /* Sends a BufferSaved request to energize for binfo */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2083 static void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2084 write_energize_buffer_data (BufferInfo *binfo)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2085 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2086 Connection *conn = binfo->editor->conn;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2087 EId bufferId = binfo->id;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2088 CBuffer *cbu;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2089 CEditorRequest *req;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2090 struct buffer *cur_buff = current_buffer;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2091 int speccount = specpdl_depth ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2092 Lisp_Object file_name;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2093
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2094 binfo_and_n_extents bane;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2095
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2096 /* selects the buffer as current */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2097 Fset_buffer (binfo->emacs_buffer);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2098
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2099 /* write header */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2100 cbu = CWriteBufferSavedHeader (conn);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2101 cbu->bufferId = bufferId;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2102 cbu->flags = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2103 cbu->nClass = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2104 cbu->nGeneric = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2105
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2106 /* file name */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2107 file_name = current_buffer->filename;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2108 if (STRINGP (file_name))
14
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents: 0
diff changeset
2109 CWriteVstring0 (conn, XSTRING_DATA (file_name));
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2110 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2111 CWriteVstring0 (conn, "");
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2112 CWriteVstring0 (conn, ""); /* directory name */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2113 CWriteVstring0 (conn, ""); /* buffer name */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2114
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2115 /* write the text */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2116 #ifndef ENERGIZE_V2_HEADERS
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2117 if (binfo->flags & CBFileYourself)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2118 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2119 /* Only the 0.10+ protocol will ask us to write the file directly. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2120 Lisp_Object start;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2121 Lisp_Object end;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2122 XSETINT (start, BUF_BEG (current_buffer));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2123 XSETINT (end, BUF_Z (current_buffer));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2124 Fwrite_region_internal (start, end,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2125 Fbuffer_file_name (binfo->emacs_buffer),
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2126 /* #### coding system not correct */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2127 Qnil, Qt, Qnil);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2128 CNeedOutputSize (conn, 9);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2129 CWriteVstringLen (conn, NULL, 0);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2130 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2131 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2132 #endif /* ENERGIZE_V2_HEADERS */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2133 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2134 Lisp_Object string = make_string_from_buffer (current_buffer,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2135 BUF_BEG (current_buffer),
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2136 BUF_Z (current_buffer));
14
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents: 0
diff changeset
2137 CNeedOutputSize (conn, XSTRING_LENGTH (string) + 9);
70
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents: 20
diff changeset
2138 CWriteVstringLen (conn, XSTRING_DATA (string),
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents: 20
diff changeset
2139 XSTRING_LENGTH (string));
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2140 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2141
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2142 /* write the extents */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2143 bane.binfo = binfo;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2144 bane.n_extents = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2145
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2146 /* Only write the extents when not filing ourselves */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2147 #ifndef ENERGIZE_V2_HEADERS
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2148 if (!(binfo->flags & CBFileYourself))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2149 #endif
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2150 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2151 map_extents (BUF_BEG (current_buffer), BUF_Z (current_buffer),
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2152 write_energize_extent_data_mapper, &bane,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2153 binfo->emacs_buffer, 0, ME_END_CLOSED);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2154
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2155 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2156
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2157 /* update nextent in request's header */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2158 req = (CEditorRequest *)conn->header;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2159 req->buffersaved.buffer.nExtent = bane.n_extents;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2160 CWriteLength (conn);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2161 CWriteRequestBuffer (conn);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2162
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2163 /* sets the flags so that we will warn Energize about more modifications */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2164 binfo->modified_state = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2165
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2166 /* Mark the buffer as non editable so that we will ask Energize about it
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2167 before modifying it again */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2168 binfo->editable = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2169
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2170 /* restores the buffer as current */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2171 set_buffer_internal (cur_buff);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2172 unbind_to (speccount, Qnil);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2173 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2174
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2175 static unsigned long
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2176 energize_extent_data_id (Energize_Extent_Data *ext)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2177 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2178 return ext ? ext->id : 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2179 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2180
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2181
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2182 /********************** Menu ("keywords") operations **********************/
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2183
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2184 static int
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2185 something_answered_p (void* arg)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2186 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2187 struct reply_wait* rw = (struct reply_wait*)arg;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2188 return rw->answered_p || !energize_connection || !energize_connection->conn;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2189 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2190
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2191
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2192 static void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2193 push_wait (struct reply_wait* rw)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2194 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2195 rw->next = global_reply_wait;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2196 global_reply_wait = rw;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2197 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2198
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2199 static Lisp_Object
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2200 remove_wait (Lisp_Object obj)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2201 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2202 struct reply_wait* gw;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2203 struct reply_wait* previous;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2204 struct reply_wait* rw = (struct reply_wait *) get_opaque_ptr (obj);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2205
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2206 for (previous = 0, gw = global_reply_wait;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2207 gw != rw;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2208 previous = gw, gw = gw->next);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2209 if (previous)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2210 previous->next = gw->next;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2211 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2212 global_reply_wait = gw->next;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2213 return Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2214 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2215
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2216 static struct reply_wait*
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2217 find_wait_reply (int serial)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2218 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2219 struct reply_wait* gw;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2220 for (gw = global_reply_wait; gw && gw->serial != serial; gw = gw->next);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2221 return gw;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2222 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2223
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2224
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2225 static int
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2226 wait_for_reply (struct reply_wait* rw)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2227 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2228 int speccount = specpdl_depth ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2229 rw->answered_p = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2230 push_wait (rw);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2231 record_unwind_protect (remove_wait, make_opaque_ptr (rw));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2232 wait_delaying_user_input (something_answered_p, rw);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2233 unbind_to (speccount, Qnil);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2234 return rw->answered_p;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2235 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2236
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2237 /* gets the menu for the buffer/extent pair at the head of the request buffer.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2238 returns the propose choice request if succeeds, nil otherwise (kernel
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2239 connection closed, or not connected)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2240 */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2241
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2242 static Lisp_Object
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2243 get_energize_menu (Lisp_Object buffer, Lisp_Object extent_obj, int selection_p,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2244 Lisp_Object only_name)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2245 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2246 Connection* conn;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2247 EId buffer_id;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2248 EId extent_id;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2249 Lisp_Object result;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2250 struct reply_wait rw;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2251 struct gcpro gcpro1, gcpro2;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2252
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2253 if (!get_energize_connection_and_buffer_id (buffer,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2254 (void **) &conn,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2255 (long *) &buffer_id))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2256 return Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2257
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2258 if (EXTENTP (extent_obj))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2259 extent_id = energize_extent_data_id (extent_to_data (extent_obj));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2260 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2261 extent_id = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2262
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2263 CWriteQueryChoicesRequest (conn, buffer_id, extent_id);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2264 conn->header->data =
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2265 selection_p ? CEChasCharSelection | CEChasObjectSelection : 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2266 conn->header->serial = ++request_serial_number;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2267 CWriteRequestBuffer (conn);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2268
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2269 /* wait for the acknowledge */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2270 rw.serial = request_serial_number;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2271 rw.objectId = buffer_id;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2272 rw.genericId = extent_id;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2273 rw.menu_result = Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2274 rw.only_name = only_name;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2275
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2276 GCPRO2 (rw.menu_result, rw.only_name);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2277 wait_for_reply (&rw);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2278 result = rw.menu_result;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2279 UNGCPRO;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2280 return result;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2281 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2282
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2283
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2284 static void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2285 execute_energize_menu (Lisp_Object buffer, Energize_Extent_Data* ext,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2286 char* name, EId item_id, EId flags,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2287 Lisp_Object selection, Lisp_Object no_confirm)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2288 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2289 Connection* conn;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2290 EId buffer_id;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2291 EId extent_id;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2292 BufferInfo* binfo;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2293 struct reply_wait rw;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2294
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2295 if (!get_energize_connection_and_buffer_id (buffer, (void**)&conn,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2296 (long*)&buffer_id))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2297 return;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2298
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2299 extent_id = energize_extent_data_id (ext);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2300
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2301 if ((flags & CKBuffer) && !NILP (Fbuffer_modified_p (buffer)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2302 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2303 /* saves buffer if requested and needed */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2304 binfo = get_buffer_info_for_emacs_buffer (buffer, energize_connection);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2305 if (binfo)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2306 write_energize_buffer_data (binfo);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2307 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2308
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2309 CWriteExecuteChoicesRequest (conn, buffer_id, extent_id, item_id, 0, 0);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2310 /* send the menu name */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2311 if (energize_connection->minor >= 7)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2312 CWriteVstring0 (conn, name);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2313 conn->header->serial = ++request_serial_number;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2314 conn->header->data = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2315 if (STRINGP (selection))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2316 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2317 conn->header->data |= CEChasCharSelection;
14
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents: 0
diff changeset
2318 CWriteVstringLen (conn, XSTRING_DATA (selection),
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents: 0
diff changeset
2319 XSTRING_LENGTH (selection));
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2320 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2321 else if (VECTORP (selection))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2322 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2323 int i;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2324 EId data;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2325 conn->header->data |= CEChasObjectSelection;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2326
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2327 /* writes the length */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2328 data = vector_length (XVECTOR (selection));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2329 CWrite (conn, EId, &data);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2330
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2331 /* writes the elements */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2332 for (i = 0; i < vector_length (XVECTOR (selection)); i++)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2333 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2334 if (CONSP (vector_data (XVECTOR (selection)) [i]))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2335 data = lisp_to_word (vector_data (XVECTOR (selection)) [i]);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2336 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2337 data = XINT (vector_data (XVECTOR (selection)) [i]);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2338 CWrite (conn, EId, &data);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2339 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2340 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2341 else if (CONSP (selection))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2342 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2343 Lisp_Object type = Fcar (selection);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2344 Lisp_Object value = Fcdr (selection);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2345 if (EQ (type, intern ("ENERGIZE_OBJECT"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2346 && STRINGP (value))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2347 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2348 conn->header->data |= CEChasObjectSelection;
14
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents: 0
diff changeset
2349 CWriteN (conn, char, XSTRING_DATA (value),
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents: 0
diff changeset
2350 XSTRING_LENGTH (value));
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2351 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2352 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2353 else if (!NILP (selection))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2354 error ("unrecognized energize selection");
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2355
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2356 if (!NILP (no_confirm))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2357 conn->header->data |= CECnoConfirm;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2358 CWriteLength (conn);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2359 CWriteRequestBuffer (conn);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2360
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2361 /* wait for the acknowledge */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2362 rw.serial = request_serial_number;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2363 rw.objectId = buffer_id;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2364 rw.genericId = extent_id;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2365 rw.itemId = item_id;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2366 rw.message = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2367
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2368 if (wait_for_reply (&rw) && !rw.status)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2369 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2370 char message [128];
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2371 if (energize_connection && energize_connection->conn)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2372 sprintf (message, IDENTITY_CRISIS " command failed: %.80s",
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2373 (rw.message ? rw.message : "(null)"));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2374 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2375 sprintf (message, "Connection to " IDENTITY_CRISIS " was closed.");
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2376 if (rw.message)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2377 xfree (rw.message);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2378 error (message);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2379 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2380 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2381 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2382 if (rw.message)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2383 xfree (rw.message);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2384 if (!energize_connection)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2385 error ("Connection to " IDENTITY_CRISIS " was closed.");
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2386 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2387 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2388
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2389 /* Returns a list of vectors representing the menu choices. Next request
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2390 in connection must be a ProposeChoices. The list is
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2391 (buffer extent <item1> ... <itemN>). <itemI> is (name id1 id2 flags).
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2392 Idi is (high . low). We build the list in reverse order and nreverse
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2393 it. If (only_name != 0), we only return the item of named only_name as
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2394 a vector. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2395
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2396 static Lisp_Object
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2397 list_choices (Lisp_Object buffer, Lisp_Object extent_obj,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2398 Lisp_Object only_name, CProposeChoicesRequest* creq)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2399 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2400 Connection *conn;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2401 int i;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2402 Lisp_Object item_list;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2403 Lisp_Object item;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2404 struct Lisp_Vector *v;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2405 struct gcpro gcpro1, gcpro2, gcpro3;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2406 CChoice *choice;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2407 ReqLen name_length;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2408 char *name;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2409 char *arg_name;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2410
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2411 if (energize_connection && energize_connection->conn)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2412 conn = energize_connection->conn;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2413 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2414 return Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2415
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2416 if (!creq || creq->head.reqType != ProposeChoicesRType)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2417 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2418 CSkipRequest (conn);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2419 return Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2420 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2421
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2422 item = Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2423 item_list = Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2424
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2425 GCPRO3 (only_name, item_list, item);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2426
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2427 for (i = 0; i < (int)(creq->nChoices); i++)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2428 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2429 choice = CGet (conn, CChoice);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2430 name = CGetVstring (conn, &name_length);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2431 if (!name_length)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2432 continue;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2433
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2434 /* the argument, if passed, is another string after the NUL (!)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2435 * this is a quick hack to provide cheap arguments to menus entries */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2436 arg_name = strchr (name, 0240);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2437 if (arg_name)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2438 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2439 *arg_name= 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2440 arg_name += 1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2441 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2442
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2443 if (!NILP (only_name))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2444 {
14
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents: 0
diff changeset
2445 if (!strcmp ((char*) XSTRING_DATA (only_name), name))
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2446 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2447 if (NILP (item))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2448 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2449 item = make_vector (5, Qnil);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2450 v = XVECTOR (item);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2451 v->contents [0] = only_name;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2452 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2453 v->contents [1] = word_to_lisp (choice->choiceId);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2454 v->contents [2] = Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2455 v->contents [3] = make_int (choice->flags);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2456 v->contents [4] = arg_name ? build_string (arg_name) : Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2457 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2458 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2459 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2460 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2461 item = make_vector (5, Qnil);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2462 v = XVECTOR (item);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2463 v->contents [0] = build_string (name);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2464 v->contents [1] = word_to_lisp (choice->choiceId);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2465 v->contents [2] = Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2466 v->contents [3] = make_int (choice->flags);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2467 v->contents [4] = arg_name ? build_string (arg_name) : Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2468 item_list = Fcons (item, item_list); /* pushes in the list */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2469 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2470 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2471
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2472 if (NILP (only_name))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2473 item_list = Fcons (buffer, Fcons (extent_obj, Fnreverse (item_list)));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2474 UNGCPRO;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2475
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2476 return NILP (only_name) ? item_list : item;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2477 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2478
20
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
2479 DEFUN ("energize-list-menu", Fenergize_list_menu, 3, 4, 0, /*
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2480 Request the set of menu options from the Energize server that are
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2481 appropriate to the buffer and the extent. Extent can be (), in which case
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2482 the options are requested for the whole buffer. Selection-p tells
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2483 if the selection is available on the dislpay emacs is using.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2484 Returns the options as
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2485 a list that can be passed to energize-activate-menu. Items
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2486 in the list can also be passed to energize-execute-menu-item.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2487 The list is (buffer extent or () <item1> ... <itemN>).
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2488 where <itemI> is (name id1 id2 flags); idI is (high . low).
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2489 If optional argument only-name is provided only the item with name only-name
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2490 is returned, or () if no such item exists.
20
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
2491 */
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
2492 (buffer, extent_obj, selection_p, only_name))
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2493 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2494 Lisp_Object res;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2495 CHECK_BUFFER (buffer);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2496
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2497 if (!energize_connection || !energize_connection->conn) return Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2498
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2499 if (!NILP (only_name))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2500 CHECK_STRING (only_name);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2501
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2502 res = get_energize_menu (buffer, extent_obj, !NILP (selection_p),
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2503 only_name);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2504 notify_delayed_requests ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2505 return res;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2506 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2507
20
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
2508 DEFUN ("energize-execute-menu-item", Fenergize_execute_menu_item, 3, 5, 0, /*
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2509 Item is a vector received by energize-list-menu. Sends a request to
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2510 execute the code associated to this menu inside the Energize server.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2511 Optional fourth argument is a string or a vector to be used as the selection
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2512 for entry disabled because they need the selection.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2513 Optional fifth argument, if non NIL, tells Energize to not request
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2514 confirmation before executing the command.
20
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
2515 */
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
2516 (buffer, extent_obj, item, selection, no_confirm))
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2517 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2518 struct Lisp_Vector *v;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2519
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2520 if (!energize_connection || !energize_connection->conn) return Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2521
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2522 CHECK_BUFFER (buffer);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2523 CHECK_VECTOR (item);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2524 v = XVECTOR (item);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2525
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2526 if (vector_length (v) != 4)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2527 error ("Bad menu item to energize-execute-menu-item");
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2528
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2529 /* ignore the flags for now */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2530 execute_energize_menu (buffer, extent_to_data (extent_obj),
70
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents: 20
diff changeset
2531 (char*)XSTRING_DATA (v->contents [0]),
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2532 lisp_to_word (v->contents [1]),
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2533 XINT (v->contents [3]),
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2534 selection,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2535 no_confirm);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2536
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2537 return Qt;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2538 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2539
20
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
2540 DEFUN ("energize-execute-command-internal",
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
2541 Fenergize_execute_command_internal, 3, 5, 0, /*
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2542 Command is a string naming an energize command. Sends a request to
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2543 execute this command inside the Energize server.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2544 Optional fourth argument is a string or a vector to be used as the selection.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2545 Optional fifth argument, if non NIL, tells Energize to not request
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2546 confirmation before executing the command.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2547
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2548 See also 'energize-list-menu'.
20
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
2549 */
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
2550 (buffer, extent_obj, command, selection, no_confirm))
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2551 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2552 if (!energize_connection || !energize_connection->conn) return Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2553
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2554 CHECK_BUFFER (buffer);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2555 CHECK_STRING (command);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2556
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2557 execute_energize_menu (buffer, extent_to_data (extent_obj),
70
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents: 20
diff changeset
2558 (char*)XSTRING_DATA (command), 0, 0, selection,
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2559 no_confirm);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2560
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2561 return Qt;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2562 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2563
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2564 /********************************* kill buffer interface ****************/
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2565
20
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
2566 DEFUN ("energize-buffer-type-internal", Fenergize_buffer_type, 1, 1, 0, /*
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2567 Return a symbol denoting the buffer type if buffer is an Energize
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2568 buffer, else it returns NIL.
20
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
2569 */
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
2570 (buffer))
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2571 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2572 if (!energize_connection) return Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2573
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2574 CHECK_BUFFER (buffer);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2575 return get_buffer_type_for_emacs_buffer (buffer, energize_connection);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2576 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2577
20
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
2578 DEFUN ("set-energize-buffer-type-internal", Fset_energize_buffer_type_internal, 2, 2, 0, /*
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2579 Return the type symbol which is the new buffer-type, if the buffer is
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2580 an Energize buffer and the type is non-NIL symbol, else it returns NIL.
20
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
2581 */
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
2582 (buffer, type))
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2583 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2584 BufferInfo *binfo;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2585
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2586 if (!energize_connection || (NILP (type))) return Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2587
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2588 CHECK_BUFFER (buffer);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2589 CHECK_SYMBOL (type);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2590
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2591 if (!(binfo =
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2592 get_buffer_info_for_emacs_buffer (buffer, energize_connection)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2593 return Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2594 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2595 return
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2596 set_buffer_type_for_emacs_buffer (buffer, energize_connection, type);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2597 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2598
20
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
2599 DEFUN ("energize-buffer-p", Fenergize_buffer_p, 1, 1, 0, /*
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2600 Whether buffer is an Energize buffer.
20
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
2601 */
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
2602 (buffer))
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2603 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2604 BufferInfo *binfo;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2605
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2606 if (!energize_connection) return Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2607
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2608 CHECK_BUFFER (buffer);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2609 if (!(binfo =
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2610 get_buffer_info_for_emacs_buffer (buffer, energize_connection)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2611 return Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2612 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2613 return Qt;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2614 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2615
20
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
2616 DEFUN ("energize-buffer-id", Fenergize_buffer_id, 1, 1, 0, /*
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2617 Return (high . low) if buffer is an Energize buffer, otherwise nil.
20
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
2618 */
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
2619 (buffer))
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2620 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2621 BufferInfo *binfo;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2622
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2623 if (!energize_connection) return Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2624
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2625 CHECK_BUFFER (buffer);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2626 if (!(binfo =
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2627 get_buffer_info_for_emacs_buffer (buffer, energize_connection)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2628 return Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2629 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2630 return word_to_lisp (binfo->id);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2631 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2632
20
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
2633 DEFUN ("energize-request-kill-buffer", Fenergize_request_kill_buffer, 1, 1, 0, /*
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2634 Sends a request to energize for killing buffer.
20
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
2635 */
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
2636 (buffer))
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2637 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2638 BufferInfo *binfo;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2639
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2640 if (!energize_connection) return Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2641
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2642 CHECK_BUFFER (buffer);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2643 if (!(binfo = get_buffer_info_for_emacs_buffer (buffer, energize_connection)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2644 return Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2645
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2646 /* Tell Energize about it if connected */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2647 if (energize_connection->conn)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2648 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2649 CWriteKillBufferHeader (energize_connection->conn, binfo->id);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2650 CWriteRequestBuffer (energize_connection->conn);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2651 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2652
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2653 /* Clears the internal state */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2654 forget_buffer (binfo);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2655
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2656 return Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2657 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2658
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2659 /******************** Handle requests from the kernel *********************/
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2660
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2661 #ifdef EMACS_BTL
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2662 #include "cadillac-btl-extern.h"
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2663 #endif
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2664
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2665 /* turn logging on or off, etc. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2666 static void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2667 handle_logging_request (Editor *editor, CLoggingRequest *creq)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2668 /* I'm a lumberjack and I'm ok... */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2669 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2670 ReqLen name_len;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2671 char* data_filename = CGetVstring (editor->conn, &name_len);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2672
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2673 #ifdef EMACS_BTL
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2674 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2675 char *execname =
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2676 (STRINGP (Vinvocation_directory))?
14
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents: 0
diff changeset
2677 ((char *) XSTRING_DATA (Vinvocation_directory)):0;
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2678
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2679 switch (creq->type)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2680 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2681 case CLRInitBTL:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2682 cadillac_terminate_logging (); /* #### rename me */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2683 cadillac_initialize_backtrace_logging /* #### rename me */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2684 (data_filename, execname, (long) creq->limit, (long) creq->interval);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2685 break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2686
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2687 case CLRInitPCL:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2688 cadillac_terminate_logging (); /* #### rename me */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2689 cadillac_initialize_pc_logging /* #### rename me */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2690 (data_filename, execname, (long) creq->limit, (long) creq->interval);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2691 break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2692
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2693 case CLRStart:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2694 cadillac_start_logging (); /* #### rename me */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2695 break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2696
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2697 case CLRStop:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2698 cadillac_stop_logging (); /* #### rename me */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2699 break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2700
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2701 case CLRTerminate:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2702 cadillac_terminate_logging (); /* #### rename me */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2703 break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2704
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2705 case CLRSetLogSignal:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2706 cadillac_set_log_signal (creq->signal); /* #### rename me */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2707 break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2708
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2709 default:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2710 error ("Bad logging request type %d", creq->type);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2711 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2712 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2713 #else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2714 message ("Logging request, but no such code in image.");
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2715 #endif
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2716 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2717
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2718
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2719
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2720 /* creates a new buffer */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2721 static void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2722 handle_new_buffer_request (Editor *editor, CNewBufferRequest *creq)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2723 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2724 read_energize_buffer_data (editor->conn, &creq->buffer, editor, 0, 0,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2725 creq->transientId, 0);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2726 if (!NILP (Venergize_create_buffer_hook))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2727 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2728 CBuffer *cbu = &creq->buffer;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2729 BufferInfo *binfo = get_buffer_info_for_id (cbu->bufferId, editor);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2730 Lisp_Object buffer;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2731 if (binfo)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2732 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2733 Lisp_Object prev_frame;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2734 buffer = binfo->emacs_buffer;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2735 if (!NILP (binfo->frame))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2736 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2737 prev_frame = Fselected_frame (Qnil);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2738 Fselect_frame (binfo->frame);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2739 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2740 va_run_hook_with_args (Qenergize_create_buffer_hook, 1, buffer);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2741 if (!NILP (binfo->frame))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2742 Fselect_frame (prev_frame);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2743 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2744 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2745 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2746
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2747 /* Modifies the contents of a buffer */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2748 static void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2749 handle_modify_buffer_request (Editor *editor, CModifyBufferRequest *creq)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2750 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2751 read_energize_buffer_data (editor->conn, &creq->newData, editor,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2752 creq->startPosition, creq->endPosition,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2753 0, creq->head.data);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2754 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2755
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2756 static void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2757 make_buffer_and_extent_visible (Lisp_Object list, Lisp_Object go_there)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2758 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2759 call2 (Qenergize_make_many_buffers_visible, list, go_there);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2760 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2761
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2762 /* pops a buffer and scroll to a extent: calls to lisp */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2763 static void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2764 handle_ensure_visible_request (Editor *editor, CEnsureVisibleRequest *creq)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2765 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2766 BufferInfo *binfo;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2767 Energize_Extent_Data *ext;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2768 Lisp_Object buffer_extent_list;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2769 struct gcpro gcpro1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2770
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2771 buffer_extent_list = Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2772 GCPRO1 (buffer_extent_list);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2773
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2774 binfo = get_buffer_info_for_id (creq->bufferId, editor);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2775 if (!binfo)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2776 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2777 message ("EnsureVisibleRequest: unknown buffer");
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2778 goto finished;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2779 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2780
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2781 if (!NILP (binfo->frame))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2782 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2783 /* ignore ensure visible for postit note buffers */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2784 goto finished;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2785 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2786
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2787 if (creq->extentId)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2788 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2789 ext = get_extent_data (creq->extentId, binfo);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2790 if (!ext)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2791 message ("EnsureVisibleRequest: ignoring unknown extent");
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2792 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2793 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2794 ext = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2795
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2796 buffer_extent_list = Fcons (ext ? data_to_extent (ext) : Qnil, Qnil);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2797 buffer_extent_list = Fcons (binfo->emacs_buffer, buffer_extent_list);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2798
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2799 make_buffer_and_extent_visible (buffer_extent_list, creq->head.data ? Qt : Qnil);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2800
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2801 finished:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2802 CSkipRequest (editor->conn);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2803 UNGCPRO;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2804 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2805
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2806 static void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2807 handle_ensure_many_visible_request (Editor *editor,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2808 CEnsureManyVisibleRequest *creq)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2809 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2810 BufferInfo *binfo;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2811 Energize_Extent_Data *ext;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2812 Lisp_Object buffer_extent_list;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2813 int n;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2814 EId buffer_id;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2815 EId extent_id;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2816 struct gcpro gcpro1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2817
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2818 buffer_extent_list = Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2819 GCPRO1 (buffer_extent_list);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2820
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2821 for (n = creq->head.data,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2822 buffer_id = creq->bufferId,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2823 extent_id = creq->extentId;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2824 n;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2825 n--,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2826 buffer_id = n ? *(CGet (editor->conn, EId)) : 0,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2827 extent_id = n ? *(CGet (editor->conn, EId)) : 0)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2828 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2829 binfo = get_buffer_info_for_id (buffer_id, editor);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2830 if (!binfo)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2831 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2832 message ("EnsureManyVisibleRequest: ignoring unknown buffer");
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2833 continue;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2834 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2835
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2836 if (!NILP (binfo->frame))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2837 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2838 /* silently ignore ensure visible for postit note buffers */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2839 continue;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2840 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2841
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2842 if (extent_id)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2843 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2844 ext = get_extent_data (extent_id, binfo);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2845 if (!ext)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2846 message ("EnsureManyVisibleRequest: ignoring unknown extent");
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2847 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2848 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2849 ext = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2850
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2851 /* cons in reverse order and reverse the list before
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2852 calling make_buffer_and_extent_visible */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2853 buffer_extent_list = Fcons (binfo->emacs_buffer, buffer_extent_list);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2854 buffer_extent_list = Fcons (ext ? data_to_extent (ext) : Qnil,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2855 buffer_extent_list);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2856 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2857 buffer_extent_list = Fnreverse (buffer_extent_list);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2858 make_buffer_and_extent_visible (buffer_extent_list, Qt);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2859
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2860 UNGCPRO;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2861 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2862
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2863 /* Update the cached menus, ie update the menubar for now. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2864 static void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2865 handle_propose_choices_request (Editor *editor, CProposeChoicesRequest *req)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2866 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2867 BufferInfo* binfo;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2868 Lisp_Object buffer = Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2869 Lisp_Object extent = Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2870 Lisp_Object choices = Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2871 struct gcpro gcpro1, gcpro2, gcpro3;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2872 struct reply_wait* rw;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2873
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2874 GCPRO3 (buffer, extent, choices);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2875
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2876 /* get the buffer */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2877 binfo = get_buffer_info_for_id (req->objectId, editor);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2878 if (binfo)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2879 buffer = binfo->emacs_buffer;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2880 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2881 buffer = Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2882
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2883 /* get the extent */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2884 if (binfo && req->genericId)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2885 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2886 Energize_Extent_Data* ext = get_extent_data (req->genericId, binfo);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2887 if (ext)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2888 extent = data_to_extent (ext);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2889 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2890 extent = Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2891 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2892 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2893 extent = Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2894
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2895 /* find if we were waiting for a reply */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2896 rw = find_wait_reply (req->head.serial);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2897
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2898 /* handle the request */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2899 if (rw && rw->objectId == req->objectId && rw->genericId == req->genericId)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2900 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2901 /* It's a reply for a get_energize_menu call */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2902 rw->answered_p = True;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2903 rw->status = 1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2904 rw->menu_result = list_choices (buffer, extent, rw->only_name, req);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2905 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2906 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2907 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2908 /* It's a menu update, call the hook */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2909 choices = list_choices (buffer, extent, Qnil, req);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2910 va_run_hook_with_args (Qenergize_menu_update_hook, 1, choices);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2911 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2912 UNGCPRO;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2913 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2914
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2915 /* Kills a buffer */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2916 static void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2917 unmodify_buffer_and_kill_it (Lisp_Object buffer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2918 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2919 int speccount = specpdl_depth ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2920
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2921 if (!BUFFER_LIVE_P (XBUFFER (buffer)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2922 return;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2923
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2924 Fset_buffer_modified_p (Qnil, buffer);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2925
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2926 /* kill it. This will call the Energize hook to do the right thing */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2927 Fkill_buffer (buffer);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2928 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2929
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2930 static void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2931 handle_kill_buffer_request (Editor *editor, CKillBufferRequest *creq)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2932 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2933 BufferInfo *binfo;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2934
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2935 if (!(binfo = get_buffer_info_for_id (creq->bufferId, editor)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2936 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2937 message ("KillBufferVisibleRequest: unregistered buffer");
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2938 return;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2939 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2940
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2941 unmodify_buffer_and_kill_it (binfo->emacs_buffer);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2942 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2943
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2944 static void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2945 handle_remove_extents_request (Editor *editor, CRemoveExtentsRequest *creq)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2946 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2947 BufferInfo *binfo;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2948 int i;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2949 EId *ids;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2950 Lisp_Object restore_buffer_state_cons;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2951 int speccount = specpdl_depth ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2952
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2953 if (!(binfo = get_buffer_info_for_id (creq->bufferId, editor)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2954 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2955 message ("RemoveExtentsRequest: unregistered buffer");
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2956 CSkipRequest (editor->conn);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2957 return;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2958 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2959
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2960 /* enable buffer edits */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2961 restore_buffer_state_cons =
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2962 Fcons (make_opaque_ptr ((void *) creq->bufferId),
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2963 Fcons (XBUFFER (binfo->emacs_buffer)->read_only, Qnil));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2964
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2965 record_unwind_protect (restore_buffer_state, restore_buffer_state_cons);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2966
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2967 XBUFFER (binfo->emacs_buffer)->read_only = Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2968
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2969 /* save old hook values */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2970 specbind (Qenergize_buffer_modified_hook, Qnil);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2971
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2972 ids = CGetN (editor->conn, EId, creq->nExtent);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2973 for (i = 0; i < creq->nExtent; i++)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2974 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2975 Energize_Extent_Data *ext = get_extent_data (ids [i], binfo);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2976 if (ext)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2977 free_Energize_Extent_Data (ext, binfo, OFT_STANDALONE);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2978 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2979
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2980 /* restore modified hooks and globals */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2981 unbind_to (speccount, Qnil);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2982 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2983
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2984 #ifndef ENERGIZE_V2_HEADERS
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2985 static Lisp_Object
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2986 save_to_energize_unwind (Lisp_Object closure)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2987 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2988 BITS32 buffer_id = (BITS32) cons_to_long (closure);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2989 /* If the buffer ID is not 0, then the call to save-buffer
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2990 didn't complete normally - so tell Energize the save was aborted. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2991 if (buffer_id)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2992 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2993 Editor *editor = energize_connection;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2994 if (editor && editor->conn) /* Maybe the kernel has gone away. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2995 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2996 CWriteBufferSaveAbortedHeader (editor->conn, buffer_id);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2997 CWriteRequestBuffer (editor->conn);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2998 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2999 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3000 return Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3001 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3002 #endif /* ENERGIZE_V2_HEADERS */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3003
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3004
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3005 /* handles a request to save a buffer from the kernel */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3006 static void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3007 handle_save_buffer_request (Editor *editor, CSaveBufferRequest *creq)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3008 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3009 BufferInfo *binfo;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3010 int speccount = specpdl_depth ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3011 struct gcpro gcpro1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3012 Lisp_Object closure = Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3013
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3014 if (!(binfo = get_buffer_info_for_id (creq->bufferId, editor)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3015 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3016 message ("Server attempt to save a non registered buffer");
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3017 return;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3018 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3019
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3020 if (!EQ (binfo->emacs_buffer, Fcurrent_buffer ()))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3021 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3022 record_unwind_protect (Fset_buffer, Fcurrent_buffer ());
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3023 Fset_buffer (binfo->emacs_buffer);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3024 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3025
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3026 GCPRO1 (closure);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3027 if (creq->head.data == CSExecuteSave)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3028 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3029 #ifndef ENERGIZE_V2_HEADERS
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3030 Lisp_Object closure = make_opaque_ptr ((void *) creq->bufferId);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3031 record_unwind_protect (save_to_energize_unwind, closure);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3032 #endif /* ENERGIZE_V2_HEADERS */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3033 call0 (intern ("save-buffer"));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3034 #ifndef ENERGIZE_V2_HEADERS
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3035 /* clear out the id to tell the unwind-protect form that the save
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3036 completed normally. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3037 set_opaque_ptr (closure, 0);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3038 #endif /* ENERGIZE_V2_HEADERS */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3039 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3040 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3041 write_energize_buffer_data (binfo);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3042
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3043 UNGCPRO;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3044 unbind_to (speccount, Qnil);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3045 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3046
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3047 static void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3048 handle_set_modified_flag_request (Editor* editor,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3049 CSetModifiedFlagRequest* creq)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3050 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3051 BufferInfo *binfo;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3052 int speccount = specpdl_depth ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3053
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3054 if (!(binfo = get_buffer_info_for_id (creq->bufferId, editor)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3055 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3056 message ("Server attempt to set modified flag of a non registered buffer");
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3057 return;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3058 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3059
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3060 record_unwind_protect (Fset_buffer, Fcurrent_buffer ());
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3061 specbind (Qenergize_buffer_modified_hook, Qnil);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3062
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3063 /* Only set buffer modified time in older protocols
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3064 as we handle the file timestamps ourselves now for
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3065 CBFileYourself buffers. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3066 #ifndef ENERGIZE_V2_HEADERS
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3067 if ((energize_connection->minor < 10) && !(binfo->flags & CBFileYourself))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3068 #endif
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3069 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3070 Fset_buffer_modtime (binfo->emacs_buffer, Qnil);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3071 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3072
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3073 Fset_buffer_modified_p (creq->state ? Qt : Qnil, binfo->emacs_buffer);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3074 binfo->modified_state = creq->state;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3075 /* Mark the buffer so that we ask permission to Energize when the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3076 * user tries to modify it again */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3077 binfo->editable = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3078 if (!creq->state)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3079 mark_all_extents_as_unmodified (binfo);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3080 unbind_to (speccount, Qnil);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3081 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3082
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3083
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3084 /* handles requests regarding p_sheet associated to buffers */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3085 static void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3086 add_in_list_of_ids (int** ids, int* n_ids, int id)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3087 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3088 if (*n_ids == 0)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3089 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3090 *n_ids = 1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3091 *ids = (int*)xmalloc (sizeof (int));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3092 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3093 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3094 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3095 *n_ids += 1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3096 *ids = (int*)xrealloc (*ids, sizeof (int) * (*n_ids));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3097 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3098 (*ids) [(*n_ids) - 1] = id;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3099 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3100
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3101 static void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3102 remove_from_list_of_ids (int** ids, int* n_ids, int id)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3103 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3104 int i;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3105 if (*n_ids)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3106 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3107 /* look for id in *ids */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3108 for (i = 0; i < (*n_ids) && (*ids) [i] != id; i++);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3109 /* shift the remaining ones */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3110 for (; i < (*n_ids) - 1; i++)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3111 (*ids) [i] = (*ids) [i + 1];
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3112 /* decrease the count */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3113 *n_ids -= 1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3114 /* free array if empty */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3115 if (!*n_ids)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3116 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3117 xfree (*ids);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3118 *ids = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3119 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3120 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3121 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3122
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3123 extern void make_psheets_desired (struct frame *, Lisp_Object);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3124
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3125 static void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3126 handle_buffer_sheet_request (Editor *editor, CSheetRequest *sreq,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3127 EId buffer_id)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3128 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3129 BufferInfo *binfo;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3130 char *name;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3131 Connection *conn = editor->conn;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3132
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3133 if (!(binfo = get_buffer_info_for_id (buffer_id, editor)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3134 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3135 message ("Server attempt to use p_sheet in a non registered buffer");
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3136 CSkipRequest (conn);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3137 return;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3138 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3139
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3140 name = CGetVstring (conn, (ReqLen *) 0);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3141 switch ((CSheetRSubtype) sreq->head.data)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3142 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3143 case CSCreate:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3144 lw_register_widget (name, name, sreq->sheetId, NULL, NULL,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3145 handle_sheet_control_change, NULL);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3146 add_in_list_of_ids (&binfo->p_sheet_ids, &binfo->n_p_sheets,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3147 sreq->sheetId);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3148 if (!strcmp (name, DEBUGGER_PSHEET_NAME))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3149 debuggerpanel_sheet = sreq->sheetId;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3150 break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3151
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3152 case CSDelete:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3153 remove_from_list_of_ids (&binfo->p_sheet_ids, &binfo->n_p_sheets,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3154 sreq->sheetId);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3155 cleanly_destroy_all_widgets (1, &sreq->sheetId);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3156 if (sreq->sheetId == debuggerpanel_sheet)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3157 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3158 desired_debuggerpanel_exposed_p = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3159 debuggerpanel_sheet = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3160 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3161 break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3162
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3163 case CSHide:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3164 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3165 Lisp_Object frmcons, devcons, concons;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3166
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3167 if (sreq->sheetId == debuggerpanel_sheet)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3168 desired_debuggerpanel_exposed_p = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3169 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3170 FRAME_LOOP_NO_BREAK (frmcons, devcons, concons)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3171 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3172 struct frame *frame = XFRAME (Fcar (frmcons));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3173 if (FRAME_X_P (frame))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3174 make_psheets_desired (frame, Qnil);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3175 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3176 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3177 break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3178
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3179 case CSShow:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3180 if (sreq->sheetId == debuggerpanel_sheet)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3181 desired_debuggerpanel_exposed_p = 1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3182 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3183 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3184 Lisp_Object frmcons, devcons, concons;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3185
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3186 FRAME_LOOP_NO_BREAK (frmcons, devcons, concons)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3187 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3188 struct frame *frame = XFRAME (Fcar (frmcons));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3189 if (FRAME_X_P (frame))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3190 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3191 struct window *window =
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3192 XWINDOW (FRAME_SELECTED_WINDOW (frame));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3193 if (EQ (window->buffer, binfo->emacs_buffer))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3194 make_psheets_desired (frame, binfo->emacs_buffer);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3195 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3196 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3197 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3198 break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3199 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3200 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3201
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3202
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3203
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3204 /* show busy */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3205
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3206 static void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3207 show_all_menubars_busy (int busy)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3208 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3209 Lisp_Object frmcons, devcons, concons;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3210
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3211 FRAME_LOOP_NO_BREAK (frmcons, devcons, concons)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3212 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3213 struct frame *f = XFRAME (XCAR (frmcons));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3214 if (FRAME_X_P (f))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3215 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3216 if (FRAME_X_MENUBAR_WIDGET (f))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3217 lw_show_busy (FRAME_X_MENUBAR_WIDGET (f), busy);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3218 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3219 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3220 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3221
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3222 static void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3223 handle_show_busy_request (Editor *editor, CGenericRequest *preq)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3224 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3225 /* call the show busy routine of the library for the menubar of
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3226 * all frames */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3227 ReqLen len;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3228
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3229 char* why = CGetVstring (editor->conn, &len);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3230
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3231 show_all_menubars_busy (preq->head.data);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3232 Venergize_kernel_busy = preq->head.data ? Qt : Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3233 va_run_hook_with_args (Qenergize_kernel_busy_hook, 1, build_string (why));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3234 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3235
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3236 /* This request creates, destroys, raises, or lowers a psheet or dialog box.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3237 */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3238 static void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3239 handle_sheet_request (Connection* conn, CSheetRequest* sreq, Widget parent)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3240 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3241 char* name = CGetVstring (conn, NULL);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3242
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3243 switch ((CSheetRSubtype)sreq->head.data)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3244 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3245 case CSCreate:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3246 lw_create_widget (name, name, sreq->sheetId, 0, parent,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3247 !sreq->bufferId, 0, handle_sheet_control_change, 0);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3248 break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3249 case CSDelete:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3250 cleanly_destroy_all_widgets (1, &sreq->sheetId);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3251 break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3252
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3253 case CSShow:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3254 lw_pop_up_all_widgets (sreq->sheetId);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3255 break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3256
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3257 case CSHide:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3258 lw_pop_down_all_widgets (sreq->sheetId);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3259 break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3260 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3261 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3262
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3263 /* This request changes slot values in the psheets/dialog boxes. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3264 static void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3265 handle_set_control_request (Connection* conn, CGenericRequest* creq)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3266 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3267 CSetControlRequest* sreq = &creq->setcontrol;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3268 widget_value val;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3269 widget_value* contents;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3270
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3271 unsigned long i;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3272 unsigned long n = sreq->nChoices;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3273
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3274 if (n > 0)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3275 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3276 contents = (widget_value *) xmalloc (n * sizeof (widget_value));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3277 memset (contents, 0, (n * sizeof (widget_value)));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3278 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3279 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3280 contents = NULL;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3281 memset (&val, 0, sizeof (val));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3282 val.name = CGetVstring (conn, NULL);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3283 val.enabled = !(sreq->flags & CKInactive);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3284 val.selected = !!(sreq->flags & CKSelected);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3285 val.change = VISIBLE_CHANGE;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3286 val.contents = contents;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3287
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3288 for (i = 0; i < n; i++)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3289 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3290 widget_value* cur = &contents [i];
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3291 CChoice* choice = CGet (conn, CChoice);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3292 cur->name = CGetVstring (conn, NULL);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3293 cur->value = cur->name;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3294 cur->key = NULL;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3295 cur->enabled = !(choice->flags & CKInactive);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3296 cur->selected = !!(choice->flags & CKSelected);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3297 cur->change = VISIBLE_CHANGE;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3298 cur->contents = NULL;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3299 cur->call_data = NULL;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3300 cur->next = i == n - 1 ? NULL : &contents [i + 1];
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3301 cur->toolkit_data = NULL;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3302 if ((i == 0 && n == 1) || cur->selected)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3303 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3304 val.value = cur->name;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3305 if (!*val.value)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3306 val.value = NULL;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3307 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3308 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3309 lw_modify_all_widgets (sreq->sheetId, &val, True);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3310
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3311 if (contents)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3312 xfree (contents);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3313 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3314
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3315 static void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3316 handle_sheet_control_change (Widget widget, EId sheet_id, void* arg)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3317 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3318 Connection* conn;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3319 widget_value* val;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3320 widget_value* cur;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3321 widget_value* this_val = NULL;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3322 widget_value* cancel = NULL;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3323 char* this_name;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3324 int delete_window_p = (((int) arg) == -1);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3325
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3326
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3327 if (!energize_connection)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3328 return;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3329
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3330 conn = energize_connection->conn;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3331 if (!conn)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3332 return;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3333
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3334 this_name = XtName (widget);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3335 val = lw_get_all_values (sheet_id);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3336
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3337 if (delete_window_p)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3338 /* Complete and utter kludge. If this dbox was dismissed with the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3339 WM close box (WM_DELETE_WINDOW, meaning the widget was destroyed)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3340 then we look for a likely "cancel" button and pretend the user
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3341 clicked on that. Really the protocol should be extended for this.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3342 */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3343 for (cur = val; cur; cur = cur->next)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3344 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3345 char *v = cur->value;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3346 if (v &&
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3347 ((strlen (v) >= 6 && !strncmp (v, "cancel", 6)) ||
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3348 (strlen (v) >= 5 && !strncmp (v, "abort", 5))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3349 cancel = cur;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3350 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3351
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3352 /* first send all the edited widgets */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3353 for (cur = val; cur; cur = cur->next)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3354 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3355 /* do not send the widget that ran the callback */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3356 if (!strcmp (cur->name, this_name))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3357 this_val = cur;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3358 else if (cur == cancel)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3359 ;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3360 /* send the edited widgets */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3361 else if (cur->edited)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3362 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3363 char* value = cur->value;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3364 unsigned int flags = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3365
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3366 if (!cur->enabled)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3367 flags |= CKInactive;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3368 if (cur->selected)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3369 flags |= CKSelected;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3370
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3371 /* the kernel is brain dead and expect "1" and "0" as values
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3372 for the checkbox objects. So if value is NULL, make it be "0"
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3373 or "1" depending on the selected state. This is until we fix
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3374 the kernel. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3375 if (!value)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3376 value = cur->selected ? "1" : "0";
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3377
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3378 CWriteSetControlRequest (conn, sheet_id, 0, cur->name, 1);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3379 CWriteChoice (conn, 0, flags, value, 0);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3380 CWriteLength (conn);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3381 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3382 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3383
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3384 if (delete_window_p && !this_val)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3385 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3386 this_val = cancel;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3387 /* if (! this_val) abort (); */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3388 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3389
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3390 /* Then send the widget that ran the callback */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3391 if (this_val)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3392 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3393 CWriteSetControlRequest (conn, sheet_id, 0, this_val->name, 1);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3394 CWriteChoice (conn, 0, 0, this_val->value, 0);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3395 CWriteLength (conn);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3396 CWriteRequestBuffer (conn);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3397 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3398 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3399
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3400 /******************** Low level connection stuff ************************/
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3401 static void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3402 add_in_connection_input_buffer (Connection *conn, char *s, int l)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3403 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3404 /* Should be in connection.c */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3405 if (conn->inread >= conn->infill)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3406 conn->inread = conn->infill = conn->inbuffer;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3407
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3408 CNeedInputSize (conn, l);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3409 memcpy (conn->infill, s, l);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3410 conn->infill += l;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3411 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3412
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3413 static Lisp_Object
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3414 process_one_energize_request (void)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3415 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3416 Editor *editor = energize_connection;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3417 CEditorRequest *req;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3418 int res = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3419
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3420 if (!editor) return make_int (res);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3421
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3422 if (!editor->conn)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3423 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3424 close_energize_connection ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3425 return make_int (res);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3426 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3427
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3428 req = CReadEditorRequest (editor->conn);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3429 if (!req)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3430 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3431 switch (errno)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3432 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3433 case EWOULDBLOCK:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3434 /* message ("ProcessEnergizeRequest: internal error EWOULDBLOCK"); */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3435 res = -1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3436 break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3437
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3438 case 0:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3439 case ECONNRESET:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3440 message ("Connection to " IDENTITY_CRISIS " was closed.");
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3441 close_energize_connection ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3442 break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3443
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3444 default:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3445 message
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3446 ("System error on connection to " IDENTITY_CRISIS ", closing.");
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3447 close_energize_connection ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3448 break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3449 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3450 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3451 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3452 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3453 res = 1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3454 switch (req->head.reqType)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3455 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3456 case RefuseConnectionRType:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3457 message (IDENTITY_CRISIS " connection refused");
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3458 close_energize_connection ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3459 break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3460
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3461 case AcceptConnectionRType:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3462 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3463 CProtocol* proto = CGet (editor->conn, CProtocol);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3464 editor->major = proto->major;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3465 editor->minor = proto->minor;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3466 message (IDENTITY_CRISIS " connection accepted");
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3467 CSkipRequest (editor->conn);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3468 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3469 break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3470
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3471 case NewBufferRType:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3472 handle_new_buffer_request (editor, &req->newbuffer);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3473 break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3474
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3475 case QueryBufferRType:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3476 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3477 EId buffer_id;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3478 struct reply_wait* rw = find_wait_reply (req->head.serial);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3479 CGetVstring (editor->conn, 0); /* skip directory */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3480 CGetVstring (editor->conn, 0); /* skip file */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3481 buffer_id = *CGet (editor->conn, EId);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3482 if (rw)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3483 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3484 rw->answered_p = 1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3485 rw->status = req->head.data;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3486 rw->objectId = buffer_id;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3487 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3488 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3489 break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3490
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3491 case EnsureVisibleRType:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3492 handle_ensure_visible_request (editor, &req->ensurevisible);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3493 break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3494
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3495 case EnsureManyVisibleRType:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3496 handle_ensure_many_visible_request (editor, &req->ensuremanyvisible);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3497 break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3498
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3499 case ModifyBufferRType:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3500 handle_modify_buffer_request (editor, &req->modifybuffer);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3501 break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3502
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3503 case ProposeChoicesRType:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3504 handle_propose_choices_request (editor,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3505 &req->generic.proposechoices);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3506 break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3507
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3508 case ChoiceExecutedRType:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3509 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3510 struct reply_wait* rw = find_wait_reply (req->head.serial);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3511 CChoiceExecutedRequest* ce = &req->generic.choiceexecuted;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3512 if (rw)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3513 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3514 rw->answered_p = 1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3515 rw->status = ce->head.data;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3516 rw->message = CMakeVstring (editor->conn, 0);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3517 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3518 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3519 break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3520
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3521 case KillBufferRType:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3522 handle_kill_buffer_request (editor, &req->killbuffer);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3523 break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3524
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3525 case ModifiedBufferRType:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3526 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3527 struct reply_wait* rw = find_wait_reply (req->head.serial);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3528 if (rw)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3529 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3530 rw->answered_p = 1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3531 if (rw->objectId == req->modifiedbuffer.bufferId)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3532 rw->status = req->modifiedbuffer.state;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3533 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3534 rw->status = CMBufferLocked;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3535 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3536 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3537 break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3538
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3539 case SetModifiedFlagRType:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3540 handle_set_modified_flag_request (editor, &req->setmodifiedflag);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3541 break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3542
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3543 case RemoveExtentsRType:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3544 handle_remove_extents_request (editor, &req->removeextents);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3545 break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3546
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3547 case RenumberExtentsRType:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3548 /* HandleDuplicateExtentRequest (editor, req); */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3549 break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3550
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3551 #if 0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3552 case DialogRType:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3553 /* HandleDialogRequest (editor, req, CurrentBuffer (editor)); */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3554 break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3555 #endif
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3556
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3557 case SaveBufferRType:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3558 handle_save_buffer_request (editor, &req->savebuffer);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3559 break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3560
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3561 case SheetRType:{
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3562 EId buffer_id = req->generic.sheet.bufferId;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3563 if (!buffer_id)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3564 buffer_id = buffer_id_of_sheet (req->generic.sheet.sheetId);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3565 if (buffer_id)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3566 handle_buffer_sheet_request (editor, &req->generic.sheet,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3567 buffer_id);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3568 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3569 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3570 CSheetRSubtype type = (CSheetRSubtype)req->head.data;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3571 if (type == CSDelete || type ==CSHide)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3572 /* #### ??? this does nothing. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3573 Fselect_frame (Fselected_frame (Qnil));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3574 handle_sheet_request (editor->conn, &req->generic.sheet,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3575 FRAME_X_SHELL_WIDGET
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3576 (XFRAME (Fselected_frame (Qnil))));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3577 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3578 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3579 break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3580
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3581 case SetControlRType:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3582 handle_set_control_request (editor->conn, (CGenericRequest*) req);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3583 break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3584
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3585 case OpenPostitRType:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3586 case KillPostitRType:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3587 message ("Don't know what to do with postit requests.");
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3588 break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3589
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3590 case ShowBusyRType:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3591 handle_show_busy_request (editor, (CGenericRequest*)req);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3592 break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3593
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3594 case LoggingRType:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3595 handle_logging_request (editor, (CLoggingRequest*)req);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3596 break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3597
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3598 #ifndef ENERGIZE_V2_HEADERS
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3599 case KernelEventRType:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3600 CSkipRequest (editor->conn);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3601 break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3602 #endif
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3603
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3604 default:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3605 message("ProcessEnergizeRequest: can't handle request of type %d",
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3606 req->head.reqType);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3607 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3608
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3609 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3610
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3611 return make_int (res);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3612 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3613
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3614 static int inside_process_energize_request_1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3615
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3616 /* this must be called ONLY by unwind_protect in process_energize_request_1 */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3617 static Lisp_Object
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3618 post_handle_request (Lisp_Object ignored)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3619 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3620 if (inside_process_energize_request_1 <= 0)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3621 abort ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3622 inside_process_energize_request_1--;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3623 if (energize_connection && energize_connection->conn)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3624 CSkipRequest (energize_connection->conn);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3625 return Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3626 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3627
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3628 static Lisp_Object
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3629 pop_conn (Lisp_Object arg)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3630 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3631 Connection *old_conn = (Connection *) get_opaque_ptr (arg);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3632 if (! old_conn)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3633 abort ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3634 if (! energize_connection)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3635 return Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3636 if (energize_connection->conn == old_conn)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3637 abort ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3638
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3639 if (CRequestDelayedP (energize_connection->conn))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3640 /* We don't call the CWait* functions any more so this shouldn't happen.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3641 But if it does someday, then we need to either copy the remaining
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3642 bits from new_conn to old_conn, or loop processing requests until
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3643 new_conn is drained.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3644 */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3645 abort ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3646
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3647 DeleteConnection (energize_connection->conn);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3648 energize_connection->conn = old_conn;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3649
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3650 return Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3651 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3652
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3653 static Lisp_Object
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3654 process_energize_request_1 ()
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3655 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3656 Lisp_Object result;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3657 int speccount = specpdl_depth ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3658
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3659 if (inside_process_energize_request_1)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3660 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3661 /* When the energize process filter is called recursively, push a new
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3662 connection object. The read-pointer of the connection buffer could
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3663 be in the middle of a request. However, we know that the fd itself
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3664 is always pointing between requests. So making a new connection is
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3665 a way of skipping past the one request we were in the process of
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3666 reading when we allowed process output to be handled recursively.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3667 */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3668 Connection *old_conn = energize_connection->conn;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3669 Connection *new_conn =
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3670 make_energize_connection ((void *) energize_connection,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3671 old_conn->fdin, old_conn->fdout);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3672 energize_connection->conn = new_conn;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3673 record_unwind_protect (pop_conn, make_opaque_ptr (old_conn));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3674 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3675
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3676 /* this must come after pop_conn() to get the right connection object */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3677 record_unwind_protect (post_handle_request, Qnil);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3678
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3679 inside_process_energize_request_1++;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3680
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3681 result = process_one_energize_request ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3682 notify_delayed_requests ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3683
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3684 /* decrements inside_process_energize_request_1 and possibly replaces
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3685 energize_connection->conn with old_conn.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3686 */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3687 unbind_to (speccount, Qnil);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3688
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3689 return result;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3690 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3691
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3692
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3693 /******** Initialize Energize-related state and set up connection ********/
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3694
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3695 static void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3696 setup_connection (Editor *ed, unsigned int id1, unsigned int id2)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3697 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3698 CEditorRequest *req = CWriteEditorRequest (ed->conn, QueryConnectionRType);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3699
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3700 /* these 2 slots are ignored */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3701 req->generic.queryconnection.major = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3702 req->generic.queryconnection.minor = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3703
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3704 req->generic.queryconnection.cadillacId1 = id1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3705 req->generic.queryconnection.cadillacId2 = id2;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3706 req->generic.queryconnection.nProtocols = 1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3707 /* first numerical arg is major protocol number, second is minor */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3708 CWriteProtocol (ed->conn, 0, 10, "editor");
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3709 CWriteLength (ed->conn);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3710 CWriteRequestBuffer (ed->conn);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3711 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3712
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3713 /* this is used as the readMethod of the energize connection, so that
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3714 the connection library won't do some buffering that messes us up.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3715 It does this buffering only if conn->readMethod == read, so using
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3716 another function turns it off.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3717 */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3718 static int
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3719 my_read (int fd, char *buf, int nb)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3720 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3721 return read (fd, buf, nb);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3722 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3723
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3724 static Connection *
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3725 make_energize_connection (Editor *editor, int fdin, int fdout)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3726 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3727 Connection *conn = NewConnection ((void *)editor, fdin, fdout);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3728 if (conn)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3729 conn->readMethod = my_read;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3730 return conn;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3731 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3732
20
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
3733 DEFUN ("handle-energize-request", Fhandle_energize_request, 2, 2, 0, /*
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3734 Filter called when a request is available from Energize.
20
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
3735 */
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
3736 (proc, string))
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3737 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3738 if (!NILP (string))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3739 CHECK_STRING (string);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3740
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3741 if (!energize_connection || !energize_connection->conn)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3742 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3743 /* no need for a message here, Energize is dead */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3744 return make_int (0);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3745 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3746 if (!energize_connection || (!EQ (energize_connection->proc, proc)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3747 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3748 message ("Got " IDENTITY_CRISIS " request but not from current connection ");
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3749 return make_int (0);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3750 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3751
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3752 if (!NILP (string))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3753 add_in_connection_input_buffer (energize_connection->conn,
14
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents: 0
diff changeset
3754 (char *) XSTRING_DATA (string),
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents: 0
diff changeset
3755 XSTRING_LENGTH (string));
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3756
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3757 return process_energize_request_1 ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3758 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3759
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3760
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3761 Lisp_Object Venergize_process;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3762
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3763 /* Opens a network connection to Energize.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3764 * server is a string. It can end up with :<uid> or :<username>
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3765 * in which case the uid is added to the TCP port to get the connection */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3766 static void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3767 connect_to_energize (char *server_str, char *arg)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3768 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3769 struct Lisp_Process *proc;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3770 Lisp_Object lp;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3771 Lisp_Object fil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3772 char *host;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3773 unsigned int port;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3774 long flags;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3775 int id1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3776 int id2;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3777
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3778 if (CGetPortNumber (server_str, &host, &port))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3779 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3780
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3781 lp = Fopen_network_stream_internal (build_string ("energize"),
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3782 Qnil,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3783 build_string (host),
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3784 make_int (port));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3785 if (!NILP (lp))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3786 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3787 int infd, outfd;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3788 /* Don't ask the user for confirmation when exiting Emacs */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3789 Fprocess_kill_without_query (lp, Qnil);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3790 proc = XPROCESS (lp);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3791 energize_connection = xnew (Editor);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3792 get_process_file_descriptors (proc, &infd, &outfd);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3793 energize_connection->conn =
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3794 make_energize_connection (energize_connection, infd, outfd);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3795 energize_connection->proc = lp;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3796 energize_connection->binfo_hash = make_hashtable (10);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3797 energize_connection->image_table = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3798 energize_connection->gc_save = Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3799 energize_connection->major = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3800 energize_connection->minor = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3801 peo = allocate_edit_options (10);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3802 request_serial_number = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3803 global_reply_wait = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3804
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3805 if ((flags = fcntl (energize_connection->conn->fdin, F_GETFL, 0))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3806 == -1)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3807 abort ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3808
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3809 #ifdef O_NONBLOCK
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3810 if (fcntl (energize_connection->conn->fdin, F_SETFL,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3811 flags & ~O_NONBLOCK)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3812 == -1)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3813 #else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3814 if (fcntl (energize_connection->conn->fdin, F_SETFL,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3815 flags & ~O_NDELAY)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3816 == -1)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3817 #endif
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3818 abort ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3819
20
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
3820 XSETSUBR (fil, &SFhandle_energize_request);
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3821 set_process_filter (lp, fil, 1);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3822
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3823 Venergize_kernel_busy = Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3824
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3825 id1 = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3826 id2 = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3827 if (arg)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3828 sscanf (arg, "%x,%x", &id1, &id2);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3829
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3830 Venergize_buffers_list = Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3831
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3832 setup_connection (energize_connection, id1, id2);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3833
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3834 Venergize_process = lp;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3835 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3836 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3837 error ("couldn't connect to " IDENTITY_CRISIS " server");
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3838 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3839 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3840 error ("couldn't determine " IDENTITY_CRISIS " server port number");
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3841
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3842
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3843 #ifdef ENERGIZE_V2_HEADERS
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3844 if (energize_connection->minor > 9)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3845 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3846 close_energize_connection ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3847 error ("This Emacs doesn't understand " IDENTITY_CRISIS " version 3.");
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3848 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3849
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3850 #endif /* ENERGIZE_V2_HEADERS */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3851
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3852 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3853
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3854
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3855 /* Close the connection to energize.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3856 * Kills all the energize related buffer */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3857 static void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3858 close_energize_connection ()
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3859 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3860 Editor *ed = energize_connection;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3861
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3862 if (ed)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3863 /* make this function as paranoid as we can */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3864 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3865 /* cleanup the busy state */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3866 show_all_menubars_busy (False);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3867 Venergize_kernel_busy = Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3868 /* destroy all pop_up boxes */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3869 lw_destroy_all_pop_ups ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3870
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3871 if (ed->conn)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3872 DeleteConnection (ed->conn);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3873 ed->conn = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3874
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3875 if (ed->binfo_hash)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3876 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3877 int speccount = specpdl_depth ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3878
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3879 /* we are flushing everything, so we just ignore any change
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3880 hooks and don't make an effort to delete extents since they
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3881 are all going away */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3882 specbind (Qenergize_buffer_modified_hook, Qnil);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3883 specbind (Qinhibit_quit, Qt);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3884 call0 (intern ("de-energize-all-buffers"));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3885 unbind_to (speccount, Qnil);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3886
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3887 free_hashtable (ed->binfo_hash);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3888 ed->binfo_hash = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3889 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3890
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3891 /* Do this after de-energize-all-buffers or frame sizes thrash. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3892 debuggerpanel_sheet = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3893 desired_debuggerpanel_exposed_p = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3894
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3895 free_edit_options (peo);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3896
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3897 if (ZEROP (ed->proc)) abort ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3898
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3899 if (!NILP (ed->proc))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3900 Fdelete_process (ed->proc);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3901 ed->proc = Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3902
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3903 Venergize_buffers_list = Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3904
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3905 /* now kill buffers created to satisfy requests on old connection */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3906 xfree (ed);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3907 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3908
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3909 /* mark as closed */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3910 energize_connection = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3911 Venergize_process = Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3912 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3913
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3914
20
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
3915 DEFUN ("connect-to-energize-internal", Fconnect_to_energize_internal, 0, 2, 0, /*
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3916 Usage: (connect-to-energize-internal <server-name> <energizearg>)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3917 Energizearg representing two 32 bit Energize ids that will be passed
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3918 to the Energize server when opening the Energize connection.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3919 Only one connection can be open at a time.
20
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
3920 */
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
3921 (server_name, energize_arg))
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3922 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3923 unsigned char *server;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3924 unsigned char *arg;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3925
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3926 if (!NILP (energize_arg))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3927 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3928 CHECK_STRING (energize_arg);
14
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents: 0
diff changeset
3929 arg = XSTRING_DATA (energize_arg);
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3930 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3931 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3932 arg = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3933
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3934 if (!NILP (server_name))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3935 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3936 CHECK_STRING (server_name);
14
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents: 0
diff changeset
3937 server = XSTRING_DATA (server_name);
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3938 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3939 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3940 server = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3941
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3942 /* since we are going ahead with this, make sure that we are
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3943 really and truly disconnected first */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3944 Fclose_connection_to_energize ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3945
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3946 connect_to_energize ((char *)server, (char *)arg);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3947 return Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3948 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3949
20
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
3950 DEFUN ("close-connection-to-energize", Fclose_connection_to_energize, 0, 0, 0, /*
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3951 Close the open Energize connection, if any.
20
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
3952 */
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
3953 ())
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3954 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3955 if (!energize_connection) return Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3956
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3957 close_energize_connection ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3958 return Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3959 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3960
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3961
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3962 /* Extents stuff; this used to be in extents.c */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3963
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3964 static void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3965 set_extent_flags (EXTENT extent, Energize_Extent_Data *ext)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3966 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3967 /* clear every flag */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3968 if (!EXTENT_LIVE_P (extent))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3969 return;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3970 extent_start_open_p (extent) = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3971 extent_end_open_p (extent) = 1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3972 extent_read_only_p (extent) = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3973 set_extent_mouse_face (extent, Qnil);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3974 extent_unique_p (extent) = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3975 extent_duplicable_p (extent) = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3976 extent_invisible_p (extent) = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3977
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3978 set_extent_glyph (extent, 0, 0, GL_TEXT);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3979 set_extent_glyph (extent, 0, 1, GL_TEXT);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3980
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3981 if (ext)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3982 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3983 ext->warn_modify = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3984
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3985 switch (ext->extentType)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3986 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3987 case CEAttribute:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3988 break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3989
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3990 case CEAbbreviation:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3991 break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3992
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3993 case CEWriteProtect:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3994 extent_read_only_p (extent) = 1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3995 break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3996
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3997 case CEGeneric:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3998 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3999 GLYPH begin_glyph = 0; /* always the class glyph */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4000 GLYPH end_glyph = 0; /* always the instance glyph */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4001
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4002 /* if (ext->u.generic.gData->id)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4003 SET_EXTENT_FLAG (extent, EF_MENU);*/
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4004
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4005 if (ext->u.generic.gData->glyph)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4006 end_glyph = ext->u.generic.gData->glyph;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4007 if (ext->u.generic.gData->cl && ext->u.generic.gData->cl->glyph)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4008 begin_glyph = ext->u.generic.gData->cl->glyph;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4009
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4010 #if 0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4011 if (begin_glyph && end_glyph)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4012 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4013 begin_glyph = end_glyph;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4014 end_glyph = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4015 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4016 #endif
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4017
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4018 if (begin_glyph)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4019 set_extent_glyph (extent, begin_glyph, 0, GL_TEXT);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4020 if (end_glyph)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4021 set_extent_glyph (extent, end_glyph, 1, GL_TEXT);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4022
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4023 if (ext->u.generic.gData->cl &&
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4024 (ext->u.generic.gData->cl->flags & CCElectric))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4025 set_extent_mouse_face (extent, Qhighlight);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4026 if (ext->u.generic.gData->cl &&
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4027 (ext->u.generic.gData->cl->flags & CCWarnModified))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4028 ext->warn_modify = 1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4029 #if 0 /* #### some day (soon?)... */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4030 if (ext->u.generic.gData->cl &&
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4031 (ext->u.generic.gData->cl->flags & CCColumn))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4032 SET_EXTENT_FLAG (extent, EF_COLUMN);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4033 #endif
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4034 extent_duplicable_p (extent) = 1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4035 extent_unique_p (extent) = 1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4036 break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4037 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4038
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4039 default:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4040 break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4041 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4042 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4043 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4044
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4045 extern Lisp_Object Fset_extent_face (Lisp_Object extent, Lisp_Object name);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4046
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4047 static void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4048 set_extent_attributes_index (EXTENT extent, Energize_Extent_Data *ext)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4049 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4050 int graphic_attributes;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4051
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4052 if (!ext)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4053 extent_face_id (extent) = -1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4054 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4055 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4056 switch (ext->extentType)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4057 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4058 case CEAttribute:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4059 graphic_attributes = ext->u.attr.attrValue;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4060 break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4061
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4062 case CEGeneric:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4063 graphic_attributes = ext->u.generic.gData->attribute;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4064 break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4065
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4066 case CEWriteProtect:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4067 /* this type has NO display attributes */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4068 extent_face_id (extent) = -1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4069 return;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4070
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4071 default:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4072 graphic_attributes = GA_NO_CHANGE;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4073 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4074
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4075 if (graphic_attributes >= GA_MAX)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4076 graphic_attributes = GA_NO_CHANGE;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4077
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4078 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4079 /* The Venergize_attributes_mapping global is an alist of the form
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4080 ( (<kernel-attribute-number> . <emacs-face-name> ) ... )
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4081 */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4082 Lisp_Object face = Fcdr (Fassq (make_int (graphic_attributes),
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4083 Venergize_attributes_mapping));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4084 Lisp_Object e;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4085 XSETEXTENT (e, extent);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4086 if (NILP (face))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4087 message ("Unknown Energize attribute %d", graphic_attributes);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4088 else if (EQ (face, Qdefault))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4089 Fset_extent_face (e, Qnil);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4090 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4091 Fset_extent_face (e, face);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4092 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4093 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4094 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4095
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4096 void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4097 restore_energize_extent_state (EXTENT extent)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4098 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4099 Energize_Extent_Data *ext = energize_extent_data (extent);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4100 if (!ext) return;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4101 set_extent_flags (extent, ext);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4102 set_extent_attributes_index (extent, ext);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4103 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4104
20
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
4105 DEFUN ("extent-to-generic-id", Fextent_to_generic_id, 1, 1, 0, /*
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4106 Return Energize ID of buffer of EXTENT.
20
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
4107 */
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
4108 (extent_obj))
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4109 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4110 CHECK_EXTENT (extent_obj);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4111 return word_to_lisp (energize_extent_data_id
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4112 (energize_extent_data (XEXTENT (extent_obj))));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4113 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4114
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4115
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4116
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4117 /* buffer modified routines */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4118 static void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4119 send_buffer_modification_state (Editor *editor, BufferInfo *binfo, int flag)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4120 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4121 Connection *conn = editor->conn;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4122 EId bufferId = binfo->id;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4123
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4124 if (conn)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4125 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4126 int state = (flag)?(CMBufferSetModified):(CMBufferSetUnmodified);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4127 CWriteModifiedBufferHeader (conn, bufferId, state);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4128 CWriteRequestBuffer (conn);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4129 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4130 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4131
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4132 /* returns 1 if buffer is locked (non-editable),
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4133 0 if it isn't (editable), and -1 if it can't tell
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4134 */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4135 static int
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4136 check_buffer_lock (Editor *editor, BufferInfo *binfo)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4137 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4138 Connection *conn = editor->conn;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4139 struct reply_wait rw;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4140
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4141 /* If permision already granted by kernel dont' ask again */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4142 if (binfo->editable)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4143 return 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4144
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4145 /* If can't ask say we do not know */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4146 if (!conn)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4147 return -1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4148
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4149 /* Ask the kernel */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4150 CWriteModifiedBufferHeader (conn, binfo->id, CMBufferQueryLock);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4151 conn->header->serial = ++request_serial_number;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4152 CWriteRequestBuffer (conn);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4153
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4154 rw.serial = request_serial_number;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4155 rw.objectId = binfo->id;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4156 rw.status = -1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4157
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4158 if (!wait_for_reply (&rw))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4159 return -1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4160
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4161 if (rw.status == CMBufferLocked)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4162 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4163 /* Buffer is locked by kernel so we cannot edit it */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4164 return 1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4165 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4166 else if (rw.status == CMBufferUnlocked)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4167 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4168 /* Buffer is unlocked by kernel: edit permission granted! */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4169 binfo->editable = 1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4170 return 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4171 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4172 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4173 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4174 /* This should never happen */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4175 return -1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4176 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4177 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4178
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4179
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4180 /* Ask the kernel if BUFFER is currently locked -- waits for answer */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4181 static Lisp_Object
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4182 buffer_locked_p (Lisp_Object buffer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4183 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4184 BufferInfo *binfo;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4185
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4186 if (!energize_connection)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4187 return Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4188
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4189 if (NILP (buffer))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4190 XSETBUFFER (buffer, current_buffer);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4191
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4192 CHECK_BUFFER (buffer);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4193
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4194 binfo = get_buffer_info_for_emacs_buffer (buffer, energize_connection);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4195
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4196 if (!binfo)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4197 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4198 /* Not an Energize buffer, return Qnil: can edit buffer */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4199 return Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4200 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4201 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4202 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4203 /* Energize buffer, check if editable */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4204 return check_buffer_lock (energize_connection, binfo) == 0 ? Qnil : Qt;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4205 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4206 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4207
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4208
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4209
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4210 /* Called by map_extents function called by Fenergize_send_buffer_modified
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4211 */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4212 static int
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4213 notify_extent_modified (EXTENT extent, void *arg)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4214 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4215 /* arg is a binfo_and_state */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4216 binfo_and_state *bans = (binfo_and_state*)arg;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4217 Energize_Extent_Data *ext;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4218 BufferInfo *binfo = bans->binfo;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4219 Connection *conn = binfo->editor->conn;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4220 EId *extent_id;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4221 Lisp_Object extent_obj;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4222
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4223 XSETEXTENT (extent_obj, extent);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4224 if ((ext = extent_to_data (extent_obj))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4225 && ext->warn_modify
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4226 && ext->extentType == CEGeneric
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4227 && ext->u.generic.gData
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4228 && ext->u.generic.gData->cl
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4229 && (ext->u.generic.gData->cl->flags & CCWarnModified)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4230 && ext->u.generic.gData->modified_state != bans->state)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4231 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4232 if (bans->tell_energize)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4233 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4234 CWriteModifiedExtentsHeader (conn, binfo->id, bans->state, 1);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4235 extent_id = CPut (conn, EId);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4236 *extent_id = ext->id;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4237 CWriteLength (conn);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4238 CWriteRequestBuffer (conn);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4239 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4240 ext->u.generic.gData->modified_state = bans->state;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4241 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4242 return 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4243 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4244
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4245 static int
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4246 ceiwme_lower_mf (EXTENT e, void *arg)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4247 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4248 Lisp_Object extent;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4249 Energize_Extent_Data *ext;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4250 XSETEXTENT (extent, e);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4251 ext = extent_to_data (extent);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4252 if (ext && ext->warn_modify)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4253 *((EXTENT *) arg) = e;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4254 return 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4255 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4256
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4257 static int
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4258 ceiwme_upper_mf (EXTENT e, void *arg)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4259 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4260 Lisp_Object extent;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4261 Energize_Extent_Data *ext;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4262 XSETEXTENT (extent, e);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4263 ext = extent_to_data (extent);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4264 if (ext && ext->warn_modify)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4265 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4266 *((EXTENT *) arg) = e;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4267 return 1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4268 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4269 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4270 return 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4271 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4272
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4273 static void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4274 coerce_endpoints_to_be_inside_warn_on_modify_extents (Bufpos *from_ptr,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4275 Bufpos *to_ptr,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4276 struct buffer *b)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4277 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4278 EXTENT lower_extent = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4279 EXTENT upper_extent = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4280 Bufpos lower_bound = *from_ptr;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4281 Bufpos upper_bound = *to_ptr;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4282 Lisp_Object tmp;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4283
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4284 /* make sure that from <= to */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4285 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4286 Bufpos tmp_int = max (lower_bound, upper_bound);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4287 *from_ptr = lower_bound = min (lower_bound, upper_bound);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4288 *to_ptr = upper_bound = tmp_int;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4289 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4290
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4291 if (!BUFFER_NOTIFY_BACKGROUND_BIT_SET_P (b))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4292 return;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4293
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4294 map_extents (BUF_BEG (b), lower_bound, ceiwme_lower_mf,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4295 (void *) &lower_extent, make_buffer (b), 0, ME_END_CLOSED);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4296 if (!lower_extent)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4297 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4298 lower_bound = BUF_BEG (b);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4299 map_extents (upper_bound, BUF_Z (b), ceiwme_upper_mf,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4300 (void *) &upper_extent, make_buffer (b), 0, ME_END_CLOSED);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4301 if (!upper_extent)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4302 upper_bound = BUF_Z (b);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4303 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4304 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4305 Bufpos xstart;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4306 XSETEXTENT (tmp, upper_extent);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4307 xstart = XINT (Fextent_start_position (tmp));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4308 upper_bound = max (upper_bound, xstart);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4309 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4310 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4311 /* I forget why, but if we found an lower bound, we don't need to find
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4312 an upper bound */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4313 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4314 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4315 Bufpos xstart;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4316 XSETEXTENT (tmp, lower_extent);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4317 xstart = XINT (Fextent_start_position (tmp));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4318 lower_bound = min (lower_bound, xstart);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4319 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4320
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4321 *from_ptr = lower_bound;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4322 *to_ptr = upper_bound;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4323 return;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4324 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4325
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4326 static void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4327 mark_all_extents_as_unmodified (BufferInfo *binfo)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4328 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4329 binfo_and_state bans;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4330 bans.binfo = binfo;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4331 bans.state = FALSE;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4332 bans.tell_energize = FALSE;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4333
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4334 map_extents (BUF_BEG (XBUFFER (binfo->emacs_buffer)),
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4335 BUF_Z (XBUFFER (binfo->emacs_buffer)),
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4336 notify_extent_modified, &bans,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4337 binfo->emacs_buffer, 0, ME_END_CLOSED);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4338 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4339
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4340 /* Send the BufferModified events for the current buffer.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4341 * Handles both global buffer modified and extents modified. */
20
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
4342 DEFUN ("energize-send-buffer-modified", Fenergize_send_buffer_modified, 3, 3, 0, /*
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4343 Send a BufferModified request for the current buffer.
20
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
4344 */
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
4345 (state, from, to))
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4346 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4347 int modifiedp = NILP (state)? 0 : 1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4348 Lisp_Object buffer;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4349 BufferInfo *binfo;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4350 Bufpos from_int = XINT (from);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4351 Bufpos to_int = XINT (to);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4352
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4353 if (!energize_connection || !energize_connection->conn) return Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4354
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4355 XSETBUFFER (buffer, current_buffer);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4356
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4357 Fenergize_barf_if_buffer_locked ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4358
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4359 if (binfo = get_buffer_info_for_emacs_buffer (buffer, energize_connection))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4360 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4361 /* now make sure that from and to
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4362 are inside some warn_on_modify extents somewhere */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4363 coerce_endpoints_to_be_inside_warn_on_modify_extents
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4364 (&from_int, &to_int, current_buffer);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4365 XSETINT (from, from_int);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4366 XSETINT (to, to_int);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4367
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4368 if (binfo->modified_state != modifiedp)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4369 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4370 send_buffer_modification_state (energize_connection, binfo,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4371 modifiedp);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4372 binfo->modified_state = modifiedp;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4373 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4374 #ifndef ENERGIZE_V2_HEADERS
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4375 if (!(binfo->flags & CBFileYourself))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4376 #endif
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4377 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4378 if (modifiedp)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4379 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4380 binfo_and_state bans;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4381 bans.binfo = binfo;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4382 bans.state = 1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4383 bans.tell_energize = 1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4384 map_extents (XINT (from), XINT (to),
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4385 notify_extent_modified, &bans,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4386 binfo->emacs_buffer, 0,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4387 ME_END_CLOSED);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4388 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4389 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4390 mark_all_extents_as_unmodified (binfo);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4391 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4392 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4393 return Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4394 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4395
20
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
4396 DEFUN ("energize-barf-if-buffer-locked",
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
4397 Fenergize_barf_if_buffer_locked, 0, 0, 0, /*
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4398 Error if the buffer is locked.
20
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
4399 */
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
4400 ())
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4401 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4402 Lisp_Object buffer;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4403 XSETBUFFER (buffer, current_buffer);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4404
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4405 if (!energize_connection || !energize_connection->conn)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4406 return Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4407
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4408 while (!NILP (buffer_locked_p (buffer)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4409 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4410 notify_delayed_requests ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4411 Fsignal (Qbuffer_locked_by_energize, (Fcons (buffer, Qnil)));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4412 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4413 return Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4414 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4415
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4416
20
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
4417 DEFUN ("energize-send-region", Fenergize_send_region, 2, 2, 0, /*
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4418 Send region as user input
20
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
4419 */
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
4420 (start, end))
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4421 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4422 BufferInfo *binfo;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4423 Lisp_Object b;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4424 CEditorRequest *req;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4425
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4426 if (!energize_connection || !energize_connection->conn)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4427 error ("Not connected to " IDENTITY_CRISIS);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4428
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4429 XSETBUFFER (b, current_buffer);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4430 if (binfo = get_buffer_info_for_emacs_buffer (b, energize_connection))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4431 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4432 Bufpos st, en;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4433 Bufpos ceil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4434
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4435 get_buffer_range_char (current_buffer, start, end, &st, &en);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4436
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4437 do
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4438 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4439 ceil = BUF_CEILING_OF (current_buffer, st);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4440
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4441 req = CWriteEditorRequest (energize_connection->conn,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4442 UserTypedSomethingRType);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4443 req->usertypedsomething.bufferId = binfo->id;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4444 CWriteVstringLen
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4445 (energize_connection->conn,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4446 (char *) BUF_BYTE_ADDRESS (current_buffer, st), ceil - st);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4447 CWriteLength (energize_connection->conn);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4448 CWriteRequestBuffer (energize_connection->conn);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4449 st = ceil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4450 } while (st < en);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4451 return Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4452 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4453 return Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4454 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4455
20
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
4456 DEFUN ("connected-to-energize-p", Fconnected_to_energize_p, 0, 0, 0, /*
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4457 Return nil if no connection to Energize.
20
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
4458 */
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
4459 ())
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4460 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4461 if (!energize_connection ||
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4462 !energize_connection->conn ||
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4463 !energize_connection->binfo_hash ||
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4464 !PROCESSP (energize_connection->proc))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4465 return Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4466 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4467 return Qt;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4468 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4469
20
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
4470 DEFUN ("energize-user-input-buffer-mark",
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
4471 Fenergize_user_input_buffer_mark, 0, 1, 0, /*
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4472 Return the mark associated to the given Energize buffer.
20
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
4473 */
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
4474 (buffer))
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4475 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4476 BufferInfo *binfo;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4477
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4478 XSETBUFFER (buffer, decode_buffer (buffer, 0));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4479 if (!energize_connection) return Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4480 if ((binfo = get_buffer_info_for_emacs_buffer (buffer, energize_connection)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4481 return binfo->output_mark;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4482 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4483 return Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4484 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4485
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4486 Lisp_Object
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4487 energize_get_buffer_process (Lisp_Object buf)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4488 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4489 BufferInfo *binfo;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4490
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4491 if (!BUFFERP (buf)) return Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4492 if (!energize_connection) return Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4493 binfo = get_buffer_info_for_emacs_buffer (buf, energize_connection);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4494 if (!binfo) return Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4495 if (! binfo->buffer_type) return Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4496 if (!strcmp (binfo->buffer_type, "energize-debugger-buffer") ||
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4497 !strcmp (binfo->buffer_type, "energize-log-file-buffer"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4498 return Venergize_process;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4499 return Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4500 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4501
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4502
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4503 static int
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4504 get_energize_connection_and_buffer_id (Lisp_Object buffer, void **conn_ptr,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4505 long *buffer_id_ptr)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4506 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4507 BufferInfo *binfo;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4508
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4509 if (!energize_connection || !energize_connection->conn) return 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4510
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4511 binfo = get_buffer_info_for_emacs_buffer (buffer, energize_connection);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4512
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4513 *conn_ptr = (void *) energize_connection->conn;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4514 *buffer_id_ptr = (long) binfo ? binfo->id : 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4515 return 1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4516 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4517
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4518 static int
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4519 get_energize_connection_and_current_buffer_id (void **conn_ptr,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4520 long *buffer_id_ptr)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4521 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4522 Lisp_Object lisp_buffer;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4523 XSETBUFFER (lisp_buffer, current_buffer);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4524
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4525 return get_energize_connection_and_buffer_id (lisp_buffer, conn_ptr,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4526 buffer_id_ptr);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4527 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4528
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4529 int *
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4530 get_psheets_for_buffer (Lisp_Object buffer, int *count_ptr)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4531 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4532 BufferInfo *binfo;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4533
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4534 if (!energize_connection || !energize_connection->conn) return 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4535
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4536 binfo = get_buffer_info_for_emacs_buffer (buffer, energize_connection);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4537 if (!binfo) return 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4538
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4539 if (count_ptr) *count_ptr = binfo->n_p_sheets;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4540 return binfo->p_sheet_ids;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4541 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4542
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4543 void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4544 notify_energize_sheet_hidden (EId id)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4545 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4546 EId buffer_id = buffer_id_of_sheet (id);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4547 if (!buffer_id)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4548 return;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4549
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4550 if (buffer_id && energize_connection && energize_connection->conn)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4551 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4552 CWriteSheetRequest (energize_connection->conn,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4553 CSHide, id, buffer_id, "");
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4554 CWriteRequestBuffer (energize_connection->conn);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4555 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4556 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4557
20
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
4558 DEFUN ("energize-query-buffer", Fenergize_query_buffer, 1, 2, 0, /*
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4559 Ask Energize to create a buffer containing the file filename.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4560 Returns the buffer or NIL if Energize cannot create the buffer.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4561 If second argument just-ask is T, just ask if Energize
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4562 already knows about the file and returns T if yes, NIL otherwise.
20
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
4563 */
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
4564 (filename, just_ask))
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4565 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4566 struct Lisp_String *filename_str;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4567 CEditorRequest *creq;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4568 char *dir_sep;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4569 struct reply_wait rw;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4570
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4571 if (!energize_connection || !energize_connection->conn)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4572 return Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4573
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4574 filename = Fexpand_file_name (filename, Qnil);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4575 filename_str = XSTRING (filename);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4576
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4577 dir_sep = (char *) strrchr ((char *) string_data (filename_str), '/');
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4578
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4579 creq = CWriteEditorRequest (energize_connection->conn, QueryBufferRType);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4580 creq->head.data = !NILP (just_ask);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4581 creq->head.serial = ++request_serial_number;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4582 CWriteVstringLen (energize_connection->conn, (char *) string_data (filename_str),
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4583 (dir_sep)? (dir_sep - (char *) string_data (filename_str)): 0);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4584 CWriteVstringLen (energize_connection->conn,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4585 (char *) string_data (filename_str), string_length (filename_str));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4586 CWriteLength (energize_connection->conn);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4587 CWriteRequestBuffer (energize_connection->conn);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4588
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4589 rw.serial = request_serial_number;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4590 rw.objectId = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4591
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4592 if (!wait_for_reply (&rw))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4593 return Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4594
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4595 if (rw.status)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4596 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4597 if (rw.objectId)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4598 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4599 BufferInfo* binfo = get_buffer_info_for_id (rw.objectId,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4600 energize_connection);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4601 return binfo ? binfo->emacs_buffer : Qt;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4602 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4603 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4604 return Qt;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4605 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4606 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4607 return Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4608 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4609
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4610
20
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
4611 DEFUN ("energize-protocol-level", Fenergize_protocol_level, 0, 0, 0, /*
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4612 Return the Energize protocol level.
20
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
4613 */
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
4614 ())
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4615 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4616 return
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4617 energize_connection
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4618 ? Fcons (make_int (energize_connection->major),
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4619 make_int (energize_connection->minor))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4620 : Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4621 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4622
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4623
20
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
4624 DEFUN ("energize-psheets-visible-p", Fenergize_psheets_visible_p, 0, 1, 0, /*
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4625 Whether the (optional) frame currently has open psheets.
20
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
4626 */
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
4627 (frame))
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4628 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4629 if (NILP (frame))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4630 XSETFRAME (frame, XFRAME(Fselected_frame(Qnil)));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4631 CHECK_FRAME (frame);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4632 if (FRAME_X_CURRENT_PSHEETS (XFRAME (frame)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4633 return Qt;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4634 return Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4635 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4636
20
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
4637 DEFUN ("energize-buffer-has-psheets-p", Fenergize_buffer_has_psheets_p, 0, 1, 0, /*
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4638 Whether the buffer has psheets associated with it.
20
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
4639 */
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
4640 (buf))
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4641 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4642 int count;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4643 if (NILP (buf))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4644 buf = Fcurrent_buffer ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4645 CHECK_BUFFER (buf);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4646 if (get_psheets_for_buffer (buf, &count))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4647 return Qt;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4648 return Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4649 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4650
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4651
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4652 void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4653 make_psheets_desired (struct frame *f, Lisp_Object buffer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4654 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4655 int count;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4656 int *psheets;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4657
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4658 if (NILP (buffer) || !(psheets = get_psheets_for_buffer (buffer, &count)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4659 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4660 FRAME_X_DESIRED_PSHEETS (f) = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4661 FRAME_X_DESIRED_PSHEET_COUNT (f) = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4662 FRAME_X_DESIRED_PSHEET_BUFFER (f) = Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4663 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4664 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4665 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4666 /* Do not show the debugger panel in this function. The
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4667 * debugger panel should never be listed in the visible psheets. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4668 extern int debuggerpanel_sheet;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4669
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4670 if (count == 1 && psheets [0] == debuggerpanel_sheet)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4671 return;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4672
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4673 FRAME_X_DESIRED_PSHEETS (f) = psheets;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4674 FRAME_X_DESIRED_PSHEET_COUNT (f) = count;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4675 FRAME_X_DESIRED_PSHEET_BUFFER (f) = buffer;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4676 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4677
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4678 /* Garbage the frame so that the sheets get recomputed right away and not
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4679 the next time some display change happens. Possibly redisplay should
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4680 notice this on its own without the garbaged flag. But once redisplay
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4681 gets smarter about such things, all garbagers should be revisited.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4682 */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4683 MARK_FRAME_CHANGED (f);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4684 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4685
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4686 Lisp_Object
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4687 desired_psheet_buffer (struct frame *f)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4688 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4689 if (FRAME_X_P (f))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4690 return FRAME_X_DESIRED_PSHEET_BUFFER (f);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4691 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4692 return Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4693 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4694
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4695 /* This function is invoked when the user clicks on the "sheet" button.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4696 */
20
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
4697 DEFUN ("energize-toggle-psheet", Fenergize_toggle_psheet, 0, 0, "", /*
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
4698
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
4699 */
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
4700 ())
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4701 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4702 struct frame *frame = XFRAME(Fselected_frame(Qnil));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4703 Lisp_Object buffer = Fwindow_buffer (Fselected_window (Qnil));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4704 if (EQ (buffer, desired_psheet_buffer (frame)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4705 make_psheets_desired (frame, Qnil);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4706 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4707 make_psheets_desired (frame, buffer);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4708 return Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4709 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4710
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4711
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4712 static void energize_show_menubar_of_buffer (Lisp_Object frame,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4713 Lisp_Object buffer,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4714 Lisp_Object psheets_too);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4715
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4716 /* This is called when a buffer becomes visible in some window.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4717
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4718 Show the menubar associated with this buffer, and show the psheets as
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4719 well if this buffer is the last buffer whose psheets were visible in
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4720 this frame.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4721 */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4722 void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4723 energize_buffer_shown_hook (struct window *window)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4724 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4725 struct frame* frame = XFRAME (window->frame);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4726 Lisp_Object buffer = window->buffer;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4727 Lisp_Object pbuf;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4728
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4729 if (! FRAME_X_P (frame)) return;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4730 pbuf = desired_psheet_buffer (frame);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4731
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4732 if (!MINI_WINDOW_P (window))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4733 energize_show_menubar_of_buffer (window->frame, buffer,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4734 (EQ (buffer, pbuf) ? Qt : Qnil));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4735 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4736
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4737
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4738 static int
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4739 find_buffer_in_different_window (window, buffer, not_in)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4740 struct window* window;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4741 Lisp_Object buffer;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4742 struct window* not_in;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4743 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4744 Lisp_Object child;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4745 if (!NILP (window->buffer))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4746 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4747 /* a leaf window */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4748 return (EQ (window->buffer, buffer) && (window != not_in));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4749 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4750 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4751 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4752 /* a non leaf window, visit either the hchild or the vchild */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4753 for (child = !NILP (window->vchild) ? window->vchild : window->hchild;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4754 !NILP (child);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4755 child = XWINDOW (child)->next)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4756 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4757 if (find_buffer_in_different_window (XWINDOW (child), buffer,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4758 not_in))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4759 return 1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4760 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4761 return 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4762 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4763 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4764
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4765 /* returns 1 if the buffer is only visible in window on frame f */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4766 static int
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4767 buffer_only_visible_in_this_window_p (Lisp_Object buffer,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4768 struct frame* f,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4769 struct window* window)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4770 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4771 return !find_buffer_in_different_window (XWINDOW (f->root_window), buffer,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4772 window);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4773 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4774
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4775 /* This is called just before a buffer which is visible becomes invisible,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4776 either because some other buffer is about to be made visible in its window,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4777 or because that window is being deleted.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4778
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4779 If this buffer's psheets are visible, hide them.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4780 */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4781 void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4782 energize_buffer_hidden_hook (struct window *window)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4783 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4784 struct frame *f = XFRAME (window->frame);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4785
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4786 if (! FRAME_X_P (f)) return;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4787
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4788 /* hides the p_sheet if we are changing the buffer of the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4789 * selected window of the frame and the p_sheet where displayed */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4790 if (EQ (window->buffer, desired_psheet_buffer (f))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4791 && buffer_only_visible_in_this_window_p (window->buffer, f, window))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4792 make_psheets_desired (f, Qnil);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4793 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4794
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4795
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4796 /* This is called just before the selected window is no longer the selected
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4797 window because some other window is being selected. The given window is
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4798 not being deleted, it is merely no longer the selected one.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4799
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4800 This doesn't do anything right now.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4801 */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4802 void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4803 energize_window_deselected_hook (struct window *window)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4804 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4805 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4806
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4807
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4808 /* This is called just after a window has been selected.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4809
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4810 Show the menubar associated with this buffer; leave the psheets as
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4811 they are.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4812 */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4813 void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4814 energize_window_selected_hook (struct window *window)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4815 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4816 struct frame* frame = XFRAME (window->frame);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4817 Lisp_Object buffer = window->buffer;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4818
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4819 if (FRAME_X_P (frame) && !MINI_WINDOW_P (window))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4820 energize_show_menubar_of_buffer (window->frame, buffer, Qnil);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4821 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4822
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4823
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4824
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4825 int current_debuggerpanel_exposed_p;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4826 int desired_debuggerpanel_exposed_p;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4827 int debuggerpanel_sheet;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4828
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4829 static void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4830 energize_show_menubar_of_buffer (Lisp_Object frame,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4831 Lisp_Object buffer,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4832 Lisp_Object psheets_too)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4833 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4834 struct frame *f = decode_x_frame (frame);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4835
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4836 if (! NILP (psheets_too))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4837 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4838 Lisp_Object buffer;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4839 XSETBUFFER (buffer, current_buffer);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4840 make_psheets_desired (f, buffer);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4841 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4842 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4843
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4844
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4845 /* edit-mode dialog box
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4846 This stuff really sucks
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4847 */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4848
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4849 static struct editmode {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4850 int ok, external, view, edit, window, split;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4851 char *other;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4852 } editmode;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4853
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4854 static void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4855 edit_mode_callback (Widget widget, LWLIB_ID id, XtPointer client_data)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4856 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4857 widget_value *data;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4858 char *name = (char *) client_data;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4859
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4860 if ((int) client_data == -1) name = "cancel"; /* WM_DELETE_WINDOW */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4861
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4862 if (!strcmp (XtName (widget), "otherText")) /* screw it */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4863 ;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4864 else if (!strcmp (name, "externalBox"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4865 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4866 /* make the text slot be active only if "other" is selected */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4867 data = malloc_widget_value ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4868 data->name = "externalOther";
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4869 if (! lw_get_some_values (id, data)) abort ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4870 data->enabled = data->selected;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4871 data->name = "otherText";
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4872 lw_modify_all_widgets (id, data, True);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4873 free_widget_value (data);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4874 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4875 else if (!strcmp (name, "cancel"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4876 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4877 editmode.ok = -1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4878 lw_destroy_all_widgets (id);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4879 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4880 else if (!strcmp (name, "help"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4881 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4882 Lisp_Object v = Fmake_vector (make_int (3), Qt);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4883 vector_data (XVECTOR (v)) [0] = build_string ("ok");
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4884 vector_data (XVECTOR (v)) [1] = list1 (Qignore);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4885 Fpopup_dialog_box (list2 (build_string ("dbx_editmode_help"), v));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4886 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4887 else if (!strcmp (name, "ok"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4888 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4889 editmode.ok = 1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4890 data = malloc_widget_value ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4891 data->name = "externalEmacs";
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4892 if (! lw_get_some_values (id, data)) abort ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4893 if (data->selected) editmode.external = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4894 data->name = "externalViXterm";
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4895 if (! lw_get_some_values (id, data)) abort ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4896 if (data->selected) editmode.external = 1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4897 data->name = "externalViCmdtool";
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4898 if (! lw_get_some_values (id, data)) abort ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4899 if (data->selected) editmode.external = 2;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4900 data->name = "externalOther";
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4901 if (! lw_get_some_values (id, data)) abort ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4902 if (data->selected) editmode.external = 3;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4903 data->name = "otherText";
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4904 if (! lw_get_some_values (id, data)) abort ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4905 editmode.other = data->value;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4906
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4907 data->name = "emacsView";
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4908 if (! lw_get_some_values (id, data)) abort ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4909 if (data->selected) editmode.view = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4910 data->name = "viView";
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4911 if (! lw_get_some_values (id, data)) abort ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4912 if (data->selected) editmode.view = 1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4913 data->name = "lessView";
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4914 if (! lw_get_some_values (id, data)) abort ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4915 if (data->selected) editmode.view = 2;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4916
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4917 data->name = "editEmacs";
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4918 if (! lw_get_some_values (id, data)) abort ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4919 if (data->selected) editmode.edit = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4920 data->name = "editVi";
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4921 if (! lw_get_some_values (id, data)) abort ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4922 if (data->selected) editmode.edit = 1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4923
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4924 data->name = "windowOne";
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4925 if (! lw_get_some_values (id, data)) abort ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4926 if (data->selected) editmode.window = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4927 data->name = "windowSeveral";
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4928 if (! lw_get_some_values (id, data)) abort ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4929 if (data->selected) editmode.window = 1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4930 data->name = "windowMany";
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4931 if (! lw_get_some_values (id, data)) abort ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4932 if (data->selected) editmode.window = 2;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4933
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4934 data->name = "splitScreens";
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4935 if (! lw_get_some_values (id, data)) abort ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4936 editmode.split = !!data->selected;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4937
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4938 free_widget_value (data);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4939 lw_destroy_all_widgets (id);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4940 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4941 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4942 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4943 abort ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4944 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4945 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4946
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4947 static int
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4948 editmode_done (void *arg)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4949 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4950 return (editmode.ok != 0);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4951 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4952
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4953 extern LWLIB_ID new_lwlib_id (void);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4954
20
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
4955 DEFUN ("energize-edit-mode-prompt", Fenergize_edit_mode_prompt, 6, 6, 0, /*
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
4956
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
4957 */
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
4958 (external, edit_mode, view_mode, other_text, window, split))
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4959 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4960 int dbox_id;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4961 struct frame *f = selected_frame ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4962 widget_value *data;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4963 Widget parent, dbox;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4964 Lisp_Object frame = Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4965
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4966 XSETFRAME (frame, f);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4967 CHECK_X_FRAME (frame);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4968 parent = FRAME_X_SHELL_WIDGET (f);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4969
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4970 CHECK_INT (external);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4971 CHECK_INT (edit_mode);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4972 CHECK_INT (view_mode);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4973 CHECK_INT (window);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4974 CHECK_INT (split);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4975 CHECK_STRING (other_text);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4976
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4977 editmode.ok = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4978 editmode.external = XINT (external);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4979 editmode.view = XINT (view_mode);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4980 editmode.edit = XINT (edit_mode);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4981 editmode.window = XINT (window);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4982 editmode.split = XINT (split);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4983 editmode.other = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4984
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4985 data = malloc_widget_value ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4986 data->name = "editmode";
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4987 data->value = "editmode";
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4988 data->enabled = 1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4989
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4990 dbox_id = new_lwlib_id ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4991 dbox = lw_create_widget ("editmode", "editmode", dbox_id, data, parent,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4992 1, 0, edit_mode_callback, 0);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4993 data->value = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4994
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4995 data->name = "button1"; data->call_data = data->value = "ok";
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4996 lw_modify_all_widgets (dbox_id, data, True);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4997 data->name = "button2"; data->call_data = data->value = "cancel";
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4998 lw_modify_all_widgets (dbox_id, data, True);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4999 data->name = "button3"; data->call_data = data->value = "help";
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5000 lw_modify_all_widgets (dbox_id, data, True);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5001 data->name = data->call_data = "externalBox";
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5002 lw_modify_all_widgets (dbox_id, data, True);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5003 data->name = "otherText"; data->call_data = "otherText";
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5004 lw_modify_all_widgets (dbox_id, data, True);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5005 data->name = "message"; data->value = "editmode";
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5006 lw_modify_all_widgets (dbox_id, data, True);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5007
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5008 data->selected = 1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5009 switch (editmode.external)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5010 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5011 case 0: data->name = "externalEmacs"; break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5012 case 1: data->name = "externalViXterm"; break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5013 case 2: data->name = "externalViCmdtool"; break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5014 case 3: data->name = "externalOther"; break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5015 default: abort ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5016 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5017 lw_modify_all_widgets (dbox_id, data, True);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5018 switch (editmode.view)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5019 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5020 case 0: data->name = "emacsView"; break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5021 case 1: data->name = "viView"; break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5022 case 2: data->name = "lessView"; break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5023 default: abort ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5024 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5025 lw_modify_all_widgets (dbox_id, data, True);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5026 switch (editmode.edit)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5027 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5028 case 0: data->name = "editEmacs"; break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5029 case 1: data->name = "editVi"; break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5030 default: abort ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5031 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5032 lw_modify_all_widgets (dbox_id, data, True);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5033 switch (editmode.window)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5034 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5035 case 0: data->name = "windowOne"; break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5036 case 1: data->name = "windowSeveral"; break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5037 case 2: data->name = "windowMany"; break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5038 default: abort ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5039 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5040 lw_modify_all_widgets (dbox_id, data, True);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5041
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5042 data->name = "otherText";
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5043 data->selected = 0;
14
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents: 0
diff changeset
5044 data->value = (char *) XSTRING_DATA (other_text);
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5045 data->enabled = (editmode.external == 3);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5046 lw_modify_all_widgets (dbox_id, data, True);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5047
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5048 data->name = "splitScreens";
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5049 data->enabled = 1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5050 data->selected = editmode.split;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5051 data->value = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5052 lw_modify_all_widgets (dbox_id, data, True);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5053
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5054 free_widget_value (data);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5055
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5056 lw_pop_up_all_widgets (dbox_id);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5057
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5058 wait_delaying_user_input (editmode_done, 0);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5059
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5060 if (editmode.ok == -1)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5061 return Fcons (external,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5062 list5 (edit_mode, view_mode, other_text, window, split));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5063 else if (editmode.ok == 1)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5064 return Fcons (make_int (editmode.external),
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5065 list5 (make_int (editmode.view),
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5066 make_int (editmode.edit),
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5067 build_string (editmode.other ? editmode.other : ""),
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5068 make_int (editmode.window),
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5069 make_int (editmode.split)));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5070 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5071 abort ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5072 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5073
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5074 static LWLIB_ID search_id;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5075 static int last_search_up_p;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5076
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5077 static void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5078 hide_search_dialog (Widget w, LWLIB_ID id)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5079 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5080 #if 0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5081 /* I'd like to do this, but the widget occasionally gets FUCKED */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5082 XUnmapWindow (XtDisplay (w), XtWindow (w));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5083 #else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5084 lw_destroy_all_widgets (id);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5085 #endif
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5086 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5087
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5088
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5089 static void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5090 search_callback (Widget widget, LWLIB_ID id, XtPointer client_data)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5091 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5092 Widget parent = widget;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5093 widget_value *data;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5094 char *name = (char *) client_data;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5095 Lisp_Object search, replace;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5096 Lisp_Object case_sensitive_p, regexp_p, direction, match_word_p;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5097 Lisp_Object device = Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5098
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5099 if ((int) client_data == -1) name = "done"; /* WM_DELETE_WINDOW */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5100
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5101 while (parent && XtClass (parent) != xmDialogShellWidgetClass)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5102 parent = XtParent (parent);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5103 if (! parent) abort ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5104
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5105 if (!strcmp (name, "done"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5106 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5107 hide_search_dialog (parent, id);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5108 return;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5109 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5110 #if 0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5111 else if (!strcmp (name, "help"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5112 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5113 Lisp_Object v = Fmake_vector (3, Qt);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5114 vector_data (XVECTOR (v)) [0] = build_string ("ok");
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5115 vector_data (XVECTOR (v)) [1] = list1 (Qignore);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5116 Fpopup_dialog_box (list2 (build_string ("dbx_search_help"), v));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5117 return;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5118 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5119 #endif
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5120
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5121 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5122 struct device *d = get_device_from_display (XtDisplay (widget));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5123 XSETDEVICE (device, d);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5124 DEVICE_X_MOUSE_TIMESTAMP (d) = DEVICE_X_GLOBAL_MOUSE_TIMESTAMP (d);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5125 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5126
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5127 if (!strcmp (name, "gotoStart"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5128 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5129 signal_special_Xt_user_event (device, Qcall_interactively,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5130 Qbeginning_of_buffer);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5131 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5132 else if (!strcmp (name, "gotoEnd"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5133 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5134 signal_special_Xt_user_event (device, Qcall_interactively,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5135 Qend_of_buffer);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5136 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5137 else if (!strcmp (name, "scrollForward"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5138 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5139 signal_special_Xt_user_event (device, Qcall_interactively,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5140 Qscroll_up);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5141 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5142 else if (!strcmp (name, "scrollBack"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5143 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5144 signal_special_Xt_user_event (device, Qcall_interactively,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5145 Qdown_up);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5146 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5147 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5148 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5149 data = malloc_widget_value ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5150 data->name = "searchText";
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5151 if (! lw_get_some_values (id, data)) abort ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5152 search = build_string (data->value);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5153 data->name = "replaceText";
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5154 if (! lw_get_some_values (id, data)) abort ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5155 replace = build_string (data->value);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5156 data->name = "regexpSearch";
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5157 if (! lw_get_some_values (id, data)) abort ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5158 regexp_p = (data->selected ? Qt : Qnil);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5159 data->name = "caseSearch";
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5160 if (! lw_get_some_values (id, data)) abort ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5161 case_sensitive_p = (data->selected ? Qt : Qnil);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5162 data->name = "matchWord";
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5163 if (! lw_get_some_values (id, data)) abort ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5164 match_word_p = (data->selected ? Qt : Qnil);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5165
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5166 data->name = "directionForward";
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5167 if (! lw_get_some_values (id, data)) abort ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5168 direction = data->selected ? Qt : Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5169
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5170 if (!strcmp (name, "search"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5171 replace = Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5172 else if (!strcmp (name, "replace"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5173 ;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5174 else if (!strcmp (name, "replace_all"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5175 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5176 replace = list1 (replace);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5177 /* hide_search_dialog (parent, id); */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5178 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5179 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5180 abort ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5181
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5182 free_widget_value (data);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5183
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5184 signal_special_Xt_user_event (device,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5185 intern ("energize-search-internal"),
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5186 (NILP (replace)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5187 ? list5 (case_sensitive_p, match_word_p,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5188 regexp_p, direction, search)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5189 : list6 (case_sensitive_p, match_word_p,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5190 regexp_p, direction, search,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5191 replace)));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5192 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5193 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5194
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5195
20
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
5196 DEFUN ("energize-search", Fenergize_search, 0, 0, "", /*
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5197 Pop up the search-and-replace dialog box.
20
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
5198 */
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
5199 ())
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5200 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5201 int dbox_id;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5202 struct frame *f = selected_frame ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5203 widget_value *data;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5204 Widget parent, dbox;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5205 Lisp_Object frame = Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5206
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5207 XSETFRAME (frame, f);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5208 CHECK_X_FRAME (frame);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5209 parent = FRAME_X_SHELL_WIDGET (f);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5210
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5211 data = malloc_widget_value ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5212
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5213 dbox_id = (search_id ? search_id : new_lwlib_id());
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5214 dbox = lw_create_widget ("search", "search", dbox_id, NULL, parent,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5215 1, 0, search_callback, 0);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5216 data->enabled = 1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5217 data->value = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5218
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5219 data->name = "button1"; data->value = data->call_data = "search";
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5220 lw_modify_all_widgets (dbox_id, data, True);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5221 data->name = "button2"; data->value = data->call_data = "replace";
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5222 lw_modify_all_widgets (dbox_id, data, True);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5223 data->name = "button3"; data->value = data->call_data = "replace_all";
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5224 lw_modify_all_widgets (dbox_id, data, True);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5225 data->name = "button4"; data->value = data->call_data = "done";
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5226 lw_modify_all_widgets (dbox_id, data, True);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5227
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5228 data->value = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5229 data->name = data->call_data = "gotoStart";
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5230 lw_modify_all_widgets (dbox_id, data, True);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5231 data->name = data->call_data = "gotoEnd";
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5232 lw_modify_all_widgets (dbox_id, data, True);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5233 data->name = data->call_data = "scrollBack";
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5234 lw_modify_all_widgets (dbox_id, data, True);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5235 data->name = data->call_data = "scrollForward";
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5236 lw_modify_all_widgets (dbox_id, data, True);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5237
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5238 data->value = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5239 data->name = data->call_data = "caseSearch";
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5240 data->selected = NILP (current_buffer->case_fold_search);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5241 lw_modify_all_widgets (dbox_id, data, True);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5242
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5243 data->name = data->call_data = "directionForward";
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5244 data->selected = 1;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5245 lw_modify_all_widgets (dbox_id, data, True);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5246 data->name = data->call_data = "directionBackward";
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5247 data->selected = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5248 lw_modify_all_widgets (dbox_id, data, True);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5249
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5250 free_widget_value (data);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5251
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5252 lw_pop_up_all_widgets (dbox_id);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5253 last_search_up_p = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5254 if (search_id)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5255 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5256 Widget w = lw_get_widget (dbox_id, parent, True);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5257 if (! w) abort ();
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5258 XMapRaised (XtDisplay (w), XtWindow (w));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5259 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5260 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5261 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5262 search_id = dbox_id;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5263 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5264
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5265 return Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5266 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5267
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5268
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5269
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5270 /*************** Definition of Emacs Lisp-callable functions ***************/
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5271
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5272 void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5273 syms_of_energize (void)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5274 {
20
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
5275 DEFSUBR (Fenergize_send_buffer_modified);
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
5276 DEFSUBR (Fenergize_list_menu);
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
5277 DEFSUBR (Fenergize_execute_menu_item);
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
5278 DEFSUBR (Fenergize_execute_command_internal);
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
5279 DEFSUBR (Fconnect_to_energize_internal);
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
5280 DEFSUBR (Fconnected_to_energize_p);
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
5281 DEFSUBR (Fclose_connection_to_energize);
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
5282 DEFSUBR (Fhandle_energize_request);
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
5283 DEFSUBR (Fenergize_buffer_p);
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
5284 DEFSUBR (Fenergize_buffer_type);
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
5285 DEFSUBR (Fset_energize_buffer_type_internal);
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
5286 DEFSUBR (Fenergize_buffer_id);
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
5287 DEFSUBR (Fenergize_request_kill_buffer);
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
5288 DEFSUBR (Fenergize_send_region);
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
5289 DEFSUBR (Fenergize_user_input_buffer_mark);
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
5290 DEFSUBR (Fenergize_update_menubar);
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
5291 DEFSUBR (Fenergize_extent_menu_p);
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
5292 DEFSUBR (Fenergize_query_buffer);
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
5293 DEFSUBR (Fenergize_barf_if_buffer_locked);
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
5294 DEFSUBR (Fenergize_psheets_visible_p);
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
5295 DEFSUBR (Fenergize_buffer_has_psheets_p);
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
5296 DEFSUBR (Fenergize_toggle_psheet);
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
5297 DEFSUBR (Fenergize_protocol_level);
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
5298 DEFSUBR (Fenergize_edit_mode_prompt);
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
5299 DEFSUBR (Fenergize_search);
859a2309aef8 Import from CVS: tag r19-15b93
cvs
parents: 14
diff changeset
5300 DEFSUBR (Fextent_to_generic_id);
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5301
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5302 defsymbol (&Qenergize_create_buffer_hook, "energize-create-buffer-hook");
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5303 defsymbol (&Qenergize_buffer_modified_hook, "energize-buffer-modified-hook");
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5304
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5305 defsymbol (&Qenergize_kernel_busy, "energize-kernel-busy");
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5306
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5307 defsymbol (&Qenergize_kernel_busy_hook, "energize-kernel-busy-hook");
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5308 defsymbol (&Qenergize_menu_update_hook, "energize-menu-update-hook");
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5309 defsymbol (&Qbuffer_locked_by_energize, "buffer-locked-by-energize");
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5310 defsymbol (&Qenergize_user_input_buffer_mark,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5311 "energize-user-input-buffer-mark");
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5312 defsymbol (&Qenergize_make_many_buffers_visible,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5313 "energize-make-many-buffers-visible");
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5314 defsymbol (&Qenergize, "energize");
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5315 defsymbol (&Qenergize_auto_revert_buffer, "energize-auto-revert-buffer");
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5316 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5317
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5318 void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5319 vars_of_energize (void)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5320 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5321 energize_connection = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5322 inside_process_energize_request_1 = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5323
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5324 staticpro (&Venergize_buffers_list);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5325 Venergize_buffers_list = Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5326
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5327 staticpro (&Vall_energize_pixmaps);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5328 Vall_energize_pixmaps = Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5329
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5330 Fprovide (intern ("energize"));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5331
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5332 search_id = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5333
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5334 DEFVAR_LISP ("energize-process", &Venergize_process /*
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5335 The Lisp object representing the Energize connection, or nil
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5336 */ );
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5337 Venergize_process = Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5338
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5339 DEFVAR_LISP ("energize-create-buffer-hook", &Venergize_create_buffer_hook /*
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5340 Hook called when buffer is created by energize; takes
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5341 BUFFER as its only argument.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5342 */ );
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5343 Venergize_create_buffer_hook = Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5344
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5345
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5346 DEFVAR_LISP ("energize-kernel-modification-hook",
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5347 &Venergize_kernel_modification_hook /*
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5348 Hook called when a buffer is being modified by energize;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5349 takes no arguments.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5350 */ );
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5351 Venergize_kernel_modification_hook = Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5352
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5353 DEFVAR_BOOL ("ignore-kernel",
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5354 &ignore_kernel /*
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5355 Set when the kernel should be ignored -- for debugging.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5356 */ );
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5357 ignore_kernel = 0;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5358
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5359 DEFVAR_LISP ("energize-kernel-busy", &Venergize_kernel_busy /*
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5360 True if the Energize kernel is busy.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5361 */ );
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5362 Venergize_kernel_busy = Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5363 DEFVAR_LISP ("energize-kernel-busy-hook", &Venergize_kernel_busy_hook /*
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5364 Hook called when the Energize kernel becomes busy or non busy.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5365 */ );
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5366 Venergize_kernel_busy_hook = Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5367
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5368 DEFVAR_LISP ("energize-menu-update-hook", &Venergize_menu_update_hook /*
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5369 Hook called when the Energize kernel updates the menubar.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5370 */ );
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5371 Venergize_menu_update_hook = Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5372
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5373 DEFVAR_LISP ("energize-attributes-mapping", &Venergize_attributes_mapping /*
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5374 A-list to map kernel attributes indexes to Emacs attributes
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5375 */ );
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5376 Venergize_attributes_mapping = Qnil;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5377
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5378 DEFVAR_INT ("energize-extent-gc-threshold", &energize_extent_gc_threshold /*
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5379 Number of extents in a ModifyBuffer request above which to do a GC
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5380 */ );
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5381 energize_extent_gc_threshold = 20;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5382
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5383 pure_put (Qbuffer_locked_by_energize, Qerror_conditions,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5384 list2 (Qbuffer_locked_by_energize, Qerror));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5385 pure_put (Qbuffer_locked_by_energize, Qerror_message,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5386 build_string ("Buffer is currently locked by kernel"));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5387 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5388
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5389 void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5390 complex_vars_of_energize (void)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5391 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5392 image_cache = make_strings_hashtable (50);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5393 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5394
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5395 #endif /* ENERGIZE */