<> <> <<>> <> <<+, -, * of polynomials>> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <<>> <<>> DIRECTORY <> <> RatNums, ViewerClasses, Rope, Menus, IO, ViewerIO, ViewerTools, ViewerOps, TypeScript, Polynomials; Algebra: CEDAR MONITOR IMPORTS Menus, ViewerIO, ViewerTools, TypeScript, Polynomials = BEGIN OPEN Polynomials; <> <> <> <> <> <> <<TRUSTED {Process.Detach[FORK Calculate[title]];}>> <<END;>> <<Calculate: PROC[title: Rope.ROPE] = {>> ts: TypeScript.TS; -- the primary typescript in, out: IO.STREAM; -- global variables for log writing poly1, poly2: Polynomials.Polynomial; <<dpoly: Polynomials.DPolynomial;>> globalV: VariableList; SetVarList: Menus.MenuProc = { globalV _ VariableListFromRope[ViewerTools.GetSelectionContents[] ]; WriteVariableList[globalV, out]; }; <<SetDPoly: Menus.MenuProc = {>> <<dpoly _ DPolynomialFromRope[ViewerTools.GetSelectionContents[], globalV];>> <<WriteDPolynomial[dpoly, globalV, out];>> <<};>> <<>> SetPoly1: Menus.MenuProc = { poly1 _ PolynomialFromRope[ViewerTools.GetSelectionContents[], globalV]; WriteDPolynomial[DPolyFromPoly[poly1, globalV], globalV, out]; }; SetPoly2: Menus.MenuProc = { poly2 _ PolynomialFromRope[ViewerTools.GetSelectionContents[], globalV]; WriteDPolynomial[DPolyFromPoly[poly2, globalV], globalV, out]; }; AddPolys: Menus.MenuProc = { poly1 _ PolynomialAdd[poly1, poly2]; WriteDPolynomial[DPolyFromPoly[poly1, globalV], globalV, out]; }; NegatePoly: Menus.MenuProc = { poly1 _ PolynomialNegate[poly1]; WriteDPolynomial[DPolyFromPoly[poly1, globalV], globalV, out]; }; SubtractPolys: Menus.MenuProc = { poly1 _ PolynomialSubtract[poly1, poly2]; WriteDPolynomial[DPolyFromPoly[poly1, globalV], globalV, out]; }; MultiplyPolys: Menus.MenuProc = { poly1 _ PolynomialMultiply[poly1, poly2]; WriteDPolynomial[DPolyFromPoly[poly1, globalV], globalV, out]; }; ts _ TypeScript.Create[info: [name: "Algebra"] ]; Menus.AppendMenuEntry[menu: ts.menu, entry:Menus.CreateEntry [name:"VarList", proc: SetVarList]]; <<Menus.AppendMenuEntry[menu: ts.menu, entry:Menus.CreateEntry [name:"DPoly", proc: SetDPoly]];>> Menus.AppendMenuEntry[menu: ts.menu, entry:Menus.CreateEntry [name:"Poly1", proc: SetPoly1]]; Menus.AppendMenuEntry[menu: ts.menu, entry:Menus.CreateEntry [name:"Poly2", proc: SetPoly2]]; Menus.AppendMenuEntry[menu: ts.menu, entry:Menus.CreateEntry [name:"Add ", proc: AddPolys]]; Menus.AppendMenuEntry[menu: ts.menu, entry:Menus.CreateEntry [name:"Negate ", proc: NegatePoly]]; Menus.AppendMenuEntry[menu: ts.menu, entry:Menus.CreateEntry [name:"Subtract ", proc: SubtractPolys]]; Menus.AppendMenuEntry[menu: ts.menu, entry:Menus.CreateEntry [name:"Multiply ", proc: MultiplyPolys]]; [in: in, out: out] _ ViewerIO.CreateViewerStreams[name: "Algebra",viewer: ts]; <<DO>> <<out.PutChar[in.GetChar[] ];>> <<ENDLOOP;>> <<};>> <<Commander.Register[>> <<key: "Algebra", proc: MakeCalculator, doc: "Simple algebra system"];>> END. <<>>