⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jelib.java

📁 The ElectricTM VLSI Design System is an open-source Electronic Design Automation (EDA) system that c
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
            } else {                duplicate++;                diskNodeName = "\"" + convertQuotedString(n.name.toString()) + "\"" + duplicate;            }            int nodeId = n.nodeId;            while (nodeId >= nodeNames.size()) nodeNames.add(null);            nodeNames.set(nodeId, diskNodeName);            printWriter.print("|" + diskNodeName + "|");            if (!n.name.isTempname())                printWriter.print(describeDescriptor(n.nameDescriptor));            printWriter.print("|" + TextUtils.formatDouble(n.anchor.getX(), 0));            printWriter.print("|" + TextUtils.formatDouble(n.anchor.getY(), 0));            if (!(np instanceof CellId)) {                double lambdaWidth = n.size.getLambdaX();                double lambdaHeight = n.size.getLambdaY();                printWriter.print("|");				if (lambdaWidth != 0)					printWriter.print(TextUtils.formatDouble(lambdaWidth, 0));                printWriter.print("|");				if (lambdaHeight != 0)					printWriter.print(TextUtils.formatDouble(lambdaHeight, 0));            }            printWriter.print('|');            if (n.orient.isXMirrored()) printWriter.print('X');            if (n.orient.isYMirrored()) printWriter.print('Y');            int angle = n.orient.getAngle() % 3600;            if (angle == 900 || angle == -2700) printWriter.print("R");            else if (angle == 1800 || angle == -1800) printWriter.print("RR");            else if (angle == 2700 || angle == -900) printWriter.print("RRR");            else if (angle != 0) printWriter.print(angle);            StringBuilder nodeBits = new StringBuilder();            if (n.is(ImmutableNodeInst.HARD_SELECT)) nodeBits.append("A");            if (n.is(ImmutableNodeInst.LOCKED)) nodeBits.append("L");            if (n.is(ImmutableNodeInst.VIS_INSIDE)) nodeBits.append("V");            int ts = n.techBits;            if (ts != 0) nodeBits.append(ts);            printWriter.print("|" + nodeBits.toString());            if (np instanceof CellId) {                String tdString = describeDescriptor(n.protoDescriptor);                printWriter.print("|" + tdString);            }            printlnVars(n);        }        // write the arcs in this cell        for (ImmutableArcInst a: cellRevision.arcs) {            ArcProtoId apId = a.protoId;            if (cellRevision.d.techId == apId.techId)                printWriter.print("A" + convertString(apId.name));            else                printWriter.print("A" + convertString(apId.fullName));            printWriter.print("|" + convertString(a.name.toString()) + "|");            if (!a.name.isTempname())                printWriter.print(describeDescriptor(a.nameDescriptor));            long arcWidth = a.getGridExtendOverMin()*2;            printWriter.print("|");            if (arcWidth != 0)                printWriter.print(TextUtils.formatDouble(DBMath.gridToLambda(arcWidth), 0));            StringBuilder arcBits = new StringBuilder();            if (a.is(ImmutableArcInst.HARD_SELECT)) arcBits.append("A");            if (a.is(ImmutableArcInst.BODY_ARROWED)) arcBits.append("B");            if (!a.is(ImmutableArcInst.FIXED_ANGLE)) arcBits.append("F");            if (a.is(ImmutableArcInst.HEAD_NEGATED)) arcBits.append("G");            if (!a.is(ImmutableArcInst.HEAD_EXTENDED)) arcBits.append("I");            if (!a.is(ImmutableArcInst.TAIL_EXTENDED)) arcBits.append("J");            if (a.is(ImmutableArcInst.TAIL_NEGATED)) arcBits.append("N");            if (a.is(ImmutableArcInst.RIGID)) arcBits.append("R");            if (a.is(ImmutableArcInst.SLIDABLE)) arcBits.append("S");            if (a.is(ImmutableArcInst.HEAD_ARROWED)) arcBits.append("X");            if (a.is(ImmutableArcInst.TAIL_ARROWED)) arcBits.append("Y");            printWriter.print("|" + arcBits.toString() + a.getAngle());            printWriter.print("|" + nodeNames.get(a.headNodeId) + "|" + getPortName(a.headPortId));            printWriter.print("|" + TextUtils.formatDouble(a.headLocation.getX(), 0));            printWriter.print("|" + TextUtils.formatDouble(a.headLocation.getY(), 0));            printWriter.print("|" + nodeNames.get(a.tailNodeId) + "|" + getPortName(a.tailPortId));            printWriter.print("|" + TextUtils.formatDouble(a.tailLocation.getX(), 0));            printWriter.print("|" + TextUtils.formatDouble(a.tailLocation.getY(), 0));            printlnVars(a);        }        // write the exports in this cell        for (ImmutableExport e: cellRevision.exports) {            printWriter.print("E" + convertString(e.exportId.externalId));            if (!oldRevision) {                printWriter.print("|");                if (!e.name.toString().equals(e.exportId.externalId))                    printWriter.print(convertString(e.name.toString()));            }            printWriter.print("|" + describeDescriptor(e.nameDescriptor));            printWriter.print("|" + nodeNames.get(e.originalNodeId) + "|" + getPortName(e.originalPortId));            printWriter.print("|" + e.characteristic.getShortName());            if (e.alwaysDrawn) printWriter.print("/A");            if (e.bodyOnly) printWriter.print("/B");            printlnVars(e);        }        // write the end-of-cell marker        printWriter.println("X");    }    void writeExternalLibraryInfo(LibId thisLib, Set<LibId> usedLibs) {        // write external library information        boolean libraryHeaderPrinted = false;        TreeMap<String,LibId> sortedLibraries = new TreeMap<String,LibId>(TextUtils.STRING_NUMBER_ORDER);        for (LibId libId: usedLibs)            sortedLibraries.put(libId.libName, libId);        for (LibId libId: sortedLibraries.values()) {            if (libId == thisLib) continue;            if (!libraryHeaderPrinted) {                printWriter.println();                printWriter.println("# External Libraries:");                libraryHeaderPrinted = true;            }            String libFile = libId.libName;            printWriter.println();            printWriter.println("L" + convertString(libId.libName) + "|" + convertString(libFile));        }    }    /**     * Helper method to convert a TextDescriptor to a string that describes it     */    private String describeDescriptor(TextDescriptor td) {        return describeDescriptor(null, td, false);    }    /**     * Method to convert a variable to a string that describes its TextDescriptor     * @param var the Variable being described (may be null).     * @param td the TextDescriptor being described.     * @param isParam true to output parameter bit     * @return a String describing the variable/textdescriptor.     * The string has these fields:     *    Asize; for absolute size     *    B if bold     *    Cindex; if color index     *    Dx for display position (2=bottom 8=top 4=left 6=right 7=upleft 9=upright 1=downleft 3=downright 5=centered 0=boxed)     *    FfontName; if a nonstandard font     *    Gsize; for relative (grid unit) size     *    H if inherit     *    I if italic     *    L if underline     *    N if name=value;     *    Ol for language (J=Java L=Lisp T=TCL)     *    P if parameter     *    R/RR/RRR if rotated (90, 180, 270)     *    T if interior     *    Ux for units (R=resistance C=capacitance I=inductance A=current V=voltage D=distance T=time)     *    Xoffset; for X offset     *    Yoffset; for Y offset     */    public static String describeDescriptor(Variable var, TextDescriptor td, boolean isParam) {        StringBuilder ret = new StringBuilder();        TextDescriptor.Display display = td.getDisplay();        if (var == null) display = TextDescriptor.Display.SHOWN;        if (display != TextDescriptor.Display.NONE) {            // write size            TextDescriptor.Size size = td.getSize();            if (size.isAbsolute()) ret.append("A" + (int)size.getSize() + ";");            // write bold            if (td.isBold()) ret.append("B");            // write color            int color = td.getColorIndex();            if (color != 0)                ret.append("C" + color + ";");            // displayable: write display position            ret.append(display == TextDescriptor.Display.SHOWN ? "D" : "d");            TextDescriptor.Position pos = td.getPos();            if (pos == TextDescriptor.Position.UP) ret.append("8"); else                if (pos == TextDescriptor.Position.DOWN) ret.append("2"); else                    if (pos == TextDescriptor.Position.LEFT) ret.append("4"); else                        if (pos == TextDescriptor.Position.RIGHT) ret.append("6"); else                            if (pos == TextDescriptor.Position.UPLEFT) ret.append("7"); else                                if (pos == TextDescriptor.Position.UPRIGHT) ret.append("9"); else                                    if (pos == TextDescriptor.Position.DOWNLEFT) ret.append("1"); else                                        if (pos == TextDescriptor.Position.DOWNRIGHT) ret.append("3"); else                                            if (pos == TextDescriptor.Position.BOXED) ret.append("0"); else                                                ret.append("5");            // write font            int font = td.getFace();            if (font != 0) {                TextDescriptor.ActiveFont af = TextDescriptor.ActiveFont.findActiveFont(font);                ret.append("F" + convertString(af.toString()) + ";");            }            if (!size.isAbsolute()) ret.append("G" + TextUtils.formatDouble(size.getSize()) + ";");        }        // write inherit        if (td.isInherit()) ret.append("H");        if (display != TextDescriptor.Display.NONE) {            // write italic            if (td.isItalic()) ret.append("I");            // write underline            if (td.isUnderline()) ret.append("L");            // write display type            TextDescriptor.DispPos dispPos = td.getDispPart();            if (dispPos == TextDescriptor.DispPos.NAMEVALUE) ret.append("N");        }        // write language        if (var != null) {            switch (var.getCode()) {                case JAVA:  ret.append("OJ"); break;                case SPICE: ret.append("OL"); break;                case TCL:   ret.append("OT"); break;                case NONE:  break;                default: throw new AssertionError();            }        }        // write parameter        if (isParam) ret.append("P");        if (display != TextDescriptor.Display.NONE) {            // write rotation            TextDescriptor.Rotation rot = td.getRotation();            if (rot == TextDescriptor.Rotation.ROT90) ret.append("R"); else                if (rot == TextDescriptor.Rotation.ROT180) ret.append("RR"); else                    if (rot == TextDescriptor.Rotation.ROT270) ret.append("RRR");        }        // write interior        if (td.isInterior()) ret.append("T");        // write units        TextDescriptor.Unit unit = td.getUnit();        if (unit == TextDescriptor.Unit.RESISTANCE) ret.append("UR"); else            if (unit == TextDescriptor.Unit.CAPACITANCE) ret.append("UC"); else                if (unit == TextDescriptor.Unit.INDUCTANCE) ret.append("UI"); else                    if (unit == TextDescriptor.Unit.CURRENT) ret.append("UA"); else                        if (unit == TextDescriptor.Unit.VOLTAGE) ret.append("UV"); else                            if (unit == TextDescriptor.Unit.DISTANCE) ret.append("UD"); else                                if (unit == TextDescriptor.Unit.TIME) ret.append("UT");        if (display != TextDescriptor.Display.NONE) {            // write offset            double offX = td.getXOff();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -