memmove(linebuf + n, linebuf, old_size_linebuf);
back_raw_line(curr_pos, linep)	POSITION curr_pos;	char **linep;{	register int n;	register int c;	POSITION new_pos;	if (curr_pos == NULL_POSITION || curr_pos <= ch_zero() ||		ch_seek(curr_pos-1))		return (NULL_POSITION);	n = size_linebuf;	linebuf[--n] = '\0';	for (;;)	{		c = ch_back_get();		if (c == '\n')		{			/*			 * This is the newline ending the previous line.			 * We have hit the beginning of the line.			 */			new_pos = ch_tell() + 1;			break;		}		if (c == EOI)		{			/*			 * We have hit the beginning of the file.			 * This must be the first line in the file.			 * This must, of course, be the beginning of the line.			 */			new_pos = ch_zero();			break;		}		if (n <= 0)		{			int old_size_linebuf = size_linebuf;			char *fm;			char *to;			if (expand_linebuf())			{				/*				 * Overflowed the input buffer.				 * Pretend the line ended here.				 */				new_pos = ch_tell() + 1;				break;			}			/*			 * Shift the data to the end of the new linebuf.			 */			for (fm = linebuf + old_size_linebuf,			      to = linebuf + size_linebuf;			     fm >= linebuf;  fm--, to--)				*to = *fm;			n = size_linebuf - old_size_linebuf;		}		linebuf[--n] = c;	}	if (linep != NULL)		*linep = &linebuf[n];	return (new_pos);}