20 |
*/ |
*/ |
21 |
|
|
22 |
#include "arshell.h" |
#include "arshell.h" |
23 |
|
#include <ctype.h> |
24 |
|
|
25 |
XmTextPosition |
XmTextPosition |
26 |
arshell_end_of_word(XmTextPosition start) |
arshell_end_of_word(XmTextPosition start) |
93 |
} |
} |
94 |
|
|
95 |
void |
void |
96 |
arshell_wrap_toggle_cb(Widget widget, XtPointer client_data, XtPointer call_data) |
arshell_wrap_toggle_cb() |
97 |
{ |
{ |
98 |
arshell.edit.search_options.wrap= |
arshell.edit.search_options.wrap= |
99 |
XmToggleButtonGetState(arshell.edit.search_options.wrap_toggle); |
XmToggleButtonGetState(arshell.edit.search_options.wrap_toggle); |
101 |
arshell.edit.search_options.wrap, True); |
arshell.edit.search_options.wrap, True); |
102 |
} |
} |
103 |
void |
void |
104 |
arshell_preserve_toggle_cb(Widget widget, XtPointer client_data, XtPointer call_data) |
arshell_preserve_toggle_cb() |
105 |
{ |
{ |
106 |
arshell.edit.search_options.preserve= |
arshell.edit.search_options.preserve= |
107 |
XmToggleButtonGetState(arshell.edit.search_options.preserve_toggle); |
XmToggleButtonGetState(arshell.edit.search_options.preserve_toggle); |
108 |
} |
} |
109 |
void |
void |
110 |
arshell_replace_toggle_cb(Widget widget, XtPointer client_data, XtPointer call_data) |
arshell_replace_toggle_cb() |
111 |
{ |
{ |
112 |
arshell.edit.search_options.replace= |
arshell.edit.search_options.replace= |
113 |
XmToggleButtonGetState(arshell.edit.search_options.replace_toggle); |
XmToggleButtonGetState(arshell.edit.search_options.replace_toggle); |
114 |
ARBUG; |
|
115 |
if(arshell.edit.search_options.replace) |
if(arshell.edit.search_options.replace) |
116 |
{ |
{ |
117 |
ARBUG; |
|
118 |
ARCLARG; |
ARCLARG; |
119 |
antiright_set(XmNsensitive, True); |
antiright_set(XmNsensitive, True); |
120 |
antiright_set_values(arshell.edit.replace_widget); |
antiright_set_values(arshell.edit.replace_widget); |
121 |
ARBUG; |
|
122 |
antiright_set_values(arshell.edit.search_options.replace_label); |
antiright_set_values(arshell.edit.search_options.replace_label); |
123 |
ARCLARG; |
ARCLARG; |
124 |
ARBUG; |
|
125 |
} |
} |
126 |
else |
else |
127 |
{ |
{ |
133 |
} |
} |
134 |
} |
} |
135 |
void |
void |
136 |
arshell_replace_all_toggle_cb(Widget widget, XtPointer client_data, XtPointer call_data) |
arshell_ignore_case_toggle_cb() |
137 |
{ |
{ |
138 |
arshell.edit.search_options.replace_all= |
arshell.edit.search_options.ignore_case= |
139 |
XmToggleButtonGetState(arshell.edit.search_options.replace_all_toggle); |
XmToggleButtonGetState(arshell.edit.search_options.ignore_case_toggle); |
|
XmToggleButtonSetState(arshell.edit.search_options.replace_toggle, |
|
|
arshell.edit.search_options.replace_all, True); |
|
|
arshell_replace_toggle_cb(widget, client_data, call_data); |
|
140 |
} |
} |
141 |
|
|
142 |
void |
void |
146 |
{ |
{ |
147 |
XmTextPosition position; |
XmTextPosition position; |
148 |
char *search_string; |
char *search_string; |
149 |
ARBUG; |
char *backup_text=NULL; |
150 |
|
/* The find widget is always used. */ |
151 |
|
search_string=XmTextFieldGetString(arshell.edit.find_widget); |
152 |
|
assert(search_string != NULL); |
153 |
|
if(XmToggleButtonGetState(arshell.edit.search_options.ignore_case_toggle)) |
154 |
|
{ |
155 |
|
/* Convert the text buffer and search string to lower case so |
156 |
|
that case is not a factor in the search. */ |
157 |
|
int counter=0; |
158 |
|
char *lowered_buffer; |
159 |
|
while(search_string[counter]!='\0') |
160 |
|
{ |
161 |
|
search_string[counter]=tolower(search_string[counter]); |
162 |
|
counter++; |
163 |
|
} |
164 |
|
backup_text=XmTextGetString(arshell.gui.widgets.work); |
165 |
|
lowered_buffer=XmTextGetString(arshell.gui.widgets.work); |
166 |
|
counter=0; |
167 |
|
while(lowered_buffer[counter]!='\0') |
168 |
|
{ |
169 |
|
lowered_buffer[counter]=tolower(lowered_buffer[counter]); |
170 |
|
counter++; |
171 |
|
} |
172 |
|
XmTextSetString(arshell.gui.widgets.work, lowered_buffer); |
173 |
|
} |
174 |
|
client_data=NULL; |
175 |
|
|
176 |
if(arshell.edit.search_options.replace) |
if(arshell.edit.search_options.replace) |
177 |
{ |
{ |
178 |
XmTextPosition end_position; |
XmTextPosition end_position; |
179 |
char *replacement_string; |
char *replacement_string; |
180 |
Boolean search_status; |
|
|
ARBUG; |
|
|
search_string=XmTextFieldGetString(arshell.edit.find_widget); |
|
|
ARBUG; |
|
181 |
XmTextFindString(arshell.gui.widgets.work, |
XmTextFindString(arshell.gui.widgets.work, |
182 |
XmTextGetInsertionPosition(arshell.gui.widgets.work), |
XmTextGetInsertionPosition(arshell.gui.widgets.work), |
183 |
search_string, |
search_string, |
184 |
arshell.edit.search_options.direction, |
arshell.edit.search_options.direction, |
185 |
&position); |
&position); |
186 |
ARBUG; |
/* Restore the buffer if it was converted to lower case during a |
187 |
|
search with "Ignore Case" set. */ |
188 |
|
if(XmToggleButtonGetState(arshell.edit.search_options.ignore_case_toggle)) |
189 |
|
{ |
190 |
|
XmTextSetString(arshell.gui.widgets.work, backup_text); |
191 |
|
XtFree(backup_text); |
192 |
|
} |
193 |
|
|
194 |
XtFree(search_string); |
XtFree(search_string); |
195 |
ARBUG; |
|
196 |
XmTextFindString(arshell.gui.widgets.work, |
XmTextFindString(arshell.gui.widgets.work, |
197 |
position, |
position, |
198 |
" ", |
" ", |
199 |
XmTEXT_FORWARD, |
XmTEXT_FORWARD, |
200 |
&end_position); |
&end_position); |
201 |
ARBUG; |
|
202 |
replacement_string=XmTextFieldGetString(arshell.edit.replace_widget); |
replacement_string=XmTextFieldGetString(arshell.edit.replace_widget); |
203 |
if(end_position>position) |
if(end_position>position) |
204 |
{ |
{ |
205 |
ARBUG; |
|
206 |
XmTextReplace(arshell.gui.widgets.work, position, end_position, |
XmTextReplace(arshell.gui.widgets.work, position, end_position, |
207 |
replacement_string); |
replacement_string); |
208 |
ARBUG; |
|
209 |
} |
} |
210 |
else |
else |
211 |
{ |
{ |
212 |
ARBUG; |
|
213 |
if(arshell.edit.search_options.wrap && !arshell.edit.search_options.wrapped) |
if(arshell.edit.search_options.wrap |
214 |
|
&& !arshell.edit.search_options.wrapped) |
215 |
{ |
{ |
216 |
ARBUG; |
|
217 |
arshell.edit.search_options.direction=XmTEXT_BACKWARD; |
arshell.edit.search_options.direction=XmTEXT_BACKWARD; |
218 |
arshell.edit.search_options.wrapped=True; |
arshell.edit.search_options.wrapped=True; |
219 |
ARBUG; |
|
220 |
} |
} |
221 |
else |
else |
222 |
{ |
{ |
223 |
arshell.edit.search_options.preserve=False; |
arshell.edit.search_options.preserve=False; |
224 |
} |
} |
225 |
ARBUG; |
|
226 |
} |
} |
227 |
ARBUG; |
|
228 |
XtFree(replacement_string); |
XtFree(replacement_string); |
229 |
XmTextSetInsertionPosition(arshell.gui.widgets.work, position); |
if(arshell.edit.search_options.direction==XmTEXT_FORWARD) |
230 |
|
XmTextSetInsertionPosition(arshell.gui.widgets.work, |
231 |
|
arshell_end_of_word(position)); |
232 |
|
else |
233 |
|
XmTextSetInsertionPosition(arshell.gui.widgets.work, position-1); |
234 |
|
/* The above use of the position before POSITION prevents |
235 |
|
the current word from being the highlighted search result |
236 |
|
when the search directoion is BACKWARD. */ |
237 |
|
XmTextSetSelection(arshell.gui.widgets.work, position, |
238 |
|
arshell_end_of_word(position), |
239 |
|
XtLastTimestampProcessed(antiright.display)); |
240 |
if(arshell.edit.search_options.preserve) |
if(arshell.edit.search_options.preserve) |
241 |
XtManageChild(widget); |
XtManageChild(widget); |
242 |
call_data=NULL; |
call_data=NULL; |
243 |
ARBUG; |
|
244 |
} |
} |
245 |
else |
else |
246 |
{ |
{ |
|
XmSelectionBoxCallbackStruct *prompt_data; |
|
247 |
Boolean result; |
Boolean result; |
248 |
ARBUG; |
|
249 |
search_string=XmTextFieldGetString(arshell.edit.find_widget); |
|
250 |
assert(search_string != NULL); |
|
|
ARBUG; |
|
251 |
assert(arshell.gui.widgets.work != NULL); |
assert(arshell.gui.widgets.work != NULL); |
252 |
|
|
253 |
result=XmTextFindString(arshell.gui.widgets.work, |
result=XmTextFindString(arshell.gui.widgets.work, |
254 |
XmTextGetInsertionPosition(arshell.gui.widgets.work), |
XmTextGetInsertionPosition |
255 |
|
(arshell.gui.widgets.work), |
256 |
search_string, |
search_string, |
257 |
arshell.edit.search_options.direction, |
arshell.edit.search_options.direction, |
258 |
&position); |
&position); |
259 |
ARBUG; |
/* Restore the buffer if it was converted to lower case during a |
260 |
|
search with "Ignore Case" set. */ |
261 |
|
if(XmToggleButtonGetState(arshell.edit.search_options.ignore_case_toggle)) |
262 |
|
{ |
263 |
|
XmTextSetString(arshell.gui.widgets.work, backup_text); |
264 |
|
XtFree(backup_text); |
265 |
|
} |
266 |
|
|
267 |
if(result) |
if(result) |
268 |
{ |
{ |
269 |
ARBUG; |
|
270 |
XmTextSetInsertionPosition(arshell.gui.widgets.work, position); |
XmTextSetSelection(arshell.gui.widgets.work, position, |
271 |
|
arshell_end_of_word(position), |
272 |
|
XtLastTimestampProcessed(antiright.display)); |
273 |
|
if(arshell.edit.search_options.direction==XmTEXT_FORWARD) |
274 |
|
XmTextSetInsertionPosition(arshell.gui.widgets.work, |
275 |
|
arshell_end_of_word(position)); |
276 |
|
else |
277 |
|
XmTextSetInsertionPosition(arshell.gui.widgets.work, position-1); |
278 |
|
/* The above use of the position before POSITION prevents |
279 |
|
the current word from being the highlighted search result |
280 |
|
when the search directoion is BACKWARD. */ |
281 |
} |
} |
282 |
else |
else |
283 |
{ |
{ |
284 |
ARBUG; |
|
285 |
if(XmToggleButtonGetState(arshell.edit.search_options.wrap_toggle)) |
if(XmToggleButtonGetState(arshell.edit.search_options.wrap_toggle)) |
286 |
{ |
{ |
287 |
ARBUG; |
|
288 |
arshell.edit.search_options.direction=XmTEXT_BACKWARD; |
arshell.edit.search_options.direction=XmTEXT_BACKWARD; |
289 |
XmToggleButtonSetState(arshell.edit.search_options.preserve_toggle, |
XmToggleButtonSetState |
290 |
True, False); |
(arshell.edit.search_options.preserve_toggle, True, False); |
291 |
XmToggleButtonSetState(arshell.edit.search_options.wrap_toggle, |
XmToggleButtonSetState(arshell.edit.search_options.wrap_toggle, |
292 |
False, False); |
False, False); |
293 |
} |
} |
294 |
ARBUG; |
|
295 |
} |
} |
296 |
ARBUG; |
|
297 |
if(XmToggleButtonGetState(arshell.edit.search_options.preserve_toggle)) |
if(XmToggleButtonGetState(arshell.edit.search_options.preserve_toggle)) |
298 |
XtManageChild(widget); |
XtManageChild(widget); |
299 |
ARBUG; |
|
300 |
XtFree(search_string); |
XtFree(search_string); |
301 |
ARBUG; |
|
302 |
} |
} |
303 |
} |
} |
304 |
|
|
352 |
arshell.edit.search_options.replace_toggle= |
arshell.edit.search_options.replace_toggle= |
353 |
XmCreateToggleButton(form, "Replace", ARARGS); |
XmCreateToggleButton(form, "Replace", ARARGS); |
354 |
XtManageChild(arshell.edit.search_options.replace_toggle); |
XtManageChild(arshell.edit.search_options.replace_toggle); |
355 |
XtAddCallback(arshell.edit.search_options.replace_toggle, XmNvalueChangedCallback, |
XtAddCallback(arshell.edit.search_options.replace_toggle, |
356 |
arshell_replace_toggle_cb, NULL); |
XmNvalueChangedCallback, arshell_replace_toggle_cb, NULL); |
357 |
ARCLARG; |
ARCLARG; |
358 |
antiright_form_positions(50, 75, 50, 100); |
antiright_form_positions(50, 75, 50, 100); |
359 |
arshell.edit.search_options.wrap_toggle=XmCreateToggleButton(form, "Wrap", ARARGS); |
arshell.edit.search_options.wrap_toggle=XmCreateToggleButton(form, "Wrap", |
360 |
|
ARARGS); |
361 |
XtManageChild(arshell.edit.search_options.wrap_toggle); |
XtManageChild(arshell.edit.search_options.wrap_toggle); |
362 |
XtAddCallback(arshell.edit.search_options.wrap_toggle, XmNvalueChangedCallback, |
XtAddCallback(arshell.edit.search_options.wrap_toggle, |
363 |
arshell_wrap_toggle_cb, NULL); |
XmNvalueChangedCallback, arshell_wrap_toggle_cb, NULL); |
364 |
ARCLARG; |
ARCLARG; |
365 |
antiright_form_positions(75, 100, 0, 50); |
antiright_form_positions(75, 100, 0, 50); |
366 |
arshell.edit.search_options.replace_all_toggle= |
arshell.edit.search_options.ignore_case_toggle= |
367 |
XmCreateToggleButton(form, "Replace All", ARARGS); |
XmCreateToggleButton(form, "Ignore Case", ARARGS); |
368 |
XtManageChild(arshell.edit.search_options.replace_all_toggle); |
XtManageChild(arshell.edit.search_options.ignore_case_toggle); |
369 |
XtAddCallback(arshell.edit.search_options.replace_all_toggle, XmNvalueChangedCallback, |
XtAddCallback(arshell.edit.search_options.ignore_case_toggle, |
370 |
arshell_replace_all_toggle_cb, NULL); |
XmNvalueChangedCallback, arshell_ignore_case_toggle_cb, NULL); |
371 |
ARCLARG; |
ARCLARG; |
372 |
antiright_form_positions(75, 100, 50, 100); |
antiright_form_positions(75, 100, 50, 100); |
373 |
arshell.edit.search_options.preserve_toggle= |
arshell.edit.search_options.preserve_toggle= |
374 |
XmCreateToggleButton(form, "Preserve Dialog", ARARGS); |
XmCreateToggleButton(form, "Preserve Dialog", ARARGS); |
375 |
XtManageChild(arshell.edit.search_options.preserve_toggle); |
XtManageChild(arshell.edit.search_options.preserve_toggle); |
376 |
XtAddCallback(arshell.edit.search_options.preserve_toggle, XmNvalueChangedCallback, |
XtAddCallback(arshell.edit.search_options.preserve_toggle, |
377 |
arshell_preserve_toggle_cb, NULL); |
XmNvalueChangedCallback, arshell_preserve_toggle_cb, NULL); |
378 |
|
|
379 |
XtAddCallback(prompt, |
XtAddCallback(prompt, |
380 |
XmNokCallback, |
XmNokCallback, |