Widget text_w, search_w, replace_w, text_output;
main(argc, argv)
int argc;
char *argv[];
{
...
replace_w = XtVaCreateManagedWidget ("replace_text",
xmTextFieldWidgetClass, rowcol_h, NULL);
XtAddCallback (replace_w, XmNactivateCallback, search_and_replace, NULL);
...
}
void
search_and_replace(widget, client_data, call_data)
Widget widget;
XtPointer client_data;
XtPointer call_data;
{
char *search_pat, *p, *string, *new_pat, buf[32];
XmTextPosition pos;
int search_len, pattern_len;
int nfound = 0;
string = XmTextGetString (text_w);
if (!*string) {
XmTextSetString (text_output, "No text to search.");
XtFree (string);
return;
}
search_pat = XmTextGetString (search_w);
if (!*search_pat) {
XmTextSetString (text_output, "Specify a search pattern.");
XtFree (string);
XtFree (search_pat);
return;
}
new_pat = XmTextGetString (replace_w);
search_len = strlen (search_pat);
pattern_len = strlen (new_pat);
/* start at beginning and search entire Text widget */
for (p = string; p = index (p, *search_pat); p++)
if (!strncmp (p, search_pat, search_len)) {
nfound++;
/* get the position where pattern was found */
pos = (XmTextPosition)(p−string);
/* replace the text from our position + strlen (new_pat) */
XmTextReplace (text_w, pos, pos + search_len, new_pat);
/* "string" has changed −− we must get the new version */
XtFree (string); /* free the one we had first... */
string = XmTextGetString (text_w);
/* continue search for next pattern −after− replacement */
p = &string[pos + pattern_len]; ...