All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.sun.electric.tool.io.IOTool Maven / Gradle / Ivy

/* -*- tab-width: 4 -*-
 *
 * Electric(tm) VLSI Design System
 *
 * File: IOTool.java
 *
 * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
 *
 * Electric(tm) is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 3 of the License, or
 * (at your option) any later version.
 *
 * Electric(tm) is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with Electric(tm); see the file COPYING.  If not, write to
 * the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
 * Boston, Mass 02111-1307, USA.
 */
package com.sun.electric.tool.io;

import com.sun.electric.database.EditingPreferences;
import com.sun.electric.database.hierarchy.Cell;
import com.sun.electric.database.hierarchy.Library;
import com.sun.electric.database.id.CellId;
import com.sun.electric.database.text.Pref;
import com.sun.electric.database.text.Setting;
import com.sun.electric.database.text.TextUtils;
import com.sun.electric.database.variable.VarContext;
import com.sun.electric.database.variable.Variable;
import com.sun.electric.technology.Technology;
import com.sun.electric.tool.Job;
import com.sun.electric.tool.Tool;
import com.sun.electric.tool.ToolSettings;
import com.sun.electric.tool.io.input.Input.InputPreferences;
import com.sun.electric.tool.io.output.Output;
import com.sun.electric.util.ElapseTimer;

import java.lang.reflect.Method;
import java.net.URL;
import java.util.BitSet;
import java.util.Date;
import java.util.Map;

/**
 * This class manages reading files in different formats.
 * The class is sub-classed by the different file readers.
 */
public class IOTool extends Tool
{
	/** the IO tool. */										private static IOTool tool = new IOTool();
    static { FileType.getFileTypeGroups(); } // Preallocate preferences

	/** Variable key for true library of fake cell. */		public static final Variable.Key IO_TRUE_LIBRARY = Variable.newKey("IO_true_library");

	// ---------------------- private and protected methods -----------------

	/**
	 * The constructor sets up the I/O tool.
	 */
	protected IOTool()
	{
		super("io");
	}

	/**
	 * Method to retrieve the singleton associated with the IOTool tool.
	 * @return the IOTool tool.
	 */
	public static IOTool getIOTool() { return tool; }

	/****************************** SKILL FORMAT INTERFACE ******************************/

	private static boolean skillChecked = false;
	private static Class skillClass = null;
	private static Method skillOutputMethod;

	/**
	 * Method to tell whether Skill output is available.
	 * Skill is a proprietary format of Cadence, and only valid licensees are given this module.
	 * This method dynamically figures out whether the Skill module is present by using reflection.
	 * @return true if the Skill output module is available.
	 */
	public static boolean hasSkill()
	{
		if (!skillChecked)
		{
			skillChecked = true;

			// find the Skill class
			try
			{
				skillClass = Class.forName("com.sun.electric.plugins.skill.Skill");
			} catch (ClassNotFoundException e)
			{
				TextUtils.recordMissingPrivateComponent("Skill");
				skillClass = null;
				return false;
			}

			// find the necessary method on the Skill class
			try
			{
				skillOutputMethod = skillClass.getMethod("writeSkillFile", new Class[] {Cell.class, String.class, SkillPreferences.class});
			} catch (NoSuchMethodException e)
			{
				skillClass = null;
				return false;
			}
		}

		// if already initialized, return
		if (skillClass == null) return false;
	 	return true;
	}

	public static class SkillPreferences extends Output.OutputPreferences
    {
		public boolean exportsOnly;
		public String libName;
		public boolean gdsNameLimit;
		public int gdsCellNameLenMax;
		public boolean gdsOutUpperCase;
		public boolean flattenHierarchy;
		public boolean excludeSubcells;

		public SkillPreferences(boolean factory, boolean exportsOnly, Cell cell)
		{
			super(factory);
			this.exportsOnly = exportsOnly;
			gdsNameLimit = IOTool.isSkillGDSNameLimit();
			gdsCellNameLenMax = IOTool.getGDSCellNameLenMax();
			gdsOutUpperCase = IOTool.isGDSOutUpperCase();
			flattenHierarchy = IOTool.isSkillFlattensHierarchy();
			excludeSubcells = IOTool.isSkillExcludesSubcells();

			// get SKILL library name
			libName = Job.getUserInterface().askForInput("Library name to use in SKILL file:",
				"Name Selection", cell.getLibrary().getName());
		}

        public Output doOutput(Cell cell, VarContext context, String filePath)
        {
    		if (!hasSkill()) return null;
            Output out = null;
            try
    		{
    			out = (Output)skillOutputMethod.invoke(skillClass, new Object[] {cell, filePath, this});
    		} catch (Exception e)
    		{
                String msg = "Unable to run the Skill output module: " + e.getMessage();
                if (out != null)
                    out.reportError(msg);
                else
                    System.out.println(msg);
    		}
            return out;
        }
    }

	/****************************** DAIS FORMAT INTERFACE ******************************/

	private static boolean daisChecked = false;
	private static Class daisClass = null;
	private static Method daisInputMethod;

	/**
	 * Method to tell whether Dais input is available.
	 * Dais is a proprietary format of Sun Microsystems.
	 * This method dynamically figures out whether the Dais module is present by using reflection.
	 * @return true if the Dais input module is available.
	 */
	public static boolean hasDais()
	{
		if (!daisChecked)
		{
			daisChecked = true;

			// find the Dais class
			try
			{
				daisClass = Class.forName("com.sun.electric.plugins.dais.Dais");
			} catch (ClassNotFoundException e)
			{
				TextUtils.recordMissingPrivateComponent("Dais");
				daisClass = null;
				return false;
			}

			// find the necessary method on the Dais class
			try
			{
				daisInputMethod = daisClass.getMethod("readDaisFile", new Class[] {URL.class, Library.class, boolean.class, EditingPreferences.class, DaisPreferences.class});
			} catch (NoSuchMethodException e)
			{
				daisClass = null;
				return false;
			}
		}

		// if already initialized, return
		if (daisClass == null) return false;
	 	return true;
	}

	/**
	 * Class to invoke the Dais input module via reflection.
	 */
	public static class DaisPreferences extends InputPreferences
    {
		private boolean newLib;
		public boolean displayOnly;
		public boolean readCellInstances;
		public boolean readGlobalWires;
		public boolean readPowerAndGround;
		public boolean readDetailWires;
		public boolean readConnectivity;

		public DaisPreferences(boolean factory, boolean newLib)
		{
			super(factory);
			this.newLib = newLib;
            if (!factory)
            {
                displayOnly = IOTool.isDaisDisplayOnly();
                readCellInstances = IOTool.isDaisReadCellInstances();
                readGlobalWires = IOTool.isDaisReadGlobalWires();
                readPowerAndGround = IOTool.isDaisReadPowerAndGround();
                readDetailWires = IOTool.isDaisReadDetailWires();
                readConnectivity = IOTool.isDaisReadConnectivity();
            }
		}

        @Override
        public Library doInput(URL fileURL, Library lib, Technology tech, EditingPreferences ep, Map currentCells, Map nodesToExpand, Job job)
        {
    		if (!hasDais()) return null;
    		try
    		{
    			long startTime = System.currentTimeMillis();
    			long startMemory = com.sun.electric.Main.getMemoryUsage();
    			daisInputMethod.invoke(daisClass, new Object[] {fileURL, lib, Boolean.valueOf(newLib), ep, this});
				long endTime = System.currentTimeMillis();
    			ElapseTimer et = ElapseTimer.createInstanceByValues(startTime, endTime);
	    		long end = com.sun.electric.Main.getMemoryUsage();
	    		long amt = (end-startMemory)/1024/1024;
	    		System.out.println("*** DAIS INPUT TOOK " + et + ", " + amt + " megabytes");
    		} catch (Exception e)
    		{
    			System.out.println("Unable to run the Dais input module (" + e.getClass() + ")");
    			e.printStackTrace(System.out);
    		}
			return lib;
        }
    }

	/****************************** GENERAL IO PREFERENCES ******************************/

	private static Pref cacheBackupRedundancy = Pref.makeIntPref("OutputBackupRedundancy", IOTool.tool.prefs, 0);
	/**
	 * Method to tell what kind of redundancy to apply when writing library files.
	 * The value is:
	 * 0 for no backup (just overwrite the old file) [the default];
	 * 1 for 1-level backup (rename the old file to have a "~" at the end);
	 * 2 for full history backup (rename the old file to have date information in it).
	 * @return the level of redundancy to apply when writing library files.
	 */
	public static int getBackupRedundancy() { return cacheBackupRedundancy.getInt(); }
	/**
	 * Method to set the level of redundancy to apply when writing library files.
	 * The value is:
	 * 0 for no backup (just overwrite the old file);
	 * 1 for 1-level backup (rename the old file to have a "~" at the end);
	 * 2 for full history backup (rename the old file to have date information in it).
	 * @param r the level of redundancy to apply when writing library files.
	 */
	public static void setBackupRedundancy(int r) { cacheBackupRedundancy.setInt(r); }
	/**
	 * Method to tell what kind of redundancy to apply when writing library files, by default.
	 * The value is:
	 * 0 for no backup (just overwrite the old file) [the default];
	 * 1 for 1-level backup (rename the old file to have a "~" at the end);
	 * 2 for full history backup (rename the old file to have date information in it).
	 * @return the level of redundancy to apply when writing library files, by default.
	 */
	public static int getFactoryBackupRedundancy() { return cacheBackupRedundancy.getIntFactoryValue(); }

	/****************************** GENERAL OUTPUT PREFERENCES ******************************/

	/**
	 * Method to tell whether to add the copyright message to output decks.
	 * The default is "false".
	 * @return true to add the copyright message to output decks.
	 */
	public static boolean isUseCopyrightMessage() { return getUseCopyrightMessageSetting().getBoolean(); }
	/**
	 * Returns project preferences to tell whether to add the copyright message to output decks.
	 * @return project preferences to tell whether to add the copyright message to output decks.
	 */
	public static Setting getUseCopyrightMessageSetting() { return ToolSettings.getUseCopyrightMessageSetting(); }

	/**
	 * Method to tell the copyright message that will be added to output decks.
	 * The default is "".
	 * @return the copyright message that will be added to output decks.
	 */
	public static String getCopyrightMessage() { return getCopyrightMessageSetting().getString(); }
	/**
	 * Returns project preferences to tell the copyright message that will be added to output decks.
	 * @return project preferences to tell the copyright message that will be added to output decks.
	 */
	public static Setting getCopyrightMessageSetting() { return ToolSettings.getCopyrightMessageSetting(); }

	private static Pref cachePlotArea = Pref.makeIntPref("PlotArea", IOTool.tool.prefs, 0);
	/**
	 * Method to tell the area of the screen to plot for printing/PostScript/HPGL.
	 * @return the area of the screen to plot for printing/PostScript/HPGL:
	 * 0=plot the entire cell (the default);
	 * 1=plot only the highlighted area;
	 * 2=plot only the displayed window.
	 */
	public static int getPlotArea() { return cachePlotArea.getInt(); }
	/**
	 * Method to set the area of the screen to plot for printing/PostScript/HPGL.
	 * @param pa the area of the screen to plot for printing/PostScript/HPGL.
	 * 0=plot the entire cell;
	 * 1=plot only the highlighted area;
	 * 2=plot only the displayed window.
	 */
	public static void setPlotArea(int pa) { cachePlotArea.setInt(pa); }
	/**
	 * Method to tell the area of the screen to plot for printing/PostScript/HPGL, by default.
	 * @return the area of the screen to plot for printing/PostScript/HPGL, by default:
	 * 0=plot the entire cell;
	 * 1=plot only the highlighted area;
	 * 2=plot only the displayed window.
	 */
	public static int getFactoryPlotArea() { return cachePlotArea.getIntFactoryValue(); }

	private static Pref cachePlotDate = Pref.makeBooleanPref("PlotDate", IOTool.tool.prefs, false);
	/**
	 * Method to tell whether to plot the date in PostScript output.
	 * The default is "false".
	 * @return whether to plot the date in PostScript output.
	 */
	public static boolean isPlotDate() { return cachePlotDate.getBoolean(); }
	/**
	 * Method to set whether to plot the date in PostScript output.
	 * @param pd true to plot the date in PostScript output.
	 */
	public static void setPlotDate(boolean pd) { cachePlotDate.setBoolean(pd); }
	/**
	 * Method to tell whether to plot the date in PostScript output by default.
	 * @return whether to plot the date in PostScript output by default.
	 */
	public static boolean isFactoryPlotDate() { return cachePlotDate.getBooleanFactoryValue(); }

	private static Pref cachePrinterName = null;

	private static Pref getCachePrinterName()
	{
		if (cachePrinterName == null)
		{
			cachePrinterName = Pref.makeStringPref("PrinterName", IOTool.tool.prefs, "");
//			PrintService defPrintService = PrintServiceLookup.lookupDefaultPrintService();
//			if (defPrintService == null) cachePrinterName = Pref.makeStringPref("PrinterName", IOTool.tool.prefs, ""); else
//				cachePrinterName = Pref.makeStringPref("PrinterName", IOTool.tool.prefs, defPrintService.getName());
		}
		return cachePrinterName;
	}

	/**
	 * Method to tell the default printer name to use.
	 * The default is "".
	 * @return the default printer name to use.
	 */
	public static String getPrinterName() { return getCachePrinterName().getString(); }
	/**
	 * Method to set the default printer name to use.
	 * @param pName the default printer name to use.
	 */
	public static void setPrinterName(String pName) { getCachePrinterName().setString(pName); }

	/****************************** CIF PREFERENCES ******************************/

	/**
	 * Method to tell whether CIF Output mimics the display.
	 * To mimic the display, unexpanded cell instances are described as black boxes,
	 * instead of calls to their contents.
	 * The default is "false".
	 * @return true if CIF Output mimics the display.
	 */
	public static boolean isCIFOutMimicsDisplay() { return getCIFOutMimicsDisplaySetting().getBoolean(); }
	/**
	 * Returns Setting to tell whether CIF Output mimics the display.
	 * To mimic the display, unexpanded cell instances are described as black boxes,
	 * instead of calls to their contents.
	 * @return Setting to tell whether CIF Output mimics the display.
	 */
	public static Setting getCIFOutMimicsDisplaySetting() { return ToolSettings.getCIFOutMimicsDisplaySetting(); }

	/**
	 * Method to tell whether CIF Output merges boxes into complex polygons.
	 * This takes more time but produces a smaller output file.
	 * The default is "false".
	 * @return true if CIF Output merges boxes into complex polygons.
	 */
	public static boolean isCIFOutMergesBoxes() { return getCIFOutMergesBoxesSetting().getBoolean(); }
	/**
	 * Returns Setting to tell whether CIF Output merges boxes into complex polygons.
	 * This takes more time but produces a smaller output file.
	 * @return Setting to tell whether CIF Output merges boxes into complex polygons.
	 */
	public static Setting getCIFOutMergesBoxesSetting() { return ToolSettings.getCIFOutMergesBoxesSetting(); }

	/**
	 * Method to tell whether CIF Output instantiates the top-level.
	 * When this happens, a CIF "call" to the top cell is emitted.
	 * The default is "true".
	 * @return true if CIF Output merges boxes into complex polygons.
	 */
	public static boolean isCIFOutInstantiatesTopLevel() { return getCIFOutInstantiatesTopLevelSetting().getBoolean(); }
	/**
	 * Returns Setting to tell whether CIF Output merges boxes into complex polygons.
	 * When this happens, a CIF "call" to the top cell is emitted.
	 * @return Setting to tell whether CIF Output merges boxes into complex polygons.
	 */
	public static Setting getCIFOutInstantiatesTopLevelSetting() { return ToolSettings.getCIFOutInstantiatesTopLevelSetting(); }

	private static Pref cacheCIFInSquaresWires = Pref.makeBooleanPref("CIFInSquaresWires", IOTool.tool.prefs, true);
	/**
	 * Method to tell whether CIF input makes wire ends square or round.
	 * The default is "true" (square).
	 * @return true if CIF input makes wire ends square.
	 */
	public static boolean isCIFInSquaresWires() { return cacheCIFInSquaresWires.getBoolean(); }
	/**
	 * Method to set whether CIF input makes wire ends square or round.
	 * @param s true if CIF input makes wire ends square.
	 */
	public static void setCIFInSquaresWires(boolean s) { cacheCIFInSquaresWires.setBoolean(s); }
	/**
	 * Method to tell whether CIF input makes wire ends square or round by default.
	 * The default is "true" (square).
	 * @return true if CIF input makes wire ends square by default.
	 */
	public static boolean isFactoryCIFInSquaresWires() { return cacheCIFInSquaresWires.getBooleanFactoryValue(); }

	/**
	 * Method to tell what scale factor to use for CIF Output.
	 * The scale factor is used in cell headers to avoid precision errors.
	 * The default is "1".
	 * @return the scale factor to use for CIF Output.
	 */
	public static int getCIFOutScaleFactor() { return getCIFOutScaleFactorSetting().getInt(); }
	/**
	 * Returns Setting to tell the scale factor to use for CIF Output.
	 * The scale factor is used in cell headers to avoid precision errors.
	 * @return Setting to tell the scale factor to use for CIF Output.
	 */
	public static Setting getCIFOutScaleFactorSetting() { return ToolSettings.getCIFOutScaleFactor(); }

	/****************************** DEF PREFERENCES ******************************/

	private static Pref cacheDEFLogicalPlacement = Pref.makeBooleanPref("DEFLogicalPlacement", IOTool.tool.prefs, true);
	/**
	 * Method to tell whether DEF Input makes logical placement.
	 * The default is "true" (do the logical placement).
	 * @return true if  DEF Input makes logical placement.
	 */
	public static boolean isDEFLogicalPlacement() { return cacheDEFLogicalPlacement.getBoolean(); }
	/**
	 * Method to set whether  DEF Input makes logical placement.
	 * @param on true if  DEF Input makes logical placement.
	 */
	public static void setDEFLogicalPlacement(boolean on) { cacheDEFLogicalPlacement.setBoolean(on); }
	/**
	 * Method to tell whether DEF Input makes logical placement by default.
	 * The default is "true" (do the logical placement).
	 * @return true if  DEF Input makes logical placement by default.
	 */
	public static boolean isFactoryDEFLogicalPlacement() { return cacheDEFLogicalPlacement.getBooleanFactoryValue(); }

	private static Pref cacheDEFPhysicalPlacement = Pref.makeBooleanPref("DEFPhysicalPlacement", IOTool.tool.prefs, true);
	/**
	 * Method to tell whether DEF Input makes physical placement.
	 * The default is "true" (do the physical placement).
	 * @return true if  DEF Input makes physical placement.
	 */
	public static boolean isDEFPhysicalPlacement() { return cacheDEFPhysicalPlacement.getBoolean(); }
	/**
	 * Method to set whether  DEF Input makes physical placement.
	 * @param on true if  DEF Input makes physical placement.
	 */
	public static void setDEFPhysicalPlacement(boolean on) { cacheDEFPhysicalPlacement.setBoolean(on); }
	/**
	 * Method to tell whether DEF Input makes physical placement by default.
	 * The default is "true" (do the physical placement).
	 * @return true if  DEF Input makes physical placement by default.
	 */
	public static boolean isFactoryDEFPhysicalPlacement() { return cacheDEFPhysicalPlacement.getBooleanFactoryValue(); }

	private static Pref cacheDEFIgnorePhysicalInNets = Pref.makeBooleanPref("DEFIgnorePhysicalInNets", IOTool.tool.prefs, false);
	/**
	 * Method to tell whether DEF Input makes logical placement.
	 * The default is "true" (do the logical placement).
	 * @return true if  DEF Input makes logical placement.
	 */
	public static boolean isDEFIgnorePhysicalInNets() { return cacheDEFIgnorePhysicalInNets.getBoolean(); }
	/**
	 * Method to set whether  DEF Input makes logical placement.
	 * @param on true if  DEF Input makes logical placement.
	 */
	public static void setDEFIgnorePhysicalInNets(boolean on) { cacheDEFIgnorePhysicalInNets.setBoolean(on); }
	/**
	 * Method to tell whether DEF Input makes logical placement by default.
	 * The default is "true" (do the logical placement).
	 * @return true if  DEF Input makes logical placement by default.
	 */
	public static boolean isFactoryDEFIgnorePhysicalInNets() { return cacheDEFIgnorePhysicalInNets.getBooleanFactoryValue(); }

	private static Pref cacheDEFIgnoreLogicalInSpecialNets = Pref.makeBooleanPref("DEFIgnoreLogicalInSpecialNets", IOTool.tool.prefs, false);
	/**
	 * Method to tell whether DEF Input makes logical placement.
	 * The default is "true" (do the logical placement).
	 * @return true if  DEF Input makes logical placement.
	 */
	public static boolean isDEFIgnoreLogicalInSpecialNets() { return cacheDEFIgnoreLogicalInSpecialNets.getBoolean(); }
	/**
	 * Method to set whether  DEF Input makes logical placement.
	 * @param on true if  DEF Input makes logical placement.
	 */
	public static void setDEFIgnoreLogicalInSpecialNets(boolean on) { cacheDEFIgnoreLogicalInSpecialNets.setBoolean(on); }
	/**
	 * Method to tell whether DEF Input makes logical placement by default.
	 * The default is "true" (do the logical placement).
	 * @return true if  DEF Input makes logical placement by default.
	 */
	public static boolean isFactoryDEFIgnoreLogicalInSpecialNets() { return cacheDEFIgnoreLogicalInSpecialNets.getBooleanFactoryValue(); }

	private static Pref cacheDEFUsePureLayerNodes = Pref.makeBooleanPref("DEFUsePureLayerNodes", IOTool.tool.prefs, false);
	/**
	 * Method to tell whether DEF Input makes logical placement.
	 * The default is "true" (do the logical placement).
	 * @return true if  DEF Input makes logical placement.
	 */
	public static boolean isDEFUsePureLayerNodes() { return cacheDEFUsePureLayerNodes.getBoolean(); }
	/**
	 * Method to set whether  DEF Input makes logical placement.
	 * @param on true if  DEF Input makes logical placement.
	 */
	public static void setDEFUsePureLayerNodes(boolean on) { cacheDEFUsePureLayerNodes.setBoolean(on); }
	/**
	 * Method to tell whether DEF Input makes logical placement by default.
	 * The default is "true" (do the logical placement).
	 * @return true if  DEF Input makes logical placement by default.
	 */
	public static boolean isFactoryDEFUsePureLayerNodes() { return cacheDEFUsePureLayerNodes.getBooleanFactoryValue(); }

	/****************************** GDS PREFERENCES ******************************/

	/**
	 * Method to tell whether GDS Output merges boxes into complex polygons.
	 * This takes more time but produces a smaller output file.
	 * The default is "false".
	 * @return true if GDS Output merges boxes into complex polygons.
	 */
	public static boolean isGDSOutMergesBoxes() { return getGDSOutMergesBoxesSetting().getBoolean(); }
	/**
	 * Returns Setting to tell whether GDS Output merges boxes into complex polygons.
	 * This takes more time but produces a smaller output file.
	 * @return Setting to tell if GDS Output merges boxes into complex polygons.
	 */
	public static Setting getGDSOutMergesBoxesSetting() { return ToolSettings.getGDSOutMergesBoxesSetting(); }

	/**
	 * Method to tell whether GDS Output writes pins at Export locations.
	 * Some systems can use this information to reconstruct export locations.
	 * The default is "false".
	 * @return true if GDS Output writes pins at Export locations.
	 */
	public static boolean isGDSOutWritesExportPins() { return getGDSOutWritesExportPinsSetting().getBoolean(); }
	/**
	 * Returns Setting to tell whether GDS Output writes pins at Export locations.
	 * Some systems can use this information to reconstruct export locations.
	 * @return Setting to tell whether GDS Output writes pins at Export locations.
	 */
	public static Setting getGDSOutWritesExportPinsSetting() { return ToolSettings.getGDSOutWritesExportPinsSetting(); }

	/**
	 * Method to tell whether GDS Output makes all text upper-case.
	 * Some systems insist on this.
	 * The default is "false".
	 * @return true if GDS Output makes all text upper-case.
	 */
	public static boolean isGDSOutUpperCase() { return getGDSOutUpperCaseSetting().getBoolean(); }
	/**
	 * Returns Setting to tell whether GDS Output makes all text upper-case.
	 * Some systems insist on this.
	 * @return Setting to tell whether GDS Output makes all text upper-case.
	 */
	public static Setting getGDSOutUpperCaseSetting() { return ToolSettings.getGDSOutUpperCaseSetting(); }

	/**
	 * Method to tell the default GDS layer to use for the text of Export pins.
	 * Export pins are annotated with text objects on this layer.
	 * If this is negative, do not write Export pins.
	 * The default is "230".
	 * @return the default GDS layer to use for the text of Export pins.
	 */
	public static int getGDSOutDefaultTextLayer() { return getGDSOutDefaultTextLayerSetting().getInt(); }
	/**
	 * Returns Setting to tell the default GDS layer to use for the text of Export pins.
	 * Export pins are annotated with text objects on this layer.
	 * If this is negative, do not write Export pins.
	 * @return Setting to tell to set the default GDS layer to use for the text of Export pins.
	 */
	public static Setting getGDSOutDefaultTextLayerSetting() { return ToolSettings.getGDSOutDefaultTextLayerSetting(); }

	/**
	 * Method to get the state of whether the GDS writer converts brackets
	 * to underscores in export names.
	 */
	public static boolean getGDSOutputConvertsBracketsInExports() { return getGDSOutputConvertsBracketsInExportsSetting().getBoolean(); }
	/**
	 * Returns Setting to tell the state of whether the GDS writer converts brackets
	 * to underscores in export names.
	 * @return Setting to tell the state of whether the GDS writer converts brackets
	 */
	public static Setting getGDSOutputConvertsBracketsInExportsSetting() { return ToolSettings.getGDSOutputConvertsBracketsInExportsSetting(); }

	/**
	 * Get the maximum length (number of chars) for Cell names in the GDS output file
	 * @return the number of chars
	 */
	public static int getGDSCellNameLenMax() { return getGDSCellNameLenMaxSetting().getInt(); }
	/**
	 * Returns Setting to tell the maximum length (number of chars) for Cell names in the GDS output file
	 * @return Setting to tell the maximum length (number of chars) for Cell names in the GDS output file
	 */
	public static Setting getGDSCellNameLenMaxSetting() { return ToolSettings.getGDSCellNameLenMaxSetting(); }

	/**
	 * Method to tell the scale to be applied when reading GDS.
	 * The default is 1 (no scaling).
	 * @return the scale to be applied when reading GDS.
	 */
	public static double getGDSInputScale() { return getGDSInputScaleSetting().getDouble(); }
	/**
	 * Method to tell the scale to be applied when reading GDS, by default.
	 * @return the scale to be applied when reading GDS, by default..
	 */
	public static double getFactoryGDSInputScale() { return getGDSInputScaleSetting().getDoubleFactoryValue(); }
	/**
	 * Method to set the scale to be applied when reading GDS.
	 * @return the scale to be applied when reading GDS.
	 */
	public static Setting getGDSInputScaleSetting() { return ToolSettings.getGDSInputScaleSetting(); }

    /**
	 * Method to tell the scale to be applied when writing GDS.
	 * The default is 1 (no scaling).
	 * @return the scale to be applied when writing GDS.
	 */
	public static double getGDSOutputScale() { return getGDSOutputScaleSetting().getDouble(); }
	/**
	 * Method to set the scale to be applied when writing GDS.
	 * @return the scale to be applied when writing GDS.
	 */
	public static Setting getGDSOutputScaleSetting() { return ToolSettings.getGDSOutputScaleSetting(); }

    private static Pref cacheGDSInMergesBoxes = Pref.makeBooleanPref("GDSInMergesBoxes", IOTool.tool.prefs, false);
	/**
	 * Method to tell whether GDS Input merges boxes into complex polygons.
	 * This takes more time but produces a smaller database.
	 * The default is "false".
	 * @return true if GDS Input merges boxes into complex polygons.
	 */
	public static boolean isGDSInMergesBoxes() { return cacheGDSInMergesBoxes.getBoolean(); }
	/**
	 * Method to set whether GDS Input merges boxes into complex polygons.
	 * This takes more time but produces a smaller database.
	 * @param on true if GDS Input merges boxes into complex polygons.
	 */
	public static void setGDSInMergesBoxes(boolean on) { cacheGDSInMergesBoxes.setBoolean(on); }
	/**
	 * Method to tell whether GDS Input merges boxes into complex polygons, by default.
	 * This takes more time but produces a smaller database.
	 * @return true if GDS Input merges boxes into complex polygons, by default.
	 */
	public static boolean isFactoryGDSInMergesBoxes() { return cacheGDSInMergesBoxes.getBooleanFactoryValue(); }

    private static Pref cacheGDSWritesEntireLibrary = Pref.makeBooleanPref("GDSWritesEntireLibrary", IOTool.tool.prefs, false);
	/**
	 * Method to tell whether GDS Export writes every Cell in the Library.
	 * When false, only Cells in the hierarchy of the current Cell get exported.
	 * The default is "false".
	 * @return true if GDS Export writes every Cell in the Library.
	 */
	public static boolean isGDSWritesEntireLibrary() { return cacheGDSWritesEntireLibrary.getBoolean(); }
	/**
	 * Method to set whether GDS Export writes every Cell in the Library.
	 * When false, only Cells in the hierarchy of the current Cell get exported.
	 * @param on true if GDS Export writes every Cell in the Library.
	 */
	public static void setGDSWritesEntireLibrary(boolean on) { cacheGDSWritesEntireLibrary.setBoolean(on); }
	/**
	 * Method to tell whether GDS Export writes every Cell in the Library, by default.
	 * When false, only Cells in the hierarchy of the current Cell get exported.
	 * @return true if GDS Export writes every Cell in the Library, by default.
	 */
	public static boolean isFactoryGDSWritesEntireLibrary() { return cacheGDSWritesEntireLibrary.getBooleanFactoryValue(); }

	private static Pref cacheGDSInIncludesText = Pref.makeBooleanPref("GDSInIncludesText", IOTool.tool.prefs, false);
	/**
	 * Method to tell whether GDS Input ignores text.
	 * Text can clutter the display, so some users don't want to read it.
	 * The default is "false".
	 * @return true if GDS Input ignores text.
	 */
	public static boolean isGDSInIncludesText() { return cacheGDSInIncludesText.getBoolean(); }
	/**
	 * Method to set whether GDS Input ignores text.
	 * Text can clutter the display, so some users don't want to read it.
	 * @param on true if GDS Input ignores text.
	 */
	public static void setGDSInIncludesText(boolean on) { cacheGDSInIncludesText.setBoolean(on); }
	/**
	 * Method to tell whether GDS Input ignores text, by default.
	 * Text can clutter the display, so some users don't want to read it.
	 * @return true if GDS Input ignores text, by default.
	 */
	public static boolean isFactoryGDSInIncludesText() { return cacheGDSInIncludesText.getBooleanFactoryValue(); }

	private static Pref cacheGDSInExpandsCells = Pref.makeBooleanPref("GDSInExpandsCells", IOTool.tool.prefs, false);
	/**
	 * Method to tell whether GDS Input expands cells.
	 * The default is "false".
	 * @return true if GDS Input expands cells.
	 */
	public static boolean isGDSInExpandsCells() { return cacheGDSInExpandsCells.getBoolean(); }
	/**
	 * Method to set whether GDS Input expands cells.
	 * @param on true if GDS Input expands cells.
	 */
	public static void setGDSInExpandsCells(boolean on) { cacheGDSInExpandsCells.setBoolean(on); }
	/**
	 * Method to tell whether GDS Input expands cells, by default.
	 * @return true if GDS Input expands cells, by default.
	 */
	public static boolean isFactoryGDSInExpandsCells() { return cacheGDSInExpandsCells.getBooleanFactoryValue(); }

	private static Pref cacheGDSInInstantiatesArrays = Pref.makeBooleanPref("GDSInInstantiatesArrays", IOTool.tool.prefs, true);
	/**
	 * Method to tell whether GDS Input instantiates arrays.
	 * The default is "true".
	 * When false, only the edges of arrays are instantiated, not those entries in the center.
	 * @return true if GDS Input instantiates arrays.
	 */
	public static boolean isGDSInInstantiatesArrays() { return cacheGDSInInstantiatesArrays.getBoolean(); }
	/**
	 * Method to set whether GDS Input instantiates arrays.
	 * When false, only the edges of arrays are instantiated, not those entries in the center.
	 * @param on true if GDS Input instantiates arrays.
	 */
	public static void setGDSInInstantiatesArrays(boolean on) { cacheGDSInInstantiatesArrays.setBoolean(on); }
	/**
	 * Method to tell whether GDS Input instantiates arrays, by default.
	 * When false, only the edges of arrays are instantiated, not those entries in the center.
	 * @return true if GDS Input instantiates arrays, by default.
	 */
	public static boolean isFactoryGDSInInstantiatesArrays() { return cacheGDSInInstantiatesArrays.getBooleanFactoryValue(); }

	public static final int GDSUNKNOWNLAYERIGNORE    = 0;
	public static final int GDSUNKNOWNLAYERUSEDRC    = 1;
	public static final int GDSUNKNOWNLAYERUSERANDOM = 2;
	private static Pref cacheGDSInUnknownLayerHandling = Pref.makeIntPref("GDSInUnknownLayerHandling", IOTool.tool.prefs, GDSUNKNOWNLAYERUSEDRC);
	/**
	 * Method to tell how GDS Input handles unknown layers.
	 * The choices are:
* 0: ignore anything on the layer.
* 1: convert that layer to the "DRC exclusion" layer (the default).
* 2: convert that layer to an unused layer.
* @return how GDS Input handles unknown layers. */ public static int getGDSInUnknownLayerHandling() { return cacheGDSInUnknownLayerHandling.getInt(); } /** * Method to set how GDS Input handles unknown layers. * The choices are:
* 0: ignore anything on the layer.
* 1: convert that layer to the "DRC exclusion" layer.
* 2: convert that layer to an unused layer.
* @param h how GDS Input handles unknown layers. */ public static void setGDSInUnknownLayerHandling(int h) { cacheGDSInUnknownLayerHandling.setInt(h); } /** * Method to tell how GDS Input handles unknown layers, by default. * The choices are:
* 0: ignore anything on the layer.
* 1: convert that layer to the "DRC exclusion" layer.
* 2: convert that layer to an unused layer.
* @return how GDS Input handles unknown layers, by default. */ public static int getFactoryGDSInUnknownLayerHandling() { return cacheGDSInUnknownLayerHandling.getIntFactoryValue(); } private static Pref cacheGDSConvertNCCExportsConnectedByParentPins = Pref.makeBooleanPref("GDSConvertNCCEconnectedByParentPins", IOTool.tool.prefs, false); /** * True to convert pin names to name:name for pins that are specified in the * NCC annotation, "exportsConnectedByParent". This allows external LVS tools to * perform the analogous operation of virtual connection of networks. * For example, 'exportsConnectedByParent vdd /vdd_[0-9]+/' will rename all * pins that match the assertion to vdd:vdd. * @return True if pin names should be converted. */ public static boolean getGDSConvertNCCExportsConnectedByParentPins() { return cacheGDSConvertNCCExportsConnectedByParentPins.getBoolean(); } /** * True to convert pin names to name:name for pins that are specified in the * NCC annotation, "exportsConnectedByParent". This allows external LVS tools to * perform the analogous operation of virtual connection of networks. * For example, 'exportsConnectedByParent vdd /vdd_[0-9]+/' will rename all * pins that match the assertion to vdd:vdd. * @param b true if pin names should be converted. */ public static void setGDSConvertNCCExportsConnectedByParentPins(boolean b) { cacheGDSConvertNCCExportsConnectedByParentPins.setBoolean(b); } /** * True to convert pin names to name:name for pins that are specified in the * NCC annotation, "exportsConnectedByParent" (by default). This allows external LVS tools to * perform the analogous operation of virtual connection of networks. * For example, 'exportsConnectedByParent vdd /vdd_[0-9]+/' will rename all * pins that match the assertion to vdd:vdd. * @return True if the factory value requires to convert the pin names. */ public static boolean getFactoryGDSConvertNCCExportsConnectedByParentPins() { return cacheGDSConvertNCCExportsConnectedByParentPins.getBooleanFactoryValue(); } private static Pref cacheGDSInSimplifyCells = Pref.makeBooleanPref("GDSInSimplifyCells", IOTool.tool.prefs, false); /** * Method to tell whether GDS Input simplifies contact vias. * The default is "false". * @return true if GDS Input simplifies contact vias. */ public static boolean isGDSInSimplifyCells() { return cacheGDSInSimplifyCells.getBoolean(); } /** * Method to set whether GDS Input simplifies contact vias. * @param on true if GDS Input simplifies contact vias. */ public static void setGDSInSimplifyCells(boolean on) { cacheGDSInSimplifyCells.setBoolean(on); } /** * Method to tell whether GDS Input simplifies contact vias, by default. * @return true if GDS Input simplifies contact vias, by default. */ public static boolean isFactoryGDSInSimplifyCells() { return cacheGDSInSimplifyCells.getBooleanFactoryValue(); } private static Pref cacheGDSColapseVddGndPinNames = Pref.makeBooleanPref("cacheGDSColapseVddGndPinNames", IOTool.tool.prefs, false); /** * Method to tell whether Vdd_* and Gnd_* export pins must be collapsed. This is for extraction in Fire/Ice. * @return true if GDS Input collapses vdd/gnd names. */ public static boolean isGDSColapseVddGndPinNames() { return cacheGDSColapseVddGndPinNames.getBoolean(); } /** * Method to set whether Vdd_* and Gnd_* export pins must be collapsed. This is for extraction in Fire/Ice. * @param on true if GDS Input collapses vdd/gnd names. */ public static void setGDSColapseVddGndPinNames(boolean on) { cacheGDSColapseVddGndPinNames.setBoolean(on); } /** * Method to tell whether Vdd_* and Gnd_* export pins must be collapsed, by default. This is for extraction in Fire/Ice. * @return true if GDS Input collapses vdd/gnd names, by default. */ public static boolean isFactoryGDSColapseVddGndPinNames() { return cacheGDSColapseVddGndPinNames.getBooleanFactoryValue(); } private static Pref cacheGDSArraySimplification = Pref.makeIntPref("cacheGDSArraySimplification", IOTool.tool.prefs, 0); /** * Method to tell how GDS input should simplify array references (AREFs). * Choices are: 0=none (default), 1=merge each AREF, 2=merge all AREFs in a cell * @return how GDS input should simplify array references (AREFs). */ public static int getGDSArraySimplification() { return cacheGDSArraySimplification.getInt(); } /** * Method to set how GDS input should simplify array references (AREFs). * Choices are: 0=none (default), 1=merge each AREF, 2=merge all AREFs in a cell * @param on how GDS input should simplify array references (AREFs). */ public static void setGDSArraySimplification(int on) { cacheGDSArraySimplification.setInt(on); } /** * Method to tell how GDS input should simplify array references (AREFs), by default. * Choices are: 0=none (default), 1=merge each AREF, 2=merge all AREFs in a cell * @return how GDS input should simplify array references (AREFs), by default. */ public static int getFactoryGDSArraySimplification() { return cacheGDSArraySimplification.getIntFactoryValue(); } private static Pref cacheGDSCadenceCompatibility = Pref.makeBooleanPref("GDSCadenceCompatibility", IOTool.tool.prefs, true); /** * Method to tell whether GDS input is compatible with Cadence. * Cadence compatibility adjusts export locations to be centered in the geometry. * The default is "true". * @return true if GDS input is compatible with Cadence. */ public static boolean isGDSCadenceCompatibility() { return cacheGDSCadenceCompatibility.getBoolean(); } /** * Method to set whether GDS input is compatible with Cadence. * Cadence compatibility adjusts export locations to be centered in the geometry. * @param c true if GDS input is compatible with Cadence. */ public static void setGDSCadenceCompatibility(boolean c) { cacheGDSCadenceCompatibility.setBoolean(c); } /** * Method to tell whether GDS input is compatible with Cadence, by default. * Cadence compatibility adjusts export locations to be centered in the geometry. * @return true if GDS input is compatible with Cadence, by default. */ public static boolean isFactoryGDSCadenceCompatibility() { return cacheGDSCadenceCompatibility.getBooleanFactoryValue(); } /****************************** POSTSCRIPT OUTPUT PREFERENCES ******************************/ private static Pref cachePrintEncapsulated = Pref.makeBooleanPref("PostScriptEncapsulated", IOTool.tool.prefs, false); /** * Method to tell whether PostScript Output is Encapsulated. * Encapsulated PostScript can be inserted into other documents. * The default is "false". * @return true if PostScript Output is Encapsulated. */ public static boolean isPrintEncapsulated() { return cachePrintEncapsulated.getBoolean(); } /** * Method to set whether PostScript Output is Encapsulated. * Encapsulated PostScript can be inserted into other documents. * @param on true if PostScript Output is Encapsulated. */ public static void setPrintEncapsulated(boolean on) { cachePrintEncapsulated.setBoolean(on); } /** * Method to tell whether PostScript Output is Encapsulated by default. * Encapsulated PostScript can be inserted into other documents. * @return true if PostScript Output is Encapsulated by default. */ public static boolean isFactoryPrintEncapsulated() { return cachePrintEncapsulated.getBooleanFactoryValue(); } private static Pref cachePrintResolution = Pref.makeIntPref("PrintResolution", IOTool.tool.prefs, 300); /** * Method to tell the default printing resolution. * Java printing assumes 72 DPI, this is an override. * The factory default is "300". * @return the default printing resolution. */ public static int getPrintResolution() { return cachePrintResolution.getInt(); } /** * Method to set the default printing resolution. * Java printing assumes 72 DPI, this is an override. * @param r the default printing resolution. */ public static void setPrintResolution(int r) { cachePrintResolution.setInt(r); } /** * Method to tell the factory default printing resolution. * Java printing assumes 72 DPI, this is an override. * @return the factory default printing resolution. */ public static int getFactoryPrintResolution() { return cachePrintResolution.getIntFactoryValue(); } private static Pref cachePrintForPlotter = Pref.makeBooleanPref("PostScriptForPlotter", IOTool.tool.prefs, false); /** * Method to tell whether PostScript Output is for a plotter. * Plotters have width, but no height, since they are continuous feed. * The default is "false". * @return true if PostScript Output is for a plotter. */ public static boolean isPrintForPlotter() { return cachePrintForPlotter.getBoolean(); } /** * Method to set whether PostScript Output is for a plotter. * Plotters have width, but no height, since they are continuous feed. * @param on true if PostScript Output is for a plotter. */ public static void setPrintForPlotter(boolean on) { cachePrintForPlotter.setBoolean(on); } /** * Method to tell whether PostScript Output is for a plotter, by default. * Plotters have width, but no height, since they are continuous feed. * @return true if PostScript Output is for a plotter, by default. */ public static boolean isFactoryPrintForPlotter() { return cachePrintForPlotter.getBooleanFactoryValue(); } private static Pref cachePrintWidth = Pref.makeDoublePref("PostScriptWidth", IOTool.tool.prefs, 8.5); /** * Method to tell the width of PostScript Output. * The width is in inches. * The default is "8.5". * @return the width of PostScript Output. */ public static double getPrintWidth() { return cachePrintWidth.getDouble(); } /** * Method to set the width of PostScript Output. * The width is in inches. * @param wid the width of PostScript Output. */ public static void setPrintWidth(double wid) { cachePrintWidth.setDouble(wid); } /** * Method to tell the width of PostScript Output, by default. * The width is in inches. * @return the width of PostScript Output, by default. */ public static double getFactoryPrintWidth() { return cachePrintWidth.getDoubleFactoryValue(); } private static Pref cachePrintHeight = Pref.makeDoublePref("PostScriptHeight", IOTool.tool.prefs, 11); /** * Method to tell the height of PostScript Output. * The height is in inches, and only applies if printing (not plotting). * The default is "11". * @return the height of PostScript Output. */ public static double getPrintHeight() { return cachePrintHeight.getDouble(); } /** * Method to set the height of PostScript Output. * The height is in inches, and only applies if printing (not plotting). * @param hei the height of PostScript Output. */ public static void setPrintHeight(double hei) { cachePrintHeight.setDouble(hei); } /** * Method to tell the height of PostScript Output, by default. * The height is in inches, and only applies if printing (not plotting). * @return the height of PostScript Output, by default. */ public static double getFactoryPrintHeight() { return cachePrintHeight.getDoubleFactoryValue(); } private static Pref cachePrintMargin = Pref.makeDoublePref("PostScriptMargin", IOTool.tool.prefs, 0.75); /** * Method to tell the margin of PostScript Output. * The margin is in inches and insets from all sides. * The default is "0.75". * @return the margin of PostScript Output. */ public static double getPrintMargin() { return cachePrintMargin.getDouble(); } /** * Method to set the margin of PostScript Output. * The margin is in inches and insets from all sides. * @param mar the margin of PostScript Output. */ public static void setPrintMargin(double mar) { cachePrintMargin.setDouble(mar); } /** * Method to tell the margin of PostScript Output, by default. * The margin is in inches and insets from all sides. * @return the margin of PostScript Output, by default. */ public static double getFactoryPrintMargin() { return cachePrintMargin.getDoubleFactoryValue(); } private static Pref cachePrintRotation = Pref.makeIntPref("PostScriptRotation", IOTool.tool.prefs, 0); /** * Method to tell the rotation of PostScript Output. * The plot can be normal or rotated 90 degrees to better fit the paper. * @return the rotation of PostScript Output: * 0=no rotation (the default); * 1=rotate 90 degrees; * 2=rotate automatically to fit best. */ public static int getPrintRotation() { return cachePrintRotation.getInt(); } /** * Method to set the rotation of PostScript Output. * The plot can be normal or rotated 90 degrees to better fit the paper. * @param rot the rotation of PostScript Output. * 0=no rotation; * 1=rotate 90 degrees; * 2=rotate automatically to fit best. */ public static void setPrintRotation(int rot) { cachePrintRotation.setInt(rot); } /** * Method to tell the rotation of PostScript Output, by default. * The plot can be normal or rotated 90 degrees to better fit the paper. * @return the rotation of PostScript Output, by default: * 0=no rotation; * 1=rotate 90 degrees; * 2=rotate automatically to fit best. */ public static int getFactoryPrintRotation() { return cachePrintRotation.getIntFactoryValue(); } private static Pref cachePrintColorMethod = Pref.makeIntPref("PostScriptColorMethod", IOTool.tool.prefs, 0); /** * Method to tell the color method of PostScript Output. * @return the color method of PostScript Output: * 0=Black & White (the default); * 1=Color (solid); * 2=Color (stippled); * 3=Color (merged). */ public static int getPrintColorMethod() { return cachePrintColorMethod.getInt(); } /** * Method to set the color method of PostScript Output. * @param cm the color method of PostScript Output. * 0=Black & White; * 1=Color (solid); * 2=Color (stippled); * 3=Color (merged). */ public static void setPrintColorMethod(int cm) { cachePrintColorMethod.setInt(cm); } /** * Method to tell the color method of PostScript Output, by default. * @return the color method of PostScript Output, by default: * 0=Black & White; * 1=Color (solid); * 2=Color (stippled); * 3=Color (merged). */ public static int getFactoryPrintColorMethod() { return cachePrintColorMethod.getIntFactoryValue(); } public static final Variable.Key POSTSCRIPT_EPS_SCALE = Variable.newKey("IO_postscript_EPS_scale"); /** * Method to tell the EPS scale of a given Cell. * @param cell the cell to query. * @return the EPS scale of that Cell. */ public static double getPrintEPSScale(Cell cell) { Variable var = cell.getVar(POSTSCRIPT_EPS_SCALE); if (var != null) { Object obj = var.getObject(); String desc = obj.toString(); double epsScale = TextUtils.atof(desc); return epsScale; } return 1; } /** * Method to set the EPS scale of a given Cell. * @param cell the cell to modify. * @param scale the EPS scale of that Cell. */ public static void setPrintEPSScale(Cell cell, double scale) { tool.setVarInJob(cell, POSTSCRIPT_EPS_SCALE, new Double(scale)); } public static final Variable.Key POSTSCRIPT_FILENAME = Variable.newKey("IO_postscript_filename"); /** * Method to tell the EPS synchronization file of a given Cell. * During automatic synchronization of PostScript, any cell changed more * recently than the date on this file will cause that file to be generated * from the Cell. * @param cell the cell to query. * @return the EPS synchronization file of that Cell. */ public static String getPrintEPSSynchronizeFile(Cell cell) { Variable var = cell.getVar(POSTSCRIPT_FILENAME); if (var != null) { Object obj = var.getObject(); String desc = obj.toString(); return desc; } return ""; } /** * Method to set the EPS synchronization file of a given Cell. * During automatic synchronization of PostScript, any cell changed more * recently than the date on this file will cause that file to be generated * from the Cell. * @param cell the cell to modify. * @param syncFile the EPS synchronization file to associate with that Cell. */ public static void setPrintEPSSynchronizeFile(Cell cell, String syncFile) { tool.setVarInJob(cell, POSTSCRIPT_FILENAME, syncFile); } public static final Variable.Key POSTSCRIPT_FILEDATE = Variable.newKey("IO_postscript_filedate"); /** * Method to tell the EPS synchronization file of a given Cell. * During automatic synchronization of PostScript, any cell changed more * recently than the date on this file will cause that file to be generated * from the Cell. * @param cell the cell to query. * @return the EPS synchronization file of that Cell. */ public static Date getPrintEPSSavedDate(Cell cell) { Integer [] lastSavedDateAsInts = cell.getVarValue(POSTSCRIPT_FILEDATE, Integer[].class); if (lastSavedDateAsInts == null) return null; long lastSavedDateInSeconds = ((long)lastSavedDateAsInts[0].intValue() << 32) | (lastSavedDateAsInts[1].intValue() & 0xFFFFFFFF); Date lastSavedDate = new Date(lastSavedDateInSeconds); return lastSavedDate; } /** * Method to set the EPS synchronization file of a given Cell. * During automatic synchronization of PostScript, any cell changed more * recently than the date on this file will cause that file to be generated * from the Cell. * @param cell the cell to modify. * @param date the EPS synchronization date to associate with that Cell. */ public static void setPrintEPSSavedDate(Cell cell, Date date) { long iVal = date.getTime(); Integer [] dateArray = new Integer[2]; dateArray[0] = new Integer((int)(iVal >> 32)); dateArray[1] = new Integer((int)(iVal & 0xFFFFFFFF)); tool.setVarInJob(cell, POSTSCRIPT_FILEDATE, dateArray); } private static Pref cachePrintPSLineWidth = Pref.makeDoublePref("PostScriptLineWidth", IOTool.tool.prefs, 1); /** * Method to tell the width of PostScript lines. * Lines have their width scaled by this amount, so the default (1) means normal lines. * @return the width of PostScript lines. */ public static double getPrintPSLineWidth() { return cachePrintPSLineWidth.getDouble(); } /** * Method to set the width of PostScript lines. * Lines have their width scaled by this amount, so the default (1) means normal lines. * @param mar the width of PostScript lines. */ public static void setPrintPSLineWidth(double mar) { cachePrintPSLineWidth.setDouble(mar); } /** * Method to tell the width of PostScript lines, by default. * Lines have their width scaled by this amount, so 1 means normal lines. * @return the width of PostScript lines, by default. */ public static double getFactoryPrintPSLineWidth() { return cachePrintPSLineWidth.getDoubleFactoryValue(); } /****************************** EDIF PREFERENCES ******************************/ private static Pref cacheEDIFUseSchematicView = Pref.makeBooleanPref("EDIFUseSchematicView", IOTool.tool.prefs, true); /** * Method to tell whether EDIF uses the schematic view. * The default is "true". * @return true if EDIF uses the schematic view. */ public static boolean isEDIFUseSchematicView() { return cacheEDIFUseSchematicView.getBoolean(); } /** * Method to set whether EDIF uses the schematic view. * @param f true if EDIF uses the schematic view. */ public static void setEDIFUseSchematicView(boolean f) { cacheEDIFUseSchematicView.setBoolean(f); } /** * Method to tell whether EDIF uses the schematic view, by default. * @return true if EDIF uses the schematic view, by default. */ public static boolean isFactoryEDIFUseSchematicView() { return cacheEDIFUseSchematicView.getBooleanFactoryValue(); } private static Pref cacheEDIFCadenceCompatibility = Pref.makeBooleanPref("EDIFCadenceCompatibility", IOTool.tool.prefs, true); /** * Method to tell whether EDIF I/O is compatible with Cadence. * The default is "true". * @return true if EDIF I/O is compatible with Cadence. */ public static boolean isEDIFCadenceCompatibility() { return cacheEDIFCadenceCompatibility.getBoolean(); } /** * Method to set whether EDIF I/O is compatible with Cadence. * @param c true if EDIF I/O is compatible with Cadence. */ public static void setEDIFCadenceCompatibility(boolean c) { cacheEDIFCadenceCompatibility.setBoolean(c); } /** * Method to tell whether EDIF I/O is compatible with Cadence, by default. * @return true if EDIF I/O is compatible with Cadence, by default. */ public static boolean isFactoryEDIFCadenceCompatibility() { return cacheEDIFCadenceCompatibility.getBooleanFactoryValue(); } private static Pref cacheEDIFShowArcNames = Pref.makeBooleanPref("EDIFShowArcNames", IOTool.tool.prefs, true); /** * Method to tell whether EDIF input should display names on arcs. * The default is "true". * @return true if EDIF input should display names on arcs. */ public static boolean isEDIFShowArcNames() { return cacheEDIFShowArcNames.getBoolean(); } /** * Method to set whether EDIF input should display names on arcs. * @param c true if EDIF input should display names on arcs. */ public static void setEDIFShowArcNames(boolean c) { cacheEDIFShowArcNames.setBoolean(c); } /** * Method to tell whether EDIF input should display names on arcs, by default. * @return true if EDIF input should display names on arcs, by default. */ public static boolean isFactoryEDIFShowArcNames() { return cacheEDIFShowArcNames.getBooleanFactoryValue(); } private static Pref cacheEDIFShowNodeNames = Pref.makeBooleanPref("EDIFShowNodeNames", IOTool.tool.prefs, true); /** * Method to tell whether EDIF input should display names on nodes. * The default is "true". * @return true if EDIF input should display names on nodes. */ public static boolean isEDIFShowNodeNames() { return cacheEDIFShowNodeNames.getBoolean(); } /** * Method to set whether EDIF input should display names on nodes. * @param c true if EDIF input should display names on nodes. */ public static void setEDIFShowNodeNames(boolean c) { cacheEDIFShowNodeNames.setBoolean(c); } /** * Method to tell whether EDIF input should display names on nodes, by default. * @return true if EDIF input should display names on nodes, by default. */ public static boolean isFactoryEDIFShowNodeNames() { return cacheEDIFShowNodeNames.getBooleanFactoryValue(); } private static Pref cacheEDIFInputScale = Pref.makeDoublePref("EDIFInputScale", IOTool.tool.prefs, 0.05); /** * Method to return the EDIF input scale. * The default is "1". * @return the EDIF input scale. */ public static double getEDIFInputScale() { return cacheEDIFInputScale.getDouble(); } /** * Method to set the EDIF input scale. * @param f the EDIF input scale. */ public static void setEDIFInputScale(double f) { cacheEDIFInputScale.setDouble(f); } /** * Method to return the EDIF input scale, by default. * @return the EDIF input scale, by default. */ public static double getFactoryEDIFInputScale() { return cacheEDIFInputScale.getDoubleFactoryValue(); } private static Pref cacheEDIFConfigurationFile = Pref.makeStringPref("EDIFConfigurationFile", IOTool.tool.prefs, ""); /** * Method to tell the configuration file to use. * The default is "" (no configuration file). * @return the configuration file to use. */ public static String getEDIFConfigurationFile() { return cacheEDIFConfigurationFile.getString(); } /** * Method to set the configuration file to use. * @param cFile the configuration file to use. */ public static void setEDIFConfigurationFile(String cFile) { cacheEDIFConfigurationFile.setString(cFile); } /** * Method to tell the configuration file to use, by default. * @return the configuration file to use, by default. */ public static String getFactoryEDIFConfigurationFile() { return cacheEDIFConfigurationFile.getStringFactoryValue(); } private static Pref cacheEDIFAcceptedParameters = Pref.makeStringPref("EDIFAcceptedParameters", IOTool.tool.prefs, ""); /** * Method to return a string with accepted parameter names. * These parameter names will be placed on cells when reading EDIF. * The string lists the names, separated by slashes. * The default is "" (no parameters accepted). * @return a string with accepted parameter names. */ public static String getEDIFAcceptedParameters() { return cacheEDIFAcceptedParameters.getString(); } /** * Method to set a string with accepted parameter names. * These parameter names will be placed on cells when reading EDIF. * The string lists the names, separated by slashes. * @param ap the accepted parameter names. */ public static void setEDIFAcceptedParameters(String ap) { cacheEDIFAcceptedParameters.setString(ap); } /** * Method to return a string with accepted parameter names, by default. * These parameter names will be placed on cells when reading EDIF. * The string lists the names, separated by slashes. * @return a string with accepted parameter names, by default. */ public static String getFactoryEDIFAcceptedParameters() { return cacheEDIFAcceptedParameters.getStringFactoryValue(); } /****************************** DXF PREFERENCES ******************************/ /** * Method to tell the DXF scale. * The DXF scale is: *
    *
  • -3: GigaMeters *
  • -2: MegaMeters *
  • -1: KiloMeters *
  • 0: Meters *
  • 1: MilliMeters *
  • 2: MicroMeters *
  • 3: NanoMeters *
  • 4: PicoMeters *
  • 5: FemtoMeters *
* The default is "2" (MicroMeters). * @return the DXF scale. */ public static int getDXFScale() { return getDXFScaleSetting().getInt(); } /** * Method to tell the DXF scale. * The DXF scale is: *
    *
  • -3: GigaMeters *
  • -2: MegaMeters *
  • -1: KiloMeters *
  • 0: Meters *
  • 1: MilliMeters *
  • 2: MicroMeters *
  • 3: NanoMeters *
  • 4: PicoMeters *
  • 5: FemtoMeters *
* The default is "2" (MicroMeters). * @return the DXF scale. */ public static int getFactoryDXFScale() { return getDXFScaleSetting().getIntFactoryValue(); } /** * Returns project preferences to tell the DXF scale. * The DXF scale is: *
    *
  • -3: GigaMeters *
  • -2: MegaMeters *
  • -1: KiloMeters *
  • 0: Meters *
  • 1: MilliMeters *
  • 2: MicroMeters *
  • 3: NanoMeters *
  • 4: PicoMeters *
  • 5: FemtoMeters *
* @return project preferences to tell the DXF scale. */ public static Setting getDXFScaleSetting() { return ToolSettings.getDXFScaleSetting(); } private static Pref cacheDXFInputFlattensHierarchy = Pref.makeBooleanPref("DXFInputFlattensHierarchy", IOTool.tool.prefs, true); /** * Method to tell whether DXF Input flattens the hierarchy. * Flattened DXF appears in a single cell. * The default is "true". * @return true if DXF Input flattens the hierarchy. */ public static boolean isDXFInputFlattensHierarchy() { return cacheDXFInputFlattensHierarchy.getBoolean(); } /** * Method to set whether DXF Input flattens the hierarchy. * Flattened DXF appears in a single cell. * @param f true if DXF Input flattens the hierarchy. */ public static void setDXFInputFlattensHierarchy(boolean f) { cacheDXFInputFlattensHierarchy.setBoolean(f); } /** * Method to tell whether DXF Input flattens the hierarchy by default. * Flattened DXF appears in a single cell. * @return true if DXF Input flattens the hierarchy by default. */ public static boolean isFactoryDXFInputFlattensHierarchy() { return cacheDXFInputFlattensHierarchy.getBooleanFactoryValue(); } private static Pref cacheDXFInputReadsAllLayers = Pref.makeBooleanPref("DXFInputReadsAllLayers", IOTool.tool.prefs, true); /** * Method to tell whether DXF input reads all layers. * When a DXF layer in the file is unknown, it is ignored if all layers are NOT being read; * it is converted to another layer if all layers ARE being read. * The default is "true". * @return true if DXF input reads all layers. */ public static boolean isDXFInputReadsAllLayers() { return cacheDXFInputReadsAllLayers.getBoolean(); } /** * Method to set whether DXF input reads all layers. * When a DXF layer in the file is unknown, it is ignored if all layers are NOT being read; * it is converted to another layer if all layers ARE being read. * @param a true if DXF input reads all layers. */ public static void setDXFInputReadsAllLayers(boolean a) { cacheDXFInputReadsAllLayers.setBoolean(a); } /** * Method to tell whether DXF input reads all layers by default. * When a DXF layer in the file is unknown, it is ignored if all layers are NOT being read; * it is converted to another layer if all layers ARE being read. * @return true if DXF input reads all layers by default. */ public static boolean isFactoryDXFInputReadsAllLayers() { return cacheDXFInputReadsAllLayers.getBooleanFactoryValue(); } /****************************** SUE INPUT PREFERENCES ******************************/ private static Pref cacheSueUses4PortTransistors = Pref.makeBooleanPref("SueUses4PortTransistors", IOTool.tool.prefs, false); /** * Method to tell whether Sue input creates 4-port transistors. * Without this, standard 3-port transistors are created. * The default is "false". * @return true if Sue input creates 4-port transistors. */ public static boolean isSueUses4PortTransistors() { return cacheSueUses4PortTransistors.getBoolean(); } /** * Method to set whether Sue input creates 4-port transistors. * Without this, standard 3-port transistors are created. * @param on true if Sue input creates 4-port transistors. */ public static void setSueUses4PortTransistors(boolean on) { cacheSueUses4PortTransistors.setBoolean(on); } /** * Method to tell whether Sue input creates 4-port transistors by default. * Without this, standard 3-port transistors are created. * @return true if Sue input creates 4-port transistors by default. */ public static boolean isFactorySueUses4PortTransistors() { return cacheSueUses4PortTransistors.getBooleanFactoryValue(); } private static Pref cacheSueConvertsExpressions = Pref.makeBooleanPref("SueConvertsExpressions", IOTool.tool.prefs, false); /** * Method to tell whether Sue input converts Sue expressions to Electric form. * Electric expressions have "@" in front of variables. * The default is "false". * @return true if Sue input converts Sue expressions to Electric form. */ public static boolean isSueConvertsExpressions() { return cacheSueConvertsExpressions.getBoolean(); } /** * Method to set whether Sue input converts Sue expressions to Electric form. * Electric expressions have "@" in front of variables. * @param on true if Sue input converts Sue expressions to Electric form. */ public static void setSueConvertsExpressions(boolean on) { cacheSueConvertsExpressions.setBoolean(on); } /** * Method to tell whether Sue input converts Sue expressions to Electric form by default. * Electric expressions have "@" in front of variables. * @return true if Sue input converts Sue expressions to Electric form by default. */ public static boolean isFactorySueConvertsExpressions() { return cacheSueConvertsExpressions.getBooleanFactoryValue(); } /****************************** GERBER INPUT PREFERENCES ******************************/ private static Pref cacheGerberReadsAllFiles = Pref.makeBooleanPref("GerberReadsAllFiles", IOTool.tool.prefs, true); /** * Method to tell whether Gerber input reads all .GBR files found in the directory. * Without this, only the selected file is read. * The default is "true". * @return true if Gerber input reads all .GBR files found in the directory. */ public static boolean isGerberReadsAllFiles() { return cacheGerberReadsAllFiles.getBoolean(); } /** * Method to set whether Gerber input reads all .GBR files found in the directory. * Without this, only the selected file is read. * @param on true if Gerber input reads all .GBR files found in the directory. */ public static void setGerberReadsAllFiles(boolean on) { cacheGerberReadsAllFiles.setBoolean(on); } /** * Method to tell whether Gerber input reads all .GBR files found in the directory, by default. * Without this, only the selected file is read. * @return true if Gerber input reads all .GBR files found in the directory, by default. */ public static boolean isFactoryGerberReadsAllFiles() { return cacheGerberReadsAllFiles.getBooleanFactoryValue(); } private static Pref cacheGerberFillsPolygons = Pref.makeBooleanPref("GerberFillsPolygons", IOTool.tool.prefs, true); /** * Method to tell whether Gerber input fills polygons. * Without this, polygons appear as outlines. * The default is "true". * @return true if Gerber input fills polygons. */ public static boolean isGerberFillsPolygons() { return cacheGerberFillsPolygons.getBoolean(); } /** * Method to set whether Gerber input fills polygons. * Without this, polygons appear as outlines. * @param on true if Gerber input fills polygons. */ public static void setGerberFillsPolygons(boolean on) { cacheGerberFillsPolygons.setBoolean(on); } /** * Method to tell whether Gerber input fills polygons, by default. * Without this, polygons appear as outlines. * @return true if Gerber input fills polygons, by default. */ public static boolean isFactoryGerberFillsPolygons() { return cacheGerberFillsPolygons.getBooleanFactoryValue(); } /****************************** SVG OUTPUT PREFERENCES ******************************/ private static Pref cacheSVGScale = Pref.makeDoublePref("SVGScale", IOTool.tool.prefs, 1); /** * Method to tell how much to scale SVG output. * The default is "1". * @return how much to scale SVG output. */ public static double getSVGScale() { return cacheSVGScale.getDouble(); } /** * Method to set how much to scale SVG output. * @param s how much to scale SVG output. */ public static void setSVGScale(double s) { cacheSVGScale.setDouble(s); } /** * Method to tell how much to scale SVG output, by default. * @return how much to scale SVG output, by default. */ public static double getFactorySVGScale() { return cacheSVGScale.getDoubleFactoryValue(); } private static Pref cacheSVGMargin = Pref.makeDoublePref("SVGMargin", IOTool.tool.prefs, 50); /** * Method to tell how much margin to leave on the top and left of SVG output. * The default is "50". * @return how much margin to leave on the top and left of SVG output. */ public static double getSVGMargin() { return cacheSVGMargin.getDouble(); } /** * Method to set how much margin to leave on the top and left of SVG output. * @param m how much margin to leave on the top and left of SVG output. */ public static void setSVGMargin(double m) { cacheSVGMargin.setDouble(m); } /** * Method to tell how much margin to leave on the top and left of SVG output, by default. * @return how much margin to leave on the top and left of SVG output, by default. */ public static double getFactorySVGMargin() { return cacheSVGMargin.getDoubleFactoryValue(); } /****************************** SKILL OUTPUT PREFERENCES ******************************/ private static Pref cacheSkillExcludesSubcells = Pref.makeBooleanPref("SkillExcludesSubcells", IOTool.tool.prefs, false); /** * Method to tell whether Skill Output excludes subcells. * If subcells are included, a Skill output files have multiple cell definitions in them. * The default is "false". * @return true if Skill Output excludes subcells. */ public static boolean isSkillExcludesSubcells() { return cacheSkillExcludesSubcells.getBoolean(); } /** * Method to set whether Skill Output excludes subcells. * If subcells are included, a Skill output files have multiple cell definitions in them. * @param on true if Skill Output excludes subcells. */ public static void setSkillExcludesSubcells(boolean on) { cacheSkillExcludesSubcells.setBoolean(on); } /** * Method to tell whether Skill Output excludes subcells by default. * If subcells are included, a Skill output files have multiple cell definitions in them. * @return true if Skill Output excludes subcells by default. */ public static boolean isFactorySkillExcludesSubcells() { return cacheSkillExcludesSubcells.getBooleanFactoryValue(); } private static Pref cacheSkillFlattensHierarchy = Pref.makeBooleanPref("SkillFlattensHierarchy", IOTool.tool.prefs, false); /** * Method to tell whether Skill Output flattens the hierarchy. * Flattened files are larger, but have no hierarchical structure. * The default is "false". * @return true if Skill Output flattens the hierarchy. */ public static boolean isSkillFlattensHierarchy() { return cacheSkillFlattensHierarchy.getBoolean(); } /** * Method to set whether Skill Output flattens the hierarchy. * Flattened files are larger, but have no hierarchical structure. * @param on true if Skill Output flattens the hierarchy. */ public static void setSkillFlattensHierarchy(boolean on) { cacheSkillFlattensHierarchy.setBoolean(on); } /** * Method to tell whether Skill Output flattens the hierarchy by default. * Flattened files are larger, but have no hierarchical structure. * @return true if Skill Output flattens the hierarchy by default. */ public static boolean isFactorySkillFlattensHierarchy() { return cacheSkillFlattensHierarchy.getBooleanFactoryValue(); } private static Pref cacheSkillGDSNameLimit = Pref.makeBooleanPref("SkillGDSNameLimit", IOTool.tool.prefs, false); /** * Method to tell whether Skill Output flattens the hierarchy. * Flattened files are larger, but have no hierarchical structure. * The default is "false". * @return true if Skill Output flattens the hierarchy. */ public static boolean isSkillGDSNameLimit() { return cacheSkillGDSNameLimit.getBoolean(); } /** * Method to set whether Skill Output flattens the hierarchy. * Flattened files are larger, but have no hierarchical structure. * @param on true if Skill Output flattens the hierarchy. */ public static void setSkillGDSNameLimit(boolean on) { cacheSkillGDSNameLimit.setBoolean(on); } /** * Method to tell whether Skill Output flattens the hierarchy by default. * Flattened files are larger, but have no hierarchical structure. * @return true if Skill Output flattens the hierarchy by default. */ public static boolean isFactorySkillGDSNameLimit() { return cacheSkillGDSNameLimit.getBooleanFactoryValue(); } /****************************** VERILOG PREFERENCES ******************************/ private static Pref cacheVerilogMakeLayoutCells = Pref.makeBooleanPref("VerilogMakeLayoutCells", IOTool.tool.prefs, false); /** * Method to tell whether Verilog is converted to layout or schematics. * The default is "false" (make schematics). * @return true if Skill Output excludes subcells. */ public static boolean isVerilogMakeLayoutCells() { return cacheVerilogMakeLayoutCells.getBoolean(); } /** * Method to set whether Verilog is converted to layout or schematics. * @param on true if Verilog is converted to layout; false for schematics. */ public static void setVerilogMakeLayoutCells(boolean on) { cacheVerilogMakeLayoutCells.setBoolean(on); } /** * Method to tell whether Verilog is converted to layout or schematics. * @return true if Verilog is converted to layout; false for schematics. */ public static boolean isFactoryVerilogMakeLayoutCells() { return cacheVerilogMakeLayoutCells.getBooleanFactoryValue(); } /****************************** DAIS INPUT PREFERENCES ******************************/ private static Pref cacheDaisDisplayOnly = Pref.makeBooleanPref("DaisDisplayOnly", IOTool.tool.prefs, false); /** * Method to tell whether Dais Input creates real geometry. * When real geometry is created, it takes more time and memory, but the circuitry can be edited. * When false, Dais input is read directly into the display system for rapid viewing. * The default is "false". * @return true if Dais Input creates real geometry. */ public static boolean isDaisDisplayOnly() { return cacheDaisDisplayOnly.getBoolean(); } /** * Method to set whether Dais Input creates real geometry. * When real geometry is created, it takes more time and memory, but the circuitry can be edited. * When false, Dais input is read directly into the display system for rapid viewing. * @param on true if Dais Input creates real geometry. */ public static void setDaisDisplayOnly(boolean on) { cacheDaisDisplayOnly.setBoolean(on); } /** * Method to tell whether Dais Input creates real geometry, by default. * When real geometry is created, it takes more time and memory, but the circuitry can be edited. * When false, Dais input is read directly into the display system for rapid viewing. * @return true if Dais Input creates real geometry, by default. */ public static boolean isFactoryDaisDisplayOnly() { return cacheDaisDisplayOnly.getBooleanFactoryValue(); } private static Pref cacheDaisReadCellInstances = Pref.makeBooleanPref("DaisReadCellInstances", IOTool.tool.prefs, true); /** * Method to tell whether Dais Input places cell instances. * The default is "true". * @return true if Dais Input places cell instances. */ public static boolean isDaisReadCellInstances() { return cacheDaisReadCellInstances.getBoolean(); } /** * Method to set whether Dais Input places cell instances. * @param on true if Dais Input places cell instances. */ public static void setDaisReadCellInstances(boolean on) { cacheDaisReadCellInstances.setBoolean(on); } /** * Method to tell whether Dais Input places cell instances, by default. * @return true if Dais Input places cell instances, by default. */ public static boolean isFactoryDaisReadCellInstances() { return cacheDaisReadCellInstances.getBooleanFactoryValue(); } private static Pref cacheDaisReadDetailWires = Pref.makeBooleanPref("DaisReadDetailWires", IOTool.tool.prefs, true); /** * Method to tell whether Dais Input reads the "detail" wires. * The default is "true". * @return true if Dais Input reads the "detail" wires. */ public static boolean isDaisReadDetailWires() { return cacheDaisReadDetailWires.getBoolean(); } /** * Method to set whether Dais Input reads the "detail" wires. * @param on true if Dais Input reads the "detail" wires. */ public static void setDaisReadDetailWires(boolean on) { cacheDaisReadDetailWires.setBoolean(on); } /** * Method to tell whether Dais Input reads the "detail" wires, by default. * @return true if Dais Input reads the "detail" wires, by default. */ public static boolean isFactoryDaisReadDetailWires() { return cacheDaisReadDetailWires.getBooleanFactoryValue(); } private static Pref cacheDaisReadGlobalWires = Pref.makeBooleanPref("DaisReadGlobalWires", IOTool.tool.prefs, false); /** * Method to tell whether Dais Input reads the "global" wires. * The default is "false". * @return true if Dais Input reads the "global" wires. */ public static boolean isDaisReadGlobalWires() { return cacheDaisReadGlobalWires.getBoolean(); } /** * Method to set whether Dais Input reads the "global" wires. * @param on true if Dais Input reads the "global" wires. */ public static void setDaisReadGlobalWires(boolean on) { cacheDaisReadGlobalWires.setBoolean(on); } /** * Method to tell whether Dais Input reads the "global" wires, by default. * @return true if Dais Input reads the "global" wires, by default. */ public static boolean isFactoryDaisReadGlobalWires() { return cacheDaisReadGlobalWires.getBooleanFactoryValue(); } private static Pref cacheDaisReadPowerAndGround = Pref.makeBooleanPref("DaisReadPowerAndGround", IOTool.tool.prefs, true); /** * Method to tell whether Dais Input reads power and ground wires. * The default is "true". * @return true if Dais Input reads power and ground wires. */ public static boolean isDaisReadPowerAndGround() { return cacheDaisReadPowerAndGround.getBoolean(); } /** * Method to set whether Dais Input reads power and ground wires. * @param on true if Dais Input reads power and ground wires. */ public static void setDaisReadPowerAndGround(boolean on) { cacheDaisReadPowerAndGround.setBoolean(on); } /** * Method to tell whether Dais Input reads power and ground wires, by default. * @return true if Dais Input reads power and ground wires, by default. */ public static boolean isFactoryDaisReadPowerAndGround() { return cacheDaisReadPowerAndGround.getBooleanFactoryValue(); } private static Pref cacheDaisReadConnectivity = Pref.makeBooleanPref("DaisReadConnectivity", IOTool.tool.prefs, true); /** * Method to tell whether Dais Input reads connectivity. * Connectivity is represented by "unrouted" arcs from the Generic technology, * which appear in a "rats nest" on the circuit. * The default is "true". * @return true if Dais Input reads connectivity. */ public static boolean isDaisReadConnectivity() { return cacheDaisReadConnectivity.getBoolean(); } /** * Method to set whether Dais Input reads connectivity. * Connectivity is represented by "unrouted" arcs from the Generic technology, * which appear in a "rats nest" on the circuit. * @param on true if Dais Input reads connectivity. */ public static void setDaisReadConnectivity(boolean on) { cacheDaisReadConnectivity.setBoolean(on); } /** * Method to tell whether Dais Input reads connectivity, by default. * Connectivity is represented by "unrouted" arcs from the Generic technology, * which appear in a "rats nest" on the circuit. * @return true if Dais Input reads connectivity, by default. */ public static boolean isFactoryDaisReadConnectivity() { return cacheDaisReadConnectivity.getBooleanFactoryValue(); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy