diff options
Diffstat (limited to 'pbfi/pbfi-1.1/src/Frame.java')
| -rwxr-xr-x | pbfi/pbfi-1.1/src/Frame.java | 209 |
1 files changed, 209 insertions, 0 deletions
diff --git a/pbfi/pbfi-1.1/src/Frame.java b/pbfi/pbfi-1.1/src/Frame.java new file mode 100755 index 0000000..906a16b --- /dev/null +++ b/pbfi/pbfi-1.1/src/Frame.java | |||
| @@ -0,0 +1,209 @@ | |||
| 1 | /* | ||
| 2 | Copyright 2009 Sebastiano Tronto <sebastiano@luganega.org> | ||
| 3 | |||
| 4 | This file is part of PBFI (Porky's Brain F*** Interpreter). | ||
| 5 | |||
| 6 | PBFI is free software; you can redistribute it and/or modify | ||
| 7 | it under the terms of the GNU General Public License as published by | ||
| 8 | the Free Software Foundation; either version 2 of the License, or | ||
| 9 | (at your option) any later version. | ||
| 10 | |||
| 11 | PBFI is distributed in the hope that it will be useful, | ||
| 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 14 | GNU General Public License for more details. | ||
| 15 | |||
| 16 | You should have received a copy of the GNU General Public License | ||
| 17 | along with PBFI; if not, write to the Free Software | ||
| 18 | Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | ||
| 19 | |||
| 20 | */ | ||
| 21 | |||
| 22 | import javax.swing.*; | ||
| 23 | import java.awt.BorderLayout; | ||
| 24 | import java.awt.event.*; | ||
| 25 | import java.io.*; | ||
| 26 | |||
| 27 | public class Frame extends JFrame { | ||
| 28 | public static int valoreChooser; | ||
| 29 | public static boolean firstSave; | ||
| 30 | public static String defaultSave; | ||
| 31 | public static Main main; | ||
| 32 | public static JTextArea textArea; | ||
| 33 | public static JButton runButton; | ||
| 34 | public static JMenuBar bar; | ||
| 35 | public static JMenu menuFile, menuAiuto; | ||
| 36 | public static JMenuItem esci, esegui, salva, salvaConNome, apri, info; | ||
| 37 | public static JFileChooser chooser; | ||
| 38 | public static FileInputStream in; | ||
| 39 | public static FileOutputStream out; | ||
| 40 | public Frame() { | ||
| 41 | super( "Porky's BrainF** Interpreter - v1.1" ); | ||
| 42 | firstSave = true; | ||
| 43 | main = new Main(); | ||
| 44 | defaultSave = ""; | ||
| 45 | chooser = new JFileChooser(); | ||
| 46 | textArea = new JTextArea( "Digitare qui il codice BrainF***", 15, 15 ); | ||
| 47 | bar = new JMenuBar(); | ||
| 48 | menuFile = new JMenu( "File" ); | ||
| 49 | menuAiuto = new JMenu( "?" ); | ||
| 50 | esci = new JMenuItem( "Esci" ); | ||
| 51 | esegui = new JMenuItem( "Esegui" ); | ||
| 52 | salva = new JMenuItem( "Salva" ); | ||
| 53 | salvaConNome = new JMenuItem( "Salva con nome" ); | ||
| 54 | apri = new JMenuItem( "Apri" ); | ||
| 55 | info = new JMenuItem( "Aiuto" ); | ||
| 56 | menuFile.setMnemonic( 'F' ); | ||
| 57 | menuAiuto.setMnemonic( '?' ); | ||
| 58 | esci.setMnemonic( 'E' ); | ||
| 59 | esegui.setMnemonic( 's' ); | ||
| 60 | salva.setMnemonic( 'a' ); | ||
| 61 | salvaConNome.setMnemonic( 'n' ); | ||
| 62 | apri.setMnemonic( 'p' ); | ||
| 63 | info.setMnemonic( 'i' ); | ||
| 64 | esci.addActionListener( | ||
| 65 | new ActionListener() { | ||
| 66 | public void actionPerformed ( ActionEvent e ) { | ||
| 67 | System.exit( 0 ); | ||
| 68 | } | ||
| 69 | } | ||
| 70 | ); | ||
| 71 | esegui.addActionListener( | ||
| 72 | new ActionListener() { | ||
| 73 | public void actionPerformed ( ActionEvent e ) { | ||
| 74 | main.run( textArea.getText() ); | ||
| 75 | } | ||
| 76 | } | ||
| 77 | ); | ||
| 78 | salva.addActionListener( | ||
| 79 | new ActionListener() { | ||
| 80 | public void actionPerformed ( ActionEvent e ) { | ||
| 81 | if ( firstSave ) { | ||
| 82 | valoreChooser = chooser.showSaveDialog( Frame.this ); | ||
| 83 | switch ( valoreChooser ) { | ||
| 84 | case JFileChooser.APPROVE_OPTION: | ||
| 85 | try { | ||
| 86 | out = new FileOutputStream( chooser.getSelectedFile().getPath() ); | ||
| 87 | defaultSave = chooser.getSelectedFile().getPath(); | ||
| 88 | char caratteri[]; | ||
| 89 | byte bytes[]; | ||
| 90 | caratteri = textArea.getText().toCharArray(); | ||
| 91 | bytes = new byte[caratteri.length]; | ||
| 92 | for ( int i = 0; i < caratteri.length; i++ ) | ||
| 93 | bytes[i] = ( byte ) caratteri[i]; | ||
| 94 | out.write( bytes ); | ||
| 95 | } catch ( Exception ex ) { | ||
| 96 | JOptionPane.showMessageDialog( Frame.this, "Errore sconosciuto:\n\n" + ex + "\n\nPer favore riportare il bug a sebastiano@luganega.org", "Errore", JOptionPane.ERROR_MESSAGE ); | ||
| 97 | } | ||
| 98 | break; | ||
| 99 | case JFileChooser.ERROR_OPTION: | ||
| 100 | JOptionPane.showMessageDialog( Frame.this, "Errore sconosciuto:\n\n" + e + "\n\nPer favore riportare il bug a sebastiano@luganega.org", "Errore", JOptionPane.ERROR_MESSAGE ); | ||
| 101 | break; | ||
| 102 | //case JFileChooser.CANCEL_OPTION: | ||
| 103 | } | ||
| 104 | firstSave = false; | ||
| 105 | } else { | ||
| 106 | try { | ||
| 107 | out = new FileOutputStream( defaultSave ); | ||
| 108 | char caratteri[]; | ||
| 109 | byte bytes[]; | ||
| 110 | caratteri = textArea.getText().toCharArray(); | ||
| 111 | bytes = new byte[caratteri.length]; | ||
| 112 | for ( int i = 0; i < caratteri.length; i++ ) | ||
| 113 | bytes[i] = ( byte ) caratteri[i]; | ||
| 114 | out.write( bytes ); | ||
| 115 | } catch ( Exception ex ) { | ||
| 116 | JOptionPane.showMessageDialog( Frame.this, "Errore sconosciuto:\n\n" + ex + "\n\nPer favore riportare il bug a sebastiano@luganega.org", "Errore", JOptionPane.ERROR_MESSAGE ); | ||
| 117 | } | ||
| 118 | } | ||
| 119 | } | ||
| 120 | } | ||
| 121 | ); | ||
| 122 | salvaConNome.addActionListener( | ||
| 123 | new ActionListener() { | ||
| 124 | public void actionPerformed ( ActionEvent e ) { | ||
| 125 | valoreChooser = chooser.showSaveDialog( Frame.this ); | ||
| 126 | switch ( valoreChooser ) { | ||
| 127 | case JFileChooser.APPROVE_OPTION: | ||
| 128 | try { | ||
| 129 | out = new FileOutputStream( chooser.getSelectedFile().getPath() ); | ||
| 130 | defaultSave = chooser.getSelectedFile().getPath(); | ||
| 131 | char caratteri[]; | ||
| 132 | byte bytes[]; | ||
| 133 | caratteri = textArea.getText().toCharArray(); | ||
| 134 | bytes = new byte[caratteri.length]; | ||
| 135 | for ( int i = 0; i < caratteri.length; i++ ) | ||
| 136 | bytes[i] = ( byte ) caratteri[i]; | ||
| 137 | out.write( bytes ); | ||
| 138 | } catch ( Exception ex ) { | ||
| 139 | JOptionPane.showMessageDialog( Frame.this, "Errore sconosciuto:\n\n" + ex + "\n\nPer favore riportare il bug a sebastiano@luganega.org", "Errore", JOptionPane.ERROR_MESSAGE ); | ||
| 140 | } | ||
| 141 | break; | ||
| 142 | case JFileChooser.ERROR_OPTION: | ||
| 143 | JOptionPane.showMessageDialog( Frame.this, "Errore sconosciuto:\n\n" + e + "\n\nPer favore riportare il bug a sebastiano@luganega.org", "Errore", JOptionPane.ERROR_MESSAGE ); | ||
| 144 | break; | ||
| 145 | //case JFileChooser.CANCEL_OPTION: | ||
| 146 | } | ||
| 147 | firstSave = false; | ||
| 148 | } | ||
| 149 | } | ||
| 150 | ); | ||
| 151 | apri.addActionListener( | ||
| 152 | new ActionListener() { | ||
| 153 | public void actionPerformed ( ActionEvent e ) { | ||
| 154 | valoreChooser = chooser.showOpenDialog( Frame.this ); | ||
| 155 | switch ( valoreChooser ) { | ||
| 156 | case JFileChooser.APPROVE_OPTION: | ||
| 157 | try { | ||
| 158 | String stringa; | ||
| 159 | byte bytes[]; | ||
| 160 | char caratteri[]; | ||
| 161 | in = new FileInputStream( chooser.getSelectedFile().getPath() ); | ||
| 162 | bytes = new byte[in.available()]; | ||
| 163 | caratteri = new char[in.available()]; | ||
| 164 | in.read( bytes ); | ||
| 165 | for ( int i = 0; i < bytes.length; i++ ) | ||
| 166 | caratteri[i] = ( char ) bytes[i]; | ||
| 167 | stringa = new String( caratteri ); | ||
| 168 | textArea.setText( stringa ); | ||
| 169 | } catch ( Exception ex ) { | ||
| 170 | JOptionPane.showMessageDialog( Frame.this, "Errore sconosciuto:\n\n" + ex + "\n\nPer favore riportare il bug a sebastiano@luganega.org", "Errore", JOptionPane.ERROR_MESSAGE ); | ||
| 171 | } | ||
| 172 | break; | ||
| 173 | case JFileChooser.ERROR_OPTION: | ||
| 174 | JOptionPane.showMessageDialog( Frame.this, "Errore sconosciuto:\n\n" + e + "\n\nPer favore riportare il bug a sebastiano@luganega.org", "Errore", JOptionPane.ERROR_MESSAGE ); | ||
| 175 | break; | ||
| 176 | //case JFileChooser.CANCEL_OPTION: | ||
| 177 | } | ||
| 178 | } | ||
| 179 | } | ||
| 180 | ); | ||
| 181 | info.addActionListener( | ||
| 182 | new ActionListener() { | ||
| 183 | public void actionPerformed ( ActionEvent e ) { | ||
| 184 | JOptionPane.showMessageDialog( Frame.this, "Brainfuck è un linguaggio di programmazione esoterico per computer,\ncreato da Urban Müller intorno al 1993. Il linguaggio viene\nin taluni casi denominato Brainf*ck, Brainf***\no anche soltanto BF per evitare di offendere\nla sensibilità altrui.\nNella cartella src trovate alcuni esempi di programmi in questo linguaggio.\n\nPer maggiori informazioni visitate la pagina:\nhttp://it.wikipedia.org/wiki/Brainfuck", "BrainF*** - Informazioni", JOptionPane.INFORMATION_MESSAGE ); | ||
| 185 | } | ||
| 186 | } | ||
| 187 | ); | ||
| 188 | menuFile.add( esegui ); | ||
| 189 | menuFile.add( salva ); | ||
| 190 | menuFile.add( salvaConNome ); | ||
| 191 | menuFile.add( apri ); | ||
| 192 | menuFile.add( esci ); | ||
| 193 | menuAiuto.add( info ); | ||
| 194 | bar.add( menuFile ); | ||
| 195 | bar.add( menuAiuto ); | ||
| 196 | runButton = new JButton( "Esegui" ); | ||
| 197 | runButton.addActionListener( | ||
| 198 | new ActionListener() { | ||
| 199 | public void actionPerformed( ActionEvent e ) { | ||
| 200 | main.run( textArea.getText() ); | ||
| 201 | } | ||
| 202 | } | ||
| 203 | ); | ||
| 204 | setLayout( new BorderLayout() ); | ||
| 205 | setJMenuBar( bar ); | ||
| 206 | add( new JScrollPane( textArea ), BorderLayout.CENTER ); | ||
| 207 | add( runButton, BorderLayout.SOUTH ); | ||
| 208 | } | ||
| 209 | } \ No newline at end of file | ||
