DIRECTORY Rope, Atom, IO, Convert, Imager, ImagerColor, MathExpr, MathConstructors, AlgebraClasses, Colors; ColorsImpl: CEDAR PROGRAM IMPORTS Atom, IO, Convert, ImagerColor, AlgebraClasses, MathConstructors EXPORTS Colors = BEGIN OPEN AC: AlgebraClasses, Colors; SyntaxError: PUBLIC ERROR [reason: ATOM] = CODE; BadElementStructure: PUBLIC ERROR [elementStructure: AC.Structure] = CODE; TypeError: PUBLIC ERROR [message: ATOM _ $Unspecified] = CODE; ClassPrintName: AC.PrintNameProc = { RETURN["Colors"]; }; ClassShortPrintName: AC.PrintNameProc = { RETURN["Colors"]; }; ClassIsElementOf: AC.ElementOfProc = { IF NOT structure.class.structureEqual[structure, item.structure] THEN RETURN[FALSE]; RETURN[ TRUE ] }; ClassLegalFirstChar: AC.LegalFirstCharOp = { SELECT char FROM IN ['A..'Z] => RETURN[TRUE]; ENDCASE; RETURN[FALSE]; }; ClassToExpr: AC.ToExprOp = { inData: ColorData; IF in=NIL THEN { out _ MathConstructors.MakeVariable["NilColor"]; RETURN; }; inData _ NARROW[in.data]; IF inData=NIL THEN { out _ MathConstructors.MakeVariable["NilColor"]; RETURN; }; out _ MathConstructors.MakeVariable[inData.name]; }; colorProp: Atom.DottedPair _ NEW[Atom.DottedPairNode_ [$ColorStructure, NIL]]; colorStructureClass: AC.StructureClass _ NEW[AC.StructureClassRec _ [ category: set, printName: ClassPrintName, shortPrintName: ClassShortPrintName, structureEqual: AC.defaultStructureEqualityTest, isElementOf: ClassIsElementOf, legalFirstChar: ClassLegalFirstChar, read: Read, fromRope: FromRope, toRope: ToRope, toIndexRope: ToRope, write: Write, toExpr: ClassToExpr, integralDomain: FALSE, gcdDomain: FALSE, euclideanDomain: FALSE, propList: LIST[colorProp] ] ]; Colors: PUBLIC AC.Structure _ NEW[AC.StructureRec _ [ class: colorStructureClass, instanceData: NIL ] ]; IsColorStructure: PUBLIC PROC [structure: AC.Structure] RETURNS [BOOL] ~ { IF Atom.GetPropFromList[structure.class.propList, $ColorStructure] # NIL THEN RETURN[TRUE] ELSE RETURN[FALSE]; }; Read: PUBLIC AC.ReadOp ~ { token: Rope.ROPE _ in.GetID[]; atom: ATOM _ Convert.AtomFromRope[token]; outData: ColorData _ NEW[ColorDataRec _ [ name: token, value: ImagerColor.ColorFromAtom[atom] ] ]; out _ NEW[AC.ObjectRec _ [structure: structure, data: outData] ]; RETURN[out]; }; FromRope: PUBLIC AC.FromRopeOp ~ { out _ Read[IO.RIS[in], structure]; }; ToRope: PUBLIC AC.ToRopeOp ~ { inData: ColorData; IF in=NIL THEN RETURN["NilColor"]; inData _ NARROW[in.data]; IF inData=NIL THEN RETURN["NilColor"]; out _ inData.name; }; Write: PUBLIC AC.WriteOp ~ { stream.PutRope[ToRope[in] ] }; END. ςColorsImpl.mesa Last Edited by: Arnon, July 19, 1985 2:54:46 pm PDT Errors Class for Color Structures Assumes that if item is a color, then it really belongs to the domain pointed to by its structure field. Predicate Conversion and IO Κ‹˜Jšœ™J™3J™šΟk ˜ Jšœ˜J˜Icodešœ˜K˜K˜Kšœ ˜ K˜ K˜J˜Jšœ˜—J˜head2šΟn œœ˜Jšœœ8˜HJšœ ˜J˜—Jšœœœ˜&head™Jš ž œœœ œœ˜0Jš žœœœœœ˜JJš ž œœœ œœ˜>—šœ™šžœœ˜$Jšœ ˜J˜—šžœœ˜)Jšœ ˜J˜—šžœœ˜&Jšœh™hJš œœ;œœœ˜TJšœœ˜Jšœ˜—šžœœ˜,šœ˜Kšœ œœ˜Kšœ˜—Kšœœ˜J˜—šž œœ ˜Jšœ˜šœœœ˜Jšœ0˜0Kšœ˜K˜—Jšœ œ ˜šœœœ˜Jšœ0˜0Kšœ˜K˜—Jšœ1˜1Jšœ˜J˜—Kšœœ(œ˜NK˜šœœœœ˜EJšœ˜Jšœ˜Jšœ$˜$Kšœœ˜0J˜Kšœ˜J˜Jšœ$˜$Jšœ ˜ Jšœ˜Jšœ˜Jšœ˜Jšœ ˜ Jšœ˜J˜K˜Kšœœ˜Kšœ œ˜Kšœœ˜K˜Jšœ œ ˜K˜—K˜š žœœœ œœ˜5Jšœ˜Jšœ˜K˜——™ š žœœœ œ œœ˜JKšœCœœœœœœœ˜nK˜K˜——šœ™šžœœœ ˜Kšœ œ˜Kšœœ˜)šœœ˜)Kšœ ˜ Kšœ&˜&K˜—Kšœœœ5˜AKšœ˜ K˜J˜—šžœœœ˜"Jšœ œœ˜"J˜J˜—šžœœœ˜Jšœ˜Jšœœœœ ˜"Jšœ œ ˜Jšœœœœ ˜&Jšœ˜K˜J˜—šžœœœ ˜Jšœ˜Jšœ˜——Jšœ˜J˜—…—