DIRECTORY Basics, CD, CDDirectory, Convert, IFUPW, PW, Rope; IFUPWParity: CEDAR PROGRAM IMPORTS Basics, Convert, IFUPW, PW, Rope EXPORTS IFUPW = BEGIN FlatTree: PUBLIC PROC [root: PW.ROPE, levels: INT] RETURNS[new: PW.ObjName]= { list: LIST OF PW.ObjName; limit: INT _ PW.TwoToThe[levels]-2; FOR index: INT IN [0..limit] DO list _ CONS[FlatTreeCell[root, levels, index], list] ENDLOOP; list _ CONS[Rope.Cat[root, "End"], list]; new _ PW.AbutListX[list] }; FlatTreeCell: PROC [root: PW.ROPE, levels, index: INT] RETURNS[new: PW.ObjName]= { level, test: INT _ 0; list: LIST OF PW.ObjName; ConsName: PROC[type: PW.ROPE] = {list _ CONS[Rope.Cat[root, type], list]}; ConsName[""]; FOR test_index, test/2 WHILE (test MOD 2 )=1 DO ConsName["Extend"]; level _ level +1 ENDLOOP; ConsName["Conn"]; level _ level +1; test _ Basics.BITXOR[test/2, test]; ConsName[IF (test MOD 2 )=1 THEN "DrRt" ELSE "DrLt"]; THROUGH (level..levels] DO IF ((test_test/2) MOD 2)=0 THEN ConsName["Blank"] ELSE ConsName["Pass"] ENDLOOP; new _ PW.AbutListY[IFUPW.ReverseList[list]] }; TreeConditionals: PROC [index: INT, root: PW.ROPE] RETURNS[list: LIST OF PW.ROPE]= { level, test: INT _ 0; ConsName: PROC[type: PW.ROPE] = {list _ CONS[Rope.Cat[root, "L", Convert.RopeFromCard[level], type], list]}; FOR test_index, test/2 WHILE (test MOD 2 )=1 DO ConsName["Extend"]; level _ level +1 ENDLOOP; ConsName["Conn"]; level _ level +1; test _ Basics.BITXOR[test/2, test]; ConsName[IF (test MOD 2 )=1 THEN "PassRt" ELSE "PassLt"]; FOR test_test/2, test/2 WHILE test#0 DO level _ level +1; IF (test MOD 2 )=0 THEN LOOP; ConsName["PassLt"]; ConsName["PassRt"]; ENDLOOP }; END. øIFUPWParity.mesa Copyright c 1985 by Xerox Corporation. All rights reserved. Last Edited by Curry, March 26, 1985 6:18:42 pm PST IF root is "Foo" then this procedure assumes the existance of: Foo, FooExtend, FooConn, FooDrRt, FooDrLt, FooBlank and FooPass as well as FooEnd IF root is "Foo" then this procedure assumes the existance of: Foo, FooExtend, FooConn, FooDrRt, FooDrLt, FooBlank and FooPass XorTree: PW.UserProc = {RETURN[FlatTree["Xor", 5] ]}; PW.Register[XorTree, "IPParity"]; ÊV˜šÐblœ™Jšœ<™™>šœ?™?J™——Jšœžœžœžœ ˜Jšœžœžœ˜#šžœžœžœ ž˜Jšœžœ*žœ˜=—Jšœžœ˜)Jšœžœ˜J˜—šŸ œžœžœžœžœžœžœ ˜Ršœ>™>Jšœ?™?—Jšœ žœ˜Jšœžœžœžœ ˜Jš Ÿœžœžœžœ žœ˜JJšœ ˜ šžœžœžœž˜/Jšœ%žœ˜-—Jšœ2žœ˜GJš œ žœžœžœžœ ˜5šžœž˜šžœžœ˜Jšžœ˜Jšžœ˜—Jšžœ˜—Jšœžœ&˜.J˜—šŸœžœ žœžœžœžœžœžœžœžœ˜TJšœ žœ˜šŸœžœžœžœ˜Jšœžœ@˜L—šžœžœžœž˜/Jšœ%žœ˜-—Jšœ2žœ˜GJš œ žœžœžœ žœ ˜9šžœžœž˜'Jšœ˜Jšžœžœžœžœ˜Jšœ˜Jšœ˜Jšžœ˜ ——J™Jšœ žœ žœ™5šžœ ™"J˜—Jšžœ˜—J™J™—…—n ¼