<> <> <> <<>> <<>> 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. <<>> <<>>