perm filename EEDIT2.2[EAL,HE]1 blob sn#676501 filedate 1982-09-27 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00003 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	{$NOMAIN	Editor: part of editStmnt }
C00005 00003	procedure eEdit2 (s: statementp l,indent,e0,elen: integer 
C00009 ENDMK
C⊗;
{$NOMAIN	Editor: part of editStmnt }

%include eedit.hdr;

{ Externally defined routines from elsewhere: }

	(* From PAUX1 *)
function checkArg(n: nodep; d: datatypes): nodep;		external;

	(* From PAUX2 *)
procedure relExpr(n: nodep);					external;
function evalOrder(what,last: nodep; pcons: boolean): nodep;	external;

	(* From EPUT *)
function getExprLength(n: nodep): integer;			external;

	(* From EEXPED *)
function exprEditor(line,lstart,llength,estart: integer;
	var elength: integer; off: integer): ascii;		external;

	(* From ETOKEN *)
procedure eDimCheck(n,d: nodep);				external;

	(* From EPUTST *)
procedure putstmnt(s: statementp; indent, plevel: integer);	external;

	(* From EPAR3A *)
procedure eUnfixParse(st: statementp);				external;
procedure eEnableParse(st: statementp);				external;

	(* From EPAR3B *)
function ePlistParse(st: statementp; 
	e0,indent,l,ocur: integer): ascii;			external;

	(* From EPAR3E *)
procedure eCmonParse(st: statementp; getStart: boolean);	external;

	(* From EEDITS *)
procedure echarDo (echar: ascii; var again: boolean);		external;
function editExpr(n: nodep; l,e0,elen: integer; 
	echar: ascii; var again: boolean): nodep;		external;

	(* From PP *)
procedure ppLine; 						external;
procedure ppOutNow; 						external;
procedure ppChar(ch: ascii); 					external;
procedure pp5(ch: c5str; length: integer); 			external;
procedure pp10(ch: cstring; length: integer); 			external;
procedure pp10L(ch: cstring; length: integer);			external;
procedure pp20(ch: c20str; length: integer); 			external;
procedure pp20L(ch: c20str; length: integer); 			external;

procedure eEdit2 (s: statementp; l,indent,e0,elen: integer; 
	var echar: ascii; var again: boolean; var ocur: integer); external;
procedure eEdit2;
 var i: integer;
 begin
 with s↑ do
  case stype of
printtype,
aborttype,
prompttype:	begin
		if (fieldNum = 1) and (stype = prompttype) then e0 := indent + 7
		 else e0 := indent + 6;
		echar := ePlistParse(s,e0,indent,l,ocur);
		echardo(echar,again);
		setCursor := true;	(* let putStmnt figure right fieldnum *)
		curLine := 0;
		putStmnt(dprog,0,99);			(* redraw statement *)
		setCursor := false;
		ocur := 0;
		end;
pausetype:	begin
		e0 := indent + 6;
		ptime := checkArg(editExpr(ptime,l,e0,elen,echar,again),svaltype);
		eDimCheck(ptime,timedim↑.dim);	(* right dimension? *)
		exprs := evalOrder(ptime,nil,true);
		end;
signaltype,
waittype:	begin
		if stype = signaltype then e0 := indent + 7
		 else e0 := indent + 5;
		event := checkArg(editExpr(event,l,e0,elen,echar,again),eventtype);
		exprs := nil;
		with event↑ do			(* make sure it's a variable *)
		 if not (((ntype = leafnode) and (ltype = varitype)) or
			 ((ntype = exprnode) and (op = arefop))) then
		   begin		(* no good *)
		   pp20L(' Need an event varia',20); pp10('ble here  ',8); ppLine;
		   relExpr(event);
		   event := nil;
		   end
		  else
		   if ntype <> leafnode then exprs := evalOrder(arg2,nil,true);
		end;
enabletype,
disabletype:	begin
		if stype = enabletype then e0 := indent + 7
		 else e0 := indent + 8;
		if cmonlab = nil then elen := 0
		  else elen := cmonlab↑.name↑.length;
		with lines[l]↑ do
		 echar := exprEditor(l-firstDline+1,start,length,e0,elen,0);
		eEnableParse(s);
		echardo(echar,again);
		end;
cmtype:		begin
		e0 := indent;
		with lines[l]↑ do
		 begin					(* go edit it *)
		 i := length - 1;
		 while listing[start+i] <> 'd' do i := i - 1;
		 elen := i - e0;
		 echar := exprEditor(l-firstDline+1,start,length,e0,elen,0);
		 end;
		eCmonParse(s,true);
		echardo(echar,again);
		end;
unfixtype:	begin
		e0 := indent + 6;
		elen := getExprLength(frame1) + getExprLength(frame2) + 6;
		relExpr(frame1);
		relExpr(frame2);
		with lines[l]↑ do
		 echar := exprEditor(l-firstDline+1,start,length,e0,elen,0);
		eUnfixParse(s);
		echardo(echar,again);
		end;
otherwise	begin pp20L('Oh no! Bad ovly call',20); pp10(': Edits 2 ',9); 
		ppOutNow; end;
		
  end;
 end;