home *** CD-ROM | disk | FTP | other *** search
/ PC Online 1997 October / PCO1097.ISO / FilesBBS / FREI / DIGSIM.EXE / Schematic.class (.txt) < prev    next >
Encoding:
Java Class File  |  1996-05-21  |  10.4 KB  |  534 lines

  1. import java.awt.Color;
  2. import java.awt.Graphics;
  3. import java.io.FileOutputStream;
  4. import java.io.IOException;
  5. import java.io.InputStream;
  6. import java.io.PrintStream;
  7. import java.io.StreamTokenizer;
  8. import java.util.Vector;
  9.  
  10. class Schematic {
  11.    protected Vector Components;
  12.    boolean Modified;
  13.    String FileDir;
  14.    String FileName;
  15.    int SimulateCycleID;
  16.  
  17.    public Schematic() {
  18.       this.Modified = false;
  19.       this.Components = new Vector();
  20.    }
  21.  
  22.    public Schematic(Schematic var1) {
  23.       this.Modified = false;
  24.       this.Components = new Vector();
  25.  
  26.       for(int var3 = 0; var3 < var1.size(); ++var3) {
  27.          ElectronicComponent var2 = (ElectronicComponent)var1.Components.elementAt(var3);
  28.          this.Components.addElement(var2);
  29.       }
  30.  
  31.    }
  32.  
  33.    public Schematic PasteSchematic(Pin[][] var1, Schematic var2, int var3, int var4) {
  34.       Schematic var7 = new Schematic();
  35.       int var9 = -1;
  36.       int var10 = -1;
  37.       this.Modified = true;
  38.  
  39.       for(int var8 = 0; var8 < var2.size(); ++var8) {
  40.          ElectronicComponent var5 = (ElectronicComponent)var2.Components.elementAt(var8);
  41.          if (var5 instanceof Wire) {
  42.             Wire var13 = (Wire)var5;
  43.             int var11 = Math.min(var13.x1, var13.x2);
  44.             int var12 = Math.min(var13.y1, var13.y2);
  45.             if (var9 == -1 || var11 < var9) {
  46.                var9 = var11 - 1;
  47.             }
  48.  
  49.             if (var10 == -1 || var12 < var10) {
  50.                var10 = var12 - 1;
  51.             }
  52.          } else {
  53.             if (var9 == -1 || var5.Pos.x < var9) {
  54.                var9 = var5.Pos.x;
  55.             }
  56.  
  57.             if (var10 == -1 || var5.Pos.y < var10) {
  58.                var10 = var5.Pos.y;
  59.             }
  60.          }
  61.       }
  62.  
  63.       for(int var15 = 0; var15 < var2.size(); ++var15) {
  64.          ElectronicComponent var14 = (ElectronicComponent)var2.Components.elementAt(var15);
  65.          ElectronicComponent var6 = var14.Copy(var9 - var3, var10 - var4);
  66.          var6.PlacePinsHere(var1);
  67.          var14.Selected = false;
  68.          var6.Selected = true;
  69.          if (var14 instanceof Wire) {
  70.             Wire var16 = (Wire)var6;
  71.             var16.ChangingWire = 3;
  72.          }
  73.  
  74.          this.addComponent(var6);
  75.          var7.addComponent(var6);
  76.       }
  77.  
  78.       return var7;
  79.    }
  80.  
  81.    public void SetAllComponentsSelected() {
  82.       for(int var3 = 0; var3 < this.Components.size(); ++var3) {
  83.          ElectronicComponent var1 = (ElectronicComponent)this.Components.elementAt(var3);
  84.          var1.Selected = true;
  85.          if (var1 instanceof Wire) {
  86.             Wire var2 = (Wire)var1;
  87.             var2.ChangingWire = 3;
  88.          }
  89.       }
  90.  
  91.    }
  92.  
  93.    public void RemoveSameElements(Pin[][] var1, Schematic var2) {
  94.       this.Modified = true;
  95.  
  96.       for(int var4 = 0; var4 < var2.size(); ++var4) {
  97.          ElectronicComponent var3 = (ElectronicComponent)var2.Components.elementAt(var4);
  98.          if (this.Components.contains(var3)) {
  99.             var3.RemovePinsGrid(var1);
  100.             this.Components.removeElement(var3);
  101.          }
  102.       }
  103.  
  104.    }
  105.  
  106.    public void DestroyComponents(Pin[][] var1) {
  107.       this.Modified = true;
  108.  
  109.       for(int var3 = 0; var3 < this.Components.size(); ++var3) {
  110.          ElectronicComponent var2 = (ElectronicComponent)this.Components.elementAt(var3);
  111.          var2.RemovePinsGrid(var1);
  112.       }
  113.  
  114.       this.Components.removeAllElements();
  115.    }
  116.  
  117.    public void addComponent(ElectronicComponent var1) {
  118.       this.Modified = true;
  119.       this.Components.addElement(var1);
  120.    }
  121.  
  122.    public void draw(Graphics var1, int var2, int var3, int var4) {
  123.       for(int var6 = 0; var6 < this.Components.size(); ++var6) {
  124.          ElectronicComponent var5 = (ElectronicComponent)this.Components.elementAt(var6);
  125.          var5.draw(var1, var2, var3, var4);
  126.       }
  127.  
  128.    }
  129.  
  130.    public int size() {
  131.       return this.Components.size();
  132.    }
  133.  
  134.    public void RemoveAllComponents() {
  135.       this.Modified = true;
  136.  
  137.       for(int var2 = 0; var2 < this.Components.size(); ++var2) {
  138.          ElectronicComponent var1 = (ElectronicComponent)this.Components.elementAt(var2);
  139.          var1.Selected = false;
  140.       }
  141.  
  142.       this.Components.removeAllElements();
  143.    }
  144.  
  145.    public boolean InSchematic(ElectronicComponent var1) {
  146.       return this.Components.contains(var1);
  147.    }
  148.  
  149.    public void CheckIfComponentsInSelectBox(Schematic var1, int var2, int var3, int var4, int var5) {
  150.       if (var2 > var4) {
  151.          int var7 = var2;
  152.          var2 = var4;
  153.          var4 = var7;
  154.       }
  155.  
  156.       if (var3 > var5) {
  157.          int var9 = var3;
  158.          var3 = var5;
  159.          var5 = var9;
  160.       }
  161.  
  162.       for(int var8 = 0; var8 < this.Components.size(); ++var8) {
  163.          ElectronicComponent var6 = (ElectronicComponent)this.Components.elementAt(var8);
  164.          if (var6.CheckIfComponentInSelectBox(var2, var3, var4, var5)) {
  165.             var1.addComponent(var6);
  166.          }
  167.       }
  168.  
  169.    }
  170.  
  171.    public void AdjustPosition(Pin[][] var1, int var2, int var3) {
  172.       for(int var5 = 0; var5 < this.Components.size(); ++var5) {
  173.          ElectronicComponent var4 = (ElectronicComponent)this.Components.elementAt(var5);
  174.          var4.AdjustPosition(var1, var2, var3);
  175.       }
  176.  
  177.    }
  178.  
  179.    public void RemovePinsGrid(Pin[][] var1) {
  180.       for(int var3 = 0; var3 < this.Components.size(); ++var3) {
  181.          ElectronicComponent var2 = (ElectronicComponent)this.Components.elementAt(var3);
  182.          var2.RemovePinsGrid(var1);
  183.       }
  184.  
  185.    }
  186.  
  187.    public void CheckPosition() {
  188.       for(int var2 = 0; var2 < this.Components.size(); ++var2) {
  189.          ElectronicComponent var1 = (ElectronicComponent)this.Components.elementAt(var2);
  190.          var1.CheckPosition();
  191.       }
  192.  
  193.    }
  194.  
  195.    public void PlacePinsHere(Pin[][] var1) {
  196.       for(int var3 = 0; var3 < this.Components.size(); ++var3) {
  197.          ElectronicComponent var2 = (ElectronicComponent)this.Components.elementAt(var3);
  198.          var2.PlacePinsHere(var1);
  199.       }
  200.  
  201.    }
  202.  
  203.    public ElectronicComponent CheckIfComponentClicked(int var1, int var2) {
  204.       for(int var4 = 0; var4 < this.Components.size(); ++var4) {
  205.          ElectronicComponent var3 = (ElectronicComponent)this.Components.elementAt(var4);
  206.          if (var3.CheckIfComponentClicked(var1, var2)) {
  207.             return var3;
  208.          }
  209.       }
  210.  
  211.       return null;
  212.    }
  213.  
  214.    public void Simulate() {
  215.       for(int var2 = 0; var2 < this.Components.size(); ++var2) {
  216.          ElectronicComponent var1 = (ElectronicComponent)this.Components.elementAt(var2);
  217.          ++this.SimulateCycleID;
  218.          if (this.SimulateCycleID == -1) {
  219.             ++this.SimulateCycleID;
  220.          }
  221.  
  222.          var1.Simulate(this.SimulateCycleID);
  223.       }
  224.  
  225.    }
  226.  
  227.    public void InitBeforeSimulate() {
  228.       for(int var2 = 0; var2 < this.Components.size(); ++var2) {
  229.          ElectronicComponent var1 = (ElectronicComponent)this.Components.elementAt(var2);
  230.          var1.InitBeforeSimulate();
  231.       }
  232.  
  233.    }
  234.  
  235.    protected Color StringToColor(String var1) {
  236.       if ("red".equals(var1)) {
  237.          return Color.red;
  238.       } else if ("green".equals(var1)) {
  239.          return Color.green;
  240.       } else if ("blue".equals(var1)) {
  241.          return Color.blue;
  242.       } else if ("yellow".equals(var1)) {
  243.          return Color.yellow;
  244.       } else if ("pink".equals(var1)) {
  245.          return Color.pink;
  246.       } else if ("black".equals(var1)) {
  247.          return Color.black;
  248.       } else if ("white".equals(var1)) {
  249.          return Color.white;
  250.       } else {
  251.          return "gray".equals(var1) ? Color.gray : Color.red;
  252.       }
  253.    }
  254.  
  255.    public boolean LoadComponent(Pin[][] var1, InputStream var2, StreamTokenizer var3) throws IOException, FileFormatException {
  256.       int var4 = 0;
  257.       int var5 = 0;
  258.       int var6 = 0;
  259.       int var7 = 0;
  260.       String var8 = var3.sval;
  261.       Color var9 = Color.red;
  262.       String var10 = "";
  263.  
  264.       while(true) {
  265.          switch (var3.nextToken()) {
  266.             case -3:
  267.                if ("pos".equals(var3.sval)) {
  268.                   if (var3.nextToken() == -2) {
  269.                      var4 = (int)var3.nval;
  270.                      if (var3.nextToken() == -2) {
  271.                         var5 = (int)var3.nval;
  272.                      }
  273.                   }
  274.  
  275.                   while(var3.ttype != 10 && var3.ttype != -1) {
  276.                      var3.nextToken();
  277.                   }
  278.                } else if ("color".equals(var3.sval)) {
  279.                   if (var3.nextToken() == -3) {
  280.                      var9 = this.StringToColor(var3.sval);
  281.                   }
  282.                } else {
  283.                   int var11;
  284.                   if ("Text".equals(var3.sval)) {
  285.                      for(var10 = ""; (var11 = var2.read()) != 10; var10 = var10 + (char)var11) {
  286.                      }
  287.                   } else if ("pos2".equals(var3.sval)) {
  288.                      if (var3.nextToken() == -2) {
  289.                         var6 = (int)var3.nval;
  290.                         if (var3.nextToken() == -2) {
  291.                            var7 = (int)var3.nval;
  292.                         }
  293.                      }
  294.  
  295.                      while(var3.ttype != 10 && var3.ttype != -1) {
  296.                         var3.nextToken();
  297.                      }
  298.                   } else if ("end".equals(var3.sval) && var3.nextToken() == -3 && "describe".equals(var3.sval)) {
  299.                      if ("Vcc".equals(var8)) {
  300.                         this.addComponent(new Vcc(var1, var4, var5));
  301.                      } else if ("GND".equals(var8)) {
  302.                         this.addComponent(new GND(var1, var4, var5));
  303.                      } else if ("Wire".equals(var8)) {
  304.                         this.addComponent(new Wire(var1, var4, var5, var6, var7));
  305.                      } else if ("Buffer".equals(var8)) {
  306.                         this.addComponent(new Buffer(var1, var4, var5));
  307.                      } else if ("Inverter".equals(var8)) {
  308.                         this.addComponent(new Inverter(var1, var4, var5));
  309.                      } else if ("TwoAndPort".equals(var8)) {
  310.                         this.addComponent(new TwoAndPort(var1, var4, var5));
  311.                      } else if ("ThreeAndPort".equals(var8)) {
  312.                         this.addComponent(new ThreeAndPort(var1, var4, var5));
  313.                      } else if ("TwoNandPort".equals(var8)) {
  314.                         this.addComponent(new TwoNandPort(var1, var4, var5));
  315.                      } else if ("ThreeNandPort".equals(var8)) {
  316.                         this.addComponent(new ThreeNandPort(var1, var4, var5));
  317.                      } else if ("TwoOrPort".equals(var8)) {
  318.                         this.addComponent(new TwoOrPort(var1, var4, var5));
  319.                      } else if ("ThreeOrPort".equals(var8)) {
  320.                         this.addComponent(new ThreeOrPort(var1, var4, var5));
  321.                      } else if ("TwoNorPort".equals(var8)) {
  322.                         this.addComponent(new TwoNorPort(var1, var4, var5));
  323.                      } else if ("ThreeNorPort".equals(var8)) {
  324.                         this.addComponent(new ThreeNorPort(var1, var4, var5));
  325.                      } else if ("TwoXorPort".equals(var8)) {
  326.                         this.addComponent(new TwoXorPort(var1, var4, var5));
  327.                      } else if ("TwoXnorPort".equals(var8)) {
  328.                         this.addComponent(new TwoXnorPort(var1, var4, var5));
  329.                      } else if ("Switch".equals(var8)) {
  330.                         this.addComponent(new Switch(var1, var4, var5));
  331.                      } else if ("PushButton".equals(var8)) {
  332.                         this.addComponent(new PushButton(var1, var4, var5));
  333.                      } else if ("SRLatch".equals(var8)) {
  334.                         this.addComponent(new SRLatch(var1, var4, var5));
  335.                      } else if ("GatedSRLatch".equals(var8)) {
  336.                         this.addComponent(new GatedSRLatch(var1, var4, var5));
  337.                      } else if ("DLatch".equals(var8)) {
  338.                         this.addComponent(new DLatch(var1, var4, var5));
  339.                      } else if ("DFlipFlop".equals(var8)) {
  340.                         this.addComponent(new DFlipFlop(var1, var4, var5));
  341.                      } else if ("JKFlipFlop".equals(var8)) {
  342.                         this.addComponent(new JKFlipFlop(var1, var4, var5));
  343.                      } else if ("EdgeTriggeredTFlipFlop".equals(var8)) {
  344.                         this.addComponent(new EdgeTriggeredTFlipFlop(var1, var4, var5));
  345.                      } else if ("TFlipFlop".equals(var8)) {
  346.                         this.addComponent(new TFlipFlop(var1, var4, var5));
  347.                      } else if ("OctalDFlipFlop".equals(var8)) {
  348.                         this.addComponent(new OctalDFlipFlop(var1, var4, var5));
  349.                      } else if ("OctalLatch".equals(var8)) {
  350.                         this.addComponent(new OctalLatch(var1, var4, var5));
  351.                      } else if ("Oscilator".equals(var8)) {
  352.                         this.addComponent(new Oscilator(var1, var4, var5));
  353.                      } else if ("BCDToSevenSegDecoder".equals(var8)) {
  354.                         this.addComponent(new BCDToSevenSegDecoder(var1, var4, var5));
  355.                      } else if ("ThreeToEightLineDecoder".equals(var8)) {
  356.                         this.addComponent(new ThreeToEightLineDecoder(var1, var4, var5));
  357.                      } else if ("FourBitBinaryCounter".equals(var8)) {
  358.                         this.addComponent(new FourBitBinaryCounter(var1, var4, var5));
  359.                      } else if ("EightBitSerInShiftReg".equals(var8)) {
  360.                         this.addComponent(new EightBitSerInShiftReg(var1, var4, var5));
  361.                      } else if ("EightBitParInShiftReg".equals(var8)) {
  362.                         this.addComponent(new EightBitParInShiftReg(var1, var4, var5));
  363.                      } else if ("Caption".equals(var8)) {
  364.                         this.addComponent(new Caption(var4, var5, var10));
  365.                      } else if ("LED".equals(var8)) {
  366.                         this.addComponent(new LED(var1, var9, var4, var5));
  367.                      } else if ("BiColorLED".equals(var8)) {
  368.                         this.addComponent(new BiColorLED(var1, var4, var5));
  369.                      } else if ("SevenSegmentDisplay".equals(var8)) {
  370.                         this.addComponent(new SevenSegmentDisplay(var1, var9, var4, var5));
  371.                      } else if ("Probe".equals(var8)) {
  372.                         this.addComponent(new Probe(var1, var4, var5, var10, false, false));
  373.                      } else if ("ProbeUp".equals(var8)) {
  374.                         this.addComponent(new Probe(var1, var4, var5, var10, true, false));
  375.                      } else {
  376.                         if (!"ProbeDn".equals(var8)) {
  377.                            return false;
  378.                         }
  379.  
  380.                         this.addComponent(new Probe(var1, var4, var5, var10, false, true));
  381.                      }
  382.  
  383.                      return true;
  384.                   }
  385.                }
  386.             case 10:
  387.                break;
  388.             default:
  389.                return true;
  390.          }
  391.       }
  392.    }
  393.  
  394.    Schematic(Pin[][] var1, InputStream var2) throws IOException, FileFormatException {
  395.       this();
  396.       int var3 = 0;
  397.       int var4 = 0;
  398.       boolean var6 = false;
  399.       StreamTokenizer var7 = new StreamTokenizer(var2);
  400.       var7.eolIsSignificant(true);
  401.       var7.commentChar(35);
  402.  
  403.       while(true) {
  404.          switch (var7.nextToken()) {
  405.             case -3:
  406.                if ("version".equals(var7.sval)) {
  407.                   if (var7.nextToken() == -2) {
  408.                      var3 = (int)var7.nval;
  409.                      if (var7.nextToken() == -2) {
  410.                         var4 = (int)var7.nval;
  411.                      }
  412.                   }
  413.  
  414.                   while(var7.ttype != 10 && var7.ttype != -1) {
  415.                      var7.nextToken();
  416.                   }
  417.                } else if ("describe".equals(var7.sval)) {
  418.                   if (var7.nextToken() == -3 && "component".equals(var7.sval) && var7.nextToken() == -3 && !this.LoadComponent(var1, var2, var7)) {
  419.                      var6 = true;
  420.                   }
  421.                } else {
  422.                   var6 = true;
  423.                }
  424.             case 10:
  425.                break;
  426.             default:
  427.                var2.close();
  428.                if (var7.ttype != -1) {
  429.                   throw new FileFormatException(var7.toString());
  430.                } else {
  431.                   this.Modified = false;
  432.                   if (var6) {
  433.                      String[] var8 = new String[]{"OK"};
  434.                      String var5 = "Unknown data in schematic. Schematic could be corrupt.";
  435.                      new SimpleDialog((DigSimFrame)null, "Loading schematic", var5, var8, 1, 0, 0, 2);
  436.                   }
  437.  
  438.                   return;
  439.                }
  440.          }
  441.       }
  442.    }
  443.  
  444.    public void Save(FileOutputStream var1) throws IOException, FileFormatException {
  445.       PrintStream var3 = new PrintStream(var1);
  446.       var3.println("# Digsim file");
  447.       var3.println("version 1 0");
  448.  
  449.       for(int var4 = 0; var4 < this.Components.size(); ++var4) {
  450.          ElectronicComponent var2 = (ElectronicComponent)this.Components.elementAt(var4);
  451.          var2.Save(var3);
  452.       }
  453.  
  454.       var1.close();
  455.    }
  456.  
  457.    public boolean PlaceJunction(Pin[][] var1, int var2, int var3, int var4) {
  458.       boolean var7 = false;
  459.  
  460.       for(int var8 = 0; var8 < this.Components.size(); ++var8) {
  461.          ElectronicComponent var5 = (ElectronicComponent)this.Components.elementAt(var8);
  462.          if (var5 instanceof Wire) {
  463.             Wire var6 = (Wire)var5;
  464.             if (var6.TryPlaceJunction(this, var1, var2, var3, var4)) {
  465.                var7 = true;
  466.             }
  467.          }
  468.       }
  469.  
  470.       return var7;
  471.    }
  472.  
  473.    public ElectronicComponent TestShortCircuit() {
  474.       for(int var3 = 0; var3 < this.Components.size(); ++var3) {
  475.          ElectronicComponent var1 = (ElectronicComponent)this.Components.elementAt(var3);
  476.  
  477.          for(int var2 = 0; var2 < var1.Outputs; ++var2) {
  478.             if (var1.OPin[var2].ShortCircuit) {
  479.                return var1;
  480.             }
  481.          }
  482.       }
  483.  
  484.       return null;
  485.    }
  486.  
  487.    public ElectronicComponent TestLoop() {
  488.       for(int var3 = 0; var3 < this.Components.size(); ++var3) {
  489.          ElectronicComponent var1 = (ElectronicComponent)this.Components.elementAt(var3);
  490.  
  491.          for(int var2 = 0; var2 < var1.Inputs; ++var2) {
  492.             if (var1.IPin[var2].Looping) {
  493.                return var1;
  494.             }
  495.          }
  496.       }
  497.  
  498.       return null;
  499.    }
  500.  
  501.    public Vector getProbes() {
  502.       Vector var2 = new Vector();
  503.  
  504.       for(int var3 = 0; var3 < this.Components.size(); ++var3) {
  505.          ElectronicComponent var1 = (ElectronicComponent)this.Components.elementAt(var3);
  506.          if (var1 instanceof Probe) {
  507.             var2.addElement(var1);
  508.          }
  509.       }
  510.  
  511.       return var2;
  512.    }
  513.  
  514.    public void SwapComponents(ElectronicComponent var1, ElectronicComponent var2) {
  515.       int var3 = this.Components.indexOf(var1);
  516.       int var4 = this.Components.indexOf(var2);
  517.       if (var3 != -1 && var4 != -1) {
  518.          this.Components.setElementAt(var1, var4);
  519.          this.Components.setElementAt(var2, var3);
  520.       }
  521.    }
  522.  
  523.    public boolean ProbesInSchematic() {
  524.       for(int var2 = 0; var2 < this.Components.size(); ++var2) {
  525.          ElectronicComponent var1 = (ElectronicComponent)this.Components.elementAt(var2);
  526.          if (var1 instanceof Probe) {
  527.             return true;
  528.          }
  529.       }
  530.  
  531.       return false;
  532.    }
  533. }
  534.