[comp.windows.x] Trouble with Tribbles

wjhagins@VUSE.VANDERBILT.EDU (William J. Hagins) (10/28/89)

I am trying to "clear" a text widget.  The example code does so upon activation of
the <clear> button, but I also have a problem which I can not solve.  After the
text is cleared, if you try to retype into the text window, after the first
character is typed, a '@' character comes up (apparantly the null character.
This does not happen if you click the mouse in the window before typing.  I am
stumped, aand would like help.  The code follows, along with the header file.

	Thank You

		-Jody.


#include <stdio.h>
#include <signal.h>
#include <ctype.h>
#include <X11/Xlib.h>
#include <X11/StringDefs.h>
#include <X11/IntrinsicP.h>
#include <X11/Intrinsic.h>
#include <X11/Command.h>
#include <X11/Core.h>
#include <X11/CoreP.h>
#include <X11/Quarks.h>
#include <X11/cursorfont.h>
#include <Xaw/Scroll.h>
#include <Xaw/Form.h>
#include <Xaw/Viewport.h>
#include <Xaw/Label.h>
#include <Xaw/Text.h>
#include <Xaw/AsciiText.h>
#include <Xaw/Dialog.h>
#include "fontdef.h"

Arg args[20];
int n=0;
FILE *outfile;
char outfileName[] = "RE.DAT";

Widget toplevel = NULL;
Widget quitButton = NULL; 
Widget acceptButton = NULL;
Widget clearButton = NULL;
Widget Scroller1 = NULL;
Widget Form1 = NULL;
Widget w1; 
char s1[30] = "";


/* 
***
   check for the  validity of the string definitions.  maybe accessing wrong addresses
***
*/

#include "resmall.h"

Display *myDisplay;
static XrmOptionDescRec options[] = {
	{"-label\0","*button.label\0",XrmoptionSepArg, NULL}
};

Syntax(call)
	char *call;
{
	fprintf(stderr,"Usage: %s\n",call);
}

void Quit(w,client_data,call_data)
  Widget w;
  caddr_t client_data, call_data;
{
  exit(0);
}

void Clear(wid,client_data,call_data)
  Widget wid;
  caddr_t client_data, call_data;
{
  sprintf(s1,"");
  XtTextSetLastPos(w1,0);
}

/***************   M A I N   ***********************************/

void main(argc,argv)
	char **argv;
{
  int i,j;
  char s[20];

  toplevel = XtInitialize("main","Demo",NULL,0, &argc,argv);
  n = 0;
  XtSetArg(args[n], XtNx, 20); n++;
  XtSetArg(args[n], XtNy, 0); n++;
  XtSetArg(args[n], XtNwidth, 200); n++;
  XtSetArg(args[n], XtNheight, 200); n++;
  XtSetValues(toplevel, args, n);

  myDisplay = XtDisplay(toplevel);
  
  n = 0;
  XtSetArg(args[n], XtNx, 0); n++;
  XtSetArg(args[n], XtNy, 0); n++;
  XtSetArg(args[n], XtNborderWidth, 0); n++;
  Form1 = XtCreateManagedWidget("Form1",formWidgetClass,toplevel,args, n);

  n = 0;
  XtSetArg(args[n], XtNborderWidth, 1); n++;
  XtSetArg(args[n], XtNlength, 18); n++;
  XtSetArg(args[n], XtNeditType, XttextEdit); n++;
  XtSetArg(args[n], XtNtextOptions, editable | scrollHorizontal); n++;
  XtSetArg(args[n], XtNvertDistance, 20); n++;
  XtSetArg(args[n], XtNlength, 29); n++;
  XtSetArg(args[n], XtNwidth, 80); n++;
  XtSetArg(args[n], XtNhorizDistance, 10); n++;
  sprintf(s,"w1");
  XtSetArg(args[n], XtNstring, s1); n++;
  w1 = XtCreateManagedWidget(s,asciiStringWidgetClass,Form1,args, n);
  /*XtTextEnableRedisplay(w1);*/

  n = 0;
  XtSetArg(args[n], XtNhorizDistance, 10); n++;
  XtSetArg(args[n], XtNvertDistance, 60); n++;
  XtSetArg(args[n], XtNheight, 30); n++;
  XtSetArg(args[n], XtNwidth, 40); n++;
  XtSetArg(args[n], XtNborderWidth, 1); n++;
  XtSetArg(args[n], XtNresize, False); n++;
  XtSetArg(args[n], XtNcursor, XCreateFontCursor(myDisplay, XC_gumby)); n++;
  quitButton = XtCreateManagedWidget("Quit",commandWidgetClass,Form1,args, n);

  n = 0;
  XtSetArg(args[n], XtNhorizDistance, 60); n++;
  XtSetArg(args[n], XtNvertDistance, 60); n++;
  XtSetArg(args[n], XtNheight, 30); n++;
  XtSetArg(args[n], XtNwidth, 40); n++;
  XtSetArg(args[n], XtNborderWidth, 1); n++;
  XtSetArg(args[n], XtNresize, False); n++;
  XtSetArg(args[n], XtNcursor, XCreateFontCursor(myDisplay, XC_gumby)); n++;
  clearButton = XtCreateManagedWidget("Clear",commandWidgetClass,Form1,args, n);
   
  XtAddCallback(quitButton, XtNcallback, Quit, NULL);
  XtAddCallback(clearButton, XtNcallback, Clear, NULL);
  XtRealizeWidget(toplevel);
  XtMainLoop();
}