home *** CD-ROM | disk | FTP | other *** search
- import java.awt.Color;
- import java.awt.Graphics;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.PrintStream;
- import java.io.StreamTokenizer;
- import java.util.Vector;
-
- class Schematic {
- protected Vector Components;
- boolean Modified;
- String FileDir;
- String FileName;
- int SimulateCycleID;
-
- public Schematic() {
- this.Modified = false;
- this.Components = new Vector();
- }
-
- public Schematic(Schematic var1) {
- this.Modified = false;
- this.Components = new Vector();
-
- for(int var3 = 0; var3 < var1.size(); ++var3) {
- ElectronicComponent var2 = (ElectronicComponent)var1.Components.elementAt(var3);
- this.Components.addElement(var2);
- }
-
- }
-
- public Schematic PasteSchematic(Pin[][] var1, Schematic var2, int var3, int var4) {
- Schematic var7 = new Schematic();
- int var9 = -1;
- int var10 = -1;
- this.Modified = true;
-
- for(int var8 = 0; var8 < var2.size(); ++var8) {
- ElectronicComponent var5 = (ElectronicComponent)var2.Components.elementAt(var8);
- if (var5 instanceof Wire) {
- Wire var13 = (Wire)var5;
- int var11 = Math.min(var13.x1, var13.x2);
- int var12 = Math.min(var13.y1, var13.y2);
- if (var9 == -1 || var11 < var9) {
- var9 = var11 - 1;
- }
-
- if (var10 == -1 || var12 < var10) {
- var10 = var12 - 1;
- }
- } else {
- if (var9 == -1 || var5.Pos.x < var9) {
- var9 = var5.Pos.x;
- }
-
- if (var10 == -1 || var5.Pos.y < var10) {
- var10 = var5.Pos.y;
- }
- }
- }
-
- for(int var15 = 0; var15 < var2.size(); ++var15) {
- ElectronicComponent var14 = (ElectronicComponent)var2.Components.elementAt(var15);
- ElectronicComponent var6 = var14.Copy(var9 - var3, var10 - var4);
- var6.PlacePinsHere(var1);
- var14.Selected = false;
- var6.Selected = true;
- if (var14 instanceof Wire) {
- Wire var16 = (Wire)var6;
- var16.ChangingWire = 3;
- }
-
- this.addComponent(var6);
- var7.addComponent(var6);
- }
-
- return var7;
- }
-
- public void SetAllComponentsSelected() {
- for(int var3 = 0; var3 < this.Components.size(); ++var3) {
- ElectronicComponent var1 = (ElectronicComponent)this.Components.elementAt(var3);
- var1.Selected = true;
- if (var1 instanceof Wire) {
- Wire var2 = (Wire)var1;
- var2.ChangingWire = 3;
- }
- }
-
- }
-
- public void RemoveSameElements(Pin[][] var1, Schematic var2) {
- this.Modified = true;
-
- for(int var4 = 0; var4 < var2.size(); ++var4) {
- ElectronicComponent var3 = (ElectronicComponent)var2.Components.elementAt(var4);
- if (this.Components.contains(var3)) {
- var3.RemovePinsGrid(var1);
- this.Components.removeElement(var3);
- }
- }
-
- }
-
- public void DestroyComponents(Pin[][] var1) {
- this.Modified = true;
-
- for(int var3 = 0; var3 < this.Components.size(); ++var3) {
- ElectronicComponent var2 = (ElectronicComponent)this.Components.elementAt(var3);
- var2.RemovePinsGrid(var1);
- }
-
- this.Components.removeAllElements();
- }
-
- public void addComponent(ElectronicComponent var1) {
- this.Modified = true;
- this.Components.addElement(var1);
- }
-
- public void draw(Graphics var1, int var2, int var3, int var4) {
- for(int var6 = 0; var6 < this.Components.size(); ++var6) {
- ElectronicComponent var5 = (ElectronicComponent)this.Components.elementAt(var6);
- var5.draw(var1, var2, var3, var4);
- }
-
- }
-
- public int size() {
- return this.Components.size();
- }
-
- public void RemoveAllComponents() {
- this.Modified = true;
-
- for(int var2 = 0; var2 < this.Components.size(); ++var2) {
- ElectronicComponent var1 = (ElectronicComponent)this.Components.elementAt(var2);
- var1.Selected = false;
- }
-
- this.Components.removeAllElements();
- }
-
- public boolean InSchematic(ElectronicComponent var1) {
- return this.Components.contains(var1);
- }
-
- public void CheckIfComponentsInSelectBox(Schematic var1, int var2, int var3, int var4, int var5) {
- if (var2 > var4) {
- int var7 = var2;
- var2 = var4;
- var4 = var7;
- }
-
- if (var3 > var5) {
- int var9 = var3;
- var3 = var5;
- var5 = var9;
- }
-
- for(int var8 = 0; var8 < this.Components.size(); ++var8) {
- ElectronicComponent var6 = (ElectronicComponent)this.Components.elementAt(var8);
- if (var6.CheckIfComponentInSelectBox(var2, var3, var4, var5)) {
- var1.addComponent(var6);
- }
- }
-
- }
-
- public void AdjustPosition(Pin[][] var1, int var2, int var3) {
- for(int var5 = 0; var5 < this.Components.size(); ++var5) {
- ElectronicComponent var4 = (ElectronicComponent)this.Components.elementAt(var5);
- var4.AdjustPosition(var1, var2, var3);
- }
-
- }
-
- public void RemovePinsGrid(Pin[][] var1) {
- for(int var3 = 0; var3 < this.Components.size(); ++var3) {
- ElectronicComponent var2 = (ElectronicComponent)this.Components.elementAt(var3);
- var2.RemovePinsGrid(var1);
- }
-
- }
-
- public void CheckPosition() {
- for(int var2 = 0; var2 < this.Components.size(); ++var2) {
- ElectronicComponent var1 = (ElectronicComponent)this.Components.elementAt(var2);
- var1.CheckPosition();
- }
-
- }
-
- public void PlacePinsHere(Pin[][] var1) {
- for(int var3 = 0; var3 < this.Components.size(); ++var3) {
- ElectronicComponent var2 = (ElectronicComponent)this.Components.elementAt(var3);
- var2.PlacePinsHere(var1);
- }
-
- }
-
- public ElectronicComponent CheckIfComponentClicked(int var1, int var2) {
- for(int var4 = 0; var4 < this.Components.size(); ++var4) {
- ElectronicComponent var3 = (ElectronicComponent)this.Components.elementAt(var4);
- if (var3.CheckIfComponentClicked(var1, var2)) {
- return var3;
- }
- }
-
- return null;
- }
-
- public void Simulate() {
- for(int var2 = 0; var2 < this.Components.size(); ++var2) {
- ElectronicComponent var1 = (ElectronicComponent)this.Components.elementAt(var2);
- ++this.SimulateCycleID;
- if (this.SimulateCycleID == -1) {
- ++this.SimulateCycleID;
- }
-
- var1.Simulate(this.SimulateCycleID);
- }
-
- }
-
- public void InitBeforeSimulate() {
- for(int var2 = 0; var2 < this.Components.size(); ++var2) {
- ElectronicComponent var1 = (ElectronicComponent)this.Components.elementAt(var2);
- var1.InitBeforeSimulate();
- }
-
- }
-
- protected Color StringToColor(String var1) {
- if ("red".equals(var1)) {
- return Color.red;
- } else if ("green".equals(var1)) {
- return Color.green;
- } else if ("blue".equals(var1)) {
- return Color.blue;
- } else if ("yellow".equals(var1)) {
- return Color.yellow;
- } else if ("pink".equals(var1)) {
- return Color.pink;
- } else if ("black".equals(var1)) {
- return Color.black;
- } else if ("white".equals(var1)) {
- return Color.white;
- } else {
- return "gray".equals(var1) ? Color.gray : Color.red;
- }
- }
-
- public boolean LoadComponent(Pin[][] var1, InputStream var2, StreamTokenizer var3) throws IOException, FileFormatException {
- int var4 = 0;
- int var5 = 0;
- int var6 = 0;
- int var7 = 0;
- String var8 = var3.sval;
- Color var9 = Color.red;
- String var10 = "";
-
- while(true) {
- switch (var3.nextToken()) {
- case -3:
- if ("pos".equals(var3.sval)) {
- if (var3.nextToken() == -2) {
- var4 = (int)var3.nval;
- if (var3.nextToken() == -2) {
- var5 = (int)var3.nval;
- }
- }
-
- while(var3.ttype != 10 && var3.ttype != -1) {
- var3.nextToken();
- }
- } else if ("color".equals(var3.sval)) {
- if (var3.nextToken() == -3) {
- var9 = this.StringToColor(var3.sval);
- }
- } else {
- int var11;
- if ("Text".equals(var3.sval)) {
- for(var10 = ""; (var11 = var2.read()) != 10; var10 = var10 + (char)var11) {
- }
- } else if ("pos2".equals(var3.sval)) {
- if (var3.nextToken() == -2) {
- var6 = (int)var3.nval;
- if (var3.nextToken() == -2) {
- var7 = (int)var3.nval;
- }
- }
-
- while(var3.ttype != 10 && var3.ttype != -1) {
- var3.nextToken();
- }
- } else if ("end".equals(var3.sval) && var3.nextToken() == -3 && "describe".equals(var3.sval)) {
- if ("Vcc".equals(var8)) {
- this.addComponent(new Vcc(var1, var4, var5));
- } else if ("GND".equals(var8)) {
- this.addComponent(new GND(var1, var4, var5));
- } else if ("Wire".equals(var8)) {
- this.addComponent(new Wire(var1, var4, var5, var6, var7));
- } else if ("Buffer".equals(var8)) {
- this.addComponent(new Buffer(var1, var4, var5));
- } else if ("Inverter".equals(var8)) {
- this.addComponent(new Inverter(var1, var4, var5));
- } else if ("TwoAndPort".equals(var8)) {
- this.addComponent(new TwoAndPort(var1, var4, var5));
- } else if ("ThreeAndPort".equals(var8)) {
- this.addComponent(new ThreeAndPort(var1, var4, var5));
- } else if ("TwoNandPort".equals(var8)) {
- this.addComponent(new TwoNandPort(var1, var4, var5));
- } else if ("ThreeNandPort".equals(var8)) {
- this.addComponent(new ThreeNandPort(var1, var4, var5));
- } else if ("TwoOrPort".equals(var8)) {
- this.addComponent(new TwoOrPort(var1, var4, var5));
- } else if ("ThreeOrPort".equals(var8)) {
- this.addComponent(new ThreeOrPort(var1, var4, var5));
- } else if ("TwoNorPort".equals(var8)) {
- this.addComponent(new TwoNorPort(var1, var4, var5));
- } else if ("ThreeNorPort".equals(var8)) {
- this.addComponent(new ThreeNorPort(var1, var4, var5));
- } else if ("TwoXorPort".equals(var8)) {
- this.addComponent(new TwoXorPort(var1, var4, var5));
- } else if ("TwoXnorPort".equals(var8)) {
- this.addComponent(new TwoXnorPort(var1, var4, var5));
- } else if ("Switch".equals(var8)) {
- this.addComponent(new Switch(var1, var4, var5));
- } else if ("PushButton".equals(var8)) {
- this.addComponent(new PushButton(var1, var4, var5));
- } else if ("SRLatch".equals(var8)) {
- this.addComponent(new SRLatch(var1, var4, var5));
- } else if ("GatedSRLatch".equals(var8)) {
- this.addComponent(new GatedSRLatch(var1, var4, var5));
- } else if ("DLatch".equals(var8)) {
- this.addComponent(new DLatch(var1, var4, var5));
- } else if ("DFlipFlop".equals(var8)) {
- this.addComponent(new DFlipFlop(var1, var4, var5));
- } else if ("JKFlipFlop".equals(var8)) {
- this.addComponent(new JKFlipFlop(var1, var4, var5));
- } else if ("EdgeTriggeredTFlipFlop".equals(var8)) {
- this.addComponent(new EdgeTriggeredTFlipFlop(var1, var4, var5));
- } else if ("TFlipFlop".equals(var8)) {
- this.addComponent(new TFlipFlop(var1, var4, var5));
- } else if ("OctalDFlipFlop".equals(var8)) {
- this.addComponent(new OctalDFlipFlop(var1, var4, var5));
- } else if ("OctalLatch".equals(var8)) {
- this.addComponent(new OctalLatch(var1, var4, var5));
- } else if ("Oscilator".equals(var8)) {
- this.addComponent(new Oscilator(var1, var4, var5));
- } else if ("BCDToSevenSegDecoder".equals(var8)) {
- this.addComponent(new BCDToSevenSegDecoder(var1, var4, var5));
- } else if ("ThreeToEightLineDecoder".equals(var8)) {
- this.addComponent(new ThreeToEightLineDecoder(var1, var4, var5));
- } else if ("FourBitBinaryCounter".equals(var8)) {
- this.addComponent(new FourBitBinaryCounter(var1, var4, var5));
- } else if ("EightBitSerInShiftReg".equals(var8)) {
- this.addComponent(new EightBitSerInShiftReg(var1, var4, var5));
- } else if ("EightBitParInShiftReg".equals(var8)) {
- this.addComponent(new EightBitParInShiftReg(var1, var4, var5));
- } else if ("Caption".equals(var8)) {
- this.addComponent(new Caption(var4, var5, var10));
- } else if ("LED".equals(var8)) {
- this.addComponent(new LED(var1, var9, var4, var5));
- } else if ("BiColorLED".equals(var8)) {
- this.addComponent(new BiColorLED(var1, var4, var5));
- } else if ("SevenSegmentDisplay".equals(var8)) {
- this.addComponent(new SevenSegmentDisplay(var1, var9, var4, var5));
- } else if ("Probe".equals(var8)) {
- this.addComponent(new Probe(var1, var4, var5, var10, false, false));
- } else if ("ProbeUp".equals(var8)) {
- this.addComponent(new Probe(var1, var4, var5, var10, true, false));
- } else {
- if (!"ProbeDn".equals(var8)) {
- return false;
- }
-
- this.addComponent(new Probe(var1, var4, var5, var10, false, true));
- }
-
- return true;
- }
- }
- case 10:
- break;
- default:
- return true;
- }
- }
- }
-
- Schematic(Pin[][] var1, InputStream var2) throws IOException, FileFormatException {
- this();
- int var3 = 0;
- int var4 = 0;
- boolean var6 = false;
- StreamTokenizer var7 = new StreamTokenizer(var2);
- var7.eolIsSignificant(true);
- var7.commentChar(35);
-
- while(true) {
- switch (var7.nextToken()) {
- case -3:
- if ("version".equals(var7.sval)) {
- if (var7.nextToken() == -2) {
- var3 = (int)var7.nval;
- if (var7.nextToken() == -2) {
- var4 = (int)var7.nval;
- }
- }
-
- while(var7.ttype != 10 && var7.ttype != -1) {
- var7.nextToken();
- }
- } else if ("describe".equals(var7.sval)) {
- if (var7.nextToken() == -3 && "component".equals(var7.sval) && var7.nextToken() == -3 && !this.LoadComponent(var1, var2, var7)) {
- var6 = true;
- }
- } else {
- var6 = true;
- }
- case 10:
- break;
- default:
- var2.close();
- if (var7.ttype != -1) {
- throw new FileFormatException(var7.toString());
- } else {
- this.Modified = false;
- if (var6) {
- String[] var8 = new String[]{"OK"};
- String var5 = "Unknown data in schematic. Schematic could be corrupt.";
- new SimpleDialog((DigSimFrame)null, "Loading schematic", var5, var8, 1, 0, 0, 2);
- }
-
- return;
- }
- }
- }
- }
-
- public void Save(FileOutputStream var1) throws IOException, FileFormatException {
- PrintStream var3 = new PrintStream(var1);
- var3.println("# Digsim file");
- var3.println("version 1 0");
-
- for(int var4 = 0; var4 < this.Components.size(); ++var4) {
- ElectronicComponent var2 = (ElectronicComponent)this.Components.elementAt(var4);
- var2.Save(var3);
- }
-
- var1.close();
- }
-
- public boolean PlaceJunction(Pin[][] var1, int var2, int var3, int var4) {
- boolean var7 = false;
-
- for(int var8 = 0; var8 < this.Components.size(); ++var8) {
- ElectronicComponent var5 = (ElectronicComponent)this.Components.elementAt(var8);
- if (var5 instanceof Wire) {
- Wire var6 = (Wire)var5;
- if (var6.TryPlaceJunction(this, var1, var2, var3, var4)) {
- var7 = true;
- }
- }
- }
-
- return var7;
- }
-
- public ElectronicComponent TestShortCircuit() {
- for(int var3 = 0; var3 < this.Components.size(); ++var3) {
- ElectronicComponent var1 = (ElectronicComponent)this.Components.elementAt(var3);
-
- for(int var2 = 0; var2 < var1.Outputs; ++var2) {
- if (var1.OPin[var2].ShortCircuit) {
- return var1;
- }
- }
- }
-
- return null;
- }
-
- public ElectronicComponent TestLoop() {
- for(int var3 = 0; var3 < this.Components.size(); ++var3) {
- ElectronicComponent var1 = (ElectronicComponent)this.Components.elementAt(var3);
-
- for(int var2 = 0; var2 < var1.Inputs; ++var2) {
- if (var1.IPin[var2].Looping) {
- return var1;
- }
- }
- }
-
- return null;
- }
-
- public Vector getProbes() {
- Vector var2 = new Vector();
-
- for(int var3 = 0; var3 < this.Components.size(); ++var3) {
- ElectronicComponent var1 = (ElectronicComponent)this.Components.elementAt(var3);
- if (var1 instanceof Probe) {
- var2.addElement(var1);
- }
- }
-
- return var2;
- }
-
- public void SwapComponents(ElectronicComponent var1, ElectronicComponent var2) {
- int var3 = this.Components.indexOf(var1);
- int var4 = this.Components.indexOf(var2);
- if (var3 != -1 && var4 != -1) {
- this.Components.setElementAt(var1, var4);
- this.Components.setElementAt(var2, var3);
- }
- }
-
- public boolean ProbesInSchematic() {
- for(int var2 = 0; var2 < this.Components.size(); ++var2) {
- ElectronicComponent var1 = (ElectronicComponent)this.Components.elementAt(var2);
- if (var1 instanceof Probe) {
- return true;
- }
- }
-
- return false;
- }
- }
-