DIRECTORY CD, CDCore, CDExtras, CDGenerate, CDRemote, CDGenerateImports, Core, CoreProperties, Rope; CDSomeCoreGeneratorsImpl: CEDAR MONITOR IMPORTS CDCore, CDExtras, CDGenerate, CDRemote, CDGenerateImports, CoreProperties, Rope = BEGIN getTableFromCore: ATOM _ $CDTable; getTableFromCD: ATOM _ $CDCoreTable; directoryTable: CDGenerate.Table _ CDGenerate.AssertTable["DIRECTORY"]; GetTab: PROC [coreDesign: Core.Design, cdDesign: CD.Design] RETURNS [table: CDGenerate.Table_NIL] = BEGIN WITH CoreProperties.GetProp[coreDesign.properties, getTableFromCore] SELECT FROM r: Rope.ROPE => RETURN [CDRemote.GetTable[r]]; t: CDGenerate.Table => RETURN [t]; d: CD.Design => RETURN [CDRemote.GetTable[d.name]]; ENDCASE => NULL; table _ directoryTable; END; CDGenerateGenerator: CDCore.CreateProc = BEGIN table: CDGenerate.Table; keyName: Rope.ROPE _ NIL; IF param=NIL THEN table _ GetTab[coreDesign, cdDesign] ELSE { table _ CDGenerate.AssertTable[CDExtras.ToRope[param.first]]; param _ param.rest; }; IF param#NIL THEN keyName _ CDExtras.ToRope[param.first]; IF ~Rope.IsEmpty[keyName] THEN keyName _ coreCellType.name; ob _ CDGenerate.FetchNCall[table: table, design: cdDesign, key: keyName]; END; CDGetGenerator: CDCore.CreateProc = BEGIN table: CDGenerate.Table _ GetTab[coreDesign, cdDesign]; keyName: Rope.ROPE _ NIL; IF param#NIL THEN keyName _ CDExtras.ToRope[param.first]; IF ~Rope.IsEmpty[keyName] THEN keyName _ coreCellType.name; ob _ CDGenerate.FetchNCall[table: table, design: cdDesign, key: keyName]; END; CDFetchGenerator: CDCore.CreateProc = BEGIN table: CDGenerate.Table; keyName: Rope.ROPE _ NIL; IF param=NIL THEN table _ GetTab[coreDesign, cdDesign] ELSE { table _ CDRemote.GetTable[CDExtras.ToRope[param.first]]; param _ param.rest; }; IF param#NIL THEN keyName _ CDExtras.ToRope[param.first]; IF ~Rope.IsEmpty[keyName] THEN keyName _ coreCellType.name; ob _ CDGenerate.FetchNCall[table: table, design: cdDesign, key: keyName]; END; CDImportGenerator: CDCore.CreateProc = BEGIN table: CDGenerate.Table; keyName: Rope.ROPE _ NIL; IF param=NIL THEN { WITH CoreProperties.GetProp[coreDesign.properties, getTableFromCore] SELECT FROM r: Rope.ROPE => table _ CDGenerateImports.GetImportTable[r]; d: CD.Design => table _ CDGenerateImports.GetImportTable[d.name]; ENDCASE => ERROR CDCore.Problem[generatorParameterError, "no design to import from"]; } ELSE { table _ CDGenerateImports.GetImportTable[CDExtras.ToRope[param.first]]; param _ param.rest; }; IF param#NIL THEN keyName _ CDExtras.ToRope[param.first]; IF ~Rope.IsEmpty[keyName] THEN keyName _ coreCellType.name; ob _ CDGenerate.FetchNCall[table: table, design: cdDesign, key: keyName]; END; CDCore.RegisterGenerator[CDGenerateGenerator, $CDGenerate]; CDCore.RegisterGenerator[CDGetGenerator, $CDGet]; CDCore.RegisterGenerator[CDFetchGenerator, $CDFetch]; CDCore.RegisterGenerator[CDImportGenerator, $CDImport]; END. ŒCDSomeCoreGeneratorsImpl.mesa Copyright c 1985 by Xerox Corporation. All rights reserved. by Christian Jacobi, August 14, 1985 2:35:33 pm PDT Last Edited by Christian Jacobi, September 1, 1985 2:36:35 pm PDT --do we want to specify this in the ChipNDale design? WITH CDProperties.GetPropFromDesign[cdDesign, getTableFromCD] SELECT FROM t: CDGenerate.Table => RETURN [t]; d: CD.Design => RETURN [CDRemote.GetTable[d.name]]; r: Rope.ROPE => RETURN [CDRemote.GetTable[r]]; ENDCASE => NULL; --first parameter is table; second parameter is entry --default entry is name of coreCellType --(there also is a default table) --parameter is entry --default entry is name of coreCellType --(uses default table) --first parameter is design name; second parameter is object name --first parameter is design name; second parameter is object name --this procedure does not default into checking the ChipNDale design Ê%˜šœ™Jšœ Ïmœ1™