DIRECTORY Basics, CD, CDDirectory, Convert, IFUPW, PW, Rope; Parity: CEDAR PROGRAM IMPORTS Basics, Convert, IFUPW, PW, Rope EXPORTS IFUPW = BEGIN OPEN IFUPW; FlatTree: PUBLIC PROC [root: PW.ROPE, levels: CARDINAL] RETURNS[new: PW.ObjName]= { list: LIST OF PW.ObjName; limit: CARDINAL _ PW.TwoToThe[levels]-2; FOR index: CARDINAL 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: CARDINAL] RETURNS[new: PW.ObjName]= { level, test: CARDINAL _ 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[ReverseList[list]] }; TreeConditionals: PROC [index: CARDINAL, root: PW.ROPE] RETURNS[list: LIST OF PW.ROPE]= { level, test: CARDINAL _ 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. ˜Parity.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 ÊD˜šÐbl œ™ Jšœ<™™>šœ?™?J™——Jšœžœžœžœ ˜Jšœžœžœ˜(šžœžœžœ ž˜$Jšœžœ*žœ˜=—Jšœžœ˜)Jšœžœ˜J˜—šŸ œžœžœžœžœžœžœ ˜Wšœ>™>Jšœ?™?—Jšœ žœ˜Jšœžœžœžœ ˜Jš Ÿœžœžœžœ žœ˜JJšœ ˜ šžœžœžœž˜/Jšœ%žœ˜-—Jšœ2žœ˜GJš œ žœžœžœžœ ˜5šžœž˜šžœžœ˜Jšžœ˜Jšžœ˜—Jšžœ˜—Jšœžœ ˜(J˜—šŸœžœ žœžœžœžœžœžœžœžœ˜YJšœ žœ˜šŸœžœžœžœ˜Jšœžœ@˜L—šžœžœžœž˜/Jšœ%žœ˜-—Jšœ2žœ˜GJš œ žœžœžœ žœ ˜9šžœžœž˜'Jšœ˜Jšžœžœžœžœ˜Jšœ˜Jšœ˜Jšžœ˜ —J˜—Jšžœ˜—J™J™—…—’ n