*p = ich;
*p = (char) ich;
PRIVATE void parse_cso ARGS2(	CONST char *,		arg,	HTParentAnchor *,	anAnchor){    int ich;    char line[BIG];    char *p = line;    char *second_colon, last_char='\0';    CONST char *title;    START(HTML_HEAD);    PUTC('\n');    START(HTML_TITLE);    if ((title = HTAnchor_title(anAnchor)))	PUTS(title);    else	PUTS(GOPHER_CSO_SEARCH_RESULTS);    END(HTML_TITLE);    PUTC('\n');    END(HTML_HEAD);    PUTC('\n');    START(HTML_H1);    if ((title = HTAnchor_title(anAnchor)))	PUTS(title);    else {	PUTS(arg);	PUTS(GOPHER_SEARCH_RESULTS);    }    END(HTML_H1);    PUTC('\n');    START(HTML_PRE);    /*    **	Start grabbing chars from the network.    */    while ((ich=NEXT_CHAR) != EOF)	{	    if ((char)ich != LF)		{		    *p = ich;		/* Put character in line */		    if (p< &line[BIG-1]) p++;		}	    else		{		    *p = '\0';		/* Terminate line */		    p = line;		/* Scan it to parse it */		    /*		    **	OK we now have a line in 'p'.		    **	Lets parse it and print it.		    */		    /*		    **	Break on line that begins with a 2.		    **	It's the end of data.		    */		    if (*p == '2')			break;		    /*		    **	Lines beginning with 5 are errors.		    **	Print them and quit.		    */		    if (*p == '5') {			START(HTML_H2);			PUTS(p+4);			END(HTML_H2);			break;		    }		    if (*p == '-') {			/*			**  Data lines look like  -200:#:			**  where # is the search result number and can be			**  multiple digits (infinite?).			**  Find the second colon and check the digit to the			**  left of it to see if they are diferent.			**  If they are then a different person is starting.			**  Make this line an <h2>.			*/			/*			**  Find the second_colon.			*/			second_colon = strchr( strchr(p,':')+1, ':');			if(second_colon != NULL) {  /* error check */			    if (*(second_colon-1) != last_char)				/* print seperator */			    {				END(HTML_PRE);				START(HTML_H2);			    }			    /*			    **	Right now the record appears with the alias			    **	(first line) as the header and the rest as			    **	<pre> text.			    **	It might look better with the name as the			    **	header and the rest as a <ul> with <li> tags.			    **	I'm not sure whether the name field comes in			    **	any special order or if its even required in			    **	a record, so for now the first line is the			    **	header no matter what it is (it's almost			    **	always the alias).			    **	A <dl> with the first line as the <DT> and			    **	the rest as some form of <DD> might good also?			    */			    /*			    **	Print data.			    */			    PUTS(second_colon+1);			    PUTC('\n');			    if (*(second_colon-1) != last_char)				/* end seperator */			    {				END(HTML_H2);				START(HTML_PRE);			    }			    /*			    **	Save the char before the second colon			    **	for comparison on the next pass.			    */			    last_char =  *(second_colon-1) ;			} /* end if second_colon */		    } /* end if *p == '-' */		} /* if end of line */	} /* Loop over characters */    /* end the text block */    PUTC('\n');    END(HTML_PRE);    PUTC('\n');    FREE_TARGET;    return;  /* all done */} /* end of procedure */