MODULE Main; IMPORT AGRS,Names,Library,Parser,Speller,Parser2, Grammars,Permanence,Oberon,Texts; VAR rd: Texts.Reader; wr: Texts.Writer; PROCEDURE InputText(limit: CHAR): Library.Text; VAR text: Texts.Text; ch: CHAR; first,last,time: LONGINT; BEGIN text:= Oberon.Par.text; Texts.OpenReader(rd,text,Oberon.Par.pos); Texts.Read(rd,ch); WHILE (ch=' ') OR (ch=9X) DO Texts.Read(rd,ch); END; IF ch='^' THEN Oberon.GetSelection(text,first,last,time); IF (time=0) OR (text=NIL) THEN RETURN NIL END; ELSE first:= Texts.Pos(rd)-1; WHILE (ch#limit) & ~rd.eot DO Texts.Read(rd,ch); END; last:= Texts.Pos(rd)-1; END; RETURN Library.SubText(text,first,last) END InputText; PROCEDURE InputValue(): AGRS.Term; VAR textTerm: Library.Text; t: AGRS.Term; BEGIN textTerm:= InputText(0DX); IF textTerm=NIL THEN RETURN NIL END; Grammars.sentenceName.Assign(textTerm); t:= Grammars.parseName.Value(); (* t:= Names.IsolateSymbols(Parser.parseName); *) Grammars.sentenceName.Restore(); (* RETURN t; *) RETURN Permanence.environmentName.Evaluate(t) (* RETURN t.Value() *) END InputValue; PROCEDURE Evaluate*; VAR t,s: AGRS.Term; BEGIN t:= InputValue(); IF t=NIL THEN RETURN END; Speller.thoughtName.Assign(t); s:= Speller.spellingName.Value(); Speller.thoughtName.Restore; WITH s: Library.Text DO Texts.Save(s.base,s.startOffset,s.endOffset,wr.buf); END; Texts.WriteLn(wr); Texts.Append(Oberon.Log,wr.buf); END Evaluate; PROCEDURE AssignDefinition(param: AGRS.Name; VAR meaning: AGRS.Term); BEGIN param.Init(meaning); END AssignDefinition; PROCEDURE Define*; VAR textTerm: Library.Text; definition: AGRS.Term; BEGIN textTerm:= InputText(';'); IF textTerm=NIL THEN RETURN END; Parser.sentenceName.Assign(textTerm); Parser.buildingName.Assign(Names.SystemRoot); definition:= Parser.attributeParser.Value(); Parser.buildingName.Restore(); Parser.sentenceName.Restore(); IF definition.indirection=AGRS.failName THEN Texts.WriteString(wr,'Syntax error!'); ELSE definition(AGRS.Tree).ProcessAttributes(AssignDefinition); Texts.WriteString(wr,'Assigned.'); END; Texts.WriteLn(wr); Texts.Append(Oberon.Log,wr.buf); END Define; BEGIN Texts.OpenWriter(wr); END Main.