Ok, I will not claim I understand how this works, but it appears to do. :-) Still needs more testing, but for now I think it works.
Cheers, Malte I have been asking a colleague for help (Danke danke danke Steffen) and here is what he came up with: local sRelations, sOpList on mouseUp local tValid delete variable sRelations delete variable sOpList set the itemdel to TAB -- fld Data is TAb delimited. Person1 TAB Operator TAB Person2 repeat for each line theLine in fld "data" if item 2 of theLine = "=" then put "=" into sRelations[item 1 of theLine][item 3 of theLine] put "=" into sRelations[item 3 of theLine][item 1 of theLine] end if if item 2 of theLine = "<" then put "<" into sRelations[item 1 of theLine][item 3 of theLine] put ">" into sRelations[item 3 of theLine][item 1 of theLine] end if if item 2 of theLine = ">" then put ">" into sRelations[item 1 of theLine][item 3 of theLine] put "<" into sRelations[item 3 of theLine][item 1 of theLine] end if end repeat answer checkForValidRelation(the text of fld "pers1",the text of fld "pers2",the label of btn "relation") -- returns true or false for the validity of the relation you are about to set. end mouseUp private function checkForValidRelation pPers1,pPers2,pRelation local tResolved put resolveRelation(pPers1,pPers2,pRelation) into tResolved if not tResolved then return true return (checkOperator(pRelation) = pRelation) end checkForValidRelation private function resolveRelation pPers1,pPers2,pRelation if sRelations[pPers1][pPers2] is not empty then put sRelations[pPers1][pPers2] & cr after sOpList return true end if -- iterate through list return traverseList(pPers1,pPers2,pRelation) end resolveRelation private function traverseList pPers1,pPers2,pRelation local tOther put the keys of sRelations[pPers1] into tOther repeat for each line personB in tOther if personB = pPers2 then put sRelations[pPers1][personB] & cr after sOpList return true else if traverseList(pPers1,personB,pRelation) then return true end if end if end repeat return false end traverseList private function checkOperator pRelation local tSame, tLast put true into tSame put pRelation into tLast repeat for each line theLine in sOpList if theLine is not empty then if theLine <> pRelation then put false into tSame end if put theLine into tLast end if end repeat if not tSame then return tLast end if return pRelation end checkOperator _______________________________________________ use-livecode mailing list use-livecode@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-livecode