CTRACE(tfp, "GridText: entered HText_ExpandTextarea()\n");
CTRACE((tfp, "GridText: entered HText_ExpandTextarea()\n"));
PUBLIC void HText_ExpandTextarea ARGS2(	    struct link *,  form_link,	    int,            newlines){    TextAnchor *anchor_ptr;    TextAnchor *end_anchor    = NULL;    BOOLEAN	firstanchor   = TRUE;    FormInfo *form      = form_link->form;    char     *areaname  = form->name;    int       form_num  = form->number;    HTLine   *htline    = NULL;    int       match_tag = 0;    int       i;    CTRACE(tfp, "GridText: entered HText_ExpandTextarea()\n");    if (newlines < 1) return;    /*     *	Begin at the beginning, to find the TEXTAREA, then on to find     *	the last line (anchor) in it.     *     *	[Finding the TEXTAREA we're actually *in* with these attributes     *	 isn't foolproof.  The form_num isn't unique to a given TEXTAREA,     *	 and there *could* be TEXTAREA's with the same "name".	If that     *	 should ever be true, we'll actually expand the *1st* TEXTAREA     *	 in the page that matches.  We should probably assign a unique     *	 id to each TEXTAREA in a page, and match on that, to avoid this     *	 (potential) problem.     *     *	 Since the odds of "false matches" *actually* happening in real     *	 life seem rather small though, we'll hold off doing this, for a     *	 rainy day ...]     */    anchor_ptr = HTMainText->first_anchor;    while (anchor_ptr) {	if ((anchor_ptr->link_type	     == INPUT_ANCHOR)    &&	    (anchor_ptr->input_field->type   == F_TEXTAREA_TYPE) &&	    (anchor_ptr->input_field->number == form_num)	 &&	    !strcmp (anchor_ptr->input_field->name, areaname))   {	    if (firstanchor)	        firstanchor = FALSE;	    end_anchor = anchor_ptr;	 } else {	    if (!firstanchor)		break;	 }	 anchor_ptr = anchor_ptr->next;    }    for (i = 1; i <= newlines; i++) {	insert_new_textarea_anchor (&end_anchor, &htline);	/*	 *  Make the new line blank.	 */	StrAllocCopy(end_anchor->input_field->value, "");	/*	 *  And go add another line ...	 */	if (end_anchor->next)	   match_tag = end_anchor->next->number;    }    CTRACE(tfp, "GridText: %d blank line(s) added to TEXTAREA name=|%s|\n",	        newlines, areaname);    /*     *	We need to adjust various things in all anchor bearing lines     *	following the last newly added line/anchor.  Fun stuff.     */    update_subsequent_anchors (newlines, end_anchor, htline, match_tag);    CTRACE(tfp, "GridText: exiting HText_ExpandTextarea()\n");    return;}