[comp.windows.x] Problem reading text from TextSrc widget

gram@uctcs.uucp (Graham Wheeler) (09/28/90)

Yet another Athena widgets problem! I have written an editor using the text 
widget, and am now trying to compile the file in the text widget buffer. 
I could always save this file and compile from the disk copy, but I would 
like to rather use the in-memory copy. I have written the following routine 
as a sort of `getchar' to read characters. My compiler expects null bytes at 
the end of a file, so the compiler stops immediately, as I seem to only get 
null bytes.

The text widget is called EdWinWidget, while its asciiSrc widget is called
EdSrcWidget.

static char TxtBuf[81];		/* Buffer for read text		*/
static XawTextBlock TxtBlk;	/* Block structure for Xaw read	*/
static int	 pos,		/* Position in TxtBuf		*/
		 XtPos,		/* Position in file		*/
		 avail;		/* Count of chars available in
					TxtBuf			*/

int Ed_NextChar()
{
   if (avail==0)	/* Time to read... */
     {
     pos = 0;		/* Reset buffer position */
     avail = XawTextSourceRead(EdSrcWidget, XtPos, TxtBlk, 80);
#ifdef DEBUG
     printf("XawTextSourceRead (from %d) got %d chars\n", XtPos, avail);
     printf("TxtBlk.ptr = %X, TxtBuf = %X\n", TxtBlk.ptr, TxtBuf);
     printf("Contents of TxtBuf is (%s)\n", TxtBuf);
     printf("First four bytes are %d, %d, %d, %d\n", TxtBuf[0],
		 TxtBuf[1], TxtBuf[2], TxtBuf[3]);
#endif
     XtPos += avail;	/* Update file position */
     }
   if (avail==0) return '\0'; /* EOF */
   else
     {
     avail--;
     return TxtBuf[pos++];
     }
}

/* `Compile' command widget button event handler */

static void Compile(w,client_data,call_data)
Widget w;
XtPointer client_data, call_data;
{
  linenum = pos = XtPos = avail = 0;
  TxtBlk.firstPos = 0;
  TxtBlk.length = 80;
  TxtBlk.ptr = TxtBuf;
  TxtBlk.format = FMT8BIT;
#ifdef DEBUG
  puts("Compiling...");
#endif
  run_compiler();
}

The output (on stdout) that I get if DEBUG is defined is:

Compiling...
XawTextSourceRead (from 0) got 80 chars
TextBlk.ptr = 19460, TxtBuf = 19460
Contents of TxtBuf is ()
First four bytes are 0, 0, 0, 0

This is when I have a file loaded which certainly does NOT begin
with four null bytes. If I use the EdWinWidget instead of the
EdSrcWidget in the call to XawTextSourceRead, I get a response
identical except the second line says `.. got 0 chars'. So the
EdSrcWidget seems to be the right one. But I just cannot get
any sensible text returned.

Any ideas, anyone? I suspect that it is because I am confusing
TextSrc and asciiSrc widgets. If this is the case, is there a
way of reading the text in an asciiSrc widget when the type is
XawAsciiFile? On the other hand, AsciiSrc is a subclass of
TextSrc, so it should have all the functionality of a TextSrc,
shouldn't it? Am I just stupid?

P.S. - I haven't had any responses to my earlier problem about
XawAsciiSourceChanged returning TRUE even after querying the
string resource and, in fact, changing it to load a new file.
I would still very much appreciate help on that problem as well.



WELL I HAVE TO GO NOW BYE!! COWABUNGA!!!

Graham Wheeler		      |	"Don't bother me,

gram@uctcs.uucp (Graham Wheeler) (09/28/90)

Sorry, my signature got lost on the last posting. This is just
to correct that.

Graham Wheeler		      |	"Don't bother me,
Data Network Architectures Lab|		I'm reading a `Crisis'!"
Dept. of Computer Science     | Internet: <gram.uctcs@f4.n494.z5.fidonet.org>
University of Cape Town       |     BANG: <...uunet!ddsw1!olsa99!uctcs!gram>