### Liberty output interface ### sub ALF_WriteLibertyObject { local($object,$tab) = @_; ### prints all data related to $object in liberty format usign indents defined by $tab. Returns true local ($parent,$type,$name,$value,$children) = &ALF_ObjectInfo($object); local ($index1,$index2) = &ALF_BusInfo($object); $libtype = $ALF_LibertyType{$object}; $libname = $ALF_LibertyName{$object}; $libvalue = $ALF_LibertyValue{$object}; print(FILEOUT &AutoTab($tab),"/* object(parent) = $object($parent) */\n") if defined(libtype) && ($ALF_Debug > 1); if (! $libtype) { ### untranslatable object } elsif ($ALF_LibertySyntax{$object} eq 'define') { ### define object local ($attribute_name,$group_type,$group_name) = &Array($libvalue); print(FILEOUT &AutoTab($tab),"define ($attribute_name, $group_type, $group_name) ;\n"); } elsif ($ALF_LibertySyntax{$object} eq 'group') { ### compound object print(FILEOUT &AutoTab($tab),"$libtype ($libname) {\n"); foreach $child (&Array($children)) { &ALF_WriteLibertyObject($child,$tab+1) unless $ALF_Hidden{$child}; } if (&StringMatch($libtype,'library','cell')) { print(FILEOUT &AutoTab($tab),"} // $libtype ($libname)\n"); } else { print(FILEOUT &AutoTab($tab),"}\n"); } } elsif ($ALF_LibertySyntax{$object} eq 'complex_attribute') { ### semi-compound object local @libvalue = &ALF_Array2Liberty($libvalue); if ($#libvalue) { ### data in multiple rows print(FILEOUT &AutoTab($tab),"$libtype (\\\n"); foreach $i (0..$#libvalue) { local $last = ($i < $#libvalue)? ',\\' : '\\'; print(FILEOUT &AutoTab($tab+1),$libvalue[$i],"$last\n"); } print(FILEOUT &AutoTab($tab),") ;\n"); } else { ### data in one row print(FILEOUT &AutoTab($tab),"$libtype (@libvalue) ;\n"); } } elsif ($ALF_LibertySyntax{$object} eq 'simple_attribute') { ### atomic object print(FILEOUT &AutoTab($tab),"$libtype : $libvalue ;\n"); } 1; } ### Liberty data transformation ### sub ALF_Array2Liberty { local($array) = @_; local $format = $ALF_ArrayFormat{$array}; local @array = &Array($array); local @libarray; if ($format) { local $left = 0; while ($left <= $#array) { local $right = $left + $format - 1; $right = $#array if ($right > $#array); $libarray[$#libarray+1] = "\42".join(', ',&SubArray($array,$left,$right))."\42"; $left = $right + 1; } } elsif (defined($format)) { $libarray[0] = "\42".join(', ',@array)."\42"; } else { $libarray[0] = join(', ',@array); } #print("ALF_Array2Liberty:\tformat=$format\t(@array) -> (@libarray)\n"); @libarray; } 1;