/** FILE: grafico.java **/ package SIMULA; import BUFFER.accex; import java.awt.*; import java.io.FileOutputStream; import java.io.IOException; // Referenced classes of package SIMULA: // simulator /* * CLASS grafico * * visualizza i tempi di esecuzione di tutti i processi e calcola il tempo medio * stampa la tabella del grafico su i file mittenti.txt o destinatari.txt */ class grafico extends Frame { /* * COSTRUTTORE * * stampa su file e calcola il tempo medio di attesa * */ grafico(accex accex1, String s) { color = (new Color[] { Color.blue, Color.red, Color.green, Color.cyan, Color.pink, Color.darkGray, Color.orange, Color.black, Color.magenta, Color.yellow}); entro = true; Max = 1; int i = 0; int j = 0; try { FileOutputStream fileoutputstream = new FileOutputStream(s + ".txt"); for(accex accex2 = accex1; accex2.next != null; accex2 = accex2.next) { if(Max < accex2.acc2 - accex2.acc1) Max = accex2.acc2 - accex2.acc1; i++; fileoutputstream.write(("ENTRATA = " + incolonna(accex2.acc1) + "\t\t").getBytes()); fileoutputstream.write(("USCITA = " + incolonna(accex2.acc2) + "\t\t").getBytes()); fileoutputstream.write(("TEMPO di ESECUZIONE = " + incolonna(accex2.acc2 - accex2.acc1) + "\n").getBytes()); j += accex2.acc2 - accex2.acc1; } tempomedio = (double)j / (double)i; fileoutputstream.write(("\nTOTALE TEMPI DI ESECUZIONE = " + j + "\n").getBytes()); fileoutputstream.write(("NUMERO DI PROCESSI = " + i + "\n\nTEMPO MEDIO DI ESECUZIONE = ").getBytes()); fileoutputstream.write((tempomedio + "\nTEMPO MEDIO DI ATTESA = " + (tempomedio - 1.0D)).getBytes()); fileoutputstream.close(); } catch(IOException _ex) { } myvett = new int[i]; for(int k = 0; k < i; k++) { myvett[k] = accex1.acc2 - accex1.acc1; accex1 = accex1.next; } if(s == "Mittenti") simulator.maxput = Max; else simulator.maxget = Max; dis = 476 / myvett.length; alt = 680 / Max; if(dis == 0) dis = 1; if(alt == 0) alt = 1; larghezza = dis * myvett.length; altezza = alt * Max; if(alt > 226) { alt = 226; altezza = alt * 3; } resize(35 + larghezza, altezza + 25); titolo = s; setTitle(s); if(!simulator.nograp) show(); } /* * METODO incolonna() * * incolonna i numeri interi * */ String incolonna(int i) { if(i > 99) return String.valueOf(i); if(i > 9) return " " + i; else return " " + i; } /* * METODO quante() * * restituisce la larghezza in pixel di rettangolo del grafico * */ private int quante() throws ArithmeticException { int i = 10 / alt; if(i == 0) i = 1; return i; } /* * METODO paint() * * stampa sullo schermo il grafico * */ public void paint(Graphics g) { if(entro) { if(titolo == "Mittenti") setBounds(0, 0, 35 + larghezza, altezza + 25); else setBounds(35 + larghezza, 0, 35 + larghezza, altezza + 25); entro = false; } col = 0; int i = 30 - dis; int j = quante(); for(int k = 0; 28 + altezza > k * alt; k += j) { if(k != 0) g.drawString(incolonna(k), 10, (28 + altezza) - k * alt); g.drawLine(30, (23 + altezza) - k * alt, larghezza + 35, (23 + altezza) - k * alt); } for(int l = 0; l < myvett.length; l++) { g.setColor(color[col++ % 10]); g.fillRect(i += dis, (23 + altezza) - myvett[l] * alt, dis, myvett[l] * alt); } g.setColor(Color.blue); int i1 = (int)(tempomedio * (double)alt); g.fillRect(30, (21 + altezza) - i1, larghezza + 35, 4); g.drawString("Tempo medio", larghezza - 70, (18 + altezza) - i1); } /* * METODO handleEvent(Event event) //RIDEFINIZIONE * * controlla gli eventi che succedono nelle finestra * */ public boolean handleEvent(Event event) { if(event.id == 201) // se si preme X { simulator.chiudi++; hide(); // chiude la finestra } return super.handleEvent(event); } /* * VARIABILI * */ Color color[]; int myvett[]; int Max; int col; int dis; int alt; int altezza; int larghezza; double tempomedio; String titolo; boolean entro; }