/*	--- Copyright University of Sussex 1986.  All rights reserved. ---------
 > File:		   $usepop/master/C.all/lib/ved/vedreadline.p
 > Purpose:		   special version of readline for use inside ved
 > Author:		   Aaron Sloman, ??? (see revisions)
 > Documentation:  HELP * VEDREADLINE
 > Related Files:
 */

;;; Some but not all edit facilities will be available.
;;; the call of readline is terminated with RETURN
;;; THIS IS NOW REDUNDANT - READLINE IS, USUALLY, BETTER.

section;

define global vars vedreadline();
vars vedbreak = false, vedstatic = false;
lvars char proc plen, done = false;
	if vedcolumn fi_< vvedlinesize then vedcharinsert(`\r`); endif;
	vedcharinsert(`\r`); vedcharup();
	if vvedlinesize fi_> 0 then vedlinebelow() endif;
	vedputmessage('READLINE HERE - FINISH WITH ENTER OR RETURN');
start:
	datalength(pop_readline_prompt) fi_+ 1 -> plen;
	vedinsertstring(pop_readline_prompt);
	vedscreenbell();
	until done do
		max(plen, vedcolumn) -> vedcolumn;
		vedcheck();
		vedcursorset() ->;
		vedinascii() -> char;
		if char == `\r` or char == `\^D` then
			true -> done
		elseif (vedgetproctable(char) ->> proc) == vedinsertvedchar
				or proc == vedcharmiddle or proc == vedtextright
				or proc == vedrefresh
		then proc()
		elseif (proc == vedchardelete or proc == vedwordleft
					or proc == vedcharleft or proc == vedwordleftdelete)
				and vedcolumn fi_> plen
		then
			proc()
		elseif (proc == vedcharright or proc == vedwordright
					or proc == veddotdelete or proc == vedwordrightdelete
					or proc == vedcleartail or proc == vedchangecase)
				and vedcolumn fi_<= vvedlinesize
		then proc()
		elseif proc == vedenterkey then true -> done
		elseif proc == vedscreenleft or proc == vedtextleft then
			plen -> vedcolumn;
		elseif proc == vedclearhead then
			vedclearhead(); goto start
		elseif proc == vedlinedelete then
			vedclearhead(); vedcleartail(); goto start
		elseif proc == vedcleartail then
			vedcleartail();
		else vedscreenbell()
		endif;
		vedsetlinesize();
	enduntil;
	;;; now create the list of text
	vedtrimline();
	copy(vedthisline()) -> proc;
	stringin(proc) -> proc;
	repeat plen fi_- 1 times erase(proc()) endrepeat;
	incharitem(proc) -> proc;
	[% until (proc() ->> done) == termin do done enduntil%];
	vedlinebelow();
enddefine;

endsection;

/* --- Revision History ---------------------------------------------------
--- Ben Rubinstein, Oct 12 1986 - vedenter indirected through ..key         
--- Mark Rubinstein, Jan  9 1986 - removed from system, de-systemised,
	sectionised.
*/
