home *** CD-ROM | disk | FTP | other *** search
/ io Programmo 27 / IOPROG_27.ISO / SOFT / S5JAVA.ZIP / s5.java < prev    next >
Encoding:
Java Source  |  1999-03-15  |  40.8 KB  |  1,343 lines

  1. /* S5 simulator based on DOS/TP, WIN/Delphi and LINUX/FreePascal versions
  2.    (C) 1998 Peter Sieg
  3. */
  4.  
  5. import java.applet.*;
  6. import java.awt.*;
  7. import java.io.*;
  8. import java.util.*;
  9. import java.net.*;
  10.  
  11. public class s5 extends Applet implements Runnable
  12. {
  13.     Thread timer = null;
  14.  
  15. //    Image img;
  16. //    MediaTracker tracker;
  17.  
  18.     long cnt;
  19.     int i_red, i_green, i_blue;
  20.     String s_mesg = new String("Test...");
  21.     protected static final int i_MAX_AW = 101; // 0-100 1-100 Used
  22.     protected static final int i_MAX_EAM_BAUSTEIN = 0; // EAM 0.0-7
  23.  
  24.     String sa_operation[] = new String[i_MAX_AW];
  25.     String s_operation    = new String();
  26.     String sa_operand[]   = new String[i_MAX_AW];
  27.     String s_operand      = new String();
  28.     String s_line      = new String();
  29.     int  ia_baustein[] = new int[i_MAX_AW];
  30.     int  ia_bitnr[]    = new int[i_MAX_AW];
  31.     int  ia_t_wert[]   = new int[i_MAX_AW];
  32.     int  ia_c_wert[]   = new int[i_MAX_AW];
  33.     int  i_baustein, i_bitnr, i_t_wert, i_c_wert;
  34.     int  i_act_aw, i_anz_aw;
  35.     int  i_hw_simcode; // which hardware to simulate; load with L K N 7!
  36.     int  i_yy,i_yn,i_yw,i_yd,i_yo,i_yh,i_ym,i_ys;
  37.     boolean b_awl_ok, b_running, b_vkl, b_vka, b_vkb, b_vku, b_error;
  38.  
  39.   Checkbox cb_e_00 = new Checkbox("E 0.0");
  40.   Checkbox cb_e_01 = new Checkbox("E 0.1");
  41.   Checkbox cb_e_02 = new Checkbox("E 0.2");
  42.   Checkbox cb_e_03 = new Checkbox("E 0.3");
  43.   Checkbox cb_e_04 = new Checkbox("E 0.4");
  44.   Checkbox cb_e_05 = new Checkbox("E 0.5");
  45.   Checkbox cb_e_06 = new Checkbox("E 0.6");
  46.   Checkbox cb_e_07 = new Checkbox("E 0.7");
  47.  
  48.   Checkbox cb_a_00 = new Checkbox("A 0.0");
  49.   Checkbox cb_a_01 = new Checkbox("A 0.1");
  50.   Checkbox cb_a_02 = new Checkbox("A 0.2");
  51.   Checkbox cb_a_03 = new Checkbox("A 0.3");
  52.   Checkbox cb_a_04 = new Checkbox("A 0.4");
  53.   Checkbox cb_a_05 = new Checkbox("A 0.5");
  54.   Checkbox cb_a_06 = new Checkbox("A 0.6");
  55.   Checkbox cb_a_07 = new Checkbox("A 0.7");
  56.  
  57.   Checkbox cb_m_00 = new Checkbox("M 0.0");
  58.   Checkbox cb_m_01 = new Checkbox("M 0.1");
  59.   Checkbox cb_m_02 = new Checkbox("M 0.2");
  60.   Checkbox cb_m_03 = new Checkbox("M 0.3");
  61.   Checkbox cb_m_04 = new Checkbox("M 0.4");
  62.   Checkbox cb_m_05 = new Checkbox("M 0.5");
  63.   Checkbox cb_m_06 = new Checkbox("M 0.6");
  64.   Checkbox cb_m_07 = new Checkbox("M 0.7");
  65.  
  66.   Label l_counter  = new Label("Counter");
  67.   Label l_timer    = new Label("Timer");
  68.   TextField t_c_00 = new TextField("0",8);
  69.   TextField t_c_01 = new TextField("0",8);
  70.   TextField t_c_02 = new TextField("0",8);
  71.   TextField t_t_00 = new TextField("0",8);
  72.   TextField t_t_01 = new TextField("0",8);
  73.   TextField t_t_02 = new TextField("0",8);
  74.  
  75.   Label l_date_time= new Label("<empty>");
  76.   Label l_accu     = new Label("Accu:");
  77.   TextField t_accu = new TextField("0",8);
  78.   Label l_act_aw   = new Label("Actual AW:");
  79.   Label l_actual_aw= new Label("<empty>");
  80.   Checkbox cb_vka  = new Checkbox("VKA");
  81.   Checkbox cb_vkb  = new Checkbox("VKB");
  82.  
  83.   Button b_load_awl  = new Button("Load AWL");
  84.   Button b_start_stop= new Button("Start/Stop");
  85.   Button b_single_step=new Button("Single Step");
  86.   TextField t_awl_name=new TextField("my.awl",24);
  87.   List l_awl = new List(16,false);
  88.   TextArea t_myawl = new TextArea("UN A 0 0\n= A 0 0\nBE\n",3,15);
  89.   Button b_myawl = new Button("Take AWL");
  90.   public void start()
  91.   {
  92.     if (timer == null)
  93.     {
  94.       timer = new Thread(this);
  95.       timer.start();
  96.     }
  97.   }
  98.  
  99.   public void stop()
  100.   {
  101.     timer = null;
  102.   }
  103.  
  104.   public void run()
  105.   {
  106. /*
  107.     try 
  108.     {
  109.       Start downloading the images. Wait until they're loaded.
  110.       tracker.waitForAll();
  111.     } catch (InterruptedException e) {}
  112. */
  113.     while (timer != null)
  114.     {
  115.       try
  116.       {
  117.         Thread.sleep(100);
  118.       }
  119.       catch (InterruptedException e){}
  120.       if (b_running == true) single_step();
  121.     }
  122.     timer = null;
  123.   }
  124.  
  125. // overide some methods to display author and parameter infos
  126.   public String getAppletInfo()
  127.   {
  128.     return "S5 like plc simulation  (c) 1999 Peter Sieg. For Robin and Heike";
  129.   }
  130.  
  131.   public String[][] getParameterInfo()
  132.   {
  133.     String[][] info = 
  134.     {
  135.       {"red","A color value for the red part. Range 0 to 255", "Used to create background color"},
  136.       {"green","A color value for the green part. Range 0 to 255", "Used to create background color"},
  137.       {"blue","A color value for the blue part. Range 0 to 255", "Used to create background color"},
  138.       {"red2","A color value for the red part. Range 0 to 255", "Used to create background color for elements"},
  139.       {"green2","A color value for the green part. Range 0 to 255", "Used to create background color for elements"},
  140.       {"blue2","A color value for the blue part. Range 0 to 255", "Used to create background color for elements"}
  141.     };
  142.     return info;
  143.   }
  144.  
  145.   public void init()
  146.   {
  147.     resize(600,450); // Set window size (width,height)
  148.     setLayout(null); // use free layout with x,y,width and height.
  149.  
  150. //    tracker = new MediaTracker(this);
  151. //    img = getImage(getCodeBase(),"backgr.jpg");
  152. //    tracker.addImage(img,0);
  153.  
  154. // get RGB parameter or use defaults
  155.     s_line = getParameter("red");
  156.     if (s_line == null) i_red = 200;
  157.     else i_red = Integer.parseInt(s_line);
  158.     if ((i_red < 0) || (i_red > 255)) i_red = 200;
  159.  
  160.     s_line = getParameter("green");
  161.     if (s_line == null) i_green = 225;
  162.     else i_green = Integer.parseInt(s_line);
  163.     if ((i_green < 0) || (i_green > 255)) i_green = 200;
  164.  
  165.     s_line = getParameter("blue");
  166.     if (s_line == null) i_blue = 200;
  167.     else i_blue = Integer.parseInt(s_line);
  168.     if ((i_blue < 0) || (i_blue > 255)) i_blue = 200;
  169.  
  170. // Now make color
  171.     Color backcolor = new Color(i_red, i_green, i_blue); // r,g,b
  172.  
  173. // get RGB parameter or use defaults for element background
  174.     s_line = getParameter("red2");
  175.     if (s_line == null) i_red = 200;
  176.     else i_red = Integer.parseInt(s_line);
  177.     if ((i_red < 0) || (i_red > 255)) i_red = 200;
  178.  
  179.     s_line = getParameter("green2");
  180.     if (s_line == null) i_green = 225;
  181.     else i_green = Integer.parseInt(s_line);
  182.     if ((i_green < 0) || (i_green > 255)) i_green = 200;
  183.  
  184.     s_line = getParameter("blue2");
  185.     if (s_line == null) i_blue = 200;
  186.     else i_blue = Integer.parseInt(s_line);
  187.     if ((i_blue < 0) || (i_blue > 255)) i_blue = 200;
  188.  
  189. // now make color   
  190.     Color backelements = new Color(i_red, i_green, i_blue); // r,g,b
  191.  
  192.     setBackground(backcolor);
  193.     setForeground(Color.black);
  194.  
  195.     add(cb_e_00);
  196.     cb_e_00.reshape(   1,   1,  50, 28);
  197.     cb_e_00.setForeground(Color.green);
  198.     cb_e_00.setBackground(backelements);
  199.     add(cb_e_01);
  200.     cb_e_01.reshape(   1,  31,  50, 28);
  201.     cb_e_01.setForeground(Color.green);
  202.     cb_e_01.setBackground(backelements);
  203.     add(cb_e_02);
  204.     cb_e_02.reshape(   1,  61,  50, 28);
  205.     cb_e_02.setForeground(Color.green);
  206.     cb_e_02.setBackground(backelements);
  207.     add(cb_e_03);
  208.     cb_e_03.reshape(   1,  91,  50, 28);
  209.     cb_e_03.setForeground(Color.green);
  210.     cb_e_03.setBackground(backelements);
  211.     add(cb_e_04);
  212.     cb_e_04.reshape(   1,  121,  50, 28);
  213.     cb_e_04.setForeground(Color.green);
  214.     cb_e_04.setBackground(backelements);
  215.     add(cb_e_05);
  216.     cb_e_05.reshape(   1, 151,  50, 28);
  217.     cb_e_05.setForeground(Color.green);
  218.     cb_e_05.setBackground(backelements);
  219.     add(cb_e_06);
  220.     cb_e_06.reshape(   1, 181,  50, 28);
  221.     cb_e_06.setForeground(Color.green);
  222.     cb_e_06.setBackground(backelements);
  223.     add(cb_e_07);
  224.     cb_e_07.reshape(   1, 211,  50, 28);
  225.     cb_e_07.setForeground(Color.green);
  226.     cb_e_07.setBackground(backelements);
  227.  
  228.     add(cb_a_00);
  229.     cb_a_00.reshape(  55,   1,  50, 28);
  230.     cb_a_00.setForeground(Color.red);
  231.     cb_a_00.setBackground(backelements);
  232.     add(cb_a_01);
  233.     cb_a_01.reshape(  55,  31,  50, 28);
  234.     cb_a_01.setForeground(Color.red);
  235.     cb_a_01.setBackground(backelements);
  236.     add(cb_a_02);
  237.     cb_a_02.reshape(  55,  61,  50, 28);
  238.     cb_a_02.setForeground(Color.red);
  239.     cb_a_02.setBackground(backelements);
  240.     add(cb_a_03);
  241.     cb_a_03.reshape(  55,  91,  50, 28);
  242.     cb_a_03.setForeground(Color.red);
  243.     cb_a_03.setBackground(backelements);
  244.     add(cb_a_04);
  245.     cb_a_04.reshape(  55,  121,  50, 28);
  246.     cb_a_04.setForeground(Color.red);
  247.     cb_a_04.setBackground(backelements);
  248.     add(cb_a_05);
  249.     cb_a_05.reshape(  55, 155,  50, 28);
  250.     cb_a_05.setForeground(Color.red);
  251.     cb_a_05.setBackground(backelements);
  252.     add(cb_a_06);
  253.     cb_a_06.reshape(  55, 181,  50, 28);
  254.     cb_a_06.setForeground(Color.red);
  255.     cb_a_06.setBackground(backelements);
  256.     add(cb_a_07);
  257.     cb_a_07.reshape(  55, 211,  50, 28);
  258.     cb_a_07.setForeground(Color.red);
  259.     cb_a_07.setBackground(backelements);
  260.  
  261.     add(cb_m_00);
  262.     cb_m_00.reshape( 111,   1,  50, 28);
  263.     cb_m_00.setForeground(Color.blue);
  264.     cb_m_00.setBackground(backelements);
  265.     add(cb_m_01);
  266.     cb_m_01.reshape( 111,  31,  50, 28);
  267.     cb_m_01.setForeground(Color.blue);
  268.     cb_m_01.setBackground(backelements);
  269.     add(cb_m_02);
  270.     cb_m_02.reshape( 111,  61,  50, 28);
  271.     cb_m_02.setForeground(Color.blue);
  272.     cb_m_02.setBackground(backelements);
  273.     add(cb_m_03);
  274.     cb_m_03.reshape( 111,  91,  50, 28);
  275.     cb_m_03.setForeground(Color.blue);
  276.     cb_m_03.setBackground(backelements);
  277.     add(cb_m_04);
  278.     cb_m_04.reshape( 111,  121,  50, 28);
  279.     cb_m_04.setForeground(Color.blue);
  280.     cb_m_04.setBackground(backelements);
  281.     add(cb_m_05);
  282.     cb_m_05.reshape( 111, 151,  50, 28);
  283.     cb_m_05.setForeground(Color.blue);
  284.     cb_m_05.setBackground(backelements);
  285.     add(cb_m_06);
  286.     cb_m_06.reshape( 111, 181,  50, 28);
  287.     cb_m_06.setForeground(Color.blue);
  288.     cb_m_06.setBackground(backelements);
  289.     add(cb_m_07);
  290.     cb_m_07.reshape( 111, 211,  50, 28);
  291.     cb_m_07.setForeground(Color.blue);
  292.     cb_m_07.setBackground(backelements);
  293.  
  294.     add(l_counter);
  295.     l_counter.reshape( 201,   1,  80, 28);
  296.     l_counter.setBackground(Color.magenta);
  297.     add(t_c_00);
  298.     t_c_00.reshape(    201,  31,  80, 28);
  299.     add(t_c_01);
  300.     t_c_01.reshape(    201,  61,  80, 28);
  301.     add(t_c_02);
  302.     t_c_02.reshape(    201,  91,  80, 28);
  303.     add(l_timer);
  304.     l_timer.reshape(   201,  121,  80, 28);
  305.     l_timer.setBackground(Color.cyan);
  306.     add(t_t_00);
  307.     t_t_00.reshape(    201, 151,  80, 28);
  308.     add(t_t_01);
  309.     t_t_01.reshape(    201, 181,  80, 28);
  310.     add(t_t_02);
  311.     t_t_02.reshape(    201, 211,  80, 28);
  312.  
  313.     add(l_date_time);
  314.     l_date_time.reshape( 1, 241, 105, 28);
  315.     l_date_time.setBackground(backelements);
  316.     add(l_accu);
  317.     l_accu.reshape(      1, 271,  80, 28);
  318.     l_accu.setBackground(backelements);
  319.     add(t_accu);
  320.     t_accu.reshape(    111, 271,  80, 28);
  321.     t_accu.setBackground(backelements);
  322.  
  323.     add(l_act_aw);
  324.     l_act_aw.reshape(    1, 301,  80, 28);
  325.     l_act_aw.setBackground(backelements);
  326.     add(l_actual_aw);
  327.     l_actual_aw.reshape(111,301,  80, 28);
  328.     l_actual_aw.setForeground(Color.yellow);
  329.     l_actual_aw.setBackground(backelements);
  330.     add(cb_vka);
  331.     cb_vka.reshape(    201, 301,  40, 28);
  332.     cb_vka.setForeground(Color.yellow);
  333.     cb_vka.setBackground(backelements);
  334.     add(cb_vkb);
  335.     cb_vkb.reshape(    251, 301,  40, 28);
  336.     cb_vkb.setForeground(Color.red);
  337.     cb_vkb.setBackground(backelements);
  338.  
  339.     add(b_load_awl);
  340.     b_load_awl.reshape(   201, 341, 80, 20);
  341.     b_load_awl.setForeground(Color.red);
  342.     add(b_start_stop);
  343.     b_start_stop.reshape( 111, 341, 80, 20);
  344.     b_start_stop.setForeground(Color.red);
  345.     add(b_single_step);
  346.     b_single_step.reshape(   1, 341, 80, 20);
  347.     b_single_step.setForeground(Color.red);
  348.  
  349.     add(t_awl_name);
  350.     t_awl_name.reshape  ( 301, 341, 198, 28);
  351.  
  352.     add(l_awl);
  353.     l_awl.reshape(510, 10, 80, 360);
  354.  
  355.     add(t_myawl);
  356.     t_myawl.reshape(301, 370, 198, 75);
  357.     add(b_myawl);
  358.     b_myawl.reshape(   201, 370, 80, 20);
  359.     b_myawl.setForeground(Color.red);
  360.  
  361.     cnt = 0;
  362.     i_hw_simcode = 0;
  363.   }
  364.  
  365.   public void debug(String s, long i)
  366.   {
  367.     s_mesg = s;
  368.     cnt = i;
  369.     repaint();
  370.   }
  371.  
  372.   public void init_eamtc()
  373.   {
  374. //  init e,a,m to false
  375.       cb_e_00.setState(false);
  376.       cb_e_01.setState(false);
  377.       cb_e_02.setState(false);
  378.       cb_e_03.setState(false);
  379.       cb_e_04.setState(false);
  380.       cb_e_05.setState(false);
  381.       cb_e_06.setState(false);
  382.       cb_e_07.setState(false);
  383.  
  384.       cb_a_00.setState(false);
  385.       cb_a_01.setState(false);
  386.       cb_a_02.setState(false);
  387.       cb_a_03.setState(false);
  388.       cb_a_04.setState(false);
  389.       cb_a_05.setState(false);
  390.       cb_a_06.setState(false);
  391.       cb_a_07.setState(false);
  392.  
  393.       cb_m_00.setState(false);
  394.       cb_m_01.setState(false);
  395.       cb_m_02.setState(false);
  396.       cb_m_03.setState(false);
  397.       cb_m_04.setState(false);
  398.       cb_m_05.setState(false);
  399.       cb_m_06.setState(false);
  400.       cb_m_07.setState(false);
  401.  
  402. //   init timer and counter to 0
  403.        t_t_00.setText("0");
  404.        t_t_01.setText("0");
  405.        t_t_02.setText("0");
  406.  
  407.        t_c_00.setText("0");
  408.        t_c_01.setText("0");
  409.        t_c_02.setText("0");
  410.   }
  411.  
  412.   public void load_myawl()
  413.   {
  414.     // this will load a awl file from the textarea t_myawl line=aw by line,
  415.     // checks the syntax of each line and stores the awl in the
  416.     // appropiate variables. If an error occurs, the function will
  417.     // abort and initialize the variables to zero (i_anz_aw=0)
  418.  
  419.     debug("Load...myawl...",0-cnt);
  420.  
  421.     // real loading, parsing and checking of a awl file starts here
  422.     b_error  = true; // assume error in file
  423.  
  424.     // clear aw list l_awl
  425.     l_awl.clear(); // clear awl list
  426.  
  427.     String s_line;  // line from file
  428.     String s_token; // token from line
  429.     int i_line_nr;
  430.     int i_cnt, i_anz;
  431.  
  432.     i_line_nr= 0;
  433.     i_anz_aw = 0;
  434.     debug("Before while...",0);
  435.  
  436.     // get lines from textarea t_myawl
  437.     StringTokenizer stl = new StringTokenizer(t_myawl.getText(),"\n");
  438.     i_anz = stl.countTokens(); // how many lines do we have to process
  439.  
  440.     for (i_cnt = 1; i_cnt <= i_anz; i_cnt++)
  441.     {
  442.         s_line = stl.nextToken();
  443.         i_line_nr++;
  444.         // debug(s_line,1000+i_line_nr);
  445.         // now we have a line from the textarea. first parse it
  446.         // into operation, operand, baustein and bitnr
  447.         // make uppercase anyway
  448.         s_line = s_line.toUpperCase();
  449.         // remove leading and trailing white space chars
  450.         s_line = s_line.trim();
  451.  
  452.         // show line in list area l_awl
  453.         l_awl.addItem(s_line);
  454.  
  455.         StringTokenizer st = new StringTokenizer(s_line," ");
  456.         if (st.countTokens() == 4)
  457.         {
  458.           // if all ok store inside awl arrays. increase i_anz_awl
  459.           i_anz_aw++;
  460.           debug(s_line,100*st.countTokens()+i_anz_aw);
  461.           s_token = st.nextToken(); // operation
  462.           // debug(s_token,100*st.countTokens()+i_anz_aw);
  463.           sa_operation[i_anz_aw] = s_token;
  464.           s_token = st.nextToken(); // operand
  465.           // debug(s_token,100*st.countTokens()+i_anz_aw);
  466.           sa_operand[i_anz_aw]   = s_token;
  467.           s_token = st.nextToken(); // baustein
  468.           ia_baustein[i_anz_aw]  = Integer.valueOf(s_token).intValue();
  469.           s_token = st.nextToken(); // bitnr
  470.           ia_bitnr[i_anz_aw]     = Integer.valueOf(s_token).intValue();
  471.         }
  472.         else
  473.         {
  474.           debug(s_line,100*st.countTokens()+i_anz_aw);
  475.           if (s_line.equals("BE"))
  476.           {
  477.             i_anz_aw++;
  478.             sa_operation[i_anz_aw] = "BE";
  479.             sa_operand[i_anz_aw]   = "";
  480.             ia_baustein[i_anz_aw]  = 0;
  481.             ia_bitnr[i_anz_aw]     = 0;
  482.             b_error = false;
  483.           }
  484.           else b_error = true;
  485.         } // else
  486.     } 
  487.     debug("EOF...myawl...",0);
  488.  
  489.     i_act_aw = 1; // start with 1 anyway
  490.     if (b_error)
  491.     {
  492.       b_awl_ok = false; // overall everything *not* ok to process awl
  493.       b_vkl    = false; // up to last aw state init with false
  494.       debug("b_error is true",0);
  495.     }
  496.     else
  497.     {
  498.       b_awl_ok = true; // overall everything ok to process awl
  499.       b_vkl    = true; // up to last aw state init with true
  500.       debug("myawl ok. aw's=",i_anz_aw);
  501.     }
  502.  
  503. //  init e,a,m,t,c to false
  504.     init_eamtc();
  505.   }
  506.  
  507.   public void load_awl()
  508.   {
  509.     // this will load a awl file from file system line=aw by line,
  510.     // checks the syntax of each line and stores the awl in the
  511.     // appropiate variables. If an error occurs, the function will
  512.     // abort and initialize the variables to zero (i_anz_aw=0)
  513.  
  514.     debug("Load...",0-cnt);
  515.  
  516. /*  DUMMY LOAD IS HERE
  517.     // UNA0.0
  518.     sa_operation[1] = "UN";
  519.     sa_operand[1]   = "A";
  520.     ia_baustein[1]  = 0;
  521.     ia_bitnr[1]     = 0;
  522.  
  523.     // =A0.0
  524.     sa_operation[2] = "=";
  525.     sa_operand[2]   = "A";
  526.     ia_baustein[2]  = 0;
  527.     ia_bitnr[2]     = 0;
  528.  
  529.     // BE
  530.     sa_operation[3] = "BE";
  531.     sa_operand[3]   = " ";
  532.     ia_baustein[3]  = 0;
  533.     ia_bitnr[3]     = 0;
  534.  
  535.     i_act_aw = 1;    // start with first aw
  536.     i_anz_aw = 3;    // total aw, should point to "BE"*
  537.     b_awl_ok = true; // overall everything ok to process awl
  538.     b_vkl    = true; // up to last aw state init with true
  539.     b_vku    = true; // allow for single and (U) to be true
  540. */
  541.     // real loading, parsing and checking of a awl file starts here
  542.     b_error  = true; // assume error in file
  543.  
  544.     // clear aw list l_awl
  545.     l_awl.clear(); // clear awl list
  546.  
  547.     debug("Before try...",0);
  548.     try
  549.     {
  550.       debug("Inside try...",0);
  551.       String s_line;  // line from file
  552.       String s_token; // token from line
  553.       int i_line_nr;
  554.  
  555.       debug("Before f_is...",0);
  556.       URL f_is = null;
  557.       DataInputStream d_is = null;
  558. //    f_is = new URL(getCodeBase(), "my.awl");
  559.       f_is = new URL(getCodeBase(), t_awl_name.getText());
  560.       debug("Before d_is...",0);
  561.       d_is = new DataInputStream(f_is.openStream());
  562.  
  563.       i_line_nr= 0;
  564.       i_anz_aw = 0;
  565.       debug("Before while...",0);
  566.       while ((s_line = d_is.readLine()) != null)
  567.       {
  568.         i_line_nr++;
  569.         debug(s_line,1000+i_line_nr);
  570.         // now we have a line from the file. first parse it
  571.         // into operation, operand, baustein and bitnr
  572.  
  573.         // make uppercase anyway
  574.         s_line = s_line.toUpperCase();
  575.         // remove leading and trailing white space chars
  576.         s_line = s_line.trim();
  577.  
  578.         // show line in list area l_awl
  579.         l_awl.addItem(s_line);
  580.  
  581.         StringTokenizer st = new StringTokenizer(s_line," ");
  582.         if (st.countTokens() == 4)
  583.         {
  584.           // if all ok store inside awl arrays. increase i_anz_awl
  585.           i_anz_aw++;
  586.           s_token = st.nextToken(); // operation
  587.           sa_operation[i_anz_aw] = s_token;
  588.           s_token = st.nextToken(); // operand
  589.           sa_operand[i_anz_aw]   = s_token;
  590.           s_token = st.nextToken(); // baustein
  591.           ia_baustein[i_anz_aw]  = Integer.valueOf(s_token).intValue();
  592.           s_token = st.nextToken(); // bitnr
  593.           ia_bitnr[i_anz_aw]     = Integer.valueOf(s_token).intValue();
  594.         }
  595.         else
  596.         {
  597.           if (s_line.equals("BE"))
  598.           {
  599.             i_anz_aw++;
  600.             sa_operation[i_anz_aw] = "BE";
  601.             sa_operand[i_anz_aw]   = "";
  602.             ia_baustein[i_anz_aw]  = 0;
  603.             ia_bitnr[i_anz_aw]     = 0;
  604.             b_error = false;
  605.           }
  606.           else b_error = true;
  607.         }
  608.       }
  609.       debug("EOF...",0);
  610.       d_is.close();
  611.     }
  612.     catch (IOException e)
  613.     {
  614.         b_error= true;
  615.         debug("IOError...",-1l);
  616.     }
  617.     i_act_aw = 1; // start with 1 anyway
  618.     if (b_error)
  619.     {
  620.       b_awl_ok = false; // overall everything *not* ok to process awl
  621.       b_vkl    = false; // up to last aw state init with false
  622. //    debug("b_error is true",0);
  623.     }
  624.     else
  625.     {
  626.       b_awl_ok = true; // overall everything ok to process awl
  627.       b_vkl    = true; // up to last aw state init with true
  628. //    debug("b_error is false",0);
  629.     }
  630.  
  631. //  init e,a,m,t,c to false
  632.     init_eamtc();
  633.   }
  634.  
  635.   public void start_stop()
  636.   {
  637.     cnt--;
  638.     if (b_running)
  639.     {
  640.        b_running = false;
  641.        debug("Stop...",cnt);
  642.     }
  643.     else
  644.     {
  645.        b_running = true;
  646.        debug("Start...",cnt);
  647.     }
  648.   }
  649.  
  650.   public void update_date_time()
  651.   {
  652.     Date now = new Date(); // get actual date and time; put in now 
  653.     i_yy = now.getYear() + 1900; // number starting with 1900
  654.     i_yn = now.getMonth() + 1; // zero based +1 to result in 1-12
  655.     i_yd = now.getDate(); // day of month
  656.     i_yo = now.getDay(); // Sun=0,Sat=6
  657.     i_yh = now.getHours();
  658.     i_ym = now.getMinutes();
  659.     i_ys = now.getSeconds();
  660.     i_yw = (((i_yn-1)*30+i_yd)/7)+1; // simple substitution
  661.     // show date and time in label l_date_time
  662.     l_date_time.setText(now.toLocaleString());
  663.   }
  664.  
  665.   public void do_one_aw(int i)
  666.   {
  667.     String s_xoperation = new String();
  668.     String s_xoperand   = new String();
  669.     int i_xbaustein, i_xbitnr, i_n;
  670.  
  671.     s_xoperation = sa_operation[i];
  672.     s_xoperand   = sa_operand[i];
  673.     i_xbaustein  = ia_baustein[i];
  674.     i_xbitnr     = ia_bitnr[i];
  675.  
  676.     // b_vka holts the individual state of the operand of the actual aw
  677.     // if b_vkl (last b_vkb) and b_vka are true then the total score b_vkb is true
  678.  
  679.     if (s_xoperand.equals("E"))
  680.     {
  681.       switch (i_xbitnr)
  682.       {
  683.         case 0: b_vka = cb_e_00.getState(); break;
  684.         case 1: b_vka = cb_e_01.getState(); break;
  685.         case 2: b_vka = cb_e_02.getState(); break;
  686.         case 3: b_vka = cb_e_03.getState(); break;
  687.         case 4: b_vka = cb_e_04.getState(); break;
  688.         case 5: b_vka = cb_e_05.getState(); break;
  689.         case 6: b_vka = cb_e_06.getState(); break;
  690.         case 7: b_vka = cb_e_07.getState(); break;
  691.       }
  692.     }
  693.  
  694.     if (s_xoperand.equals("A"))
  695.     {
  696.       switch (i_xbitnr)
  697.       {
  698.         case 0: b_vka = cb_a_00.getState(); break;
  699.         case 1: b_vka = cb_a_01.getState(); break;
  700.         case 2: b_vka = cb_a_02.getState(); break;
  701.         case 3: b_vka = cb_a_03.getState(); break;
  702.         case 4: b_vka = cb_a_04.getState(); break;
  703.         case 5: b_vka = cb_a_05.getState(); break;
  704.         case 6: b_vka = cb_a_06.getState(); break;
  705.         case 7: b_vka = cb_a_07.getState(); break;
  706.       }
  707.     }
  708.  
  709.     if (s_xoperand.equals("M"))
  710.     {
  711.       switch (i_xbitnr)
  712.       {
  713.         case 0: b_vka = cb_m_00.getState(); break;
  714.         case 1: b_vka = cb_m_01.getState(); break;
  715.         case 2: b_vka = cb_m_02.getState(); break;
  716.         case 3: b_vka = cb_m_03.getState(); break;
  717.         case 4: b_vka = cb_m_04.getState(); break;
  718.         case 5: b_vka = cb_m_05.getState(); break;
  719.         case 6: b_vka = cb_m_06.getState(); break;
  720.         case 7: b_vka = cb_m_07.getState(); break;
  721.       }
  722.     }
  723.     // now the Y? operands are handled to update b_vka
  724.     if (s_xoperand.equals("YY")) if (i_yy > i_xbaustein) b_vka = true;
  725.     else b_vka = false;
  726.     if (s_xoperand.equals("YN")) if (i_yn > i_xbaustein) b_vka = true;
  727.     else b_vka = false;
  728.     if (s_xoperand.equals("YW")) if (i_yw > i_xbaustein) b_vka = true;
  729.     else b_vka = false;
  730.     if (s_xoperand.equals("YD")) if (i_yd > i_xbaustein) b_vka = true;
  731.     else b_vka = false;
  732.     if (s_xoperand.equals("YO")) if (i_yo > i_xbaustein) b_vka = true;
  733.     else b_vka = false;
  734.     if (s_xoperand.equals("YH")) if (i_yh > i_xbaustein) b_vka = true;
  735.     else b_vka = false;
  736.     if (s_xoperand.equals("YM")) if (i_ym > i_xbaustein) b_vka = true;
  737.     else b_vka = false;
  738.     if (s_xoperand.equals("YS")) if (i_ys > i_xbaustein) b_vka = true;
  739.     else b_vka = false;
  740.  
  741.     if (s_xoperand.equals("T")) // b_vka = (t_t_nn == 0)
  742.     {
  743.       if (i_xbitnr == 0)
  744.       {
  745.         if (0 == Integer.valueOf(t_t_00.getText()).intValue()) b_vka = true;
  746.         else b_vka = false;
  747.       }
  748.       if (i_xbitnr == 1)
  749.       {
  750.         if (0 == Integer.valueOf(t_t_01.getText()).intValue()) b_vka = true;
  751.         else b_vka = false;
  752.       }
  753.       if (i_xbitnr == 2)
  754.       {
  755.         if (0 == Integer.valueOf(t_t_02.getText()).intValue()) b_vka = true;
  756.         else b_vka = false;
  757.       }
  758.     }
  759.     if (s_xoperand.equals("Z")) // b_vka = (t_c_nn == 0)
  760.     {
  761.       if (i_xbitnr == 0)
  762.       {
  763.         if (0 == Integer.valueOf(t_c_00.getText()).intValue()) b_vka = true;
  764.         else b_vka = false;
  765.       }
  766.       if (i_xbitnr == 1)
  767.       {
  768.         if (0 == Integer.valueOf(t_c_01.getText()).intValue()) b_vka = true;
  769.         else b_vka = false;
  770.       }
  771.       if (i_xbitnr == 2)
  772.       {
  773.         if (0 == Integer.valueOf(t_c_02.getText()).intValue()) b_vka = true;
  774.         else b_vka = false;
  775.       }
  776.     }
  777.  
  778.  
  779.     // b_vka holts the individual state of the operand of the actual aw
  780.     // if b_vkl (last b_vkb) and b_vka are true then the total score b_vkb is true
  781.  
  782.     if (s_xoperation.equals("U"))
  783.     {
  784.       cnt += 10;
  785.       if (!b_vku) b_vkl = true;
  786.       if ((b_vka == true) && (b_vkl == true)) b_vkb = true;
  787.       else b_vkb = false;
  788.     }
  789.     if (s_xoperation.equals("UN"))
  790.     {
  791.       cnt += 10;
  792.       if (!b_vku) b_vkl = true;
  793.       if ((b_vka == false) && (b_vkl == true)) b_vkb = true;
  794.       else b_vkb = false;
  795.     }
  796.     if (s_xoperation.equals("O"))
  797.     {
  798.       cnt += 10;
  799.       if ((b_vka == true) || (b_vkl == true)) b_vkb = true;
  800.       else b_vkb = false;
  801.     }
  802.     if (s_xoperation.equals("ON"))
  803.     {
  804.       cnt += 10;
  805.       if ((b_vka == false) || (b_vkl == true)) b_vkb = true;
  806.       else b_vkb = false;
  807.     }
  808.  
  809.     if ((s_xoperation.equals("L")) && (b_vkl))
  810.     {
  811.       if (s_xoperand.equals("K")) // load value (baustein) into accu
  812.       {
  813.         if (i_xbitnr < 7) t_accu.setText(String.valueOf(i_xbaustein));
  814.         else 
  815.         {
  816.           i_hw_simcode = i_xbaustein; // which hardware to simulate
  817.         }
  818.       }
  819.     }
  820.  
  821.     if ((s_xoperation.equals("S")) && (b_vkl)) // set t_t/c_nn to accu; if b_vkl == true set EAM to true
  822.     {
  823.       if (s_xoperand.equals("T")) // timer
  824.       {
  825.         if (i_xbitnr == 0)
  826.         {
  827.           t_t_00.setText(t_accu.getText());
  828.         }
  829.         if (i_xbitnr == 1)
  830.         {
  831.           t_t_01.setText(t_accu.getText());
  832.         }
  833.         if (i_xbitnr == 2)
  834.         {
  835.           t_t_02.setText(t_accu.getText());
  836.         }
  837.       }
  838.       if (s_xoperand.equals("Z")) // counter
  839.       {
  840.         if (i_xbitnr == 0)
  841.         {
  842.           t_c_00.setText(t_accu.getText());
  843.         }
  844.         if (i_xbitnr == 1)
  845.         {
  846.           t_c_01.setText(t_accu.getText());
  847.         }
  848.         if (i_xbitnr == 2)
  849.         {
  850.           t_c_02.setText(t_accu.getText());
  851.         }
  852.       }
  853.       if (s_xoperand.equals("E"))
  854.       {
  855.         switch (i_xbitnr)
  856.         {
  857.           case 0: cb_e_00.setState(true); break;
  858.           case 1: cb_e_01.setState(true); break;
  859.           case 2: cb_e_02.setState(true); break;
  860.           case 3: cb_e_03.setState(true); break;
  861.           case 4: cb_e_04.setState(true); break;
  862.           case 5: cb_e_05.setState(true); break;
  863.           case 6: cb_e_06.setState(true); break;
  864.           case 7: cb_e_07.setState(true); break;
  865.         }
  866.       }
  867.       if (s_xoperand.equals("A"))
  868.       {
  869.         switch (i_xbitnr)
  870.         {
  871.           case 0: cb_a_00.setState(true); break;
  872.           case 1: cb_a_01.setState(true); break;
  873.           case 2: cb_a_02.setState(true); break;
  874.           case 3: cb_a_03.setState(true); break;
  875.           case 4: cb_a_04.setState(true); break;
  876.           case 5: cb_a_05.setState(true); break;
  877.           case 6: cb_a_06.setState(true); break;
  878.           case 7: cb_a_07.setState(true); break;
  879.         }
  880.       }
  881.       if (s_xoperand.equals("M"))
  882.       {
  883.         switch (i_xbitnr)
  884.         {
  885.           case 0: cb_m_00.setState(true); break;
  886.           case 1: cb_m_01.setState(true); break;
  887.           case 2: cb_m_02.setState(true); break;
  888.           case 3: cb_m_03.setState(true); break;
  889.           case 4: cb_m_04.setState(true); break;
  890.           case 5: cb_m_05.setState(true); break;
  891.           case 6: cb_m_06.setState(true); break;
  892.           case 7: cb_m_07.setState(true); break;
  893.         }
  894.       }
  895.     }
  896.  
  897.     if ((s_xoperation.equals("R")) && (b_vkl)) // set t_t/c_nn to 0; if b_vkl == true set EAM to false
  898.     {
  899.       if (s_xoperand.equals("T")) // timer
  900.       {
  901.         if (i_xbitnr == 0)
  902.         {
  903.           t_t_00.setText("0");
  904.         }
  905.         if (i_xbitnr == 1)
  906.         {
  907.           t_t_01.setText("0");
  908.         }
  909.         if (i_xbitnr == 2)
  910.         {
  911.           t_t_02.setText("0");
  912.         }
  913.       }
  914.       if (s_xoperand.equals("Z")) // counter
  915.       {
  916.         if (i_xbitnr == 0)
  917.         {
  918.           t_c_00.setText("0");
  919.         }
  920.         if (i_xbitnr == 1)
  921.         {
  922.           t_c_01.setText("0");
  923.         }
  924.         if (i_xbitnr == 2)
  925.         {
  926.           t_c_02.setText("0");
  927.         }
  928.       }
  929.       if (s_xoperand.equals("E"))
  930.       {
  931.         switch (i_xbitnr)
  932.         {
  933.           case 0: cb_e_00.setState(false); break;
  934.           case 1: cb_e_01.setState(false); break;
  935.           case 2: cb_e_02.setState(false); break;
  936.           case 3: cb_e_03.setState(false); break;
  937.           case 4: cb_e_04.setState(false); break;
  938.           case 5: cb_e_05.setState(false); break;
  939.           case 6: cb_e_06.setState(false); break;
  940.           case 7: cb_e_07.setState(false); break;
  941.         }
  942.       }
  943.       if (s_xoperand.equals("A"))
  944.       {
  945.         switch (i_xbitnr)
  946.         {
  947.           case 0: cb_a_00.setState(false); break;
  948.           case 1: cb_a_01.setState(false); break;
  949.           case 2: cb_a_02.setState(false); break;
  950.           case 3: cb_a_03.setState(false); break;
  951.           case 4: cb_a_04.setState(false); break;
  952.           case 5: cb_a_05.setState(false); break;
  953.           case 6: cb_a_06.setState(false); break;
  954.           case 7: cb_a_07.setState(false); break;
  955.         }
  956.       }
  957.       if (s_xoperand.equals("M"))
  958.       {
  959.         switch (i_xbitnr)
  960.         {
  961.           case 0: cb_m_00.setState(false); break;
  962.           case 1: cb_m_01.setState(false); break;
  963.           case 2: cb_m_02.setState(false); break;
  964.           case 3: cb_m_03.setState(false); break;
  965.           case 4: cb_m_04.setState(false); break;
  966.           case 5: cb_m_05.setState(false); break;
  967.           case 6: cb_m_06.setState(false); break;
  968.           case 7: cb_m_07.setState(false); break;
  969.         }
  970.       }
  971.     }
  972.  
  973.     if ((s_xoperation.equals("Z")) && (b_vkl)) // inc/dec t_c_nn R=-1/V=+1
  974.     {
  975.       if (s_xoperand.equals("V")) // increment t_c_nn +1
  976.       {
  977.         if (i_xbitnr == 0)
  978.         {
  979.           i_n = Integer.valueOf(t_c_00.getText()).intValue();
  980.           i_n++;
  981.           t_c_00.setText(String.valueOf(i_n));
  982.         }
  983.         if (i_xbitnr == 1)
  984.         {
  985.           i_n = Integer.valueOf(t_c_01.getText()).intValue();
  986.           i_n++;
  987.           t_c_01.setText(String.valueOf(i_n));
  988.         }
  989.         if (i_xbitnr == 2)
  990.         {
  991.           i_n = Integer.valueOf(t_c_02.getText()).intValue();
  992.           i_n++;
  993.           t_c_02.setText(String.valueOf(i_n));
  994.         }
  995.       }
  996.       if (s_xoperand.equals("R")) // decrement t_c_nn -1
  997.       {
  998.         if (i_xbitnr == 0)
  999.         {
  1000.           i_n = Integer.valueOf(t_c_00.getText()).intValue();
  1001.           if (i_n > 0) i_n--;
  1002.           t_c_00.setText(String.valueOf(i_n));
  1003.         }
  1004.         if (i_xbitnr == 1)
  1005.         {
  1006.           i_n = Integer.valueOf(t_c_01.getText()).intValue();
  1007.           if (i_n > 0) i_n--;
  1008.           t_c_01.setText(String.valueOf(i_n));
  1009.         }
  1010.         if (i_xbitnr == 2)
  1011.         {
  1012.           i_n = Integer.valueOf(t_c_02.getText()).intValue();
  1013.           if (i_n > 0) i_n--;
  1014.           t_c_02.setText(String.valueOf(i_n));
  1015.         }
  1016.       }
  1017.     }
  1018.  
  1019.     if (s_xoperation.equals("="))
  1020.     {
  1021.       cnt += 10;
  1022.       if (s_xoperand.equals("E"))
  1023.       {
  1024.         switch (i_xbitnr)
  1025.         {
  1026.           case 0: cb_e_00.setState(b_vkl); break;
  1027.           case 1: cb_e_01.setState(b_vkl); break;
  1028.           case 2: cb_e_02.setState(b_vkl); break;
  1029.           case 3: cb_e_03.setState(b_vkl); break;
  1030.           case 4: cb_e_04.setState(b_vkl); break;
  1031.           case 5: cb_e_05.setState(b_vkl); break;
  1032.           case 6: cb_e_06.setState(b_vkl); break;
  1033.           case 7: cb_e_07.setState(b_vkl); break;
  1034.         }
  1035.       }
  1036.  
  1037.       if (s_xoperand.equals("A"))
  1038.       {
  1039.         switch (i_xbitnr)
  1040.         {
  1041.           case 0: cb_a_00.setState(b_vkl); break;
  1042.           case 1: cb_a_01.setState(b_vkl); break;
  1043.           case 2: cb_a_02.setState(b_vkl); break;
  1044.           case 3: cb_a_03.setState(b_vkl); break;
  1045.           case 4: cb_a_04.setState(b_vkl); break;
  1046.           case 5: cb_a_05.setState(b_vkl); break;
  1047.           case 6: cb_a_06.setState(b_vkl); break;
  1048.           case 7: cb_a_07.setState(b_vkl); break;
  1049.         }
  1050.       }
  1051.  
  1052.       if (s_xoperand.equals("M"))
  1053.       {
  1054.         switch (i_xbitnr)
  1055.         {
  1056.           case 0: cb_m_00.setState(b_vkl); break;
  1057.           case 1: cb_m_01.setState(b_vkl); break;
  1058.           case 2: cb_m_02.setState(b_vkl); break;
  1059.           case 3: cb_m_03.setState(b_vkl); break;
  1060.           case 4: cb_m_04.setState(b_vkl); break;
  1061.           case 5: cb_m_05.setState(b_vkl); break;
  1062.           case 6: cb_m_06.setState(b_vkl); break;
  1063.           case 7: cb_m_07.setState(b_vkl); break;
  1064.         }
  1065.       }
  1066.     }
  1067.  
  1068.     if (s_xoperation.equals("BE"))
  1069.     {
  1070.       cnt += 10;
  1071.       b_vkl = true;
  1072.     }
  1073.  
  1074.     b_vkl = b_vkb; // save last vkb
  1075.     b_vku = false;
  1076.     if (s_xoperation.equals("U")) b_vku = true;
  1077.     if (s_xoperation.equals("UN")) b_vku= true;
  1078.   }
  1079.  
  1080.   public void single_step()
  1081.   {
  1082.     int i_n;
  1083.     cnt++;
  1084.     debug("Step...",cnt);
  1085.  
  1086.     if (b_awl_ok == true)
  1087.     {
  1088.       // show aw in list l_awl
  1089.       l_awl.select(i_act_aw-1);
  1090.       l_awl.makeVisible(i_act_aw-1);
  1091.  
  1092.       // show aw in applet
  1093.  
  1094.       l_actual_aw.setText(sa_operation[i_act_aw]+sa_operand[i_act_aw]
  1095.       +String.valueOf(ia_baustein[i_act_aw])+"."+String.valueOf(ia_bitnr[i_act_aw]));
  1096.  
  1097.       do_one_aw(i_act_aw);
  1098.  
  1099.       // show b_vka and b_vkb state
  1100.       cb_vka.setState(b_vka);
  1101.       cb_vkb.setState(b_vkb);
  1102.  
  1103.       if (i_act_aw < i_anz_aw)
  1104.       {
  1105.         i_act_aw++;
  1106.       }
  1107.       else
  1108.       {
  1109.         i_act_aw = 1;
  1110.         // update date and time values
  1111.         update_date_time();
  1112.         // update t_t_00-02 as pseudo timer
  1113.         i_n = Integer.valueOf(t_t_00.getText()).intValue();
  1114.         if (i_n > 0) i_n--;
  1115.         t_t_00.setText(String.valueOf(i_n));
  1116.         i_n = Integer.valueOf(t_t_01.getText()).intValue();
  1117.         if (i_n > 0) i_n--;
  1118.         t_t_01.setText(String.valueOf(i_n));
  1119.         i_n = Integer.valueOf(t_t_02.getText()).intValue();
  1120.         if (i_n > 0) i_n--;
  1121.         t_t_02.setText(String.valueOf(i_n));
  1122.       }
  1123.  
  1124.     }
  1125.   }
  1126.  
  1127.   public boolean action(Event evt, Object arg)
  1128.   {
  1129.     if (evt.target == b_myawl)
  1130.     {
  1131.       load_myawl();
  1132.       return true; // yes, this event was handled.
  1133.     }
  1134.     if (evt.target == b_start_stop)
  1135.     {
  1136.       start_stop();
  1137.       return true; // yes, this event was handled.
  1138.     }
  1139.     if (evt.target == b_single_step)
  1140.     {
  1141.       single_step();
  1142.       return true; // yes, this event was handled.
  1143.     }
  1144.     if (evt.target == b_load_awl)
  1145.     {
  1146.       load_awl();
  1147.       return true; // yes, this event was handled.
  1148.     }
  1149.     return false;  // other events should be handled elsewhere.
  1150.   }
  1151.  
  1152.  
  1153.   public void pre_paint()
  1154.   {
  1155.     Graphics g = getGraphics();
  1156.  
  1157.     // paint hardware simulation area 
  1158.     // width=196 starting at 302; height=296 starting at 2
  1159.     g.drawRect(301,  1,197,298);
  1160.     switch (i_hw_simcode)
  1161.     {
  1162.     case 0:
  1163.     // *************************************************
  1164.     // start individual hardware simulation routine here
  1165.     // 1.) first show a_00-a_02 with traffic light
  1166.       Color brown = new Color(150, 75,  0); // r,g,b = pcb board brown
  1167.       g.setColor(brown);
  1168.     //  g.setColor(Color.gray);
  1169.       g.fillRect(310, 10,180,280);
  1170.       g.setColor(Color.black);
  1171.       g.fillRect(311, 11, 20, 58);
  1172.       g.setColor(Color.black);
  1173.       g.fillRect(311, 70, 40, 40);
  1174.       // clear round area
  1175.       g.setColor(Color.white);
  1176.       g.fillOval(313, 73, 34, 34);    
  1177.       g.setColor(Color.black);
  1178.       g.fillRect(311,115, 50, 20);
  1179.       g.fillRect(311,140, 50, 20);
  1180.       g.setColor(Color.white);
  1181.       g.fillRect(313,118, 44, 14);
  1182.       g.fillRect(313,143, 44, 14);
  1183.       g.setColor(Color.black);
  1184.       // con lines first relais
  1185.       g.drawLine(311,128,325,128);
  1186.       g.drawLine(345,128,360,128);
  1187.       // con lines second relais
  1188.       g.drawLine(311,153,325,153);
  1189.       g.drawLine(345,153,360,153);
  1190.     break;
  1191.     // *************************************************
  1192.     case 1:
  1193.       g.setColor(Color.yellow);
  1194.       // g.setColor(Color.gray);
  1195.       g.fillRect(310, 10,180,280);
  1196.       // paint a 'transport' belt 
  1197.       g.setColor(Color.black);
  1198.       g.fillRect(320,200,160, 10);
  1199.       g.fillOval(322,210,  8,  8);
  1200.       g.fillOval(396,210,  8,  8);
  1201.       g.fillOval(470,210,  8,  8);
  1202.       // draw filling nozzle above middle beaker position
  1203.       g.fillRect(394,110, 10, 30);
  1204.       g.fillRect(390,125, 18, 10);
  1205.       // e_03 to show beaker is full
  1206.       g.fillOval(380,160,  8,  8);
  1207.     break;
  1208.     default:
  1209.     break;    
  1210.     }
  1211.     // restore color
  1212.     g.setColor(Color.black);
  1213.   }
  1214.  
  1215.   public void upd_paint()
  1216.   {
  1217.     Graphics g = getGraphics();
  1218.     // paint hardware simulation area 
  1219.     // width=196 starting at 302; height=296 starting at 2
  1220.     switch (i_hw_simcode)
  1221.     {
  1222.     case 0:
  1223.     // *************************************************
  1224.     // start individual hardware simulation routine here
  1225.     // 1.) first show a_00-a_02 with traffic light
  1226.     // a_00 = green
  1227.     if (cb_a_00.getState()) g.setColor(Color.green);
  1228.     else g.setColor(Color.black);
  1229.     g.fillOval(313, 13, 14, 14);
  1230.     // a_01 = yellow
  1231.     if (cb_a_01.getState()) g.setColor(Color.yellow);
  1232.     else g.setColor(Color.black);
  1233.     g.fillOval(313, 33, 14, 14);
  1234.     // a_02 = red
  1235.     if (cb_a_02.getState()) g.setColor(Color.red);
  1236.     else g.setColor(Color.black);
  1237.     g.fillOval(313, 53, 14, 14);
  1238.     // restore color
  1239.     g.setColor(Color.black);
  1240.     // 2.) show a_03 with spinning ventilator
  1241.     if (cb_a_03.getState()) g.setColor(Color.blue);
  1242.     else g.setColor(Color.white);
  1243.     // draw + middle x=330;y=90
  1244.     g.fillRect(325, 75, 10, 30);
  1245.     g.fillRect(315, 85, 30, 10); 
  1246.     // restore color
  1247.     g.setColor(Color.black);
  1248.     // 3.) show a_04+a_05 with relais
  1249.     if (cb_a_04.getState()) g.setColor(Color.orange);
  1250.     else g.setColor(Color.white);
  1251.     g.fillRect(325,120, 20,  8);
  1252.     if (cb_a_05.getState()) g.setColor(Color.magenta);
  1253.     else g.setColor(Color.white);
  1254.     g.fillRect(325,145, 20,  8);
  1255.     break;
  1256.     // *************************************************
  1257.     case 1:
  1258.     // now show status of e_00-e_03 with red light if true, black if false
  1259.     if (cb_e_00.getState()) g.setColor(Color.red);
  1260.     else g.setColor(Color.black);
  1261.     g.fillOval(322,210,  8,  8);
  1262.     if (cb_e_01.getState()) g.setColor(Color.red);
  1263.     else g.setColor(Color.black);
  1264.     g.fillOval(396,210,  8,  8);
  1265.     if (cb_e_02.getState()) g.setColor(Color.red);
  1266.     else g.setColor(Color.black);
  1267.     g.fillOval(470,210,  8,  8);
  1268.     if (cb_e_03.getState()) g.setColor(Color.red);
  1269.     else g.setColor(Color.black);
  1270.     g.fillOval(380,160,  8,  8);
  1271.     // show beaker at pos e_00-e_02 if true
  1272.     if (cb_e_00.getState())
  1273.     {
  1274.       g.setColor(Color.black);
  1275.       g.fillRect(320,160, 19, 39);
  1276.     }
  1277.     else // clear beaker position
  1278.     {
  1279.       g.setColor(Color.yellow);
  1280.       g.drawRect(320,160, 18, 38); 
  1281.     }
  1282.     if (cb_e_01.getState())
  1283.     {
  1284.       g.setColor(Color.black);
  1285.       g.fillRect(390,160, 19, 39);
  1286.     }
  1287.     else // clear beaker position
  1288.     {
  1289.       g.setColor(Color.yellow);
  1290.       g.drawRect(390,160, 18, 38); 
  1291.     }
  1292.     if (cb_e_02.getState())
  1293.     {
  1294.       g.setColor(Color.black);
  1295.       g.fillRect(460,160, 19, 39);
  1296.     }
  1297.     else // clear beaker position
  1298.     {
  1299.       g.setColor(Color.yellow);
  1300.       g.drawRect(460,160, 18, 38); 
  1301.     }
  1302.     // show transport if a_00 = true with an arrow line
  1303.     if (cb_a_00.getState()) g.setColor(Color.red);
  1304.     else g.setColor(Color.black);
  1305.     g.drawLine(330,230,460,230);
  1306.     g.drawLine(440,220,460,230);
  1307.     g.drawLine(440,240,460,230);
  1308.     // show filling into beaker if a_03 is true with an arrow line
  1309.     if (cb_a_03.getState()) g.setColor(Color.red);
  1310.     else g.setColor(Color.black);
  1311.     g.drawLine(399,142,399,158);
  1312.     g.drawLine(393,150,399,158);
  1313.     g.drawLine(405,150,399,158);
  1314.  
  1315.     break;
  1316.     default:
  1317.     break;    
  1318.     }
  1319.     // restore color
  1320.     g.setColor(Color.black);
  1321.   }
  1322.  
  1323.   public void update( Graphics g)
  1324.   {
  1325.     paint(g);
  1326.   }
  1327.   
  1328.   public void paint( Graphics g)
  1329.   {
  1330.     // print out the values etc.
  1331.     // if (tracker.checkAll()) g.drawImage(img,0,0,500,400,this);
  1332.     g.setColor(Color.white);
  1333.     g.fillRoundRect(302,301, 100, 20,4,2);
  1334.     g.setColor(Color.black);
  1335.     g.drawString(s_mesg + cnt, 305, 316);
  1336.     // paint one time elements of hardware simulation
  1337.     pre_paint();
  1338.     // paint updates of hardware simulation area
  1339.     upd_paint();
  1340.   }
  1341. }
  1342.  
  1343.