Пример #1
0
static int motTextSetSelectionAttrib(Ihandle* ih, const char* value)
{
  int start=1, end=1;

  if (!value || iupStrEqualNoCase(value, "NONE"))
  {
    XmTextClearSelection(ih->handle, CurrentTime);
    return 0;
  }

  if (iupStrEqualNoCase(value, "ALL"))
  {
    XmTextSetSelection(ih->handle, (XmTextPosition)0, (XmTextPosition)XmTextGetLastPosition(ih->handle), CurrentTime);
    return 0;
  }

  if (ih->data->is_multiline)
  {
    int lin_start=1, col_start=1, lin_end=1, col_end=1;
    char *str;

    if (sscanf(value, "%d,%d:%d,%d", &lin_start, &col_start, &lin_end, &col_end)!=4) return 0;
    if (lin_start<1 || col_start<1 || lin_end<1 || col_end<1) return 0;

    str = XmTextGetString(ih->handle);
    start = motTextSetLinColToPosition(str, lin_start, col_start);
    end = motTextSetLinColToPosition(str, lin_end, col_end);
    XtFree(str);
  }
  else
  {
    if (iupStrToIntInt(value, &start, &end, ':')!=2) 
      return 0;

    if(start<1 || end<1) 
      return 0;

    start--; /* IUP starts at 1 */
    end--;
  }

  /* end is inside the selection, in IUP is outside */
  end--;

  XmTextSetSelection(ih->handle, (XmTextPosition)start, (XmTextPosition)end, CurrentTime);

  return 0;
}
Пример #2
0
void Doit(Widget w, XtPointer client, XtPointer call)
{
	char	*s = (char *)client;
	String	v = NULL;
	short	rows;

	fprintf(stderr, "Callback %s, widget value '%s'\n", s, XmTextGetString(w));

	XtVaGetValues(w,
		XmNvalue,	&v,
		XmNrows,	&rows,
	    NULL);

	fprintf(stderr, "GetValues => value '%s', rows %d\n", v, rows);
	XtFree(v);
}
Пример #3
0
int GetIntText(Widget text, int *value)
{
    char *strValue, *endPtr;
    int retVal;

    strValue = XmTextGetString(text);		/* Get Value */
    removeWhiteSpace(strValue);			/* Remove blanks and tabs */
    *value = strtol(strValue, &endPtr, 10);	/* Convert string to long */
    if (strlen(strValue) == 0)			/* String is empty */
	retVal = TEXT_IS_BLANK;
    else if (*endPtr != '\0')			/* Whole string not parsed */
    	retVal = TEXT_NOT_NUMBER;
    else
	retVal = TEXT_READ_OK;
    XtFree(strValue);
    return retVal;
}
Пример #4
0
static void CloseAll(Widget w, void *userData,
		     XmAnyCallbackStruct *callData)
{
  char *p, *str;
  int paren_count = 0;
  str = XmTextGetString(appData->com_text);
  MEM_ALLOC_NOTIFY(str);
  for(p=str;*p;p++) {
    if(*p == '(') paren_count++;
    else if(*p == ')') paren_count--;
  }
  if(paren_count < 0) ErrorPopup("Missing left parenthesis");
  else while(paren_count) {
    AppendComText(")"); paren_count--;
  }
  free(str);
}
Пример #5
0
int save_listener_text(FILE *fp)
{
  /* return -1 if fwrite problem */
  if (listener_text)
    {
      char *str = NULL;
      str = XmTextGetString(listener_text);
      if (str)
	{
	  size_t bytes;
	  bytes = fwrite((void *)str, sizeof(char), snd_strlen(str), fp);
	  XtFree(str);
	  if (bytes == 0) return(-1);
	}
    }
  return(0);
}
Пример #6
0
static void command_modify_callback(Widget w, XtPointer context, XtPointer info)
{
  XmTextVerifyCallbackStruct *cbs = (XmTextVerifyCallbackStruct *)info;
  if (((cbs->text)->length > 0) || (dont_check_motion))
    cbs->doit = true;
  else
    { 
      char *str = NULL, *prompt;
      int len;
      prompt = listener_prompt(ss);
      str = XmTextGetString(w);
      len = XmTextGetLastPosition(w);
      if (within_prompt(str, cbs->startPos, len))
	cbs->doit = false;
      else cbs->doit = true;
      if (str) XtFree(str);
    }
}
Пример #7
0
static void attr_activate_cmd_scrolled_ok(
    Widget w, AttrMotif* attr, XmAnyCallbackStruct* data)
{
  char* text;
  int sts;

  text = XmTextGetString(attr->cmd_scrolledinput);
  if (attr->input_open) {
    sts = ((AttrNav*)attr->attrnav)->set_attr_value(text);
    XtUnmanageChild(attr->cmd_scrolledinput);
    XtUnmanageChild(attr->cmd_scrolled_ok);
    XtUnmanageChild(attr->cmd_scrolled_ca);
    attr->set_prompt("");
    attr->input_open = 0;
    if (attr->redraw_cb)
      (attr->redraw_cb)(attr);
  }
}
Пример #8
0
static char* motTextGetLineValueAttrib(Ihandle* ih)
{
  if (ih->data->is_multiline)
  {
    int lin, col, start, end;
    char* str = iupStrGetMemory(200);
    char *value = XmTextGetString(ih->handle);
    XmTextPosition pos = XmTextGetInsertionPosition(ih->handle);
    motTextGetLinColFromPosition(value, pos, &lin, &col);
    start = motTextSetLinColToPosition(value, lin, 1);
    end = motTextSetLinColToPosition(value, lin, 20000);
    XtFree(value);
    XmTextGetSubstring(ih->handle, start, end-start, 200, str);  /* do not include the EOL */
    return str;
  }
  else
    return motTextGetValueAttrib(ih);
}
Пример #9
0
void GUI_GeneralFreqTextField(Widget w,XtPointer client,XtPointer call){
  struct CSlider *cslider=(struct CSlider *)client;
  char *valstring=XmTextGetString(cslider->freqtextwidget);
  char text[20];
  double value=GUI_pitch2freq(valstring);
  XtFree(valstring);

  if(cslider->islog){
    double ai;
    if(value==0.0f) value=0.000001f;
    ai=((log(value)/log(cslider->maxval))-cslider->logval)*(1/(1-cslider->logval));
    XtVaSetValues(cslider->sliderwidget,
		  XmNvalue,
#ifdef USELESSTIF
		  MAXSLIDERVAL-(int)min(MAXSLIDERVAL,max(0,(ai*MAXSLIDERVAL))),
#else
		  (int)min(MAXSLIDERVAL,max(0,(ai*MAXSLIDERVAL))),
#endif
		  NULL
		  );
  }else{
    XtVaSetValues(cslider->sliderwidget,
		  XmNvalue,
#ifdef USELESSTIF
		  MAXSLIDERVAL-min(MAXSLIDERVAL,(int)(MAXSLIDERVAL*(value-cslider->minval)/(cslider->maxval-cslider->minval))),
#else
		  min(MAXSLIDERVAL,(int)(MAXSLIDERVAL*(value-cslider->minval)/(cslider->maxval-cslider->minval))),
#endif
		  NULL
		  );
  }

  if(cslider->isdouble){
    sprintf(text,"%.*f",cslider->resolution,value);
    GUI_CallCallBackDouble(cslider,value);
  }else{
    sprintf(text,"%d",(int)value);
    GUI_CallCallBackInt(cslider,(int)value);
  }
  
  XtRemoveCallback(cslider->textwidget,XmNvalueChangedCallback,GUI_GeneralTextField,cslider);
  XmTextSetString(cslider->textwidget,text);
  XtAddCallback(cslider->textwidget,XmNvalueChangedCallback,GUI_GeneralTextField,cslider);
}
Пример #10
0
void WdaMotif::activate_cmd_input( Widget w, WdaMotif *wda, XmAnyCallbackStruct *data)
{
  char *text;
  int sts;

  text = XmTextGetString( w);
  if ( wda->input_open)
  {
    sts = ((WdaNav *)wda->wdanav)->set_attr_value( wda->input_node, 
		wda->input_name, text);
    XtUnmanageChild( w);
    wda->set_prompt( "");
    wda->input_open = 0;
    if ( wda->redraw_cb)
      (wda->redraw_cb)( wda);

    ((WdaNav *)wda->wdanav)->set_inputfocus();
  }
}
Пример #11
0
Файл: motif.c Проект: E-LLP/QuIP
const char *get_text(Screen_Obj *sop)
{
#ifdef HAVE_MOTIF
	char *s, *p;
	int len;

	p = XmTextGetString(sop->so_obj);
	len = strlen(p);
	/* BUG?  memory leak?  when is the strdup string freed? */
	if (len ==  0)
		s = (char *) NULL;
	else
		s = strdup(p);

	XtFree(p);
	return s;
#endif /* HAVE_MOTIF */
	return "NO MOTIF!?";
}
Пример #12
0
void XAttMotif::activate_cmd_input( Widget w, XAtt *xatt, XmAnyCallbackStruct *data)
{
    char *text;
    int sts;

    text = XmTextGetString( w);
    if ( xatt->input_open)
    {
        sts = xatt->xattnav->set_attr_value( xatt->input_node,
                                             xatt->input_name, text);
        XtUnmanageChild( w);
        xatt->set_prompt( "");
        xatt->input_open = 0;
        if ( xatt->redraw_cb)
            (xatt->redraw_cb)( xatt);

        xatt->xattnav->set_inputfocus();
    }
}
Пример #13
0
int GetIntTextWarn(Widget text, int *value, char *fieldName, int warnBlank)
{
    int result;
    char *valueStr;
    
    result = GetIntText(text, value);
    if (result == TEXT_READ_OK || (result == TEXT_IS_BLANK && !warnBlank))
    	return result;
    valueStr = XmTextGetString(text);
    if (result == TEXT_IS_BLANK)
    	DialogF (DF_ERR, text, 1, "Please supply a value for %s",
    		 "Acknowledged", fieldName);
    else /* TEXT_NOT_NUMBER */
    	DialogF (DF_ERR, text, 1,
    		 "Can't read integer value \"%s\" in %s",
    		 "Acknowledged", valueStr, fieldName);
    XtFree(valueStr);
    return result;
}
Пример #14
0
int GetFloatTextWarn(Widget text, double *value, char *fieldName, int warnBlank)
{
    int result;
    char *valueStr;
    
    result = GetFloatText(text, value);
    if (result == TEXT_READ_OK || (result == TEXT_IS_BLANK && !warnBlank))
    	return result;
    valueStr = XmTextGetString(text);
    if (result == TEXT_IS_BLANK)
    	DialogF (DF_ERR, text, 1, "Please supply %s value",
    		 "Acknowledged", fieldName);
    else /* TEXT_NOT_NUMBER */
    	DialogF (DF_ERR, text, 1,
    		 "Can't read %s value: \"%s\"",
    		 "Acknowledged", fieldName, valueStr);
    XtFree(valueStr);
    return result;
}
Пример #15
0
static void Remove_rpg_user()
{
    char *username_string = NULL;
    char buf[ 250 ] = "";
    char output_buffer[ MAX_TEXT_OUTPUT_SIZE ] = "";
    int return_code = -1;
    int n_bytes = -1;

    HCI_LE_log( "Removing RPG user" );

    /* Fetch username from appropriate widget. */

    username_string = XmTextGetString( Username_input );

    /* If username is of length zero, then warn user. */

    if( strlen( username_string ) != 0 )
    {
        /* Delete RPG user from system. */

        sprintf( buf, "/usr/sbin/userdel -r %s", username_string );
        return_code = MISC_system_to_buffer( buf, output_buffer,
                                             MAX_TEXT_OUTPUT_SIZE, &n_bytes );
        return_code = return_code >> 8;

        if( return_code != 0 )
        {
            HCI_LE_error( "userdel command failed: %d", return_code );
            sprintf( buf, "\nError removing RPG User %s.\n",
                     username_string );
            strcat( output_buffer, buf );
            Error_popup( output_buffer );
        }
        else
        {
            XtVaSetValues( Password_input, XmNvalue, "", NULL );
            XtVaSetValues( Retype_password_input, XmNvalue, "", NULL );
            XtVaSetValues( Username_input, XmNvalue, "select user", NULL );
        }

        Remove_user_from_operate_rpg_file( username_string );
    }
Пример #16
0
void Browser::placeMark()
{
    int i;
    int line_no;
    char mark_str[2];

    mark_str[0] = '\001';
    mark_str[1] = '\0';

    theIBMApplication->setBusyCursor(TRUE);
    char *str = XmTextGetString(this->text);

    this->clearMark();

    //
    // Calc where it should go
    //
    unsigned long pos = XmTextGetInsertionPosition(this->text);
    this->marker_pos = this->page_start + pos;

    line_no = 0;
    for(i = 0; i < pos; i++)
    {
	if(str[i] == '\n') line_no++;
    }
    this->marker_line_no = this->page_start_line_no + line_no;
    this->updateOffsets(pos);
    
    //
    // Save the marker character
    //
    this->marker_char[0] = str[pos];

    this->ignore_cb = True;
    XmTextReplace(this->text, pos, pos+1, mark_str);
    this->ignore_cb = False;

    XmTextSetInsertionPosition(this->text, pos);

    XtFree(str);
    theIBMApplication->setBusyCursor(FALSE);
}
Пример #17
0
static char* motTextGetCaretAttrib(Ihandle* ih)
{
  XmTextPosition pos = XmTextGetInsertionPosition(ih->handle);

  if (ih->data->is_multiline)
  {
    int col, lin;

    char *value = XmTextGetString(ih->handle);
    motTextGetLinColFromPosition(value, pos, &lin, &col);
    XtFree(value);

    return iupStrReturnIntInt(lin, col, ',');
  }
  else
  {
    pos++; /* IUP starts at 1 */
    return iupStrReturnInt((int)pos);
  }
}
Пример #18
0
static void Complain(Widget w, XEvent *event, char **str, Cardinal *num) 
{
  /* if the minibuffer has focus (via pointer movement) and user types C-j (for example),
   *   the textfield widget doesn't have any action associated with that, so it prints
   *   C-j and leaves the cursor where it was; without this action, Motif posts a small
   *   empty box where the character should be, which can be confusing; another option
   *   would be to activate the keyboard instead (as in C-x), but I think that would only
   *   add to the confusion.
   */
  char *old_text, *new_text;
  XmTextPosition curpos;
  curpos = XmTextGetCursorPosition(w);
  old_text = XmTextGetString(w);
  new_text = (char *)CALLOC(snd_strlen(old_text) + 5, sizeof(char));
  sprintf(new_text, "%s C-%c", (old_text) ? old_text : "", str[0][0]);
  XmTextSetString(w, new_text);
  XmTextSetCursorPosition(w, curpos);
  if (old_text) XtFree(old_text);
  FREE(new_text);
}
Пример #19
0
// Run program with given arguments
static void gdbRunDCB(Widget, XtPointer, XtPointer)
{

    Widget text  = XmSelectionBoxGetChild(run_dialog, XmDIALOG_TEXT);
    String _args = XmTextGetString(text);
    string args(_args);
    XtFree(_args);

    string cmd = gdb->run_command(args);
    while (!cmd.empty())
    {
	string c;
	if (cmd.contains('\n'))
	    c = cmd.before('\n');
	else
	    c = cmd;
	cmd = cmd.after('\n');
	gdb_command(c, run_dialog);
    }
}
Пример #20
0
// ChangeDirectory program with given arguments
static void gdbChangeDirectoryDCB(Widget, XtPointer, XtPointer)
{
    Widget text = XmSelectionBoxGetChild(cd_dialog, XmDIALOG_TEXT);
    String _args = XmTextGetString(text);
    string args(_args);
    XtFree(_args);

    string path = source_view->full_path(args);
    switch (gdb->type()) {
    case PERL:
      gdb_command("chdir " + quote(path, '\''));
      break;
    case BASH:
      gdb_command("eval cd " + path);
      break;
    default:
      gdb_command("cd " + path);
    }
    
}
Пример #21
0
//
// Get the text from a text widget and clip off the leading and
// trailing white space.
// The return string must be deleted by the caller.
//
char *SetMacroNameDialog::GetTextWidgetToken(Widget textWidget)
{
    char *name = XmTextGetString(textWidget);
    ASSERT(name);
    int i,len = STRLEN(name);

    for (i=len-1 ; i>=0 ; i--) {
	if (IsWhiteSpace(name,i))
	    name[i] = '\0';
	else
	    break;
    }

    i=0; SkipWhiteSpace(name,i);
     
    char *s = DuplicateString(name+i);
    XtFree(name);
    return s;

}
Пример #22
0
// Apply button
static void ApplyPlotCommandCB(Widget, XtPointer client_data, XtPointer)
{
    PlotWindowInfo *plot = (PlotWindowInfo *)client_data;

    Widget text = XmCommandGetChild(plot->command, XmDIALOG_COMMAND_TEXT);
    String cmd_s = 0;

    if (XmIsTextField(text))
	cmd_s = XmTextFieldGetString(text);
    else if (XmIsText(text))
	cmd_s = XmTextGetString(text);
    else {
        assert(0);
	::abort();
    }

    string cmd = cmd_s;
    XtFree(cmd_s);

    send_and_replot(plot, cmd);
}
Пример #23
0
void 
cgenP_set_envCB(
    Widget widget,
    XtPointer clientData,
    XtPointer callData
)
{
    /*** DTB_USER_CODE_START vvv Add C variables and code below vvv ***/

    DtbCgenEnvDialogInfo        env_dlg = (DtbCgenEnvDialogInfo)clientData;
    STRING                      var_name = NULL;
    STRING                      var_value = NULL;
    STRING                      old_var_value = NULL;

    var_name = XmTextFieldGetString(env_dlg->name_textf);

    if (util_strempty(var_name))
        return;

    var_value = XmTextGetString(env_dlg->textpane);

    if (strlist_str_exists(user_env_vars, var_name))
    {
        /* the user has set this before - we need to deallocate
         * the string we allocated
         */
        old_var_value = (STRING) strlist_get_str_data(user_env_vars, var_name);
        util_free(old_var_value);
        strlist_remove_str(user_env_vars, var_name);
    }
    if (!util_strempty(var_value))
        strlist_add_str(user_env_vars, var_name, (void *)strdup(var_value));
    else
        strlist_add_str(user_env_vars, var_name, (void *)NULL);

    /*** DTB_USER_CODE_END   ^^^ Add C variables and code above ^^^ ***/
    
    /*** DTB_USER_CODE_START vvv Add C code below vvv ***/
    /*** DTB_USER_CODE_END   ^^^ Add C code above ^^^ ***/
}
Пример #24
0
void
FindDialog::textFieldCallback(
	Widget		field,
	XtPointer	data,
	XtPointer)
{
	char *s;
	FindDialog    *findData = (FindDialog *)data;

	if (*(s = XmTextGetString(field)) == '\0') {
		// Empty field.  Traverse
		(void) XmProcessTraversal(field, XmTRAVERSE_NEXT_TAB_GROUP);
	} else {
		// Field not empty. Do search
		findData->getAllFields();
		if (!findData->findMatching(False)) {
			XBell(XtDisplay(field), 0);
		}
	}

	return;
}	
Пример #25
0
void pp_close_prov_cb(Widget w, XtPointer a, XtPointer b)
{
char *input_date = NULL;
char *todays_date = NULL;
  
  todays_date = get_todays_date();

  input_date = XmTextGetString (ppp_start_date_txt);

  if ((gprov_new_package != 0) || (strcmp(input_date,todays_date) != 0))
  {
    XtManageChild (ppp_confirm_dialog);
    XtPopup (ppp_confirm_shell,XtGrabNone);
  }
  else
  { 
    XtUnmanageChild (pp_provision_form);
    XtPopdown (pp_provision_shell);
  }

  return;
}
Пример #26
0
void save_find_dialog_state(FILE *fd)
{
  if ((edit_find_dialog) && (XtIsManaged(edit_find_dialog)))
    {
      char *text = NULL;
      text = XmTextGetString(edit_find_text);
      if ((text) && (*text))
	{
#if HAVE_SCHEME
	  fprintf(fd, "(%s #t \"%s\")\n", S_find_dialog, text);
#endif
#if HAVE_RUBY
	  fprintf(fd, "%s(true, \"%s\")\n", TO_PROC_NAME(S_find_dialog), text);
#endif
#if HAVE_FORTH
	  fprintf(fd, "#t \"%s\" %s drop\n", text, S_find_dialog);
#endif
	  XtFree(text);
	}
      else 
	{
#if HAVE_SCHEME
	  if (ss->search_expr)
	    fprintf(fd, "(%s #t \"%s\")\n", S_find_dialog, ss->search_expr);
	  else fprintf(fd, "(%s #t)\n", S_find_dialog);
#endif
#if HAVE_RUBY
	  if (ss->search_expr)
	    fprintf(fd, "%s(true, \"%s\")\n", TO_PROC_NAME(S_find_dialog), ss->search_expr);
	  else fprintf(fd, "%s(true)\n", TO_PROC_NAME(S_find_dialog));
#endif
#if HAVE_FORTH
	  if (ss->search_expr)
	    fprintf(fd, "#t \"%s\" %s drop\n", ss->search_expr, S_find_dialog);
	  else fprintf(fd, "#t %s drop\n", S_find_dialog);
#endif
	}
    }
}
Пример #27
0
static void completions_browse_callback(Widget w, XtPointer context, XtPointer info) 
{
  int i, j, old_len, new_len;
  char *text = NULL, *old_text = NULL;
  XmListCallbackStruct *cbs = (XmListCallbackStruct *)info;
  Widget requestor;
  if (ss->sgx->completion_requestor == NULL) 
    requestor = listener_text;
  else requestor = ss->sgx->completion_requestor;
  /* choice = cbs->item_position - 1; */
  text = (char *)XmStringUnparse(cbs->item, NULL, XmCHARSET_TEXT, XmCHARSET_TEXT, NULL, 0, XmOUTPUT_ALL);
  old_text = XmTextGetString(requestor);
  old_len = snd_strlen(old_text);
  new_len = snd_strlen(text);
  for (i = old_len - 1, j = new_len - 1; j >= 0; j--)
    {
      if (old_text[i] != text[j])
	{
	  i = old_len - 1;
	  if (old_text[i] == text[j]) i--;
	  /* this added 15-Apr-02 for case like map-chan(nel) */
	  /*   probably should go back new_len and scan forwards instead */
	}
      else i--;
    }
  if (requestor == listener_text)
    append_listener_text(XmTextGetLastPosition(listener_text), 
			 (char *)(text - 1 + old_len - i));
  else
    {
      /* try to append to who(m?)ever asked for completion help */
      XmTextInsert(requestor, 
		   XmTextGetLastPosition(requestor), 
		   (char *)(text - 1 + old_len - i));
    }
  if (text) XtFree(text);
  if (old_text) XtFree(old_text);
  unpost_completion(requestor);
}
Пример #28
0
void text_print(Widget w, XtPointer client_data, XtPointer call_data)
{
    Widget  text_w;
    char   *text=NULL;
    FILE   *mypipe;

    /* Get the text area */
    text_w = XtNameToWidget(textdialog, "*text_w");
    if (text_w) {
        text = XmTextGetString(text_w);

        if (text && *text) {
            /* Send to printer Check ENV for a printer variable */

            if ((mypipe = popen(PRINTCOMMAND, "w"))) {
                fprintf(mypipe, "%s", text);
                pclose(mypipe);
            }

            XtFree(text);
        }
    }
}
Пример #29
0
void
options_spinbox_modCB( 
     Widget widget,
     XtPointer clientdata,
     XtPointer calldata
)
{
     Widget 	spinbox = (Widget) clientdata;
     int        mvalue, value;
     Display    *dpy = XtDisplayOfObject(widget);
     char	*text = XtMalloc(BUFSIZ);
     char	*textvalue;
     XmTextVerifyCallbackStruct *cbs = (XmTextVerifyCallbackStruct*) calldata;
     
     if (NULL == cbs->text->ptr) return;
     if (!all_digits(cbs->text->ptr))
     {
         cbs->doit = FALSE;
	 XBell(dpy, 50);
     }

     textvalue = XmTextGetString(widget);
     strncpy(text, textvalue, cbs->startPos);
     text[cbs->startPos] = '\0';
     strcat(text, cbs->text->ptr);
     strcat(text, textvalue+cbs->endPos);

     XtVaGetValues(spinbox, XmNmaximumValue, &mvalue, NULL); 
     value = (int) strtol(text, NULL, 10);
     if (value > mvalue)
     {
         cbs->doit = FALSE;
	 XBell(dpy, 50);
     }
     if (NULL != text) XtFree(text);
     if (NULL != textvalue) XtFree(textvalue);
}
Пример #30
0
void gdb_selectHP(Agent *, void *, void *call_data)
{
    ReplyRequiredInfo *info = (ReplyRequiredInfo *)call_data;

#if 0
    if (gdb_keyboard_command)
    {
	// Use the GDB console to answer this query
	info->reply = "";
	return;
    }
#endif

    // Fetch previous output lines, in case this is a multi-line message.
    String s = XmTextGetString(gdb_w);
    string prompt(s);
    XtFree(s);
    prompt = prompt.from(int(messagePosition)) + info->question;

    // Issue prompt right now
    _gdb_out(info->question);
    info->question = "";

    // Set and issue reply
    if (prompt.contains("file name"))
    {
	// File selection
	select_file(prompt, info->reply);
    }
    else
    {
	// Option selection
	select_from_gdb(prompt, info->reply);
    }

    _gdb_out(info->reply);
}