kwh@sei.cmu.edu (Kurt Hoyt) (05/07/88)
I needed the string source for the Text widget not to beep at me when it ran out of space in the buffer handed to it. So, with inspiration from xedit, I modified StringReplaceText in lib/Xaw/StringSrc.c to reallocate the string when it becomes full. I add space 1K at a time. THESE ARE NOT APPROVED CHANGES! I made them because I need them. Now, if I can only get wordBreak to insert line feeds into the source string and not just in the sink... Share and enjoy: *** StringSrc.c.orig Fri May 6 14:19:39 1988 --- StringSrc.c Fri May 6 15:54:31 1988 *************** *** 117,122 { StringSourcePtr data; int i, length, delta; data = (StringSourcePtr) src->data; switch (src->edit_mode) { --- 117,123 ----- { StringSourcePtr data; int i, length, delta; + char *newstr; data = (StringSourcePtr) src->data; switch (src->edit_mode) { *************** *** 132,139 return (EditError); } length = endPos - startPos; ! if ((data->length - length + text->length) > data->maxLength) ! return (EditError); delta = text->length - length; if (delta < 0) /* insert shorter than delete, text getting --- 133,160 ----- return (EditError); } length = endPos - startPos; ! ! /*----------------------------------------------------------------* ! * Fixed to expand the string as necessary instead of generating * ! * an error. * ! * * ! * Kurt Hoyt <kwh@sei.cmu.edu> 6 May 1988 * ! * * ! * Original code: * ! * if ((data->length - length + text->length) > data->maxLength) * ! * return (EditError); * ! *----------------------------------------------------------------*/ ! ! #define CHUNK 1024 ! if ((data->length - length + text->length) > data->maxLength) { ! while ((data->length - length + text->length) > data->maxLength) { ! data->maxLength += CHUNK; ! newstr = XtMalloc (data->maxLength); ! bcopy (data->str, newstr, data->length); ! XtFree (data->str); ! data->str = newstr; ! } ! } delta = text->length - length; if (delta < 0) /* insert shorter than delete, text getting -- Kurt Hoyt, Software Engineering Institute -- kwh@sei.cmu.edu "From previous research with rendering systems we have learned that a good dose of gratuitous partial differential equations is needed to meet the paper quota for impressive formulas." SIGGRAPH '87 Proceedings, p. 73