perm filename EEDIT3.2[EAL,HE]1 blob
sn#676502 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 eEdit3 (s: statementp l,indent,e0,elen: integer
C00011 ENDMK
C⊗;
{$NOMAIN Editor: part of editStmnt }
%include eedit.hdr;
{ Externally defined routines from elsewhere: }
(* From ALLOC *)
procedure relStrng(n: strngp); external;
(* From PAUX2 *)
procedure relExpr(n: 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 eGetToken; external;
(* From EPAR3A *)
procedure eAffixParse(st: statementp); external;
(* From EPAR3C *)
function eVarParse(st: statementp; indent,l: integer): ascii; external;
(* From EPAR3F *)
procedure eMoveParse(st: statementp; bp: boolean); external;
procedure eStopParse(st: statementp); external;
procedure eWristParse(st: statementp); external;
(* From EEDITS *)
procedure echarDo (echar: ascii; var again: boolean); external;
procedure downLine (var again:boolean; var ocur: integer); 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 eEdit3 (s: statementp; l,indent,e0,elen: integer;
var echar: ascii; var again: boolean; var ocur: integer); external;
procedure eEdit3;
var i,j: integer; strp: strngp;
begin
with s↑ do
case stype of
affixtype: begin
if fieldnum = 1 then
begin
e0 := indent + 6;
elen := getExprLength(frame1) + getExprLength(frame2) + 4;
relExpr(frame1);
relExpr(frame2);
if byvar <> nil then elen := elen + 4 + getExprLength(byvar);
relExpr(byvar);
if rigid then elen := elen + 8 else elen := elen + 11;
if byvar <> nil then elen := elen + 4 + getExprLength(byvar);
relExpr(byvar);
end
else begin e0 := indent + 5; elen := -4 end;
if (fieldnum = 5) or (nlines = 1) then
begin
if atexp <> nil then elen := elen + 4 + getExprLength(atexp);
relExpr(atexp);
end;
with lines[l]↑ do
echar := exprEditor(l-firstDline+1,start,length,e0,elen,0);
eAffixParse(s);
echarDo(echar,again);
end;
movetype,
operatetype,
opentype,
closetype,
centertype,
stoptype: begin
if stype = operatetype then e0 := 8
else if stype = centertype then e0 := 7
else if stype = closetype then e0 := 6
else e0 := 5;
e0 := e0 + indent;
with lines[l]↑ do
begin (* go edit it *)
elen := length - e0 + 1;
if listing[start+length-1] = ';' then elen := elen - 1;
echar := exprEditor(l-firstDline+1,start,length,e0,elen,0);
end;
relExpr(cf);
if stype = stoptype then eStopParse(s) else eMoveParse(s,false);
echarDo(echar,again);
end;
commenttype: begin (* *** only good for single line comments *** *)
ch := str↑.ch[1];
if (ch = 'C') or (ch = 'c') then
begin (* comment ... ; *)
e0 := indent + 8;
elen := len - 9;
end
else
begin (* "{" "(*" or "/*" *)
if ch = '{' then e0 := indent + 1
else e0 := indent + 2;
elen := len + indent - e0 - 2;
j := (len-1) MOD 10 + 1;
strp := str;
for i := 1 to (len-1) DIV 10 do strp := strp↑.next;
if strp↑.ch[j] = '}' then elen := elen + 1;
end;
while str <> nil do (* release old comment string *)
begin strp := str↑.next; relStrng(str); str := strp end;
with lines[l]↑ do (* edit new one *)
echar := exprEditor(l-firstDline+1,start,length,e0,elen,0);
curChar := indent;
maxChar := indent + elen + 9;
flushComments := false;
eGetToken; (* get the comment *)
flushComments := true;
len := eCurToken.len; (* don't even need to check it?!? *)
str := eCurToken.str;
echarDo(echar,again);
end;
wristtype: begin
e0 := indent + 6;
elen := getExprLength(fvec) + getExprLength(tvec) + 1;
relExpr(fvec);
relExpr(tvec);
with lines[l]↑ do
echar := exprEditor(l-firstDline+1,start,length,e0,elen,0);
eWristParse(s);
echarDo(echar,again);
end;
setbasetype,
retrytype: downLine(again,ocur); (* nothing to edit here *)
declaretype: begin
echar := eVarParse(s,indent,l);
echarDo(echar,again);
end;
(* requiretype, definetype, dimdeftype *)
otherwise begin
pp20L(' Don''t know how to e',20); pp20('dit this type yet. ',18);
ppLine;
ocur := 0;
end;
end;
end;